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.geomprim;
028:
029: import java.util.ArrayList;
030: import java.util.List;
031:
032: /**
033: * Représente la frontière d'un GM_Surface.
034: * Un GM_SurfaceBoundary consiste en un anneau extérieur, et éventuellement des anneaux intérieurs
035: * pour représenter les surfaces à trous
036: * (le cas de 0 anneeau extérieur est prévu par le modèle mais je n'ai pas compris pourquoi).
037: * <P> Pour construitre une GM_SurfaceBoundary, utiliser le constructeur GM_SurfaceBoundary(GM_Ring ring)
038: * qui affecte la frontière extérieure,
039: * puis s'il le faut ajouter des anneaux intérieurs avec GM_SurfaceBoundary.addInterior(GM_Ring ring).
040: *
041: * @author Thierry Badard & Arnaud Braun
042: * @version 1.0
043: *
044: */
045:
046: public class GM_SurfaceBoundary extends GM_PrimitiveBoundary {
047:
048: //////////////////////////////////////////////////////////////////////////////////
049: // Attribut "exterior" et accesseurs /////////////////////////////////////////////
050: //////////////////////////////////////////////////////////////////////////////////
051: /** Anneau extérieur. */
052: protected GM_Ring exterior;
053:
054: /** Renvoie l'anneau extérieur */
055: public GM_Ring getExterior() {
056: return this .exterior;
057: }
058:
059: /** Affecte une valeur à l'anneau extérieur */
060: protected void setExterior(GM_Ring value) {
061: this .exterior = value;
062: }
063:
064: /** Renvoie 1 si l'anneau extérieur est affecté, 0 sinon.
065: * Il paraît qu'il existe des cas où on peut avoir une surface avec que des frontières intérieures. */
066: public int sizeExterior() {
067: if (this .exterior == null)
068: return 0;
069: else
070: return 1;
071: }
072:
073: //////////////////////////////////////////////////////////////////////////////////
074: // Attribut "interior" et accesseurs /////////////////////////////////////////////
075: //////////////////////////////////////////////////////////////////////////////////
076: /** Anneau(x) intérieur(s) en cas de trou(s) : liste de GM_Ring */
077: protected List interior;
078:
079: /** Renvoie la liste des anneaux intérieurs */
080: public List getInterior() {
081: return this .interior;
082: }
083:
084: /** Renvoie l'anneau intérieur de rang i */
085: public GM_Ring getInterior(int i) {
086: return (GM_Ring) this .interior.get(i);
087: }
088:
089: /** Affecte un GM_Ring au rang i */
090: public void setInterior(int i, GM_Ring value) {
091: this .interior.set(i, value);
092: }
093:
094: /** Ajoute un GM_Ring en fin de liste */
095: public void addInterior(GM_Ring value) {
096: this .interior.add(value);
097: }
098:
099: /** Ajoute un GM_ring au rang i */
100: public void addInterior(int i, GM_Ring value) {
101: this .interior.add(i, value);
102: }
103:
104: /** Efface le (ou les) GM_Ring passé en paramètre */
105: public void removeInterior(GM_Ring value) {
106: this .interior.remove(value);
107: }
108:
109: /** Efface le GM_Ring de rang i */
110: public void removeInterior(int i) {
111: this .interior.remove(i);
112: }
113:
114: /** Nombre d'anneaux intérieurs */
115: public int sizeInterior() {
116: return this .interior.size();
117: }
118:
119: /////////////////////////////////////////////////////////////////////////////////////////
120: // Constructeurs ////////////////////////////////////////////////////////////////////////
121: /////////////////////////////////////////////////////////////////////////////////////////
122: /** Constructeur par défaut */
123: public GM_SurfaceBoundary() {
124: exterior = null;
125: interior = new ArrayList();
126: }
127:
128: /** Constructeur à partir d'un GM_Ring et d'un seul (pour des surfaces sans trou) */
129: public GM_SurfaceBoundary(GM_Ring ring) {
130: exterior = ring;
131: interior = new ArrayList();
132: }
133:
134: }
|