Aller au contenu

Convertir attribut en texte


Messages recommandés

Posté(e)

Bonjour,

 

Il y a quelques jours, j'ai reçu un fichier avec (entre autres) quelques attributs sans blocks. :hallucine: :mad2: :hallucine:

 

Le problème est que lors d'une insertion dans un fichier (en block ou Xref )

ces fameux attributs ne passent pas.

Pas grave, je vais les transformer en texte…. Oui mais comment ???? Pas trouvé !

 

En cherchant sur ce site, j'ai trouvé une routine VLX de Patrick (téléchargement payant : une fortune ;) )

"Convertir les attributs en texte" ça s'appelle.

Mais malheureusement ça ne marche pas.

Ok sur des attributs attachés à un block mais pas sur des attributs seuls.

 

Quelqu'un a-t-il une solution ?

 

Posté(e)

Avec les ExpressTools !

 

Commande "BURST", fonctionne avec des attributs seuls ;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

J'ai la fonction inverse :

 ;;; ----------------------------------------------------------------------
(defun c:TXT2ATT (/ PRIVE_SEL PRIVE_ENT)
 (setq PRIVE_SEL nil)
 (while (or (not PRIVE_SEL)
     (and (/= (cdr (assoc 0 (entget (car PRIVE_SEL)))) "TEXT")
	  (/= (cdr (assoc 0 (entget (car PRIVE_SEL)))) "MTEXT")
     )
 )
   (setq PRIVE_SEL (entsel "\nSelect Text to Change"))
 )
 (setq PRIVE_ENT (entget (car PRIVE_SEL)))
 (entmake (list '(0 . "ATTDEF")
	 '(100 . "AcDbEntity")
	 (assoc 410 PRIVE_ENT)
	 (assoc 8 PRIVE_ENT)
	 '(100 . "AcDbText")
	 (assoc 10 PRIVE_ENT)
	 (assoc 40 PRIVE_ENT)
	 (assoc 1 PRIVE_ENT)
	 (assoc 50 PRIVE_ENT)
	 '(41 . 1.0)
	 '(51 . 0.0)
	 (assoc 7 PRIVE_ENT)
	 '(71 . 1)
	 (if (= (cdr (assoc 0 PRIVE_ENT)) "MTEXT")
	   (cons 72 (cdr (assoc 71 PRIVE_ENT)))
	   (assoc 72 PRIVE_ENT))
	 (cons 11 (list 0.0 0.0 0.0))
	 (cons 210 (list 0.0 0.0 1.0))
	 '(100 . "AcDbAttributeDefinition")
	 '(3 . "Invite")
	 '(2 . "ETIQ")
	 '(70 . 0)
	 '(73 . 0)
	 '(74 . 0)
   )
 )
 (entdel (car PRIVE_SEL))
)

tu peux peut-être t'en servir pour toi....

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Désolé Bonuscad mais chez moi Burst ne marche qu'avec des attributs associés à un block.

 

Maximilien, je ne comprends deja pas l'original, alors faire l'inverse............. :mad2: ;)

Posté(e)

J'ai l'impression qu'il y a un malentendu sur la définition.

Burst fonction sur les attributs, mais je me demande si en fait on a pas affaire à des DEFINITIONS d'attribut. Chose tout à fait différente.

 

Pour éclairer ma lanterne ne pourrait pas tu faire en ligne de commande ce qui suit:

(entget (car (entsel)))

et pointer ce soit disant attribut que tu transformer.

 

Fait un copier-coller du retour, ca pourra expliquer des choses.

A+

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour Bonucad,

 

Voilà, c'est fait

 

Commande: (entget (car (entsel)))

 

Choix de l'objet: ((-1 . ) (0 . "ATTDEF") (330 .

d'entité: 7ed25d08>) (5 . "327") (100 . "AcDbEntity") (67 . 0) (410 . "Model")

(8 . "0") (100 . "AcDbText") (10 684411.0 296808.0 0.0) (40 . 0.6) (1 . "") (50

. 0.699734) (41 . 0.99) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0

0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (3 . "") (2 .

[surligneur] "X=684408.219") [/surligneur](70 . 0) (73 . 0) (74 . 0))

 

J'ai essayé de créer un blocks en insérant ces attributs pour pouvoir les transformer en txt,

mais ça ne marche pas : en fait l'attribut [surligneur] "X=684408.219""[/surligneur] est reconnu par "propriétés"

comme étant l'étiquette d'un attribut et non pas sa valeur.

 

 

 

Posté(e)

C'est bien ce que je pensais!

 

Bien que tu ne soit pas le responsable, c'est une drôle de façon de travailler, je met 0/20 au concepteur de ce genre de fichier. (intérêt nul, je te dis pas le "bordel" si tu veux faire un bloc et que tu veux prendre ce genre d'entité avec)

 

