Aller au contenu

Supprimer un sommet de polyligne en créant un arc


G_P_TP

Messages recommandés

Bonjour.

 

Je voudrais savoir s'il est possible d'automatiser la manip suivante : dans une polyligne, remplacer deux segments successifs par un arc qui passe par les 3 points de ces segments.

 

En fait, j'effectue aujourdhui la manip suivante :

- avec les poignées je supprime le point du milieu (où doit être créé l'arc)

- avec les poignées, je converti en arc et j'amène l'arc sur la position de l'ancien point

 

En fait ça marche mais c'est pas très rapide et il faut garder une trace du point du milieu (en dessinant un point par ex.)

 

merci de votre aide.

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

Ben le sujet ne passionne pas... ou alors je n'ai pas été clair dans ma demande... ou il n'y a peut être pas de solution (hormis un lisp j'imagine)

 

a+

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

en fait, ce qu'il te faudrait c'est un outil qui te permet de tracer un arc par trois points que tu choisis sur une polyligne, que la polyligne soit ajustée aux extrémités de cet arc, et que l'arc soit intégré ensuite à la polyligne.

J'ai compris cela, mais je ne sais pas le faire... Un spécialiste du lisp sûrement :)

 

Bonne journée.

Seuls nous allons vite, ensemble nous allons plus loin...

CPU Intel 3,5Go / Nvidia RTX-3090

AutoCad (Architecture) 2022 - Lumion PRO

BMW R-1200-RT, c'est moche, oui... je sais...

 

www.neda.ch

Lien vers le commentaire
Partager sur d’autres sites

Je voudrais savoir s'il est possible d'automatiser la manip suivante : dans une polyligne, remplacer deux segments successifs par un arc qui passe par les 3 points de ces segments.

Salut,

Quand tu dis les 3 points de ces segments, cela veut-il dire les 3 sommets des polylignes ?

Studio Gfilm - Agence de communication par l'image

 

"Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

en fait, ce qu'il te faudrait c'est un outil qui te permet de tracer un arc par trois points que tu choisis sur une polyligne, que la polyligne soit ajustée aux extrémités de cet arc, et que l'arc soit intégré ensuite à la polyligne.

J'ai compris cela, mais je ne sais pas le faire... Un spécialiste du lisp sûrement :)

 

Bonne journée.

 

merci pour la réponse.

 

Tu as bien compris mon besoin. et effectivement en lisp ça doit être possible... mais j'ai pas trop le temps ni l'envie de faire de la programmation pour l'instant... j'espèrais que quelqu'un avait déjà cela en stock..

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Quand tu dis les 3 points de ces segments, cela veut-il dire les 3 sommets des polylignes ?

 

merci pour ta réponse.

 

Oui c'est bien par 3 sommets d'une polyligne que je veut l'arc.

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

hello

avec RACCORD tu peux le faire, non?

il te suffit de donner le rayon de ton arc puis de sélectionner tes deux aprties de polylignes

J'ai tout faux?

Phil

 

merci de ta réponse.

 

c'est un peu le principe d'un raccord mais je ne connais pas le rayon et en plus je veux que l'arc passe exactement par 3 sommets de la polyligne.

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

Dans ce cas la procédure est relativement simple

1.ARC 3 points

2.PE (pedit)

3.Sélectionner l'arc et valider

4.Effacer la polyligne d'origine

Ça pourrait donner ça sur un bouton :

 

Code corrigé

^C^Carc;\\\pe;\;ef;\;

Studio Gfilm - Agence de communication par l'image

 

"Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Si j'ai bien compris, il s'agit d'inclure un arc passant par 3 sommets dans une polyligne qui a plus de 3 sommets.

Pas si simple donc, hors lisp je ne vois pas vraiment de solution plus rapide que la manip décrite dans le 1er post.

Lien vers le commentaire
Partager sur d’autres sites

effectivement en lisp ça doit être possible... mais j'ai pas trop le temps ni l'envie de faire de la programmation pour l'instant...

 

N'ayant pas trop de temps non plus, voici une base à creuser (je pense qu'il reste un problème de signe d'arrondi suivant les cas)

 

(vl-load-com)
(defun c:AddBulgeAtvertex ( / js e_name obj_vla oldsmd pt prm@pt pt1 t1  rtx1 pt2 t2 rtx2 pt_cen ang_cen vertexlist cnt nbv newlist new_bulge new_ewidth bulgelist ewidthlist index indexlist sw ew)
 (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))
   (princ "\nCe n'est pas un objet valable!")
 )
 (setq
   obj_vla (vlax-ename->vla-object (setq e_name (ssname js 0)))
   oldsmd (getvar "osmode")
 )
 (cond
   ((> (cdr (assoc 90 (entget e_name))) 2)
     (setq doc (vla-get-activedocument (vlax-get-acad-object)))
     (vla-startundomark doc)
     (setvar "osmode" 1)
     (initget 9)
     (setq pt (getpoint "\nDonner le sommet à traiter: "))
     (while
       (or
         (null (setq prm@pt (vlax-curve-getparamatpoint obj_vla (trans pt 1 0))))
         (equal (vlax-curve-getStartParam obj_vla) prm@pt 1E-13)
         (equal (vlax-curve-getEndParam obj_vla) prm@pt 1E-13)
       )
       (princ "\nLe sommet choisi ne convient pas!")
       (initget 9)
       (setq pt (getpoint "\nDonner le sommet à traiter: "))
     )
     (setvar "osmode" oldsmd)
     (setq
       pt1 (trans (vlax-curve-getpointatparam obj_vla (- prm@pt 0.5)) 0 e_name)
       t1 (vlax-curve-getfirstderiv obj_vla (- prm@pt 0.5))
       rtx1 (- (atan (cadr t1) (car t1)) (* 0.5 pi))
       pt2 (trans (vlax-curve-getpointatparam obj_vla (+ prm@pt 0.5)) 0 e_name)
       t2 (vlax-curve-getfirstderiv obj_vla (+ prm@pt 0.5))
       rtx2 (- (atan (cadr t2) (car t2)) (* 0.5 pi))
       pt_cen (inters pt1 (polar pt1 rtx1 (distance (trans pt 1 e_name) pt1)) pt2 (polar pt2 rtx2 (distance (trans pt 1 e_name) pt2)) nil)
       ang_cen (- (angle pt_cen (trans (vlax-curve-getpointatparam obj_vla (1+ prm@pt)) 0 e_name)) (angle pt_cen (trans (vlax-curve-getpointatparam obj_vla (1- prm@pt)) 0 e_name)))
       vertexlist (vlax-get obj_vla "Coordinates")
       cnt 0 nbv -1
       newlist '() new_bulge '() bulgelist '() new_ewidth '() ewidthlist '()
       index (* 2 (fix (+ 0.5 (vlax-curve-getparamatpoint obj_vla (trans pt 1 0)))))
       indexlist (list index (1+ index))
     )
     (repeat (fix (* 0.5 (length vertexlist)))
       (setq bulgelist (cons (vla-GetBulge obj_vla (setq nbv (1+ nbv))) bulgelist))
     )
     (setq nbv -1)
     (repeat (if (zerop (vlax-get obj_vla "Closed")) (fix (* 0.5 (length vertexlist))) (1- (fix (* 0.5 (length vertexlist)))))
       (vla-GetWidth obj_vla (setq nbv (1+ nbv)) 'sw 'ew)
       (setq ewidthlist (cons (list sw ew) ewidthlist))
     )
     (foreach ordinate vertexlist
       (if (not (vl-position cnt indexlist))
         (setq newlist (cons ordinate newlist))
       )
       (setq cnt (1+ cnt))
     )
     (setq cnt 0)
     (foreach bulge (reverse bulgelist)
       (if (not (vl-position cnt (list (fix (* 0.5 index)))))
         (setq new_bulge (cons bulge new_bulge))
       )
       (setq cnt (1+ cnt))
     )
     (setq cnt 0)
     (foreach ewidth (reverse ewidthlist)
       (if (not (vl-position cnt (list (fix (* 0.5 index)))))
         (setq new_ewidth (cons ewidth new_ewidth))
       )
       (setq cnt (1+ cnt))
     )
     (vl-catch-all-apply 'vlax-put
       (list obj_vla "Coordinates" (reverse newlist))
     )
     (setq nbv -1)
     (foreach bulge (reverse new_bulge)
       (vla-SetBulge obj_vla (setq nbv (1+ nbv)) bulge)
     )
     (setq nbv -1)
     (foreach ewidth (reverse new_ewidth)
       (vla-SetWidth obj_vla (setq nbv (1+ nbv)) (car ewidth) (cadr ewidth))
     )
     (vla-SetBulge obj_vla (1- prm@pt) (/ (sin (/ ang_cen 4.0)) (cos (/ ang_cen 4.0))))
     (if (not (vlax-curve-getparamatpoint obj_vla (trans pt 1 0)))
       (vla-SetBulge obj_vla (1- prm@pt) (- (/ (cos (/ ang_cen 4.0)) (sin (/ ang_cen 4.0)))))
     )
     (vla-endundomark doc)
   )
   (T
     (princ "\nLa polyligne doit avoir au moins 3 sommets!")
   )
 )
 (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

J'ai résolu le problème de signe des arrondis, et un autre qui déplaçait les arrondis de segments.

Dans l'ensemble cela devrait mieux fonctionner.

Il reste des contrôles à faire (que je n'ai pas fais!):

La polyligne doit avoir + de 2 sommets et la sélection du 1er et dernier sommet doit être prohibé.

 

J'ai modifié le code précédent.

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

Hello Bruno

 

Merci pour le developpement ...

 

Routine testee et OK sur un AutoCAD 2014 French 32 bits sous Win XP Pro SP3 !

 

Par contre j'aimerais bien que G_P_TP nous explique pourquoi

il a besoin de faire cette manipulation ? Si ce n'est pas Top-Secret !?

 

lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Par contre j'aimerais bien que G_P_TP nous explique pourquoi

il a besoin de faire cette manipulation ? Si ce n'est pas Top-Secret !?

Comme toi j'aimerais bien connaitre l'utilité de cette manip :huh:

Je n'ai toujours pas compris pourquoi dans la macro je n'arrive pas à enchainer les 3 fontions

Studio Gfilm - Agence de communication par l'image

 

"Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"

Lien vers le commentaire
Partager sur d’autres sites

La prochaine fois il faudra que je creuse un peu plus avant de poser la question

Un grand merci Bryce

J'ai corrigé sur le post

Mais à quoi sert le "d", il n'y a pas d'option d sur la fonction PE

 

ça doit être la dernière sélection, mais dans ce cas avec d ça ne fonctionne pas, je l'ai donc supprimé

La macro se termine donc par 2 clics successifs, 1 sur l'arc et l'autre sur la polyligne

Modifié par FormaBois

Studio Gfilm - Agence de communication par l'image

 

"Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"

Lien vers le commentaire
Partager sur d’autres sites

J'ai encore peaufiné:

 

Correction pour tenir compte des largeurs éventuelle des segments et en respectant l'affectation.

Correction pour un fonctionnement dans ou depuis n'importe quel SCU

Ajout des contrôles des saisies de sommets non valide.

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

Hello Bruno

 

Toujours magnifique cette routine !

 

Testee et validee sur AutoCAD 2014 32 bits sous Win XP Pro SP3 ...

 

Par contre, tu as oublie la ligne :

(vl-load-com)

qui est VITALE si on n'a pas deja chargee d'autres routines Lisp/VLisp avec cette instruction !

 

Merci, lecrabe (toujours en attente avec Lilian du pourquoi de cette routine)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Merci Lecrabe,

 

D'habitude j'y pense, mais là effectivement... oubli corrigé!

 

toujours en attente avec Lilian du pourquoi de cette routine

On peut se poser la question...

En tout cas cela peut faire de jolies moulures en partant simplement de lignes brisées.

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

Bonjour à tous.

 

J'étais en vacances donc je n'ai pas trop regardé cadxp.

 

 

je suis donc géomètre et quand je fais mes levé, il y a souvent des élément courbes.

 

Au bureau, sur autocad, je récupère un semis de points numérotés. Covadis a une fonction bien pratique qui permet de dessiner une polyligne passant des points en donnant le début et la fin.

 

Par exemple, Si j'ai une bordure qui va du 142 au 158.

je lance la comande polyligne.

je tape 142-158

je valide

j'ai ma polyligne. Soit j'ai un croquis, soit je fais à l'oeil, mais je décide alors de transformer certaines portions en arc.

En général c'est plus rapide que de construire ma polyligne point par point, en changeant de segment à arc, en donnant le début de l'arc, le milieu, la fin,...

 

voilà rien de secret... bon maintenant je vais tester un peu vos solutions...

 

 

Hello Bruno

 

Merci pour le developpement ...

 

Routine testee et OK sur un AutoCAD 2014 French 32 bits sous Win XP Pro SP3 !

 

Par contre j'aimerais bien que G_P_TP nous explique pourquoi

il a besoin de faire cette manipulation ? Si ce n'est pas Top-Secret !?

 

lecrabe

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

Lien vers le commentaire
Partager sur d’autres sites

EH bien bravo.

 

Cela fonctionne super. un grand merci à tous. je suis admiratif.

 

A bientôt.

 

N.B. j'ai répondu dans un message précédent pour l'usage.

AUTOCAD 2019 + COVADIS 17c + MENSURA 9 & 10 sous Windows 10 64bit

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é