jack093 发表于 2015-12-18 20:30:31

恢复被打碎的块

本帖最后由 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)
                        ))


开心68602 发表于 2020-9-27 02:38:05

老师:加载一楼的插件,使用时提示no function definition: SS_ADD-DEL,怎么解决?

tigcat 发表于 2021-7-17 23:15:39

支持楼主原创,也是首先在论坛提出这个创意的。

alexmai 发表于 2019-4-18 10:37:03

想不到还可以,破镜重圆,点赞

jack093 发表于 2015-12-18 20:33:23

本帖最后由 jack093 于 2015-12-23 08:47 编辑

(defun find_eq_ent

jack093 发表于 2015-12-18 20:39:17

本帖最后由 jack093 于 2015-12-18 20:44 编辑

lingduwx 发表于 2015-12-19 10:31:11

这个功能不错,顶一下

lidaxiu 发表于 2015-12-19 12:28:44

路过学习下

hoongdou 发表于 2015-12-19 12:53:34

不错。。。

jack093 发表于 2015-12-19 23:10:27

没有人感兴趣吗?
代码还有许多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)))

USER2128 发表于 2015-12-20 18:14:44

这个想法不错,支持楼主

429014673 发表于 2015-12-21 09:05:16

这个还是论坛中的第一贴

云往哪里飞 发表于 2015-12-21 09:51:30

支持楼主,好东西
页: [1] 2 3 4
查看完整版本: 恢复被打碎的块