这可能是你的开始
- (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)
- )
|