Revision 42275

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPolygon.java
80 80
     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform, double)
81 81
     */
82 82
    public PathIterator getPathIterator(AffineTransform at, double flatness) {
83
        // TODO Auto-generated method stub
84
        return null;
83
        return getPathIterator(at);
85 84
    }
86 85

  
87 86
    /* (non-Javadoc)
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiLine.java
83 83
     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform, double)
84 84
     */
85 85
    public PathIterator getPathIterator(AffineTransform at, double flatness) {
86
        // TODO Auto-generated method stub
87
        return null;
86
        return getPathIterator(at);
88 87
    }
89 88

  
90 89
    /* (non-Javadoc)
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2D.java
112 112
        }
113 113
    }
114 114

  
115
    /*
116
     * (non-Javadoc)
117
     *
118
     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
119
     */
120
    public GeneralPathX getGeneralPath() {
121
        return new DefaultGeneralPathX(new LineIterator(null), false, 0);
122
    }
123 115

  
124 116
    /* (non-Javadoc)
125 117
     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3D.java
108 108
        }
109 109
    }
110 110

  
111
    /*
112
     * (non-Javadoc)
113
     *
114
     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
115
     */
116
    public GeneralPathX getGeneralPath() {
117
        return new DefaultGeneralPathX(new LineIterator(null),true,((Point3D)anyVertex).getZ());
118
    }
119

  
120 111
    /* (non-Javadoc)
121 112
     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
122 113
     */
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/AbstractLine.java
397 397
        return getPathIterator(at);
398 398
    }
399 399

  
400
    /*
401
     * (non-Javadoc)
402
     *
403
     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
404
     */
405
    public GeneralPathX getGeneralPath() {
406
        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
407
    }
408

  
400 409
    protected class LineIterator extends GeneralPathXIterator {
401 410

  
402 411
        /** Transform applied on the coordinates during iteration */
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2DM.java
114 114
        }
115 115
    }
116 116

  
117

  
118

  
119
    /*
120
     * (non-Javadoc)
121
     *
122
     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
123
     */
124
    public GeneralPathX getGeneralPath() {
125
        return new DefaultGeneralPathX(new LineIterator(null),false,0);
126
    }
127

  
128 117
    /* (non-Javadoc)
129 118
     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
130 119
     */
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3DM.java
109 109
        }
110 110
    }
111 111

  
112

  
113
    /*
114
     * (non-Javadoc)
115
     *
116
     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
117
     */
118
    public GeneralPathX getGeneralPath() {
119
        return new DefaultGeneralPathX(new LineIterator(null),true,((Point3D)anyVertex).getZ());
120
    }
121

  
122 112
    /* (non-Javadoc)
123 113
     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
124 114
     */
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3DM.java
22 22
 */
23 23
package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
24 24

  
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.PathIterator;
25 27
import java.util.ArrayList;
26 28
import java.util.List;
27 29

  
......
159 161
    public com.vividsolutions.jts.geom.Geometry getJTS() {
160 162
        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
161 163
    }
164

  
165

  
166
    /*
167
     * (non-Javadoc)
168
     *
169
     * @see
170
     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
171
     * )
172
     */
173
    public PathIterator getPathIterator(AffineTransform at) {
174
        PolygonIterator pi = new PolygonIterator(this, at);
175
        return pi;
176
    }
177

  
162 178
}
163 179

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2D.java
22 22
 */
23 23
package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
24 24

  
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.PathIterator;
25 27
import java.util.ArrayList;
26 28
import java.util.List;
27 29

  
......
173 175
        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
174 176
    }
175 177

  
178
    /*
179
     * (non-Javadoc)
180
     *
181
     * @see
182
     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
183
     * )
184
     */
185
    public PathIterator getPathIterator(AffineTransform at) {
186
        PolygonIterator pi = new PolygonIterator(this, at);
187
        return pi;
188
    }
176 189
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3D.java
22 22
 */
23 23
package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
24 24

  
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.PathIterator;
25 27
import java.util.ArrayList;
26 28
import java.util.List;
27 29

  
......
152 154
    public com.vividsolutions.jts.geom.Geometry getJTS() {
153 155
        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
154 156
    }
157

  
158

  
159

  
160
    /*
161
     * (non-Javadoc)
162
     *
163
     * @see
164
     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
165
     * )
166
     */
167
    public PathIterator getPathIterator(AffineTransform at) {
168
        PolygonIterator pi = new PolygonIterator(this, at);
169
        return pi;
170
    }
171

  
155 172
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonIterator.java
1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2015 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
24

  
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.PathIterator;
27

  
28
import org.gvsig.fmap.geom.jts.GeometryJTS;
29
import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
30
import org.gvsig.fmap.geom.primitive.GeneralPathX;
31
import org.gvsig.fmap.geom.primitive.Polygon;
32
import org.gvsig.fmap.geom.primitive.Ring;
33

  
34
/**
35
 * @author  fdiaz
36
 */
