OGRErr OGRGeometryCollection::addGeometryDirectly( OGRGeometry * poNewGeom ) { if( !isCompatibleSubType(poNewGeom->getGeometryType()) ) return OGRERR_UNSUPPORTED_GEOMETRY_TYPE; if( poNewGeom->Is3D() && !Is3D() ) set3D(TRUE); if( poNewGeom->IsMeasured() && !IsMeasured() ) setMeasured(TRUE); if( !poNewGeom->Is3D() && Is3D() ) poNewGeom->set3D(TRUE); if( !poNewGeom->IsMeasured() && IsMeasured() ) poNewGeom->setMeasured(TRUE); OGRGeometry** papoNewGeoms = (OGRGeometry **) VSI_REALLOC_VERBOSE( papoGeoms, sizeof(void*) * (nGeomCount+1) ); if( papoNewGeoms == NULL ) return OGRERR_FAILURE; papoGeoms = papoNewGeoms; papoGeoms[nGeomCount] = poNewGeom; nGeomCount++; return OGRERR_NONE; }
void OGRPoint::flattenTo2D() { z = 0.0; m = 0.0; flags &= ~OGR_G_3D; setMeasured(FALSE); }
void OGRPoint::setCoordinateDimension( int nNewDimension ) { if( nNewDimension == 2 ) flattenTo2D(); else if( nNewDimension == 3 ) flags |= OGR_G_3D; setMeasured(FALSE); }