Aller au contenu

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


gribscad

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Ok, j'ai trouvé le problème et corrigé le code ci-dessus.

 

Il y a des espaces inutiles à la fin de la valeur des attributs LABEL, par exemple "310550 " au lieu de "310550".

Je les ai supprimés dans le nom du bloc, mais j'ai laissé les attributs en l'état.

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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é