Aller au contenu

texte to att


speedy

Messages recommandés

Bonsoir

j'ai récupéré un fichier assainissement avec tous les blocs au points d'insertion 0,0, j'ai utiliser Rins.lsp de Patrick35, j'arrive à changer le point d'insertion un par un mais mon problème je n'ai pas d'attribut à ces blocs, j'aimerais les extraire...

 

y'aurait il un moyen de convertir les texte qui sont dans ces blocs en attribut avec ses infos, j'ai quatre étiquettes, Num, tampon, Fe et prof.

genre text-to-tag

 

merci de votre aide

 

@+

Michel a

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous

j'utilise ce lisp pour transformer mes texte en attribut et ensuite je dois créer un bloc un par un, avec des noms différents....

 

;;;transformer les textes en attribut

(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))

)

 

chaque bloc a un nom différent, j'aimerais pouvoir leur donner :

1- un attribut

2- un nom bloc unique pour tous

voici mon premier souci....

 

@+

 

Michel a

 

j'aimerais au lieu que j'explose mes blocs avec texte c'est de

Lien vers le commentaire
Partager sur d’autres sites

Coucou, je ne comprend pas bien ce que tu veux???:casstet:

 

Tu veux faire quoi avec quoi?

 

Ta routine fonctionne?? Elle créé des attributs et toi tu veux créer des blocs avec ces attributs et leur donner un nom....?

 

Quel genre de nom.. Bloc001, bloc002.....

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

çà a l'air compliqué, en réalité j'ai en plan tout le renseignement du réseau en texte (bloc sans attribut), et chacun avec un nom de bloc différent ( ce sont des blocs incrémentés)....

 

ce que j'aimerais c'est de pouvoir tout exporter dans un tableau excel ensuite ce n'est plus un souci pour les réinsérer proprement.....

 

je suis obligé de saisir tous les textes un par un dans mon fichier excel..

 

Merci

 

Michel a

Lien vers le commentaire
Partager sur d’autres sites

Coucou, ton lien ne fonctionne pas (c'est ptet moi qui ne va pas mais bon)

 

Je peux essayer de te faire une routine qui copie dans un fichier texte tous les textes de ton plan.... Tu n'aurai juste qu'à faire des copier / coller.....

 

Celà t'irai??? J'ai pas encore un grand niveau en lisp mais ca je devrait savoir le faire...

 

As you wish..

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je bute sur quelques truc pour transformer les textes dans les blocs en attributs, en attendant, si ça te suffit, un LISP qui extrait tout les textes des blocs dans un fichier Excel.

 

(defun c:exttxt	(/ ss path file name)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (if (ssget "_X" '((0 . "INSERT")))
   (if	(setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1))
     (progn
(setq file (open path "w"))
(vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*))
  (if (numberp (read (setq name (vla-get-Name b))))
    (progn
      (setq row "")
      (vlax-for	e (vla-item (vla-get-Blocks *acdoc*) name)
	(if (= (vla-get-ObjectName e) "AcDbText")
	  (setq row (strcat row (vla-get-TextString e) "\t"))
	)
      )
      (write-line row file)
    )
  )
)
(close file)
     )
   )
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

 

Hello Gilles

 

Sympa ce petit programme ! :)

 

SVP serait il possible d'avoir une version qui utilise la sélection "classique" d'AutoCAD

ainsi on peut traiter TOUT le dessin ou une partie du DWG !

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Voilà, pour transformer les textes en attributs (visibles, prédéfinis)

 

Version corrigée

 

