Revision 575

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/pom.xml
10 10
  <parent>
11 11
    <groupId>org.gvsig</groupId>
12 12
    <artifactId>org.gvsig.desktop</artifactId>
13
    <version>2.0.103</version>
13
    <version>2.0.106-SNAPSHOT</version>
14 14
  </parent>
15 15
  <url>https://devel.gvsig.org/sites/org.gvsig.vectorediting/${project.version}</url>
16 16
  <scm>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.polarmatrix/src/main/java/org/gvsig/vectorediting/lib/prov/polarmatrix/PolarMatrixEditingProviderFactory.java
42 42
 */
43 43
public class PolarMatrixEditingProviderFactory extends AbstractProviderFactory
44 44
    implements EditingProviderFactory {
45
    
45

  
46 46
    public final static String PROVIDER_NAME = "insert-polar-matrix";
47 47

  
48 48
    public final static String PROVIDER_DESCRIPTION =
......
55 55
        EditingServiceInfo serviceInfo =
56 56
            new DefaultEditingServiceinfo(PROVIDER_NAME, PROVIDER_DESCRIPTION, true, null,
57 57
                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.MULTIPOINT,
58
                    Geometry.TYPES.CURVE, Geometry.TYPES.MULTICURVE,
59
                    Geometry.TYPES.SURFACE, Geometry.TYPES.MULTISURFACE });
58
                    Geometry.TYPES.CURVE, Geometry.TYPES.LINE, Geometry.TYPES.MULTICURVE, Geometry.TYPES.MULTILINE,
59
                    Geometry.TYPES.SURFACE, Geometry.TYPES.POLYGON, Geometry.TYPES.MULTISURFACE, Geometry.TYPES.MULTIPOLYGON });
60 60

  
61 61
        return serviceInfo;
62 62
    }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/SplitLineEditingProvider.java
35 35
import org.gvsig.fmap.dal.feature.FeatureSelection;
36 36
import org.gvsig.fmap.dal.feature.FeatureStore;
37 37
import org.gvsig.fmap.geom.Geometry;
38
import org.gvsig.fmap.geom.GeometryException;
38 39
import org.gvsig.fmap.geom.GeometryLocator;
39 40
import org.gvsig.fmap.geom.aggregate.MultiCurve;
40
import org.gvsig.fmap.geom.exception.CreateGeometryException;
41 41
import org.gvsig.fmap.geom.operation.GeometryOperationException;
42 42
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
43 43
import org.gvsig.fmap.geom.primitive.Arc;
......
272 272
    }
