objectarx自定义实体dwgOutFields和dwgInFields如何存储和读取复杂的自定义结构体数组
时间: 2024-02-01 18:16:39 浏览: 164
在 ObjectARX 中,可以使用 dwgOutFields 和 dwgInFields 函数将自定义实体的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。这些函数支持的数据类型包括基本数据类型、字符串、数组以及自定义结构体。
如果要存储和读取自定义结构体数组,可以按照以下步骤操作:
1. 在自定义结构体中添加 dwgOutFields 和 dwgInFields 函数,用于存储和读取结构体中的数据。
2. 在自定义实体的 dwgOutFields 和 dwgInFields 函数中,依次调用结构体数组中每个元素的 dwgOutFields 和 dwgInFields 函数,将每个元素的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。
以下是一个示例代码:
```cpp
struct MyData {
int id;
double value;
// 添加 dwgOutFields 和 dwgInFields 函数
void dwgOutFields(AcDbDwgFiler* filer) const {
filer->writeInt32(id);
filer->writeDouble(value);
}
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer) {
filer->readInt32(&id);
filer->readDouble(&value);
return filer->filerStatus();
}
};
class MyEntity : public AcDbEntity {
public:
ACDB_DECLARE_MEMBERS(MyEntity);
// 添加 dwgOutFields 和 dwgInFields 函数
void dwgOutFields(AcDbDwgFiler* filer) const override {
AcDbEntity::dwgOutFields(filer);
filer->writeInt32(m_data.size());
for (const auto& data : m_data) {
data.dwgOutFields(filer);
}
}
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer) override {
Acad::ErrorStatus es;
if ((es = AcDbEntity::dwgInFields(filer)) != Acad::eOk)
return es;
int count;
filer->readInt32(&count);
for (int i = 0; i < count; i++) {
MyData data;
data.dwgInFields(filer);
m_data.push_back(data);
}
return filer->filerStatus();
}
private:
std::vector<MyData> m_data;
};
```
在上面的示例代码中,MyData 结构体中添加了 dwgOutFields 和 dwgInFields 函数,用于存储和读取结构体中的数据。MyEntity 实体中的 dwgOutFields 和 dwgInFields 函数依次调用了结构体数组中每个元素的 dwgOutFields 和 dwgInFields 函数,将每个元素的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。
阅读全文