Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: alz от 19-06-2023, 11:04:10
-
Играюсь сейчас со связыванием объектов через xdata, объекты связываются перекрестно, то есть у двух объектов в xdata записаны хендлы друг друга, при удалении одного из объектов хотел удалять его данные из xdata оставшегося, то есть вылавливаем событие Database.ObjectErased проверяем есть ли у удаленного объекта xdata, считываем оттуда хендл парного объекта по нему открываем парный объект и удаляем из его xdata упоминания об удаленном объекте, это вроде бы как та логика, которую я хотел сделать, все застопорилось на том, что у удаляемого объекта отсутствует xdata, видимо она удаляется раньше чем происходит перехват события, как думаете, какие тут возможны варианты? Проверки на присутствие объекта делаются так же в других местах, но все же интересно, есть ли смысл перехватывать событие удаления или тут без вариантов?
-
На какое событие подписываешься?
Хранить хендлы так себе затея - при копировании в другой документ, вставку чертежа как внешнюю ссылку (или даже не менее стандартный _.wblock) хендлы меняются.
-
На какое событие подписываешься?
.ObjectErased
Хранить хендлы так себе затея - при копировании в другой документ, вставку чертежа как внешнюю ссылку (или даже не менее стандартный _.wblock) хендлы меняются.
Ну я же говорю, играюсь, это собственно метки в виде текстов или мультивыносок, динамически связанных в примитивами, не вижу смысла прям так держаться за хендл при переносе в другой чертеж, не настолько нужная связь, но в целом структура связи позволяет при потере хендлов восстановить связи через геометрические параметры объектов
Собственно пример связки xdata событий и jig
-
Играюсь сейчас со связыванием объектов через xdata, объекты связываются перекрестно, то есть у двух объектов в xdata записаны хендлы друг друга, при удалении одного из объектов хотел удалять его данные из xdata оставшегося, то есть вылавливаем событие Database.ObjectErased проверяем есть ли у удаленного объекта xdata, считываем оттуда хендл парного объекта по нему открываем парный объект и удаляем из его xdata упоминания об удаленном объекте, это вроде бы как та логика, которую я хотел сделать, все застопорилось на том, что у удаляемого объекта отсутствует xdata, видимо она удаляется раньше чем происходит перехват события, как думаете, какие тут возможны варианты? Проверки на присутствие объекта делаются так же в других местах, но все же интересно, есть ли смысл перехватывать событие удаления или тут без вариантов?
Решал данную задачу через ObjectOverrule - public override void Erase(DBObject dbObject, bool erasing).
Хранить хендлы так себе затея
Как предлагаете хранить информацию об объектах?
при копировании в другой документ
Пока всё работало нормально, при копировании.
-
ObjectOverrule - public override void Erase(DBObject dbObject, bool erasing).
Как много сложных незнакомых слов, буду гуглить))
-
Как много сложных незнакомых слов, буду гуглить))
Можно вот это почитать, для примера. https://www.keanw.com/2011/12/adding-an-objectoverrule-to-watch-for-erasure-of-autocad-objects-using-net.html
-
Попробовал, да, этим методом выловленные объекты все еще имеют xdata и есть возможность с этим работать, блин, чет я все больше напоминаю сам себе папуаса, сделай что-то странное и оно как-то работает, но нифига не понимаю что это вообще такое и как оно это делает)
-
Попробовал, да, этим методом выловленные объекты все еще имеют xdata и есть возможность с этим работать, блин, чет я все больше напоминаю сам себе папуаса, сделай что-то странное и оно как-то работает, но нифига не понимаю что это вообще такое и как оно это делает)
Ну я так изучал API AutoCAD. Со временем приходит осознание архитектуры, как всё работает и что гуглить. Хотя мне пока тяжело работать с C++ модулями.