objectarx自定义实体dwgOutFields和dwgInFields如何存储和读取含有类指针的自定义结构体,类中有vector和字符串、double等数据
时间: 2024-02-03 14:13:34 浏览: 189
在使用 ObjectARX 开发 AutoCAD 插件时,我们可以使用 `dwgOutFields` 和 `dwgInFields` 函数来实现数据的存储和读取。对于含有类指针的自定义结构体,我们需要注意以下几点:
1. 类指针本身不能被直接存储到 DWG 文件中。我们需要对指针指向的对象进行序列化,并将序列化后的数据存储到 DWG 文件中;在读取数据时,根据序列化后的数据重新构造对象,并将指针指向该对象。
2. 对于 vector 和字符串等 STL 类型,可以使用 `dwgOutFields` 和 `dwgInFields` 函数的重载版本来存储和读取。例如,对于一个包含 vector<string> 类型成员变量的自定义结构体,可以按照如下方式进行存储和读取:
```c++
void MyEntity::dwgOutFields(AcDbDwgFiler* filer) const
{
// 调用基类函数
AcDbEntity::dwgOutFields(filer);
// 存储 vector<string> 成员变量
int count = myStrings.size();
filer->writeInt32(count);
for (int i = 0; i < count; i++)
{
filer->writeString(myStrings[i].c_str());
}
}
Acad::ErrorStatus MyEntity::dwgInFields(AcDbDwgFiler* filer)
{
// 调用基类函数
Acad::ErrorStatus es = AcDbEntity::dwgInFields(filer);
if (es != Acad::eOk) { return es; }
// 读取 vector<string> 成员变量
int count;
filer->readInt32(&count);
myStrings.clear();
for (int i = 0; i < count; i++)
{
char* str;
filer->readString(&str);
myStrings.push_back(str);
acutDelString(str);
}
return Acad::eOk;
}
```
3. 对于 double 等基本类型,可以直接使用 `dwgOutFields` 和 `dwgInFields` 函数进行存储和读取。
综上所述,对于含有类指针的自定义结构体,我们需要将指针指向的对象进行序列化,并使用重载版本的 `dwgOutFields` 和 `dwgInFields` 函数进行存储和读取;同时,对于 vector 和字符串等 STL 类型,也需要使用重载版本的函数进行存储和读取。
阅读全文