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

ADN Club => ObjectARX => Тема начата: Олег от 08-02-2024, 15:14:02

Название: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Олег от 08-02-2024, 15:14:02
Добрый день.
Немного запутался. Помогите пожалста понять.

Пытаюсь разобраться в сохранении и восстановлении информации при записи и открытии файла.
В основе код из примера "custobj.cpp".  В этом при мере созданный класс добавляется в словарь.
Сам по себе он просто есть ничего не рисует и не делает.  И при открытии/закрытии файла вызываются функции этого класса dwgInFields/dwgOutFields.

Еще смотрю старые примеры, найденные здесь, "ProgProfile" и "TestDbx".
Здесь созданные объекты чтото рисуют.  Их добавляют в базу, а в словарь НЕ добавляют.  Почему ??

Если  в первом примере ( custobj.cpp ) кроме добавления в словарь еще добавить в базу
Код - C++ [Выбрать]
  1. AcDbDatabase database = acdbHostApplicationServices()->workingDatabase();
  2. Acad::ErrorStatus es;
  3. if ((es = database.addAcDbObject(custobj)) != Acad::eOk)
  4.         return;
  5.  
то после этого dwgInFields/dwgOutFields не вызываются.

Задача создаваемого класса отслеживать некие изменения в чертеже автоматически  и хранить у себя эту информацию ( некое число ). И когда чертеж откроют то информация восстановится.
Нужно его в базу добавлять или не нужно?  !!!!!!!!!
В перспективе будет некая иерархия классов и всю информацию  нужно сохранять и восстанавливать.
Название: Re: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Александр Ривилис от 08-02-2024, 15:54:14
В этом при мере созданный класс добавляется в словарь.
В какой словарь?
Если  в первом примере ( 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.

Название: Re: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Олег от 08-02-2024, 16:41:31
В какой словарь?
AcDbDictionary
Код - C# [Выбрать]
  1.     AcDbDictionary *pNamedobj;
  2.     acdbHostApplicationServices()->workingDatabase()->getNamedObjectsDictionary(pNamedobj, AcDb::kForWrite);
  3.  
  4.     // Check to see if the dictionary we want to create is
  5.     // already present. If not, create it and add
  6.     // it to the named object dictionary.
  7.     //
  8.     AcDbDictionary *pDict;
  9.     if (pNamedobj->getAt(_T("ASDK_DICT"), (AcDbObject*&) pDict, AcDb::kForWrite) == Acad::eKeyNotFound)
  10.     {
  11.         pDict = new AcDbDictionary;
  12.         AcDbObjectId DictId;
  13.         pNamedobj->setAt(_T("ASDK_DICT"), pDict, DictId);
  14.     }
  15.     pNamedobj->close();
  16.  
  17.     if (pDict) {
  18.         // Create new objects to add to the new dictionary,
  19.         // add them, then close them.
  20.         //
  21.         AsdkMyClass *pObj1 = new AsdkMyClass(1);
  22.         AsdkMyClass *pObj2 = new AsdkMyClass(2);
  23.  
  24.         AcDbObjectId rId1, rId2;
  25.         pDict->setAt(_T("OBJ1"), pObj1, rId1);
  26.         pDict->setAt(_T("OBJ2"), pObj2, rId2);
  27.  
  28.         pObj1->close();
  29.         pObj2->close();
  30.         pDict->close();
  31.     }
  32.  
Название: Re: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Олег от 08-02-2024, 16:50:41
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 ) ?
И, если не сложно, в двух(трех)  словах о чем это.
Спасибо.
Название: Re: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Александр Ривилис от 08-02-2024, 17:34:36
Где можно почитать что это значит про все эти Ownership и Pointer ( Soft and Hard ) ?
И, если не сложно, в двух(трех)  словах о чем это.
Спасибо.
В ObjectARX SDK docs. Конкретно в ObjectARX Developer Guide.
Название: Re: Хранение данных и dwgInFields/dwgOutFields
Отправлено: Олег от 09-02-2024, 15:11:14
может кому-то понадобится

ObjectARX Ownership Example
https://help.autodesk.com/view/OARX/2022/ENU/?guid=GUID-157D8BA1-D8B8-4EBE-9B87-C3A8D25DB508