Lee Mac 发表于 2022-7-6 15:23:42

块外部参照差异(&X)

大家好,
 
希望你们都喜欢这个新年
 
这只是一个简短的问题,但在使用entsel函数检索此类实体时,如何区分外部参照和块之间的差异?
 
两者都显示为“插入”实体。。。。

rkmcswain 发表于 2022-7-6 15:29:41

检查块定义(不是插入图元)的group 70 dxf标志。

wizman 发表于 2022-7-6 15:35:38

还有一种方法,只有外部参照有路径,
 
(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

Lee Mac 发表于 2022-7-6 15:40:27

非常好-感谢您的回复,非常感谢。
 
Wizman,我喜欢你的方法,但tblnext定义不包含dxf组1,因此字符串返回nil。。。也可能是因为strcat试图将零的东西串在一起。
 
rkmcswain—当查看表定义的组70 dxf时—如果它不是零,那么它是一个外部参照就足够了吗?

Lee Mac 发表于 2022-7-6 15:48:42

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


rkmcswain 发表于 2022-7-6 15:53:21

 
否。组70是位编码值。检查该组中的位代码4。
 
例子:
 

(defun is-xref (name)
(if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "block" name)))))
   t
   nil
)
)

David Bethel 发表于 2022-7-6 15:59:11

李,
 
如果要使用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
 
-大卫

Lee Mac 发表于 2022-7-6 16:02:36

谢谢你提供的信息,我只是不太明白
 
“logand”(组70的cdr)4
 
我已经阅读了ACAD关于“logand”的帮助,但仍然不明白它的意思是什么?
 
你是在比较70组代码和4组代码?但是如何比较呢?
 
再次感谢各位。

rkmcswain 发表于 2022-7-6 16:08:56

 
大体上如果查找组70中的块,您将看到:
0=未设置标志
1=表示匿名块
2=块具有非常量属性定义
4=块是外部参照
8=块是外部参照覆盖
...等等
 
注意那里的模式。。。1、2、4、8、16、32、64等。
 
如果设置了“4”位(表示这是外部参照),则组70的值将是4加上任何其他设置值的总和。
 
因此,如果这是一个普通块,则组70的值可能为0。
如果块具有属性,则组70的值可能为2
如果这是外部参照覆盖,则组70的值可能为12(4+)。
 
LOGAND做什么?为什么它会工作?看看这个,特别是第三个帖子。

Lee Mac 发表于 2022-7-6 16:14:03

麦克斯温,你是一个传奇!
 
谢谢你的解释-我想在阅读ACAD帮助后我永远都不会理解它-但是这个链接对于解释事情来说太棒了!
 
谢谢你们的回复,谢谢你们抽出时间来帮助我,非常感谢
 
干杯
 
页: [1] 2
查看完整版本: 块外部参照差异(&X)