【问题标题】:Can AutoCAD entities be serialized?AutoCAD实体可以序列化吗?
【发布时间】:2013-03-24 22:36:38
【问题描述】:

在 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();

谢谢

【问题讨论】:

    标签: c++ autocad objectarx


    【解决方案1】:

    简短的回答是“不”。 AutoCAD 数据库对象包含对其他对象的引用,因此您无法反序列化离散对象,除非同时确保所有引用对象都存在。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-11-07
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 2011-12-22
        相关资源
        最近更新 更多