Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

je me permets de vous solliciter car j'ai un petit soucis de lispaille.

 

Je désire modifier une étiquette d'un attribut avec la commande -attedit afin de modifier toutes les étiquettes du même nom dans le fichier. Je sais je pourrais utiliser la commande gatte, mais les express ne fonctionnent pas sur ma version Autodesk Architectural Desktop 3.3.

 

j'arrive à modifier les étiquettes qui sont dans la même présentation et dans l'espace objet.

Mais l'étiquette ne se modifie pas dans toutes les présentations, il est là mon soucis.

 

C'est pourquoi je fais appel à votre connaissance et je vous remercie d'avance.

>>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<

Posté(e)

Salut,

le plus simple est de passer par un ssget

(setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "MON_BLOC"))))

de tester que la sélection n'est pas vide

(if sel

de faire une boucle

(setq n 0)
(while (ssname sel n)

de choisir le bloc dans la sélection

(setq ent (entget (entnext (ssname sel n))))
(while (= (cdr (assoc 2 ent)) "SEQEND")

de rechercher son étiquette

  (if (= (cdr (assoc 2 ent)) "MON_ETIQUETTE")
   (progn

et de modifier la valeur recherché

      (setq ent (subst (cons 1 "MA_VALEUR") (assoc 1 ent) ent))
     (entmod ent)
     (entupd (cdr (assoc -1 ent)))
   )
 )

et de passer au suivant

  (setq ent (entnext (cdr (assoc -1 ent))))
)

et de passer au bloc suivant (du même nom)

(setq n (1+ n))

puis pour finir le lisp

  )
)
(princ)

 

C'est du non testé et un premier jet, mais ça devrait te donner la marche à suivre

 

@+

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

Posté(e)

Hello,

 

merci d'avance pour ton aide, je pense qu'on tient le bon bout.

J'avais pas pensé directement à faire comme cela, je vais m'empressé à refaire mon programme dans ce sens et je te tiendrais au courant et pourquoi pas le diffuser car j'ai noté que d'autres personnes désire indicerdes cartouches. Esprit d'équipe diffusion et partage à l'équipe de CADxp.

 

Bye ça veut dire ciao en anglais (les connaisseurs comprendront)

Posté(e)

PREMIER MESSAGE DE BASE

 

Bonjour,

 

je me permets de vous solliciter car j'ai un petit soucis de lispaille.

 

Je désire modifier une étiquette d'un attribut avec la commande -attedit afin de modifier toutes les étiquettes du même nom dans le fichier. Je sais je pourrais utiliser la commande gatte, mais les express ne fonctionnent pas sur ma version Autodesk Architectural Desktop 3.3.

 

j'arrive à modifier les étiquettes qui sont dans la même présentation et dans l'espace objet.

Mais l'étiquette ne se modifie pas dans toutes les présentations, il est là mon soucis.

 

C'est pourquoi je fais appel à votre connaissance et je vous remercie d'avance.

 

DEUXIEME MESSAGE

 

Hello,

 

J'ai testé ton programme qui fonctionnait. Je l'ai adapté à ma façon, mais c'est là que le bas blesse. pour certain attribut pas de problème mais pour d'autre la catastrophe voici le prog :

 

(defun c:AZZ ()

(setq ent nil)

(setq sel nil)

(setq att (car (nentsel "\nSélectionnez l'étiquette à modifier: ")))

(setq att_name (entget att))

(setq att_ett (cdr (assoc 2 att_name)))

(setq att_lay (cdr (assoc 8 att_name)))

(setq cart_att_ett (substr att_lay 13 3))

(setq val_ett (getstring "\nEntrer la nouvelle valeur de l'étiquette : " t))

 

(if (= cart_att_ett "EXI")

(setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_EXI_att"))))

(setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_PRO_att"))))

)

(if sel

(progn

(setq n 0)

(while (= (ssname sel n))

(setq ent (entget (entnext (ssname sel n))))

(if (= (cdr (assoc 2 ent)) att_ett)

(progn

(setq ent (subst (cons 1 val_ett) (assoc 1 ent) ent))

(entmod ent)

(entupd (cdr (assoc -1 ent)))

)

)

(setq ent (entnext (cdr (assoc -1 ent))))

(setq n (1+ n))

) ) )

(princ)

)

 

Le souci que j'ai c'est que lorsqu'il passe dans " (while (= (ssname sel n)) " le "(setq ent (entget (entnext (ssname sel n)))) " ne fonctionne pas et je pense que cela vient de la sélection "ent"

 

Si quelqu'un à une piste, elle est la bienvenue

 

Bye ça veut dire ciao en anglais (les connaisseurs comprendront)

 

>>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<

Posté(e)

Salut

Je t'ai un peu modifié le lisp (sans vérification). Tu dois avoir deux boucles. La première qui parcoure ton jeu de sélection, et la seconde qui regarde les entités qui composent ton bloc (le SEQEND est pour dire quand c'est fini)

@+

 

(defun c:AZZ (/ ent sel att n att_name att_ett att_lay car_att val_ett cart_att_ett)
 (setq att (car (nentsel "\nSélectionnez l'étiquette à modifier: "))) 
 (setq att_name (entget att))
 (setq att_ett (cdr (assoc 2 att_name)))
 (setq att_lay (cdr (assoc 8 att_name)))
 (setq cart_att_ett (substr att_lay 13 3))
 (setq val_ett (getstring T "\nEntrer la nouvelle valeur de l'étiquette : "))
 (if (= cart_att_ett "EXI")
   (setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_EXI_att"))))
   (setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_PRO_att"))))
 )
 (if sel 
   (progn
     (setq n 0) 
     (while (= (ssname sel n)) 
       (setq ent (entget (entnext (ssname sel n))))
       (while (/= (cdr (assoc 0 ent)) "SEQEND")
         (if (= (cdr (assoc 2 ent)) att_ett) 
           (progn 
             (setq ent (subst (cons 1 val_ett) (assoc 1 ent) ent)) 
             (entmod ent)
             (entupd (cdr (assoc -1 ent)))
           )
         ) 
         (setq ent (entget (entnext (cdr (assoc -1 ent)))))
       )
       (setq n (1+ n)) 
     )
   )
 ) 
 (princ) 
)

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

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é