001: /*
002: * This file is part of the GeOxygene project source files.
003: *
004: * GeOxygene aims at providing an open framework which implements OGC/ISO specifications for
005: * the development and deployment of geographic (GIS) applications. It is a open source
006: * contribution of the COGIT laboratory at the Institut Géographique National (the French
007: * National Mapping Agency).
008: *
009: * See: http://oxygene-project.sourceforge.net
010: *
011: * Copyright (C) 2005 Institut Géographique National
012: *
013: * This library is free software; you can redistribute it and/or modify it under the terms
014: * of the GNU Lesser General Public License as published by the Free Software Foundation;
015: * either version 2.1 of the License, or any later version.
016: *
017: * This library is distributed in the hope that it will be useful, but WITHOUT ANY
018: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
019: * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser General Public License along with
022: * this library (see file LICENSE if present); if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: *
025: */
026:
027: package fr.ign.cogit.geoxygene.spatial.coordgeom;
028:
029: import java.util.List;
030:
031: /** NON UTILISE. Cette interface de la norme n'a plus de sens depuis qu'on a fait hériter GM_CurveSegment de GM_Curve.
032: *
033: * <P> Définition de la norme : les classes GM_Curve et GM_CurveSegment représentent toutes deux des géométries à une dimension, et partagent donc plusieurs signatures d'opération.
034: * Celles-ci sont définies dans l'interface GM_GenericCurve.
035: * La paramétrisation employée dans les méthodes se fait par la longueur de l'arc (absisse curviligne) ou par une autre paramétrisation.
036: *
037: * @author Thierry Badard & Arnaud Braun
038: * @version 1.0
039: *
040: */
041:
042: interface GM_GenericCurve {
043:
044: /**
045: * Retourne le DirectPosition du premier point. Différent de l'opérateur "boundary" car renvoie la valeur du point et non pas l'objet géométrique représentatif.
046: */
047: DirectPosition startPoint();
048:
049: /**
050: * Retourne le DirectPosition du dernier point. Différent de l'opérateur "boundary" car renvoie la valeur du point et non pas l'objet géométrique représentatif.
051: */
052: DirectPosition endPoint();
053:
054: /** NON IMPLEMENTE.
055: * Renvoie un point à l'abcsisse curviligne s.
056: */
057: // NORME : le paramètre en entree est de type Distance.
058: DirectPosition param(double s);
059:
060: /** NON IMPLEMENTE.
061: * Vecteur tangent a la courbe, à l'abscisse curviligne passée en paramètre. Le vecteur résultat est normé.
062: */
063: // NORME : le paramètre en entree est de type Distance.
064: // Vecteur tangent(double s);
065:
066: /**
067: * Renvoie O pour une GM_Curve.
068: * Pour un GM_CurveSegment, égal au endParam du précedent segment dans la segmentation (0 pour le premier segment).
069: */
070: // NORME : le résultat est de type Distance.
071: double startParam();
072:
073: /**
074: * Longueur de la courbe pour une GM_Curve. Pour un GM_CurveSegment, égale à startParam plus la longueur du segment.
075: */
076: // NORME : le résultat est de type Distance.
077: double endParam();
078:
079: /** NON IMPLEMENTE.
080: * Renvoie le paramètre au point P (le paramètre étant a priori la distance).
081: * Si P n'est pas sur la courbe, on cherche alors pour le calcul le point le plus proche de P sur la courbe
082: * (qui est aussi renvoyé en résultat).
083: * On renvoie en général une seule distance, sauf si la courbe n'est pas simple.
084: */
085: // NORME : le résultat est de type Distance.
086: List paramForPoint(DirectPosition P);
087:
088: /** NON IMPLEMENTE.
089: * Représentation alternative d'une courbe comme l'image continue d'un intervalle de réels,
090: * sans imposer que cette paramétrisation représente la longueur de la courbe,
091: * et sans imposer de restrictions entre la courbe et ses segments.
092: * Utilité : pour les courbes paramétrées, pour construire une surface paramétrée.
093: */
094: DirectPosition constrParam(double cp);
095:
096: /** NON IMPLEMENTE.
097: * Paramètre au startPoint pour une courbe paramétrée, c'est-à-dire : constrParam(startConstrParam())=startPoint().
098: */
099: double startConstrParam();
100:
101: /** NON IMPLEMENTE.
102: * Paramètre au endPoint pour une courbe paramétrée, c'est-à-dire : constrParam(endConstrParam())=endPoint().
103: */
104: double endConstrParam();
105:
106: /** NON IMPLEMENTE.
107: * Longueur entre 2 points.
108: */
109: // NORME : le résultat est de type Length.
110: double length(GM_Position p1, GM_Position p2);
111:
112: /** NON IMPLEMENTE.
113: * Longueur d'une courbe paramétrée "entre 2 réels".
114: */
115: // NORME : le résultat est de type Length.
116: double length(double cparam1, double cparam2);
117:
118: /**
119: * Approximation linéaire d'une courbe avec les points de contrôle.
120: * Le paramètre spacing indique la distance maximum entre 2 points de contrôle;
121: * le paramètre offset indique la distance maximum entre la polyligne générée et la courbe originale.
122: * Si ces 2 paramètres sont à 0, alors aucune contrainte n'est imposée.
123: * Le paramètre tolérance permet d'éliminer les points consécutifs doublons qui peuvent apparaître quand la courbe est composée de plusieurs segments.
124: */
125: // NORME : spacing et offset sont de type Distance. tolerance n'est pas en paramètre.
126: GM_LineString asLineString(double spacing, double offset,
127: double tolerance);
128: }
|