273 273

  
274 274
    private boolean isAnArcClosed(Curve curve) {
275
        
275

  
276 276
        if( curve instanceof Arc){
277 277
            Point firstPoint = curve.getVertex(0);
278 278
            Point lastPoint = curve.getVertex(curve.getNumVertices() - 1);
279
            
279

  
280 280
            if (firstPoint.equals(lastPoint)) {
281 281
                return true;
282 282
            }
......
349 349
                            List<Geometry> result = splitMultiCurve(multiCurve, projectedPoint);
350 350

  
351 351
                            if (result != null && result.size() > 0) {
352
                                
352

  
353 353
                                // Deletes old feature
354 354
                                editingProviderService
355 355
                                    .deleteFeatureFromFeatureStore(feature,
356 356
                                        featureStore);
357
                                
357

  
358 358
                                for (Geometry geometry : result) {
359 359
                                    // Copy alfanumeric data and insert new feature
360 360
                                    EditableFeature eFeature =
361 361
                                        editingProviderService.getFeatureCopyWithoutPK(
362 362
                                            featureStore, feature);
363
                                    
363

  
364 364
                                    eFeature.setDefaultGeometry(geometry);
365 365
                                    editingProviderService
366 366
                                        .insertFeatureIntoFeatureStore(eFeature,
......
382 382

  
383 383
    private List<Geometry> splitMultiCurve(MultiCurve multiCurveToSplit,
384 384
        Point projectedPoint) throws GeometryOperationNotSupportedException,
385
        GeometryOperationException, CreateGeometryException, LocatorException,
386
        DataException {
387
        
385
        GeometryOperationException, LocatorException,
386
        DataException, GeometryException {
387

  
388 388
        List<Geometry> result = new ArrayList<Geometry>();
389
        
389

  
390 390
        Curve curveToSplit = null;
391 391

  
392 392
        for (int i = 0; i < multiCurveToSplit.getPrimitivesNumber(); i++) {
......
397 397
        }
398 398

  
399 399
        Curve[] splitedCurves = splitCurve(curveToSplit, projectedPoint);
400
            
400

  
401 401
        for(int i = 0; i < splitedCurves.length; i++){
402 402
            result.add(splitedCurves[i]);
403 403
        }
......
414 414
                multiCurve.addCurve(multiCurveToSplit.getCurveAt(i));
415 415
            }
416 416
        }
417
        
417

  
418 418
        if(multiCurve.getPrimitivesNumber() > 0){
419 419
            result.add(multiCurve);
420 420
        }
421
        
421

  
422 422
        return result;
423 423
    }
424 424

  
425 425
    private Curve[] splitCurve(Curve curveToSplit, Point projectedPoint)
426
        throws DataException, CreateGeometryException, LocatorException,
427
        GeometryOperationNotSupportedException, GeometryOperationException {
426
        throws DataException, LocatorException,
427
        GeometryOperationNotSupportedException, GeometryOperationException, GeometryException {
428 428

  
429 429
        SplitLineOperation operation =
430 430
            SplitLineOperationUtils.getOperation((Primitive) curveToSplit);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/SplitLineEditingLibrary.java
70 70
            Geometry.TYPES.ARC);
71 71
        SplitLineOperationUtils.register(new CurveSplitLineOperation(),
72 72
            Geometry.TYPES.LINE);
73
        //FIXME: Comprobar si el comportamiento de la operaci?n SplineSplitLineOperation es el deseado
74
        // y si s?, registrarla en lugar de CurveSpliLineOperation para Splines
73 75
        SplitLineOperationUtils.register(new CurveSplitLineOperation(),
74 76
            Geometry.TYPES.SPLINE);
75 77

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/operation/CurveSplitLineOperation.java
25 25
package org.gvsig.vectorediting.lib.prov.splitline.operation;
26 26

  
27 27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.fmap.geom.GeometryException;
28 29
import org.gvsig.fmap.geom.GeometryLocator;
29 30
import org.gvsig.fmap.geom.GeometryManager;
30
import org.gvsig.fmap.geom.exception.CreateGeometryException;
31 31
import org.gvsig.fmap.geom.operation.GeometryOperationException;
32 32
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
33 33
import org.gvsig.fmap.geom.primitive.Curve;
34
import org.gvsig.fmap.geom.primitive.Line;
34 35
import org.gvsig.fmap.geom.primitive.Point;
35 36
import org.gvsig.tools.locator.LocatorException;
36 37

  
......
42 43
public class CurveSplitLineOperation implements SplitLineOperation {
43 44

  
44 45
    public Curve[] split(Geometry geometry, Point projectedPoint)
45
        throws CreateGeometryException, LocatorException,
46
        GeometryOperationNotSupportedException, GeometryOperationException {
47
        
46
        throws LocatorException,
47
        GeometryOperationNotSupportedException, GeometryOperationException, GeometryException {
48

  
48 49
        Curve lineToSplit = (Curve) geometry;
50
        if(!(lineToSplit instanceof Line)){
51
            lineToSplit = (Curve) lineToSplit.toLines().getPrimitiveAt(0);
52
        }
49 53

  
50 54
        int subtype = geometry.getGeometryType().getSubType();
51 55

  
......
79 83
        }
80 84

  
81 85
        return new Curve[] { splittedLine1, splittedLine2 };
82
        
83
        
86

  
87

  
84 88
    }
85 89

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

  
25
package org.gvsig.vectorediting.lib.prov.splitline.operation;
26

  
27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.fmap.geom.GeometryException;
29
import org.gvsig.fmap.geom.GeometryLocator;
30
import org.gvsig.fmap.geom.GeometryManager;
31
import org.gvsig.fmap.geom.operation.GeometryOperationException;
32
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
33
import org.gvsig.fmap.geom.primitive.Curve;
34
import org.gvsig.fmap.geom.primitive.Line;
35
import org.gvsig.fmap.geom.primitive.Point;
36
import org.gvsig.fmap.geom.primitive.Spline;
37
import org.gvsig.tools.locator.LocatorException;
38

  
39

  
40
/**
41
 * @author llmarques
42
 *
43
 */
44
public class SplineSplitLineOperation implements SplitLineOperation {
45

  
46
    public Curve[] split(Geometry geometry, Point projectedPoint)
47
        throws LocatorException,
48
        GeometryOperationNotSupportedException, GeometryOperationException, GeometryException {
49

  
50
        Spline splineToSplit = (Spline) geometry;
51
        Line lineToSplit = (Line) ((Spline) geometry).toLines().getPrimitiveAt(0);
52

  
53
        int subtype = geometry.getGeometryType().getSubType();
54

  
55
        GeometryManager geoManager = GeometryLocator.getGeometryManager();
56

  
57
        Spline splittedLine1 =
58
            (Spline) GeometryLocator.getGeometryManager().create(Geometry.TYPES.SPLINE, subtype);
59

  
60
        int index = 0;
61
        Point originalVertex = splineToSplit.getVertex(index);
62
        int pointer = 0;
63
        for (; pointer < lineToSplit.getNumVertices() - 1; pointer++) {
64

  
65
            Point vertex = lineToSplit.getVertex(pointer);
66
            if(vertex.equals(originalVertex)){
67
                splittedLine1.addVertex(vertex);
68
                index++;
69
                originalVertex = splineToSplit.getVertex(index);
70
            }
71

  
72
            Curve segment = geoManager.createLine(subtype);
73
            segment.setPoints(lineToSplit.getVertex(pointer),
74
                lineToSplit.getVertex(pointer + 1));
75

  
76
            if (SplitLineOperationUtils.intersects(segment, projectedPoint)) {
77
                splittedLine1.addVertex(projectedPoint);
78
                pointer++;
79
                break;
80
            }
81
        }
82

  
83
        Spline splittedLine2 =
84
            (Spline) GeometryLocator.getGeometryManager().create(Geometry.TYPES.SPLINE, subtype);
85
        splittedLine2.addVertex(projectedPoint);
86

  
87
        for (; index < splineToSplit.getNumVertices(); index++) {
88
            splittedLine2.addVertex(splineToSplit.getVertex(index));
89
        }
90

  
91
        return new Curve[] { splittedLine1, splittedLine2 };
92

  
93

  
94
    }
95

  
96
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/operation/SplitLineOperation.java
25 25
package org.gvsig.vectorediting.lib.prov.splitline.operation;
26 26

  
27 27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.fmap.geom.GeometryException;
28 29
import org.gvsig.fmap.geom.exception.CreateGeometryException;
29 30
import org.gvsig.fmap.geom.operation.GeometryOperationException;
30 31
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
......
38 39
 *
39 40
 */
40 41
public interface SplitLineOperation {
41
    
42

  
42 43
    public Curve[] split(Geometry geometry, Point projectedPoint)
43 44
        throws CreateGeometryException, LocatorException,
44
        GeometryOperationNotSupportedException, GeometryOperationException;
45
        GeometryOperationNotSupportedException, GeometryOperationException, GeometryException;
45 46
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circle3p/src/main/java/org/gvsig/vectorediting/lib/prov/circle3p/Circle3PEditingProvider.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.GeometryLocator;
35
import org.gvsig.fmap.geom.GeometryManager;
35 36
import org.gvsig.fmap.geom.aggregate.MultiSurface;
36
import org.gvsig.fmap.geom.primitive.Arc;
37
import org.gvsig.fmap.geom.exception.CreateGeometryException;
37 38
import org.gvsig.fmap.geom.primitive.Circle;
38 39
import org.gvsig.fmap.geom.primitive.Curve;
39 40
import org.gvsig.fmap.geom.primitive.Point;
......
176 177
                            secondPointValue, mousePosition, subtype);
177 178
                    double radius = center.distance(firstPointValue);
178 179

  
179
                    Circle circle =
180
                        editingProviderServices.createCircle(center, radius, subtype);
180
                    addTemporaryGeometryToDrawingStatus(drawingStatus, subtype, center, radius);
181 181
                    drawingStatus.addStatus(center, auxiliaryPointSymbolEditing, "");
182
                    drawingStatus.addStatus(circle, polygonSymbolEditing, "");
183 182

  
184 183
                } catch (Exception e) {
185 184
                    throw new DrawServiceException(e);
......
189 188
        return drawingStatus;
190 189
    }
191 190

  
191
    /**
192
     * @param drawingStatus
193
     * @param subtype
194
     * @param center
195
     * @param radius
196
     * @throws CreateGeometryException
197
     */
198
    protected void addTemporaryGeometryToDrawingStatus(DefaultDrawingStatus drawingStatus, int subtype, Point center, double radius)
199
        throws CreateGeometryException {
200
        EditingProviderManager editingProviderManager =
201
            EditingProviderLocator.getProviderManager();
202
        ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing");
203
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
204
        Circle circle = (Circle)geomManager.create(Geometry.TYPES.CIRCLE, subtype);
205
        circle.setPoints(center, radius);
206
        drawingStatus.addStatus(circle, polygonSymbolEditing, "");
207
    }
208

  
192 209
    public void stop() throws StopServiceException {
193 210
        if (values != null) {
194 211
            values.clear();
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circle3p/src/main/java/org/gvsig/vectorediting/lib/prov/circle3p/Circumference3PEditingProvider.java
26 26

  
27 27
import org.gvsig.fmap.geom.Geometry;
28 28
import org.gvsig.fmap.geom.GeometryLocator;
29
import org.gvsig.fmap.geom.GeometryManager;
29 30
import org.gvsig.fmap.geom.aggregate.MultiCurve;
30
import org.gvsig.fmap.geom.primitive.Arc;
31
import org.gvsig.fmap.geom.primitive.Circle;
31
import org.gvsig.fmap.geom.exception.CreateGeometryException;
32
import org.gvsig.fmap.geom.primitive.Circumference;
32 33
import org.gvsig.fmap.geom.primitive.Point;
33 34
import org.gvsig.fmap.geom.type.GeometryType;
35
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
34 36
import org.gvsig.tools.dynobject.DynObject;
35 37
import org.gvsig.tools.service.spi.ProviderServices;
36
import org.gvsig.vectorediting.lib.api.DrawingStatus;
37 38
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
39
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
38 40
import org.gvsig.vectorediting.lib.spi.EditingProvider;
41
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
42
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
39 43
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
40 44

  
41 45
public class Circumference3PEditingProvider extends Circle3PEditingProvider
......
49 53
    @Override
50 54
    public Geometry finish() throws FinishServiceException {
51 55

  
52
        Point thridPointValue = (Point) values.get(thirdPoint);
56
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
57

  
53 58
        EditingProviderServices editingProviderServices =
54 59
            (EditingProviderServices) getProviderServices();
55 60

  
......
65 70
                    secondPointValue, thirdPointValue, subtype);
66 71
            double radius = center.distance(firstPointValue);
67 72

  
68
            Arc circumference =
69
                editingProviderServices.createArc(center, radius, 0,
70
                    2 * Math.PI, subtype);
73
            Circumference circumference = (Circumference)geomManager.create(CIRCUMFERENCE, subtype);
74
            circumference.setPoints(center, radius);
71 75

  
72 76
            GeometryType geomType =
73 77
                editingProviderServices.getGeomType(featureStore);
74 78

  
75 79
            if (geomType.isTypeOf(MULTICURVE)) {
76

  
77
                MultiCurve multiCurve;
78
                multiCurve =
80
                MultiCurve multicurve;
81
                multicurve =
79 82
                    GeometryLocator.getGeometryManager().createMultiCurve(
80 83
                        geomType.getSubType());
81
                multiCurve.addCurve(circumference);
82
                return multiCurve;
84
                multicurve.addCurve((Circumference) circumference);
85
                return multicurve;
83 86
            }
84 87

  
85 88
            return circumference;
......
93 96
        return Circumference3PEditingProviderFactory.PROVIDER_NAME;
94 97
    }
95 98

  
99

  
100
    /**
101
     * @param drawingStatus
102
     * @param subtype
103
     * @param center
104
     * @param radius
105
     * @throws CreateGeometryException
106
     */
107
    protected void addTemporaryGeometryToDrawingStatus(DefaultDrawingStatus drawingStatus, int subtype, Point center, double radius)
108
        throws CreateGeometryException {
109
        EditingProviderManager editingProviderManager =
110
            EditingProviderLocator.getProviderManager();
111
        ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
112
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
113
        Circumference circumference = (Circumference)geomManager.create(Geometry.TYPES.CIRCUMFERENCE, subtype);
114
        circumference.setPoints(center, radius);
115
        drawingStatus.addStatus(circumference, lineSymbolEditing, "");
116
    }
117

  
96 118
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/EditVertexEditingLibrary.java
33 33
import org.gvsig.tools.library.LibraryException;
34 34
import org.gvsig.vectorediting.lib.prov.editvertex.operation.ArcEditVertexOperation;
35 35
import org.gvsig.vectorediting.lib.prov.editvertex.operation.CircleEditVertexOperation;
36
import org.gvsig.vectorediting.lib.prov.editvertex.operation.CurveEditVertexOperation;
36
import org.gvsig.vectorediting.lib.prov.editvertex.operation.CircumferenceEditVertexOperation;
37 37
import org.gvsig.vectorediting.lib.prov.editvertex.operation.EditVertexOperationUtils;
38 38
import org.gvsig.vectorediting.lib.prov.editvertex.operation.EllipseEditVertexOperation;
39
import org.gvsig.vectorediting.lib.prov.editvertex.operation.FilledEllipseEditVertexOperation;
40
import org.gvsig.vectorediting.lib.prov.editvertex.operation.FilledSplineEditVertexOperation;
39 41
import org.gvsig.vectorediting.lib.prov.editvertex.operation.LineEditVertexOperation;
40 42
import org.gvsig.vectorediting.lib.prov.editvertex.operation.PolygonEditVertexOperation;
43
import org.gvsig.vectorediting.lib.prov.editvertex.operation.SplineEditVertexOperation;
41 44
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
42 45
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
43 46

  
......
62 65
            .getClass().getClassLoader(), this.getClass().getName());
63 66

  
64 67
        EditVertexOperationUtils.register(new LineEditVertexOperation(), Geometry.TYPES.LINE);
65
        EditVertexOperationUtils.register(new CurveEditVertexOperation(), Geometry.TYPES.SPLINE);
68
        EditVertexOperationUtils.register(new SplineEditVertexOperation(), Geometry.TYPES.SPLINE);
66 69
        EditVertexOperationUtils.register(new ArcEditVertexOperation(), Geometry.TYPES.ARC);
67 70
        EditVertexOperationUtils.register(new PolygonEditVertexOperation(), Geometry.TYPES.POLYGON);
68 71
        EditVertexOperationUtils.register(new CircleEditVertexOperation(), Geometry.TYPES.CIRCLE);
69
        EditVertexOperationUtils.register(new EllipseEditVertexOperation(), Geometry.TYPES.ELLIPSE);
72
        EditVertexOperationUtils.register(new CircumferenceEditVertexOperation(), Geometry.TYPES.CIRCUMFERENCE);
73
        EditVertexOperationUtils.register(new EllipseEditVertexOperation(), Geometry.TYPES.PERIELLIPSE);
74
        EditVertexOperationUtils.register(new FilledSplineEditVertexOperation(), Geometry.TYPES.FILLEDSPLINE);
75
        EditVertexOperationUtils.register(new FilledEllipseEditVertexOperation(), Geometry.TYPES.ELLIPSE);
70 76

  
71 77
        registerTranslations();
72 78
    }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/ArcEditVertexOperation.java
10 10
import org.gvsig.fmap.geom.operation.GeometryOperationException;
11 11
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
12 12
import org.gvsig.fmap.geom.primitive.Arc;
13
import org.gvsig.fmap.geom.primitive.Ellipse;
14 13
import org.gvsig.fmap.geom.primitive.Envelope;
15
import org.gvsig.fmap.geom.primitive.GeneralPathX;
16 14
import org.gvsig.fmap.geom.primitive.Line;
17
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
18 15
import org.gvsig.fmap.geom.primitive.Point;
19 16
import org.gvsig.fmap.geom.primitive.Primitive;
20 17
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
......
46 43
        Arc arc = (Arc) geom;
47 44
        Arc result = (Arc) arc.cloneGeometry();
48 45

  
49
        Point center = arc.getCenterPoint();
46
        Point center = result.getCenterPoint();
50 47
        if(center == null){
51 48
            Envelope envelope = arc.getEnvelope();
52 49
            center = geometryManager.createPoint(envelope.getCenter(0), envelope.getCenter(1), geom.getGeometryType().getSubType());
53 50
        }
54 51

  
55
        Point initPoint = arc.getInitPoint();
52
        Point initPoint = result.getInitPoint();
53
        Point middlePoint = result.getMiddlePoint();
54
        Point endPoint = result.getEndPoint();
55

  
56 56
        double radius = center.distance(initPoint);
57
        double startAngle = getAngle(center, initPoint);
58
        Point endPoint = arc.getEndPoint();
59
        double endAngle = getAngle(center, endPoint);
60 57

  
58
        double angle = getAngle(center, point);
59

  
61 60
        switch (index) {
62 61
        case 0:
63
            result.setPointsStartEnd(point, radius, startAngle, endAngle);
62
            double dx = point.getX()-center.getX();
63
            double dy = point.getY()-center.getY();
64
            initPoint.setX(initPoint.getX()+dx);
65
            initPoint.setY(initPoint.getY()+dy);
66
            middlePoint.setX(middlePoint.getX()+dx);
67
            middlePoint.setY(middlePoint.getY()+dy);
68
            endPoint.setX(endPoint.getX()+dx);
69
            endPoint.setY(endPoint.getY()+dy);
70
            result.setPoints(initPoint, middlePoint, endPoint);
71

  
64 72
            break;
65 73
        case 1:
66
            if (initPoint.equals(endPoint)) {
67
                result.setPointsStartEnd(center, center.distance(point),
68
                    startAngle, endAngle);
69
            } else {
70
                result.setPointsStartEnd(center, center.distance(point),
71
                    getAngle(center, point), endAngle);
72
            }
74
            initPoint.setX(center.getX()+Math.cos(angle)*radius);
75
            initPoint.setY(center.getY()+Math.sin(angle)*radius);
76
            result.setPoints(initPoint, middlePoint, endPoint);
77

  
73 78
            break;
74 79
        case 2:
75
            if (initPoint.equals(endPoint)) {
76
                result.setPointsStartEnd(center, center.distance(point),
77
                    startAngle, endAngle);
78
            } else {
79
                result.setPointsStartEnd(center, center.distance(point),
80
                    startAngle, getAngle(center, point));
81
            }
80
            endPoint.setX(center.getX()+Math.cos(angle)*radius);
81
            endPoint.setY(center.getY()+Math.sin(angle)*radius);
82
            result.setPoints(initPoint, middlePoint, endPoint);
82 83
            break;
84

  
85
        case 3:
86
            middlePoint.setX(center.getX()+Math.cos(angle)*radius);
87
            middlePoint.setY(center.getY()+Math.sin(angle)*radius);
88
            result.setPoints(initPoint, middlePoint, endPoint);
89
            break;
83 90
        default:
84 91
            break;
85 92
        }
......
101 108

  
102 109
        vertexList.add(arc.getInitPoint());
103 110
        vertexList.add(arc.getEndPoint());
111
        vertexList.add(arc.getMiddlePoint());
104 112
        return vertexList;
105 113
    }
106 114

  
107 115
    public int getNumVertex(Primitive geom) {
108
        return 3;
116
        return 4;
109 117
    }
110 118

  
111 119
    public boolean canInsertVertex(Primitive geom, int index) {
......
164 172
        Line auxLine2 = geometryManager.createLine(primitive.getGeometryType().getSubType());
165 173
        auxLine2.setPoints(center,arc.getEndPoint());
166 174
        drawingStatus.addStatus(auxLine2, auxiliaryLineSymbolEditing, "");
175
        Line auxLine3 = geometryManager.createLine(primitive.getGeometryType().getSubType());
176
        auxLine3.setPoints(center,arc.getMiddlePoint());
177
        drawingStatus.addStatus(auxLine3, auxiliaryLineSymbolEditing, "");
167 178
        drawingStatus.addStatus(arc.getInitPoint(), pointSymbolEditing, "");
168 179
        drawingStatus.addStatus(arc.getEndPoint(), pointSymbolEditing, "");
180
        drawingStatus.addStatus(arc.getMiddlePoint(), pointSymbolEditing, "");
169 181

  
170 182
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
171 183
    }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/PolygonEditVertexOperation.java
22 22
        // TODO Auto-generated constructor stub
23 23
    }
24 24

  
25
    public Geometry insertVertex(Primitive geom, int index)
26
        throws CreateGeometryException {
25
    public Geometry insertVertex(Primitive geom, int index) throws CreateGeometryException {
27 26
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
28
        Polygon result =
29
            geometryManager.createPolygon(geom.getGeometryType().getSubType());
30 27

  
31
        Polygon polygon = (Polygon) geom;
28
        Polygon polygon = (Polygon) geom.cloneGeometry();
32 29
        int numVertices = polygon.getNumVertices();
33
        boolean added = false;
34
        Point lastVertex = polygon.getVertex(numVertices - 1);
35 30
        if (index < 0 || index >= numVertices) {
36
            return geom;
31
            return polygon;
37 32
        }
38 33
        int indexToInsert = index;
39
        if (index == 0 && polygon.getVertex(0).equals(lastVertex)) {
34
        Point antVertex = polygon.getVertex(numVertices - 1);
35
        if (index == 0 && polygon.getVertex(0).equals(antVertex)) {
40 36
            indexToInsert = numVertices - 1;
41 37
        }
42 38

  
43
        if (indexToInsert == 0) {
44
            Point point = polygon.getVertex(0);
45
            if (!point.equals(lastVertex)) {
46
                result.addVertex(geometryManager.createPoint(
47
                    (point.getX() + lastVertex.getX()) / 2,
48
                    (point.getY() + lastVertex.getY()) / 2, geom
49
                        .getGeometryType().getSubType()));
50
                added = true;
51
            }
39
        if (indexToInsert!=0){
40
            antVertex = polygon.getVertex(indexToInsert - 1);
52 41
        }
53
        Point antPoint = null;
54
        for (int i = 0; i < numVertices; i++) {
55
            Point point = polygon.getVertex(i);
56
            if (i == indexToInsert && !added) {
57
                result.addVertex(geometryManager.createPoint(
58
                    (point.getX() + antPoint.getX()) / 2,
59
                    (point.getY() + antPoint.getY()) / 2, geom
60
                        .getGeometryType().getSubType()));
61

  
62
            }
63
            result.addVertex(point);
64
            antPoint = point;
65
        }
66
        return result;
42
        Point point = polygon.getVertex(indexToInsert);
43
        Point newPoint = geometryManager.createPoint((point.getX() + antVertex.getX()) / 2,
44
            (point.getY() + antVertex.getY()) / 2, geom.getGeometryType().getSubType());
45
        polygon.insertVertex(indexToInsert, newPoint);
46
        return polygon;
67 47
    }
68 48

  
69 49
    public Geometry removeVertex(Primitive geom, int index)
70 50
        throws CreateGeometryException {
71
        Polygon polygon = (Polygon) geom;
51
        Polygon polygon = (Polygon) geom.cloneGeometry();
72 52
        int numVertices = polygon.getNumVertices();
73 53
        if (index < 0 || index >= numVertices) {
74
            return geom;
54
            return polygon;
75 55
        }
76
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
77
        Polygon result =
78
            geometryManager.createPolygon(geom.getGeometryType().getSubType());
79 56

  
80 57
        if (polygon.getVertex(0).equals(polygon.getVertex(numVertices - 1))) {
81 58
            if (numVertices <= 4) {
82
                return geom;
59
                return polygon;
83 60
            }
84 61
            numVertices--;
85 62
        } else {
86 63
            if (numVertices <= 3) {
87
                return geom;
64
                return polygon;
88 65
            }
89 66
        }
67
        polygon.removeVertex(index);
90 68

  
91
        int j = 0;
92
        for (int i = 0; i < numVertices; i++) {
93
            Point point = polygon.getVertex(i);
94
            if (i == index) {
95
                continue;
96
            }
97
            result.addVertex(point);
98
            j++;
99
        }
100
        if (!result.getVertex(0).equals(result.getVertex(j - 1))) {
101
            result.addVertex(result.getVertex(0));
102
        }
103

  
104
        return result;
69
        return polygon;
105 70
    }
106 71

  
107 72
    public Geometry moveVertex(Primitive geom, int index, Point point) {
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/CircumferenceEditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.GeometryLocator;
8
import org.gvsig.fmap.geom.GeometryManager;
9
import org.gvsig.fmap.geom.exception.CreateGeometryException;
10
import org.gvsig.fmap.geom.primitive.Circumference;
11
import org.gvsig.fmap.geom.primitive.Point;
12
import org.gvsig.fmap.geom.primitive.Primitive;
13
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
14
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
15
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
16
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
17

  
18
public class CircumferenceEditVertexOperation implements EditVertexOperation {
19

  
20
    public CircumferenceEditVertexOperation() {
21
        // TODO Auto-generated constructor stub
22
    }
23

  
24
    public Geometry insertVertex(Primitive geom, int index)
25
        throws CreateGeometryException {
26
        return null;
27
    }
28

  
29
    public Geometry removeVertex(Primitive geom, int index)
30
        throws CreateGeometryException {
31
        return null;
32
    }
33

  
34
    public Geometry moveVertex(Primitive geom, int index, Point point) {
35
        Circumference result = (Circumference) geom.cloneGeometry();
36
        if(index == 0){
37
            result.setPoints(point, ((Circumference)geom).getRadious());
38
        } else if (index == 1){
39
            result.setPoints(((Circumference)geom).getCenter(), point);
40
        }
41
        return result;
42
    }
43

  
44
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException {
45
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
46
        ArrayList<Point> vertexList = new ArrayList<Point>();
47
        Circumference circumference = (Circumference) geom;
48
        Point center = circumference.getCenter();
49
        vertexList.add(center);
50
        vertexList.add(geometryManager.createPoint(center.getX()
51
            + circumference.getRadious(), center.getY(), geom
52
            .getGeometryType().getSubType()));
53

  
54
        return vertexList;
55
    }
56

  
57
    public int getNumVertex(Primitive geom) {
58
        return 2;
59
    }
60

  
61
    public boolean canInsertVertex(Primitive geom, int index) {
62
        return false;
63
    }
64

  
65
    public boolean canRemoveVertex(Primitive geom, int index) {
66
        return false;
67
    }
68

  
69
    public boolean canMoveVertex(int index, Point point) {
70
        return true;
71
    }
72

  
73
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
74
        Primitive primitive) {
75
        EditingProviderManager editingProviderManager =
76
            EditingProviderLocator.getProviderManager();
77
        ISymbol lineSymbolEditing =
78
            editingProviderManager.getSymbol("line-symbol-editing");
79
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
80
    }
81

  
82
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/FilledSplineEditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.GeometryLocator;
8
import org.gvsig.fmap.geom.GeometryManager;
9
import org.gvsig.fmap.geom.exception.CreateGeometryException;
10
import org.gvsig.fmap.geom.primitive.FilledSpline;
11
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
12
import org.gvsig.fmap.geom.primitive.Point;
13
import org.gvsig.fmap.geom.primitive.Primitive;
14
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
15
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
16
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
17
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
18

  
19
public class FilledSplineEditVertexOperation implements EditVertexOperation {
20

  
21
    public FilledSplineEditVertexOperation() {
22
        // TODO Auto-generated constructor stub
23
    }
24

  
25
    public Geometry insertVertex(Primitive geom, int index)
26
        throws CreateGeometryException {
27
        if (index == 0) {
28
            return geom;
29
        }
30
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
31
        FilledSpline result =
32
            (FilledSpline) geometryManager.create(Geometry.TYPES.FILLEDSPLINE,geom.getGeometryType().getSubType());
33

  
34
        FilledSpline filledSpline = (FilledSpline) geom;
35
        int numVertices = filledSpline.getNumVertices();
36

  
37
        Point antPoint = null;
38
        for (int i = 0; i < numVertices; i++) {
39
            Point point = filledSpline.getVertex(i);
40
            if (i == index) {
41
                result.addVertex(geometryManager.createPoint(
42
                    (point.getX() + antPoint.getX()) / 2,
43
                    (point.getY() + antPoint.getY()) / 2, geom
44
                        .getGeometryType().getSubType()));
45

  
46
            }
47
            result.addVertex(point);
48
            antPoint = point;
49
        }
50
        return result;
51
    }
52

  
53
    public Geometry removeVertex(Primitive geom, int index)
54
        throws CreateGeometryException {
55
        if (index < 0) {
56
            return geom;
57
        }
58
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
59
        FilledSpline result =
60
            (FilledSpline) geometryManager.create(Geometry.TYPES.SPLINE,geom.getGeometryType().getSubType());
61

  
62
        FilledSpline filledSpline = (FilledSpline) geom;
63
        int numVertices = filledSpline.getNumVertices();
64

  
65
        for (int i = 0; i < numVertices; i++) {
66
            Point point = filledSpline.getVertex(i);
67
            if (i == index) {
68
                continue;
69
            }
70
            result.addVertex(point);
71
        }
72
        return result;
73
    }
74

  
75
    public Geometry moveVertex(Primitive geom, int index, Point point) {
76
        FilledSpline result = (FilledSpline) geom.cloneGeometry();
77
        int numVertices = result.getNumVertices();
78
        if (result.getVertex(0).equals(result.getVertex(numVertices - 1))) {
79
            if (index == 0 || index == (result.getNumVertices() - 1)) {
80
                EditVertexOperationUtils.setVertex(result, 0, point);
81
                EditVertexOperationUtils.setVertex(result,
82
                    result.getNumVertices() - 1, (Point)point.cloneGeometry());
83
                return result;
84
            }
85
        }
86
        EditVertexOperationUtils.setVertex(result, index, point);
87
        return result;
88
    }
89

  
90
    public List<Point> getVertexesList(Primitive geom) {
91
        ArrayList<Point> vertexList = new ArrayList<Point>();
92
        if (geom instanceof OrientablePrimitive) {
93
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
94
            orientable.getNumVertices();
95
            for (int i = 0; i < orientable.getNumVertices(); i++) {
96
                vertexList.add(orientable.getVertex(i));
97
            }
98
        }
99
        return vertexList;
100
    }
101

  
102
    public int getNumVertex(Primitive geom) {
103
        if (geom instanceof OrientablePrimitive) {
104
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
105
            return orientable.getNumVertices();
106
        }
107
        return 0;
108
    }
109

  
110
    public boolean canInsertVertex(Primitive geom, int index) {
111
        if (index == 0) {
112
            return false;
113
        }
114
        return true;
115
    }
116

  
117
    public boolean canRemoveVertex(Primitive geom, int index) {
118
        return true;
119
    }
120

  
121
    public boolean canMoveVertex(int index, Point point) {
122
        return true;
123
    }
124

  
125
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
126
        Primitive primitive) {
127
        EditingProviderManager editingProviderManager =
128
            EditingProviderLocator.getProviderManager();
129
        ISymbol lineSymbolEditing =
130
            editingProviderManager.getSymbol("polygon-symbol-editing");
131
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
132
    }
133

  
134
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/SplineEditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.GeometryLocator;
8
import org.gvsig.fmap.geom.GeometryManager;
9
import org.gvsig.fmap.geom.exception.CreateGeometryException;
10
import org.gvsig.fmap.geom.primitive.GeneralPathX;
11
import org.gvsig.fmap.geom.primitive.Line;
12
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
13
import org.gvsig.fmap.geom.primitive.Point;
14
import org.gvsig.fmap.geom.primitive.Primitive;
15
import org.gvsig.fmap.geom.primitive.Spline;
16
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
18
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
19
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
20

  
21
public class SplineEditVertexOperation implements EditVertexOperation {
22

  
23
    public SplineEditVertexOperation() {
24
        // TODO Auto-generated constructor stub
25
    }
26

  
27
    public Geometry insertVertex(Primitive geom, int index)
28
        throws CreateGeometryException {
29
        if (index == 0) {
30
            return geom;
31
        }
32
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
33
        Spline result =
34
            (Spline) geometryManager.create(Geometry.TYPES.SPLINE,geom.getGeometryType().getSubType());
35

  
36
        Spline spline = (Spline) geom;
37
        int numVertices = spline.getNumVertices();
38

  
39
        Point antPoint = null;
40
        for (int i = 0; i < numVertices; i++) {
41
            Point point = spline.getVertex(i);
42
            if (i == index) {
43
                result.addVertex(geometryManager.createPoint(
44
                    (point.getX() + antPoint.getX()) / 2,
45
                    (point.getY() + antPoint.getY()) / 2, geom
46
                        .getGeometryType().getSubType()));
47

  
48
            }
49
            result.addVertex(point);
50
            antPoint = point;
51
        }
52
        return result;
53
    }
54

  
55
    public Geometry removeVertex(Primitive geom, int index)
56
        throws CreateGeometryException {
57
        if (index < 0) {
58
            return geom;
59
        }
60
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
61
        Spline result =
62
            (Spline) geometryManager.create(Geometry.TYPES.SPLINE,geom.getGeometryType().getSubType());
63

  
64
        Spline spline = (Spline) geom;
65
        int numVertices = spline.getNumVertices();
66

  
67
        for (int i = 0; i < numVertices; i++) {
68
            Point point = spline.getVertex(i);
69
            if (i == index) {
70
                continue;
71
            }
72
            result.addVertex(point);
73
        }
74
        return result;
75
    }
76

  
77
    public Geometry moveVertex(Primitive geom, int index, Point point) {
78
        Spline result = (Spline) geom.cloneGeometry();
79
        EditVertexOperationUtils.setVertex(result, index, point);
80
        return result;
81
    }
82

  
83
    public List<Point> getVertexesList(Primitive geom) {
84
        ArrayList<Point> vertexList = new ArrayList<Point>();
85
        if (geom instanceof OrientablePrimitive) {
86
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
87
            orientable.getNumVertices();
88
            for (int i = 0; i < orientable.getNumVertices(); i++) {
89
                vertexList.add(orientable.getVertex(i));
90
            }
91
        }
92
        return vertexList;
93
    }
94

  
95
    public int getNumVertex(Primitive geom) {
96
        if (geom instanceof OrientablePrimitive) {
97
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
98
            return orientable.getNumVertices();
99
        }
100
        return 0;
101
    }
102

  
103
    public boolean canInsertVertex(Primitive geom, int index) {
104
        if (index == 0) {
105
            return false;
106
        }
107
        return true;
108
    }
109

  
110
    public boolean canRemoveVertex(Primitive geom, int index) {
111
        return true;
112
    }
113

  
114
    public boolean canMoveVertex(int index, Point point) {
115
        return true;
116
    }
117

  
118
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
119
        Primitive primitive) {
120
        EditingProviderManager editingProviderManager =
121
            EditingProviderLocator.getProviderManager();
122
        ISymbol lineSymbolEditing =
123
            editingProviderManager.getSymbol("line-symbol-editing");
124
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
125
    }
126

  
127
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/EllipseEditVertexOperation.java
9 9
import org.gvsig.fmap.geom.exception.CreateGeometryException;
10 10
import org.gvsig.fmap.geom.operation.GeometryOperationException;
11 11
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
12
import org.gvsig.fmap.geom.primitive.Circle;
13
import org.gvsig.fmap.geom.primitive.Ellipse;
14 12
import org.gvsig.fmap.geom.primitive.Line;
13
import org.gvsig.fmap.geom.primitive.PeriEllipse;
15 14
import org.gvsig.fmap.geom.primitive.Point;
16 15
import org.gvsig.fmap.geom.primitive.Primitive;
17 16
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
......
37 36

  
38 37
    public Geometry moveVertex(Primitive geom, int index, Point point) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
39 38
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
40
        Ellipse result = (Ellipse) geom.cloneGeometry();
39
        PeriEllipse original = (PeriEllipse)geom;
40
        PeriEllipse result = (PeriEllipse) original.cloneGeometry();
41 41
        if(index == 0){
42
            result.setPoints(point, ((Ellipse)geom).getAxis1End(), ((Ellipse)geom).getAxis2Dist());
42
            result.setPoints(point, original.getAxis1End(), original.getAxis2Dist());
43 43
        } else if (index == 1){
44
            result.setPoints(((Ellipse)geom).getAxis1Start(), point, ((Ellipse)geom).getAxis2Dist());
44
            result.setPoints(original.getAxis1Start(), point, original.getAxis2Dist());
45 45
        } else if (index == 2){
46
            Point axis1Start = ((Ellipse)geom).getAxis1Start();
47
            Point axis1End = ((Ellipse)geom).getAxis1End();
46
            Point axis1Start = original.getAxis1Start();
47
            Point axis1End = original.getAxis1End();
48 48
            Point center = geometryManager.createPoint(
49 49
                (axis1Start.getX()+axis1End.getX())/2,
50 50
                (axis1Start.getY()+axis1End.getY())/2,
51 51
                geom.getGeometryType().getSubType());
52
            result.setPoints(((Ellipse)geom).getAxis1Start(), ((Ellipse)geom).getAxis1End(), center.distance(point));
52
            result.setPoints(original.getAxis1Start(), original.getAxis1End(), center.distance(point));
53 53
        }
54 54
        return result;
55 55
    }
......
57 57
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
58 58
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
59 59
        ArrayList<Point> vertexList = new ArrayList<Point>();
60
        Ellipse ellipse = (Ellipse) geom;
60
        PeriEllipse ellipse = (PeriEllipse) geom;
61 61
        Point axis1Start = ellipse.getAxis1Start();
62 62
        vertexList.add(axis1Start);
63 63
        Point axis1End = ellipse.getAxis1End();
......
117 117
            EditingProviderLocator.getProviderManager();
118 118
        ISymbol auxiliaryLineSymbolEditing =
119 119
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
120
        ISymbol polygonSymbolEditing =
121
            editingProviderManager.getSymbol("polygon-symbol-editing");
122
        Ellipse ellipse = (Ellipse)primitive;
120
        ISymbol lineSymbolEditing =
121
            editingProviderManager.getSymbol("line-symbol-editing");
122
        PeriEllipse ellipse = (PeriEllipse)primitive;
123 123
        Point axis1Start = ellipse.getAxis1Start();
124 124
        Point axis1End = ellipse.getAxis1End();
125 125
        Line axis1Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
......
149 149
            axis2Point2);
150 150
        drawingStatus.addStatus(axis2Line, auxiliaryLineSymbolEditing, "");
151 151

  
152
        drawingStatus.addStatus(primitive, polygonSymbolEditing, "");
152
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
153 153
    }
154 154

  
155 155
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/FilledEllipseEditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.GeometryLocator;
8
import org.gvsig.fmap.geom.GeometryManager;
9
import org.gvsig.fmap.geom.exception.CreateGeometryException;
10
import org.gvsig.fmap.geom.operation.GeometryOperationException;
11
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
12
import org.gvsig.fmap.geom.primitive.Ellipse;
13
import org.gvsig.fmap.geom.primitive.Line;
14
import org.gvsig.fmap.geom.primitive.Point;
15
import org.gvsig.fmap.geom.primitive.Primitive;
16
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
18
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
19
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
20

  
21
public class FilledEllipseEditVertexOperation implements EditVertexOperation {
22

  
23
    public FilledEllipseEditVertexOperation() {
24
        // TODO Auto-generated constructor stub
25
    }
26

  
27
    public Geometry insertVertex(Primitive geom, int index)
28
        throws CreateGeometryException {
29
        return null;
30
    }
31

  
32
    public Geometry removeVertex(Primitive geom, int index)
33
        throws CreateGeometryException {
34
        return null;
35
    }
36

  
37
    public Geometry moveVertex(Primitive geom, int index, Point point) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
38
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
39
        Ellipse result = (Ellipse) geom.cloneGeometry();
40
        if(index == 0){
41
            result.setPoints(point, ((Ellipse)geom).getAxis1End(), ((Ellipse)geom).getAxis2Dist());
42
        } else if (index == 1){
43
            result.setPoints(((Ellipse)geom).getAxis1Start(), point, ((Ellipse)geom).getAxis2Dist());
44
        } else if (index == 2){
45
            Point axis1Start = ((Ellipse)geom).getAxis1Start();
46
            Point axis1End = ((Ellipse)geom).getAxis1End();
47
            Point center = geometryManager.createPoint(
48
                (axis1Start.getX()+axis1End.getX())/2,
49
                (axis1Start.getY()+axis1End.getY())/2,
50
                geom.getGeometryType().getSubType());
51
            result.setPoints(((Ellipse)geom).getAxis1Start(), ((Ellipse)geom).getAxis1End(), center.distance(point));
52
        }
53
        return result;
54
    }
55

  
56
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
57
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
58
        ArrayList<Point> vertexList = new ArrayList<Point>();
59
        Ellipse ellipse = (Ellipse) geom;
60
        Point axis1Start = ellipse.getAxis1Start();
61
        vertexList.add(axis1Start);
62
        Point axis1End = ellipse.getAxis1End();
63
        vertexList.add(axis1End);
64
        Point center = geometryManager.createPoint(
65
            (axis1Start.getX()+axis1End.getX())/2,
66
            (axis1Start.getY()+axis1End.getY())/2,
67
            geom.getGeometryType().getSubType());
68

  
69
        double angle = getAngle(axis1Start, axis1End);
70

  
71
        vertexList.add(geometryManager.createPoint(
72
            center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
73
            center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
74
            geom.getGeometryType().getSubType()));
75

  
76
        return vertexList;
77
    }
78

  
79
    public int getNumVertex(Primitive geom) {
80
        return 3;
81
    }
82

  
83
    public boolean canInsertVertex(Primitive geom, int index) {
84
        return false;
85
    }
86

  
87
    public boolean canRemoveVertex(Primitive geom, int index) {
88
        return false;
89
    }
90

  
91
    public boolean canMoveVertex(int index, Point point) {
92
        return true;
93
    }
94

  
95
    public double getAngle(Point start, Point end)
96
        throws GeometryOperationNotSupportedException,
97
        GeometryOperationException {
98
        double angle =
99
            Math.acos((end.getX() - start.getX()) / start.distance(end));
100

  
101
        if (start.getY() > end.getY()) {
102
            angle = -angle;
103
        }
104

  
105
        if (angle < 0) {
106
            angle += (2 * Math.PI);
107
        }
108

  
109
        return angle;
110
    }
111

  
112
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
113
        Primitive primitive) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
114
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
115
        EditingProviderManager editingProviderManager =
116
            EditingProviderLocator.getProviderManager();
117
        ISymbol auxiliaryLineSymbolEditing =
118
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
119
        ISymbol polygonSymbolEditing =
120
            editingProviderManager.getSymbol("polygon-symbol-editing");
121
        Ellipse ellipse = (Ellipse)primitive;
122
        Point axis1Start = ellipse.getAxis1Start();
123
        Point axis1End = ellipse.getAxis1End();
124
        Line axis1Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
125
        axis1Line.setPoints(axis1Start,axis1End);
126
        drawingStatus.addStatus(axis1Line, auxiliaryLineSymbolEditing, "");
127

  
128
        Line axis2Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
129

  
130
        Point center = geometryManager.createPoint(
131
            (axis1Start.getX()+axis1End.getX())/2,
132
            (axis1Start.getY()+axis1End.getY())/2,
133
            primitive.getGeometryType().getSubType());
134

  
135
        double angle = getAngle(axis1Start, axis1End);
136

  
137
        Point axis2Point1 = geometryManager.createPoint(
138
        center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
139
        center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
140
        primitive.getGeometryType().getSubType());
141

  
142
        Point axis2Point2 = geometryManager.createPoint(
143
        center.getX() - ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
144
        center.getY() - ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
145
        primitive.getGeometryType().getSubType());
146

  
147
        axis2Line.setPoints(axis2Point1,
148
            axis2Point2);
149
        drawingStatus.addStatus(axis2Line, auxiliaryLineSymbolEditing, "");
150

  
151
        drawingStatus.addStatus(primitive, polygonSymbolEditing, "");
152
    }
153

  
154
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/operation/EditVertexOperationUtils.java
10 10
import org.gvsig.fmap.geom.Geometry;
11 11
import org.gvsig.fmap.geom.primitive.Arc;
12 12
import org.gvsig.fmap.geom.primitive.Circle;
13
import org.gvsig.fmap.geom.primitive.Circumference;
13 14
import org.gvsig.fmap.geom.primitive.Curve;
14 15
import org.gvsig.fmap.geom.primitive.Ellipse;
15 16
import org.gvsig.fmap.geom.primitive.EllipticArc;
17
import org.gvsig.fmap.geom.primitive.FilledSpline;
16 18
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
19
import org.gvsig.fmap.geom.primitive.PeriEllipse;
17 20
import org.gvsig.fmap.geom.primitive.Point;
18 21
import org.gvsig.fmap.geom.primitive.Primitive;
19 22
import org.gvsig.fmap.geom.primitive.Spline;
......
51 54
        if(!(geometry instanceof Surface)){
52 55
            return false;
53 56
        }
57
        if(!isLineOrPolygon(geometry)){
58
            return false;
59
        };
60
        return true;
61
    }
