Modifier 1 lettres sur plusieurs etiquettes du meme Bloc

Modifier 1 lettres sur plusieurs etiquettes du meme Bloc

Anonymous
Non applicable
2 447 Visites
11 Réponses
Message 1 sur 12

Modifier 1 lettres sur plusieurs etiquettes du meme Bloc

Anonymous
Non applicable

bonjour,

 

je viens a vous car je ne trouve pas solution.

 

j'ai un bloc qui a été construit avec des  300 étiquettes avec en référence avec une lettre et la codification viens changer et je me vois pas aller dans un bloc éditer et changer a la main une lettre a la fois. après avantage que j'ai c'est que toutes les étiquettes passe d'une lettre a une autres. 

 

Exemple les étiquettes "Exxx" (donc 300 fois)  passe en tous "Axxx"

et j'en est d'autres.

 

si vous avez une idée ?

 

merci d'avance.

 

fred

 

 

0 J'aime
Solutions acceptées (2)
2 448 Visites
11 Réponses
Replies (11)
Message 2 sur 12

_gile
Consultant
Consultant

Salut,

 

À part avec une routine LISP ou autre, je crains qu'il ne faille le faire à la main...



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 3 sur 12

_Steven_
Mentor
Mentor

Salut,

 

Si tu as les Express Tools d'installés, tu peux lancer la commande ATTOUT et sélectionner tous tes blocs en question.

Tu obtiendra un fichier texte que tu ouvres avec Excel ou un autre tableur., tu remplace dans la colonne des Exxxx par Axxxx puis tu enregistres ton fichier.

Tu retourne sur AutoCAD, tu tapes la commande ATTIN, tu sélectionnes ton fichier texte et tous tes attributs Exxxx seront remplacer par Axxxx.

Steven

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton APPROUVER LA SOLUTION en dessous de la réponse.




« L’homme de bien n’exige pas de l’autre qu’il soit parfait, il l’aide à accomplir ce qu’il a en lui de meilleur. »
Lao Tseu
0 J'aime
Message 4 sur 12

_gile
Consultant
Consultant

@_Steven_,

Si j'ai bien compris, c'est les étiquettes des définitions d'attribut qu'il s'agit de modifier, dans une définition de bloc, donc.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 5 sur 12

_Steven_
Mentor
Mentor
Salut _gile,

En effet, Fred cité des étiquettes et j'avais aussi pensé aux definitions d'attributs puis je me suis dis que peut-être parle-t-il des valeurs d'attributs.
Aussi, ça m'à surpris que tu ne parle pas d'ATTIN -ATOUT mais je comprends maintenant pourquoi 😉
Steven

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton APPROUVER LA SOLUTION en dessous de la réponse.




« L’homme de bien n’exige pas de l’autre qu’il soit parfait, il l’aide à accomplir ce qu’il a en lui de meilleur. »
Lao Tseu
0 J'aime
Message 6 sur 12

Anonymous
Non applicable

bonjour,

 

merci pour essayer m'aidez, mais express tool fonctionne pas chez nous.

 

je vais mettre une photo comme exemple, là c'est le E qui doit être remplacer par A mais j'en aient d'autre cas.

0 J'aime
Message 7 sur 12

_Steven_
Mentor
Mentor
En effet, _gile à raison, ce sont bien les définitions d'attributs que tu souhaites modifier.
Il te faudrait effectivement une routine lisp ou les modifier à la main.
Steven

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton APPROUVER LA SOLUTION en dessous de la réponse.




« L’homme de bien n’exige pas de l’autre qu’il soit parfait, il l’aide à accomplir ce qu’il a en lui de meilleur. »
Lao Tseu
0 J'aime
Message 8 sur 12

Anonymous
Non applicable

bonjour,

 

merci c'est bien ce que que je pensais.

 

je vais essayer trouver un lisp car  a un main risque d'erreur .

 

merci a tous

0 J'aime
Message 9 sur 12

CADaSchtroumpf
Advisor
Advisor
Solution acceptée

Bonjour,

 

Ces quelques lignes copiés directement sur la ligne de commande "devraient" faire le job.

Je dis bien devraient car je n'ai pu tester en situation réelle, je me suis basé sur tes indications (image comprise).

 

((lambda ( / js_bl n ent tag)
	(setq js_bl (ssget "_X" '((0 . "INSERT") (2 . "REPRE"))))
	(repeat (setq n (sslength js_bl))
		(setq ent (ssname js_bl (setq n (1- n))))
		(foreach a (vlax-invoke (vlax-ename->vla-object ent) 'GetAttributes)
			(setq tag (vla-get-TagString a))
			(cond
				((wcmatch tag "E##@#")
					(vla-put-TagString a (strcat "A" (substr tag 2)))
				)
			)
		)
	)
))

Cela va modifier toutes tes insertions du bloc déjà effectuées, mais en aucun cas ta définition du bloc, il serait bien de le faire sinon le problème des étiquettes va persister lors de tes insertions futures.

Message 10 sur 12

Anonymous
Non applicable

 

((wcmatch tag "E##@#")

 

Sa fonctionne super bien dans un premier temps ou les étiquettes sont bien changer quand je rentre dans le bloc mais pas en éditeur de bloc, je vais voir avec import si sa rempli bien toutes les étiquettes.

 

il faut juste que je change les # et @ selon les étiquettes.

 

merci beaucoup.

 

fred

0 J'aime
Message 11 sur 12

CADaSchtroumpf
Advisor
Advisor
Solution acceptée

il faut juste que je change les # et @ selon les étiquettes.

 

Je pense qu'il est en effet judicieux de procéder ainsi, quitte à faire plusieurs passes du lisp (après modification), de façon à bien cibler les changements et de pas changer une étiquette malencontreusement.

 

Dans l'éditeur de bloc, tu peux aussi répéter la procédure avec le lisp suivant pour mettre à jour ta définition de bloc, je te laisse ajuster les détails.

((lambda ( / js_at n ent dxf_ent tag)
	(setq js_at (ssget "_X" '((0 . "ATTDEF"))))
	(repeat (setq n (sslength js_at))
		(setq
			ent (ssname js_at (setq n (1- n)))
			dxf_ent (entget ent)
			tag (cdr (assoc 2 dxf_ent))
		)
		(cond
			((wcmatch tag "E##@#")
				(entmod (subst (cons 2 (strcat "A" (substr tag 2))) (assoc 2 dxf_ent) dxf_ent))
			)
		)
	)
))
Message 12 sur 12

Anonymous
Non applicable

Bonjour,

 

il m'a suffit de répété dans un fichier .txt plusieurs fois la commande en modifiant les # et les @ et après le copier direct dans ma ligne de commande et hop tous changer et fait pareil pour l'éditeur de bloc.

 

merci beaucoup.

 

vous avez fait gagner beau temps.

 

fred

0 J'aime