Aller au contenu

Etiquette attribut


t.erie

Messages recommandés

Bonjour,

Mon problème est le suivant:

J'ai plusieurs centaines de fichiers dans lesquels un bloc est inséré.

Ce bloc est composé de x attributs.

J'ai besoin maintenant de changer les étiquettes de ce bloc sans perdre les valeurs.

Est-ce qu'une âme charitable peut m'aider ?

Je vais quand même fouiner encore dans les forums ...

 

Merci par avance

 

Thierry

Lien vers le commentaire
Partager sur d’autres sites

Ok

 

Je pensais que tu voulais ajouter une étiquette dans ton bloc.

 

Si tu veux renommer tes étiquettes, dans un 1er dessin, tu édites ton bloc, renomme tes étiquettes, utilises battman ou attsync puis un wbloc de ton/tes blocs.

 

Sur les autres dessins, tu insères le/les bloc(s) puis un battman ou attsync sur chacun des blocs insérés.

 

@+

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

Un attsync fait correspondre le bloc dans la base d'autocad avec ceux dans le dessin.

Si tes ref disparaissent, cela veut dire que tu n'as actuellement rien qui correspond avec la base et que si tu insères un nouveau bloc, tu dois avoir des surprises

 

Dans ce cas, reste la prog.

C'est le moment ou jamais ;)

 

@+

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

Un lisp vite fait

 

(defun c:rat(/ doc ent att nom nombl pos rep tag tot)

 (defun nombl(bl)
   (if (vlax-property-available-p bl 'effectivename)
     (vla-get-effectivename bl)
     (vla-get-name bl)
   )
 )

 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (and	(setq tag (car (nentsel)))
(setq tag (vlax-ename->vla-object tag))
(eq (vla-get-objectname tag) "AcDbAttribute")
(/= (setq rep (getstring t "\nNouvelle étiquette : ")) "")
(ssget "x" (list (cons 0 "insert")
		 (cons 2 (strcat "`**,"
				 (setq nom (nombl (vla-objectidtoobject (vla-get-database tag)
									(vla-get-ownerid tag)
						  )
					   )
				 )
			 )
		 )
	   )
)
   (progn
     (setq pos 0 tot 0)
     (foreach att (vlax-invoke (vla-objectidtoobject (vla-get-database tag) (vla-get-ownerid tag)) 'getattributes)
(and (eq (vla-get-handle att) (vla-get-handle tag))
  (setq pos tot)
)
(setq tot (1+ tot))
     )
     (setq tot 0)
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (eq (nombl ent) nom)
  (setq tot (1+ tot))
  (vla-put-tagstring (nth pos (vlax-invoke ent 'getattributes)) rep)
)
     )
     (vla-delete sel)
     (princ (strcat "\nModification de " (itoa tot) " attribut(s)."))
   )
 )
 (vla-endundomark doc)
 (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

C'est vraiment gentil de prendre sur votre temps pour trouver une solution à mon problème.

En fait j'ai un bloc dans mon fichier avec plusieurs ref associées.

Je voudrais inséré un nouveau bloc portant le même nom (mais avec avec des etiquettes différentes)

tout en conservant les précédentes valeurs.

Merci beaucoup

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

serait-il possible d'automatiser la commande BATTMAN ?

Je m'explique:

J'ai environ 200 fichiers dans lesquels se trouve un bloc qui se nomme ETIQ-SU dont j'aimerai modifier ses 9 étiquettes d'attributs.

Celles-ci se nomment toujours avec en préfixe (ESPACE_CLIENT:) du type ESPACE_CLIENT:ENTITE

Mon souhait serait d'enlever ESPACE_CLIENT: à toutes mes étiquettes pour conserver que la partie après les :

 

CLIENT étant évidemment un nom de remplacement (discrétion oblige).

 

Je croise les doigts en espérant qu'un des virtuoses de la programmation me sauve de cette galère.

 

Thierry

 

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

pour les 200 fichiers, à utiliser par exemple avec SAS

 

(defun c:rat(/ att blo doc ent sel txt)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
txt "ESPACE_CLIENT:"
 )
 (vla-startundomark doc)
 (vlax-for blo (vla-get-blocks doc)
   (and (eq (vla-get-islayout blo) :vlax-false)
     (vlax-for ent blo
(and (eq (vla-get-objectname ent) "AcDbAttributeDefinition")
     (wcmatch (strcase (vla-get-tagstring ent)) (strcase (strcat txt "*")))
  (vla-put-tagstring ent (substr (vla-get-tagstring ent) (1+ (strlen txt))))
)
     )
   )
 )
 (and (ssget "x" (list (cons 0 "insert") (cons 66 1)))
   (progn
     (vlax-for blo (setq sel (vla-get-activeselectionset doc))
(foreach ent (vlax-invoke blo 'getattributes)
  (and (wcmatch (strcase (vla-get-tagstring ent)) (strcase (strcat txt "*")))
    (vla-put-tagstring ent (substr (vla-get-tagstring ent) (1+ (strlen txt))))
  )
)
     )
     (vla-delete sel)
   )
 )
 (vla-endundomark doc)
 (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

 

Hello

 

SVP puis je permettre de demander un progr "un peu plus general" pour changer le nom des etiquettes d'attributs de UN bloc ou de TOUS les blocs du dessin !?

 

Le tout etant bien sur Scriptable ...

 

Question 1 :

Traiter UN bloc (avec attrinut) que l'on va selectionner ou TOUS les blocs (avec attribut) d'un dessin

 

Question 2

Ajouter prefixe ou Ajouter suffixe ou Rechercher/remplacer texte

 

Ainsi on pourrait ajouter "CADXP" en prefixe ou en suffixe a toutes les etiquettes ou rechercher le texte ALPHA dans les etiquettes pour le remplacer par rien du tout ou par CADXP !

 

Qu'en pensez vous ?

 

Le Decapode

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Pourquoi pas

 

Une première version en attendant d'y ajouter une BD

 

pour faire écho au précèdent post, il serait aussi intéressant de pouvoir traiter les fichiers par lot:

Avec SAS :D

Eric se fera un plaisir de t'aider

 

@+

 

[Edité le 1/7/2010 par Patrick_35]

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

Bonjour

 

Une nouvelle version avec une boite de dialogue possible

commande ret avec la bd

commande -ret sans la bd

commande ret en script sans bd

 

@+

 

edit : Version 2.01

 

[Edité le 2/7/2010 par Patrick_35]

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

Hello

 

La grande classe Patrick ! :)

Moi je fais les CCTP/CDC et vous (les fous du developpement : Patrick_35, Gilles, Bonuscad, etc), vous programmez !! :D

Elle est pas belle la vie ??? ;)

 

Encore Merci, Le Decapode

 

PS: j'ai ajoute un (vl-load-com) en debut du code

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines aprè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 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é