Aller au contenu

niveau différent entre bloc et attributs


anthony07

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é