double distanceSolidGeometry3D( const Solid& gA, const Geometry& gB ) { //SFCGAL_DEBUG( boost::format("dispatch distanceSolidGeometry3D(%s,%s)") % gA.asText() % gB.asText() ); switch ( gB.geometryTypeId() ) { case TYPE_POINT: return distancePointSolid3D( gB.as< Point >(), gA ); //symetric case TYPE_LINESTRING: return distanceLineStringSolid3D( gB.as< LineString >(), gA ); //symetric case TYPE_TRIANGLE: return distanceTriangleSolid3D( gB.as< Triangle >(), gA ); //symetric case TYPE_POLYGON: return distancePolygonGeometry3D( gB.as< Polygon >(), gA ); //symetric case TYPE_SOLID: return distanceSolidSolid3D( gA, gB.as< Solid >() ); case TYPE_MULTIPOINT: case TYPE_MULTILINESTRING: case TYPE_MULTIPOLYGON: case TYPE_MULTISOLID: case TYPE_GEOMETRYCOLLECTION: case TYPE_TRIANGULATEDSURFACE: case TYPE_POLYHEDRALSURFACE: return distanceGeometryCollectionToGeometry3D( gB, gA ); } BOOST_THROW_EXCEPTION( Exception( ( boost::format( "distance3D(%s,%s) is not implemented" ) % gA.geometryType() % gB.geometryType() ).str() ) ); }
void BoundaryVisitor::visit( const Solid& g ) { BOOST_THROW_EXCEPTION( Exception( ( boost::format( "unsupported type %1% in boundary operation" ) % g.geometryType() ).str() ) ); }