jacobs33 Posté(e) le 18 mai 2010 Posté(e) le 18 mai 2010 Bonjour, Je viens d'écrire ce bout de code pour renommer les calques avec une incrementation mais le "entmod" ne fonctionne pas la liste des calque ne ce mettre pas jour. Faut t"il passer obligatoirement passer par la commande "renommer".est t'il possible inverser la condition (if (wcmatch ...)) afin d'éviter le (princ). (defun c:ADWG (/ RefLay IncreNumérique Incretexte NouvoNon AncienNon) (setq RefLay (tblnext "layer" t)) (setq IncreNumérique 1) (while RefLay (setq NouvoNon (strcat "xx-" (itoa IncreNumérique))) (setq AncienNon (cdr (assoc 2 RefLay))) (if (wcmatch AncienNon "0,Defpoints,*|*") [surligneur](princ)[/surligneur] (progn (setq RefLay (subst (cons 2 NouvoNon) (assoc 2 RefLay) RefLay)) (entmod RefLay) ) ) (setq IncreNumérique (+ IncreNumérique 1)) (setq RefLay (tblnext "layer")) ) ) Dans ce deuxième code avec la commande "renommer" est t'il nécessaire de faire un "entmod".Pour eviter le (princ) je fait une commande bidon mais c'est pas terrible ..... (defun c:ADWG (/ RefLay IncreNumérique Incretexte NouvoNon AncienNon) (setq RefLay (tblnext "layer" t)) (setq IncreNumérique 1) (while RefLay (setq NouvoNon (strcat "xx-" (itoa IncreNumérique))) (setq AncienNon (cdr (assoc 2 RefLay))) (if (wcmatch AncienNon "0,Defpoints,*|*") [surligneur](command "_layer" "e" "0" "")[/surligneur] (command "_rename" "ca" AncienNon NouvoNon) ) (setq IncreNumérique (+ IncreNumérique 1)) (setq RefLay (tblnext "layer")) ) ) je voudrais faire ce genre de chose sur toutes les tables.je préfère donc avoir un bon code en base.Merci d'avance pour vont commentaires.
bseb67 Posté(e) le 18 mai 2010 Posté(e) le 18 mai 2010 Salut, Malheureusement très occupé, donc pas le temps pour t'aider au mieux,mais je peux quand même te donner deux trucs : - utilise (not ...) pour éviter le (princ) ou le (command "_layer" "e" "0" ""), afinde tester l'inverse de ta condition de test - surtout éviter les appels à (command ...), c'est super lent et moins compatible ou risqued'erreur. a+ Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 18 mai 2010 Posté(e) le 18 mai 2010 Salut, tblnext ne retourne qu'une liste DXF partielle qui ne peut être modifiée avec entmod (la liste ne contient pas le groupe -1 qui détermine le nom d'entité).Il faut utiliser (entget (tblobjname ...)) pour avoir une liste DXF modifiable avec entmod. Dans ta boucle, tu incrémentes NouvoNom systématiquement, il vaudrait mieux n'incrémenter que si la condition est remplie dans le progn. (while RefLay (setq AncienNon (cdr (assoc 2 RefLay))) (if (not (wcmatch AncienNon "0,Defpoints,*|*")) (progn (setq IncreNumérique (1+ IncreNumérique)) (setq NouvoNon (strcat "xx-" (itoa IncreNumérique))) (setq elst (entget (tblobjname "LAYER" AncienNom))) (setq RefLay (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod elst) ) ) (setq RefLay (tblnext "layer")) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 18 mai 2010 Auteur Posté(e) le 18 mai 2010 merci pour ces explications.j'ai modifié "elst" en Reflay" pour que ça fonction.Si j'ai bien compris pour l'incrémentation aprés le test c'est pour éviter un trou dans l'incrémentation. (defun c:ADWG (/ RefLay IncreNumérique Incretexte NouvoNon AncienNon) (setq RefLay (tblnext "layer" t)) (setq IncreNumérique 1) (while RefLay (setq AncienNon (cdr (assoc 2 RefLay))) (if (not (wcmatch AncienNon "0,Defpoints,*|*,xx-*")) (progn (setq IncreNumérique (1+ IncreNumérique)) (setq NouvoNon (strcat "xx-" (itoa IncreNumérique))) (setq elst (entget (tblobjname "LAYER" AncienNon))) (setq RefLay (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod [surligneur] RefLay [/surligneur]) ) ) (setq RefLay (tblnext "layer")) ) ) Je vais poursuivre dans cette voie pour les autres Tables A+ [Edité le 18/5/2010 par jacobs33]
jacobs33 Posté(e) le 19 mai 2010 Auteur Posté(e) le 19 mai 2010 Bonjour, Nom code ce construit petit à petit tables "LAYER" "DIMSTYLE" "STYLE" "UCS" Ok Mais je but sur la table de blocK qui ne ce mais pas à jours,la manip fonctionne avec la commande "renommer" mais pas avec le "subst" j'ai filtré les xrefs... mais ca ne vient pas de là enfin je crois... (defun c:ADWG (/ RefBase IncreNumérique Incretexte NouvoNon AncienNon elst) ;;;;;;---------------------------- (setq RefBase (tblnext "BLOCK" t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (cdr (assoc 1 RefBase)) (progn (if (not (wcmatch AncienNon "`**,*|*")) (progn (setq NouvoNon (strcat "all-" (itoa IncreNumérique))) (setq elst (entget (tblobjname "BLOCK" AncienNon))) (setq elst (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod elst) (setq IncreNumérique (1+ IncreNumérique)) ) ) ) ) (setq RefBase (tblnext "BLOCK")) ) )
Patrick_35 Posté(e) le 19 mai 2010 Posté(e) le 19 mai 2010 Salut Exact, cela ne fonctionne pas avec les blocs Je te propose une petite fonction (defun pat:renommer(table filtre prefixe / doc ele IncreNumérique) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get-" table "s doc)"))) (or (wcmatch (vla-get-name ele) filtre) (vla-put-name ele (strcat prefixe (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ) ) (pat:renommer "layer" "0,Defpoints,*|*" "xx-")(pat:renommer "block" "`**,*|*" "all-") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jacobs33 Posté(e) le 20 mai 2010 Auteur Posté(e) le 20 mai 2010 Bonjour,J'etais parti sur ce genre de chose en lisp avec un sous programme pour "Aléger" le code.Petites Questions au passage:1) Les lignes SousProg peuvent etre t'elles placées en tête du code, j'ai fais des testes mais cela n'est claire pour moi.2) la déclaration des variables est elle bonne. (defun c:ADWG (/ RefBase IncreNumérique Incretexte NouvoNon AncienNon elst) (defun SousProg (Table1 Filtre Prefixe Table2 Table3) (setq RefBase (tblnext Table1 t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (not (wcmatch AncienNon Filtre)) (progn (setq NouvoNon (strcat Prefixe (itoa IncreNumérique))) (setq elst (entget (tblobjname Table2 AncienNon))) (setq RefBase (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod RefBase) (setq IncreNumérique (1+ IncreNumérique)) ) ) (setq RefBase (tblnext Table3)) ) ) ;;;----------------------------Table LAYER-------------------------- (SousProg "LAYER" "0,Defpoints,*|*" "aaa-" "LAYER" "LAYER") ;;;;;;----------------------------Table LTYPE-------------------------- (SousProg "LTYPE" "Standard" "aaa-" "LTYPE" "LTYPE") ;;;;;;----------------------------Table DIMSTYLE-------------------------- (SousProg "DIMSTYLE" "Standard" "aaa-" "DIMSTYLE" "DIMSTYLE") ;;;;;;----------------------------Table STYLE-------------------------- (SousProg "STYLE" "Standard" "aaa-" "STYLE" "STYLE") ;;;;;;----------------------------Table DIMSTYLE-------------------------- (SousProg "UCS" "Standard" "aaa-" "UCS" "UCS") ;;;;;;----------------------------Table DIMSTYLE-------------------------- (SousProg "BLOCK" "`**" "aaa-" "BLOCK" "BLOCK") ) Pour ton code je ne connais rien au Commande "VLA" Peu tu être un peu plus explicite Merci. (defun pat:renommer([surligneur]"layer" "0,Defpoints,*|*" "xx-" [/surligneur] / doc ele IncreNumérique) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get-" table "s doc)"))) (or (wcmatch (vla-get-name ele) filtre) (vla-put-name ele (strcat prefixe (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ) )
Patrick_35 Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Ce que tu as fait est excellent. Juste deux petites choses.Je ne comprends pas à quoi peuvent te servir les variables table2 & 3 car c'est déjà déclaré dans table1 ?Ta fonction SousProg doit être déclarée comme variable locale si tu ne veux pas qu'elle apparaisse dans autocad. Voici comment je procède pour vérifier que je n'ai pas de variables qui traînent après avoir utilisé un lispAvant de lancer le lisp(setq save_var (atoms-family 1))Je lance le lisp, fais les manipsEt pour vérifier(vl-remove-if '(lambda(x)(member x save_var))(atoms-family 1))Normalement, ce qui doit apparaître est ("SAVE_VAR" "Mon_lisp"), ce qui est logique.Ce que tu as en plus, ce sont des variables/fonctions qui ne sont pas déclarées en locale. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Maintenant, les explications pour mon code (defun pat:renommer(table filtre prefixe / doc ele IncreNumérique) (setq doc (vla-get-activedocument (vlax-get-acad-object)) ; La variable DOC pour pointer dur le document actif, en claire sur le dessin courant IncreNumérique 1 ; Ta variable ) (vla-startundomark doc) ; Début d'un undo en cas d'annulation (vlax-for ele (eval (read (strcat "(vla-get-" table "s doc)"))) (or (wcmatch (vla-get-name ele) filtre) (vla-put-name ele (strcat prefixe (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) ; Fin du undo (princ) ) La fonction vlax-for permet de parcourir une table, une sélection,... c'est une boucleQuand j'utilise (vlax-for ele (vla-get-blocks doc) cela se traduit par parcourir la table des blocs du dessin courant et de stocker les éléments parcourus dans la variable eleMaintenant, j'utilise une astuce pour utiliser une variable afin de choisir la table à parcourir(strcat "(vla-get-" table "s doc)") donne par exemple "(vla-get-blocks doc)" pour la table des blocsLa fonction read pour traduire ma chaîne de caractères et par-dessus un eval pour évaluer ma lecture et donc accéder à ma tableUn vla-put est pour écrire une valeur, un vla-get donc pout la lire.Comme c'est un nom que l'on veut changer, on ajoute name.Donc un (vla-get-name ele) pour lire un nom et un (vla-put-name ele "aze") pour écrire un nom Si j'ai donné un code vla, c'est par ce que c'est la seule méthode "simple" pour renommer les blocs; @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jacobs33 Posté(e) le 20 mai 2010 Auteur Posté(e) le 20 mai 2010 Voila j'ai test les deux lignes pour le controle des variiables.J'ai Testé sur la ligne de commande:1-(setq save_var (atoms-family 1))2-exécution du lisp.3-(vl-remove-if '(lambda(x)(member x save_var))(atoms-family 1)) - Renvoie : ("C:ADWG" "SOUSPROGRENAME" "SAVE_VAR" "SOUSPROGTABLE") Intéger dans le code: - renvoie : ("ANCIENNON" "INCRENUMERIQUE" "NOUVONON" "ELST") -Quel est la bonne méthode ?-Les renvois sont ils bons ?-comme balayer les "Matériaux" "style Ligne de repère multiple "styleTAbleau" ? Patrick merci pour tes explications sur les commandes "VLA" je vais regarder et analyse ça se soir avec Moi et mon "cerveaux" car pour l'instant je n'ai pas réussi a lancer la routine.En plus Mon Moi ma dit que j'avais un peu de Boulot (par les temps qui cours.....) (defun c:ADWG (/ RefBase IncreNumérique Incretexte NouvoNon AncienNon elst) [surligneur](setq save_var (atoms-family 1))[/surligneur] ;;;----------------------------Sous Programme Table----------------------- (defun SousProgTable (Table Filtre Prefixe) (setq RefBase (tblnext Table t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (not (wcmatch AncienNon Filtre)) (progn (setq NouvoNon (strcat Prefixe (itoa IncreNumérique))) (setq elst (entget (tblobjname Table AncienNon))) (setq RefBase (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod RefBase) (setq IncreNumérique (1+ IncreNumérique)) ) ) (setq RefBase (tblnext Table)) ) ) ;;;----------------------------Sous Programme rename--------------- (defun SousProgRename (Table Filtre Prefixe) (setq RefBase (tblnext Table t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (not (cdr (assoc 1 RefBase))) (if (not (wcmatch AncienNon Filtre)) (progn (setq NouvoNon (strcat Prefixe (itoa IncreNumérique))) (command "_rename" "bl" AncienNon NouvoNon) (entmod RefBase) (setq IncreNumérique (1+ IncreNumérique)) ) ) ) (setq RefBase (tblnext Table)) ) ) ;;;----------------------------Table LAYER-------------------------- (SousProgTable "LAYER" "0,Defpoints,*|*" "LAY-") ;;;----------------------------Table LTYPE-------------------------- (SousProgTable "LTYPE" "Standard" "LTY-") ;;;----------------------------Table VIEW--------------------------- (SousProgTable "VIEW" "`**" "VIE-") ;;;----------------------------Table STYLE-------------------------- (SousProgTable "STYLE" "Standard" "STY-") ;;;-------------------------------Table UCS------------------------- (SousProgTable "UCS" "Standard" "UCS-") ;;;------------------------------Table VPORT----------------------- (SousProgTable "VPORT" "Standard" "VPO-") ;;;------------------------------Table DIMSTYLE-------------------- (SousProgTable "DIMSTYLE" "Standard" "DIM-") ;;;;-------------------------------Table APPID----------------------- (SousProgTable "APPID" "Standard" "APP-") ;;;------------------------------Traitement bBlock----------------- (SousProgRename "BLOCK" "`**,*|*" "BLK-") [surligneur] ;;;----------------------------Traitement Materiaux----------------- (SousProgRename "?????" "`**,*|*" "MAT-") [/surligneur] [surligneur] (vl-remove-if '(lambda (x) (member x save_var)) (atoms-family 1) ) [/surligneur] )
Patrick_35 Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Il ne faut pas l'intégrer dans un code.Ce que je t'ai donné est pour vérifier qu'on n'a pas laissé trainer une variable dans l'environnement d'autocad. Le premier test indique ("C:ADWG" "SOUSPROGRENAME" "SAVE_VAR" "SOUSPROGTABLE"), ce qui veut donc dire"C:ADWG" --> Normal car non définit avant de lancer (atoms-family 1) et chargé après."SOUSPROGRENAME" --> Une routine qui "traine""SAVE_VAR" --> Normal, car c'est elle qui "stocke" les infos d'atoms-family"SOUSPROGTABLE" --> Encore une routine qui "traine" Donc il suffit donc de faire(defun c:ADWG (/ RefBase IncreNumérique Incretexte NouvoNon AncienNon elst [surligneur]SousProgTable SousProgRename[/surligneur]) Tu vas sur un nouveau dessin, tu refais le 1,2,3 et normalement, tu auras comme résultat("C:ADWG" "SAVE_VAR")Ce qui indique que ton lisp ne laisse plus de trace. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jacobs33 Posté(e) le 21 mai 2010 Auteur Posté(e) le 21 mai 2010 Bonjour,J'ai remplcé TABLE FILTRE PREFIXE PAR "BLOCK" "`**,*|*" "BLK-" Mais autocad me renvoi ce message d'erreur ? [surligneur] Commande: reno; erreur: no function definition: VLAX-GET-ACAD-OBJECTCommande:[/surligneur] (defun c:reno (/ doc ele IncreNumérique) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) ; Début d'un undo en cas d'annulation (vlax-for ele (eval (read (strcat "(vla-get- [surligneur]" "BLOCK" [/surligneur] "s doc)"))) (or (wcmatch (vla-get-name ele) [surligneur] "`**,*|*" [/surligneur] ) (vla-put-name ele (strcat [surligneur]"BLK-" [/surligneur] (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) ; Fin du undo (princ) )
lecrabe Posté(e) le 21 mai 2010 Posté(e) le 21 mai 2010 Hello Il faudrait peut etre un (vl-load-com) au debut de ton code !? Le Decapode Autodesk Expert Elite Team
jacobs33 Posté(e) le 21 mai 2010 Auteur Posté(e) le 21 mai 2010 J'ai rajouté ça [surligneur] (vl-load-com) [/surligneur] et ça fonctionne beaucoup mieux. (defun c:reno (/ doc ele IncreNumérique) [surligneur] (vl-load-com) [/surligneur] (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get- " "BLOCK" "s doc)"))) (or (wcmatch (vla-get-name ele) "`**,*|*" ) (vla-put-name ele (strcat "BLK-" (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ) ) [Edité le 21/5/2010 par jacobs33]
jacobs33 Posté(e) le 31 mai 2010 Auteur Posté(e) le 31 mai 2010 Bonjour a tous, Je relance le sujet car me pose encore beaucoup de questions. -Question 1: [surligneur] (defun pat:renommer(table filtre prefixe / doc ele IncreNumérique)[/surligneur] (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) ...... ...... (princ) ) (pat:renommer "block" "`**,*|*" "LAY-") Comment doit t'ont lancer la commande sous "autocad" C:renommer. je suppose que :"block" prend la place de table dans la ligne surlignée."`**,*|*" prend la place de Filtre dans la ligne surlignée."LAY-" prend la place de prefixe dans la ligne surlignée. - Question 2:la routine de patrick fonctionne bien avec la table des "blocs"par contre j'ai essayer 'd'ecrire la meme chose pour la table des layer(s) mais ça ne fonctionne pas. :casstet: pourquoi ça marche pas .....? (defun c:reno (/ doc ele IncreNumérique) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get-" "LAYER" "s doc)"))) (or (wcmatch (vla-get-name ele) "*|*") (vla-put-name ele (strcat "LAY-" (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ) ) - Question 3: Comment je peux récupérer les "tables" des "fenêtres" des "matériaux" des "styles de ligne de repères multiples" et des "style de tableaux".
(gile) Posté(e) le 31 mai 2010 Posté(e) le 31 mai 2010 Salut, 1. et 2. On ne peut pas faire une fonction/commande (préfixée c: et appelable directement depuis la ligne de commande) avec une fonction LISP qui rerquiert des arguments, ceux que tu as très bien notés : table, filtre et préfixe.Par contre tu peux très bien "emballer" la routine de Patrick dans des fonctions/commandes (il suffit qu'elle soit chargée) : (defun c:reno_blk () (pat:renommer "BLOCK" "`**,*|*" "BLK-") (princ)) (defun c:reno_lay () (pat:renommer "LAYER" "*|*" "LAY-") (princ)) 3. Les "fenêtres" sont dans la table "VPORT" mais les "matériaux", "styles de ligne de repères multiples" et "style de tableaux" ne sont pas stockés dans des tables mais dans des dictionnaires. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 31 mai 2010 Auteur Posté(e) le 31 mai 2010 Si j'ai bien compris il faut que je charge d'abord le code de Patrick35 et ensuite le code qui suit pour passer en revue les tables "block" et "Layers" afin d' avroir une seule command a envoyer. (defun c:reno () (pat:renommer "BLOCK" "`**,*|*" "BLK-") (pat:renommer "LAYER" "*|*" "LAY-") (princ) ) Ou bien ce genre de chose (defun c:reno () (defun pat:renommer (table filtre prefixe / doc ele IncreNumérique) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get-" table "s doc)"))) (or (wcmatch (vla-get-name ele) filtre) (vla-put-name ele (strcat prefixe (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ) ) (pat:renommer "BLOCK" "`**,*|*" "BLK-") (pat:renommer "LAYER" "*|*" "LAY-") (princ) ) Par contre je revient sur ma question 2 - Question 2:la routine de patrick fonctionne bien avec la table des "blocs"par contre j'ai essayer 'd'ecrire la meme chose pour la table des layer(s) mais ça ne fonctionne pas. pourquoi ça marche pas .....? (defun c:reno (/ doc ele IncreNumérique) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) IncreNumérique 1 ) (vla-startundomark doc) (vlax-for ele (eval (read (strcat "(vla-get-" "LAYER" "s doc)"))) (or (wcmatch (vla-get-name ele) "*|*") (vla-put-name ele (strcat "LAY-" (itoa IncreNumérique))) (setq IncreNumérique (1+ IncreNumérique)) ) ) (vla-endundomark doc) (princ)) Et pour finir le regarde demain dans les dictionnnaires avec les commandes "dictnext" qui je l'espére fonctionne un comme "tblnext"..... :) bonsoir a tous Je viens de jeter a coup œil ce n'est pas gagner....... [Edité le 31/5/2010 par jacobs33]J'ai rejeté deux coup d'yeux je n'y comprend rien.... [Edité le 1/6/2010 par jacobs33] [Edité le 2/6/2010 par jacobs33]
jacobs33 Posté(e) le 2 juin 2010 Auteur Posté(e) le 2 juin 2010 Bourjour, J'ai bien essayé de comprendre ce qu'il ce passé avec les "dictionary" mais je jette l'éponge... Pour conclure sur sujet voici le code que je vais utiliser pour renommer et incrémenter les tables. Merci à tous pour vont suggestions et votre aide. :D :D :D (defun c:ADWG (/ RefBase IncreNumérique Incretexte NouvoNon AncienNon elst) ;;;----------------------------Sous Programme Table----------------- (defun SousProgTable (Table Filtre Prefixe) (setq RefBase (tblnext Table t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (not (wcmatch AncienNon Filtre)) (progn (setq NouvoNon (strcat Prefixe (itoa IncreNumérique))) (setq elst (entget (tblobjname Table AncienNon))) (setq RefBase (subst (cons 2 NouvoNon) (assoc 2 elst) elst)) (entmod RefBase) (setq IncreNumérique (1+ IncreNumérique)) ) ) (setq RefBase (tblnext Table)) ) ) ;;;----------------------------Sous Programme rename--------------- (defun SousProgBlock (Table Filtre Prefixe) (setq RefBase (tblnext Table t)) (setq IncreNumérique 1) (while RefBase (setq AncienNon (cdr (assoc 2 RefBase))) (if (not (cdr (assoc 1 RefBase))) (if (not (wcmatch AncienNon Filtre)) (progn (setq NouvoNon (strcat Prefixe (itoa IncreNumérique))) (command "_rename" "bl" AncienNon NouvoNon) (entmod RefBase) (setq IncreNumérique (1+ IncreNumérique)) ) ) ) (setq RefBase (tblnext Table)) ) ) ;;;----------------------------Table LAYER-------------------------- (SousProgTable "LAYER" "0,Defpoints,*|*" "LAY-") ;;;----------------------------Table LTYPE-------------------------- (SousProgTable "LTYPE" "Standard" "LTY-") ;;;----------------------------Table VIEW--------------------------- (SousProgTable "VIEW" "`**" "VUE-") ;;;----------------------------Table STYLE-------------------------- (SousProgTable "STYLE" "Standard" "STYLE-") ;;;-------------------------------Table UCS------------------------- (SousProgTable "UCS" "Standard" "UCS-") ;;;------------------------------Table VPORT------------------------ (SousProgTable "VPORT" "Standard" "VPORT-") ;;;------------------------------Table DIMSTYLE--------------------- (SousProgTable "DIMSTYLE" "Standard" "DIM-") ;;;-------------------------------Table APPID---------------------- (SousProgTable "APPID" "Standard" "APP-") ;;;------------------------------Traitement bBlock------------------ (SousProgBlock "BLOCK" "`**,*|*" "BLK-") )
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