在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();
由于
答案 0 :(得分:3)
简短的回答是“不”。 AutoCAD数据库对象包括对其他对象的引用,因此您不能在不确保存在所有引用对象的情况下反序列化离散对象。
从技术上讲,通过实现包含必要的对象间引用管理基础结构的自定义AcDbDwgFiler,然后通过AcDbObject :: dwgOut()将对象序列化到文件管理器并进行反序列化,可以对整个互连对象层次结构进行描述它们通过AcDbObject :: dwgIn()。但是,在将整个数据库序列化为.dwg文件时,您最终会复制AutoCAD已经执行的操作,因此在大多数情况下它会失败。
答案 1 :(得分:0)
同意Owen,但如果您不想在dwg文件中保存数据,可能还有其他解决方案。 请注意,ObjectArx支持MFC,MFC有自己的序列化机制。您可以从AcDbEntity和MFC CObject派生您的实体。使用MFC机制序列化您的数据。 如果您覆盖MFC的序列化方法,则可以轻松地将数据序列化到数据库中。 为此,您必须在dwgin和dwgout中调用MFC序列化函数。