(gile) Posté(e) le 10 octobre 2010 Posté(e) le 10 octobre 2010 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
lili2006 Posté(e) le 10 octobre 2010 Posté(e) le 10 octobre 2010 Bonjour à toutes et tous, Salut Gilles, N'utilisant pas les mtextes, peux-tu développer cette partie STP ? tous les formatages Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 10 octobre 2010 Auteur Posté(e) le 10 octobre 2010 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
lili2006 Posté(e) le 10 octobre 2010 Posté(e) le 10 octobre 2010 Re, Vu ! http://img.ahst.fr/data/images/formatagem.jpg Merci Gilles, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Carboleum Posté(e) le 10 octobre 2010 Posté(e) le 10 octobre 2010 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
(gile) Posté(e) le 10 octobre 2010 Auteur Posté(e) le 10 octobre 2010 J'ai mis le code dans le premier message. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 11 octobre 2010 Posté(e) le 11 octobre 2010 Hello Gilles J'ai un nouveau surnom pour toi : MText Killer ! :) Le Decapode Autodesk Expert Elite Team
Maxence DELANNOY Posté(e) le 8 janvier 2013 Posté(e) le 8 janvier 2013 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 DELANNOYDéveloppement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAOWIIP - http://wiip.fr
(gile) Posté(e) le 8 janvier 2013 Auteur Posté(e) le 8 janvier 2013 Le code suivant ne suffit-il pas ? mt.Contents = mt.Text; D'après la documentation de la propriété MText.Text : Oui depuis AutoCAD 2010. Le code que je donnais voulait être compatible avec AutoCAD 2007. 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