jacobs33 Posté(e) le 24 août 2006 Posté(e) le 24 août 2006 peut t'on developper un lisp qui supprime style d'un texte multiple qui a etait forcé dans la boite de dialogue MTEXT aprés selection de celui ci
(gile) Posté(e) le 25 août 2006 Posté(e) le 25 août 2006 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 - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 25 août 2006 Posté(e) le 25 août 2006 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 - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 29 août 2006 Auteur Posté(e) le 29 août 2006 Salut Gile Je rentre de RTT et bonne nouvelle Gile ma répondu. La deuxième réponse était la bonne.J’ai donc testé le lisp qui fonctionne bien sauf ci les premiers caractères ne son pas forcés.Peut arranger ça merci d’avance.
(gile) Posté(e) le 29 août 2006 Posté(e) le 29 août 2006 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 - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 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 1ou en fonction de la selection1 2 3 4 renvoi 1 21 321 4321 PS : je suis un lispeun d'avant les commandes "VL-...."
(gile) Posté(e) le 4 septembre 2006 Posté(e) le 4 septembre 2006 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 - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Bonsoir gile le code fondtionne bien pour une selection.mais pour la selection de plusieur textes(capture ou fenetre) il ya probléme.
(gile) Posté(e) le 4 septembre 2006 Posté(e) le 4 septembre 2006 Re, Je pense avoir trouvé, il fallait effectivement remettre une variable à nil (lst) entre chaque entité traitée. Merci pour les tests ;) Le LISP est re-modifié. [Edité le 4/9/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jacobs33 Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Super réactif. Tous fonctionne à merveille Merci Gile.
sechanbask Posté(e) le 14 mai 2007 Posté(e) le 14 mai 2007 J'ai cherché cet outil pendant des semaines... Merci (gile) [Edité le 28/10/2008 par sechanbask] ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
pacifiana Posté(e) le 25 juin 2008 Posté(e) le 25 juin 2008 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
jacobs33 Posté(e) le 27 juin 2008 Auteur Posté(e) le 27 juin 2008 Passe en espace objet créer une sauvegarde de l'état des t'es calques dégèle, déverrouille, active t'es calques et lance le lisp puis restaure l'état de t'es calques.
x_all Posté(e) le 27 juin 2008 Posté(e) le 27 juin 2008 je sais plus ou j'avais récupérer ça ça marche plutôt bien... quelques trucs sur autocad
Bruno_T Posté(e) le 22 octobre 2008 Posté(e) le 22 octobre 2008 bonjour, en complément a la solution de (gile) , il y a aussi le célèbre stripmtext (public domain) que j'utilise depuis des années : ce lisp permet de faire un nettoyage sélectif des mtexts http://cadabyss.wordpress.com/2007/04/01/stripmtext-v309/ Bruno Toniutti
Moumou Posté(e) le 2 avril 2014 Posté(e) le 2 avril 2014 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!
(gile) Posté(e) le 2 avril 2014 Posté(e) le 2 avril 2014 Salut, Regarde ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant