Aller au contenu

copier attributs contenant des symboles unicode


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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.

Posté(e)

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

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é