О методе AcDbObject::releaseExtensionDictionary
В чем разница между вызовом метода erase() непосредственно для словаря расширения (extension dictionary) и вызовом releaseExtensionDictionary() для объекта-владельца?Это API предоставлено для возможности полного удаления словаря расширения объекта. Этот метод позволяет создавать полностью новый словарь расширения вместо того, чтобы очищать существующий в текущей сессии редактирования чертежа.
Фундаментальное различие между вызовом releaseExtensionDictionary() для родительского объекта и вызовом erase() для словаря расширения становится совершенно очевидным если посмотреть на результаты вызова двух других методов работы со словарём расширения: extensionDictionary и createExtensionDictionary. Рассмотрим следующие две последовательности:
(Мы подразумеваем, что pO инициализирован указателем на корректный объект, содержащийся в базе и открытый для записи, имеющий словарь расширения. У нас также есть корректный указатель pED на словарь расширения, открытый для записи.)
1.
- pO->releaseExtensionDictionary(); // возвращает Acad::eOk
- pO->extensionDictionary(); // возвращает AcDbObjectId::kNull
- pO->createExtensionDictionary(); // возвращает Acad::eOk
2.
- pED->erase(); // возвращает Acad::eOk
- pO->extensionDictionary(); // возвращает корректный AcDbObjectId
- pO->createExtensionDictionary(); // возвращает ошибку: eAlreadyInDatabase
Другими словами вызов erase() для словаря расширения не разрывает связи между объектом и его словарём расширения. Вы можете получить доступ к его словарю и позднее и даже восстановить (unerase) его. Отметим, что если вы сохраните базу данных, то удалённый словарь расширения не будет сохранён и будет возвращен AcDbObject::kNull при вызове extensionDictionary() в сохранённой базе.
releaseExtensionDictionary не только удаляет словарь расширения, но и разрывает связь между объектом и его словарям расширения.
Источник: http://adndevblog.typepad.com/autocad/2013/01/about-acdbobjectreleaseextensiondictionary.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2901
Опубликовано 05.08.2015