phil_vsd Posté(e) le 5 juillet 2012 Posté(e) le 5 juillet 2012 Bonjour à tous, J'aimerais faire une petit lisp qui, sur une polyligne, indiquerait la longueur du segment entre un point que l'on désigne à l'écran et l'origine de la polyligne. C'est pour extraire des "points kilométriques" précis. Les points sont aléatoires et non pas incrémentés. Je ne sais pas quelle stratégie prendre : piquer un point sur la PL, couper la PL sur ce point, extraire sa longueur et recomposer les 2 segments ? Vous feriez comment vous ? Merci d'avance. "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
lecrabe Posté(e) le 5 juillet 2012 Posté(e) le 5 juillet 2012 Hello Un grand classique le probleme des PK sur du lineaire (polyligne par exemple) ! J'avais demande ce truc a notre irremplacable Gilles en 2009 Et donc voici la routine POINTATDIST1 que tu pourras modifier a volonte ...CLIC sur une Polyligne --> distance depuis Origine, Distance jusqu'a la Fin, Longueur >>Commande: POINTATDIST1 Choix de l'objet: _pointModes point courants: PDMODE=0 PDSIZE=0.00Spécifiez un point:Commande:Point cliqué : (4606.43 1463.2 0.0)A 426.11 du départ et 1096.93 de la finPérimètre de l'objet : 1523.04 Commande: >> lecrabe ;; ;; Demande : Recuperer les coordonnees d'un point situe ;; sur une polyligne par rapport au point de depart ;; ;; Routine VLisp par GC le 31/08/2009 version 1.20 ;; avec EN PLUS le perimetre/longueur de l'objet ;; ;; La routine fonctionne avec tout type de polyligne 2D/3D ;; et aussi avec les arcs, cercles, ellipses, lignes et splines. ;; ;; Le resultat est retourne sur la ligne de commande. ;; ;; Commande au clavier : POINTATDIST1 ;; ;; Micro-Modif par Patrice (Vers 1.21) pour dessiner un POINT XYZ a l endroit clique ;; Veuillez changer le style des points par _DDPTYPE (si necessaire) ;; Vers 1.22 - Suppression de la question Distance - Variables dist1 & result INUTILES ;; ;(defun c:PointAtDist1 (/ ent obj picked dist1 dist2 result ) (defun c:PointAtDist1 (/ ent obj picked dist2 ) (vl-load-com) (if (and (setq ent (entsel)) (member (vla-get-ObjectName (setq obj (vlax-ename->vla-object (car ent)))) '("AcDbArc" "AcDbCircle" "AcDbEllipse" "AcDbLine" "AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline" "AcDbSpline" ) ) ) (if (and ;; (setq dist1 (getdist "\nSpecifiez la distance : ")) ;; (setq result (vlax-curve-getPointAtDist obj dist1)) ) (progn (setq picked (if (= (vla-get-ObjectName obj) "AcDb2dPolyline") (vlax-curve-getClosestPointToProjection obj (trans (cadr ent) 1 0) (mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0) ) ) (trans (osnap (cadr ent) "_nea") 1 0) ) dist2 (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) ) ( command "_point" picked ) ;; (princ (strcat "\nPoint à " (rtos dist1) " : ")) ;; (princ result) (princ "\nPoint cliqué : ") (princ picked) (princ (strcat " \nA " (rtos (setq dist3 (vlax-curve-getDistAtPoint obj picked)) ) " du départ et " (rtos (- dist2 dist3)) " de la fin\nPérimètre de l'objet : " (rtos dist2) ) ) (textscr) ) (princ "\nDistance non valide") ) (princ "\nEntite non valide") ) (princ) ) Autodesk Expert Elite Team
phil_vsd Posté(e) le 5 juillet 2012 Auteur Posté(e) le 5 juillet 2012 Merci le Décapode !! Ca me va, pour mon truc. Merci à toi et à (Gile) bien sûr. "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant