Поиск принадлежности заданной точки вхождению блока

Автор Тема: Поиск принадлежности заданной точки вхождению блока  (Прочитано 7577 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 1
Добрый вечер!
Задался целью найти, принадлежит ли указанная точка вхождению блока. Vla-Interset для таких случаев не работает. Попробовал сделать обход по примитивам внутри вхождения, но почему-то отрезки внутри вхождения (над которыми я хотел для проверки сделать Vla-GetParamAtPoint) оказались скорее отрезками определения блока в нулевой координате. То есть,если, например, изменить цвет отрезка, то он изменится у всех вхождений.
Может, я не по тому пути иду? А если по тому, то как пройтись по подпримитивами именно конкретного вхождения блока?

Общая задача такова: заменить
Код - Auto/Visual Lisp [Выбрать]
  1. (setq BOX (* (getvar "PICKBOX") (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE")))))
  2. (vla-ZoomExtents acad_application)
  3. (setvar "OSMODE" 0)
  4. (setq ss nil ss (ssget "_C" (mapcar '- point (list BOX BOX 0.0)) (mapcar '+ point (list BOX BOX 0.0))
  5. (vla-ZoomPrevious acad_application)
на что-то другое, не зависящее от отображения точки в пределах видимого экрана. Как я понимаю, это SSGET "_X", в котором нужно пройтись по всем отрезкам методом Vla-GetParamAtPoint, а по вхождениям блоков... вот тут и проблема (другие типы примитивов не интересуют).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробовал сделать обход по примитивам внутри вхождения, но почему-то отрезки внутри вхождения (над которыми я хотел для проверки сделать Vla-GetParamAtPoint) оказались скорее отрезками определения блока в нулевой координате. То есть,если, например, изменить цвет отрезка, то он изменится у всех вхождений.
Так и должно быть.
Может, я не по тому пути иду? А если по тому, то как пройтись по подпримитивами именно конкретного вхождения блока?
Нет "подпримитивов именно конкретного вхождения блока" (если не считать атрибуты блока). Всё остальное следует пересчитывать из системы координат блока в МСК (Мировую Систему Координат). Всё зависит от точки вставки (InsertionPoint), угла поворота (Rotation) и масштабов по осям (XScaleFactor/YScaleFactor/ZScaleFactor).
Вообще-то лично мне не очень понятно, что ты подразумеваешь под "принадлежит ли указанная точка вхождению блока". Это означает, что она принадлежит габаритному контейнеру вставки блока или одному из примитивов вставки блока? И если одному из примитивов, то понимать ли это принадлежность границе или внутренности (например для круга или замкнутой полилинии)?

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

Отмечено как Решение Macondo 08-02-2016, 04:10:04

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, посмотри еще на описание функции (nentselp): http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-5CE182FE-6455-4C62-B953-B1CA441455C1
Вполне возможно, что она тебя удовлетворит, хотя и требует, чтобы точка находилась в видимой области.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И еще одна полезная ссылка, в которой есть две функции для преобразования из МСК в систему координат блока и обратно: https://www.theswamp.org/index.php?topic=26591.msg321020#msg321020
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 1
Александр Ривилис, спасибо! Вполне достаточно оказалось функции nentselp: очень кстати пришлась. А преобразование координат поможет для более сложных расчётов, когда в исходной точке сразу несколько блоков.