pBe 发表于 2022-7-6 00:39:06

 
在我看来,有两种方法可以用来做香草。,
1.使用Tblnext直到找到外部参照,唯一的问题是,如果以某种方式删除了外部参照而没有清除,则该项仍将显示在表上
2.使用ssget“X”,您仍然需要迭代选择,直到它找到外部参照。
 
对于这两个选项,如果找到外部参照,则可以使用while函数终止循环。
 
现在,如果将两者结合使用,也可以使用每个图纸尺寸块的名称
 
只是为了好玩,我还为这两者编写了一个快速代码
 
(defun xrefet (blk / a f)
(while (and (setq a (tblnext "BLOCK" (null a)))
      (null f)
)
   (if        (and (assoc 1 a)
   (wcmatch (cdr (assoc 2 a)) blk)
   (ssget "_X" (list (assoc 2 a)))
)
   (setq f (cdr (assoc 1 a)))
   )
)
f
)
 
(XREFET“A00,B00,C00,D00”)
 
(defun xrefes (blk / ss i sl a en f)
(if (and
(setq f       nil
      i       -1
      ss (ssget        "_X"
                (list '(0 . "INSERT")
                      (cons 2 blk)
                )
       )
)
(setq sl (sslength ss))
   )
   (while (and (null f) (< i sl))
   (setq f
   (if (and (setq
                en (cdr (assoc 2 (entget (ssname ss (setq i (1+ i))))))
              )
              (setq f (assoc 1 (tblsearch "BLOCK" en)))
       )
       (cdr f)
       nil
   )
   )
   )
)
)
 
(外部参照“A00、B00、C00、D00”)
 
 
 
不确定将如何公平对待,但我猜想后者更快

shailujp 发表于 2022-7-6 00:46:34

pBe,
 
两个代码都返回“错误:参数太少”
 
我觉得这条线不行

   (if (and (assoc 1 a)
   (wcmatch (cdr (assoc 2 a)) blk)
   (ssget "_X" (list (assoc 2 a)))
)

 
所以我去掉了那一行,用cond函数构建代码。这目前的工作原理是,但不确定这是否正确,因为我删除了傻瓜校对。
 

(Defun C:XTEST (/ a f blkname)
(command "layout" "" "")
(setvar "cmdecho" 0)
(setvar "attreq" 0)
(while (and (setq a (tblnext "BLOCK" (null a)))
      (null f)
)
   (if (assoc 1 a)
       (setq f (cdr (assoc 1 a)))
   )
)
(cond
       ((= f "\\drawings\\formats\\b00.dwg")
(setq blkname "J_Logo_B"))
((= f "\\drawings\\formats\\c00.dwg")
(setq blkname "J_Logo_C"))

((= f "\\drawings\\formats\\d00.dwg")
(setq blkname "J_Logo_D"))

((= f "\\drawings\\formats\\e00.dwg")
(setq blkname "J_Logo_E"))

((= f "\\drawings\\formats\\j00.dwg")
(setq blkname "J_Logo_J"))
)
(Command "-INSERT" blkname "0,0" "" "" "")
(princ "\nSelect Text file for attribute import:")
(c:attin)
(setvar "attreq" 1)
(princ "\nAttributes copied & Updated")
(command "eattedit" "L")
(princ)
)

 
此外,(setq f(cdr(assoc 1 a)))返回“\\drawings\\formats\\d00.dwg”。因此,在cond下,我必须用添加完整路径。图纸。是否只返回d00(不是位置&不是扩展)?
 
谢谢

shailujp 发表于 2022-7-6 00:48:38

pBe,
 
添加到我的上一篇文章中,我修改的代码只适用于空白的新图形(仅适用于模板)。如果此实用程序在包含多个不同块的现有图形上运行,则会失败。它似乎无法仅从整个图形中过滤外部参照块。请提出建议。

pBe 发表于 2022-7-6 00:54:00

 
因为您没有提供正确数量的参数
 
(XREFET“A00,B00,C00,D00”);
(外部参照“A00,B00,C00,D00”);
 
 
演示:(vl文件名基(getvar'dwgname))
 
 
使用正确的参数尝试第11页的代码
 
HTH公司

shailujp 发表于 2022-7-6 00:56:48

pBe,
 
我想我很困惑。以下是我从这个(论点)中所理解的。看起来您创建了一个子函数(这是真的吗?)然后你把子函数调出到主函数中,同时你也在添加参数?我把它作为主要的日常活动的一部分。可能是我尝试的方式吗?还是必须通过子功能?
页: 1 [2]
查看完整版本: 如何查找外部参照文件na