Aller au contenu

Positionnement a une certaine distance sur une polyligne


Messages recommandés

Posté(e)

Hello

 

Je n'ai pas trouvé mon bonheur mais j'ai peut être mal cherché ! :o

 

Je désire trouvé le point (dessiner un point graphique en fait) qui se trouve à xx.yy unités graphiques du point de départ d'une polyligne 2D (Splinée ou Non, Lissée ou Non, Close ou Non)

 

Et si en plus j'avais la même routine pour une polyligne 3D, ce serait Tip-Top ! :D

 

Dans l'attente de vos lumières, je vous souhaite un bon dimanche ... :D

 

Le Decapode (qui circule sur les polylignes)

 

 

 

[Edité le 4/5/2008 par lecrabe]

Autodesk Expert Elite Team

Posté(e)

Salut,

 

un petit truc vite fait (ptvf), qui devrait fonctionner avec tout type de polyligne

 

(defun c:ptvf (/ sp vc ss)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (setq	sp (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace *acdoc*)
     (vla-get-ModelSpace *acdoc*)
   )
 )
 (and
   (setq vc (getpoint "\nSpécifiez les coordonnées: "))
   (setq vc (trans vc 1 0))
   (ssget '((0 . "*POLYLINE")
     (-4 . "[b]	     (-4 . "&")
     (70 . 112)
     (-4 . "NOT>")
    )
   )
   (not (vla-StartUndoMark *acdoc*))
   (vlax-for pl (setq ss (vla-get-ActiveSelectionSet *acdoc*))
     (vla-addPoint
sp
(vlax-3d-point (mapcar '+ vc (vlax-curve-getStartPoint pl)))
     )
   )
   (vla-EndUndoMark *acdoc*)
 )
 (princ)
) 

 

[Edité le 4/5/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour,

 

je n'ai pas bien compris la question. Je pense qu'il s'agit de trouver un point situé sur la polyligne à une certaine distance du départ puisque le Décapode nous dit qu'il "circule sur les polylignes". C'est le xx.yy qui n'est pas très clair dans la question. On peut penser que tu souhaites saisir un point, mais je pense que tu souhaites saisir une distance ?

 

 (defun c:ptatdist ()
 (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 (setq sp
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace *acdoc*)
     (vla-get-ModelSpace *acdoc*)
   )
 )
 (setq ent (car (entsel)))
 (setq x (getdist "\nDistance depuis départ :"))
 (setq
   vlaobj (vlax-ename->vla-object ent)
   ;;; le reste est pour mémoire, pour voir ce qu'on peut faire avec les fonctions vlax-curve
   pt_org (vlax-curve-getStartPoint vlaobj)
   pt_end (vlax-curve-getEndPoint vlaobj)
   param_start (vlax-curve-getStartParam vlaobj)
   param_end (vlax-curve-getEndParam vlaobj)
   perim_obj (vlax-curve-getDistAtParam vlaobj param_end)
   ;;; fin pour mémoire
 )
 (vla-addPoint
   sp
   (vlax-3d-point (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x)))
 )
)

 

ou un truc dans le genre...

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

 

Hello Zebulon & Gilles

 

En effet je desire obtenir un point graphique AutoCAD qui se trouve à xx.yy unités graphiques du point de départ de la polyligne ! :)

 

Gilles, je suis désolé si je me suis mal exprimé ! ;)

 

La routine de Zebulon me convient parfaitement !! :cool:

 

Pour Gilles, je n'ai pas compris ce que tu avais programmé suite

à mon "mauvais" cahier des charges !? Sorry :P

 

Le Decapode "confus"

 

Autodesk Expert Elite Team

Posté(e)

Pour Gilles, je n'ai pas compris ce que tu avais programmé suite

 

il a additionné l'abscisse et l'ordonnée du point saisi avec l'abscisse et l'ordonnée du point de départ de la polyligne

