Andrew L Posté(e) le 27 juillet 2023 Partager Posté(e) le 27 juillet 2023 Hello, Je n'ai commencé à utiliser des scripts sur autocad que très récemment et ils se limitent à l'écriture de lignes de commande que je lance sur plusieurs fichiers grâce à SuperAutoScript (version portable). Ma situation actuelle : j'ai des fichiers de schémas électriques avec plusieurs blocs à l'intérieur pour les disjoncteurs, contacteurs, moteurs, etc. Lorsque je dois modifier un folio, il arrive souvent que tous les folios d'un schéma d'une armoire ont été récupérés sur un autre logiciel au format dxf. Les blocs voient alors certains de leurs attributs être remis à leur valeur d'origine, souvent le nom de l'étiquette. Je dois alors manuellement changer tous les attributs pour les rendre vide. J'ai donc créé des scripts avec des lignes de commande pour chaque bloc et chaque attribut du type : -ATTEDIT N N Y05C0_Y01_0_5_0 COMMENT1 COMMENT1 Je peux alors lancer chaque script sur les folios que je veux modifier grâce à SuperAutoScript. Mon problème : Je dois vérifier chaque folio pour savoir quel bloc il contient et donc adapter les listes de fichiers sur lesquels je lance chaque script. Et j'ai un seul bloc par script, car si dans un seul script j'ai deux blocs mais que l'un des deux n'existe par dans un fichier de ma liste, alors il fera s'arrêter le programme automatique. Mon objectif : écrire un script qui pourra identifier quels types de blocs sont présents dans chaque fichier (ou folio) de ma liste, et ainsi ne modifier que ces blocs là. On peut supposer que je connais les valeur de chaque attribut, ainsi que leurs étiquettes. Bien sûr, si une solution émerge avec un bloc, je la réitérerai pour tous les blocs qui peuvent être présents dans mes folios. Je ne connais pas bien le LISP donc je n'ai pas réussi à trouver de méthode tout seul, besoin d'un peu d'aide pour le coup. Merc d'avance à ceux qui prendront le temps de m'aider. Je vous mets un exemple de script en PJ. script.scr Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité oran Posté(e) le 27 juillet 2023 Partager Posté(e) le 27 juillet 2023 Bonjour, De mémoire il me semble qu'un lisp existe (MAT.lsp) et pourrait résoudre ton pb, ça vaut peut-être le coup de s'y intéresser..... Une petite recherche s'impose je ne l'ai pas sous la main. Cordialement. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Andrew L Posté(e) le 31 juillet 2023 Auteur Partager Posté(e) le 31 juillet 2023 Bonjour, Je vais chercher de ce côté, merci pour l'info! Bonne journée Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rebcao Posté(e) le 4 août 2023 Partager Posté(e) le 4 août 2023 Bonjour Andrew, Pour contourner ton problème de BLOC présent ou pas, tu peux les insérer à un endroit ISOLE : exemple au point -100000,-100000, puis faire un ZOOM centre sur ce point... Et faire EFFACER D 2 fois... (si 2 BLOCS insérés) et continuer avec ta séquence ATTEDIT... Je travaille pratiquement à 100% avec des versions LT, j'ai tellement l'habitude de JONGLER, RUSER, TRICHER avec ces versions LT, il faut à chaque réfléchir comment contourner certaines fonctions manquantes... et souvent, on y arrive. Christian 1 Citer Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Olivier Eckmann Posté(e) le 4 août 2023 Partager Posté(e) le 4 août 2023 Bonjour, 1 script peut exécuter des commandes lisp. Avec celui-ci, au début tu mets la liste de tous tes blocs / attributs, puis ça va tester si le bloc existe et si oui, passe en revue les attributs pour les réinitialiser. Olivier script.scr 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Andrew L Posté(e) le 8 août 2023 Auteur Partager Posté(e) le 8 août 2023 Hello, Merci à tous pour vos réponses ! Après quelques recherches et essais, le code suivant fonctionne bien pour moi. (setq activeDocument (vla-get-activedocument (vlax-get-acad-object))) (setq objets (vla-get-blocks activeDocument)) (vlax-for blocs objets (vlax-for blocRef blocs (if (= (vla-get-objectname blocRef) "AcDbBlockReference") (foreach attribut (safearray-value (variant-value (vla-getattributes blocRef))) (vla-put-textstring attribut "") ) ) ) ) Rebcao je ne sais pas si ça fonctionnera sur une version LT... Bonne journée! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés