Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 01-09-2014, 19:43:57

Название: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Дмитрий Загорулькин от 01-09-2014, 19:43:57
Здравствуйте!
Использую DrawableOwerrule для переопределения отображения объекта. Но привязка к объекту все равно идет по "старой" геометрии. Возникло желание переопределить старый объект привязки на новый. В сети нашел примеры только как добавить точки привязки к объектам:
http://drive-cad-with-code.blogspot.ru/2013/06/customizing-object-snap-take-one-using.html
http://adndevblog.typepad.com/autocad/2013/06/overruling-osnaps-of-blockreference.html
Интересно, возможно ли как-то указать в каком-то свойстве, что отныне объект привязки - объект, который отображается? Или, может быть, есть какой-то другой способ исправить ситуацию?
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Александр Ривилис от 01-09-2014, 20:12:50
Я видимо не понял о чем ты спрашиваешь. Если ты переопределяешь GetObjectSnapPoints, то привязки должны браться из неё. А если нужно запретить использовать стандартные для примитива точки привязки, то нужно вернуть false из IsContentSnappable.
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Дмитрий Загорулькин от 01-09-2014, 21:28:57
Да я пока только сделал DrawableOverrule, Osnap не трогал - не знаю что сделать. В DrawableOverrule я полностью по своему перерисовал примитив, то есть, исходная геометрия объекта не совпадает с моей. Но привязка типа "ближайшая", "конточка" и т.п. цепляются к старой геометрии. Да, я могу с помощью OsnapOverrule задать какие-то точки привязки, но их сперва нужно вычислить... А как задать привязку типа "ближайшая" к новой линии, дуге, сплайну?
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Дмитрий Загорулькин от 02-09-2014, 10:34:39
В качестве простого примера.
Код взял тут: http://spiderinnet1.typepad.com/blog/2012/11/autocad-overrule-net-create-centerline-circle.html
Вот видео работы привязок (работают как будто добавленных линий нет): https://screencast.autodesk.com/main/details/2f4b9bc1-69de-4cf0-ae41-c3fd703e7a84
Как сделать, чтобы работала привязка типа "ближайшая" к добавленным к окружности осевым линиям?
На всякий случай прикладываю собранный проект в VS2010.
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Александр Ривилис от 02-09-2014, 11:47:58
В приведенном тобой примере только DrawableOverrule, а для того чтобы переопределить привязки нужно использовать еще и OsnapOverrule, в методе которого GetObjectSnapPoints ты можешь вызвать метод GetObjectSnapPoints примитивов, которые ты используешь в рисовании. Если речь идёт о привязке ближайшая и пользовался ты примитивами типа кривая (DBCurve), то можешь сначала найти к какой из кривых переданная точка ближе и затем вызвать GetObjectSnapPoints именно для этой кривой.
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Дмитрий Загорулькин от 02-09-2014, 13:08:46
Идею понял, попробовал - получилось!
https://screencast.autodesk.com/main/details/1699a340-fe1c-4e11-a1a0-0dd4f2a6496f
Спасибо большое!
Название: Re: Drawable+OsnapOverrule - как сделать привязки к "перерисованному" объекту?
Отправлено: Александр Ривилис от 02-09-2014, 13:31:54
Выглядит очень симпатично. :)