Statistics
| Revision:

gvsig-vectorediting / 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 / LineEditVertexOperation.java @ 368

History | View | Annotate | Download (4.14 KB)

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.mapcontext.rendering.symbols.ISymbol;
16
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
17
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
18
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
19

    
20
public class LineEditVertexOperation implements EditVertexOperation {
21

    
22
    public LineEditVertexOperation() {
23
        // TODO Auto-generated constructor stub
24
    }
25

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

    
35
        Line line = (Line) geom;
36
        int numVertices = line.getNumVertices();
37

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

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

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

    
63
        Line line = (Line) geom;
64
        int numVertices = line.getNumVertices();
65

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

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

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

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

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

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

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

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

    
126
}