Aller au contenu

[Résolu] Distances cumulées sur spline/polyligne


phil_vsd

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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: _point

Modes point courants: PDMODE=0 PDSIZE=0.00

Spécifiez un point:

Commande:

Point cliqué : (4606.43 1463.2 0.0)

A 426.11 du départ et 1096.93 de la fin

Pé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

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité