Aller au contenu

Modif attributs blocs en lot


Messages recommandés

Posté(e)

Bonjour à tous,

 

alors voilà, ce matin j'ai pour mission de modifier (considérons) 1 seul attribut nommé toto, qui se retrouve sur plusieurs blocs différents (noms) ; la valeur à entrer est la même pour tous les blocs.

 

Et comme je travaille habituellement sur une station CAO (avec des traitement auto etcc), je suis devenu très flemmar !

 

Ma question :

 

Est-il possible de faire cette modification "d'un seul coup" (via AutoCAD, un lisp etcc) ou bien est-ce que je dois me taper tous les blocs un à un ^^

 

 

Merci.[Edité le 9/7/2009 par SAAIDI][Edité le 9/7/2009 par SAAIDI][Edité le 9/7/2009 par SAAIDI][Edité le 9/7/2009 par SAAIDI][Edité le 9/7/2009 par SAAIDI]

 

[Edité le 9/7/2009 par SAAIDI]

Posté(e)

Je connais cette grande liste, c'est vrai que j'aurai déja dù commencer par là.

 

Je vais tester MAT et PAT

 

Merci

Posté(e)

Le Lisp MAT fonctionne très bien sur un bloc unique qui apparait plusieurs fois dans le dessin.

 

En fait, il me faudrait l'équivalent du Mat avec le choix de plusieurs blocs (noms différents) qui ont le même nom d'attribut. (valeur à entrer identique pour tous les blocs)

 

:(

 

[Edité le 9/7/2009 par SAAIDI]

Posté(e)
Bonjour à toutes et tous,

 

Alors dans ce cas, c'est le bon vieux "SSATT" de (gile) (toujours fait "maison") et cette fois, c'est sur cette page,...

 

Et non, ssatt filtre sur le nom du bloc et la valeur d'attribut.

 

S'il faut sélectionner tous les blocs ayant un attribut dont l'étiquette est identique à l'attribut source, je propose sstag :

 

EDIT : réparé une erreur de syntaxe

 

(defun c:sstag	(/ doc att elst tag val name ss1 ss2)
 (vl-load-com)
 (and
   (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
   (setq att (car (nentsel "\nSélectionnez l'attribut source: ")))
   (setq att (vlax-ename->vla-object att))
   (= (vla-get-ObjectName att) "AcDbAttribute")
   (setq tag (vla-get-TagString att)
  ss2 (ssadd)
   )
   (princ "\nSélectionnez les blocs ou : ")
   (or
     (ssget (list '(0 . "INSERT")
	   '(66 . 1)
     )
     )
     (ssget "_X"
     (list '(0 . "INSERT")
	   '(66 . 1)
     )
     )
   )
   (vlax-for blk (setq ss1 (vla-get-ActiveSelectionSet doc))
     (foreach a (vlax-invoke blk 'GetAttributes)
(if (= (vla-get-TagString a) tag)
  (ssadd (vlax-vla-object->ename blk) ss2)
  T
)
     )
   )
   (not (vla-delete ss1))
   (sssetfirst nil ss2)
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

sstag. A partir de là, qu'est-ce que je dois faire ?

 

 

Merci de votre aide

Posté(e)

J'ai pas compris depuis la proposition sstag...

 

sstag n'est pas intégré dans la routine lisp.

 

Je suis plus là <acronym class=dict title=

Posté(e)

Tu charges sstag.

Tu lances sstag.

Tu sélectionnes un attribut source.

Tu sélectionnes les blocs à modifier ou tu valides pour tous les bloc.

Tu obtiens une sélection filtrée par l'étiquette du bloc source.

Tu changes la valeur de l'attribut dans la palette des propriétés.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Où puis-je trouver sstag, il n'apparait pas dans la liste (sauf erreur de ma part) et il n'est pas intégré à la routine "spéciales selections"

 

Merci [Edité le 9/7/2009 par SAAIDI]

 

[Edité le 9/7/2009 par SAAIDI]

Posté(e)

il n y a apparement pas dans cette liste un lisp sstag

Posté(e)

Je ne sais pas quoi faire de ce bout de programme.

 

Je suis pas créateur de lisp ^^

 

 

Posté(e)

 

Hello Gilles

 

Desole mais ton SSTAG provoque l'erreur :

Commande: _appload SSTAG.lsp correctement chargé(s)

Commande: ; erreur: erreur de syntaxe

 

Aussi bien sous MAP 2010 que sous MAP 2006 !

 

Donc

soit j'ai loupé le copier-coller

soit le BBCode "pollue" ton code

soit il y a une vraie erreur dans ton code

 

Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

 

Hello Gilles

 

Merci pour la correction mais j'ai encore un problème "plus vicieux"

 

J'ai un joli dessin avec de multiples blocs qui ont plus ou moins les mêmes noms d'attributs dont bien sur au moins UN attribut avec le MEME nom

 

Mais, mais, les attributs ne viennent pas du tout dans le même ordre

et dans ce cas, la case de dialogue des propriétés sur les attributs reste vide !! :o

Donc impossible, de voir et de modifier la valeur

 

Si bien sur je sélectionne N blocs de nom identique, ca marche !

 

Donc soit je suis nul, soit il faut simplement poser la question de la valeur de l'attribut sur la ligne de commande et écraser l'attribut concerné de tous les blocs !

(sans passer par la case de dialogue des propriétés)

 

Le Decapode "testeur & chiant"

 

Autodesk Expert Elite Team

Posté(e)

ça marche pas

Les réponses limite désobligeantes, c'est une seconde nature chez toi ?...

 

 

Sinon, voilà du "sur mesure" :

 

(defun c:MODATT-TAG (/ att tag val)
 (vl-load-com)
 (and
   (setq att (car (nentsel "\nSélectionnez un attribut source: ")))
   (setq att (vlax-ename->vla-object att))
   (= (= (vla-get-ObjectName att) "AcDbAttribute"))
   (setq tag (vla-get-TagString att))
   (setq
     val (getstring
    T
    (strcat "\Entrez la nouvelle valeur pour les attrubuts \""
	    tag
	    "\": "
    )
  )
   )
   (princ "\nSélectionnez les blocs ou : ")
   (or
     (ssget (list '(0 . "INSERT")
	   '(66 . 1)
     )
     )
     (ssget "_X"
     (list '(0 . "INSERT")
	   '(66 . 1)
     )
     )
   )
   (vlax-for blk (setq
	    ss (vla-get-ActiveSelectionSet
		 (vla-get-ActiveDocument (vlax-get-acad-object))
	       )
	  )
     (foreach a (vlax-invoke blk 'GetAttributes)
(if (= (vla-get-TagString a) tag)
  (vla-put-TextString a val)
  T
)
     )
   )
   (not (vla-delete ss))
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'ai demandé un lisp (fichier d'extension .lsp) dans le message n° 1

 

Je sais pas quoi faire de ce charabia.

 

Merci quand même

Posté(e)

 

Hello Gilles

 

Un grand Merci comme d'habitude ! :)

 

Cela marche Nickel-Chrome sur mon MAP 3D 2006 !

 

Je n'ai pas testé sur d'autres versions mais j'ai confiance :D

 

Le Decapode "testeur satisfait"

 

Autodesk Expert Elite Team

Posté(e)

Bonjour

 

Je propose une solution plus simple qu'avec un lisp (c'est Rebcao qui va être content ;) )

 

Tu fais ctrl+choix de(s) l'attribut(s) puis tu vas dans les propriétés (ctrl+1) et tu changes 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)

 

Hello

 

NON, cela ne marche pas si on sélectionne des blocs différents !

(Ayant de multiples attributs dont UN est commun bien sur)

Voir ma réponse de 10h20 avec la routine de Gilles ... :casstet:

 

Par contre cela fonctionne si on sélectionne N blocs de noms identiques

 

Le Decapode "tétu"

 

Autodesk Expert Elite Team

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é