Lispboy 发表于 2016-5-19 12:10:16

(XD::Entity:AssIntersectEnts)获得从一个实体出发循环相交的所有实体

本帖最后由 Lispboy 于 2016-5-19 12:28 编辑


(defun XD::Entity:AssIntersectEnts (e fillter offset / box elst n ss)
(setq box (xdrx_entity_box e)
      offset (abs offset)
      box (if (> offset 0)
            (apply 'xdrx_points_offset (cons offset box))
            box
            )
        ss (ssget "cp" (xd::PNTS:wcs2ucs box) (if fillter fillter nil))
)
(if (not (member e AssIntersectEnts))
    (setq AssIntersectEnts (cons e AssIntersectEnts))
)
(if ss
    (progn
      (setq elst (xdrx_pickset->ents ss))
      (foreach n elst
        (if (not (member n AssIntersectEnts))
          (progn
          (XD::Entity:AssIntersectEnts n fillter offset)
          )
        )
      )
    )
)
AssIntersectEnts
)

Lispboy 发表于 2016-5-19 12:32:13


(defun XD::Entity:AssIntersectEntsInit()
   (setq AssIntersectEnts nil)
)

dyjwyqz5221 发表于 2018-4-12 14:14:28

该函数有问题吧,函数名称为XD::Entity:AssIntersectEnts,在函数里面又引用了该函数(XD::Entity:AssIntersectEnts n fillter offset)

marting 发表于 2018-4-12 14:35:48

dyjwyqz5221 发表于 2018-4-12 14:14
该函数有问题吧,函数名称为XD::Entity:AssIntersectEnts,在函数里面又引用了该函数(XD::Entity:AssInters ...

递归调用啊。

dyjwyqz5221 发表于 2018-4-16 08:15:32

明白了,谢谢,还要继续学习

dyjwyqz5221 发表于 2018-4-16 08:17:32

测试此函数过程中,fillter采用 \\\'((0 . "LINE,ARC")) 有问题,采用'((0 . "LINE,ARC"))就可以了,请教是否如此?

pengfei2010 发表于 2018-4-17 07:24:19

这个函数我用lisp写过了,效率很一般,不知道 arx是不是很快

dyjwyqz5221 发表于 2023-11-28 10:35:23

有个缺陷,就是这样找出的实体是采用(ssget "cp")方式查找的,假如:cp范围内,有不相交、但是图层也相同的实体也包含在内了吧。并非真正的相交。
页: [1]
查看完整版本: (XD::Entity:AssIntersectEnts)获得从一个实体出发循环相交的所有实体