恢复被打碎的块
本帖最后由 jack093 于 2015-12-23 08:51 编辑来往工作图中,经常有许多的块被打碎,文件变大而且变得很难使用,恢复这些块比打碎可难多了。
如果文件中这些块定义还在,可以遍历图中的块定义,匹配文件中的所有图元,将那些被打碎的块恢复。
如果快定义不在了,只能手动选择再匹配恢复。
这几天整蛊了一个,但是旋转和变比过的块匹配不了,几个计算位置点的函数算法有问题,另外非直线图元没有测试,也有问题,晒出了,希望矩阵高人出手。
(defun c:unex(/ ss1 chkss ssret pt blk blks s sec st n ss2 ang sc flag_scale fuzz pas p3 ang2 sc2 ss3)
;;
(setvar "cmdecho" 0)
(command "_.UNDO" "_GROUP")
(prompt "\n恢复许多被打碎的块。\n选择一组modal对象做块: ")
(if (setq ss1 (ssget))
(progn
(chkss ss1 nil)
(setq ssret (ssadd))
(setq pt (getpoint "\nbase point<anywhere>:\n"))
(if (null pt)
(setq pt (cdr (assoc 10 (entget (ssname ss1 0))))))
(setq blk (getstring "\nblock name<return to random>: "))
(setq s (getvar "DATE"))
(setq sec (* 86400.0 (- s (fix s))))
(setq blks 1)
(if(= blk "")
(setq blk (strcat "$_"(itoa (fix sec))))
)
(if (tblsearch "block" blk)
(progn
(setq st blk n 0)
(while (tblsearch "block" (strcat st (itoa n)))
(setq n (1+ n)))
(setq blk (strcat st (itoa n)))
))
(prompt "\n选择全部被打碎的块: ")
(if (setq ss2 (ssget))
(progn
(setq ang 0 sc 1)
(initget "1 2 3")
(setq flag_scale (getkword "1:固定比例,不旋转; 2:固定比例,可旋转; 3:可旋转可变比<1 固定比例,不旋转>:"))
(if (= flag_scale "2")
(setq ang nil sc 1)
(if (= flag_scale "3")
(setq ang nil sc nil)
))
老师:加载一楼的插件,使用时提示no function definition: SS_ADD-DEL,怎么解决? 支持楼主原创,也是首先在论坛提出这个创意的。 想不到还可以,破镜重圆,点赞 本帖最后由 jack093 于 2015-12-23 08:47 编辑
(defun find_eq_ent 本帖最后由 jack093 于 2015-12-18 20:44 编辑
这个功能不错,顶一下 路过学习下 不错。。。 没有人感兴趣吗?
代码还有许多bug,正在调试中
defun triangle_2_mrs(p1 p2 p3 p1a p2a /an sc x1 y1 x1a y1a x3 y3 x1s y1s ang13 d1s3 x3s y3s)
(setq an (- (angle p1a p2a)(angle p1 p2)))
(setq sc (/ (distance p1a p2a)(distance p1 p2))) 这个想法不错,支持楼主 这个还是论坛中的第一贴
支持楼主,好东西