aaryan 发表于 2022-7-6 07:47:47

多段线以外的对象。恳求

大家好,
 
由于我是编程新手,我的技能太低,无法解决我的问题,经过多次尝试(没有成功),我来到了大家面前。给我一个提示。
 
我画了一条多段线(路线),旁边有圆圈(位置)。
 
我只是想知道如何对这些圆进行排序,就像它是多段线的右侧(正)和左侧(负)一样。
 
附上图纸是一个参考了解。
样品图纸
请给我一个解决方案。
 
提前谢谢。

Stefan BMR 发表于 2022-7-6 08:08:13

这可能是你的开始
(defun C:TEST ( / cross_prod ss1 ss2 e1 e2 p1 p2 i v tg)
(defun cross_prod (a b)
(list (- (* (cadr a) (caddr b)) (* (caddr a) (cadr b)))
   (- (* (caddr a) (car b)) (* (car a) (caddr b)))
   (- (* (car a) (cadr b)) (* (cadr a) (car b)))
   )
)
(if
   (and
   (setq ss1 (ssget ":E:S" '((0 . "LWPOLYLINE,SPLINE"))))
   (setq ss2 (ssget '((0 . "CIRCLE"))))
   )
   (progn
   (setq e1 (ssname ss1 0))
   (repeat (setq i (sslength ss2))
       (setq e2 (ssname ss2 (setq i (1- i)))
             p2 (cdr (assoc 10 (entget e2)))
             p1 (vlax-curve-GetClosestPointTo e1 p2)
             v (mapcar '- p1 p2)
             tg (vlax-curve-GetFirstDeriv e1 (vlax-curve-GetParamAtPoint e1 p1))
             )
         (vla-put-Color (vlax-ename->vla-object e2) (if (minusp (caddr (cross_prod v tg))) acRed acYellow))
       )
   )
   )
(princ)
)

aaryan 发表于 2022-7-6 08:44:29

非常感谢Stefan BMR。

Stefan BMR 发表于 2022-7-6 08:55:16

不客气。
FWIW也适用于直线、圆、圆弧和椭圆
页: [1]
查看完整版本: 多段线以外的对象。恳求