ChC Posté(e) le 27 mai 2018 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 27 mai 2018 Partager 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 - Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
ChC Posté(e) le 27 mai 2018 Auteur Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 27 mai 2018 Partager 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 - Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
ChC Posté(e) le 27 mai 2018 Auteur Partager Posté(e) le 27 mai 2018 C'est génial !Merci :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
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