1、解决多重插入块无法分解的问题 2012-10-22 10:27:53| 分类: cad 相关 | 标签:cad 多重插入块 分解 |举报|字号 订阅工作中遇到了无法分解的“多重插入块”的问题,正当准备纯手工绘制原图的时候,尝试百度,得到了以下的办法并解决了问题,幸哉。将下面的代码复制在记事本内,将 txt 文件另存为 unlk.lsp 文件,打开这张不能修改的图纸,在命令行输入 appload 选择加载程序文件 unlk.lsp,命令行键入unlk,再选择不能修改的图块。 。 。ps,有的打散一次后,依然有些小图加密的,就可以小部分的打散,步骤同上 (defun c:unlk (/ en en
2、t)(setq en (entsel “n 请选择被加密的图形:“)(if en(if (= (cdr (assoc 0 (setq ent (cdr (entget (setq en (car en)“INSERT“)(progn(setq ent (entmakex(list (0 . “INSERT“)(assoc 2 ent)(assoc 10 ent)(command “_.explode“ (entlast)(entdel en)(princ “nOK,解密成功。“)(princ)什么是多重块?AUTOCAD 为了省内存,省空间,提高效率,引进了块引用这一技术。你在当前图纸空间插入
3、一个块,它并不是把这个块复制一遍,而是把这个块的一些属性描述引过来,跟 C+里面的引用极像。我现在讨论的不是引用是怎么实现的,AUTOCAD 最大的重头就是块,大家肯定是很了解的。 我想说的是今天我和老韩研究的一个东西,AcDbMInsertBlock -多重插入块。它其实就是对块引用派生过来的一个新的东西,比普通块引用多了几个属性。具体是多了列数,行数,列距,行距。它可以用在什么地方呢?比如你现在要插入四个一样的块,就是位置不一样,用普通的块引用的话,要引四次。这样还是很占资源的,效率不高。而如果用 AcDbMInsertBlock ,你可以定义一个2列 2行,多个插入点的 AcDbMIns
4、ertBlock 。AUTOCAD 内部并没有复制多份引用,我写程序进去把 AcDbMInsertBlock 里面的每一个实体拷贝出来了,发现只有一份。当然你不能炸开 AcDbMInsertBlock ,如果可以炸开你就可以发现我说的肯定是对的。多重插入块还有一个很有趣的是,它可以用来做加密,当然很容易破解掉的。大家都知道,无名块是不能够编辑的,所以可以用下面的步骤就可以生成一个只能看不能改的图。 1) 、把整个图作成一个块。 2) 、把当前图纸空间的实体删除了,用 Minsert 把刚才那个块插入。 3) 、把刚才那个块的块名改成 *U。 到现在,这个图不能分解,也不能编辑了,呵呵。当然破解
5、非常简单的,一个最直接的是把这个多重插入块转成单插入块,然后炸开。还有一个就是把块表名字改了,这样就可以编辑块了。当然,你可以作得复杂一点,进入块表记录,把里面每个实体克隆一遍。 “多重插入引用”的制作:用 minsert命令,提示块名,在 cad 工作目录下找一张图,键入这个图名,然后到提示行数或列数时,输入2 以上,但行距或列距输入 0。这样一个多重插入引用制作完成,无法用 explode 炸开了。多重块不是重复定义块,而是在矩形阵列中插入一个块的多重引用。多重块是由命令 minsert 插入一个块而形成,其在正常情况下不能被分解。但若是用普通的方法构建的多重块,可以删除掉,然后用 insert 再插入它原来引用的块即可。不过,若它原来引用的块是匿名块(即名称前带*的块,只能用程序构建) ,就不是那么简单的了。这是,你就需要程序(或者说插件)来还原。vlx 程序就是一个插件。也就是我上面说的编程实现。若不会编程,也没有插件,下面的方法可以实现。