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

View differences:

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