argilles Posté(e) le 1 août 2005 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) :o >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
zebulon_ Posté(e) le 1 août 2005 Posté(e) le 1 août 2005 Salut, on ne peut pas laisser un alsacien dans le pétrin. (setq ent (entget (entnext (ssname sel n)))) Ton problème à l'air de venir du fait que entnext n'est fait qu'une seule fois. Si ton bloc a plusieurs attributs il faut faire des entnext autan de fois que nécessaire pour trouver le bon attribut ou bien tomber sur SEQUEND quand il n'y en a plus. Du genre : (setq e (ssname ss n)) (setq a (entget e)) (while (/= (cdr (assoc 0 a)) "SEQEND") (if (= (cdr (assoc 0 a)) "ATTRIB") (progn (setq NOMATT (cdr (assoc 2 a))) ..... ) ) (setq e (entnext e)) (setq a (entget e)) ) Si on n'a pas besoin de passer en revue tous les attributs, on peut aussi imaginer faire arrêter la boucle while quand on a trouvé le bon attribut. Bye C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
argilles Posté(e) le 1 août 2005 Auteur Posté(e) le 1 août 2005 Salut ZEBULON je te remercie de ton aide et je vois que le savoir vient toujours des grands maîtres. Ton petit badaone d'il y à 6 ans va faire honneur à son maître. Je vais m'empresser de rectifier cette erreur pour faire fonctionner cet outil. Au faite j'ai fini le programme escalier que nous avions commencé ensemble (il est lourd à l'usage). Bye ça veut dire ciao en anglais. >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
x13 Posté(e) le 2 août 2005 Posté(e) le 2 août 2005 il y a peut-être une partie de la solution içi http://theswamp.org/phpBB2/viewtopic.php?t=6106&sid=dd6f43ad7c1c1ead87670c587fdd060d
argilles Posté(e) le 2 août 2005 Auteur Posté(e) le 2 août 2005 Hello x13 (marseillais !!!!) Je te remercie du lien, je vais m'empresser d'étudier la chose. Bye >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
Patrick_35 Posté(e) le 2 août 2005 Posté(e) le 2 août 2005 Salut,comme je vois que tu as un peu de mal avec tes attributs, voici un lisp que change la valeur d'une étiquette dans tous tes blocs, quels que soient leurs noms @+ (defun c:mat(/ bl ent js n modif sel tot) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq sel (nentsel "\nSélectionnez une étiquette : ")) (if (= (cdr (assoc 0 (entget (car sel)))) "ATTRIB") (if (setq val (getstring t "\nNouvelle valeur : ")) (progn (setq bl (tblnext "block" t) sel (entget (car sel)) tot 0) (while bl (if (and (= (logand (cdr (assoc 70 bl)) 2) 2) (/= (logand (cdr (assoc 70 bl)) 4) 4)) (progn (setq ent (entnext (cdr (assoc -2 bl)))) (while ent (setq ent (entget ent)) (if (and (= (cdr (assoc 0 ent)) "ATTDEF") (= (cdr (assoc 2 ent)) (cdr (assoc 2 sel)))) (if (setq js (ssget "x" (list (cons 0 "INSERT") (assoc 2 bl)))) (progn (setq n 0) (while (ssname js n) (setq modif (entget (entnext (ssname js n)))) (while (/= (cdr (assoc 0 modif)) "SEQEND") (if (= (cdr (assoc 2 modif)) (cdr (assoc 2 sel))) (progn (setq modif (subst (cons 1 val) (assoc 1 modif) modif) tot (1+ tot)) (entmod modif) (entupd (cdr (assoc -1 modif))) ) ) (setq modif (entget (entnext (cdr (assoc -1 modif))))) ) (setq n (1+ n)) ) ) ) ) (setq ent (entnext (cdr (assoc -1 ent)))) ) ) ) (setq bl (tblnext "block")) ) (princ (strcat "\nModification de " (itoa tot) " étiquettes")) ) ) (princ "\nCe n'est pas une étiquette.") ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (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
argilles Posté(e) le 2 août 2005 Auteur Posté(e) le 2 août 2005 Hello, merci beaucoup Patrick pour ton programme je pense c'est la solution à tous mes problèmes.Mais je n'arrive pas à le faire fonctionner il plante su ta deuxième et avant dernière ligne :"(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))" Je suis sous Autodesk Architectural Desktop 3.3 et les express ne fonctionnent pas souis cette version.Merci d'avance si tu peux y remédier. je vais voir de mon côté. Bye >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
Patrick_35 Posté(e) le 2 août 2005 Posté(e) le 2 août 2005 Mets un (vl-load-com) en têteou remplace le (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) par un (command "_.undo" "_group")et le (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) par un (command "_.undo" "_end") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
argilles Posté(e) le 2 août 2005 Auteur Posté(e) le 2 août 2005 Tu ne vas pas me croire je n'arrie pas à faire fonctionner le prog, il ne me modifie aucune étiquette, j'ai l'impression d'être une B....... Sinon ton truc de undo et de (vl-load-com) marche très bien, de plus je cherchais la commande undo pour un autre prog. Je pense que qlq chose de pas bien se passe dans le prog au niveau du blockEt la galère continu. bye >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
Patrick_35 Posté(e) le 2 août 2005 Posté(e) le 2 août 2005 Je ne comprends pasJ'ai testé chez moi, et ça fonctionne parfaitementLe programme fonctionne comme ceciTu sélectionnes un attributSi c'est un attribut, tu donnes la valeur à propagerJe parcours la table des blocs à la recherche d'un nom d'attribut qui correspond à celui qui a été sélectionné et aussi pour retrouver le nom du/des bloc(s)Dès que j'en ai un, je fais une sélection de tous les blocs insérés dans le dessin dudit blocJe recherche ensuite l'attribut dans le bloc et dès que je l'ai, je lui affecte la nouvelle valeur Le plus simple, et que tu mettes un dessin à dispo et dire ce que tu souhaites modifier afin que je puisse regarder @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
argilles Posté(e) le 2 août 2005 Auteur Posté(e) le 2 août 2005 Je te remercie pour aide, j'ai mis en partage membres >>>> dans la rubrique autocad >> AutoCAD / Blocs, bibliothèques. il s'appelle : Cartouche_att.dwg Je vais bidouiller ce soir pour me sortir cette poutre de mon pied. @+ >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
Patrick_35 Posté(e) le 2 août 2005 Posté(e) le 2 août 2005 C'est bon, j'ai trouvéDésolé, c'est une erreur de ma part, j'ai mis un entnext en trop donc le lisp remanié @+ (defun c:mat(/ bl ent js n modif sel tot val) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq sel (nentsel "\nSélectionnez une étiquette : ")) (if (= (cdr (assoc 0 (entget (car sel)))) "ATTRIB") (if (setq val (getstring t "\nNouvelle valeur : ")) (progn (setq bl (tblnext "block" t) sel (entget (car sel)) tot 0) (while bl (if (and (= (logand (cdr (assoc 70 bl)) 2) 2) (/= (logand (cdr (assoc 70 bl)) 4) 4)) (progn (setq ent (cdr (assoc -2 bl))) (while ent (setq ent (entget ent)) (if (and (= (cdr (assoc 0 ent)) "ATTDEF") (= (cdr (assoc 2 ent)) (cdr (assoc 2 sel)))) (if (setq js (ssget "x" (list (cons 0 "INSERT") (assoc 2 bl)))) (progn (setq n 0) (while (ssname js n) (setq modif (entget (entnext (ssname js n)))) (while (/= (cdr (assoc 0 modif)) "SEQEND") (if (= (cdr (assoc 2 modif)) (cdr (assoc 2 sel))) (progn (setq modif (subst (cons 1 val) (assoc 1 modif) modif) tot (1+ tot)) (entmod modif) (entupd (cdr (assoc -1 modif))) ) ) (setq modif (entget (entnext (cdr (assoc -1 modif))))) ) (setq n (1+ n)) ) ) ) ) (setq ent (entnext (cdr (assoc -1 ent)))) ) ) ) (setq bl (tblnext "block")) ) (princ (strcat "\nModification de " (itoa tot) " étiquette(s)")) ) ) (princ "\nCe n'est pas une étiquette.") ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (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
argilles Posté(e) le 2 août 2005 Auteur Posté(e) le 2 août 2005 :D :D :D :D :D :D :D :D :D :D GENIAL IL FONCTIONNE A MERVEILLE. Je te remercie pour ton aide qui fût très grande.Tu m'a sortis une poutre du pied.Je te nomme Maitre Jedi en chef. @+ (pas tout de suite j'espère) bonne soirée et bonnes vacances (pour toi car pour moi c'est déjà fini) :D :D :D :D :D :D :D :D :D :D >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
x13 Posté(e) le 3 août 2005 Posté(e) le 3 août 2005 X13 (Marseillais !!!)Mais non.Québeçois, oui :exclam:
zebulon_ Posté(e) le 4 août 2005 Posté(e) le 4 août 2005 Salut Gilles, je vois que tu as persisté dans la bidouille lisp et ça me fait plaisir. Bienvenu sur ce forum, mais arrête de prendre les québecois pour des marseillais. Le saint laurent, c'est pas la méditerranée que je sache ...Excuse le x13, la géographie n'a jamais été son point fort. Amitiés Zébulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
argilles Posté(e) le 5 août 2005 Auteur Posté(e) le 5 août 2005 Merci les gars pour votre coup de main. Eh oui Zebulon, lorsque le professeur explique bien et prend le temps l'élève ne peut qu'aimer. Bye @+ >>>>>>>>>> venez visiter mon nouveau site d’Architecture http://argile.archi.free.fr <<<<<<<<<
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