资源描述
AutoCAD 关于关于“多重插入引用多重插入引用”(多重块)的分解(多重块)的分解 今天上班遇到一个棘手的问题,由设计院发的 CAD 图打开后显示为一整个块,用“”命令分解不了,命令行显示“为多重插入引用”。经过在网上搜寻,终于解决了问题。引用如下:【图形被加密的解锁方法】将下面的代码复制在记事本内,另存为 unlk.lsp 文件,打开这张不能修改的图纸,命令 appload 选择加载程序文件 unlk.lsp,命令行键入 unlk,选择不能修改的图形。(defun c:unlk(/en ent)(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)1.1.1 CAD 多重插入引用 炸开方法 2009-10-20 11:29:15|分类:默认分类|标签:|字号大中小 订阅 把以下内容保存为 lsp 文件(如 exm.lsp),加载后运行 exm 既可把“多重插入块”转换为“普通块”,然后既可用“explode”分解。加载后运行 lockb 可把“普通块”转换为“多重插入块”(DEFUN C:exm()(setvar cmdecho 0)(SETQ STM(car(ENTSEL n 点取多重块)(while stm(setq e(entget stm)(setq stlx(cdr(assoc 0 e)(if(=stlx INSERT)(PROGN(setq r_zm70(assoc 70 e)(setq c_zm71(assoc 71 e)(setq r_dist_zm44(assoc 44 e)(setq c_dist_zm45(assoc 45 e)(setq e(subst(cons 44 0)r_dist_zm44 e)(setq e(subst(cons 45 0)c_dist_zm45 e)(setq e(subst(cons 70 0)r_zm70 e)(setq e(subst(cons 71 0)c_zm71 e)(setq e(subst(list 100AcDbBlockReference)(list 100AcDbMInsertBlock)e)(entmake e)(entdel stm)(SETQ STM(car(ENTSEL n 点取下一多重块)(setvar cmdecho 1);-;转换“普通块”为“多重插入块”(DEFUN C:lockb()(setvar cmdecho 0)(SETQ STM(car(ENTSEL n 点取块)(while stm(setq e(entget stm)(setq stlx(cdr(assoc 0 e)(if(=stlx INSERT)(PROGN(setq r_zm70(assoc 70 e)(setq c_zm71(assoc 71 e)(setq e(subst(cons 70 1)r_zm70 e)(setq e(subst(cons 71 1)c_zm71 e)(setq e(subst(list 100AcDbMInsertBlock)(list 100AcDbBlockReference)e)(entmake e)(entdel stm)(SETQ STM(car(ENTSEL n 点取下一块)(setvar cmdecho 1)2 使用“exm.lsp”解密或加密为“多重插入块”目前很多 CAD 图件运用“插入多重插入块”的方法,加密,造成部分图件中的块,无法炸开,网上游很多破解方法,现将自编 lsp 程序的方法罗列如下,希望对大家有帮助。把以下内容保存为 lsp 文件(如 exm.lsp),加载后运行 exm 既可把“多重插入块”转换为“普通块”,然后既可用“explode”分解。加载后运行 lockb 可把“普通块”转换为“多重插入块”lsp 源代码:;-;转换“多重插入块”为“普通块”。(DEFUN C:exm()(setvar cmdecho 0)(SETQ STM(car(ENTSEL n 点取多重块)(while stm(setq e(entget stm)(setq stlx(cdr(assoc 0 e)(if(=stlx INSERT)(PROGN(setq r_zm70(assoc 70 e)(setq c_zm71(assoc 71 e)(setq r_dist_zm44(assoc 44 e)(setq c_dist_zm45(assoc 45 e)(setq e(subst(cons 44 0)r_dist_zm44 e)(setq e(subst(cons 45 0)c_dist_zm45 e)(setq e(subst(cons 70 0)r_zm70 e)(setq e(subst(cons 71 0)c_zm71 e)(setq e(subst(list 100AcDbBlockReference)(list 100AcDbMInsertBlock)e)(entmake e)(entdel stm)(SETQ STM(car(ENTSEL n 点取下一多重块)(setvar cmdecho 1);-;转换“普通块”为“多重插入块”(DEFUN C:lockb()(setvar cmdecho 0)(SETQ STM(car(ENTSEL n 点取块)(while stm(setq e(entget stm)(setq stlx(cdr(assoc 0 e)(if(=stlx INSERT)(PROGN(setq r_zm70(assoc 70 e)(setq c_zm71(assoc 71 e)(setq e(subst(cons 70 1)r_zm70 e)(setq e(subst(cons 71 1)c_zm71 e)(setq e(subst(list 100AcDbMInsertBlock)(list 100AcDbBlockReference)e)(entmake e)(entdel stm)(SETQ STM(car(ENTSEL n 点取下一块)(setvar cmdecho 1);-如果不愿弄,下面有现成的,请大家试用。支持 Win7,CAD2010。炸开“多重插入引用”的方法以及制作1.“多重插入引用”的制作:用 minsert 命令,提示块名,在 cad 工作目录下找一张图,键入这个图名,然后到提示行数或列数时,输入 2 以上,但行距或列距输入 0。这样一个多重插入引用制作完成,无法用 explode 炸开了。多重块不是重复定义块,而是在矩形阵列中插入一个块的多重引用。多重块是由命令 minsert 插入一个块而形成,其在正常情况下不能被分解。但若是用普通的方法构建的多重块,可以删除掉,然后用 insert 再插入它原来引用的块即可。不过,若它原来引用的块是匿名块(即名称前带*的块,只能用程序构建),就不是那么简单的了。这是,你就需要程序(或者说插件)来还原。vlx 程序就是一个插件。也就是我上面说的编程实现。若不会编程,也没有插件,下面的方法四(方法三也可以实现)。2.炸开方法如下:方法一:点击这个多重引用,看它的名字,然后再用 minsert 命令,插入这个名字,只不过都按默认的行数(1 行)列数一直回车。这样插入的这个块就可以炸开了。方法二:双击这个块,出现参照编辑对话框,点确定,出现参照编辑工具条;用 explode 炸开;然后点击参照编辑工具条从工作集删除对象,选中所有图形,回车;再点击参照编辑工具条上的放弃对参照的修改。此时再用 explode 就可以炸开了。方法三:1、打开原文件后,输出为*.wmf 文件,2、新建空*.DWG 文件,插入*.wmf 文件,3、输入另外一个炸开命令:xplode 回车4、选图层(TA),大功告成。可惜的是文字都炸开了,填充也炸了,图层只有一个,而且文件比较大。附件为 wmf 文件 方法四:1、在任何版本中打开图件(只要能打的开就行)2、选中图,打开属性对话框,将行和列均改为 1。3、另存为 R14 以下(包括 R14)版本格式。4、打开 R14,打开刚才另存的图,保存。(记住,这步尤其重要,必须是 R14 不能是 cad2002 及以上版本)好了,你再用任何版本的 cad 打开看看。另外一种方法就是编程,直接炸开即可。
展开阅读全文