Тема: Исчезли точки привязки

В какой-то момент у одного из моих классов объектов изчезли точки привязки. У других классов всё нормально. Разница между классами очень небольшая, они используют однин и тот же код, за ислключением небольших деталей. Когда это случилось не знаю, может месяц назад, а может два (давно не тестировал эту часть программы), поэтому несколько ошарашен sad Внимательно просмотрел код: никаких намёков на проблему увидел. Может у кого сть соображения, в чём может быть причина?

Re: Исчезли точки привязки

1) Точки привязки или "ручки"?
2) Примитив нормально выбирается AutoCAD'ом? Может он открыт и не закрыт?
3) Стандартные привязки  или собственные?
4) Этот метод выполняется или AutoCAD к нему не обращается (поставь на входе отладочную печать или запусти под отладчиком)?
5) Нет ли ошибки в описании этого метода, т.е. в точности ли соответствует его сигнатура сигнатуре AcDbEntity::getOsnapPoints - иначе этот метод просто не будет вызываться (точнее будет вызваться метод базового класса)?
Пока больше идей нет. :(

Re: Исчезли точки привязки

> Александр Ривилис
1) Точки привязки
2) Нормально выбирается. Закрыт, в этом сомнений нет (на чертеже их бывает по несколько тысяч и всё нормально работает).
3, 4, 5) Я наследую от AcDbPoint, getOsnapPoints не перегружаю - даже не дышу в эту сторону. В точке вставке объекта должна срабатывать привязка. И она раньше срабатывала без проблем. А теперь нет... И вот ещё, оказывается появился ещё один баг: при перетаскивании объекта он перестал отрисовываться. Поскольку это проявляется только у одного класса, думаю, что эти баги взаимосвязаны.
P.S. Форум впору переименовывать в "Александр Ривилис об ObjectArx" smile

Re: Исчезли точки привязки

Новых идей не появилось :( Без кода и отладчика в данном случае - это гадание на кофейной гуще. Тут что-то глубже... Когда найдешь в чем проблема, сообщи. Думаю, что всем будет интересно.
P.S. Форум впору переименовывать в "Александр Ривилис об ObjectArx" smile
С этим сюда: https://www.caduser.ru/forum/topic20709.html smile

Re: Исчезли точки привязки

Было что-то похожее. Я писал ранее об этом.
1) Когда в момент drag-а копии меняется объект (вызывается) assertWriteEnabled() для объекта резидента в базе. Объект отрисовывается на своем месте и мигает при таскании. Копия таскаямая по экрану пропадает. Такой глюк у меня был когда я хотел делать что-то с объектом над которым что-то таскают в custom osnap mode.
2) Если объект содержит AcDbHardPointerId-ы, которые при клонировании не правильно транслируются в силу каких-то причин (не помню точно как у меня это случилось), то объект не может создать свою копию и по экрану не таскается при копи, пасте.
3) Еще один раз был просто глюк. Написал метод getOsnapPoints - :( не зовется. Убил - пересобрал, потом снова вставил пересобрал - заработало. Хрен знает в чем была ошибка, но точно не в ошибке сигнатуры метода - т.к. сделал копию - убил, пересобрал, копию вставил, пересобрал...

Re: Исчезли точки привязки

Кстати по второй причине - у тебя могут пропадать ссылки на объекты, которые учавствуют в выдаче оснап точек, а - когда ты пытаешься сделать копию, то она не делается.
А!!! Вспомнил что случалось у меня во втором случае. Были ссылки на объект через AcDbHardPointerId, потом эти объекты убивались -типа erase, но AcDbHardPointerId - ссылались на erased объекты в текущей сессии т.к. в базе они все таки были, но оснапы не выдавались и не копировался т.к. при getOsnapPoints - обрабатывался не правильно, а deepClone не работал т.к. проверяет что иерархия цельная и объекты не удалены.
Если ты говоришь, что у тебя таких точек тысячи, то их явно ставили не руками и это не просто точки...

Re: Исчезли точки привязки

Спасибо, посмотрю, AcDbHardPointerId там действительно используются. Будем копать smile

Re: Исчезли точки привязки

Ага, проблему решил. Дело было не в AcDbHardPointerId, но всё-таки в функциях In/Out smile