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 @ 575

History | View | Annotate | Download (6.87 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.Envelope;
14
import org.gvsig.fmap.geom.primitive.Line;
15
import org.gvsig.fmap.geom.primitive.Point;
16
import org.gvsig.fmap.geom.primitive.Primitive;
17
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
18
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
19
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
20
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
21

    
22
public class ArcEditVertexOperation implements EditVertexOperation {
23

    
24
    public ArcEditVertexOperation() {
25
        // TODO Auto-generated constructor stub
26
    }
27

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

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

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

    
43
        Arc arc = (Arc) geom;
44
        Arc result = (Arc) arc.cloneGeometry();
45

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

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

    
56
        double radius = center.distance(initPoint);
57

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

    
60
        switch (index) {
61
        case 0:
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

    
72
            break;
73
        case 1:
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

    
78
            break;
79
        case 2:
80
            endPoint.setX(center.getX()+Math.cos(angle)*radius);
81
            endPoint.setY(center.getY()+Math.sin(angle)*radius);
82
            result.setPoints(initPoint, middlePoint, endPoint);
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;
90
        default:
91
            break;
92
        }
93

    
94
        return result;
95
    }
96

    
97
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException {
98
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
99
        ArrayList<Point> vertexList = new ArrayList<Point>();
100
        Arc arc = (Arc) geom;
101

    
102
        Point center = arc.getCenterPoint();
103
        if(center == null){
104
            Envelope envelope = arc.getEnvelope();
105
            center = geometryManager.createPoint(envelope.getCenter(0), envelope.getCenter(1), geom.getGeometryType().getSubType());
106
        }
107
        vertexList.add(center);
108

    
109
        vertexList.add(arc.getInitPoint());
110
        vertexList.add(arc.getEndPoint());
111
        vertexList.add(arc.getMiddlePoint());
112
        return vertexList;
113
    }
114

    
115
    public int getNumVertex(Primitive geom) {
116
        return 4;
117
    }
118

    
119
    public boolean canInsertVertex(Primitive geom, int index) {
120
        return false;
121
    }
122

    
123
    public boolean canRemoveVertex(Primitive geom, int index) {
124
        return false;
125
    }
126

    
127
    public boolean canMoveVertex(int index, Point point) {
128
        return true;
129
    }
130

    
131
    public double getAngle(Point start, Point end)
132
        throws GeometryOperationNotSupportedException,
133
        GeometryOperationException {
134
        double angle =
135
            Math.acos((end.getX() - start.getX()) / start.distance(end));
136

    
137
        if (start.getY() > end.getY()) {
138
            angle = -angle;
139
        }
140

    
141
        if (angle < 0) {
142
            angle += (2 * Math.PI);
143
        }
144

    
145
        return angle;
146
    }
147

    
148
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
149
        Primitive primitive) throws CreateGeometryException,
150
        GeometryOperationNotSupportedException, GeometryOperationException {
151
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
152
        EditingProviderManager editingProviderManager =
153
            EditingProviderLocator.getProviderManager();
154
        ISymbol auxiliaryLineSymbolEditing =
155
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
156
        ISymbol lineSymbolEditing =
157
            editingProviderManager.getSymbol("line-symbol-editing");
158
        ISymbol pointSymbolEditing =
159
            editingProviderManager.getSymbol("point-symbol-editing");
160
        Arc arc = (Arc)primitive;
161

    
162
        Point center = arc.getCenterPoint();
163
        if(center == null){
164
            Envelope envelope = arc.getEnvelope();
165
            center = geometryManager.createPoint(envelope.getCenter(0), envelope.getCenter(1), primitive.getGeometryType().getSubType());
166
        }
167

    
168
        Line auxLine = geometryManager.createLine(primitive.getGeometryType().getSubType());
169
        auxLine.setPoints(center,arc.getInitPoint());
170
        drawingStatus.addStatus(auxLine, auxiliaryLineSymbolEditing, "");
171

    
172
        Line auxLine2 = geometryManager.createLine(primitive.getGeometryType().getSubType());
173
        auxLine2.setPoints(center,arc.getEndPoint());
174
        drawingStatus.addStatus(auxLine2, auxiliaryLineSymbolEditing, "");
175
        Line auxLine3 = geometryManager.createLine(primitive.getGeometryType().getSubType());
176
        auxLine3.setPoints(center,arc.getMiddlePoint());
177
        drawingStatus.addStatus(auxLine3, auxiliaryLineSymbolEditing, "");
178
        drawingStatus.addStatus(arc.getInitPoint(), pointSymbolEditing, "");
179
        drawingStatus.addStatus(arc.getEndPoint(), pointSymbolEditing, "");
180
        drawingStatus.addStatus(arc.getMiddlePoint(), pointSymbolEditing, "");
181

    
182
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
183
    }
184

    
185
}