Тема: Удалить форматирование символов
Подскажите пож-та, как удалить форматирование символов МТекста в автокаде c помощью VB.net???
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → .NET → Удалить форматирование символов
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите пож-та, как удалить форматирование символов МТекста в автокаде c помощью VB.net???
Посмотри здесь
http://through-the-interface.typepad.co … m-net.html
и еще здесь
http://www.theswamp.org/index.php?topic … #msg404003
и смотри комментарий ниже
Удачи,
:)
надо разбираться с c#, а это туго, буду пробывать...
надо разбираться с c#, а это туго, буду пробывать...
Есть онлайн конвертеры VB.NET <-> C#. Например: http://www.developerfusion.com/tools/co … arp-to-vb/
Я бы посоветовал установить на компьютере
SharpDevelop 4.2 (он бесплатный ищи в Гугле)
постоянно пользуюсь трансляцией VB.NET <--> C#
там есть встроенная опция для этого в меню Tools
Такой код работает в 2010-м автокаде
(тестировал немного)
public static ErrorStatus fixoGetEntity(Transaction tr, Editor ed, RXClass rx, string msg, out ObjectId id) { ErrorStatus es; Entity ent; id = ObjectId.Null; PromptEntityOptions peo = new PromptEntityOptions(msg); peo.SetRejectMessage("\nYou're missing, try again >>"); peo.AddAllowedClass(typeof(Entity), false); PromptEntityResult res; res = ed.GetEntity(peo); if (res.Status != PromptStatus.OK) es = ErrorStatus.PointNotOnEntity; id = res.ObjectId; if (id == ObjectId.Null) es = ErrorStatus.NullObjectId; ent = tr.GetObject(id, OpenMode.ForRead, false) as Entity; if (ent.GetRXClass() != rx) { ed.WriteMessage("\n{0}Must be a \"{0}\" type of only!",rx.DxfName); es = ErrorStatus.NotThatKindOfClass; } if (ent == null) es = ErrorStatus.NotAnEntity; else es = ErrorStatus.OK; return es; } [CommandMethod("StripMtextFormat", "SUF", CommandFlags.UsePickSet | CommandFlags.Redraw)] public void StripMtextMethod() { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; ObjectId id = ObjectId.Null; using (Transaction tr = db.TransactionManager.StartTransaction()) { if (fixoGetEntity(tr, ed, RXClass.GetClass(typeof(MText)), "\nSelect MTEXT to strip format", out id) == ErrorStatus.OK) { BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); // get entity by direct cast Entity ent = (Entity)tr.GetObject(id, OpenMode.ForRead); if (id.ObjectClass.DxfName == "MTEXT") { MText mtx = ent as MText; mtx.UpgradeOpen(); string newtxt = mtx.Text; ed.WriteMessage("\nText: {0}\n", newtxt); mtx.Contents = newtxt; mtx.RecordGraphicsModified(true); } tr.Commit(); } } }
Не, не получается! Но всё равно большое спасибо!
Не, не получается! Но всё равно большое спасибо!
Что не получается?
Я без проблем нахожу многострочный текст в автокаде, далее
MText mtx = ent as MText; mtx.UpgradeOpen(); string newtxt = mtx.Text; ed.WriteMessage("\nText: {0}\n", newtxt); mtx.Contents = newtxt;
так понимаю нужно открыть МТекст в каком-то редакторе....тут и проблема..
так понимаю нужно открыть МТекст в каком-то редакторе....тут и проблема..
???
Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Runtime Namespace MTextEditing Public Class Commands <CommandMethod("SMF")> _ Public Sub StripMTextFormatting() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor ' Указываем, что можно выбрать только MText Dim peo As New PromptEntityOptions(vbLf & "Выберите MText для удаления форматирования: ") peo.SetRejectMessage(vbLf & "это не MText.") peo.AddAllowedClass(GetType(MText), False) Dim per As PromptEntityResult = ed.GetEntity(peo) If per.Status <> PromptStatus.OK Then Return End If Dim tr As Transaction = doc.TransactionManager.StartTransaction() Using tr ' Нужно открыть MText для чтения Dim obj As DBObject = tr.GetObject(per.ObjectId, OpenMode.ForRead, False) Dim mt As MText = TryCast(obj, MText) If mt Is Nothing Then Return End If ' Создаём объект текстового редактора для MText Dim te As TextEditor = TextEditor.CreateTextEditor(mt) If te Is Nothing Then Return End If ' Просто выбираем всё и удаляем форматирование te.SelectAll() te.Selection.RemoveAllFormatting() ' Не забываем сохранить результаты te.Close(TextEditor.ExitStatus.ExitSave) tr.Commit() End Using End Sub End Class End Namespace
вырезка из кода:
Imports System.IO Imports Autodesk.AutoCAD.Interop.Common Imports Autodesk.AutoCAD.Interop Imports System.Runtime.InteropServices Imports System Imports System.Diagnostics Imports System.ComponentModel Imports System.Windows.Forms Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports System.Drawing.Printing Private Sub ToolStripMenuItem60_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem60.Click On Error GoTo end_prg Dim AcadApp As AcadApplication = Nothing Dim Activdoc As AcadDocument = Nothing Dim objSelSet, sloj As Object Dim varAttributes, vardynamicblockproperties, vartext As Object Dim ss As New Process Dim ss1, ttt As Object Dim obj As AcadObject Dim varInsertionpoint, varAttributes1 As Object Dim objSelSet1, ima, l As Object Dim objpointer As AcadEntity Dim dxfInt(0 To 4) As Short, dxfType(0 To 4) As Object Dim objSelCol, objSelCol1 As AcadSelectionSets ttt = 0 ss = Process.GetProcessesByName("acad")(0) ss1 = ss.Id AppActivate(ss1) AcadApp = DirectCast(Marshal.GetActiveObject(progIDstr), AcadApplication) Activdoc = AcadApp.ActiveDocument Dim style As AcadTextStyle ' создание текстового стиля Dim style1 As AcadTextStyles style1 = Activdoc.TextStyles For i = 0 To style1.Count - 1 If style1(i).name = "GS-GOST2304" Then ttt = 1 End If Next If ttt = 0 Then style = Activdoc.TextStyles.Add("GS-GOST2304") style.fontFile = "cs_gost2304.shx" style.Width = 0.8 style.ObliqueAngle = 0 style.Height = 0 End If ' создание текстового стиля Dim AcadApp1 As AcadBlocks Dim elem As AcadBlock Dim elem1 As Object AcadApp1 = Activdoc.Blocks ProgressBar1.Visible = True ProgressBar1.Minimum = 0 ProgressBar1.Maximum = AcadApp1.Count ProgressBar1.Value = 0 ProgressBar1.Step = 1 ProgressBar1.PerformStep() For i = 0 To AcadApp1.Count - 1 ProgressBar1.PerformStep() elem = AcadApp1.Item(i) If elem.Name.Contains("*U") = True Or elem.Name = "*Model_Space" Or elem.Name = "*Paper_Space" Then For y = 0 To elem.Count - 1 elem1 = elem.Item(y) If elem1.ObjectName = "AcDbMText" Then Dim text As AcadMText elem1.stylename = "GS-GOST2304" End If If elem1.ObjectName = "AcDbText" Then elem1.stylename = "GS-GOST2304" elem1.ScaleFactor = 0.8 elem1.ObliqueAngle = 0 End If If elem.Name <> "*Model_Space" And elem.Name <> "*Paper_Space" Then If elem1.ObjectName = "AcDbAttributeDefinition" Then elem1.stylename = "GS-GOST2304" elem1.ScaleFactor = 0.8 elem1.ObliqueAngle = 0 End If End If Next End If Next
Ты делаешь внешний exe-файл, который запускает AutoCAD? Если да, то все примеры, приведенные выше, работать не будут - они работают только внутри dll-файлов, загружаемых внутрь AutoCAD (командой NETLOAD).
Да, именно так! Никак не могу "доапаться" до свойства Мтекста, которое отключает форматирование..
Никак не могу "доапаться" до свойства Мтекста, которое отключает форматирование..
Такого свойства нет. Так что только парсить MTEXT.
Например, так: https://www.caduser.ru/forum/topic43895.html
Такого свойства нет. Так что только парсить MTEXT.
Либо, как вариант, пользоваться этим.
Да уж одно круче другого....)
В твоём случае, регексы - самый простой (и не сложный) вариант.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → .NET → Удалить форматирование символов
Форум работает на PunBB, при поддержке Informer Technologies, Inc