Выбор SelectByPolygon

Автор Тема: Выбор SelectByPolygon  (Прочитано 5604 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Выбор SelectByPolygon
« : 25-08-2019, 19:04:43 »
Добрый день!
Может быть кто то сталкивался.
У меня есть функция, которая выбирает блоки, расположенные вдоль полилинии.
Для этой задачи выбирается полиния, формируется массив с координатами вершин и передается в функцию SelectByPolygon.
Столкнулся с ситуацией, что по непонятной мне причине вдруг функция перестает выбирать объекты.

Начал разбираться, пошел таким путем: начиная с двух первых вершин полилинии, формирую выборку, смотрю на количество выбранных объектов.
добавляю следующую вершину и опять делаю выборку, смотрю на количество полученных объектов.
И начиная с какой то точки, вдруг количество выбранных объектов становится равным нулю.
Не понятно с чем это может быть связано? Может какие то неописанные ограничения. Вроде и добавленные координаты вершин нормальные.
Может кто нибудь поделиться мыслями на эту ситуацию?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор SelectByPolygon
« Ответ #1 : 25-08-2019, 19:56:40 »
1. Все точки должны быть видимы на экране. 
2. Если полигон будет самопересекающимся, то выбор работать не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Выбор SelectByPolygon
« Ответ #2 : 26-08-2019, 09:11:00 »
Разобрался.

1. Все точки должны быть видимы на экране. 
Не обязательно, все работает даже если точки не видны, какие то варианты функций работают только при видимости на экране, какие то нет.
допустим Select с опцией acSelectionSetAll работает в любом случае (можно фильтры применять) , а вот с другими опциями только в области видимости...
SelectByPolygon - с опцией acSelectionSetWindowPolygon и acSelectionSetFence - также работает без видимости на экране, проверено многократно, про другие утверждать не будут, не пользовался, но думаю, что также будет работать, а вот SelectAtPoint - работает только при видимости на экране.

2. Если полигон будет самопересекающимся, то выбор работать не будет.
в случае опции acSelectionSetFence - будет работать даже если линия будет самопересекаться (проверено многократно), а вот в случае acSelectionSetWindowPolygon - уже не будет.

В общем проблема была в том, что две подряд идущие точки лежали друг на друге, по сути, длина сегмента равнялась 0. Когда добавил проверку на совпадающие последовательные точки, и если в случае совпадения этих точек одну из них исключить, то все начинает работать.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор SelectByPolygon
« Ответ #3 : 26-08-2019, 11:43:02 »
DMuzer,
Среди всего написанного выше абсолютно правильное утверждение только одно:
Select с опцией acSelectionSetAll работает в любом случае (можно фильтры применять) , а вот с другими опциями только в области видимости...
Остальные зависят от многих факторов, в том числе и от версии AutoCAD. Полагаться, что вне области видимости будут работать методы SelectByXXX не следует.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Выбор SelectByPolygon
« Ответ #4 : 26-08-2019, 11:57:53 »
Понятно, спасибо!

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

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Выбор SelectByPolygon
« Ответ #5 : 26-08-2019, 12:10:06 »
А есть ли где информация о том как работают эти методы в каждой конкретной версии AutoCad? Или тут какждый раз проверять надо? Сюрпизы?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор SelectByPolygon
« Ответ #6 : 26-08-2019, 12:19:16 »
А есть ли где информация о том как работают эти методы в каждой конкретной версии AutoCad? Или тут какждый раз проверять надо? Сюрпизы?
Это недокументировано. Документировано лишь то, что примитивы и точки должны быть в видимой области (точнее в виртуальном экране, который может быть несколько больше видимой области) и то что только SelectAll работает в не зависимости от видимости примитивов, так как он проверяет все примитивы в чертеже.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение