Revision 575 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.reversedirection/src/main/java/org/gvsig/vectorediting/lib/prov/reversedirection/ReverseDirectionEditingProvider.java
ReverseDirectionEditingProvider.java | ||
---|---|---|
32 | 32 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
33 | 33 |
import org.gvsig.fmap.geom.Geometry; |
34 | 34 |
import org.gvsig.fmap.geom.Geometry.TYPES; |
35 |
import org.gvsig.fmap.geom.GeometryException; |
|
35 | 36 |
import org.gvsig.fmap.geom.GeometryLocator; |
36 | 37 |
import org.gvsig.fmap.geom.GeometryManager; |
37 | 38 |
import org.gvsig.fmap.geom.aggregate.MultiCurve; |
38 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
|
39 |
import org.gvsig.fmap.geom.operation.GeometryOperationException; |
|
40 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException; |
|
39 | 41 |
import org.gvsig.fmap.geom.primitive.Curve; |
40 | 42 |
import org.gvsig.fmap.geom.primitive.Line; |
41 | 43 |
import org.gvsig.fmap.geom.primitive.Point; |
44 |
import org.gvsig.fmap.geom.primitive.Spline; |
|
42 | 45 |
import org.gvsig.fmap.geom.type.GeometryType; |
43 | 46 |
import org.gvsig.tools.ToolsLocator; |
44 | 47 |
import org.gvsig.tools.dispose.DisposeUtils; |
... | ... | |
62 | 65 |
import org.gvsig.vectorediting.lib.spi.EditingProviderServices; |
63 | 66 |
|
64 | 67 |
/** |
65 |
*
|
|
68 |
* |
|
66 | 69 |
* @author <a href="mailto:lmarques@disid.com">Lluis Marques</a> |
67 | 70 |
* |
68 | 71 |
*/ |
... | ... | |
197 | 200 |
} |
198 | 201 |
|
199 | 202 |
private Geometry reverseDirection(Geometry geometry) |
200 |
throws CreateGeometryException {
|
|
203 |
throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
|
|
201 | 204 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
202 | 205 |
GeometryType geometryType = geometry.getGeometryType(); |
203 | 206 |
|
... | ... | |
206 | 209 |
geometryManager.createMultiCurve(geometryType.getSubType()); |
207 | 210 |
MultiCurve multicurve = (MultiCurve) geometry; |
208 | 211 |
for (int i = 0; i < multicurve.getPrimitivesNumber(); i++) { |
209 |
reversedMultiCurve.addCurve(reverseCurve(multicurve |
|
210 |
.getCurveAt(i))); |
|
212 |
reversedMultiCurve.addCurve(reverseCurve(multicurve.getCurveAt(i))); |
|
211 | 213 |
} |
212 | 214 |
return reversedMultiCurve; |
213 | 215 |
} else if (geometryType.isTypeOf(TYPES.CURVE)) { |
... | ... | |
218 | 220 |
} |
219 | 221 |
} |
220 | 222 |
|
221 |
private Curve reverseCurve(Curve curve) throws CreateGeometryException {
|
|
223 |
private Curve reverseCurve(Curve curve) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
|
|
222 | 224 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
223 |
Line reverseLine = |
|
224 |
geometryManager.createLine(curve.getGeometryType().getSubType()); |
|
225 |
for (int i = curve.getNumVertices() - 1; i >= 0; i--) { |
|
226 |
reverseLine.addVertex(curve.getVertex(i)); |
|
225 |
Curve curveToReverse = null; |
|
226 |
Curve reverseCurve = null; |
|
227 |
if(curve instanceof Line || curve instanceof Spline){ |
|
228 |
reverseCurve = (Curve) curve.cloneGeometry(); |
|
229 |
reverseCurve.flip(); |
|
230 |
} else { |
|
231 |
curveToReverse = (Curve) curve.toLines().getPrimitiveAt(0); |
|
232 |
reverseCurve = (Curve) geometryManager.create(Geometry.TYPES.LINE, curve.getGeometryType().getSubType()); |
|
233 |
for (int i = curveToReverse.getNumVertices() - 1; i >= 0; i--) { |
|
234 |
reverseCurve.addVertex(curveToReverse.getVertex(i)); |
|
235 |
} |
|
227 | 236 |
} |
228 |
return reverseLine;
|
|
237 |
return reverseCurve;
|
|
229 | 238 |
} |
230 | 239 |
|
231 | 240 |
public void start() throws StartServiceException, InvalidEntryException { |
Also available in: Unified diff