ADN Club > ObjectARX
Хранение данных и dwgInFields/dwgOutFields
Олег:
Добрый день.
Немного запутался. Помогите пожалста понять.
Пытаюсь разобраться в сохранении и восстановлении информации при записи и открытии файла.
В основе код из примера "custobj.cpp". В этом при мере созданный класс добавляется в словарь.
Сам по себе он просто есть ничего не рисует и не делает. И при открытии/закрытии файла вызываются функции этого класса dwgInFields/dwgOutFields.
Еще смотрю старые примеры, найденные здесь, "ProgProfile" и "TestDbx".
Здесь созданные объекты чтото рисуют. Их добавляют в базу, а в словарь НЕ добавляют. Почему ??
Если в первом примере ( custobj.cpp ) кроме добавления в словарь еще добавить в базу
--- Код - C++ [Выбрать] ---AcDbDatabase database = acdbHostApplicationServices()->workingDatabase();Acad::ErrorStatus es;if ((es = database.addAcDbObject(custobj)) != Acad::eOk) return; то после этого dwgInFields/dwgOutFields не вызываются.
Задача создаваемого класса отслеживать некие изменения в чертеже автоматически и хранить у себя эту информацию ( некое число ). И когда чертеж откроют то информация восстановится.
Нужно его в базу добавлять или не нужно? !!!!!!!!!
В перспективе будет некая иерархия классов и всю информацию нужно сохранять и восстанавливать.
Александр Ривилис:
--- Цитата: Олег от 08-02-2024, 15:14:02 ---В этом при мере созданный класс добавляется в словарь.
--- Конец цитаты ---
В какой словарь?
--- Цитата: Олег от 08-02-2024, 15:14:02 ---Если в первом примере ( custobj.cpp ) кроме добавления в словарь еще добавить в базу
Код - C++ [Выбрать]
AcDbDatabase database = acdbHostApplicationServices()->workingDatabase();
Acad::ErrorStatus es;
if ((es = database.addAcDbObject(custobj)) != Acad::eOk)
return;
то после этого dwgInFields/dwgOutFields не вызываются.
--- Конец цитаты ---
--- Цитировать ---This function does not establish ownership. If the object pointed to by pObj is not set up with an owner, then it will not be written out during a save, DXFOUT, or any other process that traverses the database ownership tree.
--- Конец цитаты ---
Олег:
--- Цитата: Александр Ривилис от 08-02-2024, 15:54:14 ---В какой словарь?
--- Конец цитаты ---
AcDbDictionary
--- Код - C# [Выбрать] --- AcDbDictionary *pNamedobj; acdbHostApplicationServices()->workingDatabase()->getNamedObjectsDictionary(pNamedobj, AcDb::kForWrite); // Check to see if the dictionary we want to create is // already present. If not, create it and add // it to the named object dictionary. // AcDbDictionary *pDict; if (pNamedobj->getAt(_T("ASDK_DICT"), (AcDbObject*&) pDict, AcDb::kForWrite) == Acad::eKeyNotFound) { pDict = new AcDbDictionary; AcDbObjectId DictId; pNamedobj->setAt(_T("ASDK_DICT"), pDict, DictId); } pNamedobj->close(); if (pDict) { // Create new objects to add to the new dictionary, // add them, then close them. // AsdkMyClass *pObj1 = new AsdkMyClass(1); AsdkMyClass *pObj2 = new AsdkMyClass(2); AcDbObjectId rId1, rId2; pDict->setAt(_T("OBJ1"), pObj1, rId1); pDict->setAt(_T("OBJ2"), pObj2, rId2); pObj1->close(); pObj2->close(); pDict->close(); }
Олег:
--- Цитата: Александр Ривилис от 08-02-2024, 15:54:14 ---This function does not establish ownership. If the object pointed to by pObj is not set up with an owner, then it will not be written out during a save, DXFOUT, or any other process that traverses the database ownership tree.
--- Конец цитаты ---
Где можно почитать что это значит про все эти Ownership и Pointer ( Soft and Hard ) ?
И, если не сложно, в двух(трех) словах о чем это.
Спасибо.
Александр Ривилис:
--- Цитата: Олег от 08-02-2024, 16:50:41 ---Где можно почитать что это значит про все эти Ownership и Pointer ( Soft and Hard ) ?
И, если не сложно, в двух(трех) словах о чем это.
Спасибо.
--- Конец цитаты ---
В ObjectARX SDK docs. Конкретно в ObjectARX Developer Guide.
Навигация
Перейти к полной версии