目前很多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)
)
;;--------------------------------------------------------------------