fire9527 发表于 2013-1-27 10:43:49

能不能将移动后的物体复制到移动前的位置?

有时候会不小心将复制的快捷键按成移动,这时往往通过撤销,然后重新找基点复制,感觉好麻烦,在误将复制弄成移动后能不能通过程序把移动的图元复制到之前的位置?

Gu_xl 发表于 2013-1-27 10:43:50

解决方案:

;;命令反应器
(or *cmdvlr*
    (setq *cmdvlr* (vlr-command-reactor
                     nil
                     '((:vlr-commandWillStart . cmdstart))
                   )
    )
)
;;数据库反应器
(or *acdbvlr*
    (setq *acdbvlr* (vlr-acdb-reactor
                      nil
                      '((:VLR-objectModified . acdbstart))
                  )
    )
)
;;命令开始反应器回调函数
(defun cmdstart        (vlr lst)
(if (= "MOVE" (car lst))
    (setq *MOVE_Start* t ;_ 设置启动MOVE命令标志
          *MOVE_Obj*   nil ;_ 清空MOVE的对象图元名列表
    )
)
)

;;数据库反应器回调函数
(defun acdbstart (vlr obj)
(if *MOVE_Start*
    (setq *MOVE_Obj*
           (append *MOVE_Obj* (mapcar 'entget (cdr obj))) ;_ 移动对象图元名列表
    )
)
)
;;用此命令实现复制移动的图元
(defun c:bakmove (/ cmdecho)
(setq cmdecho (getvar 'cmdecho))
(setvar 'cmdecho 0)
(if *MOVE_Obj*
    (progn
      (command "undo" "")
      (foreach a *MOVE_Obj*
        (entmake a)
      )
    )
)
(setq *MOVE_Obj* nil)
(setvar 'cmdecho cmdecho)
(princ)
)

fire9527 发表于 2013-1-27 15:38:22

自己顶一下

tianquan3 发表于 2013-1-27 15:55:27

基础操作要加强,CAD默认上一次选择为P,这样不需要再次选择物体,还有建议修改快捷键。

fire9527 发表于 2013-1-27 16:16:09

tianquan3 发表于 2013-1-27 15:55 static/image/common/back.gif
基础操作要加强,CAD默认上一次选择为P,这样不需要再次选择物体,还有建议修改快捷键。

用p响应这个我知道,我习惯将移动和复制快捷键放在相邻的位置

Gu_xl 发表于 2013-1-27 18:21:16

本帖最后由 Gu_xl 于 2013-1-27 18:45 编辑

使用反应器,应改可以实现吧!

fire9527 发表于 2013-1-28 09:13:25

Gu_xl 发表于 2013-1-27 18:21 static/image/common/back.gif
使用反应器,应改可以实现吧!

问题解决了,效果非常好!谢谢Gu_xl 版主!
页: [1]
查看完整版本: 能不能将移动后的物体复制到移动前的位置?