xdata и удаленные элементы

Автор Тема: xdata и удаленные элементы  (Прочитано 2280 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн alzАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
xdata и удаленные элементы
« : 19-06-2023, 11:04:10 »
Играюсь сейчас со связыванием объектов через xdata, объекты связываются перекрестно, то есть у двух объектов в xdata записаны хендлы друг друга, при удалении одного из объектов хотел удалять его данные из xdata оставшегося, то есть вылавливаем событие Database.ObjectErased проверяем есть ли у удаленного объекта xdata, считываем оттуда хендл парного объекта по нему открываем парный объект и удаляем из его xdata упоминания об удаленном объекте, это вроде бы как та логика, которую я хотел сделать, все застопорилось на том, что у удаляемого объекта отсутствует xdata, видимо она удаляется раньше чем происходит перехват события, как думаете, какие тут возможны варианты? Проверки на присутствие объекта делаются так же в других местах, но все же интересно, есть ли смысл перехватывать событие удаления или тут без вариантов?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: xdata и удаленные элементы
« Ответ #1 : 19-06-2023, 19:44:18 »
На какое событие подписываешься?
Хранить хендлы так себе затея - при копировании в другой документ, вставку чертежа как внешнюю ссылку (или даже не менее стандартный _.wblock) хендлы меняются.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alzАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: xdata и удаленные элементы
« Ответ #2 : 20-06-2023, 09:51:39 »
На какое событие подписываешься?
.ObjectErased
Хранить хендлы так себе затея - при копировании в другой документ, вставку чертежа как внешнюю ссылку (или даже не менее стандартный _.wblock) хендлы меняются.
Ну я же говорю, играюсь, это собственно метки в виде текстов или мультивыносок, динамически связанных в примитивами, не вижу смысла прям так держаться за хендл при переносе в другой чертеж, не настолько нужная связь, но в целом структура связи позволяет при потере хендлов восстановить связи через геометрические параметры объектов
Собственно пример связки xdata событий и jig


Отмечено как Решение alz 20-06-2023, 14:46:20

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 384
  • Карма: 21
Re: xdata и удаленные элементы
« Ответ #3 : 20-06-2023, 12:22:41 »
Играюсь сейчас со связыванием объектов через xdata, объекты связываются перекрестно, то есть у двух объектов в xdata записаны хендлы друг друга, при удалении одного из объектов хотел удалять его данные из xdata оставшегося, то есть вылавливаем событие Database.ObjectErased проверяем есть ли у удаленного объекта xdata, считываем оттуда хендл парного объекта по нему открываем парный объект и удаляем из его xdata упоминания об удаленном объекте, это вроде бы как та логика, которую я хотел сделать, все застопорилось на том, что у удаляемого объекта отсутствует xdata, видимо она удаляется раньше чем происходит перехват события, как думаете, какие тут возможны варианты? Проверки на присутствие объекта делаются так же в других местах, но все же интересно, есть ли смысл перехватывать событие удаления или тут без вариантов?
Решал данную задачу через ObjectOverrule - public override void Erase(DBObject dbObject, bool erasing).

Хранить хендлы так себе затея
Как предлагаете хранить информацию об объектах?

при копировании в другой документ
Пока всё работало нормально, при копировании.

Оффлайн alzАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: xdata и удаленные элементы
« Ответ #4 : 20-06-2023, 12:44:46 »
ObjectOverrule - public override void Erase(DBObject dbObject, bool erasing).
Как много сложных незнакомых слов, буду гуглить))

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 384
  • Карма: 21
Re: xdata и удаленные элементы
« Ответ #5 : 20-06-2023, 14:28:17 »
Как много сложных незнакомых слов, буду гуглить))

Можно вот это почитать, для примера. https://www.keanw.com/2011/12/adding-an-objectoverrule-to-watch-for-erasure-of-autocad-objects-using-net.html

Оффлайн alzАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: xdata и удаленные элементы
« Ответ #6 : 20-06-2023, 14:48:00 »
Попробовал, да, этим методом выловленные объекты все еще имеют xdata и есть возможность с этим работать, блин, чет я все больше напоминаю сам себе папуаса, сделай что-то странное и оно как-то работает, но нифига не понимаю что это вообще такое и как оно это делает)

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 384
  • Карма: 21
Re: xdata и удаленные элементы
« Ответ #7 : 20-06-2023, 14:54:17 »
Попробовал, да, этим методом выловленные объекты все еще имеют xdata и есть возможность с этим работать, блин, чет я все больше напоминаю сам себе папуаса, сделай что-то странное и оно как-то работает, но нифига не понимаю что это вообще такое и как оно это делает)
Ну я так изучал API AutoCAD. Со временем приходит осознание архитектуры, как всё работает и что гуглить. Хотя мне пока тяжело работать с C++ модулями.