2023年12月7日发(作者:)
cad图纸炸开不了,提示:无法分解 TCH_PROTECT_ENTITY,
1.用修复打开文件
2.打开“工具”的“块编辑器”就可看到类似“TCH_PR"的块,(我的在最下面)那就是TCH_PROTECT_ENTITY锁住的东西,可以直接来编辑。
3.打开此块,复制……
CAD不能炸开,“1为多重插入引用”解决
CAD图打开后显示为一整个块,用“x”命令分解不了,命令行显示“1为多重插入引用”。经过在网上搜寻,终于解决了问题。引用如下:
将下面的代码复制在记事本内,另存为文件,打开这张不能修改的图纸,命令appload选择加载程序文件,命令行键入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)
)
以上这两个方法是针对某种加密的CAD文件 (1).cad图纸炸开不了,提示:无法分解TCH_PROTECT_ENTITY,
(2).CAD不能炸开,“1为多重插入引用”解决
只有在分解时出现这两种情况下才能风别用这两方法解决 如果是其他情况不一定能够解决
原文地址:教你怎么炸开cad图纸里的多重插入块作者:筑龙结构
首先打开记事本
复制下面的内容:
;;-------------------------------------------------------------
;;转换“多重插入块”为“普通块”。
(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 100"AcDbBlockReference") (list
100"AcDbMInsertBlock") 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 100"AcDbMInsertBlock") (list
100"AcDbBlockReference") e))
(entmake e)
(entdel stm)
))
(SETQ STM (car (ENTSEL "n点取下一块")))
)
(setvar "cmdecho" 1)
)
在CAD工具菜单中加载应用,然后再输入exm命令,即可用“explode”分解。
注意:记事本退出后,直接将文件名修改为;然后,再在CAD2010中操作。加载应用、选中刚刚命名的文件,加载成功后退出。接着在CAD命令栏输入exm命令,再输入explode命令,注意此时出现的鼠标为小方框,千万不能拉框选择而是直接点击出现的虚线图块就OK了。
解决多重插入块无法分解的问题
工作中遇到了无法分解的“多重插入块”的问题,正当准备纯手工绘制原图的时候,尝试百度,得到了以下的办法并解决了问题,幸哉。
将下面的代码复制在记事本内,将txt文件另存为文件,打开这张不能修改的图纸,在命令行输入appload选择加载程序文件,命令行键入unlk,再选择不能修改的图块。。。
ps,有的打散一次后,依然有些小图加密的,就可以小部分的打散,步骤同上
(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)
)
什么是多重块?
AUTOCAD为了省内存,省空间,提高效率,引进了块引用这一技术。你在当前图纸空间插入一个块,它并不是把这个块复制一遍,而是把这个块的一些属性描述引过来,跟C++里面的引用极像。我现在讨论的不是引用是怎么实现的,AUTOCAD最大的重头就是块,大家肯定是很了解的。
我想说的是今天我和老韩研究的一个东西,AcDbMInsertBlock -多重插入块。它其实就是对块引用派生过来的一个新的东西,比普通块引用多了几个属性。具体是多了列数,行数,列距,行距。它可以用在什么地方呢?比如你现在要插入四个一样的块,就是位置不一样,用普通的块引用的话,要引四次。这样还是很占资源的,效率不高。而如果用AcDbMInsertBlock ,你可以定义一个2列2行,多个插入点的AcDbMInsertBlock 。AUTOCAD内部并没有复制多份引用,我写程序进去把AcDbMInsertBlock 里面的每一个实体拷贝出来了,发现只有一份。当然你不能炸开AcDbMInsertBlock ,如果可以炸开你就可以发现我说的肯定是对的。
多重插入块还有一个很有趣的是,它可以用来做加密,当然很容易破解掉的。大家都知道,无名块是不能够编辑的,所以可以用下面的步骤就可以生成一个只能看不能改的图。
1)、把整个图作成一个块。
2)、把当前图纸空间的实体删除了,用Minsert把刚才那个块插入。
3)、把刚才那个块的块名改成*U。
到现在,这个图不能分解,也不能编辑了,呵呵。当然破解非常简单的,一个最直接的是把这个多重插入块转成单插入块,然后炸开。还有一个就是把块表名字改了,这样就可以编辑块了。当然,你可以作得复杂一点,进入块表记录,把里面每个实体克隆一遍。 “多重插入引用”的制作:用minsert命令,提示块名,在cad工作目录下找一张图,键入这个图名,然后到提示行数或列数时,输入2以上,但行距或列距输入0。这样一个多重插入引用制作完成,无法用explode炸开了。多重块不是重复定义块,而是在矩形阵列中插入一个块的多重引用。多重块是由命令minsert插入一个块而形成,其在正常情况下不能被分解。
但若是用普通的方法构建的多重块,可以删除掉,然后用insert再插入它原来引用的块即可。不过,若它原来引用的块是匿名块(即名称前带*的块,只能用程序构建),就不是那么简单的了。这是,你就需要程序(或者说插件)来还原。vlx程序就是一个插件。也就是我上面说的编程实现。若不会编程,也没有插件,下面的方法可以实现。
CAD中计算弧长的方法
DMX512
CAD多重插入引用 炸开方法(加密解密)
2009-09-12 13:08:21| 分类: AutoCad | 标签: |举报 |字号大中小 订阅
用微信 “扫一扫”
将文章分享到朋友圈。
用易信 “扫一扫”
将文章分享到朋友圈。
下载LOFTER客户端
CAD多重插入引用 炸开方法~【亲测】
现在越来越多的人 喜欢 加密图了。
多重插入引用就是 经常会使用的图纸加密技术,永远无法解开的死锁。
方法一:
有两个好工具,可以轻松炸开。一个是AutoCAD 快速加载 AutoLISP 文件:wjjm;另一个cad加密插件,请大家使用。
具体方法:
AutoCAD 快速加载 AutoLISP 文件wjjm的使用:用cad打开需要炸开的文件,将wjjm直接拖入cad窗口,命令行输入wjmm,回车后按提示操作即可。
操作步骤:① 于CAD中,选择:“工具”菜单→“加载应用程序”选项。
② 于对话框中选择文件“wjjm”,进行应用程序加载。
③ 于CAD命令行中,输入“wjjm”命令,然后选择需要保护的图块,随便点击即可取消保护。
方法二:
输入“CYN-”,将多重插入块转换为普通快,然后可以炸开编辑
方法三:
把以下内容保存为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 100"AcDbBlockReference") (list 100"AcDbMInsertBlock") 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 100"AcDbMInsertBlock") (list 100"AcDbBlockReference") e))
(entmake e)
(entdel stm)
))
(SETQ STM (car (ENTSEL "n点取下一块")))
)
(setvar "cmdecho" 1)


发布评论