Fraid Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Bonjour, y a t'il une astuce pour continuer une polyligne apres interruptionjusqu'a maintenant je joins la nouvelle polylignemais des fois j'oublie de le faire :P alors que si je pouvais simplement la continuer ... https://github.com/Fraiddd
lovecraft Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Bonjour,oui c'est possibletu fais pedit puis M pour modifier puis I pour inserer un nouveau sommet.@plus http://www.youtube.com/user/CADMINATOR?feature=mhee
Fraid Posté(e) le 25 septembre 2007 Auteur Posté(e) le 25 septembre 2007 merci je connais bien mpedit mais on ne reprend pas la main comme si on dessinais une polyligne https://github.com/Fraiddd
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Sinon essaie ça :;;; Continuer une polyligne sans obligation de partir par le dernier point (defun c:copo1 (/ lst cmdecho pol newpol) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq pol (car (entsel "\nSélectionner la polyligne à continuer :"))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget pol)))) ) (progn (princ "\npremier point de la nouvele polyligne : ") (command "_.PLINE") (while (not (zerop (getvar "cmdactive")))(command pause)) (setq newpol (entlast)) (setq lst (append (mapcar 'cdr (remove-if-not '(lambda (x) (= (car x) 10)) (entget pol))) (mapcar 'cdr (remove-if-not '(lambda (x) (= (car x) 10)) (entget pol))) )) (if (doubles lst) (command "pedit" pol "j" newpol "" "") (princ "\nAucun sommet en commun.\nImpossible de continuer la polyligne.") ) )) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) ) ;;; Continuer une polyligne avec obligation de partir par le dernier point (defun c:copo2 (/ cmdecho pol newpol) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq pol (car (entsel "\nSélectionner la polyligne à continuer :"))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget pol)))) ) (progn (command "_.PLINE" (cdr (assoc 10 (reverse (entget pol))))) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq newpol (entlast)) (command "pedit" pol "j" newpol "" "") )) (setvar "cmdecho" cmdecho) ) ;;; DOUBLES Retourne la liste des doublons d'une liste (defun doubles (lst) (if lst (if (member (car lst) (cdr lst)) (cons (car lst) (doubles (cdr lst))) (doubles (cdr lst)) ) ) ) Tu dois avoi une préférence pour copo2... "Chacun compte pour un, et nul ne compte pour plus d'un."
Fraid Posté(e) le 25 septembre 2007 Auteur Posté(e) le 25 septembre 2007 merci ton lisp a l'air génialmais ne tourne pas il y a peu etre une erreur de frappe? https://github.com/Fraiddd
Joffoon Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Salut, je comfirme ce lisp est super et chez moi sa fonctionne bien, et j'avoue que ça va pas mal me dépanner Merci à vous,Joff Le ridicule ne tue pas, il te rend plus fort!
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Cad ?Chez moi, il fonctionne très bien !(defun c:COPO (/ cmdecho pol newpol) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq pol (car (entsel "\nSélectionner la polyligne à continuer :"))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget pol)))) ) (progn (command "_.PLINE" (cdr (assoc 10 (reverse (entget pol))))) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq newpol (entlast)) (command "pedit" pol "j" newpol "" "") )) (setvar "cmdecho" cmdecho) ) Tu as besoin de ça uniquement...Tu as quelle version autoCAD ?Quelle est l'erreur ? [Edité le 25/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
Fraid Posté(e) le 25 septembre 2007 Auteur Posté(e) le 25 septembre 2007 sa marche merci c'est pil poil se que je voulais https://github.com/Fraiddd
Fraid Posté(e) le 25 septembre 2007 Auteur Posté(e) le 25 septembre 2007 non en fait je suis aller trop vite je voudrai continuer la polygne que l'on selectionela il faut que je la joingne apres https://github.com/Fraiddd
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Et bien tu n'as plus qu'à marquer ce sujet comme résolu ! ;) A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 la il faut que je la joingne apresEuh normalement non... Visuellement :1- tu sélectionnes ta polyligne2- tu la continues depuis le dernier sommet saisi... En code ça se passe autrement... 1- Tu sélectionnes2- Tu créés une deuxième polyligne à partir du dernier pt de la première3- Commande pedit+joindre pour joindre les deux polylignes... Il faut utiliser COPO2, ou recharges le dernier code que j'ai mis sur cette page... COPO... Au fait COPO pour COntinuer POlyligne... Qu'on se le dise ! Sinon on pourrait imaginer une polyligne jointe avec ENTMAKE... "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Voilà un exemple de création de polyligne avec un entmake. Par contre je n'arrive pas à reproduire la fermeture de la polyligne... Si qqn a une idée !(defun c:COPO_ENTM (/ cmdecho pol newpol lst) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq pol (car (entsel "\nSélectionner la polyligne à continuer :"))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget pol)))) ) (progn (command "_.PLINE" (cdr (assoc 10 (reverse (entget pol))))) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq newpol (entlast)) (setq lst (append (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) (entget pol)) (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) (entget newpol)) )) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 8 (cdr (assoc 8 (entget pol)))) (cons 62 (cdr (assoc 62 (entget pol)))) (cons 90 (+ (length (vl-remove-if-not '(lambda (x) (eq (car x) 10)) (entget pol))) (length (vl-remove-if-not '(lambda (x) (eq (car x) 10)) (entget newpol))) )) ) lst ) ) (entdel pol) (entdel newpol) (redraw (entlast)) )) (setvar "cmdecho" cmdecho) (princ) ) A bientôt !Matt. Edition : Ajout des vl- à remove-if-not... Vive BricsCAD !! [Edité le 25/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Salut Matt2006, À part pour l'exercice, je ne vois pas l'intérêt de joindre les polylignes avec entmake.Tu commences avec (command "-.pline" ...) et une boucle sur CMDACTIVE ,ce qui est fort bien pour conserver les options de la commande polyligne. Pourquoi ne pas continuer avec (command "_.pedit" ...) surtout que dans ce cas, il n'y a pas à se soucier de la valeur de PEDITACCEPT, puisqu'il s'agit de joindre deux polylignes. Ta première routine est mieux, à mon avis, à ceci près qu'il faut mettre CMDECHO à 1 pour avoir les invites pendant la "pause" et qu'il est préférable d'incorporer la gestion de cette variable au progn pour assurer sa remise à sa valeur initiale en cas de choix d'une mauvaise entité ou d'une annulation.Par sécurité, on peut aussi récupérer la dernière entité créée avant le lancement de la commande pour pouvoir s'assurer qu'une nouvelle polyligne a été créée avant de joindre. (defun c:ppl (/ pl ent echo) (if (and (setq pl (car (entsel "\nSélectionnez la polyligne à prolonger: ")) ) (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE") ) (progn (setq ent (entlast) echo (getvar "CMDECHO") ) (setvar "CMDECHO" 1) (command "_.pline" (trans (cdr (assoc 10 (reverse (entget pl)))) pl 1) ) (while (/= 0 (getvar "CMDACTIVE")) (command pause) ) (or (equal ent (entlast)) (command "_.pedit" pl "_j" (entlast) "" "") ) (setvar "CMDECHO" echo) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Par sécurité, on peut aussi récupérer la dernière entité créée avant le lancement de la commande pour pouvoir s'assurer qu'une nouvelle polyligne a été créée avant de joindre. J'arrive pas à comprendre cette logique... :o Je vois vraiment pas.... Peux-tu t'expliquer encore mieux que ce tu as déjà fait ? Chu un peu neuneu des fois... ;) À part pour l'exercice Mais c'est exactement pour ça mon ami !!! je voudrai continuer la polygne que l'on selectionela il faut que je la joingne apres Sinon, tu n'as vu l'erreur décelée par Fraid non plus ?? Je vois vraiment pas.. Ca fonctionne très bien chez moi !Désolé Fraid, mais je vois vraiment pas... En tout cas de me montrer une autre façon de procéder, et de voir les erreurs qui se cachent dans mon code !C'est cool. A bientot !Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Par sécurité, on peut aussi récupérer la dernière entité créée avant le lancement de la commande pour pouvoir s'assurer qu'une nouvelle polyligne a été créée avant de joindre. J'arrive pas à comprendre cette logique... :o Je vois vraiment pas.... Peux-tu t'expliquer encore mieux que ce tu as déjà fait ? Chu un peu neuneu des fois... ;) C'est un peu tordu et la probabilité est faible, je te l'accorde, mais un soucis qu'on doit avoir à l'esprit c'est : maintenant que ma routine marche qu'est-ce qui pourrait se passer si un utilisateur ne procèdait comme je l'imagine. Imaginons, la dernière entité créée est un arc, un ligne ou une polyligne jointive au départ de la polyligne sélectionnée, l'utilisateur lance ppl (ou copo) mais annule la commande avant de spécifier un point, la dernière entité serait jointe à la polyligne. Donc si après le (while ...) la dernière entité est la même que celle créée avant le lancement de la fonction on ne joint pas. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
richard-c Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Bonjour, je me suis permis de rajouter qq ligne au cas ou PLINETYPE etait à zéro (defun c:ppl (/ pl ent echo)(if(and (setqpl (car (entsel "\nSélectionnez la polyligne à prolonger: ")));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(if (/= PLINETYPE 2)(progn(setvar "PLINETYPE" 2) (command "_.pedit" pl "" "" "")(= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)(progn(setq ent (entlast)echo (getvar "CMDECHO"))(setvar "CMDECHO" 1)(command "_.pline"(trans (cdr (assoc 10 (reverse (entget pl)))) pl 1))(while (/= 0 (getvar "CMDACTIVE"))(command pause))(or (equal ent (entlast))(command "_.pedit" pl "_j" (entlast) "" ""))(setvar "CMDECHO" echo)))(princ)) Bonne journée.
Matt666 Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Ah oui mais ok, j'avais pas vu le or !!!!(or (equal ent (entlast))Donc si après le (while ...) la dernière entité est la même que celle créée avant le lancement de la fonction on ne joint pasOui c'est une bonne idée... je me suis permis de rajouter qq ligne au cas ou PLINETYPE etait à zéroToutes les amélios sont les bienvenues ! A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
Fraid Posté(e) le 26 septembre 2007 Auteur Posté(e) le 26 septembre 2007 Bonjour, merci pour se nouvel outil cela ne marchais pas car je finissais en tappant echap et non entrée (mauvaise habitude) https://github.com/Fraiddd
(gile) Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Bon, on perd beaucoup en concision, mais ce coup ci, je pense avoir "bétonné", j'ai même intégré la gestion de PLINETYPE -merci Richard-c- (il y en a qui joue encore avec cette variable ?). Désormais, selon le côté sélectionné sur la polyligne la nouvelle polyligne démarre soit départ soit à la fin de l'ancienneL'utilisateur peut terminer la nouvelle polylgne en faisant Echap (Fraid) elle sera jointe à l'ancienne.J'ai aussi ajouté un groupe undo pour pouvoir annuler toute l'opération. (defun c:ppl (/ err echo ptyp pl ent pt) (vl-load-com) (defun err (msg) (if (= msg "Fonction annulée") (progn (setvar "CMDECHO" 0) (or (equal ent (entlast)) (command "_.pedit" pl "_j" (entlast) "" "") ) (princ) ) (princ (strcat "\nErreur: " msg)) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setvar "CMDECHO" echo) (setvar "PLINETYPE" ptyp) (setq *error* m:err m:err nil ) (princ) ) (setq echo (getvar "CMDECHO") ptyp (getvar "PLINETYPE") m:err *error* *error* err ) (if (and (setq pl (entsel "\nSélectionnez la polyligne à prolonger: ") ) (= (cdr (assoc 0 (entget (car pl)))) "LWPOLYLINE") (zerop (logand 1 (cdr (assoc 70 (entget (car pl)))))) ) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setq ent (entlast) pt (trans (osnap (cadr pl) "_nea") 1 0) ) (if ( (car pl) (vlax-curve-getEndPoint (car pl)) ) (vlax-curve-getDistAtPoint (car pl) pt) ) (vlax-curve-getDistAtPoint (car pl) pt) ) (setq pt (trans (vlax-curve-getEndPoint (car pl)) 0 1)) (setq pt (trans (vlax-curve-getStartPoint (car pl)) 0 1)) ) (setvar "CMDECHO" 1) (setvar "PLINETYPE" 2) (command "_.pline" pt) (while (/= 0 (getvar "CMDACTIVE")) (command pause) ) (setvar "CMDECHO" 0) (or (equal ent (entlast)) (command "_.pedit" pl "_j" (entlast) "" "") ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) ) ) (setvar "CMDECHO" echo) (setvar "PLINETYPE" ptyp) (setq *error* m:err m:err nil ) (princ) ) [Edité le 26/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Pfff, c'est du vlisp...Déçu... :) il y en a qui joue encore avec cette variable ?En fait BricsCAD comporte un petit bug, qui lorsque la commande pedit a échoué, cette même polyligne devient une polyligne lourde... Donc ce n'ets pas dénué d'intérêt pour les utilisateurs intelliCAD... Je ferai ptet une version autolisp avec tes améliorations (qui sont d'ailleurs vachement bien !! Surtout selon le coté sélectionné)... Histoire de rendre possible l'utilisation de cette routine pour des intelliCadiens... A bientot !Matt. [Edité le 27/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
MamyTina Posté(e) le 15 mars 2017 Posté(e) le 15 mars 2017 Bonjour à tous!Je remonte un peu sur ce sujet vieux de 10ans!ppl.lsp et copo2.lsp marche très bien sur les polylignes 2D mais j'aimerais savoir si on peut les adapter sur les polylignes 3D.Merci A+ AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
(gile) Posté(e) le 15 mars 2017 Posté(e) le 15 mars 2017 Salut, PPL devrait marcher avec les polylignes et les polylignes 3d (defun c:ppl (/ *error* err echo ptyp pl elst lw ent pt) (vl-load-com) (defun *error* (msg) (if msg (progn (or (equal ent (entlast)) (entdel (entlast))) (or (= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) ) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setvar "CMDECHO" echo) (setvar "PLINETYPE" ptyp) (princ) ) (setq echo (getvar "CMDECHO") ptyp (getvar "PLINETYPE") ent (entlast) ) (if (and (setq pl (entsel "\nSélectionnez la polyligne à prolonger: ") ) (setq elst (entget (car pl))) (or (setq lw (= (cdr (assoc 0 elst)) "LWPOLYLINE")) (and (= (cdr (assoc 0 elst)) "POLYLINE") (= 8 (logand 8 (cdr (assoc 70 elst)))) ) ) (zerop (logand 1 (cdr (assoc 70 elst)))) ) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq pt (trans (osnap (cadr pl) "_nea") 1 0)) (if (< (- (vlax-curve-getDistAtPoint (car pl) (vlax-curve-getEndPoint (car pl)) ) (vlax-curve-getDistAtPoint (car pl) pt) ) (vlax-curve-getDistAtPoint (car pl) pt) ) (setq pt (trans (vlax-curve-getEndPoint (car pl)) 0 1)) (setq pt (trans (vlax-curve-getStartPoint (car pl)) 0 1)) ) (setvar "CMDECHO" 1) (setvar "PLINETYPE" 2) (if lw (command "_.pline" pt) (command "_.3dpoly" pt) ) (while (/= 0 (getvar "CMDACTIVE")) (command pause) ) (setvar "CMDECHO" 0) (or (equal ent (entlast)) (command "_.pedit" pl "_j" (entlast) "" "") ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (*error* nil) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MamyTina Posté(e) le 15 mars 2017 Posté(e) le 15 mars 2017 Hello,Ça marche sur les polylignes 3D sauf qu’il ne fait pas de jonction et ne ferme pas (option clore) sur la polyligne traité.A+ AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant