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

ADN Club => ObjectARX => Тема начата: lom0v от 26-03-2019, 02:32:59

Название: Можно ли проверить по id объекта открыт ли объект
Отправлено: lom0v от 26-03-2019, 02:32:59
Ситуация: есть AcDbObjectIdArray с id-ами объектов. Есть подозрение, что какие-то объекты не были вовремя закрыты.

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

Что делает метод AcDbObjectId::isResident()? Пробовал использовать его, но с состоянием открыт/закрыт как-то не коррелирует.
В документации только скупая строчка:
Цитировать
This function returns true if the object associated with this objectId is resident in memory.
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: Александр Ривилис от 26-03-2019, 02:38:00
Можно ли как-то проверить, что объект не закрыт только по id объекта?
Нет. Поэтому пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: lom0v от 26-03-2019, 04:07:53
Спасибо.

пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
А если это должно работать под транзакцией?
AcDbObjectPointerBase использует acdbOpenObject() для открытия объекта и close() в деструкторе, точнее в AcDbObjectPointerBase<T_OBJECT>::closeInternal(), для закрытия объекта. А под транзакциями это не пройдёт.
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: Александр Ривилис от 26-03-2019, 12:08:17
А если это должно работать под транзакцией?
А без транзакции никак?
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: lom0v от 26-03-2019, 14:09:15
А без транзакции никак?
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: Александр Ривилис от 26-03-2019, 14:15:59
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.
Могу лишь посочувствовать.
Название: Re: Можно ли проверить по id объекта открыт ли объект
Отправлено: Александр Ривилис от 26-03-2019, 14:20:34
А если это должно работать под транзакцией?
Если объект открыт в транзакции, то AcDbTransactionManager::getAllObjects должен вернуть и его.