/*
* OSGeom -- Geometry Collab
*
* (C) 2009, Open Source Geospatial Foundation (OSGeo)
* (C) 2001-2009 Department of Geography, University of Bonn
* (C) 2001-2009 lat/lon GmbH
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.osgeo.geometry.primitive;
import java.util.List;
import org.osgeo.geometry.primitive.patches.PolygonPatch;
import org.osgeo.geometry.primitive.patches.SurfacePatch;
import org.osgeo.geometry.primitive.patches.Triangle;
/**
* <code>Surface</code> instances are 2D-geometries that consist of an arbitrary number of surface patches which are not
* necessarily planar.
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
public interface Surface extends GeometricPrimitive {
/**
* Convenience enum type for discriminating the different surface variants.
*/
public enum SurfaceType {
/** Generic surface that consists of an arbitrary number of surface patches which are not necessarily planar. */
Surface,
/** Surface that consists of a single planar surface patch ({@link PolygonPatch}). */
Polygon,
/** Surface that consists of (planar) {@link PolygonPatch}es only. */
PolyhedralSurface,
/** Surface that consists of {@link Triangle}s only. */
TriangulatedSurface,
/** Surface that consists of {@link Triangle}s only (which meet the Delaunay criterion). */
Tin,
/** Surface composited from multiple members surfaces. */
CompositeSurface,
/** Surface that wraps a base surface with additional orientation flag. */
OrientableSurface,
}
/**
* Must always return {@link GeometricPrimitive.PrimitiveType#Surface}.
*
* @return {@link GeometricPrimitive.PrimitiveType#Surface}
*/
public PrimitiveType getPrimitiveType();
/**
* Returns the type of surface.
*
* @return the type of surface
*/
public SurfaceType getSurfaceType();
/**
* Returns the patches that constitute this surface.
*
* @return the patches that constitute this surface
*/
public List<? extends SurfacePatch> getPatches();
}