62

  
63
    private static boolean isLine(Geometry geometry) {
64

  
65
        if(!(geometry instanceof Curve)){
66
            return false;
67
        }
68
        if(!isLineOrPolygon(geometry)){
69
            return false;
70
        };
71
        return true;
72
    }
73

  
74
    private static boolean isLineOrPolygon(Geometry geometry) {
54 75
        if (geometry instanceof Ellipse) {
55 76
            return false;
56 77
        }
......
60 81
        if (geometry instanceof Circle) {
61 82
            return false;
62 83
        }
63
        return true;
64
    }
65

  
66
    private static boolean isLine(Geometry geometry) {
67

  
68
        if(!(geometry instanceof Curve)){
84
        if (geometry instanceof FilledSpline) {
69 85
            return false;
70 86
        }
71 87
        if (geometry instanceof Arc) {
......
74 90
        if (geometry instanceof Spline) {
75 91
            return false;
76 92
        }
93
        if (geometry instanceof Circumference) {
94
            return false;
95
        }
96
        if (geometry instanceof PeriEllipse) {
97
            return false;
98
        }
77 99
        return true;
78 100
    }
79 101

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.line/src/main/java/org/gvsig/vectorediting/lib/prov/line/LineEditingProvider.java
55 55
import org.gvsig.fmap.geom.Geometry;
56 56
import org.gvsig.fmap.geom.GeometryLocator;
57 57
import org.gvsig.fmap.geom.aggregate.MultiCurve;
58
import org.gvsig.fmap.geom.primitive.Curve;
58
import org.gvsig.fmap.geom.primitive.Line;
59 59
import org.gvsig.fmap.geom.primitive.Point;
60 60
import org.gvsig.fmap.geom.type.GeometryType;
61 61
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
......
141 141
                EditingProviderServices editingProviderServices =
142 142
                    (EditingProviderServices) getProviderServices();
143 143
                int subtype = editingProviderServices.getSubType(featureStore);
144
                Curve line =
144
                Line line =
145 145
                    editingProviderServices.createLine(point, mousePosition,
146 146
                        subtype);
147 147
                geometries.addStatus(line, lineSymbolEditing, "");
......
200 200
        try {
201 201

  
202 202
            DrawingStatus drawingStatus = getDrawingStatus(secondPointValue);
203
            Curve line = (Curve) drawingStatus.getGeometries().get(0);
203
            Line line = (Line) drawingStatus.getGeometries().get(0);
204 204

  
205 205
            GeometryType storeGeomType =
206 206
                editingProviderServices.getGeomType(featureStore);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.spline/src/main/java/org/gvsig/vectorediting/lib/prov/spline/FilledSplineEditingProvider.java
25 25
package org.gvsig.vectorediting.lib.prov.spline;
26 26

  
27 27
import java.util.Iterator;
28
import java.util.LinkedHashMap;
29 28

  
30 29
import org.gvsig.fmap.geom.Geometry;
31 30
import org.gvsig.fmap.geom.GeometryLocator;
32 31
import org.gvsig.fmap.geom.GeometryManager;
33 32
import org.gvsig.fmap.geom.aggregate.MultiSurface;
33
import org.gvsig.fmap.geom.primitive.FilledSpline;
34 34
import org.gvsig.fmap.geom.primitive.Point;
35
import org.gvsig.fmap.geom.primitive.Spline;
36
import org.gvsig.fmap.geom.primitive.Surface;
37 35
import org.gvsig.fmap.geom.type.GeometryType;
38 36
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
39
import org.gvsig.tools.ToolsLocator;
40 37
import org.gvsig.tools.dynobject.DynObject;
41 38
import org.gvsig.tools.exception.BaseException;
42
import org.gvsig.tools.i18n.I18nManager;
43 39
import org.gvsig.tools.service.spi.ProviderServices;
44 40
import org.gvsig.vectorediting.lib.api.DrawingStatus;
45
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
46 41
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
47 42
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
48 43
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
49
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
50 44
import org.gvsig.vectorediting.lib.spi.EditingProvider;
51 45
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
52 46
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
......
76 70
            EditingProviderLocator.getProviderManager();
77 71
        ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing");
78 72
        ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
73
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
79 74

  
80

  
81 75
        if (values != null) {
82 76

  
83 77
            if (values.size() >= 1) {
......
92 86
                try {
93 87
                    int subtype =
94 88
                        editingProviderServices.getSubType(featureStore);
95
                    Spline spline =
96
                        editingProviderServices.createSpline(values, subtype);
97 89

  
98
                    spline.addVertex(mousePosition);
90
                    FilledSpline filledSpline = (FilledSpline) geometryManager.create(Geometry.TYPES.FILLEDSPLINE, subtype);
91
                    for (int i = 0; i < values.size(); i++) {
92
                        filledSpline.addVertex(values.get(i));
93
                    }
94
                    filledSpline.addVertex(mousePosition);
95
                    filledSpline.addVertex(values.get(0));
99 96

  
100
                    spline.addVertex(values.get(0));
101

  
102 97
                    drawingStatus.addStatus(mousePosition, auxiliaryPointSymbolEditing, "");
103
                    drawingStatus.addStatus(spline, polygonSymbolEditing, "");
98
                    drawingStatus.addStatus(filledSpline, polygonSymbolEditing, "");
104 99

  
105
//                    drawingStatus.addGeometry(spline);
106 100
                } catch (BaseException e) {
107 101
                    throw new DrawServiceException(e);
108 102
                }
......
117 111

  
118 112
            EditingProviderServices editingProviderServices =
119 113
                (EditingProviderServices) getProviderServices();
120
            GeometryManager geometryManager =
121
                GeometryLocator.getGeometryManager();
114
            GeometryManager geometryManager = GeometryLocator.getGeometryManager();
122 115

  
123 116
            try {
124
                // values.add(values.get(0));
125

  
126 117
                int subtype = editingProviderServices.getSubType(featureStore);
127
                Spline spline =
128
                    editingProviderServices.createSpline(values, subtype);
129 118

  
130
                spline.addVertex(values.get(0));
131

  
132
                Surface surface = geometryManager.createPolygon(subtype);
133
                for (int i = 0; i < spline.getNumVertices(); i++) {
134
                    surface.addVertex(spline.getVertex(i));
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff