/* * 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.GenericCurve; import org.opengis.annotation.Association; import org.opengis.annotation.UML; import static org.opengis.annotation.Obligation.*; import static org.opengis.annotation.Specification.*; /** * Curve with a positive orientation. {@code Curve} is * a descendent subtype of {@link Primitive} through {@link OrientablePrimitive}. It is the basis * for 1-dimensional geometry. A curve is a continuous image of an open interval and so could be * written as a parameterized function such as * * <code>c(t):(a, b) → E<sup>n</sup></code> * * where "t" is a real parameter and E<sup>n</sup> is Euclidean space of dimension <var>n</var> * (usually 2 or 3, as determined by the coordinate reference system). Any other parameterization * that results in the same image curve, traced in the same direction, such as any linear shifts * and positive scales such as * * <code>e(t) = c(a + t(b-a)):(0,1) → E<sup>n</sup></code>, * * is an equivalent representation of the same curve. For the sake of simplicity, {@code Curve}s * should be parameterized by arc length, so that the parameterization operation inherited from * {@link GenericCurve} will be valid for parameters between 0 and the length of the curve. * <p> * Curves are continuous, connected, and have a measurable length in terms of the coordinate system. * The orientation of the curve is determined by this parameterization, and is consistent with the * tangent function, which approximates the derivative function of the parameterization and shall * always point in the "forward" direction. The parameterization of the reversal of the curve defined * by * * <code>c(t):(a, b) → E<sup>n</sup></code> * * would be defined by a function of the form * * <code>s(t) = c(a + b - t):(a, b) → E<sup>n</sup></code>. * * <p> * A curve is composed of one or more curve segments. Each curve segment within a curve may be * defined using a different interpolation method. The curve segments are connected to one another, * with the end point of each segment except the last being the start point of the next segment in * the segment list. * * * @source $URL: http://svn.osgeo.org/geotools/trunk/modules/library/opengis/src/main/java/org/opengis/geometry/primitive/Curve.java $ * @version <A HREF="http://www.opengeospatial.org/standards/as">ISO 19107</A> * @author Martin Desruisseaux (IRD) * @since GeoAPI 1.0 * * @see PrimitiveFactory#createCurve */ @UML(identifier="GM_Curve", specification=ISO_19107) public interface Curve extends OrientableCurve, GenericCurve { /** * Lists the components {@linkplain CurveSegment curve segments} of {@code Curve}, each * of which defines the direct position of points along a portion of the curve. The order of * the {@linkplain CurveSegment curve segments} is the order in which they are used to trace * this {@code Curve}. For a particular parameter interval, the {@code Curve} and * {@link CurveSegment} agree. * * @return The list of curve segments. Should never be {@code null} neither empty. * * @see CurveSegment#getCurve * @see Surface#getPatches * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Segmentation") @UML(identifier="segment", obligation=MANDATORY, specification=ISO_19107) List<? extends CurveSegment> getSegments(); /** * Returns the orientable curves associated with this curve. * * @return The orientable curves as an array of length 2. * * @see OrientableCurve#getPrimitive * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Oriented") @UML(identifier="proxy", obligation=MANDATORY, specification=ISO_19107) OrientableCurve[] getProxy(); }