Aller au contenu

supprimer le formatage des Mtext


jacobs33

Messages recommandés

Salut,

 

 

Je ne suis pas sûr d'avoir compris la question, mais s'il s'agit de remettre un (ou des) mtext dans le style de texte courant :

 

 

(defun c:mtxt2cstyle (/ ss n txt e_lst)
 (while (not (setq ss (ssget '((0 . "MTEXT"))))))
   (repeat (setq n (sslength ss))
     (setq txt   (ssname ss (setq n (1- n)))
           e_lst (entget txt)
           e_lst (subst (cons 7 (getvar "TEXTSTYLE"))
                        (assoc 7 e_lst)
                        e_lst
                 )
     )
     (entmod e_lst)
   )
 (princ)
) 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

S'il s'agit aussi de supprimer les propriétés qui auraient pu être forcées (couleur, fonte, caractères gras, italique ou sous-ligné) :

 

 

(defun c:mtxt2Std (/ ss n txt e_lst str)
 (while (not (setq ss (ssget '((0 . "MTEXT"))))))
 (repeat (setq n (sslength ss))
   (setq txt	(ssname ss (setq n (1- n)))
  e_lst	(entget txt)
  str	(cdr (assoc 1 e_lst))
   )
   (if	(= "{" (substr str 1 1))
     (progn
(while (and (setq start (vl-string-search "\\" str))
	    (setq end (vl-string-search ";" str start))
       )
  (setq	str (vl-string-subst
	      ""
	      (substr str (1+ start) (- end start -1))
	      str
	    )
  )
)
(if (= "\\L" (substr str 2 2))
  (setq	str (vl-string-subst
	      ""
	      (substr str 2 2)
	      str
	    )
  )
)
(setq str   (vl-string-right-trim
	      "}"
	      (vl-string-left-trim "{" str)
	    )
      e_lst (subst (cons 7 (getvar "TEXTSTYLE"))
		   (assoc 7 e_lst)
		   (subst (cons 1 str) (assoc 1 e_lst) e_lst)
	    )
)
(entmod e_lst)
     )
   )
 )
 (princ)
) 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

 

Voilà une version un peu plus aboutie, mais pas testée en profondeur.

 

 

Elle devrait fonctionner aussi pour les textes de plus de 250 caractères et pour les hauteurs de texte forcées.

 

 

(defun c:c_txt (/ ss n txt e_lst str start end lst)
 (while (not (setq ss (ssget '((0 . "MTEXT"))))))
 (repeat (setq n (sslength ss))
   (setq txt	(ssname ss (setq n (1- n)))
  e_lst	(entget txt)
  str	(apply
	  'strcat
	  (mapcar
	    'cdr
	    (append
	      (vl-remove-if-not '(lambda (x) (= (car x) 3)) e_lst)
	      (list (assoc 1 e_lst))
	    )
	  )
	)
   )
   (while (setq start (vl-string-search "{\\" str))
     (setq
str (vl-string-subst
      ""
      "{"
      (vl-string-subst "" "}" str start)
      start
    )
     )
   )
   (setq start 0)
   (while (setq start (vl-string-search "\\" str start))
     (cond
((= "\\P" (substr str (1+ start) 2))
 (setq start (1+ start)
       end   (1+ start)
 )
)
((= "\\L" (substr str (1+ start) 2))
 (setq end (+ (vl-string-search "L" str start) 2))
)
((= "\\l" (substr str (1+ start) 2))
 (setq end (+ (vl-string-search "l" str start) 2))
)
(T (setq end (+ (vl-string-search ";" str start) 2)))
     )
     (setq str	(vl-string-subst
	  ""
	  (substr str (1+ start) (- end start 1))
	  str
	)
     )
   )
   (setq lst nil)
   (if	(< 250 (strlen str))
     (progn
(while (< 249 (strlen str))
  (setq	lst (cons (cons 3 (substr str 1 250)) lst)
	str (substr str 251)
  )
)
(setq lst (reverse (cons (cons 1 str) lst)))
     )
     (setq lst (cons (cons 1 str) lst))
   )
   (setq
     e_lst (append (vl-remove-if
	      '(lambda (x) (or (= (car x) 3) (= (car x) 1)))
	      e_lst
	    )
	    lst
    )
   )
   (entmod e_lst)
 )
 (princ)
)

[Edité le 4/9/2006 par (gile)]

 

[Edité le 4/9/2006 par (gile)]

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'ai testé le code la semaine derniere mais etant charette je n'ai pas pus te repondre de suite.

Ne voulant pas etre un simple consommateur j'ai essayé de résoudre le petit disfonctionnement de la routine mais sans succé hélas.

Je pense que c'est un probléme de contatenation de la chaine ou une variable (!str)

a remettre a "0" ou "nil"

 

resultat du test:

 

1 2 3 4 renvoi 4321 321 21 1

ou en fonction de la selection

1 2 3 4 renvoi 1 21 321 4321

 

PS : je suis un lispeun d'avant les commandes "VL-...."

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je n'arrive pas à reproduire les erreurs que tu décris, mais j'ai trouvé un autre caractère à supprimer (je modifie le code au dessus)

 

PS : je suis un lispeun d'avant les commandes "VL-...."

 

les fonctions vl-string ... sont fort utiles pour la manipultion des chaines, j'en avait fait des équivalence en LISP "d'avant" ici

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

J'ai cherché cet outil pendant des semaines... Merci (gile)

 

[Edité le 28/10/2008 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour,

 

Je sais que le sujet date, mais je suis novice en utilisation de lisp...

 

Ce lisp me sert beaucoup, et je voulais savoir si on pouvais appliquer cette commande à tout les textmults présents dans le fichier, un peu comme le lisp edit_bloc qui va chercher tout les blocs du fichier et pas seulement ceux dans les vues actives...

Actuellement je fais une sélection rapide des textmults, mais ça agit que dans la vue active... le problème c'est que je travaille sur des fichiers qui ont une trentaine de présentation différentes...

 

Je sais pas si je me suis bien exprimé... :P

 

Voilà donc si quelqu'un a une idée... Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...
  • 5 ans après...

S'il s'agit aussi de supprimer les propriétés qui auraient pu être forcées (couleur, fonte, caractères gras, italique ou sous-ligné) :

 

 

(defun c:mtxt2Std (/ ss n txt e_lst str)
 (while (not (setq ss (ssget '((0 . "MTEXT"))))))
 (repeat (setq n (sslength ss))
   (setq txt	(ssname ss (setq n (1- n)))
  e_lst	(entget txt)
  str	(cdr (assoc 1 e_lst))
   )
   (if	(= "{" (substr str 1 1))
     (progn
(while (and (setq start (vl-string-search "\\" str))
	    (setq end (vl-string-search ";" str start))
       )
  (setq	str (vl-string-subst
	      ""
	      (substr str (1+ start) (- end start -1))
	      str
	    )
  )
)
(if (= "\\L" (substr str 2 2))
  (setq	str (vl-string-subst
	      ""
	      (substr str 2 2)
	      str
	    )
  )
)
(setq str   (vl-string-right-trim
	      "}"
	      (vl-string-left-trim "{" str)
	    )
      e_lst (subst (cons 7 (getvar "TEXTSTYLE"))
		   (assoc 7 e_lst)
		   (subst (cons 1 str) (assoc 1 e_lst) e_lst)
	    )
)
(entmod e_lst)
     )
   )
 )
 (princ)
) 

 

Bonjour, je relance ce vieux sujet qui m'intéresse énormément...

Le lisp cité ci-dessus fonctionne. Cependant, serait-il possible que quelqu'un me le corrige afin qu'il ne modifie QUE la couleur forcée ? Passer d'une couleur X à couleur DUCALQUE...

Sans modifier le style de texte etc.

Si quelqu'un peut me faire ça j'en serait extrêmement reconnaissant! :)

Merci d'avance!

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é