tranney 发表于 2014-8-8 10:20:36

如何改造一下这个命令让它支持先选择物体,然后执行啊

;---------- 将所选对象设置为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)
   )

lijiao 发表于 2014-8-8 10:39:05

在用ssget函数前不要用command函数
或者把command函数改成vla-开头的函数

luowy 发表于 2014-8-8 11:46:36

本帖最后由 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:51

试验无效,

luowy 发表于 2014-8-9 18:10:39

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)
)

luowy 发表于 2014-8-9 18:11:24

要不,来学arx吧,比arx好多了。。。

tranney 发表于 2014-8-9 21:43:08

还是不行啊,arx局限性太强了,cad每个版本都要重新编译,不像lsp那样通用性,r2000以上都可以用

ZZXXQQ 发表于 2014-8-10 08:04:00

本帖最后由 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)
)

tranney 发表于 2014-8-10 09:02:41

ZZXXQQ 发表于 2014-8-10 08:04 static/image/common/back.gif


谢谢zzxxqq出手,不过还是有点问题,先选不行哦

edata 发表于 2014-8-10 09:28:46

(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
查看完整版本: 如何改造一下这个命令让它支持先选择物体,然后执行啊