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 / ArcEditVertexOperation.java @ 368

History | View | Annotate | Download (6.32 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.operation.GeometryOperationException;
11
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
12
import org.gvsig.fmap.geom.primitive.Arc;
13
import org.gvsig.fmap.geom.primitive.Ellipse;
14
import org.gvsig.fmap.geom.primitive.Envelope;
15
import org.gvsig.fmap.geom.primitive.GeneralPathX;
16
import org.gvsig.fmap.geom.primitive.Line;
17
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
18
import org.gvsig.fmap.geom.primitive.Point;
19
import org.gvsig.fmap.geom.primitive.Primitive;
20
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
21
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
22
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
23
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
24

    
25
public class ArcEditVertexOperation implements EditVertexOperation {
26

    
27
    public ArcEditVertexOperation() {
28
        // TODO Auto-generated constructor stub
29
    }
30

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

    
36
    public Geometry removeVertex(Primitive geom, int index)
37
        throws CreateGeometryException {
38
        return null;
39
    }
40

    
41
    public Geometry moveVertex(Primitive geom, int index, Point point)
42
        throws GeometryOperationNotSupportedException,
43
        GeometryOperationException, CreateGeometryException {
44
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
45

    
46
        Arc arc = (Arc) geom;
47
        Arc result = (Arc) arc.cloneGeometry();
48

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

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

    
61
        switch (index) {
62
        case 0:
63
            result.setPointsStartEnd(point, radius, startAngle, endAngle);
64
            break;
65
        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
            }
73
            break;
74
        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
            }
82
            break;
83
        default:
84
            break;
85
        }
86

    
87
        return result;
88
    }
89

    
90
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException {
91
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
92
        ArrayList<Point> vertexList = new ArrayList<Point>();
93
        Arc arc = (Arc) geom;
94

    
95
        Point center = arc.getCenterPoint();
96
        if(center == null){
97
            Envelope envelope = arc.getEnvelope();
98
            center = geometryManager.createPoint(envelope.getCenter(0), envelope.getCenter(1), geom.getGeometryType().getSubType());
99
        }
100
        vertexList.add(center);
101

    
102
        vertexList.add(arc.getInitPoint());
103
        vertexList.add(arc.getEndPoint());
104
        return vertexList;
105
    }
106

    
107
    public int getNumVertex(Primitive geom) {
108
        return 3;
109
    }
110

    
111
    public boolean canInsertVertex(Primitive geom, int index) {
112
        return false;
113
    }
114

    
115
    public boolean canRemoveVertex(Primitive geom, int index) {
116
        return false;
117
    }
118

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

    
123
    public double getAngle(Point start, Point end)
124
        throws GeometryOperationNotSupportedException,
125
        GeometryOperationException {
126
        double angle =
127
            Math.acos((end.getX() - start.getX()) / start.distance(end));
128

    
129
        if (start.getY() > end.getY()) {
130
            angle = -angle;
131
        }
132

    
133
        if (angle < 0) {
134
            angle += (2 * Math.PI);
135
        }
136

    
137
        return angle;
138
    }
139

    
140
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
141
        Primitive primitive) throws CreateGeometryException,
142
        GeometryOperationNotSupportedException, GeometryOperationException {
143
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
144
        EditingProviderManager editingProviderManager =
145
            EditingProviderLocator.getProviderManager();
146
        ISymbol auxiliaryLineSymbolEditing =
147
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
148
        ISymbol lineSymbolEditing =
149
            editingProviderManager.getSymbol("line-symbol-editing");
150
        ISymbol pointSymbolEditing =
151
            editingProviderManager.getSymbol("point-symbol-editing");
152
        Arc arc = (Arc)primitive;
153

    
154
        Point center = arc.getCenterPoint();
155
        if(center == null){
156
            Envelope envelope = arc.getEnvelope();
157
            center = geometryManager.createPoint(envelope.getCenter(0), envelope.getCenter(1), primitive.getGeometryType().getSubType());
158
        }
159

    
160
        Line auxLine = geometryManager.createLine(primitive.getGeometryType().getSubType());
161
        auxLine.setPoints(center,arc.getInitPoint());
162
        drawingStatus.addStatus(auxLine, auxiliaryLineSymbolEditing, "");
163

    
164
        Line auxLine2 = geometryManager.createLine(primitive.getGeometryType().getSubType());
165
        auxLine2.setPoints(center,arc.getEndPoint());
166
        drawingStatus.addStatus(auxLine2, auxiliaryLineSymbolEditing, "");
167
        drawingStatus.addStatus(arc.getInitPoint(), pointSymbolEditing, "");
168
        drawingStatus.addStatus(arc.getEndPoint(), pointSymbolEditing, "");
169

    
170
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
171
    }
172

    
173
}