Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: 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. Я предполагаю, что это из-за того, что чертеж источник в этот момент закрыт. Как можно решить эту проблему?
-
Editor.SelectXXX работает только с чертежами, открытыми в редакторе AutoCAD. Причем они должны быть активными в момент вызова Editor.SelectXXX. Для чертежа, прочитанного через Database.ReadDwgFile никакие методы класса Editor не работают! Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
-
Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
А есть какие нибудь примеры на эту тему? Я пока придумал только чтобы брать каждый объект и проверять каждую его точку (для полилиний), или базовую точку или position на попадание в контур, но это как-то топорно. Может есть какой метод полегче?
-
Может есть какой метод полегче?
Нет. Ничего легче однозначно нет. Начинать можно и нужно с проверки на взаимное расположение GeometricExtents. Если GeometricExtents не пересекаются, то однозначно примитив не внутри полилинии.
-
я бы начал отсюда: https://github.com/drorgl/cspatialindexrt/
Как минимум это позволит существенно уменьшить список для перебора.
-
Кстати в Map 3D есть штатный функционал для этого!