William44850 Posté(e) le 19 septembre 2022 Posté(e) le 19 septembre 2022 Bonjour à toutes et à tous, Je recherche une piste.. Je souhaiterais pouvoir remplacer une donnée d'attribut d'un bloc de plusieurs dwg, sans ouvrir les fichiers ? Est-ce possible ? Et....comment ? Je vous remercie. Bonne fin de journée. Citer
didier Posté(e) le 19 septembre 2022 Posté(e) le 19 septembre 2022 Bonjour @William44850 C'est possible en programmation, est-ce pour utiliser sur une version FULL, La version LT ne supportant aucune programmation est exclue. Merci de faire passer un exemple de DWG avec des indications avant/après. Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
La Lozère Posté(e) le 19 septembre 2022 Posté(e) le 19 septembre 2022 Bonjour, Sans passer par de la programmation, avec SuperAutoScript de @Eric, il doit y avoir moyen de faire quelque chose avec un script et la commande GATTE. Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
William44850 Posté(e) le 20 septembre 2022 Auteur Posté(e) le 20 septembre 2022 Bonjour, @La Lozère, je vais regarder la commande GATTE @didier, oui, c'est bien sur une version full d'autocad 2019. Je te joins un exemple de dwg. Il faudrait remplacer le texte "Lambert 2 centre" de l'attribut "Projection" par "RGF93 cc47". Je vous remercie de me faire grandir en tant qu'autocadien. Bonne journée, 018_0200_01-04.dwg Citer
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Merci @William44850 pour le fichier. Je confirme. SuperAutoScript et la commande gatte dans le script est tout à fait adapté à la demande. Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
William44850 Posté(e) le 20 septembre 2022 Auteur Posté(e) le 20 septembre 2022 Il y a 2 heures, La Lozère a dit : Merci @William44850 pour le fichier. Je confirme. SuperAutoScript et la commande gatte dans le script est tout à fait adapté à la demande. Et bien oui.....et non 😁 C'est bien la méthode à utiliser....SuperAutoScript et GATTE. Mais dans leur bloc, l'attribut "Projection" a une valeur par défaut que le script ne doit pas arriver pas à corriger puisqu'il ne se termine pas Je cherche. Et merci beaucoup. Citer
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Pas de problème chez moi pour scripter ça. Dans l'exemple ci-dessous, le nom du bloc est "TATA", et le nom de l'attribut est "NUMERO" et le nouveau texte "Test1". Il faut absolument un retour à la ligne après le "YES" Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
William44850 Posté(e) le 20 septembre 2022 Auteur Posté(e) le 20 septembre 2022 Il y a 1 heure, La Lozère a dit : Pas de problème chez moi pour scripter ça. Dans l'exemple ci-dessous, le nom du bloc est "TATA", et le nom de l'attribut est "NUMERO" et le nouveau texte "Test1". Il faut absolument un retour à la ligne après le "YES" Et cela ne marche pas. Le fichier dwg s'ouvre mais aucune modif ne s'opère. J'ai ça dans le script : gatte B Format-A1 PROJECTION RGF93CC47 yes Je suis avec le SuperAutoScript 2.6 Là, je sèche. Citer
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Tu as bien un retour chariot après le "yes" Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Alors, désolé, je n'avais pas testé avec SuperAutoScript. Mais avec superautoscript, il ne faut pas le retour à la ligne après le "Yes". Peux-tu en dire plus sur le moment où ça bloc ? Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
Steven Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Bonjour @William44850, Tu peux aussi utiliser le lisp PAT de notre regretté Patrick_35 qui devrait répondre à ton besoin. Tu ouvres un fichier sur lequel tu souhaites modifier l'attribut en question sans le changer. Tu lances le lisp PAT, tu sélectionnes le bloc où se trouve l'attribut à modifier, tu sélectionnes l'attribut à modifier,tu mets la nouvelle valeur puis tu choisis le répertoire (dossier) dans lequel sont tous les autres dwg à traiter. Tu cliques sur OK et le tour est jouer. Ci-joint, le lisp PAT.lsp avec le fichier PAT.dcl à mettre dans le même dossier et une vidéo pour la démo. PAT.zip Citer 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.
bonuscad Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Pour fabriquer ton script personnalisé, tu peux essayer ceci. Code à copier coller dans un nouveau dessin (avec aucun fichier à traiter ouvert par Autocad) (defun c:make_script ( / f_exe ShlObj Folder FldObj Out_Fld file_scr) (vl-load-com) (setq ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application") Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0) ) (vlax-release-object ShlObj) (if Folder (progn (setq FldObj (vlax-get-property Folder 'Self) Out_Fld (vlax-get-property FldObj 'Path) ) (vlax-release-object Folder) (vlax-release-object FldObj) ) ) (setq file_scr (open (strcat Out_Fld "\\" "traiter_dossier.scr") "w")) (foreach dwg (vl-directory-files Out_Fld "*.dwg" 1) (write-line "_.open" file_scr) (write-line (strcat "\"" Out_Fld "\\" dwg "\"") file_scr) ;; ;;debut partie personnalisable ;; (write-line "((lambda ( / jsel i name)" file_scr) (write-line " (defun update_block (block_record / s_e dxf_e)" file_scr) (write-line " (if (/= (getvar \"ATTMODE\") 1) (setvar \"ATTMODE\" 1))" file_scr) (write-line " (setq s_e block_record)" file_scr) (write-line " (while (/= (cdr (assoc 0 (entget (setq s_e (entnext s_e))))) \"SEQEND\")" file_scr) (write-line " (setq dxf_e (entget s_e))" file_scr) (write-line " (if (eq (cdr (assoc 0 dxf_e)) \"ATTRIB\")" file_scr) (write-line " (if (eq (cdr (assoc 2 dxf_e)) \"PROJECTION\")" file_scr) (write-line " (entmod (setq dxf_e (subst (cons 1 \"RGF93 cc47\") (assoc 1 dxf_e) dxf_e)))" file_scr) (write-line " )" file_scr) (write-line " )" file_scr) (write-line " )" file_scr) (write-line " (entupd block_record)" file_scr) (write-line " )" file_scr) (write-line " (and" file_scr) (write-line " (setq jsel (ssget \"_X\" '((0 . \"INSERT\") (67 . 1) (8 . \"VEP CARTOUCHE\") (66 . 1) (2 . \"Format-A1\"))))" file_scr) (write-line " (repeat (setq i (sslength jsel))" file_scr) (write-line " (setq name (ssname jsel (setq i (1- i))))" file_scr) (write-line " (update_block name)" file_scr) (write-line " )" file_scr) (write-line " )" file_scr) (write-line " (princ)" file_scr) (write-line "))" file_scr) (write-line "(command \"_.saveas\" \"_LT2018\" \"\")" file_scr) ;; ;;fin partie personnalisable ;; (write-line "_.close" file_scr) ) (close file_scr) (princ (strcat "\Vous pouvez lancer le SCRIPT :" Out_Fld "\\" "traiter_dossier.scr")) (prin1) ) Tu lance alors la commande MAKE_SCRIPT Tu sélectionne ton dossier à traiter. Une fois le script créé tu lance la commande SCRIPT en sélectionnant le script "traiter_dossier.scr" dans le dossier précédemment sélectionné. Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
William44850 Posté(e) le 20 septembre 2022 Auteur Posté(e) le 20 septembre 2022 Et bien merci à tous. Je vais tester vos différentes solutions. Citer
William44850 Posté(e) le 20 septembre 2022 Auteur Posté(e) le 20 septembre 2022 Il y a 2 heures, La Lozère a dit : Alors, désolé, je n'avais pas testé avec SuperAutoScript. Mais avec superautoscript, il ne faut pas le retour à la ligne après le "Yes". Peux-tu en dire plus sur le moment où ça bloc ? là, il vient de m'écrire dans la barre de commande "Invalid attribute name". Comme si le nom de l'attribut "PROJECTION" était faux. Citer
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Effectivement, j'ai le même blocage sur ton fichier. Je ne saurais te dire d'où ça vient. Le principe du script est bon, mais il y a un truc avec le fichier... Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
Olivier Eckmann Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Bonjour, Le problème vient des attributs dont les noms inclus des "underscore" _ car la liste des attributs est utilisée dans un initget du lisp GATTE.LSP et le caractère _ dans un initget est un caractère réservé pour passer des choix locaux (langue du produit) aux choix internationaux (US). Il suffit de remplacer le caractère _ par le caractère - pour corriger le problème. Par contre étant donné que GATTE est un lisp fourni avec les Express Tools, pas sûr que ça tourne sous une version LT. Olivier Citer
La Lozère Posté(e) le 20 septembre 2022 Posté(e) le 20 septembre 2022 Merci @Olivier Eckmann, j'aurais jamais trouvé l'origine du problème. @William44850 est bien sur une version 2019 full. Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
William44850 Posté(e) le 21 septembre 2022 Auteur Posté(e) le 21 septembre 2022 Bonjour @Olivier Eckmann, @La Lozère Ce qui veut dire que le SuperAutoScript ne pourra pas être la solution ? Parce que (si je comprends bien), il ne fonctionne pas à cause des "Underscore" ....et qu'il me faudrait un SuperAutoScript pour le remplacer par "-". Je m'attaque aux solutions de @Steven et @bonuscad Avec un énorme merci pour votre dévouement Citer
Olivier Eckmann Posté(e) le 21 septembre 2022 Posté(e) le 21 septembre 2022 il y a une heure, William44850 a dit : Bonjour @Olivier Eckmann, @La Lozère Ce qui veut dire que le SuperAutoScript ne pourra pas être la solution ? Parce que (si je comprends bien), il ne fonctionne pas à cause des "Underscore" ....et qu'il me faudrait un SuperAutoScript pour le remplacer par "-". Je m'attaque aux solutions de @Steven et @bonuscad Avec un énorme merci pour votre dévouement Le problème ne vient pas de SuperAutoScript, mais du lisp GATTE qui affiche la liste des noms des attributs pour pouvoir le choisir, mais cette liste ne fonctionne pas si l'un des attributs possède un underscore dans son étiquette. Il y a 2 solutions : - Soit modifier le lisp GATTE pour ne pas afficher la liste des nom d'attributs. Je pense qu'un simple ; en début de la ligne 116 devrait suffire. - Soit renommer les attributs pour supprimer les underscores. Je ne sais pas si c'est automatisable via les commandes natives, mais avec de la programmation oui, mais dans ce cas autant tout faire spécifiquement par le programme. Olivier Citer
William44850 Posté(e) le 21 septembre 2022 Auteur Posté(e) le 21 septembre 2022 Et bien un petit point d'étape. Et vous allez me trouver BOUCHE Je n'arrive à pas grand chose.... @Olivier Eckmann j'ai recréé un lisp "gatte" en "gatte2" en ajoutant le ";" à la ligne 116. Cela m'a mis "invalid command" @Steven Je crois que j'ai tout bien fait (easy avec la vidéo)....Et ça ne marche pas....Jusqu'à ce que me rende compte qu'un même bloc avait un nom quelquefois différent. Donc, CA MARCHE !!!!! @bonuscad Tout ne marche pas....J'ai pu créer le lisp, générer le script mais la modif des dwg ne se fait pas...Peut être à cause de ça "(command "_.saveas" "_LT2018" "")" mais ne connaissant rien en code je me garderais bien d'être catégorique. 1 000 mercis pour votre aide même si, pour mon intellect, j'aurais aimé comprendre ce qui a dysfonctionné. Citer
bonuscad Posté(e) le 21 septembre 2022 Posté(e) le 21 septembre 2022 Citation Jusqu'à ce que me rende compte qu'un même bloc avait un nom quelquefois différent. J'avais fixé le nom du bloc et l'attribut en DUR dans le script selon l'exemple de DWG que tu as posté. Avec ce fichier ça fonctionne, j'avais testé... Si les noms sont différents, cela explique que ça n'a rien fait. Il faut, si tu veux l'utiliser, avoir plus d'info sur les noms possibles. Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Messages recommandés