Essaie avec ça
(vl-load-com)
(defun C:PolyOnPoint ( / Point2D dFuzz ssPoly oPoly ssPonc oPonc PtDeb PtFin PT I J iNbPoncDeb iNbPoncFin)
(defun Point2D (PT)
(list (car PT) (cadr PT) 0.0)
)
(initget 4)
(if (not (setq dFuzz (getreal "\nRayon de recherche <0.01> : ")))
(setq dFuzz 0.01)
)
(initget 1 "Oui Non")
(setq b2D (= "Oui" (getkword "\nLimiter la recherche en 2D [Oui/Non] : ")))
(initget 1 "Departuniquement Arriveeuniquement departOUarrivee departETarrivee departETOUarrivee")
(setq sChoix (getkword "\nCritère de recherche [Departuniquement/Arriveeuniquement/departOUarrivee/departETarrivee/departETOUarrivee] : "))
(if (and (princ "\nSélectionner les linéaires : ")
(setq ssPoly (ssget (list (cons 0 "ARC,LINE,LWPOLYLINE"))))
(princ "\nSélectionner les ponctuels : ")
(setq ssPonc (ssget (list (cons 0 "POINT,INSERT"))))
)
(progn
(setq ssOK (ssadd))
(setq I 0)
(repeat (sslength ssPoly)
(setq oPoly (ssname ssPoly I))
(setq I (1+ I))
(setq PtDeb (vlax-curve-GetStartPoint oPoly))
(if b2D (setq PtDeb (Point2D PtDeb)))
(setq PtFin (vlax-curve-GetEndPoint oPoly))
(if b2D (setq PtFin (Point2D PtFin)))
(setq iNbPoncDeb 0)
(setq iNbPoncFin 0)
(setq J 0)
(while (and (< J (sslength ssPonc))
(or (= iNbPoncDeb 0) (= iNbPoncFin 0))
)
(setq oPonc (ssname ssPonc J))
(setq J (1+ J))
(setq PT (cdr (assoc 10 (entget oPonc))))
(if b2D (setq PT (Point2D PT)))
(if (and (= iNbPoncDeb 0) (equal PT PtDeb dFuzz))
(setq iNbPoncDeb 1)
)
(if (and (= iNbPoncFin 0) (equal PT PtFin dFuzz))
(setq iNbPoncFin 1)
)
)
(cond ((= sChoix "departETOUarrivee")
(if (or (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
(ssadd oPoly ssOK)
)
)
((= sChoix "departETarrivee")
(if (and (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
(ssadd oPoly ssOK)
)
)
((= sChoix "departOUarrivee")
(if (or (and (>= iNbPoncDeb 1) (= iNbPoncFin 0)) (and (= iNbPoncDeb 0) (>= iNbPoncFin 1)))
(ssadd oPoly ssOK)
)
)
((= sChoix "Departuniquement")
(if (and (>= iNbPoncDeb 1) (= iNbPoncFin 0))
(ssadd oPoly ssOK)
)
)
((= sChoix "Arriveeuniquement")
(if (and (= iNbPoncDeb 0) (>= iNbPoncFin 1))
(ssadd oPoly ssOK)
)
)
)
)
(sssetfirst nil ssOK)
)
)
)
Tu as les options:
departOUarrivee = uniquement l'un des 2
departETarrivee = absolument les 2
departETOUarrivee = l'un OU l'autre OU les 2.
Et ça fera un kilo de carottes pour ma jument 😉. Elle s'appelle CARRERA, mais elle fonctionne mieux aux carottes qu'au SP98.😂
Olivier