void FgfUtil::WriteRing(FdoIRing* ring, FdoByteArray ** outputStream) { if ( (NULL == ring) || (NULL == outputStream) ) throw FdoException::Create(FdoException::NLSGetMessage(FDO_NLSID(FDO_1_INVALID_INPUT_ON_CLASS_FUNCTION), L"FgfUtil::WriteRing", L"ring/outputSream")); // StartPoint FdoPtr<FdoICurveSegmentAbstract> curveSeg = ring->GetItem(0); FdoPtr<FdoIDirectPosition> startPos = curveSeg->GetStartPosition(); WriteDirectPosition(outputStream, startPos); // NumElements (segments) FdoInt32 numCurveSegs = ring->GetCount(); FGFUTIL_WRITE_INT32(outputStream, numCurveSegs); // CurveSegs for (FdoInt32 i=0; i<numCurveSegs; i++) { FdoPtr<FdoICurveSegmentAbstract> curveSeg = ring->GetItem(i); WriteCurveSegment(curveSeg, outputStream); } }
FdoFgfCurveString::FdoFgfCurveString( FdoFgfGeometryFactory * factory, FdoFgfGeometryPools * pools, FdoCurveSegmentCollection* curveSegs ) : FdoFgfGeometryImpl<FdoICurveString>(factory, pools) { if ( (NULL == curveSegs) || (0 == curveSegs->GetCount()) ) throw FdoException::Create(FdoException::NLSGetMessage(FDO_NLSID(FDO_1_INVALID_INPUT_ON_CLASS_CREATION), L"FdoFgfCurveString", L"curveSegs/factory")); FdoByteArray * newByteArray = FgfUtil::GetPoolsNoRef(m_pools)->GetByteArray(); // Geometrytype FGFUTIL_WRITE_INT32(&newByteArray, FdoGeometryType_CurveString); // Coordtype - from 1st element in curveSegs array FdoPtr<FdoICurveSegmentAbstract> firstCurve = curveSegs->GetItem(0); FdoInt32 dimensionality = firstCurve->GetDimensionality(); FGFUTIL_WRITE_INT32(&newByteArray, dimensionality); // Startpoint - from 1st element in curveSegs array FdoPtr<FdoIDirectPosition> startPos = firstCurve->GetStartPosition(); FgfUtil::WriteDirectPosition(&newByteArray, startPos); // Number of curveSegs FGFUTIL_WRITE_INT32(&newByteArray, curveSegs->GetCount()); // CurveSegs for (FdoInt32 i=0; i<curveSegs->GetCount(); i++) { FdoPtr<FdoICurveSegmentAbstract> curveSeg = curveSegs->GetItem(i); FgfUtil::WriteCurveSegment(curveSeg, &newByteArray); } SetFgf(newByteArray, NULL, 0); FDO_SAFE_RELEASE(newByteArray); }