0

使用 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();

谢谢

4

2 回答 2

3

最简洁的答案是不”。AutoCAD 数据库对象包括对其他对象的引用,因此您不能反序列化离散对象而不确保所有引用对象的存在。

从技术上讲,您所描述的可以通过实现一个包含必要的对象间引用管理基础结构的自定义 AcDbDwgFiler 来为整个互连对象层次结构完成,然后通过 AcDbObject::dwgOut() 将对象序列化到文件管理器并通过 AcDbObject 反序列化它们::dwgIn()。但是,在将整个数据库序列化为 .dwg 文件时,您最终基本上复制了 AutoCAD 已经执行的操作,因此在大多数情况下它无法达到目的。

于 2012-10-18T04:59:05.857 回答
0

同意 Owen,但如果您不想将数据保存在 dwg 文件中,可能还有另一种解决方案。注意 ObjectArx 支持 MFC,MFC 有自己的序列化机制。您可以从 AcDbEntity 和 MFC CObject 派生您的实体。使用 MFC 的机制来序列化您的数据。如果您覆盖 MFC 的序列化方法,您可以轻松地将数据序列化到数据库中。为此,您必须在 dwgin 和 dwgout 中调用 MFC 序列化函数。

于 2013-03-24T14:36:38.357 回答