Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: user32 от 31-10-2018, 09:06:05

Название: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 09:06:05
Всем здравствуйте!
Есть выноска на чертеже, сделанная обычными линиями и текстом, возникла необходимость создать из этого набора стандартную выноску автокада. Подскажите пожалуйста, как такое можно осуществить. На вход  AddLeader нужно подать массив точек. Я могу взять как вариант точку вставки текста, но как мне определить что линия, которая идет от объекта до самого текста относится именно к этой выноски?
Заранее спасибо
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Пекшев aka Modis от 31-10-2018, 09:14:28
Обычный геометрический анализ по вашим условиям. Вот только условий, допусков и проблем столько будет, что лично я бы сразу плюнул на эту затею
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Пекшев aka Modis от 31-10-2018, 09:48:36
Я бы попытался получать информацию для текста не через его свойства, а через метод Entity.getGeomExtents() (https://help.autodesk.com/view/OARX/2018/ENU/?guid=OREF-AcDbEntity__getGeomExtents_AcDbExtents__const) - MText и DBtext унаследованы от Entity, а значит имеют этот метод.
Также у MText есть метод GetBoundingPoints() (https://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_MText_GetBoundingPoints)
По этим данным вы получите описывающий прямоугольник и его уже будете анализировать по отношению к отрезкам.
Правда, для повернутого текста это все не сработает ))
Название: Re: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 10:27:32
Вроде понял, спасибо, буду пытаться)
Название: Re: Создание выноски из текста и линий
Отправлено: Владимир Шу от 31-10-2018, 11:29:59
Как правило выноска создается последовательно и за один раз, т.е. сначала рисуют линии, потом текст или наоборот, не столь важно или уже нарисованную выноску из линий и текста копируют в другое место... это  все я к тому, что имеет смысл посмотреть на хендлы объектов, их значения должны быть где-то рядом...
Название: Re: Создание выноски из текста и линий
Отправлено: Привалов Дмитрий от 31-10-2018, 12:48:33
Всем здравствуйте!
Есть выноска на чертеже, сделанная обычными линиями и текстом

Всего одна выноска? )))

как написал Александр Пекшев aka Modis надежный алгоритм врятли можно создать.
Если выносок немного(штук 20) можешь сделать полуавтомат, запросил пользователя указать линию, затем указать текст, потом следующую, пока esc не нажмет. Так проще, независимо от слоя, цвета, типа линии и т.д.

Ну а если много выносок(штук 100). То возможно проще сначала поместить распознаваемые выноски в один слой, а затем перебрать все линии в слое и выбрать для них ближайший текст. Т.е. возможно будет проще найти ближайший текст к линии чем наоборот.
Название: Re: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 12:57:59
Ахах)) Еслиб была одна, то я бы не заморачивался. Я просто пытаюсь с одной хотя бы это сделать) Вопрос стоит о сотнях выносок. Выноски как раз на одном слое располагаются. все выноску будут горизонатльные.
Есть ли в апи такой метод, который ищет ближайший текст?
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Ривилис от 31-10-2018, 13:03:39
Есть ли в апи такой метод, который ищет ближайший текст?
Тут нужен не один метод. И ближайший к чему текст?
Название: Re: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 13:28:25
Ну получается к линии. Суть вообще следующая. Из ревита выгружаются в автокад чертежи и соответственно выноски превращаются в набор текста и линий. Заказчик принципиально хочет видеть выноски как выноски автокада. Вот и возникла такая идея автоматизировать это все уже в автокаде. Просто может я вообще не в ту сторону мыслю и всех путаю и есть более легкий способ это все решить).
Выноска самая обыкновенная. Вот как выглядит
(https://i.postimg.cc/LqHFrWLq/2018-10-31-13-27-56.png) (https://postimg.cc/LqHFrWLq)
Название: Re: Создание выноски из текста и линий
Отправлено: Владимир Шу от 31-10-2018, 14:48:53
Выложите пример чертежа.
и посмотрите, что там у линий и текста в XData, есть большая вероятность, что ответ на поверхности.
http://adndevblog.typepad.com/aec/2012/08/revit-dwgdxf-export-specification-of-the-extended-data-xdata.html
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Пекшев aka Modis от 31-10-2018, 14:50:37
Off-Topic: показать
Я читаю и плачу  :'( Из Ревита в Автокад....
Название: Re: Создание выноски из текста и линий
Отправлено: Привалов Дмитрий от 31-10-2018, 15:00:04
Из ревита выгружаются в автокад чертежи и соответственно выноски превращаются в набор текста и линий. Заказчик принципиально хочет видеть выноски как выноски автокада. Вот и возникла такая идея автоматизировать это все уже в автокаде. Просто может я вообще не в ту сторону мыслю и всех путаю и есть более легкий способ это все решить).

Что из себя представляет выноска? 2 отрезка или полилиния? Есть выноски с 3 отрезками?

Возможно будет легче через Revit API выдернуть выноски, считать текст и координаты точек и создать в автокаде.  Так ты избавишься от необходимости анализа какой текст к какой линии относится. Но нужно подумать как воссоздать в автокаде, например перекинуть данные через файл или подключиться через ActiveX.
Название: Re: Создание выноски из текста и линий
Отправлено: Владимир Шу от 31-10-2018, 15:27:46
Что из себя представляет выноска? 2 отрезка или полилиния? Есть выноски с 3 отрезками?

Возможно будет легче через Revit API выдернуть выноски, считать текст и координаты точек и создать в автокаде.  Так ты избавишься от необходимости анализа какой текст к какой линии относится. Но нужно подумать как воссоздать в автокаде, например перекинуть данные через файл или подключиться через ActiveX.

Да не нужно это, если ссылки действительно экспортированы из Ревита, то прочитав XData и разложив по Element ID объекты, собрать выноски не представляется чем то сложным.
ЗЫ.
Проверил, создал в ревите лист и пару выносок на нем, экспортнул лист в dwg, открыв этот лист в автокаде и посмотрев/сравнив XData, все сошлось.
Название: Re: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 15:32:46
Выложите пример чертежа.
и посмотрите, что там у линий и текста в XData, есть большая вероятность, что ответ на поверхности.
http://adndevblog.typepad.com/aec/2012/08/revit-dwgdxf-export-specification-of-the-extended-data-xdata.html

https://yadi.sk/d/gIAtYoehGo6gbg  - Вот сюда скинул кусочек плана с выносками в dwg и dxf... Если честно первый раз сталкиваюсь с xdata.
Но удалось найти ID самой выноски в файле dxf. Может еще что найду, буду счас изучать)

Что из себя представляет выноска? 2 отрезка или полилиния? Есть выноски с 3 отрезками?

Получается там при простой выгрузке образуется две линии и блок в виде линии, а сверху текст.

Название: Re: Создание выноски из текста и линий
Отправлено: Владимир Шу от 31-10-2018, 15:40:53
Вот сюда скинул кусочек плана с выносками в dwg
Посмотрел Ваш dwg файл, он ничем не отличается от любого другого, экспортированного из Ревита, т.е в XData есть соответствующие записи.

Если честно первый раз сталкиваюсь с xdata
На форуме где-то была статья, как читать и писать эти данные. Поищите.

ЗЫ.
Пару месяцев назад, от заказчика пришла архитектура экспортированная из ревита , при этом все было экспортировано в один слой... работать с таким было невозможно, пришлось писать парсер, для раскладки по слоям, вот тогда и разбирался с этими записями...
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Ривилис от 31-10-2018, 17:06:38
Похоже, что по этим данным можно сгруппировать MText и две Line (думаю, что вставка блока не нужна, хотя она тоже группируется):

Это текст:
(https://farm2.staticflickr.com/1956/43831394560_57b413c05f_o.png)
Это отрезок:
(https://farm2.staticflickr.com/1959/44735279955_83cd0e57d4_o.png)



Название: Re: Создание выноски из текста и линий
Отправлено: user32 от 31-10-2018, 17:21:43
А подскажите пожалуйста, что это за расширение такое для просмотра данных?
Название: Re: Создание выноски из текста и линий
Отправлено: Александр Ривилис от 31-10-2018, 17:25:11
А подскажите пожалуйста, что это за расширение такое для просмотра данных?
ARXDBG и MGDDBG - утилиты для анализа AutoCAD, чертежа и т.д. (http://adn-cis.org/forum/index.php?topic=7274.0)