void PolygonCleaner::Run(gstGeodeHandle* const geodeh) { assert(geodeh); geode_creator_.SetPrimType((*geodeh)->PrimType()); switch ((*geodeh)->PrimType()) { case gstUnknown: case gstPoint: case gstPoint25D: return; case gstPolyLine: case gstStreet: case gstPolyLine25D: case gstStreet25D: return; case gstPolygon: case gstPolygon25D: ProcessPolygon(geodeh); break; case gstPolygon3D: notify(NFY_WARN, "PolygonCleaner: not supported geometry type: %d", (*geodeh)->PrimType()); return; case gstMultiPolygon: case gstMultiPolygon25D: { gstGeodeCollection *multi_geode = static_cast<gstGeodeCollection*>(&(**geodeh)); for (uint p = 0; p < multi_geode->NumParts(); ++p) { gstGeodeHandle &cur_geodeh = multi_geode->GetGeode(p); ProcessPolygon(&cur_geodeh); if (cur_geodeh->IsEmpty()) { notify(NFY_DEBUG, "Multi-geode part was empty or invalid" " (and forced empty): skipped."); } } } break; case gstMultiPolygon3D: notify(NFY_WARN, "PolygonCleaner: not supported geometry type: %d", (*geodeh)->PrimType()); return; } // Reports result. (*geodeh)->Clear(); geode_creator_.Report(geodeh); geode_creator_.Clean(); }
RESULTCODE PolygonToLineProcessorImpl::Process(FeatureClass* pinFeatureClass, FeatureClass* poutFeatureClass) { Geometry *pGeometry = NULL; Feature *pFeature = NULL; FeatureCursor* pCursor = pinFeatureClass->Query(); FeatureInsertCommand* cmd = poutFeatureClass->CreateInsertCommand(); while((pFeature=pCursor->NextFeature())!=NULL) { pGeometry = pFeature->GetGeometry(); if( pGeometry != NULL ) { switch(pGeometry->GeometryType()) { case augeGTPolygon: ProcessPolygon(pFeature, poutFeatureClass, cmd); break; case augeGTMultiPolygon: ProcessMultiPolygon(pFeature, poutFeatureClass, cmd); break; } } pFeature->Release(); } pCursor->Release(); cmd->Commit(); cmd->Release(); return AG_SUCCESS; }