ADN Club > ObjectARX

Хранение данных и dwgInFields/dwgOutFields

(1/2) > >>

Олег:
Добрый день.
Немного запутался. Помогите пожалста понять.

Пытаюсь разобраться в сохранении и восстановлении информации при записи и открытии файла.
В основе код из примера "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.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии