Revision 44612 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/DefaultMultiCurve.java
DefaultMultiCurve.java | ||
---|---|---|
24 | 24 |
|
25 | 25 |
import java.util.ArrayList; |
26 | 26 |
import java.util.Collections; |
27 |
import java.util.Iterator; |
|
28 | 27 |
import java.util.List; |
29 | 28 |
|
30 | 29 |
import com.vividsolutions.jts.geom.LineString; |
... | ... | |
39 | 38 |
import org.gvsig.fmap.geom.aggregate.MultiPolygon; |
40 | 39 |
import org.gvsig.fmap.geom.aggregate.MultiPrimitive; |
41 | 40 |
import org.gvsig.fmap.geom.jts.GeometryJTS; |
42 |
import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM; |
|
43 | 41 |
import org.gvsig.fmap.geom.jts.util.JTSUtils; |
44 | 42 |
import org.gvsig.fmap.geom.operation.GeometryOperationException; |
45 | 43 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException; |
... | ... | |
68 | 66 |
super(subtype); |
69 | 67 |
} |
70 | 68 |
|
71 |
/* (non-Javadoc) |
|
72 |
* @see org.gvsig.fmap.geom.Geometry#cloneGeometry() |
|
73 |
*/ |
|
69 |
@Override |
|
74 | 70 |
public Geometry cloneGeometry() { |
75 | 71 |
DefaultMultiCurve clone = new DefaultMultiCurve(getGeometryType()); |
76 | 72 |
for(int i=0; i<primitives.size(); i++){ |
... | ... | |
79 | 75 |
return clone; |
80 | 76 |
} |
81 | 77 |
|
82 |
/* (non-Javadoc) |
|
83 |
* @see org.gvsig.fmap.geom.Geometry#getDimension() |
|
84 |
*/ |
|
78 |
@Override |
|
79 |
public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException { |
|
80 |
DefaultMultiCurve other = new DefaultMultiCurve(getGeometryType()); |
|
81 |
other.setProjection(this.getProjection()); |
|
82 |
other.ensureCapacity(primitives.size()); |
|
83 |
for (Primitive primitive : primitives) { |
|
84 |
other.addPrimitive((Primitive)primitive.force2D()); |
|
85 |
} |
|
86 |
return other; |
|
87 |
} |
|
88 |
|
|
89 |
@Override |
|
85 | 90 |
public int getDimension() { |
86 | 91 |
switch (getGeometryType().getSubType()) { |
87 | 92 |
case Geometry.SUBTYPES.GEOM2D: |
... | ... | |
97 | 102 |
} |
98 | 103 |
} |
99 | 104 |
|
100 |
/* (non-Javadoc) |
|
101 |
* @see org.gvsig.fmap.geom.Geometry#toPoints() |
|
102 |
*/ |
|
105 |
@Override |
|
103 | 106 |
public MultiPoint toPoints() throws GeometryException { |
104 | 107 |
MultiPoint multipoint = null; |
105 | 108 |
for (int i = 0; i < this.getPrimitivesNumber(); i++) { |
... | ... | |
115 | 118 |
return multipoint; |
116 | 119 |
} |
117 | 120 |
|
118 |
/* (non-Javadoc) |
|
119 |
* @see org.gvsig.fmap.geom.Geometry#toLines() |
|
120 |
*/ |
|
121 |
@Override |
|
121 | 122 |
public MultiLine toLines() throws GeometryException { |
122 | 123 |
MultiLine multiline = null; |
123 | 124 |
for (int i = 0; i < this.getPrimitivesNumber(); i++) { |
... | ... | |
133 | 134 |
return multiline; |
134 | 135 |
} |
135 | 136 |
|
136 |
/* (non-Javadoc) |
|
137 |
* @see org.gvsig.fmap.geom.Geometry#toPolygons() |
|
138 |
*/ |
|
137 |
@Override |
|
139 | 138 |
public MultiPolygon toPolygons() throws GeometryException { |
140 | 139 |
MultiPolygon multipolygon = null; |
141 | 140 |
for (int i = 0; i < this.getPrimitivesNumber(); i++) { |
... | ... | |
151 | 150 |
return multipolygon; |
152 | 151 |
} |
153 | 152 |
|
154 |
/* (non-Javadoc) |
|
155 |
* @see org.gvsig.fmap.geom.jts.GeometryJTS#flip() |
|
156 |
*/ |
|
153 |
@Override |
|
157 | 154 |
public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException { |
158 | 155 |
for (int i = 0; i < this.getPrimitivesNumber(); i++) { |
159 | 156 |
this.getPrimitiveAt(i).flip(); |
... | ... | |
162 | 159 |
} |
163 | 160 |
|
164 | 161 |
|
165 |
/* (non-Javadoc) |
|
166 |
* @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive) |
|
167 |
*/ |
|
168 | 162 |
@Override |
169 | 163 |
protected Geometry fixPrimitive(Primitive primitive) { |
170 | 164 |
int primitiveSubType = primitive.getGeometryType().getSubType(); |
... | ... | |
178 | 172 |
throw new UnsupportedOperationException(message); |
179 | 173 |
} |
180 | 174 |
|
181 |
/* (non-Javadoc) |
|
182 |
* @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS() |
|
183 |
*/ |
|
175 |
@Override |
|
184 | 176 |
public com.vividsolutions.jts.geom.Geometry getJTS() { |
185 |
List<LineString> lineStrings = |
|
186 |
new ArrayList<LineString>(primitives.size()); |
|
177 |
List<LineString> lineStrings = new ArrayList<>(primitives.size()); |
|
187 | 178 |
|
188 |
LineString line = null; |
|
189 |
for (Iterator iterator = primitives.iterator(); iterator.hasNext();) { |
|
190 |
Primitive primitive = (Primitive) iterator.next(); |
|
179 |
LineString line; |
|
180 |
for (Primitive primitive : primitives) { |
|
191 | 181 |
if (primitive instanceof Line) { |
192 | 182 |
line = (LineString) ((GeometryJTS) primitive).getJTS(); |
193 | 183 |
lineStrings.add(line); |
194 | 184 |
} else { |
195 |
MultiLine multiline = null;
|
|
185 |
MultiLine multiline; |
|
196 | 186 |
try { |
197 | 187 |
multiline = primitive.toLines(); |
198 | 188 |
for (int j = 0; j < multiline.getPrimitivesNumber(); j++) { |
199 | 189 |
line = |
200 |
(LineString) ((GeometryJTS) multiline.getPrimitiveAt(j)).getJTS(); |
|
190 |
(LineString) ((GeometryJTS) multiline.getPrimitiveAt(j)).getJTS();
|
|
201 | 191 |
lineStrings.add(line); |
202 | 192 |
} |
203 | 193 |
} catch (GeometryException e) { |
204 | 194 |
GeometryType geomType = primitive.getGeometryType(); |
205 | 195 |
logger.warn(StringUtils.replaceEach( |
206 |
"Can't convert primitive type=%(type)s, %(subtype)s to MultiLine", |
|
207 |
new String[] {"%(type)s", "%(subtype)s" }, |
|
208 |
new String[] { String.valueOf(geomType.getType()), String.valueOf(geomType.getSubType()) })); |
|
196 |
"Can't convert primitive type=%(type)s, %(subtype)s to MultiLine",
|
|
197 |
new String[] {"%(type)s", "%(subtype)s" },
|
|
198 |
new String[] { String.valueOf(geomType.getType()), String.valueOf(geomType.getSubType()) }));
|
|
209 | 199 |
} |
210 | 200 |
} |
211 | 201 |
} |
212 | 202 |
return JTSUtils.createJTSMultiLineString(lineStrings.toArray(new LineString[lineStrings.size()])); |
213 | 203 |
} |
214 | 204 |
|
215 |
/* (non-Javadoc) |
|
216 |
* @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform) |
|
217 |
*/ |
|
205 |
@Override |
|
218 | 206 |
public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException { |
219 | 207 |
MultiCurve result = new DefaultMultiCurve(getGeometryType()); |
220 |
for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) { |
|
221 |
Primitive primitive = (Primitive) iterator.next(); |
|
208 |
for (Primitive primitive : primitives) { |
|
222 | 209 |
Geometry offset = primitive.offset(distance); |
223 | 210 |
if(offset instanceof MultiPrimitive){ |
224 | 211 |
MultiPrimitive multiOffset = (MultiPrimitive)offset; |
Also available in: Unified diff