Aller au contenu

Messages recommandés

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)

:o

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

Posté(e)

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)

Posté(e)

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

Posté(e)

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

Posté(e)

Mets un (vl-load-com) en tête

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

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

Joseph Joubert, 1754-1824

Posté(e)

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 block

Et la galère continu.

 

bye

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

Posté(e)

Je ne comprends pas

J'ai testé chez moi, et ça fonctionne parfaitement

Le programme fonctionne comme ceci

Tu sélectionnes un attribut

Si c'est un attribut, tu donnes la valeur à propager

Je 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 bloc

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

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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)

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é