Тема: Выбор текста с чертежа.

Здравствуйте. Не подскажете, как получить весь текст из таблиц с чертежа?

Мне нужно получить набор строк из всех ячеек таблицы.
Возможен ли быстрый вариант наподобие:

Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            var filter = new SelectionFilter(new[] { new TypedValue(0, "MTEXT") });
            PromptSelectionResult res = ed.SelectAll(filter);
            if (res.Status != PromptStatus.OK) return null;
            return res.Value.GetObjectIds();

?

или лучше парсить таблицы?

Заранее спасибо за ответ.

Re: Выбор текста с чертежа.

Твой способ не годится принципиально. Это только если расчленить таблицы, то можно получить MTEXT. А в нормальном виде этот фильтр таблицы не найдет. Если конечно ты имеешь в виду AutoCAD'овские таблицы (Table, AcDbTable), а не набор линий и MTEXT-ов.

Re: Выбор текста с чертежа.

Спасибо.

Re: Выбор текста с чертежа.

Александр Ривилис пишет:

Твой способ не годится принципиально. Это только если расчленить таблицы, то можно получить MTEXT. А в нормальном виде этот фильтр таблицы не найдет. Если конечно ты имеешь в виду AutoCAD'овские таблицы (Table, AcDbTable), а не набор линий и MTEXT-ов.

Скажите пожалуйста, а как именно можно расчленить эти самые таблицы, чтобы мтекст получить из них ?

Re: Выбор текста с чертежа.

Евгений Иванов пишет:

Скажите пожалуйста, а как именно можно расчленить эти самые таблицы, чтобы мтекст получить из них ?

Метод Table.Explode пробовал?

(изменено: Евгений Иванов, 24 июля 2012г. 18:39:36)

Re: Выбор текста с чертежа.

Александр Ривилис пишет:
Евгений Иванов пишет:

Скажите пожалуйста, а как именно можно расчленить эти самые таблицы, чтобы мтекст получить из них ?

Метод Table.Explode пробовал?

Нет, не пробовал. Недавно изучаю .net программирование. А в чём он заключается? По какому принципу работает метод?  Может быть у вас есть какие-нибудь примеры? Мне нужно из блока (штампа) текст достать (не значения атрибутов). Заранее благодарю.

Re: Выбор текста с чертежа.

Штамп сделан блоком с таблицей!? Это жесть)
Традиционнно - блок с атрибутами.

Re: Выбор текста с чертежа.

Евгений Иванов пишет:

Нет, не пробовал

Попробуй. Поищи готовые примеры. Поиск еще никто не отменял.

Re: Выбор текста с чертежа.

Вильдар пишет:

Штамп сделан блоком с таблицей!? Это жесть)

Традиционнно - блок с атрибутами.



Штамп сделан блоком с атрибутами. из него текст достать нужно.

Re: Выбор текста с чертежа.

Александр Ривилис пишет:
Евгений Иванов пишет:

Нет, не пробовал

Попробуй. Поищи готовые примеры. Поиск еще никто не отменял.


хорошо, спасибо, поищу.

Re: Выбор текста с чертежа.

Запутался) то про таблицы, то про блоки)
Сори за оффтоп

Re: Выбор текста с чертежа.

Вильдар пишет:

Запутался) то про таблицы, то про блоки)

Сори за оффтоп



Да Я сам запутался. =) На самом деле штамп - это блок с атрибутами. Просто я думал, там можно как -нибудь аналогичным образом его разделить как и таблицы, чтобы текст достать.

Re: Выбор текста с чертежа.

Евгений Иванов пишет:

На самом деле штамп - это блок с атрибутами.

Тогда всё еще проще. У вставки блока (BlockReference) есть метод AttributeCollection, который возвращает все неконстантные атрибуты блока.

Re: Выбор текста с чертежа.

Дело в том, что мтекст который нужно прочитать не является атрибутом этого блока.

Re: Выбор текста с чертежа.

Евгений Иванов пишет:

Дело в том, что мтекст который нужно прочитать не является атрибутом этого блока.

Для этого нужно менять текст не в BlockReference а в BlockTableRecord

[FONT=Arial]~'J'~[/FONT]

Re: Выбор текста с чертежа.

Попробуй так

        <CommandMethod("chm")> _
        Public Sub ChangeTextInBlock()
            Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor
            Dim oldstring As String = ed.GetString(vbLf + "Enter a string to find and replace: ").StringResult
            Dim newstring As String = ed.GetString(vbLf + "Enter a new string to replace with " + oldstring + " : ").StringResult
            
            Using trans As Transaction = db.TransactionManager.StartTransaction()
                Dim peo As PromptEntityOptions = New PromptEntityOptions(vbLf + "Select a Block: ")
                peo.SetRejectMessage("Selected object must be a type of BlockReference!")
                peo.AddAllowedClass(GetType(BlockReference), False)

                Dim res As PromptEntityResult = ed.GetEntity(peo)
                If res.Status <> PromptStatus.OK Then Return
                Dim dbo As DBObject = res.ObjectId.GetObject(OpenMode.ForRead, False, False)
                Dim bref As BlockReference = Nothing
                If dbo IsNot Nothing Then
                    bref = TryCast(dbo, BlockReference)
                End If
                Dim btr As BlockTableRecord
                btr = DirectCast(trans.GetObject(bref.BlockTableRecord, OpenMode.ForRead), BlockTableRecord)
                If btr.IsDynamicBlock Then
                    btr = DirectCast(trans.GetObject(bref.AnonymousBlockTableRecord, OpenMode.ForRead), BlockTableRecord)
                End If

                For Each id As ObjectId In btr
                    Dim obj As DBObject = DirectCast(trans.GetObject(id, OpenMode.ForRead), DBObject)
                    If TypeOf obj Is MText Then
                        Dim mtx As MText = TryCast(obj, MText)
                        If mtx.Contents = oldstring Then
                            btr.UpgradeOpen()
                            mtx.UpgradeOpen()
                            mtx.Contents = newstring
                            mtx.DowngradeOpen()
                            btr.DowngradeOpen()
                        End If
                        Exit For
                    End If
                Next
                trans.Commit()
                ed.Regen()

            End Using

        End Sub

[FONT=Arial]~'J'~[/FONT]

Re: Выбор текста с чертежа.

Спасибо большое. Скажите а нет примера на с#?

(изменено: Евгений Иванов, 25 июля 2012г. 12:19:00)

Re: Выбор текста с чертежа.

И ещё вопросик. Просто неохото захламлять форум. Скажите пожалуйста как вытащить объект типа блок из таблицы блока по имени.

Re: Выбор текста с чертежа.

Евгений Иванов пишет:

И ещё вопросик. Просто неохото захламлять форум. Скажите пожалуйста как вытащить объект типа блок из таблицы блока по имени.

Смотри здесь, там много чего найдешь
http://adndevblog.typepad.com/autocad/2 … rence.html