明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 303|回复: 7

[讨论] 这段更改对象图层的代码怎么使它也能够先选择后执行?

[复制链接]
发表于 2023-12-21 11:32 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 baoyizhu 于 2023-12-21 11:46 编辑

各位路过的编程高手,大家好!
这段代码是用来做图层切换和更改对象图层的,目前执行没有问题,但我希望它能够更完美,
我想它也能够先选择对象之后输入命令也能执行,现在的情况是当图层不存在的情况下,
先输入命令后选择对象无法完成更改对象图层,但是目标图层存在的话是没有问题的。
望热心朋友能够解答,谢谢!
另:这段代码是否还有优化的空间?比如更高效,更精简,兼容性好的代码?
因为我要设置15个常用图层,这就需要写15段这样的代码,我想应该可以将重复代码提炼出来,对需要变动的地方定义一个变量列表,然后只需设置15个快捷键命令就好,不知我这样的想法是否正确,请大家多多指教。

  1. (defun c:ge_qhtc01 ()
  2.   (setvar "cmdecho" 0)
  3.   (if (not (tblsearch "layer" "01"))
  4.     (progn (command "layer" "n" "01" "")
  5.      (command "layer" "c" 7 "01" "")
  6.     )
  7.   )          ;保证一定有01图层
  8.   (and
  9.     (if  (setq ss (ssget))    ;判断是否选择了对象
  10.       (command "change" ss "" "p" "la" "01" "p" "C" "bylayer" "")
  11.           ;是,对选择的对象执行图层转换
  12.       (progn (command "layer" "s" "01" "")
  13.        (princ "\n已将01层置为当前层")
  14.       )          ; 否,将01层置为当前层  
  15.     )
  16.   )
  17.   (princ)
  18. )




发表于 2023-12-21 11:32 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq i 1)
  3.   (repeat 66
  4.     (setq la (strcat (if (< i 10) "0" "" ) (itoa i))
  5.           tx (strcat "(defun c:c"
  6.                      la
  7.                      "(/)(setvar\"cmdecho\"0)(if(not(tblsearch\"layer\"\""
  8.                      la
  9.                      "\"))(command\"-layer\"\"n\"\""
  10.                      la
  11.                      "\"\"c\""
  12.                      (itoa i)
  13.                      "\""
  14.                      la
  15.                      "\"\"\"))(command\"-layer\"\"s\"\""
  16.                      la
  17.                      "\"\"\")(if(setq ss(ssget))(command\"chprop\"ss\"\"\"la\"\""
  18.                      la
  19.                      "\"\"C\"\"bylayer\"\"\"))(princ))"
  20.              )
  21.           i  (1+ i)
  22.     )
  23.     (eval (read tx))
  24.   )
  25.   (princ)
  26. )
回复

使用道具 举报

 楼主| 发表于 2023-12-21 14:20 | 显示全部楼层

院长太厉害了,代码可以写的这么精简,又完全实现了我的想法。
我稍加修改了一下,简化了命令,直接用数字做命令了,这就是我想要的。
  1. (defun c:tt ()
  2.   (setq i 1)
  3.   (repeat 66
  4.     (setq la (strcat (if (< i 10) "0" "" ) (itoa i))
  5.           tx (strcat "(defun c:"
  6.                      (itoa i)
  7.                      "(/)(setvar\"cmdecho\"0)(if(not(tblsearch\"layer\"\""
  8.                      la
  9.                      "\"))(command\"-layer\"\"n\"\""
  10.                      la
  11.                      "\"\"c\""
  12.                      (itoa i)
  13.                      "\""
  14.                      la
  15.                      "\"\"\"))(command\"-layer\"\"s\"\""
  16.                      la
  17.                      "\"\"\")(if(setq ss(ssget))(command\"chprop\"ss\"\"\"la\"\""
  18.                      la
  19.                      "\"\"C\"\"bylayer\"\"\"))(princ))"
  20.              )
  21.           i  (1+ i)
  22.     )
  23.     (eval (read tx))
  24.   )
  25.   (princ)
  26. )
回复

使用道具 举报

 楼主| 发表于 2023-12-21 16:35 | 显示全部楼层

院长,我参照你的代码改了一个更改颜色的程序,怎么都调试不成功,代码理解能力还是太差,烦请您再帮我修正一下,谢谢啦


  1. (defun c:tt ()
  2.   (setq i 1)
  3.   (repeat 255
  4.     (setq yanse (itoa i)
  5.     tx (strcat
  6.          "(defun c:S"yanse"(/)
  7.       (setvar\"cmdecho\"0)
  8.       (if (setq ss (ssget))
  9.         (command\"\"change\"\"ss\"\"\"\"\"p\"\"\"c\"\"\"yanse"\"\"\")
  10.        );if
  11. (princ)
  12.       )"
  13.        )
  14.     i  (1+ i)
  15.     )
  16.     (eval (read tx))
  17.   )
  18.   (princ)
  19. )

回复

使用道具 举报

发表于 2023-12-21 18:39 | 显示全部楼层
Try===>
(if (setq ss (ssget))
   (command \"chprop\" ss \"\" \"c\" yanse \"\")
);if

点评

原来是我用的change这个方式错了  发表于 2023-12-21 21:45
回复

使用道具 举报

发表于 2023-12-21 19:32 | 显示全部楼层
本帖最后由 xyp1964 于 2023-12-21 19:34 编辑
baoyizhu 发表于 2023-12-21 16:35
院长,我参照你的代码改了一个更改颜色的程序,怎么都调试不成功,代码理解能力还是太差,烦请您再帮我修 ...

  1. (defun c:tt ()
  2.   (setq i 1)
  3.   (repeat 255
  4.     (setq c(itoa i)
  5.           x(strcat"(defun c:S"c"(/)(setvar\"cmdecho\"0)(if(setq ss(ssget))(command\"chprop\"ss\"\"\"c\"\""c"\"\"\"))(princ))")
  6.           i(1+ i)
  7.     )
  8.     (eval (read x))
  9.   )
  10.   (princ)
  11. )
回复

使用道具 举报

 楼主| 发表于 2023-12-21 21:44 | 显示全部楼层

完美,,谢谢帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-11 16:24 , Processed in 0.143480 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表