块外部参照差异(&X)
大家好,希望你们都喜欢这个新年
这只是一个简短的问题,但在使用entsel函数检索此类实体时,如何区分外部参照和块之间的差异?
两者都显示为“插入”实体。。。。 检查块定义(不是插入图元)的group 70 dxf标志。 还有一种方法,只有外部参照有路径,
(defun c:test (/ blk s)
(setq blk (tblnext "BLOCK" t))
(while blk
(if (assoc 1 blk) ;Check if XRef Path Exists
(setq blk_list (strcat blk_list (cdr (assoc 1 blk)) "\n"))
) ;_ end_if
(setq blk (tblnext "BLOCK"))
) ;_ end_while
(alert blk_list)
(princ)
) ;_ end_defun 非常好-感谢您的回复,非常感谢。
Wizman,我喜欢你的方法,但tblnext定义不包含dxf组1,因此字符串返回nil。。。也可能是因为strcat试图将零的东西串在一起。
rkmcswain—当查看表定义的组70 dxf时—如果它不是零,那么它是一个外部参照就足够了吗? rkmcswain,这样行吗?
(defun c:test (/ blk xlist)
(setq blk (tblnext "BLOCK" T))
(setq xlist "XREFS: \n")
(while blk
(if (/= (cdr (assoc 70 blk)) nil)
(setq xlist (strcat xlist (cdr (assoc 2 blk)) "\n"))
) ;_end if
(setq blk (tblnext "BLOCK"))
) ;_end while
(alert xlist)
(princ)
) ;_end defun
否。组70是位编码值。检查该组中的位代码4。
例子:
(defun is-xref (name)
(if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "block" name)))))
t
nil
)
)
李,
如果要使用ENAME进行测试:
(defun is_ent_xref (e)
(and (= (type e) 'ENAME)
(= "INSERT" (cdr (assoc 0 (entget e))))
(=
(logand
(cdr
(assoc 70
(tblsearch "BLOCK"
(cdr
(assoc 2
(entget e))))))
4)
4)
)
)
返回T/nil
-大卫 谢谢你提供的信息,我只是不太明白
“logand”(组70的cdr)4
我已经阅读了ACAD关于“logand”的帮助,但仍然不明白它的意思是什么?
你是在比较70组代码和4组代码?但是如何比较呢?
再次感谢各位。
大体上如果查找组70中的块,您将看到:
0=未设置标志
1=表示匿名块
2=块具有非常量属性定义
4=块是外部参照
8=块是外部参照覆盖
...等等
注意那里的模式。。。1、2、4、8、16、32、64等。
如果设置了“4”位(表示这是外部参照),则组70的值将是4加上任何其他设置值的总和。
因此,如果这是一个普通块,则组70的值可能为0。
如果块具有属性,则组70的值可能为2
如果这是外部参照覆盖,则组70的值可能为12(4+)。
LOGAND做什么?为什么它会工作?看看这个,特别是第三个帖子。 麦克斯温,你是一个传奇!
谢谢你的解释-我想在阅读ACAD帮助后我永远都不会理解它-但是这个链接对于解释事情来说太棒了!
谢谢你们的回复,谢谢你们抽出时间来帮助我,非常感谢
干杯
李
页:
[1]
2