argilles Posté(e) le 28 juillet 2005 Posté(e) le 28 juillet 2005 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 <<<<<<<<<
Patrick_35 Posté(e) le 29 juillet 2005 Posté(e) le 29 juillet 2005 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 selde 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") (prognet 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
argilles2 Posté(e) le 30 juillet 2005 Posté(e) le 30 juillet 2005 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)
argilles Posté(e) le 1 août 2005 Auteur Posté(e) le 1 août 2005 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 <<<<<<<<<
Patrick_35 Posté(e) le 1 août 2005 Posté(e) le 1 août 2005 SalutJe 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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