Aller au contenu

renommer et incrémentation les tables


jacobs33

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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" ""), afin

de tester l'inverse de ta condition de test

 

- surtout éviter les appels à (command ...), c'est super lent et moins compatible ou risque

d'erreur.

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 lisp

Avant de lancer le lisp

(setq save_var (atoms-family 1))

Je lance le lisp, fais les manips

Et 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 boucle

Quand 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 ele

Maintenant, 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 blocs

La fonction read pour traduire ma chaîne de caractères et par-dessus un eval pour évaluer ma lecture et donc accéder à ma table

Un 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Commande:

[/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)
)

 

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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

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é