Тема: Как отследить перемещение точки в некоторую область

В общем задача следующая: есть точка - контакт,   необходимо каким-то образом отследить момент когда на эту точку пользователь перемещает конец некоторой линии и просигнализировть об этом.
Какой механизм можно задействовать?
Ведь реакторы могут собщить только "modified" но при этом не ясно какое именно действие было произведено?

Re: Как отследить перемещение точки в некоторую область

AcDbObject::subOpen()

Re: Как отследить перемещение точки в некоторую область

Это не решает проблемы.
Если user изменил цвет полилинии(перемещения концов которой нужно отслеживать) то будет вызван тот же "subOpen" а дальше и "modified". А нужен именно контроль перемещения.
Мое тупое решение сейчас это сделать два dbx-объекта - контакт и соединение. При вызове "moveGripPointsAt" ставить флаг что было именно перемещение, а по срабатывании реактора "modified" определять ближайшую точку-контакт и если поиск удачен - фиксировать момент соединения.
Но это решение мне не нравится. Возможно есть стандартные и более интелектуальные механизмы.

Re: Как отследить перемещение точки в некоторую область

Это не решает проблемы.

Нравятся мне такие посты.
Сначала описывается одно

...отследить момент когда на эту точку пользователь перемещает конец некоторой линии и просигнализировть об этом.

а потом ВДРУГ оказывается, что

А нужен именно контроль перемещения...

Процесс динамического изменения геометрии примитива может быть идентифицирован при помощи функции
AcGiCommonDraw::isDragging()

Re: Как отследить перемещение точки в некоторую область

Я, кстати, так и не понял, Вам нужна фиксация контакта в динамике или нет?
Потому что если нет, то modified() ведь вполне подходит. Там останется только проверить а не совпадают ли координаты.

Re: Как отследить перемещение точки в некоторую область

Спасибо за ответы.
Возможно описываю проблему несколько отрывисто, или не совсем понял Ваши ответы sad
Да, действительно, modified() вполне подходит, но(!) если на рисунке несколько сотен таких контактов то процедура "останется только проверить а не совпадают ли координаты" превратится в отвратительный процесс где нужно проводить поиск по всем контактам. (Или писать "умные" алгоритмы как  отсеять заведомо неверные варианты поиска).
Нужно что бы по завершении перетаскивания(редактирования, изменения) линии связи можно было сразу определять было ли выполнено соединение(совпадение перетаскиваемого конца линии с точкой контакта). Аналогично с разъединением.
Сам способ изменения линии, значения не имеет (grip points, properties window, ...)

Re: Как отследить перемещение точки в некоторую область

И особенно важно с какой имеенно точкой выполнено соединение.

Re: Как отследить перемещение точки в некоторую область

Если несколько сотен, то итератор по базе "без искус" будет работать нормально.

Re: Как отследить перемещение точки в некоторую область

А все таки осталось не понятным, как для этой цели можно использовать AcDbObject::subOpen()?
Что имелось в виду в первом ответе?
И "фиксация контакта в динамике " все таки нужна.

Re: Как отследить перемещение точки в некоторую область

1) subOpen() можно использовать для кэширования претендентов
2) subOpen() можно использовать для индикации (с возможно дополнительными проверками) события "возможный контакт" в динамике.

Re: Как отследить перемещение точки в некоторую область

subOpen cогласно справке

Called whenever the object is about to be opened, but before it has actually been opened

Припустим эта функция переопределена для моего класса "Link".
Тепер я модифицирую связь путем перетаскивания одного из ее gripPoints, вызвается subOpen но ведь как бы я не изменял и не редактировал связь точка контакта об этом ничего не знает. Даже в том случае если перетаскиваемый gripPoint попадет прямо на нее.
То есть мне и дальше не ясно как может помочь subOpen?

Re: Как отследить перемещение точки в некоторую область

У Вас "точка" это что?
Если это физический AcDbEntity, то subOpen() переопределяется для "точки". :)
Этот subOpen() будет вызываться каждый раз (даже в "не командном" состоянии) когда курсор находится в некоторой близости от "точки".