Bonjour,
Je voudrais pouvoir tracer plusieurs polylignes comme s'il s'agissait d'une seule polyligne.
Le but est de pouvoir tracer des câbles électriques en VRD :
Ici j'ai utilisé l'option décaler mais ce n'est pas pratique.
Merci à tous !
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Tracer des polylignes parallèles en une seule fois/tracer un faisceau de polylignes
Résolu ! Accéder à la solution.
Résolu par O_Eckmann. Accéder à la solution.
Résolu par O_Eckmann. Accéder à la solution.
Bonjour,
Merci, mais ce serait plus sympa de répondre en français étant sur un Forum Francophone...
Christian
Christian REB
Merci à vous.
Par contre j'ai oublié de préciser que je suis sur Autocad LT 2024.
Donc ça ne fonctionne pas 😞
Hello
OUI j utilise sur ACAD / ACAD MAP / etc 201X-202X la routine "MPL216"
(moins sophistiquee que celle de Lee-Mac) jointe ...
Et je viens de la tester sur ACAD LT 2024 : elle ne fonctionne pas !
En fait il nous faudrait un Pro du Lisp/VLisp sur CE probleme ACAD LT 2024 !?
Bye, Patrice (The Old French EE Froggy)
Patrice BRAUD
@rebcao cette discussion avait été commencée (par erreur) sur le forum anglophone, puis déplacée ici.
Hello,
C'est normal, puisque la notion de LIGNE MULTIPLE, commande : _MLINE n'existe toujours pas dans les versions LT !
Christian
Christian REB
OK, je te remercie.
Christian
Christian REB
Finalement, il sert à quoi ce LISP puisque visiblement la commande _MLINE fait déjà le JOB ?
Pas le tien mais celui de Lee MAC proposé par ВeekeeCZ
Mais pour l'instant ça ne fonctionnera pas avec le LTs.
Christian
Christian REB
@Bur_dessin a écrit :
Merci à vous.
Par contre j'ai oublié de préciser que je suis sur Autocad LT 2024.
Donc ça ne fonctionne pas 😞
Ok, then you can't use MLINE.
Have you tried Lee's LISP? LISP support was newly added to LT 2024, so it should work.
NON, la commande _MLINE n'existe pas dans les versions LT !
Christian
Christian REB
Hello @rebcao
ZUT je suis un VIEUX NUL, j avais completement oublie que les MLINEs n existent pas dans ACAD LT 20XX !!
Donc "mon" MPL216 ne peut pas marcher non plus !
Bon WE, Bye, Patrice
Patrice BRAUD
Bonjour @Bur_dessin ,
En m'inspirant du code fourni dans cette discussion, j'ai élaboré ce code qui devrait fonctionner sur LT 2024.
(vl-load-com)
;; RJP » 2020-01-22
(defun _drawpolyline (lsInfo bKeepBase / oEntLast oPoly oVlaPoly dOffset sLayer sLineType iColor bKeepBase)
(setq oEntLast (entlast))
(vl-cmdf "_.pline")
(while (> (getvar 'cmdactive) 0) (command "\\"))
(if (not (equal oEntLast (setq oPoly (entlast))))
(progn
(setq oVlaPoly (vlax-ename->vla-object oPoly))
(setq I 0)
(repeat (length lsInfo)
(setq oInfo (nth I lsInfo))
(setq I (1+ I))
(setq dOffset (car oInfo)
sLayer (cadr oInfo)
sLineType (caddr oInfo)
iColor (cadddr oInfo)
)
; décalage
(setq lsOffsetedCurve (vlax-invoke oVlaPoly 'offset dOffset))
(setq J 0)
(repeat (length lsOffsetedCurve)
(setq oVlaCurve (nth J lsOffsetedCurve))
(setq J 0)
(vla-put-layer oVlaCurve sLayer)
(vla-put-color oVlaCurve iColor)
(vla-put-linetype oVlaCurve sLineType)
)
)
(if (not bKeepBase) (entdel oPoly))
)
)
T
)
; Parallèle Polyligne générique
(defun C:PPL ( / iNbPoly sChoix dOffset sLayer sLineType iColor lsOffset bKeepBase)
(initget 7)
(setq iNbPoly (getint "\nNombre de ligne parallèle : "))
(initget 7)
(setq dOffset (getdist "\nEcart entre les lignes : "))
(initget 1 "Centre Gauche Droit")
(setq sChoix (getkword "\nCôté de décalage [Centre/Gauche/Droit] : "))
(setq sLayer (getvar "CLAYER"))
(setq iColor (getvar "CECOLOR"))
(cond ((= iColor "BYLAYER") (setq iColor 256))
((= iColor "BYBLOCK") (setq iColor 0))
)
(setq sLineType (getvar "CELTYPE"))
(setq bKeepBase T lsOffset nil)
(cond
((= sChoix "Droit")
(setq I 1)
(repeat (1- iNbPoly)
(setq lsOffset (append lsOffset (list (list (* dOffset I) sLayer sLineType iColor))))
(setq I (1+ I))
)
)
((= sChoix "Gauche")
(setq I 1)
(repeat (1- iNbPoly)
(setq lsOffset (append lsOffset (list (list (* dOffset I -1.0) sLayer sLineType iColor))))
(setq I (1+ I))
)
)
((= sChoix "Centre")
(setq dNbOffset (* 0.5 iNbPoly))
(if (= dNbOffset (fix dNbOffset))
(progn
(setq I 0)
(repeat (fix dNbOffset)
(setq lsOffset (append lsOffset (list (list (+ (* 0.5 dOffset) (* dOffset I)) sLayer sLineType iColor))))
(setq lsOffset (append lsOffset (list (list (- (* -0.5 dOffset) (* dOffset I)) sLayer sLineType iColor))))
(setq I (1+ I))
)
(setq bKeepBase nil)
)
(progn
(setq I 1)
(repeat (fix dNbOffset)
(setq lsOffset (append lsOffset (list (list (* dOffset I) sLayer sLineType iColor))))
(setq lsOffset (append lsOffset (list (list (* dOffset I -1.0) sLayer sLineType iColor))))
(setq I (1+ I))
)
)
)
)
)
(while (_drawpolyline lsOffset bKeepBase))
)
; 3 polylignes parallèles décalées de valeur spécifique, dans des calques différents,
; avec des couleurs et type de lignes différents
; (les calques et types de ligne doivent exister dans le dessin)
(defun c:PPLEDF3 nil
(while (_drawpolyline
(list (list 0.2 "EDF" "Axes" 4) ;décalage 0.2 à droite, calque EDF, type de ligne Axes, couleur 4
(list 0.4 "EDF" "Axes" 5) ;décalage 0.4 à droite, calque EDF, type de ligne Axes, couleur 5
(list -0.3 "EDF" "ByLayer" 256) ;décalage 0.3 à gauche, calque EDF, type de ligne Ducalque, couleur Ducalque
)
nil ; ne conserve pas la polyligne dessinée
)
)
(princ)
)
Le principe c'est d'utiliser la commande polyligne pour dessiner une polyligne, puis d'appliquer un décalage et de changer le calque, la couleur et le type de ligne à l'entité décalée.
Il y a une fonction PPL qui dessine X polylignes décalées de la valeur souhaité, mais en conservant le calque, couleur et type de ligne de l'entité de base
Et un exemple de fonction PPLEDF3 dans lequel on définit la liste des décalages, calque, couleur et type de ligne pour chacun d'eux
On pourrait aller plus loin avec un fichier de paramétrage qui stockerait les modèles voir un dialogue pour définir cette bibliothèque.
Olivier Eckmann
Hello @O_Eckmann et @Bur_dessin
La routine de Olivier est Tip-Top, je viens de la tester sur ACAD LT 2024 !
Mais il faut ajouter une ligne au debut de la routine :
(vl-load-com)
Sinon elle ne fonctionnera pas !
Bye, Patrice
Patrice BRAUD
Bonjour,
Merci de votre réponse.
J'ai réussi à faire ceci grâce à votre Lisp :
Par contre je ne saisis pas comment changer les types de lignes ou les couleurs.
Je n'ai que les mêmes lignes copiées.
Merci à vous
Hello Olivier, @O_Eckmann
Par curiosité j'avais testé avec une LT 2024 et ça fonctionne parfaitement...
Mais comme toujours lorsque l'on propose une solution il y a toujours la petite question ! Est-ce que ... !!!
Effectivement le principe de la MULTI LIGNE c'est de pouvoir définir l'espacement différent entre chaque ligne.
Ce qui serait TOP c'est de pouvoir gérer le calque directement pour chaque ligne.
Christian
Christian REB
Bonjour,
Le problème, c'est que si on demande les décalages, calques... à chaque lancement de la commande, ça devient lourd.
C'est pour cela que j'ai écrit une commande générique qui prend en charge une liste de paramètres pour pouvoir créer n'importe quoi.
La commande PPL, est générique pour créer des polylignes parallèles, toutes de même espacement, toutes avec les propriétés coutantes.
La commande PPLEDF3 étaient juste un exemple de ce que l'on peut faire si on a toujours le même modèle. On peut créer sa propre commande LISP en dupliquant le code et en mettant autant de lignes que l'on souhaite de décalage.
(list 0.4 "EDF" "Axes" 5)
Dans la fin de mon message je parlais d'une évolution qui permettrait de stocker ces modèles dans un fichier de paramétrage, voir un dialogue qui permette de créer cette bibliothèque de modèle.
Dans ce cas, on crée une nouvelle commande qui demanderait juste le nom du modèle et qui dessinerait tout comme il faut.
Mais on peut imaginer une commande qui reprenne ton idée et demande les valeurs de chaque décalage et le calque afin de reconstruire la pseudo multiligne à chaque fois.
Olivier
Olivier Eckmann
Ok,
N'ayant jamais programmé dans Autocad, je me contenterai de votre lisp envoyé, ça m'aide déjà pas mal.
Je gère les calques des polylignes en copiant les propriétés d'autres lignes références, c'est déjà plus rapide que de faire des décalages.
Merci
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.