Поиск объектов в многоугольной области неактивного чертежа

Автор Тема: Поиск объектов в многоугольной области неактивного чертежа  (Прочитано 7796 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 1
Добрый день!
Можно ли найти объекты (например, сформировав набор с фильтрами) внутри зоны (многоугольник секущий или нет) на открытом неактивном чертеже?
Пробовал делать так:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq current_actdoc (vla-Item (vla-get-Documents (vlax-get-acad-object)) "123.dwg"))
  2. (setq current_modspace (vla-get-modelspace current_actdoc))
  3.  
  4. (setq obj (vla-get-ActiveSelectionSet current_actdoc))
  5. (setq ss (vla-SelectByPolygon obj acSelectionSetWindowPolygon
  6.     (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 14))
  7.       (append (list 0 0 0) (list 0 3000 0) (list 3000 3000 0) (list 3000 0 0) (list 0 0 0)))
  8.     (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 0)) '(0))
  9.     (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 0)) '("INSERT"))))
Предварительно в неактивном чертеже 123.dwg была нарисована рамка со сторонами 3000 от нулевой точки, в которую были помещены вхождения блоков.
Переменная ss имеет значение nil.

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

Может, есть какие-то протоптанные пути для этой задачи?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Переменная ss имеет значение nil.
Думаю, что именно так оно и должно быть. В конечном итоге все эти ActiveX-овские функции (vla-SelectXXX) сводятся к (ssget) (или acedSSGet в ObjectARX), а они работают только с активным чертежом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Macondo 02-06-2016, 02:44:20

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Вторым вариантом я думал перебрать все объекты неактивного чертежа и сопоставить точку вставки вхождения блока с точками контура, но не знаю математического алгоритма принадлежности точки сложному контуру.
А вот это правильный алгоритм. Особенно если у тебя контур не имеет дуг.
Например:
http://geol-dh.narod.ru/spds/func-is-in-contour.html
http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=23&TID=36191&MID=205575#message205575
http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=23&TID=36191&MID=205580#message205580
Кстати и работать должно значительно быстрее. Ведь здесь чистая математика.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 1
Спасибо за ссылки! Особенно понравился самый маленький математический алгоритм. Работает  :)