objectarx二次开发自定义实体,实体数据是一个结构体tagGmyMapTable,结构体tagGmyMapTable中包含另外一个结构体tagGeometryWithID geoID、一个类指针ElmGraphic* geoData、一个bool变量isBatchDrawBroadWise,而结构体tagGeometryWithID保存的是一个unsigned long long int elementID数据和一个vector<wstring> exDataVec,类指针geoData中有一个vector<shared_ptr<CBaseGeometry>> ptrgeos, CBaseGeometry是个基类,使用时会根据CBaseGeometry中的int型type的参数判断强制转换成不同子类进行绘制,子类中的数据也不相同,CBaseGeometry中包含了vector<AcGePoint3D> Pts以及字符串、int等数据,请问如何实现dwgOutFields和dwgInfields函数读写数据
时间: 2024-02-12 21:07:10 浏览: 23
要实现dwgOutFields和dwgInFields函数读写数据,需要遵循以下步骤:
1. 首先,在tagGmyMapTable结构体中添加dwgOutFields和dwgInFields两个函数的声明,如下所示:
```
struct tagGmyMapTable
{
tagGeometryWithID geoID;
ElmGraphic* geoData;
bool isBatchDrawBroadWise;
void dwgOutFields(AcDbDwgFiler* pFiler) const;
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
};
```
2. 在类指针ElmGraphic* geoData所指向的类中,也要添加dwgOutFields和dwgInFields两个函数的声明:
```
class ElmGraphic
{
public:
vector<shared_ptr<CBaseGeometry>> ptrgeos;
void dwgOutFields(AcDbDwgFiler* pFiler) const;
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
};
```
3. 在dwgOutFields函数中,需要将结构体tagGmyMapTable中的数据写入到pFiler中,代码如下:
```
void tagGmyMapTable::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(&geoID);
pFiler->writeItem(&isBatchDrawBroadWise);
// 调用类指针ElmGraphic* geoData所指向的类的dwgOutFields函数
geoData->dwgOutFields(pFiler);
}
```
4. 在dwgInFields函数中,需要从pFiler中读取数据,并将其赋值给结构体tagGmyMapTable中的对应成员变量,代码如下:
```
Acad::ErrorStatus tagGmyMapTable::dwgInFields(AcDbDwgFiler* pFiler)
{
Acad::ErrorStatus es;
if ((es = pFiler->readItem(&geoID)) != Acad::eOk) return es;
if ((es = pFiler->readItem(&isBatchDrawBroadWise)) != Acad::eOk) return es;
// 调用类指针ElmGraphic* geoData所指向的类的dwgInFields函数
geoData = new ElmGraphic();
es = geoData->dwgInFields(pFiler);
return es;
}
```
5. 在类指针ElmGraphic* geoData所指向的类中,同样需要实现dwgOutFields和dwgInFields函数,代码如下:
```
void ElmGraphic::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(&ptrgeos);
// 将类指针ElmGraphic* geoData所指向的类中的数据按需要写入pFiler中
}
Acad::ErrorStatus ElmGraphic::dwgInFields(AcDbDwgFiler* pFiler)
{
Acad::ErrorStatus es;
if ((es = pFiler->readItem(&ptrgeos)) != Acad::eOk) return es;
// 从pFiler中读取数据,并将其赋值给类指针ElmGraphic* geoData所指向的类中的对应成员变量
return Acad::eOk;
}
```
需要注意的是,以上代码只是一个框架,具体的实现还需要根据数据类型和需要保存的数据进行相应的修改。