int kml2extrude_rec ( GeometryPtr poKmlGeometry, int *pnExtrude ) { PointPtr poKmlPoint; LineStringPtr poKmlLineString; PolygonPtr poKmlPolygon; MultiGeometryPtr poKmlMultiGeometry; size_t nGeom; size_t i; switch ( poKmlGeometry->Type ( ) ) { case kmldom::Type_Point: poKmlPoint = AsPoint ( poKmlGeometry ); if ( poKmlPoint->has_extrude ( ) ) { *pnExtrude = poKmlPoint->get_extrude ( ); return TRUE; } break; case kmldom::Type_LineString: poKmlLineString = AsLineString ( poKmlGeometry ); if ( poKmlLineString->has_extrude ( ) ) { *pnExtrude = poKmlLineString->get_extrude ( ); return TRUE; } break; case kmldom::Type_LinearRing: break; case kmldom::Type_Polygon: poKmlPolygon = AsPolygon ( poKmlGeometry ); if ( poKmlPolygon->has_extrude ( ) ) { *pnExtrude = poKmlPolygon->get_extrude ( ); return TRUE; } break; case kmldom::Type_MultiGeometry: poKmlMultiGeometry = AsMultiGeometry ( poKmlGeometry ); nGeom = poKmlMultiGeometry->get_geometry_array_size ( ); for ( i = 0; i < nGeom; i++ ) { if ( kml2extrude_rec ( poKmlMultiGeometry-> get_geometry_array_at ( i ), pnExtrude ) ) return TRUE; } break; default: break; } return FALSE; }