明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3347|回复: 6

[提问] 怎样让程序可以先选择实体再执行

[复制链接]
发表于 2017-9-14 11:47:40 | 显示全部楼层 |阅读模式
这段程序来自哪位老兄之手已找不到出处,在此实在抱歉!如因转发源码而产生纠纷,还请管理人员删除此提问贴.
先说问题点:程序很好使,但只能先输入命令,再选择对象;
                   在这请教各位前辈能否将它修改成无论是先输入命令还是先选择实体都可以执行
小白在此先谢过各位大侠!!!

;; 命令: CX
;; 思路: 1. 选择对象
;;       2. 复制对象
;;       3. 旋转对象
(defun C:CX (/ E PT SS SS1)
  (princ "\n复制旋转")
  (command "_.undo" "_group")
  (while (and (setq E (entlast))
              (setq SS (ssget))
              (setq SS1 (ssadd))
         )
    (progn
      (command "_.COPY" SS "")
      (while (= (getvar "CMDNAMES") "COPY")
        (command PAUSE)
      )
      (while (setq E (entnext E))
        (ssadd E SS1)
      )
      (if (setq PT (getvar "LASTPOINT"))
        (progn
          (command "_.ROTATE" SS1 "" "_NON" PT)
          (while (= (getvar "CMDNAMES") "ROTATE")
            (command PAUSE)
          )
        )
      )
    )
  )
  (command "_.undo" "_end")
  (princ)
)
发表于 2017-9-14 12:24:07 | 显示全部楼层
发表于 2017-9-14 12:41:51 来自手机 | 显示全部楼层
(command "_.undo" "_group")
发表于 2017-9-14 12:42:06 来自手机 | 显示全部楼层
放在ssget后面
 楼主| 发表于 2017-9-14 13:10:59 | 显示全部楼层

多谢指点,,改成下面这样了,貌似达到要求了,但是不知道这样改是不是最合理的,还请帮忙审一下,也好让我多长点见识
(defun C:CX (/ E PT SS SS1)
   (princ "\n复制旋转")
   (while (and (setq E (entlast))
               (setq SS (ssget))
               (setq SS1 (ssadd))
          )
   (command "_.undo" "_group")
发表于 2017-9-15 09:46:52 | 显示全部楼层
应把(command "_.undo" "_end")放到while循环体内,这样多次复制时,想撤消时不需要多按一次ctrl+Z
(defun C:CX (/ E PT SS SS1)
  (princ "\n复制旋转")
  ;;(command "_.undo" "_group")
  (while (and (setq E (entlast))
              (setq SS (ssget))
              (setq SS1 (ssadd))
         )
                (command "_.undo" "_group")
    (progn
      (command "_.COPY" SS "")
      (while (= (getvar "CMDNAMES") "COPY")
        (command PAUSE)
      )
      (while (setq E (entnext E))
        (ssadd E SS1)
      )
      (if (setq PT (getvar "LASTPOINT"))
        (progn
          (command "_.ROTATE" SS1 "" "_NON" PT)
          (while (= (getvar "CMDNAMES") "ROTATE")
            (command PAUSE)
          )
        )
      )
    )
        (command "_.undo" "_end");;把这句移到这里
  )
  ;(command "_.undo" "_end")
  (princ)
)
 楼主| 发表于 2017-9-15 10:26:34 | 显示全部楼层
clh521 发表于 2017-9-15 09:46
应把(command "_.undo" "_end")放到while循环体内,这样多次复制时,想撤消时不需要多按一次ctrl+Z
(defun ...

果然还有更好的方法,,多谢指点,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 02:42 , Processed in 0.188805 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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