是否可以序列化 AutoCAD 实体

Can AutoCAD entities be serialized?

本文关键字:AutoCAD 实体 序列化 是否      更新时间:2023-10-16

使用 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 序列化函数。