Goldorak Posté(e) le 20 janvier 2007 Posté(e) le 20 janvier 2007 Bonjour, Voici un script Lisp très utile qui permet de renommer un groupe de calques en une seule manipulation. Le script renomme les calques en se basant sur un fichier qui donne la conversion calque->nouveau nom. Très utile si on change de "standard" de nom. ;Renames layers according to RNL.TBL ; ;(^v^) CAD Studio, 1998 ;updated 6-98: optional new colors ; (defun C:RNL ( / cmde tbf tbl lin lis) (setq cmde (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq tbf (findfile "RNL.TBL")) (if tbf (progn (princ "Renaming from table RNL.TBL ...") (setq tbl (open tbf "r")) (while (setq lin (read-line tbl)) (if (/= ";" (substr lin 1 1)) (progn (setq lis (read (strcat "(" lin ")"))) ; (OLD NEW) or (OLD NEW NEWCOLOR) (if (tblsearch "LAYER" (car lis)) (if (tblsearch "LAYER" (cadr lis)) (princ (strcat "\nCannot rename " (car lis) " to " (cadr lis) " - already exists")) (progn (princ (strcat "\n" (car lis) "->" (cadr lis))) (command "_RENAME" "_LA" (car lis) (cadr lis)) (if (caddr lis) (command "_LAYER" "_CO" (caddr lis) (cadr lis) "")) ) );if );if ));if );while (princ "\nDone.") );else (prompt "Table RNL.TBL not found!") );if (setvar "CMDECHO" cmde) (princ) ) (princ "\nRNL - tabular layer renaming, (^v^) CAD Studio, http://www.cadstudio.cz") (princ) Voici le fichier contenant la table des conversions: ;List of renamed layers for RNL.LSP ;format: "ORIGINALNAME" "NEWNAME" "newcolor" "calque1" "Construction" "calque2" "pointillés" Je voulais savoir si un expert en AutoLisp pouvait modifier ce script pour pouvoir l'étendre au renommage automatique des: noms des blocks, types de ligne, etc. ? J'ai essayé de le faire, en modifiant "_LAYERS" par "_STYLES", mais cela ne fontionne pas. Cela permettrait de pouvoir économiser un temps considérable sur des manipulations aussi pénibles que nécessaires. Salutations,
Patrick_35 Posté(e) le 22 janvier 2007 Posté(e) le 22 janvier 2007 Salut Un lisp vite fait (pas tout testé) RN.LSP(defun c:rn(/ fic lec tbl sty typ val) (defun creer_liste(val / lec str) (while (not (eq val "")) (setq lec (append lec (list (setq str (if (vl-string-search " " val) (substr val 1 (vl-string-search " " val)) val ) ))) val (substr val (+ (strlen str) 2)) ) ) lec ) (defun verif (table type anc nouv / ok) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list table anc))) (princ (strcat "\n" type " " anc " n'existe pas.")) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list table nouv))) (vla-put-name (vla-item table anc) nouv) (princ (strcat "\n" type " " nouv " est déjà existant.")) ) ) ok ) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq fic (findfile "rn.tbl")) (progn (setq fic (open fic "r")) (while (setq val (read-line fic)) (if (and (not (eq val "")) (not (eq (substr val 1 1) ";")) (member (read val) '(BLOC CALQUE FENETRE SCU COTE TABLEAU TEXTE LIGNE VUE GROUPE)) ) (setq tbl (append tbl (list (creer_liste val)))) ) ) (close fic) (if tbl (foreach val tbl (setq lec (strcase (car val)) doc (vla-get-activedocument (vlax-get-acad-object))) (cond ((eq lec "BLOC") (verif (vla-get-blocks doc) "Le Bloc" (cadr val) (caddr val)) ) ((eq lec "CALQUE") (verif (vla-get-layers doc) "Le Calque" (cadr val) (caddr val)) ) ((eq lec "FENETRE") (verif (vla-get-viewports doc) "La Fenêtre" (cadr val) (caddr val)) ) ((eq lec "SCU") (verif (vla-get-usercoordinatesystems doc) "Le Scu" (cadr val) (caddr val)) ) ((eq lec "COTE") (verif (vla-get-dimstyles doc) "Le Style de Cotes" (cadr val) (caddr val)) ) ((eq lec "TABLEAU") (verif (vla-item (vla-get-dictionaries doc) "ACAD_TABLESTYLE") "Le Tableau" (cadr val) (caddr val)) ) ((eq lec "TEXTE") (verif (vla-get-textstyles doc) "Le Style de Textes" (cadr val) (caddr val)) ) ((eq lec "LIGNE") (verif (vla-get-linetypes doc) "Le Style de Lignes" (cadr val) (caddr val)) ) ((eq lec "VUE") (verif (vla-get-views doc) "La Vue" (cadr val) (caddr val)) ) ((eq lec "GROUPE") (verif (vla-get-groups doc) "Le Groupe" (cadr val) (caddr val)) ) ) ) ) ) (princ "\nLe fichier RN.TBL est introuvable") ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) Exemple pour RN.TBL; Tableau pour renommer les différents éléments d'autocad ; Syntaxe : Type, Nom actuel, Nouveau nom ; Types = Bloc, Calque, Fenetre, Scu, Cote, Tableau, Texte, Ligne, Vue, Groupe ; Exemple Calques calque1 Construction Bloc Block1 RenBloc1 Bloc Block2 RenBloc2 Calque calque1 Construction1 Calque calque2 Construction2 Fenetre fenetre1 Renfenetre1 Fenetre fenetre2 Renfenetre2 Scu Scu1 Renscu1 Scu Scu2 Renscu2 Cote cote1 Rencote1 Cote cote2 Rencote2 Tableau tab1 Rebtab1 Tableau tab2 Rebtab2 Texte txt1 Rentxt1 Texte txt2 Rentxt2 Ligne Ln1 ligne1 Ligne Ln2 ligne2 Vue vue1 Renvue1 Vue vue2 Renvue2 Groupe grp1 Rengrp1 Groupe grp2 Rengrp2 ps : Tu peux les mettre tes lignes dans n'importe quel ordre Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Goldorak Posté(e) le 23 janvier 2007 Auteur Posté(e) le 23 janvier 2007 Merci beaucoup Patrick, je vais regarder ça de plus près et comprendre comment tu as codé tout ça. C'est dingue comment le Lisp peut soulager le quotidien. Je te tiens au courant, et encore mille fois merci! :D
Goldorak Posté(e) le 8 février 2007 Auteur Posté(e) le 8 février 2007 Après tests, il y a des petits bugs qui trainent. Du genre tout n'est pas renommé. Et il ne faut pas renommer 2 fois, sinon il ne trouve plus le nom initial et renvoie une erreur. En tout cas c'est déjà un très bon début, je vais voir si je peux le modifier.
davidcad01 Posté(e) le 20 janvier 2010 Posté(e) le 20 janvier 2010 étant débutant dans les lisp, je plante sur un truc qui doit vraiment etre simple...J'ai enregistré le lisp en .lsp et la table de conversion en .tblSeulement quand je lance le lisp, la commande m'affiche "Le fichier RN.TBL est introuvable"Ou doit on enregistrer le fichier .tbl ? n'ayant donc pas encore testé le lisp voila ce que j'en attend.L'ensemble de mes calques posséde un préfixe XR$1$ (dans le cas présent) que j'aimerais supprimer en conservant le suffixe différent à chaque fois exemple : XR$1$BORDURESXR$1$CLOTUREXR$1$ELECTRICITEXR$1$STANDARDXR$1$CLOISONSXR$1$ESCALIERXR$1$MOBILIER etc... pour finalement obtenir ceci BORDURESCLOTUREELECTRICITESTANDARDCLOISONSESCALIERMOBILIER merci d'avance. David poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.
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