创建无法炸开的AutoCAD图纸原理也很简单。
AutoCAD的minsert命令的作用是将“块”以矩形阵列的方式多重插入图纸,举个例子,画一个简单图形,比如边长为50的矩形,用block命令将其转换成名为“abc”的块。
输入命令minsert并回车,出现提示“输入块名或 [?]”的时候输入“abc”并回车。
AutoCAD提示“指定插入点或 [基点(B)/比例(S)/X/Y/Z/旋转(R)]”时,在模型空间任意位置点击一下。
接着提示“输入 X 比例因子,指定对角点,或 [角点(C)/XYZ(XYZ)]”,输入“1”并回车。
接着提示“输入 Y 比例因子或 <使用 X 比例因子>”,直接回车。
接着提示“指定旋转角度”,输入“0”并回车。
接着提示“输入行数 (---)”,输入“2”并回车。
接着提示“输入列数 (|||)”,输入“2”并回车。
接着提示“输入行间距或指定单位单元 (---)”,输入“100”并回车。
接着提示“指定列间距 (|||)”,输入“100”并回车。
看到插入进来的四个矩形了吗?点击其中的一个,你会发现四个同时都被选中,说明用minsert命令插入进来的是个整体的“块”。
操作菜单“修改”——“分解”,或者直接输入命令explode并回车,当提示“选择对象”的时候点击一下矩形,AutoCAD提示“1 个是多重插入引用”。你会发现这四个矩形是无法炸开的。

如果将画好的图纸作为块,用minsert命令插入到一个新建的文件里,并将行间距和列间距都设为0,不是就可以创建无法炸开的图纸了吗?赶快试试吧。
在空白文件里输入命令minsert并回车,出现提示“输入块名或 [?]”的时候输入“~”并回车,弹出“打开图形文件”对话框,在对话框里随便选择一个画好的AutoCAD图纸文件,点击“打开”,关闭对话框。
AutoCAD提示“指定插入点或 [基点(B)/比例(S)/X/Y/Z/旋转(R)]”时,在模型空间任意位置点击一下。
接着提示“输入 X 比例因子,指定对角点,或 [角点(C)/XYZ(XYZ)]”,输入“1”并回车。
接着提示“输入 Y 比例因子或 <使用 X 比例因子>”,直接回车。
接着提示“指定旋转角度”,输入“0”并回车。
接着提示“输入行数 (---)”,输入“2”或2以上的任何数并回车。
接着提示“输入列数 (|||)”,输入“2”或2以上的任何数并回车。
接着提示“输入行间距或指定单位单元 (---)”,输入“0”并回车。
接着提示“指定列间距 (|||)”,输入“0”并回车。
至此你选择的那个画好的图纸文件里的图形被多重插入到现在的文件里了,如果没有看见,操作一下菜单“视图”——“缩放”——“范围”,就可以看见了。
试试用explode命令炸开它,AutoCAD会提示“1 个是多重插入引用”。哈哈,无法炸开的图纸创建成了。

别高兴得太早了。输入refedit命令并回车,当出现提示“选择参照”时点击一下图形,打开“参照编辑”对话框,对话框里明明白白显示着插入进来的块图形的名字。点击“确定”,关闭对话框并弹出“参照编辑”工具条。点击工具条上有“-”号图形的“从工具集删除”按钮,AutoCAD提示“选择对象”,用鼠标拖一个框将整个图形选中并按回车键,AutoCAD提示“已从工具集删除”。
再点击工具条上的“保存参照编辑”按钮,点击“确定”。

试着点击一下图形,天哪!图形竟然用参照编辑的方法炸开了。

进一步设想一下,如果插入进来的块图形是匿名的,“参照编辑”对话框里不显示块图形的名字,就不能够进行参照编辑,当然也就不会被炸开了。

总结以上思路,创建无法炸开的图纸需要三个步骤,第一步将画好的图纸转换成块并删除,第二步用minsert命令将这个块插回图纸,第三步将块的名字隐匿起来。

遗憾的是手工操作不可能将块图形匿名,而只能用编程的方法。
将下面的代码复制粘贴在文本文件里,保存后将文本文件名改成“jm.lsp”。在画好的图纸里操作菜单“工具”——“加载应用程序”,打开“加载、卸载应用程序”对话框,在对话框里找到并点选那个名为“jm.lsp”的文件,依次点击“加载”、“关闭”按钮,关闭对话框。在命令行里输入“jm”并回车,当提示“选择对象”的时候,用鼠标拖一个框将整个图形选中,按一下回车键,程序自动依次完成图形转换成“块”、用minsert命令多重插入、块图形匿名三个步骤,创建成无法炸开的图纸。

(defun c:JM(/ BLOCKNAME SELECTIONSET)
(vl-load-com)
(if (setq Selectionset (ssget))
(progn
(setq BlockName (getvar "CDATE"))
(command "block" BlockName '(0 0 0) Selectionset "" "minsert"
BlockName '(0 0 0) 1 1 0 2 2 0 0)
(vla-put-name (vla-item (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object)))
(vla-get-name (vlax-ename->vla-object (entlast)))) "*U")
(princ "\n加密完成")
)
(princ "\n没有选中图元")
)
(princ)
)