Aller au contenu

niveau différent entre bloc et attributs


Messages recommandés

Posté(e)

bonjour

j'ai un bloc avec 1 attribut, le symbole est dans un calque et son attribut dans un autre calque

y 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 cas

merci d'avance

Anthony

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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 moment

2) Par son étiquette, il faut comparer dans la boucle foreach l'étiquette

3) Par sa valeur d'attribut, idem au 2, mais avec la valeur

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é