目前很多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 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)
)
;;--------------------------------------------------------------------
如果不愿弄,下面有现成的,请大家试用。。。支持Win7,CAD2010。。。。
[ 此帖被binglanggege在2010-09-19 15:51重新编辑 ]