是否可以序列化 AutoCAD 实体
Can AutoCAD entities be serialized?
使用 AutoCAD 2010 的 ObjectARX (C++),AutoCAD 实体是否可以序列化?
我们需要将序列化的实体保存在数据库(Oracle,PostgreSQL等,而不是AcDbDatabase)的字段中。 如果你告诉我如何将它们保存在磁盘中,就像这样:
AcDbEntity * entity;
...
std::ofstream ofs("c:\filename.fil", std::ios::binary);
ofs.write((char *)(entity), sizeof(entity));
ofs.close();
谢谢
简短的回答是"否"。AutoCAD 数据库对象包括对其他对象的引用,因此,如果不同时确保所有引用对象的存在,就无法反序列化离散对象。
从技术上讲,通过实现包含必要的对象间引用管理基础结构的自定义 AcDbDwgFiler,然后通过 AcDbObject::d wgOut() 将对象序列化到文件管理器,并通过 AcDbObject::d wgIn() 反序列化它们,可以对互连对象的整个层次结构完成所描述的内容。但是,在将整个数据库序列化为.dwg文件时,您最终实际上复制了AutoCAD已经执行的操作,因此在大多数情况下,它违背了目的。
同意欧文的观点,但如果您不想将数据保存在 dwg 文件中,可能还有另一种解决方案。请注意,ObjectArx 支持MFC,MFC有自己的序列化机制。您可以从 AcDbEntity 和 MFC CObject 派生实体。使用 MFC 的机制序列化数据。如果重写 MFC 的序列化方法,则可以轻松地将数据序列化到数据库中。为此,您必须在 dwgin 和 dwgout 中调用 MFC 序列化函数。
相关文章:
- 使用指针重新分析实体
- 如何使用tinyxml2从XML加载父实体和子实体
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何在 ECS 模型中组织实体?
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 有关纯 ECS(实体组件系统)和更新系统的问题
- 返回模板化实体的函数的概念
- 在 C++ 中编写解析器来解析给定的 HTML 实体
- 无法将错误分配给成员函数中"类型的实体"
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- "const wchar_t *" 类型的值不能用于初始化类型 "const PWSTR" 的实体
- Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体
- 不能将 "void *" 类型的值分配给类型 "RANDOMSTRUCT *" 的实体
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- 如何递归删除Qt3DWindow根实体中的所有节点?
- 在C++中将系统与ECS(实体组件系统)管理器分离
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- 是否可以序列化 AutoCAD 实体