gribscad Posté(e) le 17 juillet 2012 Posté(e) le 17 juillet 2012 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
bryce Posté(e) le 17 juillet 2012 Posté(e) le 17 juillet 2012 (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é le 18 juillet 2012 par bryce Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
gribscad Posté(e) le 18 juillet 2012 Auteur Posté(e) le 18 juillet 2012 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...
bryce Posté(e) le 18 juillet 2012 Posté(e) le 18 juillet 2012 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). Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
gribscad Posté(e) le 18 juillet 2012 Auteur Posté(e) le 18 juillet 2012 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
-Olivier- Posté(e) le 18 juillet 2012 Posté(e) le 18 juillet 2012 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.
bryce Posté(e) le 18 juillet 2012 Posté(e) le 18 juillet 2012 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. Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
bryce Posté(e) le 18 juillet 2012 Posté(e) le 18 juillet 2012 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... Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
bryce Posté(e) le 18 juillet 2012 Posté(e) le 18 juillet 2012 J'ai remodifié le code pour ignorer les noms déjà existants.Les blocs non renommés sont sélectionnés à la fin de l'exécution. Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
gribscad Posté(e) le 18 juillet 2012 Auteur Posté(e) le 18 juillet 2012 Je viens de tester le lisp et c'est parfait !!!Un grand merci à toi Bryce !!
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant