Aller au contenu

Supprimer les formatages des mtextes


(gile)

Messages recommandés

Salut,

 

Une commande : STRIPMT qui supprime tous les formatages dans les textes multilignes sélectionnés.

Une fonction LISP : gc-GetStrippedMtextString qui requiert un texte multiligne (ENAME) comme argument et retourne le contenu du texte sans formatage.

 

StripMtext.zip

 

Pour ceux que ça intéresse, le code :

using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;

namespace StripMtextSample
{
   public class StripMtext
   {
       private StringBuilder m_sb = null;

       private string GetStrippedMtextContents(MText mt)
       {
           m_sb = new StringBuilder();
           mt.ExplodeFragments(new MTextFragmentCallback(FragmentCallback));
           return m_sb.ToString();
       }

       private MTextFragmentCallbackStatus FragmentCallback(MTextFragment fragment, object obj)
       {
           m_sb.Append(fragment.Text);
           return MTextFragmentCallbackStatus.Continue;
       }

       [CommandMethod("STRIPMT", CommandFlags.Modal | CommandFlags.UsePickSet)]
       public void StripSelSet()
       {
           Document doc = AcAp.DocumentManager.MdiActiveDocument;
           Database db = doc.Database;
           Editor ed = doc.Editor;
           SelectionFilter filter = new SelectionFilter(new TypedValue[] { new TypedValue(0, "MTEXT") });
           ed.WriteMessage("\nSélectionnez les mtextes (ou valider pour 'tous').");
           PromptSelectionResult psr = ed.GetSelection(filter);
           if (psr.Status == PromptStatus.Error)
               psr = ed.SelectAll(filter);
           if (psr.Status != PromptStatus.OK)
               return;
           try
           {
               using (Transaction tr = db.TransactionManager.StartTransaction())
               {
                   foreach (ObjectId id in psr.Value.GetObjectIds())
                   {
                       MText mt = (MText)tr.GetObject(id, OpenMode.ForWrite);
                       mt.Contents = GetStrippedMtextContents(mt);
                   }
                   tr.Commit();
               }
           }
           catch (System.Exception e)
           {
               ed.WriteMessage(string.Format("\nErreur: {0}\n", e.Message));
           }
       }

       [LispFunction("gc-GetStrippedMtextString")]
       public string GetStrippedMtextString(ResultBuffer resbuf)
       {
           try
           {
               if (resbuf == null)
                   throw new LispException("to few arguments");
               TypedValue[] arg = resbuf.AsArray();
               if (arg.Length > 1)
                   throw new LispException("to many arguments");
               if (arg[0].TypeCode != (short)LispDataType.ObjectId)
                   throw new LispException(string.Format("incorrect argument type: lentityp: {0}", arg[0].Value));
               Database db = HostApplicationServices.WorkingDatabase;
               using (Transaction tr = db.TransactionManager.StartTransaction())
               {
                   MText mt = tr.GetObject(((ObjectId)arg[0].Value), OpenMode.ForRead) as MText;
                   if (mt == null)
                       throw new LispException("incorrect argument type: not a mtext");
                   return GetStrippedMtextContents(mt);
               }
           }
           catch (LispException e)
           {
               AcAp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nErreur: {0}\n", e.Message);
               return null;
           }
       }
   }

   class LispException : System.Exception
   {
       public LispException(string message)
           : base(message)
       {
       }
   }
}

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

Lien vers le commentaire
Partager sur d’autres sites

Il s'agit de tous les formats (police, couleur, gras, , souligné, etc) ajoutés à l'aide de l'éditeur de texte.

 

Par exemple, la chaîne "texte multiligne arial rouge souligné" si on force le mot 'arial' en police arial, 'rouge' en couleur rouge et qu'on souligne 'souligné', la châine devient :

texte multiligne {\\fArial|b0|i0|c0|p34;arial} {\\C1;rouge} {\\Lsouligné}

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

Lien vers le commentaire
Partager sur d’autres sites

 

Je suis très intéressé par ton code.

 

J'ai essayé de m'inscrire sur acadlabs.com, je suis tombé sur un joli

[phpBB Debug] PHP Notice: in file /includes/captcha/captcha_factory.php on line 36: include(./includes/captcha/plugins/_plugin.php): failed to open stream: No such file or directory
[phpBB Debug] PHP Notice: in file /includes/captcha/captcha_factory.php on line 36: include(): Failed opening './includes/captcha/plugins/_plugin.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear')
[phpBB Debug] PHP Notice: in file /includes/captcha/captcha_factory.php on line 38: call_user_func() expects parameter 1 to be a valid callback, class '' not found

 

après avoir cliqué sur "j'accepte les conditions"

 

 

Quid ??? ;-)

Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Le code suivant ne suffit-il pas ?

 

mt.Contents = mt.Text;

 

D'après la documentation de la propriété MText.Text :

 

Accesses the MText contents with formatting removed.

Maxence DELANNOY

Développement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAO

WIIP - http://wiip.fr

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é