anthony07 Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 bonjourj'ai un bloc avec 1 attribut, le symbole est dans un calque et son attribut dans un autre calquey a t'il un moyen de basculer l'attribut du bloc dans le même calque que le bloc?j'ai 900 blocs environ dans ce casmerci d'avanceAnthony
Patrick_35 Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Salut Un truc vite fait (defun c:batt(/ att bl doc sel tot) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vla-startundomark doc) (if (ssget "x" (list (cons 0 "INSERT") (cons 66 1))) (progn (princ "\nTravail en cours...")(princ) (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (foreach att (vlax-invoke bl 'getattributes) (vla-put-layer att (vla-get-layer bl)) (setq tot (1+ tot)) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ (strcat "\nModification de " (itoa tot) " attribut(s).")) (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
balyoa Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Bonjour, J'avais le même problème, donc merci pour le lisp. Juste une modification : serait-il possible de pouvoir choisir les objets à traiter et/ou même mieux les calques à traiter ? Merci d'avance. Yoann
balyoa Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Rebonjour, Une dernière remarque, j'ai des blocs avec plusieurs attributs, et je ne souhaite traiter avec le lisp ci-dessus qu'un seul attribut, est-ce envisageable ? Merci et bonne journée. Yoann
Patrick_35 Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Salut Oui, ce que tu demandes est possible pour sélectionner suivant les calques, tu ajoutes dans le filtre de sélection(ssget "x" (list (cons 0 "INSERT") (cons 66 1) (cons 8 "Calque1,Calque2,Calque3"))) Pour ce qui est de changer suivant l'attribut, tu as plusieurs méthodes.1) c'est toujours le 3em, dans ce cas il faut compter dans la bouche foreach et intervenir quand c'est le bon moment2) Par son étiquette, il faut comparer dans la boucle foreach l'étiquette3) Par sa valeur d'attribut, idem au 2, mais avec la valeur @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
balyoa Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Merci Patrick, Mais je ne développe pas en lisp, donc meme si j'ai compris où tu voulais en venir je n'arrive à transposer en lisp. Pourrais-tu me montrer ce que ca donne pour : - ne traiter que les blocs qui s'appellent "POINTS" - dans la boucle foreach choisir toujours l'attribut qui s'appelle "ALT" par exemple. Merci d'avance de ton aide. Bon week-end. Yoann
(gile) Posté(e) le 5 février 2010 Posté(e) le 5 février 2010 Salut, - ne traiter que les blocs qui s'appellent "POINTS" (ssget "x" (list (cons 0 "INSERT") (cons 2 "POINT"))) - dans la boucle foreach choisir toujours l'attribut qui s'appelle "ALT" par exemple. (foreach att (vlax-invoke bl 'getattributes) (if (= (vla-get-TagString att) "ALT") (progn (vla-put-layer att (vla-get-layer bl)) (setq tot (1+ tot)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
balyoa Posté(e) le 6 février 2010 Posté(e) le 6 février 2010 Merci beaucoup,je teste lundi et je fais un feedback. Bon week-end. Yoann
balyoa Posté(e) le 8 février 2010 Posté(e) le 8 février 2010 Merci Gile, ca marche nickel. Voilà ci-dessous le lisp modifié (avec un commentaire et le nom du talentueux auteur) : ;;; BATT (gile) ;;; Place l'attribut ALT du bloc POINT dans le meme calque que celui où est inseré le bloc POINT (defun c:batt(/ att bl doc sel tot) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vla-startundomark doc) (if (ssget "x" (list (cons 0 "INSERT") (cons 2 "POINT"))) (progn (princ "\nTravail en cours...")(princ) (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (foreach att (vlax-invoke bl 'getattributes) (if (= (vla-get-TagString att) "ALT") (progn (vla-put-layer att (vla-get-layer bl)) (setq tot (1+ tot)) ) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ (strcat "\nModification de " (itoa tot) " attribut(s).")) (princ) ) Encore merci, bonne journée à tous. Yoann
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