bamboo123 发表于 2022-5-15 21:09:44

求救:计算n条线段的交点

(vl-load-com)

;(setq ss (ssget "x" '(0 . "line")))
      
(defun c:tet()
(setq segments (ssget "x" ))
(setq i 0 n (sslength segments))

(setq n (1- n))
   (while (< i n)
      (setq seg1 (ssname segments i))
      (setq seg11 (vlax-ename->vla-object seg1))
      (setq j (1+ i))
      (setq jj (1+ i))
      (setq k (- n j))
   (repeat k
       (setq seg2 (ssname segments jj))
       (setq seg22 (vlax-ename->vla-object seg2))
       (setq intpoints (vla-intersectwith seg11 seg22 acextendnone))
       (setq intpoints (vlax-variant-value intpoints))
       (vlax-safearray->list intpoints)
       ;(command "point" intpoints)
       ;(setq pts (cons intpoints pts))
;;;       (setq points (append points (list (list
;;;       (vlax-safearray-get-element intpoints 0)
;;;       (vlax-safearray-get-element intpoints 1)
;;;       (vlax-safearray-get-element intpoints 2)
;;;       ))))
       (setq jj (1+ jj))
   )
   
    (setq i (1+ i))
   )
)
上面的代码想计算n条线段的交点的,但是没得到想要的结果,是怎么回事?谢谢!

xyp1964 发表于 2022-5-15 23:24:55


(defun c:tt ()
(if (setq ss (ssget '((0 . "line"))))
    (progn
      (setq i        -1
          tmp        '()
      )
      (while (setq s1 (ssname ss (setq i (1+ i))))
        (setq o1 (vlax-ename->vla-object s1))
        (setq j i)
        (while (setq s2 (ssname ss (setq j (1+ j))))
          (setq o2 (vlax-ename->vla-object s2))
          (if (setq pt (vlax-invoke o1 'intersectwith o2 0))
          (setq tmp (cons pt tmp))
          )
        )
      )
      (princ tmp)
    )
)
(princ)
)

bamboo123 发表于 2022-5-16 10:24:52

xyp1964 发表于 2022-5-15 23:24


昨晚调试一下也成功了,你的代码更简洁,优美!:handshake

张小五 发表于 2022-7-12 12:20:14

:lol围观 一脸懵逼!!!!!!

Bdj 发表于 2022-7-12 16:28:53

xyp1964 发表于 2022-5-15 23:24


记得加一行:(vl-load-com)
页: [1]
查看完整版本: 求救:计算n条线段的交点