Baber62 发表于 2022-7-5 18:45:47

在图形中打开外部参照并清除

我有一个包含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]
查看完整版本: 在图形中打开外部参照并清除