找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 700|回复: 5

[求助] [求助]:请教一个拷贝关闭无法undo的问题

[复制链接]
发表于 2004-11-26 14:33:09 | 显示全部楼层 |阅读模式

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

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

×
史上够惨的事情之一
昨天画了一份施工图,密密麻麻有6,7千个实体
不小心拷贝了全部,所有梁柱、板筋、梁筋全部向右拷贝了200。
就在这个时候,acad莫名其妙退出,而且还自动存盘。
打开之后,一塌糊涂,采用了恢复备份文件啊之类都没有用。
不能undo。
呜呜,出图要紧,没有时间编程了。傻乎乎的删除了拷贝的东西。
太惨了。那些重叠的物体实在太多了。画acad以来最惨一次。
现在回想,是不是可以编lisp来完成这个工作。就是不知道这些新拷贝的
有没有什么特征是在原来的基础上递增的,比如handle之类?如果有
是不是可以实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-11-27 08:47:34 | 显示全部楼层
刚才写了一段程序,你试试,不敢保证完全正确。
[php](defun baseToDecimal (base val / pos power result tmp)   ;本段代码摘自明经通道
  (setq pos (1+ (strlen val))
           power
           -1
           result
           0
           val
           (strcase val)
  )
  (while (> (setq pos (1- pos)) 0)
    (setq result
           (+
             result
             (*        (if (> (setq tmp (ascii (substr val pos 1))) 64)
                  (- tmp 55)
                  (- tmp 48)
                )
                (expt base (setq power (1+ power)))
             )
           )
    )
  )
  result
)

(defun c:test (/ ss i sl len en ha)     ;主程序
  (setq        ss  (ssget "X")
        i   -1
        sl  nil
        len (sslength ss)
  )
  (repeat len
    (setq i  (1+ i)
          en (ssname ss i)
          ha (baseToDecimal 16 (cdr (assoc 5 (entget en))))
          sl (cons (list ha en) sl)
    )
  )
  (setq sl (vl-sort sl '(lambda (x y) (> (car x) (car y)))))
  (repeat (/ len 2)
    (entdel (cadar sl))
    (setq sl (cdr sl))
  )
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-27 18:31:17 | 显示全部楼层
太好了,测试成功,多谢。
看了半天,半懂不懂,请问我的理解对么?
程序中ha就是object的handle,那个basetodecimal是将16进制的数转变为
10进制的数,请问假如直接用16进制,这个“>”的比较是不是就不能进行?
这个vl-sort函数太好了,假如是Lisp就只能自己编
在最后那个(repeat (/len 2))是针对全部拷贝的恢复。
假如我是将一部分拷贝的话?我是否可以先查出拷贝的物体总数,将之/2
来设置这个数?

突然想到,顺便问一下,刚才采用设置断点学这个程序,发现在entget
en的时候,好像它就是按照建立的顺序倒序来选择物体,那我们能不能就在这一步entdel它?假如是这样的话,那么就不用vl-sort了?还是说entget不一定按照handle的顺序?

不好意思,说的有点颠三倒四,希望您能听明白:p,非常感谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-11-27 19:24:44 | 显示全部楼层
1.句柄(handle)是采用十六进制字符串显示出来的,对字符串也可以比较,但只是逐位进行的,字符串长度并不能对应于数值大小,比如:“123”<“13”。
2.以前没有仔细研究过句柄,只是凭感觉它是递加的,如果删除了实体,是否会补上?这些都没有仔细研究,也没有找过相关资料,所以说“不敢保证完全正确”。
3.你的情况是全部拷贝,所以采用1/2来判别,其实也只是一个约数,如果其中有无法选择的实体(比如空的文本等),结果也就会有一些差异了,好在总比手工删除好一些。同样对于部分复制,如果不知道数量,这个关系也就不成立了,考虑句柄还与子实体、已经删除实体及图形非实体元素有关,也不可以从句柄的数值进行计算。
4.之所以排序,是考虑句柄数值是递加的,但ssget的选择并不是按照句柄来进行的,选择集中的实体程序与句柄序列不完全相同。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 17:37 , Processed in 0.176804 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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