Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以序列化AutoCAD图元?_C++_Autocad_Objectarx - Fatal编程技术网

C++ 是否可以序列化AutoCAD图元?

C++ 是否可以序列化AutoCAD图元?,c++,autocad,objectarx,C++,Autocad,Objectarx,使用ObjectARX(C++)for AutoCAD 2010,可以序列化AutoCAD图元吗 我们需要将序列化实体保存在数据库(Oracle、PostgreSQL等,而不是AcDbDatabase)的字段中。如果您告诉我如何将它们保存在磁盘中,可以这样做: AcDbEntity * entity; ... std::ofstream ofs("c:\\filename.fil", std::ios::binary); ofs.write((char *)(entity), sizeof(en

使用ObjectARX(C++)for AutoCAD 2010,可以序列化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::dwgOut()将对象序列化到文件服务器,并通过AcDbObject::dwgIn()将其反序列化,可以对互连对象的整个层次结构进行描述。但是,将整个数据库序列化为.dwg文件时,实际上会重复AutoCAD已经完成的工作,因此在大多数情况下,它都无法达到此目的。

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


从技术上讲,通过实现一个自定义的AcDbDwgFiler(其中包括必要的对象间引用管理基础结构),然后通过AcDbObject::dwgOut()将对象序列化到文件服务器,并通过AcDbObject::dwgIn()将其反序列化,可以对互连对象的整个层次结构进行描述。但是,将整个数据库序列化为.dwg文件时,实际上会复制AutoCAD已经完成的工作,因此在大多数情况下,这会破坏其目的。

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

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