(vlax-3d-point (mapcar '+ vc (vlax-curve-getStartPoint pl)))

pour faire une sorte de translation

 

Sauf erreur de ma part

Amicalement

 

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

  • 5 mois après...
Posté(e)
Bonjour,

 

je n'ai pas bien compris la question. Je pense qu'il s'agit de trouver un point situé sur la polyligne à une certaine distance du départ puisque le Décapode nous dit qu'il "circule sur les polylignes". C'est le xx.yy qui n'est pas très clair dans la question. On peut penser que tu souhaites saisir un point, mais je pense que tu souhaites saisir une distance ?

 

 (defun c:ptatdist ()
 (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 (setq sp
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace *acdoc*)
     (vla-get-ModelSpace *acdoc*)
   )
 )
 (setq ent (car (entsel)))
 (setq x (getdist "\nDistance depuis départ :"))
 (setq
   vlaobj (vlax-ename->vla-object ent)
   ;;; le reste est pour mémoire, pour voir ce qu'on peut faire avec les fonctions vlax-curve
   pt_org (vlax-curve-getStartPoint vlaobj)
   pt_end (vlax-curve-getEndPoint vlaobj)
   param_start (vlax-curve-getStartParam vlaobj)
   param_end (vlax-curve-getEndParam vlaobj)
   perim_obj (vlax-curve-getDistAtParam vlaobj param_end)
   ;;; fin pour mémoire
 )
 (vla-addPoint
   sp
   (vlax-3d-point (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x)))
 )
)

 

ou un truc dans le genre...

 

Amicalement

Vincent

Posté(e)

Bonjour

 

Je débute sur le forum et je n'utilise peut être pas la bonne formule pour poser ma question.

 

J'ai récupéré sur ce site la routine que tu Zébulon à donné pour positionner un point sur une polyligne en donnant la valeur depuis le départ.

 

Je m'en sert pas mal, et elle est très pratique. Par contre, quand je l'utilise, j'insère plusieur point sur la même polyligne à des distances différente du départ. Je sélectionne donc ma polyligne puis je rentre la distance et je recommence pour chaque point. Est ce que c'est possible d'avoir la même chose mais en sélectionnant une seul fois la polyligne et en rentrant ensuite tous les points à suivre sans avoir à relancer la commande et à resélectionner la polyligne.

Merci

a+

Posté(e)

Bonjour,

 

heureux que ça te serve et bienvenu parmi nous jobs.

 

(defun c:ptatdist ()
 (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 (setq sp
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace *acdoc*)
     (vla-get-ModelSpace *acdoc*)
   )
 )
 (setq ent (car (entsel)))
 (while (setq x (getdist "\nDistance depuis départ : "))
   (setq vlaobj (vlax-ename->vla-object ent))
   (vla-addPoint
     sp
     (vlax-3d-point (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x)))
   )
 )
 (princ)
) 

 

En espérant te relire souvent ;)

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Bonjour,

 

(defun c:ptatdist ()
(vl-load-com)
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq sp
(if (= 1 (getvar "CVPORT"))
(vla-get-PaperSpace *acdoc*)
(vla-get-ModelSpace *acdoc*)
)
)
(setq ent (car (entsel)))
(setq compteur 1)

(while (/= (setq x (getdist "\nDistance depuis départ :")) nil)
(setq
vlaobj (vlax-ename->vla-object ent)
;;; le reste est pour mémoire, pour voir ce qu'on peut faire avec les fonctions vlax-curve
pt_org (vlax-curve-getStartPoint vlaobj)
pt_end (vlax-curve-getEndPoint vlaobj)
param_start (vlax-curve-getStartParam vlaobj)
param_end (vlax-curve-getEndParam vlaobj)
perim_obj (vlax-curve-getDistAtParam vlaobj param_end)
;;; fin pour mémoire
)
(vla-addPoint
sp
(vlax-3d-point (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x)))
)
);fin du while
)
 

 

Voici le code de Zebulon modifié

 

@plus

 

LB

Posté(e)

Bip Bip, j'ai été plus rapide...

 

http://www.lecoyote.net/coybip/bipbip.jpg

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é