Aller au contenu

[Résolu] Renommer un bloc par un de ses attributs


Messages recommandés

Posté(e)

Bonjour,

 

Je possède un fichier autocad avec un grand nombre de bloc dénommés OBJ1 à OBJxxxx. Ils possèdent tous les mêmes attributs dont un dénommé "LABEL" et dont j'aimerais récupéré le champs pour renommer le bloc lui-même. Un petit exemple pour être plus clair :

Le bloc dénommé "OBJ7948" possède pour l'attribut "LABEL" le champs "310495"

Je souhaiterais que le nouveau nom de ce bloc soit "310495"

Existe-t-il une méthode pour permettre cette manipulation sur tous les objets ?

Merci d'avance,

Gribs

Posté(e) (modifié)

Bonjour,

 

Pas d'autre solution a priori que de le faire en programmation.

Voici un Lisp vite fait qui devrait faire l'affaire :

 

(defun c:RENBLOCS ( / bloc etiquette doc blocks ss )

 (setq bloc "OBJ*" ; "pattern" du nom des blocs à renommer
       etiquette "LABEL"  ; étiquette de l'attribut contenant le nouveau nom
 )
 
 (vl-load-com)
 
 (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
       blocks (vla-get-Blocks doc))
       
 (setq ss (ssget (list (cons 0 "INSERT") (cons 2 bloc)) ) )
 (if ss
   (progn
     (setq ss (vla-get-ActiveSelectionSet doc))
     (vlax-for b ss
       (mapcar
         '(lambda ( att / n )
           (if (= etiquette (vla-get-TagString att))
             (progn
               (setq n (vl-string-trim " " (vla-get-TextString att)) )
               (if (not (tblsearch "BLOCK" n))
                 (vla-put-Name (vla-Item blocks (vla-get-EffectiveName B)) n )
               )
             )
           )
         )
         (vlax-invoke b 'getAttributes)
       )
     )
     (setq ss (ssget "_P" (list (cons 0 "INSERT") (cons 2 bloc)) ) )
     (if ss(sssetfirst nil ss))
   )
   (princ "\nAucun bloc trouvé.")
 )
 (princ)
)

Modifié par bryce
Posté(e)

Bonjour, et merci Bryce pour ce petit programme !

J'ai juste un petit soucis lorsque je lance le lisp. Une fois que j'ai sélectionné mes blocs, le programme s’arrête (Erreur automation Entrée incorrecte). Ne maîtrisant pas la programmation pour l'instant, je voulais savoir si l'erreur venait de moi ou bien du script...

Sorry...

Posté(e)

Bonjour,

 

Si tu as bien fait attention lors du copier-coller du code, il n'y a pas vraiment de raison que ça vienne de toi a priori.

 

J'ai testé le programme vite fait sur un dessin avec 3 ou 4 blocs et ça fonctionne.

Si chez toi il y a un souci, le mieux serait que tu me transmettes un dwg concerné pour que je puisse regarder ce qui cloche.

Tu peux passer par dl.free.fr par exemple, ou me l'envoyer par mail si tu préfères (brice at creao point fr).

Posté(e)

J'ai enregistré uniquement la couche qui contient les blocs en question...

Peut-être que l'erreur vient de la nature du bloc. Ce fichier dwg a été généré par un autre logiciel que Autocad et la retranscription des blocs avec attributs possède peut-être des différences.

Merci pour le coup de pouce !

fichier_bloc.zip

Posté(e)

Bonjour,

 

Dans tes blocs, il n'y aurait pas dans tes blocs, plusieurs dont les champs renvoient la même valeur. Dans ce cas, après une rapide lecture du lisp de Bryce, il me semble que le programme tente de créer un bloc avec un nom déjà utilisé provoquant donc une erreur.

 

Olivier.

Posté(e)

Dans tes blocs, il n'y aurait pas dans tes blocs, plusieurs dont les champs renvoient la même valeur. Dans ce cas, après une rapide lecture du lisp de Bryce, il me semble que le programme tente de créer un bloc avec un nom déjà utilisé provoquant donc une erreur.

 

Ça, c'est la nouvelle erreur ! :P

Il y a effectivement des LABEL en doublon...

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é