本人 不会编程 再网上找了 一个程序 是 求 直线交点个数的 程序,可是这个程序有个小的弊端,就是当多条直线交于同一点时,会分别重复计数,我的目的是重叠的交点只要记一个点的数,也就是把下面的程序里加入 过滤重叠点的 命令。希望哪位大侠帮忙改一下 ,如果另外重新写更方便的话,重写也可以。 万分感激。 下面是 程序代码: (defun GetInterPoint (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 ) (defun c:main( / ss n i j ent1 ent2 points) (setq ss (ssget)) (if ss (setq n (sslength ss)) ) (setq i 0 j 0) (while (< i n) (setq j (1+ i)) (setq ent1 (ssname ss i)) (while (< j n) (setq ent2 (ssname ss j)) (setq points (append points (getinterpoint ent1 ent2))) (setq j (1+ j)) ) (setq i (1+ i)) ) (Princ points) (princ (strcat "\n共有交点" (itoa (length points)) "个")) (princ) )
|