多段线以外的对象。恳求
大家好,由于我是编程新手,我的技能太低,无法解决我的问题,经过多次尝试(没有成功),我来到了大家面前。给我一个提示。
我画了一条多段线(路线),旁边有圆圈(位置)。
我只是想知道如何对这些圆进行排序,就像它是多段线的右侧(正)和左侧(负)一样。
附上图纸是一个参考了解。
样品图纸
请给我一个解决方案。
提前谢谢。 这可能是你的开始
(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)
) 非常感谢Stefan BMR。 不客气。
FWIW也适用于直线、圆、圆弧和椭圆
页:
[1]