你试试这个,得到实体交点列表 (defun c:get_int0( / ent1 ent2 ps) (setq ent1 (car (entsel "选择第一实体:"))) (setq ent2 (car (entsel "选择第二实体:"))) (print) (setq ps (obj_int ent1 ent2)) ) ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;功能:返回两个对象的所有交点 ;参数: ent1、ent2 均为ename对象 (defun obj_int (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i) (setq ax_ent_1 (vlax-ename->vla-object ent1) ax_ent_2 (vlax-ename->vla-object ent2) ) (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone)) (setq intpoints (vlax-variant-value intpoints)) (setq i 0) (if (> (vlax-safearray-get-u-bound intpoints 1) 0) (repeat (/ (+ 1 (- (vlax-safearray-get-u-bound intpoints 1) (vlax-safearray-get-l-bound intpoints 1) ) ) 3 ) (setq points (append points (list (list (vlax-safearray-get-element intpoints i) (vlax-safearray-get-element intpoints (+ i 1)) (vlax-safearray-get-element intpoints (+ i 2)) ))) ) (setq i (+ 3 i)) ) ) points ) |