如何改造一下这个命令让它支持先选择物体,然后执行啊
;---------- 将所选对象设置为def层 线型不变(defun c:def()
(PRINC "\n---将所选对象设置为defpoints层,属性随层")(PRINC)
(command "layer" "m" "defpoints" "c" "magenta" "" "set" "0" "c" "7" "" "")
(while(setq a (ssget":s"))
(setvar "cmdecho" 0)
(command "change" a "" "p" "c" "bylayer""la" "defpoints" "lw" "bylayer" "")
)
(command "clayer" "0")
(princ "\n所选地方-->设置所选对象设置为defpoints层,属性随层!")
(princ)
)
在用ssget函数前不要用command函数
或者把command函数改成vla-开头的函数 本帖最后由 luowy 于 2014-8-8 11:49 编辑
好像是,ssgetfirst,是将当前选择的实体加入选择集。注意返回值,第一个是肯定返回nil,第二个才是选择集;---------- 将所选对象设置为def层 线型不变
(defun c:def()
(PRINC "\n---将所选对象设置为defpoints层,属性随层")(PRINC)
(command "layer" "m" "defpoints" "c" "magenta" "" "set" "0" "c" "7" "" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;这里增加
(SETQ SS (cadr SSGETFIRST ));;好像是cadr取得列表第二个元素
;;这里ss就是当前选择的部分,之后就好办咯,略去了
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(while(setq a (ssget":s"))
(setvar "cmdecho" 0)
(command "change" a "" "p" "c" "bylayer""la" "defpoints" "lw" "bylayer" "")
)
(command "clayer" "0")
(princ "\n所选地方-->设置所选对象设置为defpoints层,属性随层!")
(princ)
)
试验无效, tranney 发表于 2014-8-9 12:04 static/image/common/back.gif
试验无效,
唉,你太懒了。。。
;---------- 将所选对象设置为def层 线型不变
(defun c:222 ()
(PRINC "\n---将所选对象设置为defpoints层,属性随层")
(PRINC)
(setq oldLayerName (getvar "clayer"))
(setvar "clayer" "defpoints")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;这里增加
(SETQ SS (cadr (SSGETFIRST)))
;;好像是cadr取得列表第二个元素;;这里ss就是当前选择的部分,之后就好办咯,略去了
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(while (setq a (ssget ":s"))
(setvar "cmdecho" 0)
(command "change"a "" "p" "c"
"bylayer" "la" "defpoints" "lw"
"bylayer" ""
)
)
;; (command "clayer" "0")
(setvar "clayer" oldLayerName)
(princ
"\n所选地方-->设置所选对象设置为defpoints层,属性随层!"
)
(princ)
)
要不,来学arx吧,比arx好多了。。。 还是不行啊,arx局限性太强了,cad每个版本都要重新编译,不像lsp那样通用性,r2000以上都可以用 本帖最后由 ZZXXQQ 于 2014-8-10 20:59 编辑
(defun c:def()
(setvar "cmdecho" 0)
(princ "\n---将所选对象设置为defpoints层,属性随层")
(setq ss (cadr (ssgetfirst)))
(command "layer" "m" "defpoints" "c" "magenta" "" "set" "0" "c" "7" "" "")
(while (or ss (setq ss (ssget ":s")))
(command "chprop" ss "" "c" "bylayer" "la" "defpoints" "lw" "bylayer" "")
(setq ss nil)
)
(command "clayer" "0")
(setvar "CMDECHO" 1)
(princ "\n所选地方-->设置所选对象设置为defpoints层,属性随层!")
(princ)
)
ZZXXQQ 发表于 2014-8-10 08:04 static/image/common/back.gif
谢谢zzxxqq出手,不过还是有点问题,先选不行哦 (defun c:def()
(setvar "cmdecho" 0)
(princ "\n---将所选对象设置为defpoints层,属性随层")
(setq ss (cadr (ssgetfirst)))
(command "layer" "m" "defpoints" "c" "magenta" "" "set" "0" "c" "7" "" "")
(while (or ss (setq ss (ssget ":s")))
(command "chprop" ss "" "c" "bylayer" "la" "defpoints" "lw" "bylayer" "")
(setq ss nil)
)
(command "clayer" "0")
(setvar "CMDECHO" 1)
(princ "\n所选地方-->设置所选对象设置为defpoints层,属性随层!")
(princ)
)
页:
[1]
2