fabichou Posté(e) le 21 avril 2010 Posté(e) le 21 avril 2010 Bonjour à tous, Voici mon problème: J'ai 1 bloc avec un texte comme attribut (dont je peux changer la position).J'ai inséré x bloc dans mon dessin et ai changé la position de tous (suivant la place que j'ai dans mon dessin). Maintenant je m'aperçois que je voudrais changer de calque l'attribut texte de mon bloc. Mais voilà lorsque je change de calque (avec le gestionnaire des attributs de bloc), il me change la position de mon texte qu'il replace tel qu'inséré. Peut être que quelqu'un a une solution à mon problème ou bien il va falloir que je replace 1 par 1 la position de tous mes textes. MERCI D'AVANCE :(
zebulon_ Posté(e) le 22 avril 2010 Posté(e) le 22 avril 2010 Bonjour fabichou, Effectivement, que ce soit avec battman ou attsync, une synchronisation replace les attributs à leur position d'origine.Pour palier à ce problème, l'idée, qui n'est sans doute pas la meilleure, est de lancer un premier lisp qui construit une liste contenant l'adresse de l'attribut et le point qui correspond à son TextAlignmentPoint. Ensuite tu procèdes à la synchronisation qui change le TextAlignmentPoint. Pour terminer, tu exécutes un second lisp qui remet le TextAlignmentPoint tel que sauvegardé dans la liste construite par le premier lisp. (vl-load-com) ;; construire liste LSTPT (defun c:getpos (/ AcDoc eobj sel latt att) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))) (setq LSTPT nil) (ssget "_X" '((0 . "INSERT") (2 . "NOM_DU_BLOC"))) (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc)) (if (= (vlax-get-property eobj 'HasAttributes) :vlax-true) (progn (setq LATT (vlax-invoke eobj 'getAttributes)) (foreach ATT LATT (if (= (vla-get-TagString ATT) "NOM_ETIQUETTE") (setq LSTPT (cons (list ATT (vla-get-TextAlignmentPoint ATT)) LSTPT)) ) ) ) ) ) (vla-delete sel) (princ) ) ;; remettre les attributs à leur place d'origine contenue dans LSTPT (defun c:putpos (/ PT) (foreach PT LSTPT (vla-put-TextAlignmentPoint (car PT) (cadr PT)) ) (princ) ) Bien sûr il faut changer NOM_DU_BLOC et NOM_ETIQUETTE pour que ça corresponde à ton cas. AmicalementVincent [Edité le 22/4/2010 par zebulon_] 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)
fabichou Posté(e) le 22 avril 2010 Auteur Posté(e) le 22 avril 2010 Merci pour ta réponse Zébulon je vais essayer ça.
fabichou Posté(e) le 22 avril 2010 Auteur Posté(e) le 22 avril 2010 J'ai essayé et ça bloque au 2ème lisp: [surligneur] Commande: putpos; erreur: Erreur Automation Non valable[/surligneur]
Patrick_35 Posté(e) le 22 avril 2010 Posté(e) le 22 avril 2010 Salut Zebulon_C'est une solution.Une autre en regardant directement dans la table des blocs Version avec nom étiquettes différentes (defun c:cla(/ bl doc ent lst) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget "x" (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (setq lst nil) (vlax-for ent (vla-item (vla-get-blocks doc) (vla-get-name bl)) (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (setq lst (cons (cons (vla-get-tagstring ent) (vla-get-layer ent)) lst)) ) ) (mapcar '(lambda(x) (and (setq lay (cdr (assoc (vla-get-tagstring x) lst))) (vla-put-layer x lay) ) ) (vlax-invoke bl 'getattributes) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Version avec nom étiquettes parfois identiques (defun c:cla(/ bl doc ent lst) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget "x" (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (setq lst nil) (vlax-for ent (vla-item (vla-get-blocks doc) (vla-get-name bl)) (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (setq lst (cons (cons (vla-get-tagstring ent) (vla-get-layer ent)) lst)) ) ) (mapcar '(lambda(a b) (vla-put-layer a (cdr b))) (vlax-invoke bl 'getattributes) (reverse lst)) ) (vla-delete sel) ) ) (vla-endundomark doc) (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
zebulon_ Posté(e) le 22 avril 2010 Posté(e) le 22 avril 2010 J'ai essayé et ça bloque au 2ème lisp: je t'ai envoyé mon adresse par message privé. Si cela ne pose pas de problème de confidentialité, tu peux me faire parvenir le fichier dwg concerné, ou le déposer quelque part sur un site FTP ? AmicalementVincent 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)
fabichou Posté(e) le 23 avril 2010 Auteur Posté(e) le 23 avril 2010 Bonjour Zébulon Je suis désolé mais je n'ai rien reçu et je ne sais même pas comment envoyer 1 fichier avec ce zinzin là!!!!! Merci pour les autres lisps de patrick, mais là non plus je n'y arrive pas!!!
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