Aller au contenu

Convertir attribut en texte


kallain

Messages recommandés

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 ?

 

Lien vers le commentaire
Partager sur d’autres sites

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

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

PlaquetteCommerciale.pdf

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 13 ans après...

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 9 mois après...
  • 2 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

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é