(defun c:test (/ att)
 (vl-load-com)
 (vlax-for b (vla-get-Blocks
	(vla-get-ActiveDocument
	  (vlax-get-acad-object)
	)
      )
   (if	(not (wcmatch (setq name (vla-get-name b)) "`**"))
     (progn
(vlax-for e b
  (if (= (vla-get-ObjectName e) "AcDbText")
    (progn
      (setq att
	     (vla-addAttribute
	       b
	       (vla-get-Height e)
	       acAttributeModePreset
	       (cond
		 ((wcmatch (vla-get-TextString e) "R*") "Num ?")
		 ((wcmatch (vla-get-TextString e) "T :*") "Tampon ?")
		 ((wcmatch (vla-get-TextString e) "Fe :*") "Fe ?")
		 ((wcmatch (vla-get-TextString e) "Prof :*") "Prof ?")
	       )
	       (vla-get-InsertionPoint e)
	       (cond
		 ((wcmatch (vla-get-TextString e) "R*") "NUM")
		 ((wcmatch (vla-get-TextString e) "T :*") "TAMPON")
		 ((wcmatch (vla-get-TextString e) "Fe :*") "FE")
		 ((wcmatch (vla-get-TextString e) "Prof :*") "PROF")
	       )
	       [surligneur](vla-get-TextString e)[/surligneur]
	     )
      )
      (vla-put-Color att 1)
      (vla-delete e)
    )
  )
)
(vl-cmdf "_attsync" "_name" (vla-get-name b))
     )
   )
 )
 (princ)
)

 

Si tu veux supprimer les préfixes des textes("T :", "Fe :", "Prof :") dans les attributs, remplace :

[surligneur](vla-get-TextString e)[/surligneur]

par

(vl-string-left-trim "TFeProf :" (vla-get-TextString e))[Edité le 2/4/2008 par (gile)]

 

[Edité le 2/4/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Salut lecrabe,

 

Voilà une version qui fait ce que tu demandes.

J'ai aussi ajouté une première colonne avec le nom des blocs

 

(defun c:exttxt	(/ ss path file name)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (princ "\nSélectionnez les blocs ou [b]")
 (if (or (ssget '((0 . "INSERT"))) (ssget "_X" '((0 . "INSERT"))))
   (if	(setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1))
     (progn
(setq file (open path "w"))
(vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*))
  (setq name (vla-get-Name b))
  (setq row "")
  (vlax-for e (vla-item (vla-get-Blocks *acdoc*) name)
    (if	(= (vla-get-ObjectName e) "AcDbText")
      (setq row	(strcat	row
			"\t"
			(vla-get-TextString e)
		)
      )
    )
  )
  (if (/= row "")
  (write-line (strcat name row) file)
    )
)
(close file)
     )
   )
 )
 (princ)
) 

[Edité le 2/4/2008 par (gile)]

 

