Можно ли проверить по id объекта открыт ли объект

Автор Тема: Можно ли проверить по id объекта открыт ли объект  (Прочитано 4002 раз)

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

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
Ситуация: есть AcDbObjectIdArray с id-ами объектов. Есть подозрение, что какие-то объекты не были вовремя закрыты.

Можно ли как-то проверить, что объект не закрыт только по id объекта?
Можно ли по id объекта выяснить в каком режиме (чтение/запись/уведомление) он открыт?
Как закрыть объект, если на него нет указателя? (Если объект открыт в kForNotify, то повторно его открыть, что бы получить указатель, через acdbOpenAcDbObject() не получится.)

Что делает метод AcDbObjectId::isResident()? Пробовал использовать его, но с состоянием открыт/закрыт как-то не коррелирует.
В документации только скупая строчка:
Цитировать
This function returns true if the object associated with this objectId is resident in memory.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно ли как-то проверить, что объект не закрыт только по id объекта?
Нет. Поэтому пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
Спасибо.

пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
А если это должно работать под транзакцией?
AcDbObjectPointerBase использует acdbOpenObject() для открытия объекта и close() в деструкторе, точнее в AcDbObjectPointerBase<T_OBJECT>::closeInternal(), для закрытия объекта. А под транзакциями это не пройдёт.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если это должно работать под транзакцией?
А без транзакции никак?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
А без транзакции никак?
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.
Могу лишь посочувствовать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если это должно работать под транзакцией?
Если объект открыт в транзакции, то AcDbTransactionManager::getAllObjects должен вернуть и его.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение