This code sample shows how you could write a dxfInFields() function that is order-dependent.
Acad::ErrorStatus AsdkPoly::dxfInFields(AcDbDxfFiler* filer) { assertWriteEnabled(); if ((AcDbCurve::dxfInFields(filer) != Acad::eOk) || !filer->atSubclassData("AsdkPoly") ) { return filer->filerStatus(); } try { struct resbuf rb; // Object Version Adesk::Int16 version; filer->readItem(&rb); if (rb.restype != AcDb::kDxfInt16) throw AcDb::kDxfInt16; version = rb.resval.rint; if (version > VERSION) return Acad::eMakeMeProxy; if (version == 1) { AcGePoint3d cent,sp; filer->readItem(&rb); if (rb.restype != AcDb::kDxfXCoord) throw AcDb::kDxfXCoord cent = asPnt3d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfXCoord + 1) throw AcDb::kDxfXCoord + 1; sp = asPnt3d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfInt32) throw AcDb::kDxfInt32; mNumSides = rb.resval.rlong; filer->readItem(&rb); if (rb.restype != AcDb::kDxfNormalX) throw AcDb::kDxfNormalX mPlaneNormal = asVec3d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfText) throw AcDb::kDxfText; setName(rb.resval.rstring); filer->readItem(&rb); if (rb.restype != kDxfHardPointerId) throw AcDb::kDxfHardPointerId; acdbGetObjectId(mTextStyle, rb.resval.rlname); // Convert data from old format. acdbWcs2Ecs(asDblArray(cent),asDblArray(cent), asDblArray(mPlaneNormal),Adesk::kFalse); mCenter.set(cent.x,cent.y); mElevation = cent.z; acdbWcs2Ecs(asDblArray(sp),asDblArray(sp), asDblArray(mPlaneNormal),Adesk::kFalse); mStartPoint.set(sp.x,sp.y); assert(mElevation == sp.z); } else if (version == 2) { filer->readItem(&rb); if (rb.restype != AcDb::kDxfXCoord) throw AcDb::kDxfXCoord; mCenter = asPnt2d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfXCoord + 1) throw AcDb::kDxfXCoord + 1; mStartPoint = asPnt2d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfInt32) throw AcDb::kDxfInt32 mNumSides = rb.resval.rlong; filer->readItem(&rb); if (rb.restype != AcDb::kDxfNormalX) throw AcDb::kDxfNormalX; mPlaneNormal = asVec3d(rb.resval.rpoint); filer->readItem(&rb); if (rb.restype != AcDb::kDxfText) throw AcDb::kDxfText setName(rb.resval.rstring); filer->readItem(&rb); if (rb.restype != AcDb::kDxfHardPointerId) throw AcDb::kDxfHardPointerId; acdbGetObjectId(mTextStyle, rb.resval.rlname); filer->readItem(&rb); if (rb.restype != AcDb::kDxfReal) throw AcDb::kDxfReal; mElevation = rb.resval.rreal; } else assert(false); } catch (AcDb::DxfCode code) { filer->pushBackItem(); filer->setError(Acad::eInvalidDxfCode, "\nError: expected group code %d", code); return filer->filerStatus(); } }