Выбор вложенных объектов секущей рамкой в Autocad через .NET

Автор Тема: Выбор вложенных объектов секущей рамкой в Autocad через .NET  (Прочитано 15216 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Затем каким-нибудь образом проверю, что выбор сделан именно рамкой (пока не знаю как) и если выбор сделан неправильно буду возвращаться в цикле обратно.
Узнать каким образом был сделан выбор можно используя данные acedSSNameX. Посмотри её описание в документации ObjectARX SDK.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Еще раз благодарю вас, рыцарь ObjectARX :)

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
К сожалению обнаружил, что при большом количестве выбираемых объектов во внешних ссылках выполнение метода ArxImports.acedSSGet происходит очень очень медленно. Я думаю, что это из-за того, что объекты в наборе очень много раз дублируются. Возможно причина не в этом?

Попробовал применить фильтр выбора. Например, такой:
Код - C# [Выбрать]
  1.  ResultBuffer resbuf = new ResultBuffer
  2.                 (
  3.                     new TypedValue(-4, "<and"),
  4.                     new TypedValue(0, "INSERT"),
  5.                     new TypedValue(8, "0"),
  6.                     new TypedValue(-4, "and>")
  7.                 );
  8.  
Пробовал и другие.
Но при этом все равно выбираются все объекты, попадающие в рамку. То есть фильтр полностью игнорируется. Что я делаю не так?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я думаю, что это из-за того, что объекты в наборе очень много раз дублируются. Возможно причина не в этом?
Думаю что не в этом, а в сложности выбора.

Попробовал применить фильтр выбора. Например, такой:

На скорость выбора это скорее всего не повлияет.
Что касается фильтра, то попробуй такой:
Код - C# [Выбрать]
  1. ResultBuffer resbuf = new ResultBuffer
  2.                 (
  3.                     new TypedValue(0, "INSERT"),
  4.                     new TypedValue(8, "0"),
  5.                 );

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Да, действительно. Вложенные объекты не фильтруются. В этом дело. Отбираются только сами внешние ссылки.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Ладно, видимо мне придется отказаться от использования этого метода. Тем не менее, это было интересно.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
А в результате, что должно получится?

Хочу немного похвастаться, а заодно и поделиться опытом. У меня получилось сделать достаточно производительную программу, которая выбирает объекты внешних ссылок, но при этом все внешние ссылки имеют точку вставки 0,0,0, не повернуты и не отмасштабированы (то есть пересчет координат не требуется).
За основу я брал идею из темы на форуме swamp: http://www.theswamp.org/index.php?topic=27786.0. Там смысл в том, что если рамка выбора указывается при ортогональном виде сверху (ну то есть север наверху), то квадраты Extents искомых объектов либо полностью находятся внутри рамки выбора, либо проекции этих объектов на плоскость X0Y пересекают рамку выбора. А получить Extents всех объектов можно сплошным перебором.



Надеюсь, кому-то будет полезно ;)


Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 381
  • Карма: 21
CommandFlags.Modal
А как получать выбранные объекты?

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

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

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 381
  • Карма: 21
Lemieux,
Не понял вопроса.
Я не стал цитировать полностью ответ с решением (https://adn-cis.org/forum/index.php?topic=7683.msg25135#msg25135). Но мне не понятно как из функции acedSSGet получать объекты, которые выделил. Я пробовал по имени сета, но не получилось.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
acedSSName/acedSSNameX тебе в помощь. Смотри описание в ObjectARX SDK.
Пример использования есть здесь: https://www.theswamp.org/index.php?topic=41569.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 381
  • Карма: 21
Смотри описание в ObjectARX SDK.
Я уже смотрел, но я просто не понимаю как всё это работает. Стыдно конечно.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Смотри описание в ObjectARX SDK.
Я уже смотрел, но я просто не понимаю как всё это работает. Стыдно конечно.
Пример использования есть здесь: https://www.theswamp.org/index.php?topic=41569.0
А все это растет отсюда: https://adndevblog.typepad.com/autocad/2012/04/retrieving-nested-entities-under-cursor-aperture-using-net-api.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение