ChC Posté(e) le 27 mai 2018 Posté(e) le 27 mai 2018 Bonjour,J'ai trouvé un lisp, publié par Patrick_35 le 11 mars 2013 et nommé CATT, qui permet de copier certains attributs d'un bloc à un autre. Il répondrait parfaitement à mon besoin s'il ne transformait pas les caractères unicode (en l'occurence des flèches) présents dans mes valeurs d'attributs en points d'interrogation.J'ai par ailleurs trouvé un autre lisp (LM) de Lee Mac qui permettrait de contourner ce problème lié d'après ce que je comprends à un bug des commandes vla*.Je ne suis pas assez calé pour conjuguer ces deux lisps. Quelqu'un peut-il m'y aider ? Catt LM
(gile) Posté(e) le 27 mai 2018 Posté(e) le 27 mai 2018 Salut, Tu peux essayer ce petit LISP vite fait (pas testé) (defun getAttribs (blk / elst result) (setq elst (entget (entnext blk))) (while (= (cdr (assoc 0 elst)) "ATTRIB") (setq result (cons (cons (cdr (assoc 2 elst)) (cdr (assoc 1 elst)) ) result ) elst (entget (entnext (cdr (assoc -1 elst)))) ) ) result ) (defun setAttribValues (blk values / elst tag) (setq elst (entget (entnext blk))) (while (= (cdr (assoc 0 elst)) "ATTRIB") (setq tag (cdr (assoc 2 elst))) (if (setq val (cdr (assoc tag values))) (entmod (subst (cons 1 val) (assoc 1 elst) elst)) ) (setq elst (entget (entnext (cdr (assoc -1 elst))))) ) ) (defun c:copyatt (/ blk attribs ss i) (and (setq blk (car (entsel "\nSélectionnez le bloc d'origine: "))) (setq attribs (getAttribs blk)) (princ "\nSélectionnez les blocs destinataires.") (setq ss (ssget '((0 . "INSERT") (66 . 1)))) (repeat (setq i (sslength ss)) (setAttribValues (ssname ss (setq i (1- i))) attribs) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ChC Posté(e) le 27 mai 2018 Auteur Posté(e) le 27 mai 2018 Bonjour Gile, Un grand merci.J'ai testé et cela fonctionne parfaitement sur les attributs n'ayant qu'une seule ligne.Malheureusement, pour les attributs multilignes, seule la première ligne est copiée.
(gile) Posté(e) le 27 mai 2018 Posté(e) le 27 mai 2018 Comme ça, ça devrait marcher avec les attributs multilignes (defun getAttribs (blk / elst result) (setq elst (entget (entnext blk))) (while (= (cdr (assoc 0 elst)) "ATTRIB") (setq result (cons (cons (cdr (assoc 2 elst)) (cdr (assoc 1 (reverse elst))) ) result ) elst (entget (entnext (cdr (assoc -1 elst)))) ) ) result ) (defun setAttribValues (blk values / elst tag) (setq elst (entget (entnext blk))) (while (= (cdr (assoc 0 elst)) "ATTRIB") (setq tag (cdr (assoc 2 elst))) (if (setq val (cdr (assoc tag values))) (entmod (subst (cons 1 val) (assoc 1 (reverse elst)) elst)) ) (setq elst (entget (entnext (cdr (assoc -1 elst))))) ) ) (defun c:copyatt (/ blk attribs ss i) (and (setq blk (car (entsel "\nSélectionnez le bloc d'origine: "))) (setq attribs (getAttribs blk)) (princ "\nSélectionnez les blocs destinataires.") (setq ss (ssget '((0 . "INSERT") (66 . 1)))) (repeat (setq i (sslength ss)) (setAttribValues (ssname ss (setq i (1- i))) attribs) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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