DenisHen Posté(e) le 3 mai 2018 Posté(e) le 3 mai 2018 Bonjour à tous. Voilà, aujourd'hui, je cherche à sélectionner une polyligne dans l'EO pour en faire une fenêtre dans l'EP. J'ai trouvé plusieurs postes qui pourraient me convenir (après bidouilles) mais ils fonctionnent tous selon un bloc et non une polyligne. Ma question est donc : Comment faire un bloc depuis une polyligne ? Si quelqu'un a une solution, une idée, un conseil... Je suis preneur... 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)
lecrabe Posté(e) le 3 mai 2018 Posté(e) le 3 mai 2018 Hello Denis Par sur de bien comprendre ton besoin !? Voir la Routine VLisp de Brice realisee pour moi ... Bye, lecrabe ;; Je ne me suis pas non plus amuse a chercher le centre de gravite des polylignes et splines pour l'instant ;; Cree un bloc pour chaque objet ferme (polyligne, region, cercle, spline) selectionne ;; Demande de lecrabe sur http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=31981 ;; Brice Studer, mars 2011 - Version 1.20 corrigee (Polylignes lourdes + Polylignes 3D + MPolygons) ;; brice@creao.fr - http://www.creao.fr/uploads/lisp/o2bl2.lsp puis o2bl3.lsp ;; Routine O2BL renommee en POL2BL ;; ;; Limitations : Regions avec Z <> ZERO = non traitees ;; (defun c:O2BL (/ bname numlen *error* obj acdoc ms blks blk ss ent ent2 count errcount errflag lay pref pt lst pt2 i nbname) (defun c:POL2BL (/ bname numlen *error* obj acdoc ms blks blk ss ent ent2 count errcount errflag lay pref pt lst pt2 i nbname) ; ;~~~~~~~ CONFIG ~~~~~~~~~~~ (setq bname "BL_") ; préfixe du nom des blocs créés (setq numlen 5) ; nombre de chiffres de la numérotation, nil pour auto (ex.: si nil, BL_12 ; si 4, BL_0012) ;~~~~~~~ FIN CONFIG ~~~~~~~~~~~ (vl-load-com) ;~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~~~ (defun ZeroPad (str len) ; string en entrée, string en sortie "paddée" avec des 0 ; len : nombre de caractères final, nil sort une chaîne identique à celle passée en argument (if len (while (< (strlen str) len) (setq str (strcat "0" str)) str ) str ) ) (defun gc:VariantToLispData (var) ; par (gile) (cond ((= (type var) 'variant) (gc:VariantToLispData (vlax-variant-value var))) ((= (type var) 'safearray) (mapcar 'gc:VariantToLispData (vlax-safearray->list var)) ) (T var) ) ) ;~~~~~~~ FIN SOUS-FONCTIONS ~~~~~~~~~~~ (setq obj (vlax-get-acad-object) acdoc (vla-get-ActiveDocument obj) ms (vla-get-modelspace acdoc) blks (vla-get-blocks acdoc) ) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if ss (vla-delete ss)) (vla-endundomark acdoc) (princ) ) (vla-startundomark acdoc) (if (setq ss (ssget '( (-4 . "<OR") (0 . "CIRCLE") (-4 . "<AND") (0 . "*POLYLINE") (-4 . "&") (70 . 1) (-4 . "AND>") (0 . "REGION") (-4 . "<AND") (0 . "SPLINE") (-4 . "&") (70 . 1) (-4 . "AND>") (0 . "MPOLYGON") (-4 . "OR>")) ) ) (progn (initget "Courant Origine") (setq lay (getkword "\nCalque pour Insertion des blocs [Courant/Origine] <Courant> : ")) (if (not lay) (setq lay "Courant")) (setq pref (getstring "\nPrefixe de numerotation (Entree pour aucun) : ")) (if (not pref) (setq pref "")) (setq ss (vla-get-activeselectionset acdoc)) (setq count 0) (setq errcount 0) (setq i 1) (vlax-for ent ss (cond ((= (vla-get-objectname ent) "AcDbRegion") (if (not (vl-catch-all-error-p (setq pt (vl-catch-all-apply 'vla-get-centroid (list ent))) ) ) (progn (setq errflag nil) (setq pt (vlax-3d-point (gc:VariantToLispData pt))) ) (progn (setq errflag T) (setq errcount (1+ errcount)) ) ) ) ((= (vla-get-objectname ent) "AcDbCircle") (setq pt (vlax-3d-point (gc:VariantToLispData (vla-get-center ent)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDb3dPolyline") (setq pt (vlax-3d-point (gc:VariantToLispData (vla-get-coordinate ent 0)))) (setq errflag nil) ) ((or (= (vla-get-objectname ent) "AcDbPolyline") (= (vla-get-objectname ent) "AcDb2dPolyline") ) (setq pt (gc:VariantToLispData (vla-get-coordinate ent 0))) (setq pt (vlax-3D-point (list (car pt) (cadr pt) (vla-get-elevation ent)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDbSpline") (setq lst (gc:VariantToLispData (vla-get-controlpoints ent))) (setq pt (vlax-3d-point (list (car lst) (cadr lst) (caddr lst)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDbMPolygon") (setq pt (cdr (assoc 11 (entget (vlax-vla-object->ename ent))))) (setq pt (vlax-3D-point (list (car pt) (cadr pt) (vla-get-elevation ent)))) (setq errflag nil) ) ) (if (not errflag) (progn (while (tblsearch "BLOCK" (strcat bname pref (zeropad (itoa i) numlen))) (setq i (1+ i)) ) (setq blk (vla-add blks pt (setq nbname (strcat bname pref (zeropad (itoa i) numlen)))) ) (vla-put-layer (setq ent2 (vla-copy ent)) "0") (vla-copyobjects acdoc (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 0)) (list ent2)) blk) (setq blk (vla-insertblock ms pt nbname 1 1 1 0)) (if (= lay "Origine")(vla-put-layer blk (vla-get-layer ent))) (vla-delete ent2) (setq count (1+ count)) ) ); if not errflag );vlax-for ent (princ (strcat "\n" (itoa errcount) " objets ignores. " )) (princ (strcat "\n" (itoa count) " blocs crees. " )) );progn if ss );if ss (*error* nil) ); ;; (princ "\nCommande à utiliser: O2BL") (princ "\nCommande à utiliser: POL2BL") (princ) Autodesk Expert Elite Team
(gile) Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Salut, Si je comprends bien, tu voudrais "sélectionner une polyligne dans l'EO pour en faire une fenêtre dans l'EP" et, parce que tu as trouvé des routines qui transforment un bloc en fenêtre flottante, tu cherches maintenant à transformer une polyligne en bloc. C'est un peu comme si tu voulais aller de Paris à Marseille et que, parce que tu as trouvé un truc pour aller de Florence à Marseille, tu cherches maintenant comment faire de Paris à Florence. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Hello +1 avec Gilles ! Merci Gilles pour ta bonne lecture de la demande de Denis ! J'étais un peu trop "scotché" sur la TV pour un Truc "Marseillais"... Bonne Journee a Tous, Bye, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 4 mai 2018 Auteur Posté(e) le 4 mai 2018 Bonjour à tous, et merci pour votre aide. @lecrabe : la routine de Brice est hyper compliquée pour moi, mais je vais tenter de la comprendre pour l'adapter à mes besoins. @(gile) : oui, c'est exactement ça (en plus, je ne suis jamais allé à Florence), comme je n'ai rien trouvé pour faire ce que je voulais (sélection d'une polyligne en EO -> création d'une fenêtre en EP), j'ai pensé que c'était plus facile en transformant cette polyligne en bloc puis de créer une fenêtre dans l'EP. Sinon, d'autres l'auraient fait avant moi... Mais si tu as mieux, je suis toujours preneur... Merci encore pour vos réponses... 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)
Olivier Eckmann Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Bonjour, le plus simple si j'ai tout compris:- sélection de la polyligne en EO- calcul de l'emprise X,Y min et X,Y Max- passage en EP- dessin d'une fmult rectangulaire selon dimensions emprise et fonction de l'échelle souhaitée- entrée en EO (à l'intérieur de la fenêtre)- zoom centre sur le centre de l'emprise- zoom ...XP selon échelle- chspace et sélection de la poly- retour en EP et utilisation de la poly comme contour de délim de la fenêtre rectangulaire. Olivier
DenisHen Posté(e) le 4 mai 2018 Auteur Posté(e) le 4 mai 2018 Bonjour Olivier, et merci pour ton aide. Je vais essayer de suivre ta méthode, mais ce n'est pas gagné... Encore merci... 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)
didier Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Coucou Encore une fois ta question ne comporte pas tous les éléments susceptibles de te fournir une réponseOn t'en préviens à chaque fois et à chaque fois tu nous promets de faire des effortsEt nous, comme on est des gentils garçons, à chaque fois on cherche à t'aider mais c'est fatigant, admets-le. Essaie de découper par phases comme si tu devais faire "à la main" ce que tu veux "programmer"je prends une polyligne en EOje la copieje passe en EPje dépose la polyligne copiéeet .... là tu ne nous dis plus rien... Une fois la polyligne copiée COMMENT vas-tu faire le zoom XP par exemple ? Je te donne une piste de recherche sachant que tu ne nous donnes pas ton code en l'état ce qui est encore plus dur pour t'aider : (setvar "tilemode" 1) (setq ent (car (entsel "\nChoix de la polyligne\n"))) (command "_.copybase" "0,0" ent "") (setvar "tilemode" 0) (command "_.pasteclip" "0,0") Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 4 mai 2018 Auteur Posté(e) le 4 mai 2018 Salut didier, et merci pour ton aide. Je ne vois pas ce que j'ai mal exprimé :...je cherche à sélectionner une polyligne dans l'EO pour en faire une fenêtre dans l'EP.Je croyais que c'était claire, mais apparemment je me suis trompé... :huh: Encore une fois ta question ne comporte pas tous les éléments susceptibles de te fournir une réponseOn t'en préviens à chaque fois et à chaque fois tu nous promets de faire des effortsEt nous, comme on est des gentils garçons, à chaque fois on cherche à t'aider mais c'est fatigant, admets-le.Si tu crois que c'est volontaire... :blink: Pour l’instant je progresse dans la méthode que m'a proposée Olivier. Actuellement, je sélectionne la polyligne, je repère ses sommets (j'ai donc les deux longueurs du rectangle grace aux coordonnées des sommets de cette polyligne) et je sauvegarde une vue (avec ces coordonnées), je passe en EP, j'en suis là pour l'instant. La prochaine étape est de créer une fenêtre rectangulaire qui correspond aux longueurs et l'échelle souhaitée. Ensuite, j'activerais la fenêtre créée et je rappellerais la vue sauvegardée... Est-je plus explicite ? Je ne poste pas mon code car il est encore trop "brouillon". Je croyais avoir le temps de le faire aujourd'hui, mais ça va attendre ce soir... Encore merci pour ton aide... 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)
didier Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Coucou Ce qui est nécessaire de connaître et que tu n'as pas encore exprimé c'est :Que faire de la polyligne transformée en "viewport" ?Et surtout :Quelle dimensions doit-elle avoir ?Ça ne peut pas être la polyligne initiale, il faut y applique un facteur d'échelle, de 0.001 par exemple si tu es en mm en EP et en m en EOJe ne pense pas que ce que je t'ai proposé soit une impasse il faut creuser plus profond et surtout y appliquer ce que je viens de te demander Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 4 mai 2018 Auteur Posté(e) le 4 mai 2018 Que faire de la polyligne transformée en "viewport" ?Je n'en sais encore rien, mais un copier/coller de la polyligne me semble inutile dans ce que m'a proposé Olivier. Et elle fera doublon avec la fenêtre. Quelle dimensions doit-elle avoir ?Je pense surtout à créer une fenêtre (viewport) aux mêmes proportion que la polyligne avec un coef selon l'échelle. Une fois activée, je n'aurais plus qu'à rappeler la vue enregistrée. Ça ne peut pas être la polyligne initiale...Entièrement d'accord. Je ne pense pas que ce que je t'ai proposé soit une impasse...Mon problème est que je ne sais pas quoi faire de la polyligne une fois collée dans l'EP. Et je pense que ce que j'ai commencé (méthode d'Olivier) correspond plus à mes moyens. Je te remercie encore pour ton aide, ton idée reste bonne, mais est hors de mes compétences. Et bon week-end à tous... ;) 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)
Patrick_35 Posté(e) le 4 mai 2018 Posté(e) le 4 mai 2018 Salut Avec le lisp PRE, tu devrais trouver ton bonheur.A partir d'un cartouche, j'extrais les coordonnées (boundingbox) et je créé la fenêtre en EP.Tu peux extrapoler pour ta polyligne. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 6 mai 2018 Auteur Posté(e) le 6 mai 2018 Salut Patrick_35 et merci pour ce code, je regarde ça... 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)
DenisHen Posté(e) le 7 mai 2018 Auteur Posté(e) le 7 mai 2018 Salut à tous... Patrick_35, après maintes et maintes relecture de ton code, il s'avère bien au dessus de mes compétences... :o Je vais rester sur la méthode d'Olivier, qui elle, reste à ma portée... :huh: Par contre, ton lisp ONG.LSP m'aide beaucoup... Merci encore... ;) 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)
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