37
public class PolygonIterator extends GeneralPathXIterator{
38

  
39
    /** Transform applied on the coordinates during iteration */
40
    private AffineTransform at;
41

  
42
    /** True when the point has been read once */
43
    private boolean done;
44
    private int index = 0;
45
    private Polygon polygon;
46

  
47
    /**
48
     * Creates a new PointIterator object.
49
     *
50
     * @param p
51
     *            The polygon
52
     * @param at
53
     *            The affine transform applied to coordinates during
54
     *            iteration
55
     */
56
    public PolygonIterator(Polygon polygon, AffineTransform at) {
57
        super(new GeneralPathX());
58
        if (at == null) {
59
            at = new AffineTransform();
60
        }
61
        this.polygon = polygon;
62
        this.at = at;
63
        done = false;
64
    }
65

  
66
    /**
67
     * Return the winding rule for determining the interior of the path.
68
     *
69
     * @return <code>WIND_EVEN_ODD</code> by default.
70
     */
71
    public int getWindingRule() {
72
        return PathIterator.WIND_EVEN_ODD;
73
    }
74

  
75
    /**
76
     * @see java.awt.geom.PathIterator#next()
77
     */
78
    public void next() {
79

  
80
        int numVertices = this.polygon.getNumVertices();
81
        for (int i = 0; i < this.polygon.getNumInteriorRings(); i++) {
82
            numVertices += this.polygon.getInteriorRing(i).getNumVertices();
83
        }
84
        done = (numVertices == index++);
85
    }
86

  
87
    /**
88
     * @see java.awt.geom.PathIterator#isDone()
89
     */
90
    public boolean isDone() {
91
        return done;
92
    }
93

  
94
    /**
95
     * @see java.awt.geom.PathIterator#currentSegment(double[])
96
     */
97
    public int currentSegment(double[] coords) {
98
        if (index<this.polygon.getNumVertices()){
99
            coords[0] = this.polygon.getCoordinateAt(index, 0);
100
            coords[1] = this.polygon.getCoordinateAt(index, 1);
101
            at.transform(coords, 0, coords, 0, 1);
102
            if (index == 0) {
103
                return PathIterator.SEG_MOVETO;
104
            } else {
105
                return PathIterator.SEG_LINETO;
106
            }
107
        } else {
108
            int previousRingsSize = 0;
109
            for(int r=0; r<this.polygon.getNumInteriorRings(); r++){
110
                Ring ring = this.polygon.getInteriorRing(r);
111
                if (index < this.polygon.getNumVertices()+previousRingsSize+ring.getNumVertices()){
112
                    int ringIndex = index-(this.polygon.getNumVertices()+previousRingsSize);
113
                    coords[0] = ring.getCoordinateAt(index, 0);
114
                    coords[1] = ring.getCoordinateAt(index, 1);
115
                    at.transform(coords, 0, coords, 0, 1);
116
                    if (ringIndex == 0) {
117
                        return PathIterator.SEG_MOVETO;
118
                    } else {
119
                        return PathIterator.SEG_LINETO;
120
                    }
121
                } else {
122
                    previousRingsSize += ring.getNumVertices();
123
                }
124
            }
125
            return PathIterator.SEG_CLOSE; //FIXME: ??????
126
        }
127
    }
128

  
129
    /*
130
     * (non-Javadoc)
131
     *
132
     * @see java.awt.geom.PathIterator#currentSegment(float[])
133
     */
134
    public int currentSegment(float[] coords) {
135
        if (index<this.polygon.getNumVertices()){
136
            coords[0] = (float)this.polygon.getCoordinateAt(index, 0);
137
            coords[1] = (float)this.polygon.getCoordinateAt(index, 1);
138
            at.transform(coords, 0, coords, 0, 1);
139
            if (index == 0) {
140
                return PathIterator.SEG_MOVETO;
141
            } else {
142
                return PathIterator.SEG_LINETO;
143
            }
144
        } else {
145
            int previousRingsSize = 0;
146
            for(int r=0; r<this.polygon.getNumInteriorRings(); r++){
147
                Ring ring = this.polygon.getInteriorRing(r);
148
                if (index < this.polygon.getNumVertices()+previousRingsSize+ring.getNumVertices()){
149
                    int ringIndex = index-(this.polygon.getNumVertices()+previousRingsSize);
150
                    coords[0] = (float)ring.getCoordinateAt(index, 0);
151
                    coords[1] = (float)ring.getCoordinateAt(index, 1);
152
                    at.transform(coords, 0, coords, 0, 1);
153
                    if (ringIndex == 0) {
154
                        return PathIterator.SEG_MOVETO;
155
                    } else {
156
                        return PathIterator.SEG_LINETO;
157
                    }
158
                } else {
159
                    previousRingsSize += ring.getNumVertices();
160
                }
161
            }
162
            return PathIterator.SEG_CLOSE; //FIXME: ??????
163
        }
164
    }
165
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2DM.java
22 22
 */
23 23
package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
24 24

  
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.PathIterator;
25 27
import java.util.ArrayList;
26 28
import java.util.List;
27 29

  
......
154 156
    public com.vividsolutions.jts.geom.Geometry getJTS() {
155 157
        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
156 158
    }
159

  
160

  
161

  
162
    /*
163
     * (non-Javadoc)
164
     *
165
     * @see
166
     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
167
     * )
168
     */
169
    public PathIterator getPathIterator(AffineTransform at) {
170
        PolygonIterator pi = new PolygonIterator(this, at);
171
        return pi;
172
    }
173

  
157 174
}

Also available in: Unified diff