Перейти к содержимому

Как в автокаде удалить форматирование текста

  • автор:

Как очистить форматирование всего текста в чертеже

Есть чертёж — экспортирован из компаса. После этого смасштабирован (увеличен в 200 раз). После масштабирования все тексты остались маленькими. В свойствах текста видно, что в содержании текста имеется форматирование. Нужно выделить весь текст на чертеже и сделать его нормального размера. Т.е. убрать форматирование, которое мешает изменять размер текста. Команда STM срабатывает только после двойного щелчка по тексту. Т.е. что бы воспользоваться этой командой мне нужно прощёлкать двойным щелчком все MTEXT в чертеже, а их очень много.
Привожу фрагмент чертежа и анимацию проблемы.

DWG 2010 Чертеж2.dwg (102.8 Кб, 19 просмотров)

Удаления форматирования MTEXT ACAD ’08-09 NET.API

В архиве файл с исходным текстом и две сборки — для 2008 и 2009 версий соответственно.
После загрузки dll командой _.netload появляется команда MTXTFORMATREMOVE, котороя позволяет удалять форматирование из нескольких текстов за один раз.
непонятно, почему в автокаде до сих пор нет подобной встроенной команды.
Я знаю, что полно лиспов, которые делают ровно то же самое, но обратите внимание, что само удаление форматирования текста уместилось в одну маленькую строчку.
Желающим писать под AutoCAD на C#:
скачайте ObjectARX SDK с сайта Autodesk
В качестве среды разработки можно использовать Sharp Develop 2 или Visual Studio 2008 Express

Все эти продукты бесплатны (желательно также скачать Net Framework SDK 2 который содержит разные утилиты и справку по .Net)

Комментарии

Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Комментарии 1-6 из 6
Красин , 09 сентября 2008 в 11:00

Извините, я обнаружил у себя ошибку: надо добавить проверку, что объект является мультистрочным текстом.
MText mtxt = db.TransactionManager.GetObject(id, OpenMode.ForWrite, false, true) as MText;
if (mtxt != null)
.
И вызов
ed.Regen();
совсем не нужен.
Ну что ж, вы сами можете вносить любые исправления, ибо исходный текст прилагается
Исправленную версию сейчас перезалью на сервер

paul_bird , 16 февраля 2009 в 09:36

Замечательная команда! Огромное спасибо! MTXTFORMATREMOVE спасает нервы! )
единственное что не очень нравится — так это необходимость запускать .dll каждый раз при закрузке А-када. Подскажите пожалуйста — можно ли как-то устранить сей недостаток?
Еще раз Спасибо! )

Удалить форматирование символов

Подскажите пож-та, как удалить форматирование символов МТекста в автокаде c помощью VB.net.

#2 Ответ от fixo 5 февраля 2013г. 16:52:29 (изменено: fixo, 5 февраля 2013г. 16:55:23)

Re: Удалить форматирование символов

#3 Ответ от Tony 5 февраля 2013г. 17:00:11

Re: Удалить форматирование символов

Спасибо!! Попробую разобраться.

#4 Ответ от Tony 5 февраля 2013г. 17:19:00

Re: Удалить форматирование символов

надо разбираться с c#, а это туго, буду пробывать.

#5 Ответ от Александр Ривилис 5 февраля 2013г. 17:24:22

Re: Удалить форматирование символов

Роман Соколов пишет:

надо разбираться с c#, а это туго, буду пробывать.

#6 Ответ от fixo 5 февраля 2013г. 23:34:56

Re: Удалить форматирование символов

Я бы посоветовал установить на компьютере
SharpDevelop 4.2 (он бесплатный ищи в Гугле)
постоянно пользуюсь трансляцией VB.NET C#
там есть встроенная опция для этого в меню Tools

#7 Ответ от fixo 6 февраля 2013г. 01:32:02 (изменено: fixo, 6 февраля 2013г. 11:37:45)

Re: Удалить форматирование символов

Такой код работает в 2010-м автокаде
(тестировал немного)

public static ErrorStatus fixoGetEntity(Transaction tr, Editor ed, RXClass rx, string msg, out ObjectId id) < ErrorStatus es; Entity ent; 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; if (id == ObjectId.Null) es = ErrorStatus.NullObjectId; ent = tr.GetObject(id, OpenMode.ForRead, false) as Entity; if (ent.GetRXClass() != rx) < ed.WriteMessage("\nMust be a \"\" 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 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: \n", newtxt); mtx.Contents = newtxt; mtx.RecordGraphicsModified(true); > tr.Commit(); > > >

#8 Ответ от Tony 6 февраля 2013г. 13:18:13

Re: Удалить форматирование символов

Не, не получается! Но всё равно большое спасибо!

#9 Ответ от Александр Ривилис 6 февраля 2013г. 13:43:29 (изменено: Александр Ривилис, 6 февраля 2013г. 14:08:59)

Re: Удалить форматирование символов

Роман Соколов пишет:

Не, не получается! Но всё равно большое спасибо!

Что не получается?

#10 Ответ от Tony 6 февраля 2013г. 14:03:24

Re: Удалить форматирование символов

Я без проблем нахожу многострочный текст в автокаде, далее

MText mtx = ent as MText; mtx.UpgradeOpen(); string newtxt = mtx.Text; ed.WriteMessage("\nText: \n", newtxt); mtx.Contents = newtxt;

так понимаю нужно открыть МТекст в каком-то редакторе. тут и проблема..

#11 Ответ от Александр Ривилис 6 февраля 2013г. 14:09:19

Re: Удалить форматирование символов

Роман Соколов пишет:

так понимаю нужно открыть МТекст в каком-то редакторе. тут и проблема..

Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Runtime Namespace MTextEditing Public Class Commands _ 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

#12 Ответ от Tony 6 февраля 2013г. 14:21:13

Re: Удалить форматирование символов

вырезка из кода:

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

Как в автокаде удалить форматирование текста

Плагин позволяет удалять форматирование многострочного текста, мультивыносок, размеров, атрибутов блоков и таблиц

Связанные новости и статьи

Использование

Выберите объекты, содержащие многострочный текст:

Выбор объектов в текущем пространстве. Если выбранные объекты содержат обрабатываемые функцией – многострочный текст, мультивыноски, таблицы, размеры или блоки – откроется окно выбора форматирования для удаления:

1

Типы форматирования отображаются в алфавитном порядке.

2 — выбрать все типы форматирования
3 — снять выбор со всех типов форматирования

Принять – удаление указанных типов форматирования из выбранных объектов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *