找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 777|回复: 5

[LISP程序]:多重复制,复制过程中可逐步撤消!

[复制链接]
发表于 2004-10-24 17:32:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(defun c:MC ( / en enlast n p p0 slen ss sserase yesno)
        (princ "\nSelect objects: ")
        (setq ss (ssget)
                                slen (sslength ss)
                                sserase (ssadd)
        )
        (setq p0 (getpoint "Base Point:"))
        (while (progn
                                         (initget 7 "undoX  ")
                                         (setq p (getpoint "\nundoX/Enter/<Point>:"))
                                         (cond
                                                 ((= 'list (type p))
                                                         (setq enlast (entlast))
                                                         (command "copy" ss "" p0 p)
                                                         (repeat slen
                                                                 (setq en (entnext enlast)
                                                                                         enlast en
                                                                 )
                                                                 (ssadd en sserase)
                                                         )
                                                         (setq yesno t)
                                                 )
                                                 ((= "undoX" p)
                                                          (if (/= 0 (sslength sserase))
                                                                 (progn
                                                                         (repeat slen
                                                                                 (setq n (sslength sserase))
                                                                                 (command "erase" (ssname sserase (1- n)) "")
                                                                                 (ssdel (ssname sserase (1- n)) sserase)
                                                                         )
                                                                 )
                                                                 (alert "不能再撤销了!")
                                                         )
                                                         (setq yesno t)
                                                 )
                                                 ((= "" p)
                                                         (setq yesno nil)
                                                 )
                                         )
                                 )
                (princ)
        )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-24 19:27:09 | 显示全部楼层
不好使,又不能右键或者是空格退出!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

发表于 2004-10-24 20:28:38 | 显示全部楼层
有参考价值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-24 20:29:26 | 显示全部楼层
[php]
多谢 andyhua5240 的批评指正,改进了一下,可以逐步撤消,也可以一次性取消复制了!还有什么问题各位多提意见!
command: MC
选择对象: 选择后回车
Base Point: 指定复制基点
undoX / Cancel / Enter / <Point>: 指定要复制到的点或选择参数.
undoX - 删除上一次复制的图形;
Cancel - 取消复制并删除所有已经复制的图形;
Enter - 直接回车结束复制;

(defun c:MC ()
        (princ "\nSelect objects: ")
        (setq ss (ssget)
                                slen (sslength ss)
                                index 0
        )
        (setq p0 (getpoint "Base Point:"))
        (while (progn
                                         (initget 7 "undoX Cancel  ")
                                         (setq p (getpoint "\nundoX/Cancel/Enter/<Point>:"))
                                         (cond
                                                 ((= 'list (type p))
                                                         (command "copy" ss "" p0 p)
                                                         (setq index (1+ index)
                                                                                 yesno t
                                                         )
                                                 )
                                                 ((= "undoX" p)
                                                         (if (/= 0 index)
                                                                 (progn
                                                                         (repeat slen
                                                                                 (entdel (entlast))
                                                                         )
                                                                 )
                                                                 (alert "不能再撤消了!")
                                                         )
                                                         (setq index (1- index)
                                                                                 yesno t
                                                         )
                                                 )
                                                 ((= "Cancel" p)
                                                         (repeat (* index slen)
                                                                 (entdel (entlast))
                                                         )
                                                         (setq yesno nil)
                                                 )
                                                 ((= "" p)
                                                         (setq yesno nil)
                                                 )
                                         )
                                 )
                (princ)
        )
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-24 21:12:04 | 显示全部楼层
倒是给出了一个编程的思路,很好!这个程序的必要性倒是需要讨论的问题,copy m 如果undo不也可以吗,只是步子大了些
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-23 00:10:41 | 显示全部楼层
谢谢,如果能变写出一个多步redo 的程序更好,支持搂主。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 02:56 , Processed in 0.382911 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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