{
mpFiler = filer;
return *this;
}
inline AcDbDwgFiler*
AcGeDwgFiler::dwgFiler()
{
return mpFiler;
}
Следующий фрагмент кода иллюстрирует выполнение нескольких функций.
Другие функции осуществлены тем же самым способом:
Acad::ErrorStatus AcGeDwgFiler::readBoolean(Adesk::Boolean* data)
{
return mpFiler ? mpFiler->readBoolean(data) : Acad::eNoDatabase;
}
Acad::ErrorStatus AcGeDwgFiler::writeBoolean(Adesk::Boolean data)
{
return mpFiler ?
mpFiler->writeBoolean(data) : Acad::eNoDatabase;
}
Следующий пример иллюстрирует постоянный класс, который использует AcGeExternalSurface. Код после объявления класса иллюстрирует чтение и запись внешнего поверхностного класса. В частности обратите внимание на это: AcGe:: gLibVersion написан из первого и впоследствии читать сначала до записи или чтения внешнего поверхностного класса:
class AcGeExternalCurve2d;
class AcGeExternalCurve3d;
class AcGeExternalBoundedSurface;
class AcGeExternalSurface;
class AcGePersistentXEnt : public AcDbObject
{
public:
ACRX_DECLARE_MEMBERS (AcGePersistentXEnt);
AcGePersistentXEnt ();
~AcGePersistentXEnt ();
Acad::ErrorStatus dwgOutFields (AcDbDwgFiler*) const;
Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);
AcGeExternalSurface* mpXSrf;
};
Реализация этого класса следующая:
ACRX_DXF_DEFINE_MEMBERS(
AcGePersistentXEnt, AcDbObject, 0,
GEPERSISTENT, "GeometryLib");
Acad::ErrorStatus
AcGePersistentXEnt::dwgOutFields(AcDbDwgFiler* filer) const
{
assertReadEnabled();
Acad::ErrorStatus stat = AcDbObject::dwgOutFields(filer);
if (stat != Acad::eOk)
{
ADS_ASSERT(0);
return stat;
}
// Only interested in a file filer.
//
if (filer->filerType() != AcDb::kFileFiler)
return stat;
AcGeDwgFiler geDwgFiler(filer);
stat = AcGeFileIO::outFields(
&geDwgFiler,
AcGe::gLibVersion);
if ((stat = AcGeFileIO::outFields(&geDwgFiler, *mpXSrf)) != Acad::eOk)
return stat;
return stat;
}
Acad::ErrorStatus
AcGePersistentXEnt::dwgInFields(AcDbDwgFiler* filer)
{
assertWriteEnabled();
Acad::ErrorStatus stat = AcDbObject::dwgInFields(filer);
if (stat != Acad::eOk)
{
ADS_ASSERT(0);
return stat;
}
// Only interested in a file filer.
//
if (filer->filerType() != AcDb::kFileFiler)
return stat;
AcGeDwgFiler geDwgFiler(filer);
AcGeLibVersion gelibVersion;
if ((stat = AcGeFileIO::inFields(&geDwgFiler, gelibVersion)) != Acad::eOk)
return stat;
acutPrintf("\n... Reading External Surface\n");
mpXSrf = new AcGeExternalSurface;
ADS_ASSERT(mpXSrf);
if ((stat = AcGeFileIO::inFields(&geDwgFiler, *mpXSrf, gelibVersion)) != Acad::eOk)
return stat;
return stat;
}