OGRLinearRing* OGRCompoundCurve::CastToLinearRing( OGRCompoundCurve* poCC ) { for( int i = 0; i < poCC->oCC.nCurveCount; i++ ) { poCC->oCC.papoCurves[i] = OGRCurve::CastToLineString(poCC->oCC.papoCurves[i]); if( poCC->oCC.papoCurves[i] == NULL ) { delete poCC; return NULL; } } if( poCC->oCC.nCurveCount == 1 ) { OGRLinearRing* poLR = OGRCurve::CastToLinearRing( poCC->oCC.papoCurves[0] ); if( poLR != NULL ) { poLR->assignSpatialReference(poCC->getSpatialReference()); } poCC->oCC.papoCurves[0] = NULL; delete poCC; return poLR; } OGRLinearRing* poLR = (OGRLinearRing *) poCC->CurveToLineInternal(0, NULL, TRUE); delete poCC; return poLR; }
OGRGeometry *OGRLinearRing::clone() const { OGRLinearRing *poNewLinearRing = new OGRLinearRing(); poNewLinearRing->assignSpatialReference( getSpatialReference() ); poNewLinearRing->setPoints( nPointCount, paoPoints, padfZ, padfM ); poNewLinearRing->flags = flags; return poNewLinearRing; }