/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2011, Open Source Geospatial Foundation (OSGeo) * (C) 2003-2005, Open Geospatial Consortium Inc. * * All Rights Reserved. http://www.opengis.org/legal/ */ package org.opengis.geometry.primitive; import java.util.List; import org.opengis.geometry.coordinate.GenericSurface; import org.opengis.annotation.Association; import org.opengis.annotation.UML; import static org.opengis.annotation.Obligation.*; import static org.opengis.annotation.Specification.*; /** * Surface with a positive orientation. * {@code Surface} is a subclass of {@link Primitive} and is the basis for 2-dimensional * geometry. Unorientable surfaces such as the Möbius band are not allowed. The orientation of * a surface chooses an "up" direction through the choice of the upward normal, which, if the * surface is not a cycle, is the side of the surface from which the exterior boundary appears * counterclockwise. Reversal of the surface orientation reverses the curve orientation of each * boundary component, and interchanges the conceptual "up" and "down" direction of the surface. * If the surface is the boundary of a solid, the "up" direction is usually outward. For closed * surfaces, which have no boundary, the up direction is that of the surface patches, which must * be consistent with one another. Its included {@linkplain SurfacePatch surface patches} describe * the interior structure of a {@code Surface}. * * <blockquote><font size=2> * <strong>NOTE:</strong> Other than the restriction on orientability, no other "validity" condition is required for GM_Surface. * </font></blockquote> * * * @source $URL: http://svn.osgeo.org/geotools/trunk/modules/library/opengis/src/main/java/org/opengis/geometry/primitive/Surface.java $ * @version <A HREF="http://www.opengeospatial.org/standards/as">ISO 19107</A> * @author Martin Desruisseaux (IRD) * @since GeoAPI 1.0 * * @see PrimitiveFactory#createSurface(List) * @see PrimitiveFactory#createSurface(SurfaceBoundary) */ @UML(identifier="GM_Surface", specification=ISO_19107) public interface Surface extends OrientableSurface, GenericSurface { /** * Relates this {@code Surface} to a set of {@linkplain SurfacePatch surface patches} that * shall be joined together to form this surface. Depending on the interpolation method, the set * of patches may require significant additional structure. * * If the surface {@linkplain #getCoordinateDimension coordinate dimension} is 2, then the * entire {@code Surface} is one logical patch defined by linear interpolation from the * boundary. * * @return The list of surface patches. Should never be {@code null} neither empty. * * @see SurfacePatch#getSurface * @see Curve#getSegments * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Segmentation") @UML(identifier="patch", obligation=MANDATORY, specification=ISO_19107) List<? extends SurfacePatch> getPatches(); /** * Returns the orientable surfaces associated with this surface. * * @return The orientable surfaces as an array of length 2. * * @see OrientableSurface#getPrimitive * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Oriented") @UML(identifier="proxy", obligation=MANDATORY, specification=ISO_19107) OrientableSurface[] getProxy(); }