Тема: .NET - Удаление форматирования текста (2008-2009)
файл должен находится вот здесь: http://dwg.ru/dnl/4404
В .NET API 2008-09 у класса MText есть строковое свойство Text, которое не содержит форматирующих символов.
using System; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; namespace MtextUnformat { public class Program { [CommandMethod("MTXTFORMATREMOVE",CommandFlags.UsePickSet | CommandFlags.Redraw |CommandFlags.Modal)] public static void RemoveFormatting() { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; PromptSelectionResult psr = ed.SelectImplied(); if (psr.Status != PromptStatus.OK) { PromptSelectionOptions pso = new PromptSelectionOptions(); pso.MessageForAdding = "выделите многострочный текст"; TypedValue[] values = { new TypedValue((int)DxfCode.Start, "MTEXT") }; SelectionFilter sfilter = new SelectionFilter(values); psr = ed.GetSelection(pso,sfilter); } if (psr.Status == PromptStatus.OK) { Transaction trans = db.TransactionManager.StartTransaction(); try { BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead)); BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); SelectionSet SS = psr.Value; foreach (ObjectId id in SS.GetObjectIds()) { MText mtxt = (MText)db.TransactionManager.GetObject(id, OpenMode.ForWrite, false, true); mtxt.Contents = mtxt.Text; //Вот и весь алгоритм удаления форматирования в ObjectArx.NET API 2008-2009! } trans.Commit(); ed.Regen(); } catch (System.Exception ex) { ed.WriteMessage("Error: " + ex.Message); } finally { trans.Dispose(); } } } } }
Привожу пример на IronPython (для запуска нужен PyAcad.NET , команда pyfile)
import clr import System from System.Collections.Generic import List from Autodesk.AutoCAD.ApplicationServices import * from Autodesk.AutoCAD.DatabaseServices import * from Autodesk.AutoCAD.EditorInput import * from Autodesk.AutoCAD.Runtime import * doc = Application.DocumentManager.MdiActiveDocument ed = doc.Editor db = doc.Database def MTextUnformat(): data = {} values = List[TypedValue]() values.Add(TypedValue(int(DxfCode.Start), "MTEXT")) sfilter = SelectionFilter(values.ToArray()) opts = PromptSelectionOptions() opts.MessageForAdding = "выберите многострочный текст" res = ed.GetSelection(opts, sfilter) if not res.Status == PromptStatus.OK: return SS = res.Value idarray = SS.GetObjectIds() tr = db.TransactionManager.StartTransaction() try: docLock = doc.LockDocument() for id in idarray: mtxt = tr.GetObject(id,OpenMode.ForWrite,True) mtxt.Contents = mtxt.Text tr.Commit() finally: tr.Dispose() docLock.Dispose() try: MTextUnformat() except Exception,detail: print(detail)