Aller au contenu

Points offset ch. côtés d'une polyligne


pierrevigneux

Messages recommandés

Salut,

 

j'avais une routine qui le fait, mais point par point...

 

Si ta polyligne comporte beaucoup de sommet, c'est long à faire, mais tu positionne tes XY ou tu veux...

 

Pour éviter les chevauchements...

 

La commande est XY pour les points en 2D et XYZ pour les points en 3D (avec le Z)...

 

Tu clic ton point et tu clique la position des coordonnées...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

j'avais une routine qui le fait, mais point par point...

 

Si ta polyligne comporte beaucoup de sommet, c'est long à faire, mais tu positionne tes XY ou tu veux...

 

Pour éviter les chevauchements...

 

La commande est XY pour les points en 2D et XYZ pour les points en 3D (avec le Z)...

 

Tu clic ton point et tu clique la position des coordonnées...

 

Denis...

Bonsoir Denis !

 

Je te remercie Beaucoup.

 

Mais j'en avais une commande lisp qui fait exactement la même chose,sauf que j'ai inversé les données nord est.

 

Ce que je cherche c'est, dessiner des points offset.par rapport à ma ligne de centre, pour en sortir ses coordonnées.

Merci encore et bon weekend !

 

 

 

Acadnadien

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu peux essayer de "bricoler" ma réponse faite ici

 

Au lieu d’exécuter les dernières lignes pour dessiner la polyligne:

 (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt)))))
 (vla-put-Closed nw_pl 1)

Tu utilise la liste l_pt pour récupérer les points de définitions.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Merci Bonuscad !

 

La routine dessine ma polygne de part et d'autre de la ligne de centre, c'est bien, mais ce que je recherche, c'est de pouvoir, faire une liste de points à distances fixe.

 

 

Ex: 0+020 à -10 m. (x,y) pour côté gauche

10 m. (x,y) pour côté droit

etc.

 

 

Bonne journée !

Acadnadien

Lien vers le commentaire
Partager sur d’autres sites

Alors ce serait plus proche de ce genre de fonction ? -> mesure_PK.lsp

Ici tout sera dessiné et noté, mais le mode de fonctionnement peut être modifié.

 

Non J'ai déjà mesure_pk !

 

Merci de ton attention.

 

Je cherche à sortir des coordonnées de ch. côtés de ma ligne de centre à des distances égales choisis par l'utilisateur.

 

Bonne journée

 

 

 

 

Acadnadien

Lien vers le commentaire
Partager sur d’autres sites

Je cherche à sortir des coordonnées de ch. côtés de ma ligne de centre à des distances égales choisis par l'utilisateur.

 

J'avais bien compris; les coordonnées de chaque extrémités du peigne.

 

En épurant le code dans le lien donné pour avoir les coordonnée (par paire dans la liste lnw_pt)

 

(vl-load-com)
(defun z_dir (p1 p2 / )
 (trans
   '(0.0 1.0 0.0)
   (mapcar
     '(lambda (k)
       (/ k
         (sqrt
           (apply '+
             (mapcar
               '(lambda (x) (* x x))
               (mapcar '- p2 p1)
             )
           )
         )
       )
     )
     (mapcar '- p2 p1)
   )
   0
 )
)
(defun c:peigne ( / js dxf_obj obj_vlax pt_start pt_end total_dist partial_dist ori_dist tooth lst_pt increment_dist ang dxf_210 lnw_pt)
 (princ "\nSélectionner un objet curviligne à mesurer: ")
 (while
   (not
     (setq js
       (ssget "_+.:E:S"
         (list
           (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")
           (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
           (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
           (cons -4 "<NOT")
           (cons -4 "&") (cons 70 112)
           (cons -4 "NOT>")
         )
       )
     )
   )
   (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!")
 )
 (setq
   dxf_obj (entget (ssname js 0))
   obj_vlax (vlax-ename->vla-object (ssname js 0))
   pt_start (vlax-curve-getStartPoint obj_vlax)
   pt_end (vlax-curve-getEndPoint obj_vlax)
   total_dist (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax))
 )
 (initget 6)
 (setq partial_dist (getdist "\nEntrez la distance partielle <20.0>: "))
 (if (not partial_dist) (setq partial_dist 20.0))
 (setq ori_dist 0.0 increment_dist 0.0)
 (cond
   ((> total_dist partial_dist)
     (initget 6)
     (setq tooth (getdist "\nEntrez une nouvelle distance de peigne <7.5>: "))
     (if (not tooth) (setq tooth 7.5))
     (setq lst_pt (list pt_start))
     (while (< increment_dist total_dist)
       (setq
         lst_pt (cons (vlax-curve-getPointAtDist obj_vlax increment_dist) lst_pt)
         increment_dist (+ increment_dist partial_dist)
       )
     )
     (setq lst_pt (reverse (cons pt_end lst_pt)) lnw_pt nil)
     (foreach n lst_pt
       (setq
         ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv obj_vlax (vlax-curve-getParamAtPoint obj_vlax n)))
         dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist)))
       )
       (setq lnw_pt
         (cons
           (list
             (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) tooth)
             (polar (trans n 0 dxf_210) (- ang (/ pi 2)) tooth)
           )
           lnw_pt
         )
       )
     )
     (print lnw_pt)
     ;(mapcar '(lambda (x) (command "_.line" "_none" (car x) "_none" (cadr x) "")) lnw_pt)
   )
   (T (princ "\nLa longueur est trop grande pour l'objet!"))
 )
 (prin1)
)