[Edité le 2/4/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Une version plus subtile, le préfixe est conservé comme texte, la valeur seule est transformée en attribut.

 

Version corrigée

 

(defun c:test (/ doc ins txt)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-StartUndoMark doc)
 (vlax-for b (vla-get-Blocks doc)
   (if	(not (wcmatch (setq name (vla-get-name b)) "`**"))
     (progn
(vlax-for e b
  (if (= (vla-get-ObjectName e) "AcDbText")
    (progn
      (setq ins	(vlax-get e 'InsertionPoint)
	    txt	(vla-get-TextString e)
      )
      (cond
	((wcmatch txt "R*")
	 (vla-put-Color
	   (vla-addAttribute
	     b
	     (vla-get-Height e)
	     acAttributeModePreset
	     "Num ?"
	     (vlax-3d-point ins)
	     "NUM"
	     (vl-string-left-trim "TFeProf :" txt)
	   )
	   1
	 )
	 (vla-delete e)
	)
	((wcmatch txt "T :*")
	 (vla-put-Color
	   (vla-addAttribute
	     b
	     (vla-get-Height e)
	     acAttributeModePreset
	     "Tampon ?"
	     (vlax-3d-point
	       (list (+ (car ins) 0.9) (cadr ins) (caddr ins))
	     )
	     "TAMPON"
	     (vl-string-left-trim "TFeProf :" txt)
	   )
	   1
	 )
	 (vla-put-TextString e "T :")
	)
	((wcmatch txt "Fe :*")
	 (vla-put-Color
	   (vla-addAttribute
	     b
	     (vla-get-Height e)
	     acAttributeModePreset
	     "Fe ?"
	     (vlax-3d-point
	       (list (+ (car ins) 1.3) (cadr ins) (caddr ins))
	     )
	     "FE"
	     (vl-string-left-trim "TFeProf :" txt)
	   )
	   1
	 )
	 (vla-put-TextString e "Fe :")
	)
	((wcmatch txt "Prof :*")
	 (vla-put-Color
	   (vla-addAttribute
	     b
	     (vla-get-Height e)
	     acAttributeModePreset
	     "Prof ?"
	     (vlax-3d-point
	       (list (+ (car ins) 1.75) (cadr ins) (caddr ins))
	     )
	     "PROF"
	     (vl-string-left-trim "TFeProf :" txt)
	   )
	   1
	 )
	 (vla-put-TextString e "Prof :")
	)
      )
    )
  )
)
(setvar "CMDECHO" 0)
(vl-cmdf "_attsync" "_name" (vla-get-name b))
(setvar "CMDECHO" 1)
     )
   )
 )
 (vla-EndUndoMark doc)
 (princ)
) 

[Edité le 2/4/2008 par (gile)]

 

[Edité le 2/4/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

merci pour la nouvelle version, mais j'ai un bugg, concernant les noms des blocs, il ne reconnait que des blocs ayant leur nom type numérique (0 à x) si j'ai des noms de blocs commençant par une lettre (m100) ça ne marche plus............

 

mon fichier exemple était déjà tout nettoyé mais les nouveau fichier les noms des blocs (avec des noms à rallonge....)....

 

par contre comment faire de même pour les textes (diametre)....y aurait il un moyen des les exporter avec leur x,y,z...

 

merci énormément de ton aide.

 

@+

 

Michel a

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

j'ai un bugg, concernant les noms des blocs, il ne reconnait que des blocs ayant leur nom type numérique (0 à x) si j'ai des noms de blocs commençant par une lettre (m100) ça ne marche plus............

 

Ce n'est pas un bug, j'ai fait ce LISP à partir du bout de fichier que tu avais posté, et, je filtrais volontairement les blocs dont les noms sont des nombres.

Je modifie les 2 versions pour traiter tous les blocs du dessin (si d'autres blocs contiennent aussi du texte et que le texte commence par les mêmes lettres, il seront aussi traités).

 

par contre comment faire de même pour les textes (diametre)....y aurait il un moyen des les exporter avec leur x,y,z...

 

Il y a certainement un moyen, mais pour faire quelque chose de cohérent, il faudrait que j'ai les fichiers pour pouvoir déterminer les critères permettant une automatisation et ça commencerait à ressembler à "je ferais le boulot à ta place".

 

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

Lien vers le commentaire
Partager sur d’autres sites

Faut croire que je suis dans un bon jour...

 

... et que tu as de la chance.

 

(defun c:extdiam (/ ss path file name)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (if (ssget "_X" '((0 . "TEXT") (1 . "Ø*")))
   (if	(setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1))
     (progn
(setq file (open path "w"))
(vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
  (setq ins (vlax-get o 'InsertionPoint))
  (write-line
    (strcat
      (rtos (car ins))
      "\t"
      (rtos (cadr ins))
      "\t"
      (rtos (caddr ins))
      "\t"
      (vl-string-translate " " "\t" (vla-get-TextString o))
    )
    file
  )
)
(close file)
     )
   )
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

speedy, ce plan à été habillé après calculs du module VRD de Covadis. Il suffit de demander à celui qui t'as envoyé le plan, le quantitatif généré par covadis. C'est un clic et tu récupères en fichier Excel l'ensemble des métrés ainsi que les quantités "réelles" à commander ou unitaires.

 

Le père Noël n'a jamais été aussi généreux....

 

Faux ! C'est tous les jours Noêl avec (gile),...

 

J'm'en vais tester ça moi,...

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous

Etrange j'avais donné une réponse la semaine dernière !!! elle ny est !!! , bon c'était juste pour dire un grand merci à tous et plus fortement à Gile ou au pere noel (un peu en avance...)....

c'est une routine que je cherchais depuis longtemps...et elle fonctionne trés bien..

 

bonne continuation à tous

 

Michel a

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é