Pour te dépanner applique la routine suivante (faite exprés pour toi, car c'est un cas vraiment unique en son genre)

(defun c:defatt2txt ( / js ind ent dxf_ent val_txt)
(princ "\nChoix des définitions d'attribut à convertir en texte")
(setq js (ssget '((0 . "ATTDEF"))))
(cond
	(js
		(setq ind 0)
		(repeat (sslength js)
			(setq
				ent (ssname js ind)
				dxf_ent (entget ent)
				val_txt (cdr (assoc 2 dxf_ent))
			)
			(foreach n '(-1 0 330 100 5 1 100 3 2 70 73 74)
				(setq dxf_ent (vl-remove-if-not '(lambda (x) (/= (car x) n)) dxf_ent))
			)
			(setq
				dxf_ent (cons (cons 1 val_txt) dxf_ent)
				dxf_ent (cons '(0 . "TEXT") dxf_ent)
				ind (1+ ind)
			)
			(entdel ent)
			(entmake dxf_ent)
		)
	)
	(T
		(princ "\nAucune définition d'attribut sélectionnée")
	)
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

pile poil

 

Parfait : ça marche.

 

Je propose de changer ton pseudo par [surligneur] SUPERBONUSCAD[/surligneur] ;)

 

Encore merci

 

PS: ça vaut bien une petite donation de ma part

  • 13 ans après...
Posté(e)

Bonjour BonusCAD.

 

Treize ans après kallain, je rencontre exactement le même problème avec un objet définition d'attribut :

 

Choix de l'objet: ((-1 . <Nom d'entité: 2aa78c6b9c0>) (0 . "ATTDEF") (330 . <Nom d'entité: 2aa78c139f0>) (5 . "4C34") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Construction - Divers") (100 . "AcDbText") (10 1.69617e+06 5.23659e+06 0.0) (40 . 2.5) (1 . "LAVAL") (50 . 0.210788) (41 . 1.0) (51 . 0.0) (7 . "Etiquette") (71 . 0) (72 . 1) (11 1.69618e+06 5.23659e+06 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Direction à Gauche : ") (2 . "BOURGES") (70 . 0) (73 . 0) (74 . 2) (280 . 0))

 

 

 

Pourrais-tu m'expliquer ce que sont ces étranges objets "définition d'attribut"?

C'est moins la manière de le transformer en texte qu'un brin d'explication qui m'intéresse. J'aime bien comprendre.

 

Je te remercie.

Posté(e)

Bonjour BonusCAD.

 

Treize ans après kallain, je rencontre exactement le même problème avec un objet définition d'attribut :

 

Choix de l'objet: ((-1 . <Nom d'entité: 2aa78c6b9c0>) (0 . "ATTDEF") (330 . <Nom d'entité: 2aa78c139f0>) (5 . "4C34") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Construction - Divers") (100 . "AcDbText") (10 1.69617e+06 5.23659e+06 0.0) (40 . 2.5) (1 . "LAVAL") (50 . 0.210788) (41 . 1.0) (51 . 0.0) (7 . "Etiquette") (71 . 0) (72 . 1) (11 1.69618e+06 5.23659e+06 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Direction à Gauche : ") (2 . "BOURGES") (70 . 0) (73 . 0) (74 . 2) (280 . 0))

 

 

 

Pourrais-tu m'expliquer ce que sont ces étranges objets "définition d'attribut"?

C'est moins la manière de le transformer en texte qu'un brin d'explication qui m'intéresse. J'aime bien comprendre.

 

Je te remercie.

 

Déjà je te suggère de taper ATTDEF en ligne de commande et de faire F1 pour obtenir de l'aide.

Mais en condensé les entités ATTDEF sont destinées à être utilisée dans un bloc et non pas en objet indépendant (comme relaté dans ce fil) qui peut faire croire que c'est des ATTRIBUT (ils ne le deviennent que lorsqu'ils font partie de la définition d'un bloc, hors d'un bloc ils ont l'apparence du texte sans en être).

Une fois définies (pas de limitation de nombre) lors de la création d'un bloc, à l'insertion de ce bloc tu sera invité à renseigner ces champs par des valeurs qu'on appelle ATTRIBUT (suivant les propriétés de mode défini dans ATTDEF: invisible, constant, vérifié, prédéfini)

 

Tu peux ouvrir "Foor Plan Sample.dwg" (dans le dossier exemple d'autocad) où tu as des exemples de blocs simples et voir par exemple le bloc RMNUM (constitué d'une polyligne et 1 définition d'attribut :attdef)

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

  • 9 mois après...
  • 2 mois après...
Posté(e)

Salut à tous,

 

Je viens de récupérer un fichier où systématiquement les textes sont des définitions d'attribut seul!!!! J'enrage!!!!

 

Je viens d'essayer la routine de bonuscad, et j'ai un message d'erreur!

Commande: (LOAD "D:/07_RESOURCES_DAO_CAO_PAO/01_ACAD/01_LISP/defatt2txt.lsp") structure incorrecte de la liste en entrée

 

J'ai contrôlé mon copier/coller afin de détecter une éventuelle mise en page défectueuse.

 

Merci d'avance pour vos réponses

Posté(e)

Salut à tous,

 

Je viens de récupérer un fichier où systématiquement les textes sont des définitions d'attribut seul!!!! J'enrage!!!!

 

Je viens d'essayer la routine de bonuscad, et j'ai un message d'erreur!

Commande: (LOAD "D:/07_RESOURCES_DAO_CAO_PAO/01_ACAD/01_LISP/defatt2txt.lsp") structure incorrecte de la liste en entrée

 

J'ai contrôlé mon copier/coller afin de détecter une éventuelle mise en page défectueuse.

 

Merci d'avance pour vos réponses

 

Je ne vois pas trop d'où peut venir le problème... Peut être l'encodage du fichier lors de l'enregistrement dans ton éditeur, pour ma part j'encode en ANSI (ceci pour les caractères accentués), plus rarement en UTF-8 lors d'échange international.

Si tu copie-colle directement le code depuis le site en ligne de commande d'autocad, tu as aussi cette erreur?

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut bonuscad,

j'ai oublié de préciser que j'étais sur la version 2019 d'autocad. Peut-être que ceci explique cela!

je copie aussi en ANSI

je n'avais pas vu que c'était le forum de la version 2004!

Posté(e)

Sur ma version AutocadMap 2019, je le charge et l’exécute sans problème.Mais je viens de voir qu'il y a une petite nuance entre celui que je possède et celui posté en #7

Donc pas acquis de conscience je reposte le code... j'ai peut être fais une correction mineure sans corriger celui posté auparavant (je ne suis pas forcément toutes mes publications)

(defun c:defatt2txt ( / js ind ent dxf_ent val_txt)
 (princ "\nChoix des définitions d'attribut à convertir en texte")
 (setq js (ssget '((0 . "ATTDEF"))))
 (cond
(js
 	(setq ind 0)
 	(repeat (sslength js)
   	(setq
     	ent (ssname js ind)
     	dxf_ent (entget ent)
     	val_txt (cdr (assoc 2 dxf_ent))
   	)
   	(foreach n '(-1 0 280 330 100 5 1 100 3 2 70 73 74)
     	(setq dxf_ent (vl-remove-if-not '(lambda (x) (/= (car x) n)) dxf_ent))
   	)
   	(setq
     	dxf_ent (cons (cons 1 val_txt) dxf_ent)
     	dxf_ent (cons '(0 . "TEXT") dxf_ent)
     	ind (1+ ind)
   	)
   	(entdel ent)
   	(entmake dxf_ent)
 	)
)
(T
 	(princ "\nAucune définition d'attribut sélectionnée")
)
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

  • 2 mois après...
Posté(e)

bonjour à BonusCad

 

la routine proposée en début de tuto fonctionne parfaitement même sur la version 2020.

par contre le problème que je rencontre est que la valeur de l'attribut n'est pas celle de étiquette,du coup je me retrouve bien avec des textes, mais pas avec la valeurs souhaitée

en faisant la commande : (entget (car (entsel))), j’obtiens ça :

 

Commande: (entget (car (entsel)))

Choix de l'objet: ((-1 . <Nom d'entité: 1d6412769b0>) (0 . "ATTDEF") (330 . <Nom d'entité: 1d61850c1f0>) (5 . "4E8B3") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "CA_6INF-COTE_050") (100 . "AcDbText") (10 29.5232 542.732 8.83524e-29) (40 . 0.1) (1 . "00.00") (50 . 4.16432) (41 . 1.0) (51 . 0.314159) (7 . "Simplex") (71 . 0) (72 . 1) (11 29.4239 542.57 8.83524e-29) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "altimetrie") (2 . "61.37") (70 . 0) (73 . 0) (74 . 0) (280 . 1))

 

je voulais donc savoir si il est possible de modifier la routine proposé afin d'extraire les chiffres dans l'étiquettes de l'attribut et non ceux du "champ" de la valeur

j’espère que oui car j'en ai une centaine dans le plan...

sinon se retour à l'envoyeur

 

en espérant avoir été assez clair dans ma demande.

merci pour ton aide

Philippe

Posté(e)

Bonjour,

 

As tu essayé la routine corrigé et proposé en #15.

 

la routine proposée en début de tuto fonctionne parfaitement même sur la version 2020

A quoi fais tu référence, à BURST? (c'est un outil des expresstools)

 

Car si je l'essaye sur ton exemple le lisp posté en #15, j'obtiens bien un texte avec en valeur le texte 61.37 , donc bien la valeur de l'étiquette ?!?!

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é