Modifié par bonuscad

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Ex: 0+020 à -10 m. (x,y) pour côté gauche

 

Dans mon code, j'ai partial_dist 1000.0 (pour déterminer les points kilométrique tout les 1000 mètres)

Si tu veux déterminer tous les 0+020, il te faut simplement mettre partial_dist 20.0

Bien sur dans ce cas tu ne pourra exécuter le code que sur des objets supérieur à 20m.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas de soucis

 

J'ai édité le code en #3 où j'ai modifié les valeur par défauts et j'ai rajouté une ligne commentée pour te prouver que cela fonctionne. (il te suffit de la dé-commenter; enlever le semi-colon, pour qu'il trace le peigne)

 

Cette ligne commentée peut être remplacer par une autre action (inscrire les coordonnées?, insérer un bloc?), tu as les points de définitions (la liste lnw_pt), à toi d'en faire ce que tu veux... moi je t'ai donné le principe.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abbord, je suis nul en lisp

 

Quand on a des demandes si spécifiques, je pense qu'il serait bien se s'y pencher un peu...

 

Néanmoins le code basique, à toi de fignoler si besoin!

 

(vl-load-com)
(defun z_dir (p1 p2 / )
 (trans
   '(0.0 1.0 0.0)
   (mapcar
     '(lambda (k)
       (/ k
         (sqrt
           (apply '+
             (mapcar
               '(lambda (x) (* x x))
               (mapcar '- p2 p1)
             )
           )
         )
       )
     )
     (mapcar '- p2 p1)
   )
   0
 )
)
(defun c:peigne ( / js dxf_obj obj_vlax pt_start pt_end total_dist partial_dist ori_dist tooth lst_pt increment_dist ang dxf_210 lnw_pt)
 (princ "\nSélectionner un objet curviligne à mesurer: ")
 (while
   (not
     (setq js
       (ssget "_+.:E:S"
         (list
           (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")
           (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
           (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
           (cons -4 "<NOT")
           (cons -4 "&") (cons 70 112)
           (cons -4 "NOT>")
         )
       )
     )
   )
   (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!")
 )
 (setq
   dxf_obj (entget (ssname js 0))
   obj_vlax (vlax-ename->vla-object (ssname js 0))
   pt_start (vlax-curve-getStartPoint obj_vlax)
   pt_end (vlax-curve-getEndPoint obj_vlax)
   total_dist (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax))
 )
 (initget 6)
 (setq partial_dist (getdist "\nEntrez la distance partielle <20.0>: "))
 (if (not partial_dist) (setq partial_dist 20.0))
 (setq ori_dist 0.0 increment_dist 0.0)
 (cond
   ((> total_dist partial_dist)
     (initget 6)
     (setq tooth (getdist "\nEntrez une nouvelle distance de peigne <7.5>: "))
     (if (not tooth) (setq tooth 7.5))
     (setq lst_pt (list pt_start))
     (while (< increment_dist total_dist)
       (setq
         lst_pt (cons (vlax-curve-getPointAtDist obj_vlax increment_dist) lst_pt)
         increment_dist (+ increment_dist partial_dist)
       )
     )
     (setq lst_pt (reverse (cons pt_end lst_pt)) lnw_pt nil)
     (foreach n lst_pt
       (setq
         ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv obj_vlax (vlax-curve-getParamAtPoint obj_vlax n)))
         dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist)))
       )
       (setq lnw_pt
         (cons
           (list
             (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) tooth)
             (polar (trans n 0 dxf_210) (- ang (/ pi 2)) tooth)
           )
           lnw_pt
         )
       )
     )
     (mapcar
       '(lambda (x)
         (vla-addMtext
           (if (= 1 (getvar "CVPORT"))
             (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
             (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
           )
           (vlax-3d-point (polar (car x) (* pi 0.5) (getvar "TEXTSIZE")))
           0.0
           (strcat "N "(rtos (cadar x) 2 3) "\\PE " (rtos (caar x) 2 3))
         )
         (vla-addMtext
           (if (= 1 (getvar "CVPORT"))
             (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
             (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
           )
           (vlax-3d-point (polar (cadr x) (* pi 0.5) (getvar "TEXTSIZE")))
           0.0
           (strcat "N "(rtos (cadadr x) 2 3) "\\PE " (rtos (caadr x) 2 3))
         )
       )
       lnw_pt
     )
   )
   (T (princ "\nLa longueur est trop grande pour l'objet!"))
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

avoir les coordonnées en mm. et en nombre entier.

 

???

 

Dans le dernier code posté:

(strcat "N "(rtos (cadar x) 2 3) "\\PE " (rtos (caar x) 2 3))

Fais ce que tu demandes.

 

Quand je l'applique à ton dessin test, j'obtiens le même formatage des nombres que celui fait dans le dessin.

Si c'est vraiment des millimètres que tu veux (alors que ton dessin à l'air en mètres)

(strcat "N "(rtos (* 1000.0 (cadar x)) 2 3) "\\PE " (rtos (* 1000.0 (caar x)) 2 3))

 

rtos (Real TO String) formate un nombre réel suivant le système d'unité et la précision demandé (si ceux-ci sont fournis, autrement c'est les valeur courante du dessin): (rtos réel mode précision)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é