Aller au contenu

Modifier des attributs de blocs automatiquement


Andrew L

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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.

 

Lien vers le commentaire
Partager sur d’autres sites

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

 

  • Like 1

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

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!

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité