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

ADN Club => AutoCAD .NET API => Тема начата: Atomohod от 05-10-2019, 23:38:46

Название: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: Atomohod от 05-10-2019, 23:38:46
Здравствуйте!

Пытаюсь выбрать все объекты внутри замкнутой полилинии. Нашел вот такой пример кода https://forums.autodesk.com/t5/net/select-object-inside-a-polyline/td-p/6018866, но он работает только для объектов текущего чертежа, а у меня чертеж в момент работы команды закрыт. То есть - я открываю чертеж (в него нужно скопировать), затем указываю другой чертеж(источник) на диске из которого я копирую объекты (он в этот момент закрыт), и мне нужно выбрать для переноса в чертеж из источника только объекты заключенные внутри замкнутой полилинии. Хватаю ошибку в PromptSelectionResult selection = ed.SelectByPolyline(pline, PolygonSelectionMode.Window, new TypedValue(0, "CIRCLE,MTEXT")); возвращается selection.Status ==Error. Я предполагаю, что это из-за того, что чертеж источник в этот момент закрыт. Как можно решить эту проблему?
Название: Re: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: Александр Ривилис от 05-10-2019, 23:43:46
Editor.SelectXXX работает только с чертежами, открытыми в редакторе AutoCAD. Причем они должны быть активными в момент вызова Editor.SelectXXX. Для чертежа, прочитанного через Database.ReadDwgFile никакие методы класса Editor не работают! Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
Название: Re: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: Atomohod от 05-10-2019, 23:47:45
Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
А есть какие нибудь примеры на эту тему? Я пока придумал только чтобы брать каждый объект и проверять каждую его точку (для полилиний), или базовую точку или position на попадание в контур, но это как-то топорно. Может есть какой метод полегче?
Название: Re: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: Александр Ривилис от 05-10-2019, 23:53:31
Может есть какой метод полегче?
Нет. Ничего легче однозначно нет. Начинать можно и нужно с проверки на взаимное расположение GeometricExtents. Если GeometricExtents не пересекаются, то однозначно примитив не внутри полилинии.
Название: Re: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: Владимир Шу от 06-10-2019, 11:07:50
я бы начал отсюда: https://github.com/drorgl/cspatialindexrt/
Как минимум это позволит существенно уменьшить список для перебора.
Название: Re: Выбор объектов внутри полилинии в закрытом чертеже
Отправлено: trir от 06-10-2019, 22:58:49
Кстати в Map 3D есть штатный функционал для этого!