zza427 Posté(e) le 30 août 2016 Posté(e) le 30 août 2016 Bonjour, je cherche à savoir si quelqu'un a une idée de comment modifier plusieurs attributs d'un même bloc inséré dans l'espace papier de plusieurs présentations? J'ai un fichier avec une dizaine de présentations avec le cartouche de chaque présentation en bloc inséré directement dans l'espace papier. Je cherche a modifier certains des attributs du cartouche dans toutes les présentations. Je n'arrive pas a faire ATTOUT sur l'ensemble des présentations, je n'arrive à le faire qu'une présentation après l'autre (dans ce cas autant modifier directement à la main dans les propriétés). Les attributs ont déjà une valeur, aussi je n'arrives pas en modifiant la définition des blocs à modifier les valeurs des attributs. J'imagine que je pourrais le faire avec rbloc mais je serais obligé de le faire présentation par présentation. Est ce que quelqu'un aurais une idée pour le faire rapidement? En sachant qu'un petit gain de temps serait déjà bien car je vais faire ça pendant quinze jours...
Patrick_35 Posté(e) le 30 août 2016 Posté(e) le 30 août 2016 Salut Avec MAT ? @+ 1 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebulon_ Posté(e) le 30 août 2016 Posté(e) le 30 août 2016 Bonjour, à partir de mat de Patrick_35 j'ai fait ceci pour que l'outil ressemble à la commande BATTMAN Le lien vers le dcl et le lisp n'est plus actif dans la discussion ci-dessus. le fichier battval.dcl : battval : dialog { label = "Battval 1.00"; : row { : column { : row { : button { label = "..."; fixed_width = true; key = battval_pick; } : text { label = "sélectionner bloc"; } : popup_list { edit_width = 15; label = "blocs"; key = battval_blist; } } : list_box { width = 50; allow_accept = true; tabs = "10 30"; tab_truncate = true; key = battval_attlist; } : text { key = battval_nbbl; } } : column { fixed_height = true; : button { label = "Editer"; is_default = true; key = battval_mod; } } } : row { fixed_width = true; alignment = centered; : button { key = "accept"; label = "OK"; fixed_width = true; alignment = centered; } : button { key = "cancel"; label = "Annuler"; fixed_width = true; alignment = centered; is_cancel = true; } } } battmod : dialog { label = "Valeur à propager"; initial_focus = battval_prop; : edit_box { key = battval_prop; } ok_cancel; } Le fichier battval.lsp(defun extract_attrib (E ETIQ / LATT ATT REP) (setq REP "") (if (= (type E) 'ENAME) (setq E (vlax-ename->vla-object E)) ) (setq LATT (vlax-invoke E 'getAttributes)) (foreach ATT LATT (if (= (vla-get-TagString ATT) ETIQ) (setq REP (vla-get-TextString ATT)) ) ) REP ) (defun modif_attrib (E ETIQ VALEUR / LATT ATT) (if (= (type E) 'ENAME) (setq E (vlax-ename->vla-object E)) ) (setq LATT (vlax-invoke E 'getAttributes)) (foreach ATT LATT (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ)) (vla-put-TextString ATT VALEUR) ) ) ) (defun get_AttributList (nom / at bl tb) (setq bl (vla-item (vla-get-blocks AcDoc) nom)) (vlax-for at bl (and (eq (vla-get-objectname at) "AcDbAttributeDefinition") (if (eq (vla-get-constant at) :vlax-true) (setq tb (cons (list (vla-get-tagstring at)) tb)) (setq tb (cons (cons (vla-get-tagstring at) (if (eq (vla-get-promptstring at) "") (vla-get-tagstring at) (vla-get-promptstring at) ) ) tb ) ) ) ) ) (reverse tb) ) (defun get_blocklist (/ liste_bl bl) (vlax-for bl (vla-get-blocks AcDoc) (or (wcmatch (vla-get-name bl) "`**,*|*") (eq (vla-get-isxref bl) :vlax-true) (not (ssget "_X" (list '(0 . "INSERT") (cons 2 (vla-get-name bl))))) (not (get_AttributList (vla-get-name bl))) (setq liste_bl (cons (vla-get-name bl) liste_bl)) ) ) (if liste_bl (acad_strlsort liste_bl) ) ) (defun do_battval_pick (/ lst nom sel) (defun nom(val) (setq val (vlax-ename->vla-object val)) (if (vlax-property-available-p val 'effectivename) (vla-get-effectivename val) (vla-get-name val) ) ) (and (setq sel (entsel "\nVeuillez sélectionner un bloc : ")) (eq (cdr (assoc 0 (entget (car sel)))) "INSERT") (setq lst (member (nom (car sel)) liste_bl)) (setq BATTVAL_BLIST (itoa (- (length liste_bl) (length lst))) BATTVAL_ATTLIST "0" ) ) ) (defun do_battval_nbbl (/ nb) (if ss (setq nb (sslength ss)) (setq nb 0) ) (strcat "Trouvés dans le dessin : " (itoa nb)) ) (defun do_battval_attlist (/ atl ent at ETIQ INV VAL LISTVAL) (setq ATTLIST nil) (setq atl (get_attributlist (nth (atoi BATTVAL_BLIST) liste_bl))) (foreach at atl (setq ETIQ (car at)) (if (not (setq INV (cdr at))) (progn (setq INV "<--CONSTANT-->") (setq VAL "<--NON MODIFIABLE-->") ) (progn (setq LISTVAL nil) (vlax-for ent (vla-get-activeselectionset AcDoc) (setq LISTVAL (cons (extract_attrib ent ETIQ) LISTVAL)) ) (if (vl-remove (car LISTVAL) LISTVAL) (setq VAL "*varie*") (setq VAL (car LISTVAL)) ) ) ) (setq ATTLIST (cons (list ETIQ INV VAL) ATTLIST)) ) (setq ATTLIST (reverse ATTLIST)) (start_list "battval_attlist") (mapcar 'add_list (mapcar '(lambda (x) (strcat (car x) "\t" (cadr x) "\t" (caddr x))) ATTLIST)) (end_list) ) (defun do_battval_blist () (setq BATTVAL_BLIST $value) (setq ss (do_battval_ss)) (set_tile "battval_nbbl" (do_battval_nbbl)) (do_battval_attlist) (setq BATTVAL_ATTLIST "0") (set_tile "battval_attlist" BATTVAL_ATTLIST) ) (defun do_battval_mod (/ what_next BATTVAL_PROP ETIQ ent) (setq BATTVAL_PROP (caddr (nth (atoi BATTVAL_ATTLIST) ATTLIST))) (if (= BATTVAL_PROP "*varie*") (setq BATTVAL_PROP "") ) (if (= BATTVAL_PROP "<--NON MODIFIABLE-->") (alert "Attribut constant non modifiable") (progn (setq what_next 5) (while (< 1 what_next) (if (not (new_dialog "battmod" dcl_id)) (exit)) (set_tile "battval_prop" BATTVAL_PROP) (action_tile "battval_prop" "(setq BATTVAL_PROP $value)") (action_tile "battval_champ" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq What_next (start_dialog)) (cond ((= what_next 2) (do_battval_champ)) ) ) (if (= what_next 1) ; OK (progn (setq ETIQ (car (nth (atoi BATTVAL_ATTLIST) ATTLIST))) (vlax-for ent (vla-get-activeselectionset AcDoc) (modif_attrib ent ETIQ BATTVAL_PROP) ) (do_battval_attlist) (set_tile "battval_attlist" BATTVAL_ATTLIST) ) ) ) ) ) (defun do_battval_ss () (ssget "_x" (list '(0 . "INSERT") (cons 2 (nth (atoi BATTVAL_BLIST) liste_bl)))) ) (defun battval_dialog (/ BATTVAL_BLIST BATTVAL_ATTLIST dcl_id what_next ATTLIST ss) ;; initialisation (vla-StartUndoMark AcDoc) (setq BATTVAL_BLIST "0") (setq BATTVAL_ATTLIST "0") ;ouverture de la boîte de dialogue (setq dcl_id (load_dialog "battval.dcl")) (setq what_next 5) (while (< 1 what_next) (if (not (new_dialog "battval" dcl_id)) (exit)) (setq ss (do_battval_ss)) (start_list "battval_blist") (mapcar 'add_list liste_bl) (end_list) (set_tile "battval_blist" BATTVAL_BLIST) (set_tile "battval_nbbl" (do_battval_nbbl)) (do_battval_attlist) (set_tile "battval_attlist" BATTVAL_ATTLIST) (action_tile "battval_attlist" "(setq BATTVAL_ATTLIST $value)") (action_tile "battval_blist" "(do_battval_blist)") (action_tile "battval_mod" "(do_battval_mod)") (action_tile "battval_pick" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq What_next (start_dialog)) (cond ((= what_next 2) (do_battval_pick)) ) ) (unload_dialog dcl_id) (vla-EndUndoMark AcDoc) (if (= what_next 0) ; Annuler (progn (vl-cmdf "_undo" 1) (alert "Tout a été annulé") ) ) ) (defun c:battval (/ AcDoc liste_bl) (vl-load-com) ;; initialisations (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))) ;; (setq liste_bl (get_blocklist)) (if liste_bl (battval_dialog) (alert "Pas de bloc avec attributs\ndans le dessin") ) (princ) ) AmicalementVincent 1 C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
zza427 Posté(e) le 31 août 2016 Auteur Posté(e) le 31 août 2016 Génial! Exactement tout ce que je voulais, vous allez me faire gagner des heures de travail répétitif. Un immense merci à tous les deux.
JMBZ38 Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 Bonjour, j'ai également besoin de faire ce genre de manip avec mes cartouches. Toutes les entrées sont basées sur des attributs, ce qui me permets grâce à l'extraction d'attributs de générer des listes de plans (couplé aux jeux de feuille c'est royal). Je peux également facilement modifier des cartouches par lots. J'utilise les lisp suivants : - Pat, le plus simple qui permet de traiter attribut par attribut sur le dessin courant ou un répertoire complet. - Batch Attribute editor de Lee Mac, outil plus complet que pat avec la possibilité de modifier plusieurs attributs simultanément, de choisir les fichiers concernés et d'enregistrer des listes de modification. - Global attribute editor de Lee Mac, Extraction et édition d'attributs. - SheetSet Publisher Plus (6.5$) Un plug in AutoCAD à partir de jeux de feuilles Voilou
zebulon_ Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 ...des heures de travail répétitif. Des heures ? C'est vrai qu'on a vite fait de perdre du temps à passer d'une présentation à l'autre et ce pour faire 15x la même chose. Il faut s'estimer heureux, cependant, que tes cartouches aient été conçus avec des attributs, sinon cela aurait été encore plus la galère ! On peut aussi y arriver sans le lisp : on va directement dans la commande PROPRIETES, on clique sur le bouton sélection rapide (en haut à droite). La sélection rapide s'ouvre puis on clique sur le bouton "Choix des objets" (en haut à droite aussi) et à l'invite "choix des objets" on répond TOUT puis <┘(pour faire le filtre sur tous les objets de toutes les présentations, et pas seulement sur le "dessin entier" qui porte mal son nom car cela ne représente que la présentation courante). Puis à la ligne "type d'objet" on choisit "référence de bloc", dans les propriétés on choisit "nom", dans l'opérateur on prend "égal à" et dans la valeur on indique le nom du bloc concerné. Puis, après avoir validé la sélection rapide par un clic sur OK, on revient dans la liste des propriétés où on peut changer les attributs globalement. Cela permettrait de faire la manip sur une LT ? AmicalementVincent 1 C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
JMBZ38 Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 C'est en effet la méthode la plus simple avec les outils AutoCAD. Les lisp énoncés ci-dessus dans mon message sont plus complets et peuvent notamment traiter des lots de fichiers (pas la peine qu'ils soient ouverts).
zza427 Posté(e) le 31 août 2016 Auteur Posté(e) le 31 août 2016 On peut aussi y arriver sans le lisp : on va directement dans la commande PROPRIETES, on clique sur le bouton sélection rapide (en haut à droite). La sélection rapide s'ouvre puis on clique sur le bouton "Choix des objets" (en haut à droite aussi) et à l'invite "choix des objets" on répond TOUT puis <┘(pour faire le filtre sur tous les objets de toutes les présentations, et pas seulement sur le "dessin entier" qui porte mal son nom car cela ne représente que la présentation courante). Puis à la ligne "type d'objet" on choisit "référence de bloc", dans les propriétés on choisit "nom", dans l'opérateur on prend "égal à" et dans la valeur on indique le nom du bloc concerné. Puis, après avoir validé la sélection rapide par un clic sur OK, on revient dans la liste des propriétés où on peut changer les attributs globalement. Cela permettrait de faire la manip sur une LT ? AmicalementVincentJe viens de le tenter en étant sur l'espace objet, sur une présentation, ou sur une présentation en ayant sélectionné toutes les présentations, mais je n'arrive pas a faire fonctionner ta méthode... à chaque fois ça ne change au mieux que dans une seule présentation. J'ai du rater quelque chose ou avoir une variable qui n'est pas bonne. Je vais aussi essayer les LISP de LeeMac.
philsogood Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 hello _zebulon,marrant cette histoire je ne peux pas modifier mon bloc... car il ne le trouve aps... il me trouve plein d'autres blocs mais aps celui que je souhaiterai modifier!!Phil Projeteur Revit Indépendant - traitement des eaux/CVC
zebulon_ Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 Je viens de le tenter en étant sur l'espace objet, sur une présentation, ou sur une présentation en ayant sélectionné toutes les présentations, mais je n'arrive pas a faire fonctionner ta méthode... à chaque fois ça ne change au mieux que dans une seule présentation. J'ai du rater quelque chose ou avoir une variable qui n'est pas bonne. Je vais aussi essayer les LISP de LeeMac. je pense qu'il manque l'étape "choix des objets" "TOUT" qui est équivalent au lisp (ssget "_X") AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
zebulon_ Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 hello _zebulon,marrant cette histoire je ne peux pas modifier mon bloc... car il ne le trouve aps... il me trouve plein d'autres blocs mais aps celui que je souhaiterai modifier!!Phil on peut disposer du fichier ? et du nom du bloc en question ? AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Olivier Eckmann Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 Bonjour, Je ne pense pas dire de bêtises, mais par la sélection rapide, même l'option TOUT ou (ssget "x") se limite seulement aux objets de l'espace courant, soit l'espace objet, soit la présentation courante, mais on ne pourra jamais agir sur les propriétés des objets des autres espaces. Olivier
zebulon_ Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 Bonjour, Je ne pense pas dire de bêtises, mais par la sélection rapide, même l'option TOUT ou (ssget "x") se limite seulement aux objets de l'espace courant, soit l'espace objet, soit la présentation courante, mais on ne pourra jamais agir sur les propriétés des objets des autres espaces. Olivier Bonjour, je ne peux dire qu'une chose : fait l'essai ! AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Patrick_35 Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Bonjour La manip qu'indique zebulon_ fonctionne, mais avec la commande _filter (ou filtrer en français).Par contre, avec _selectrap, cela ne fonctionne que sur l'espace courant. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Olivier Eckmann Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Bonjour, Autant pour moi, la méthode de Zebulon fonctionne parfaitement. Je n'avais jamais réussi à afficher d'autres objets que ceux de l'espace courant car les sélections d'objets étaient filtrés pour ne garder que ceux de l'espace courant, mais effectivement en utilisant le bouton en haut à droite ça fonctionne bien. On en apprend tous les jours et c'est tant mieux. Merci pour cette astuce. Olivier
zebulon_ Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Bonjour La manip qu'indique zebulon_ fonctionne, mais avec la commande _filter (ou filtrer en français).Par contre, avec _selectrap, cela ne fonctionne que sur l'espace courant. @+ Bonjour, effectivement, _qselect ne fonctionne qu'avec la présentation courante lorsqu'on applique une commande à la sélection, comme EFFACER ou autre. Mais, lorsqu'on est dans la fenêtre PROPRIETES, on peut agir sur les propriétés de tous les objets qu'ils soient en espace objet ou sur n'importe quel onglet.Bien sûr, cela fonctionne d'autant plus finement avec la commande FILTRER. J'ai fait l'essai avec un bloc inséré dans l'espace objet et dans deux présentations de l'espace papier. Il existe donc trois fois dans le fichier.Avant la manip, la vue de la présentation 1Avant la manip, la vue de la présentation 2 Après la manip, on voit que l'attribut est changé dans l'espace objet ainsi que dans la présentation 1et dans la présentation 2 le tout avec la fenêtre PROPRIETES et son bouton _qselect. L'intérêt est qu'on évite le lisp, sans que cela deviennent une usine à gaz et ma question est de savoir si ça fonctionne aussi bien avec une LT ? AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Steven Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Salut zebulon_ Ta manip' est excellente :)Toutefois il y a une précision à apporter.Si le cartouche ou autre bloc avec attributs à modifier n'est que dans les espaces papier, il faut être dans une présentation (n'importe laquelle) pour pouvoir trouver le nom du bloc dans la liste de la sélection rapide. Si on est dans l'onglet "Objet", il n'y a pas le nom du bloc dans la liste des noms de la sélection rapide, sauf si le bloc en question est aussi dans l'espace objet de l'onglet "Objet".Aussi, pour pouvoir avoir accès au bouton du choix des objet, dans la fenêtre de la sélection rapide, il faut décocher Ajouter au jeu de sélection courant. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
JMBZ38 Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Cette manip peut être réaliser également avec la commande GATTE des express Tools.
Steven Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Cette manip peut être réaliser également avec la commande GATTE des express Tools. En effet mais les Express Tools ne sont pas toujours installés.L'avantage de la manip' avec la sélection rapide est qu'elle peut fonctionner sans les Express Tools ni lisps. Donc, elle fonctionne aussi avec une version LT, normalement. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
JMBZ38 Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 Oui en effet. Je me place dans le cadre d'une gestion de projets avec une centaine de plans à modifier, dans ce cas, les jeux de feuilles, et lisp énoncés plus haut pour automatiser ce genre de modifications sont indispensables pour une bonne productivité et limiter les tâches fastidieuses.
zebulon_ Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 L'avantage de la manip' avec la sélection rapide est qu'elle peut fonctionner sans les Express Tools ni lisps. Donc, elle fonctionne aussi avec une version LT, normalement.c'était le but de mon complément. Si le cartouche ou autre bloc avec attributs à modifier n'est que dans les espaces papier, il faut être dans une présentation (n'importe laquelle) pour pouvoir trouver le nom du bloc dans la liste de la sélection rapide. Si on est dans l'onglet "Objet", il n'y a pas le nom du bloc dans la liste des noms de la sélection rapide, sauf si le bloc en question est aussi dans l'espace objet de l'onglet "Objet".ce qui répond à la question de Philsogood. Dans le cas présent, on a des cartouches à modifier qui en principe sont dans l'espace papier et il faudra faire la manip à partir de l'espace papier. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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