Выбор объектов внутри полилинии в закрытом чертеже

Автор Тема: Выбор объектов внутри полилинии в закрытом чертеже  (Прочитано 3908 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

Пытаюсь выбрать все объекты внутри замкнутой полилинии. Нашел вот такой пример кода 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. Я предполагаю, что это из-за того, что чертеж источник в этот момент закрыт. Как можно решить эту проблему?

Отмечено как Решение Atomohod 05-10-2019, 23:57:34

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Editor.SelectXXX работает только с чертежами, открытыми в редакторе AutoCAD. Причем они должны быть активными в момент вызова Editor.SelectXXX. Для чертежа, прочитанного через Database.ReadDwgFile никакие методы класса Editor не работают! Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Соответственно нужно придумывать свой алгоритм для поиска объектов внутри полилинии - готового метода нет.
А есть какие нибудь примеры на эту тему? Я пока придумал только чтобы брать каждый объект и проверять каждую его точку (для полилиний), или базовую точку или position на попадание в контур, но это как-то топорно. Может есть какой метод полегче?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Может есть какой метод полегче?
Нет. Ничего легче однозначно нет. Начинать можно и нужно с проверки на взаимное расположение GeometricExtents. Если GeometricExtents не пересекаются, то однозначно примитив не внутри полилинии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
я бы начал отсюда: https://github.com/drorgl/cspatialindexrt/
Как минимум это позволит существенно уменьшить список для перебора.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Кстати в Map 3D есть штатный функционал для этого!