OGRCurvePolygon* OGRPolygon::CastToCurvePolygon( OGRPolygon* poPoly ) { OGRCurvePolygon* poCP = new OGRCurvePolygon(); poCP->set3D(poPoly->Is3D()); poCP->setMeasured(poPoly->IsMeasured()); poCP->assignSpatialReference(poPoly->getSpatialReference()); poCP->oCC.nCurveCount = poPoly->oCC.nCurveCount; poCP->oCC.papoCurves = poPoly->oCC.papoCurves; poPoly->oCC.nCurveCount = 0; poPoly->oCC.papoCurves = nullptr; for( auto&& poRing: *poCP ) { poRing = OGRLinearRing::CastToLineString(poRing->toLinearRing()); } delete poPoly; return poCP; }
OGRCurvePolygon* OGRPolygon::CastToCurvePolygon(OGRPolygon* poPoly) { OGRCurvePolygon* poCP = new OGRCurvePolygon(); poCP->set3D(poPoly->Is3D()); poCP->setMeasured(poPoly->IsMeasured()); poCP->assignSpatialReference(poPoly->getSpatialReference()); poCP->oCC.nCurveCount = poPoly->oCC.nCurveCount; poCP->oCC.papoCurves = poPoly->oCC.papoCurves; poPoly->oCC.nCurveCount = 0; poPoly->oCC.papoCurves = NULL; for( int iRing = 0; iRing < poCP->oCC.nCurveCount; iRing++ ) { poCP->oCC.papoCurves[iRing] = OGRLinearRing::CastToLineString( (OGRLinearRing*)poCP->oCC.papoCurves[iRing] ); } delete poPoly; return poCP; }