Тема: Как сделать аналог acedSSGet для выбора виртуальных объектов?

Уважаемое сообщество,

нужно сделать аналог acedSSGet для выбора пользователем одного или нескольких объектов на экране.
Объекты - это точки, не являющиеся элементами чертежа, известны только их координаты.
Выбирать поодиночке можно с помощью AcEdJig или AcEdInputPointFilter, отрисовывая кружок вокруг ближайшей к курсору точки. Выбрать область на экране можно с помощью acedGetCorner.
Можно ли как-то объединить эти два режима, как это делает acedSSGet, без переключения между ними по ключевым словам?

С наилучшими пожеланиями,
Валерий

(изменено: Николай, 11 февраля 2010г. 14:17:07)

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

если координаты точек хранятся в памяти, то кто мешает указать область в которой будет проходить выборка, например, при помощи двух acedGetPoint, или как-то иначе, а потом искать вхождение точек в выборку уже математическими средствами? или я что-то не так понял?

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

Николай,
можно сделать и так, но хочется сделать как acedSSGet: кликнул на точку, она добавилась в список, выделил область - все точки, входящие в нее, добавились в список и т.д. пока пользователь не завершит ввод. В идеале должна быть возможность исключить точки из выборки.

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

acedSSGet может выбирать только примитивы. Так что ищи другой способ.

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

занимался я когда-то таким :). в треангуляционной псевдографике нада выбирать узлы было.
SSGet тут променить не получится однозначно, т.к. работает только с объектами акада.
принцип такой.
запрос приблизительно такой "Выбор узлов [Контур]: "
Ну и собственно когда ползатель просто клацает по экрану, то выбираем ближайшую точку к его клацнутой точке, если расстояние меньше какого-то (ну если он вообще в левом месте клацнул, то чтоб ничего не выыбралось), а если он выбирает опцию "Контур", то идет запрос на указание контура выбора прямоугольной рамкой через два acedGetPoint, ну и после указания второй точки проверять вхождение точек в прямоугольную рамку. вот в принципе и все.

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

Александр Ривилис,
я привел пример acedSSGet для описания нужной функциональности. Понятно, что нужно что-то другое использовать.

Николай,
спасибо за пример, у меня как раз такая задача и стоит.
Я думал, может есть еще какой-то способ взаимодействия с экраном, о котором я не знаю.

Теперь главное - объяснить шефу, что по-другому (без опций) не получится :)

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

:) без опций можно, но сильно через Ж... :)
например, если нажал и отпустил мышку в одной и той же точке (ну с допуском по расстоянию) то это выбор точкой, а вот если нажал в одном месте, а отпустил в другом, то это выбор рамкой  :o

но это уже не средствами акада а хуками :):):)
PS: я ж говорил, что через Ж...

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

Николай пишет:

  без опций можно, но сильно через Ж...

Значит мое предчувствие меня не обмануло :)

Пойду по простому пути.

Спасибо за помощь.

Re: Как сделать аналог acedSSGet для выбора виртуальных объектов?

Если ты не попал в примитив (твою условную точку), то можешь запускать acedGetCorner для получения рамки выбора.