Aller au contenu

Renommer bloc en masse


Messages recommandés

Posté(e)

Bonjour à tous,

 

j'ai un fichier avec plein de blocs et je souhaite renommer les blocs en changeant les espaces par des _.

 

existe t-il une routine LISP???

 

merci, cela me dépannerai bien.

Posté(e)

tout d'abord merci pour ta réponse.

 

J'ai essayé, mais je ne sais pas trop ou mettre le * ou le ?

 

voici un exemple de ce que je veut faire

 

aaaaa bbb

ccccc ddd

eeeee fff

 

et je voudrais

 

aaaaa_bbb

ccccc_ddd

eeeee_fff

 

que faut il rentrer comme caractère générique dans la fenêtre renommer??

Posté(e)

Salut,

 

C'est Noël et je ne supporte pas les noms de blocs (mais aussi de calques, styles, etc.) avec des espaces ou des caractères spéciaux.

 

Pour remplacer les espaces par des sous-tirets (underscore) dans les noms de blocs

(defun c:respa ()
 (vl-load-com)
 (vlax-for b (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
   (vla-put-Name b (vl-string-translate " " "_" (vla-get-Name B)))
 )
 (princ)
)

 

J'avais fait un truc un peu plus complet pour "normaliser" les noms dans les différentes tables.

La commande rtable ouvre une boite de dialogue dans la quelle on peut choisir les types de formatages et les tables à normaliser.

Pour une utilisation dans un script, on peut appeler la sous routine NormalizeName qui requiert 2 arguments le format et les tables à traiter. Ces arguments sont la somme des codes binaires représentant les options choisies :

 

format

- minuscules en majuscules = 1

- espaces en underscores = 2

- tirets en underscores = 4

 

table

Noms de Calques = 1

Noms de Blocs = 2

Noms de Styles de texte = 4

Noms de Vues = 8

Noms de Styles de cotation = 16

Noms de Styles de tableau = 32 (si version >= 2005)

Noms de Presentations = 64

 

;|NormalizeName (gile)
Normalisation des noms.

La routine NormalizeName requiert 2 arguments qui sont une somme de codes binaires :

format
- minuscules en majuscules = 1
- espaces en underscores = 2
- tirets en underscores = 4


table
Noms de Calques = 1 (Defaut = Oui)
Noms de Blocs = 2 (Defaut = Oui)
Noms de Styles de texte = 4 (Defaut = Oui)
Noms de Vues = 8 (Defaut = Non)
Noms de Styles de cotation = 16 (Defaut = Non)
Noms de Styles de tableau = 32 (Defaut = Non si version >= 2005)
Noms de Presentations = 64 (Defaut = Non)
|;

(defun NormalizeName (format table / normalize lst new inc)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )

 (defun normalize (col format textstyle / old tmp new inc lst)
   (vlax-for x	col
     (setq old (vla-get-Name x)
    tmp old)
     (if (= 1 (logand 1 format))
(setq tmp (strcase tmp))
     )
     (if (= 2 (logand 2 format))
(setq tmp (vl-string-translate " " "_" tmp))
     )
     (if (= 4 (logand 4 format))
(setq tmp (vl-string-translate "-" "_" tmp))
     )
     (setq new	tmp
    inc	1
     )
     (while (assoc new lst)
(setq new (cond
	    ((< inc 10) (strcat tmp "_00" (itoa inc)))
	    ((< inc 100) (strcat tmp "_0" (itoa inc)))
	    (T (strcat tmp "_" (itoa inc)))
	  )
      inc (1+ inc)
)
     )
     (if textstyle
(setq lst (cons (cons new old) lst))
(setq lst (cons (cons new x) lst))
     )
   )
   (if	textstyle
     (progn
(setvar "cmdecho" 0)
(foreach n (vl-remove '("" . "") lst)
  (vl-cmdf "_.rename" "_style" (cdr n) (car n))
)
(setvar "cmdecho" 1)
     )
     (foreach n lst
(vl-catch-all-apply 'vla-put-Name (list (cdr n) (car n)))
     )
   )
 )
   
 (if (= 1 (logand 1 table))
   (normalize (vla-get-Layers *acdoc*) format nil)
 )
 (if (= 2 (logand 2 table))
   (normalize (vla-get-Blocks *acdoc*) format nil)
 )
 (if (= 4 (logand 4 table))
   (normalize (vla-get-TextStyles *acdoc*) format T)
 )
 (if (= 8 (logand 8 table))
   (normalize (vla-get-Views *acdoc*) format nil)
 )
 (if (= 16 (logand 16 table))
   (normalize (vla-get-DimStyles *acdoc*) format nil)
 )
 (if (and
(= 32 (logand 32 table))
(< 16.1 (atof (getvar "ACADVER")))
     )
   (normalize
     (vla-item (vla-get-Dictionaries *acdoc*) "ACAD_TABLESTYLE")
     format
     nil
   )
 )
 (if (= 64 (logand 64 table))
   (normalize (vla-get-Layouts *acdoc*) format nil)
 )
)

;;; RTABLE (gile)
;;; Fonction d'appel (boite de dialogue)

(defun c:rtable	(/ tmp file format table dcl_id)
 (setq	tmp  (vl-filename-mktemp "Tmp.dcl")
file (open tmp "w")
 	format 0
table 0
 )
 (write-line
   "NormalizeName:dialog{label=\"Normalistion des nom\";
   :row{:column{:boxed_column{label=\"Format\";
   :toggle{label=\"Minuscules -> Majuscules\";key=\"01\";value=\"1\";}
   :toggle{label=\"Espaces -> Underscore\";key=\"02\";value=\"1\";}
   :toggle{label=\"Tiret -> Underscore\";key=\"04\";value=\"1\";}}
   spacer;ok_cancel;}
   :boxed_column{label=\"Tables à traiter\";
   :toggle{label=\"Calques\";key=\"1\";value=\"1\";}
   :toggle{label=\"Blocs\";key=\"2\";value=\"1\";}
   :toggle{label=\"Styles de texte\";key=\"4\";value=\"1\";}
   :toggle{label=\"Vues\";key=\"8\";}
   :toggle{label=\"Styles de cote\";key=\"16\";}
   :toggle{label=\"Styles de tableau\";key=\"32\";}
   :toggle{label=\"Présentations\";key=\"64\";}}}}"
   file
 )
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "NormalizeName" dcl_id))
   (exit)
 )
 (action_tile
   "accept"
   "(foreach k '(\"01\" \"02\" \"04\")
     (if (= (get_tile k) \"1\")
(setq format (+ format (atoi k)))
     )
   )
   (foreach k '(\"1\" \"2\" \"4\" \"8\" \"16\" \"32\" \"64\")
     (if (= (get_tile k) \"1\")
(setq table (+ table (atoi k)))
     )
   )
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 (NormalizeName format table)
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 ans après...
Posté(e)

hello Gile

 

ca date comme Lisp

 

mais aurais tu du temps pour améliorer ton lisp

 

je cherche un lisp pour renommer des calques en masse

un bout de nom "*aaaa*" remplacer par "*bbb*"

 

aussi bien dans un fichier, que dans plusieurs fichiers de differents sous répertoire

 

mais ca pourrait servir aussi pour les blocks et autres

 

puis le mettre sur exchange ensuite

 

merci

 

Phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Je n'avais pas vu ce post et je viens de le découvrir.

Ce lisp est énorme!

Maintenant, je peux recevoir autant de fichiers que je veux avec des espaces dans les noms de blocs ou calques ou autre.

Même pas mal :D

 

Encore un grand bravo et merci à Gile http://smiley-online.com/images/gif/bravo/vignette/thumbnails/chinese_gif.gif

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

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é