在图形中打开外部参照并清除
我有一个包含20个或更多外部参照的图形。需要从文件中清除未引用的图像。我有以下步骤,但使用下面的例程,我必须打开外部参照并运行命令PUI,然后关闭图形并重新加载外部参照。耗时的
我想知道是否有更简单的方法可以实现这一点。
; (purge-unreferenced-images)
(defun purge-unreferenced-images (/ ss1 ctr id symlst enamelst delent vl_delent ipath iname tmp)
(defun remlst (/ tmp1)
(setq
tmp (length (member (cdr (assoc 340 (entget delent))) enamelst))
)
(repeat (- (length symlst) tmp)
(setq tmp1 (cons (car symlst) tmp1))
(setq symlst (cdr symlst))
)
(setq tmp (list (car symlst)))
(setq symlst (append (reverse tmp1) (cdr symlst)))
)
(defun massoc (key alist / x nlist)
(foreach x alist
(if (eq key (car x))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
)
(vl-load-com)
(setq ss1 (ssget "x" '((0 . "IMAGE"))))
(setq ctr 0)
(setq id (dictsearch (namedobjdict) "acad_image_dict"))
(setq symlst (massoc 3 id))
(setq enamelst (massoc 350 id))
(if ss1
(progn
(while (< ctr (sslength ss1))
(setq delent (ssname ss1 ctr))
(setq vl_delent (vlax-ename->vla-object delent))
(setq ipath (vla-get-ImageFile vl_delent))
(remlst)
(setq iname (strcat (vl-filename-base ipath) (vl-filename-extension ipath)))
(if (and (not (findfile ipath))
(not (findfile iname))
)
(progn
(dictremove (cdr (car id)) (car tmp))
(append tmp symlst)
(ssdel delent ss1)
(vla-delete vl_delent)
)
(progn
(setq ctr (1+ ctr))
)
)
)
)
)
(while symlst
(dictremove (cdr (car id)) (car symlst))
(setq symlst (cdr symlst))
)
)
(defun c:PUI()
(purge-unreferenced-images)
(princ)
)
(princ)
页:
[1]