问题:
每次在 AutoCAD 中打开图形时,如果该图形参照您系统上不存在的形文件,则会显示一个对话框,提示您查找缺少的形 (SHX) 文件。
原因:
当您从其他用户处接收图形且关联的形文件未随该图形一起提供时,可能会出现此问题。
解决方案:
解决此问题的最佳方法是获取缺少的形文件。 但是,这些文件有可能不可用。
浏览图形并确定哪些对象或线型参照了缺少的 SHX 文件。 找到后,更改线型分配和/或删除使用缺少的 SHX 文件的对象。 通过从图形中清理这些项目,您还可以清除对缺少的 SHX 文件的参照。
或者,可以使用下面所述的方法:警告:此解决方案将永久地且不可逆地从图形中删除缺少的形状对象。
除非您确定可以删除缺少的形状对象而不会影响图形的有效性,否则请勿使用此解决方案。
此解决方案适用于以下情况:您无法获取缺少的形文件,且您知道自己可以删除它们而不影响图形的有效性。 该解决方案提供了一个 AutoLISP® 例程,供您用于以下目的:
删除参照不可用形文件的形状对象。
清理对不可用形文件的参照。
然后,您可以正确加载该图形。
使用文本编辑器(例如 Microsoft® 记事本)创建新的文本文件。
将以下 AutoLISP 代码复制并粘贴到上一步创建的文本文件中。
;;;-------------------- START OF FILE ------------------------
;;;--------------------------------------------------------------------------;
;;; DESCRIPTION
;;; This routine deletes all shapes in the drawing
;;; that do not have a file definition.
;;; ;;; RUN
;;; -load this file and run the new command DELSHAPE
;;;--------------------------------------------------------------------------;
(defun c:delshape ()
(setvar "CMDECHO" 0)
(setq n 0
nshapes 0
delete 0
)
(setq shapes (ssget "X" '((0 .
"SHAPE")))) ;shapes
(setq shapes_name (ssget "X" (list (cons 0 "SHAPE") (cons 2 "*"))))
(if (/= shapes nil)
(setq nshapes (sslength shapes))
) ; n. total de shapes
(if (and (= shapes_name nil) (/= shapes nil))
(progn
(while (< n nshapes)
(setq entity (ssname shapes n))
(entdel entity)
(setq delete (+ 1 delete))
(setq n (+ 1 n))
)
)
)
(while (and (< n nshapes) (/= shapes nil) (/= shapes_name nil))
(setq entity (ssname shapes n))
(if (or (= (ssmemb entity shapes_name) nil))
(progn
(entdel entity)
(setq delete (+ 1 delete))
)
)
(setq n (+ 1 n)) )
(prin1 delete)
(princ " shape(s) deleted\n")
(command "_purge" "_sh" "" "_n")
) ;;---------------- END OF FILE --------------
将文本文件另存为 delshape.lsp,然后退出文本编辑器。
打开存在问题的图形,并使用 APPLOAD 命令加载 delshape.lsp 例程。
在命令行上,输入 delshape。该例程将运行并在命令行上返回以下信息:
已删除的形状数目
已清理的形文件的名称
注意:此例程仅删除参照不可用形文件的图形中的形状。 该例程不删除图形中显示的形状。
提示:使用电子传递实用程序可避免将来出现此类问题。 电子传递实用程序将与图形关联的所有文件复制到指定的位置。然后,这些文件可以随图形一起提交。
网友评论