01: /*
02: * This file is part of the GeOxygene project source files.
03: *
04: * GeOxygene aims at providing an open framework which implements OGC/ISO specifications for
05: * the development and deployment of geographic (GIS) applications. It is a open source
06: * contribution of the COGIT laboratory at the Institut Géographique National (the French
07: * National Mapping Agency).
08: *
09: * See: http://oxygene-project.sourceforge.net
10: *
11: * Copyright (C) 2005 Institut Géographique National
12: *
13: * This library is free software; you can redistribute it and/or modify it under the terms
14: * of the GNU Lesser General Public License as published by the Free Software Foundation;
15: * either version 2.1 of the License, or any later version.
16: *
17: * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
19: * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
20: *
21: * You should have received a copy of the GNU Lesser General Public License along with
22: * this library (see file LICENSE if present); if not, write to the Free Software
23: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24: *
25: */
26:
27: package fr.ign.cogit.geoxygene.spatial.geomprim;
28:
29: import java.util.HashSet;
30: import java.util.Set;
31:
32: import fr.ign.cogit.geoxygene.spatial.geomroot.GM_Object;
33:
34: /**
35: * Classe mère abstraite pour les primitives géométriques (point, ligne, surface, solide).
36: * Son but est définir l'opération de base "boundary()" qui lie les primitives de différentes dimensions entre elles.
37: * Cette opération est redéfinie dans les sous-classes concrètes pour assurer un bon typage.
38: * Une primitive géométrique ne peut pas être décomposée en autres primitives,
39: * même si elle découpée en morceaux de courbes (curve segment) ou en morceaux de surface (surface patch) :
40: * un curve segment et un surface patch ne peuvent pas exister en dehors du contexte d'une primitive.
41: * GM_Complex et GM_Primitive partagent les mêmes propriétés, sauf qu'un complexe est fermé par l'opération "boundary".
42: * Par exemple pour une CompositeCurve, GM_Primitive::contains(endPoint) retourne FALSE,
43: * alors que GM_Complex::contains(endPoint) retourne TRUE.
44: * En tant que GM_Object ces 2 objets seront égaux.
45: *
46: * @author Thierry Badard & Arnaud Braun
47: * @version 1.0
48: *
49: */
50:
51: abstract public class GM_Primitive extends GM_Object {
52:
53: // The "Interior to" association is not implemented
54:
55: // Le constructeur a partir d'une GM_Envelope est defini dans GM_Poygon
56:
57: /** Association avec les GM_Complex, instanciée du coté du complexe. */
58: public Set complex = new HashSet();
59:
60: /** Renvoie le set des complexes auxquels appartient this */
61: public Set getComplex() {
62: return complex;
63: }
64:
65: /** Nombre de complexes auxquels appartient this */
66: public int sizeComplex() {
67: return this.complex.size();
68: }
69:
70: }
|