objectarx 保存
时间: 2023-09-30 11:01:39 浏览: 183
在ObjectARX中,当我们需要保存自定义实体对象时,我们需要重写一些函数以实现数据的存储和读取。根据引用中的信息,我们需要重写以下函数:
- dwgOutFields:将自定义实体对象写入DWG文件时调用的函数。
- dwgInFields:从DWG文件中读取自定义实体对象时需要访问的函数。
- 如果还需要保存或读取DXF文件,则还需要重写以下函数:
- dxfOutFields:将自定义实体对象写入DXF文件时调用的函数。
- dxfInFields:从DXF文件中读取自定义实体对象时需要访问的函数。
下面是一个创建三角形自定义实体对象的示例,它展示了如何实现dwgOutFields和dwgInFields函数。根据引用和引用提供的代码,可以看到在dwgOutFields函数中,我们首先保存父类的信息,然后保存对象版本号和其他成员变量的值。在dwgInFields函数中,我们首先读取父类的信息,然后读取对象版本号和成员变量的值。这样就完成了自定义实体对象的数据存储和读取。
```cpp
Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
// Save parent class information first.
Acad::ErrorStatus es = AcDbEntity::dwgOutFields(pFiler);
if (es != Acad::eOk)
return es;
// Object version number needs to be saved first.
if ((es = pFiler->writeUInt32(kCurrentVersionNumber)) != Acad::eOk)
return es;
// Output params
for (int i = 0; i < 3; i++) {
pFiler->writeItem(m_verts[i]);
}
return pFiler->filerStatus();
}
```
```cpp
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler)
{
assertWriteEnabled();
// Read parent class information first.
Acad::ErrorStatus es = AcDbEntity::dwgInFields(pFiler);
if (es != Acad::eOk)
return es;
// Object version number needs to be read first.
Adesk::UInt32 version = 0;
if ((es = pFiler->readUInt32(&version)) != Acad::eOk)
return es;
if (version > kCurrentVersionNumber)
return Acad::eMakeMeProxy;
// Read params
for (int i = 0; i < 3; i++) {
pFiler->readItem(&m_verts[i]);
}
return pFiler->filerStatus();
}
```
综上所述,这些函数可以帮助我们在ObjectARX中实现自定义实体对象的数据存储和读取。
阅读全文