Revision 2792

View differences:

org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
  <modelVersion>4.0.0</modelVersion>
3
  <parent>
4
    <groupId>org.gvsig</groupId>
5
    <artifactId>org.gvsig.vectorediting.lib.prov</artifactId>
6
    <version>1.0.163</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.lib.prov.autopolygon</artifactId>
9
  <name>org.gvsig.vectorediting.lib.prov.autopoligon</name>
10
</project>
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.vectorediting.lib.prov.autopolygon.AutopolygonEditingLibrary
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/src/main/java/org/gvsig/vectorediting/lib/prov/autopolygon/AutopolygonEditingProviderFactory.java
1
package org.gvsig.vectorediting.lib.prov.autopolygon;
2
/**
3
 * gvSIG. Desktop Geographic Information System.
4
 *
5
 * Copyright ? 2007-2014 gvSIG Association
6
 *
7
 * This program is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License
9
 * as published by the Free Software Foundation; either version 2
10
 * of the License, or (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
 * MA  02110-1301, USA.
21
 *
22
 * For any additional information, do not hesitate to contact us
23
 * at info AT gvsig.com, or visit our website www.gvsig.com.
24
 */
25

  
26

  
27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.tools.dynobject.DynObject;
29
import org.gvsig.tools.service.spi.Provider;
30
import org.gvsig.tools.service.spi.ProviderServices;
31
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
32
import org.gvsig.vectorediting.lib.spi.AbstractEditingProviderFactory;
33
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceinfo;
34

  
35
public class AutopolygonEditingProviderFactory extends AbstractEditingProviderFactory {
36

  
37
    public final static String PROVIDER_NAME = "insert-autopolygon";
38

  
39
    public final static String PROVIDER_DESCRIPTION =
40
        "Creates autopolygons";
41

  
42
    public AutopolygonEditingProviderFactory() {
43
        super(PROVIDER_NAME, PROVIDER_DESCRIPTION);
44
    }
45

  
46
    
47
    @Override
48
    public EditingServiceInfo getServiceInfo() {
49
        EditingServiceInfo serviceInfo =
50
            new DefaultEditingServiceinfo(
51
                PROVIDER_NAME,
52
                "",
53
                false,
54
                null,
55
                new int[] { Geometry.TYPES.POLYGON, Geometry.TYPES.MULTIPOLYGON, Geometry.TYPES.SURFACE, Geometry.TYPES.MULTISURFACE });
56

  
57
        return serviceInfo;
58
    }
59

  
60
    @Override
61
    protected Provider doCreate(DynObject parameters, ProviderServices services) {
62
        return new AutopolygonEditingProvider(services, parameters);
63
    }
64

  
65
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/src/main/java/org/gvsig/vectorediting/lib/prov/autopolygon/AutopolygonEditingLibrary.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
package org.gvsig.vectorediting.lib.prov.autopolygon;
25

  
26

  
27
import org.gvsig.tools.ToolsLocator;
28
import org.gvsig.tools.i18n.I18nManager;
29
import org.gvsig.tools.library.AbstractLibrary;
30
import org.gvsig.tools.library.LibraryException;
31
import org.gvsig.vectorediting.lib.api.EditingLibrary;
32
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
33
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
34

  
35
/**
36
 * Library for default implementation initialization and configuration.
37
 *
38
 * @author gvSIG team
39
 * @version $Id$
40
 */
41
public class AutopolygonEditingLibrary extends AbstractLibrary {
42

  
43
    @Override
44
    public void doRegistration() {
45
        registerAsServiceOf(EditingLibrary.class);
46
    }
47

  
48
    @Override
49
    protected void doInitialize() throws LibraryException {
50
    }
51

  
52
    @Override
53
    protected void doPostInitialize() throws LibraryException {
54
        EditingProviderManager manager =
55
            EditingProviderLocator.getProviderManager();
56

  
57
        manager.addProviderFactory(new AutopolygonEditingProviderFactory());
58

  
59
        manager.registerIcon("vectorediting-tools", "insert-autopolygon",
60
            this.getClass().getClassLoader(), this.getClass().getName());
61

  
62
        registerTranslations();
63
    }
64

  
65
    private void registerTranslations() {
66
        I18nManager manager = ToolsLocator.getI18nManager();
67
        manager.addResourceFamily("i18n/text",
68
            this.getClass().getClassLoader(), "insert-autopolygon");
69
    }
70

  
71
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/src/main/java/org/gvsig/vectorediting/lib/prov/autopolygon/AutopolygonEditingProvider.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.autopolygon;
26

  
27
import java.util.ArrayList;
28
import java.util.List;
29
import org.cresques.cts.IProjection;
30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.dal.feature.Feature;
32
import org.gvsig.fmap.dal.feature.FeatureQuery;
33
import org.gvsig.fmap.dal.feature.FeatureSet;
34
import org.gvsig.fmap.dal.feature.FeatureStore;
35
import org.gvsig.fmap.dal.feature.FeatureType;
36
import org.gvsig.fmap.geom.Geometry;
37
import org.gvsig.fmap.geom.GeometryLocator;
38
import org.gvsig.fmap.geom.aggregate.MultiSurface;
39
import org.gvsig.fmap.geom.primitive.Point;
40
import org.gvsig.fmap.geom.primitive.Surface;
41
import org.gvsig.fmap.geom.type.GeometryType;
42
import org.gvsig.fmap.mapcontext.layers.vectorial.SpatialEvaluatorsFactory;
43
import org.gvsig.tools.dispose.DisposableIterator;
44
import org.gvsig.tools.dynobject.DynObject;
45
import org.gvsig.tools.evaluator.Evaluator;
46
import org.gvsig.tools.service.spi.ProviderServices;
47
import org.gvsig.vectorediting.lib.api.DrawingStatus;
48
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
49
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
50
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
51
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
52
import org.gvsig.vectorediting.lib.api.exceptions.InvalidEntryException;
53
import org.gvsig.vectorediting.lib.api.exceptions.StartServiceException;
54
import org.gvsig.vectorediting.lib.api.exceptions.StopServiceException;
55
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
56
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
57
import org.gvsig.vectorediting.lib.spi.EditingProvider;
58
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
59
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
60

  
61
@SuppressWarnings("UseSpecificCatch")
62
public class AutopolygonEditingProvider extends AbstractEditingProvider
63
    implements EditingProvider {
64

  
65
    private final EditingServiceParameter geometryParameter;
66

  
67
    private final FeatureStore featureStore;
68

  
69
    private Geometry geometryValue;
70

  
71
    public AutopolygonEditingProvider(ProviderServices services,
72
        DynObject parameters) {
73
        super(services);
74
        this.featureStore =
75
            (FeatureStore) parameters
76
                .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
77

  
78
        this.geometryParameter =
79
            new DefaultEditingServiceParameter("Draw geometry",
80
                "draw_geometry_to_autopolygon", Geometry.TYPES.MULTISURFACE, TYPE.GEOMETRY);
81
    }
82

  
83
    @Override
84
    public EditingServiceParameter next() {
85
        if (geometryValue == null) {
86
            return geometryParameter;
87
        }
88

  
89
        return null;
90
    }
91

  
92
    @Override
93
    public DrawingStatus getDrawingStatus(Point mousePosition)
94
        throws DrawServiceException {
95
        return null;
96
    }
97

  
98
    @Override
99
    public void stop() throws StopServiceException {
100
        geometryValue = null;
101
    }
102

  
103
    @Override
104
    public List<EditingServiceParameter> getParameters() {
105
        List<EditingServiceParameter> list = new ArrayList<>();
106
        list.add(geometryParameter);
107
        return list;
108
    }
109

  
110
    @Override
111
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
112
        validateAndInsertValue(parameter, value);
113
    }
114

  
115
    @Override
116
    public void setValue(Object value) throws InvalidEntryException {
117
        EditingServiceParameter param = next();
118
        validateAndInsertValue(param, value);
119
    }
120

  
121
    private void validateAndInsertValue(EditingServiceParameter param,
122
        Object value) throws InvalidEntryException {
123

  
124
        if (param == geometryParameter) {
125
            if (value instanceof Geometry ) {
126
                Geometry geometry = (Geometry)value;
127
                GeometryType geometryType = geometry.getGeometryType();
128
                if (geometryType.isTypeOf(Geometry.TYPES.MULTISURFACE) ||
129
                    geometryType.isTypeOf(Geometry.TYPES.SURFACE)) {
130
                    geometryValue = geometry;
131
                    return;
132
                }
133
            }
134
        }
135
        throw new InvalidEntryException(null);
136
    }
137

  
138
    @Override
139
    public void finishAndStore() throws FinishServiceException {
140
        EditingProviderServices editingProviderServices =
141
            (EditingProviderServices) getProviderServices();
142
        Geometry geometry = finish();
143
        editingProviderServices.insertGeometryIntoFeatureStore(geometry,
144
            featureStore);
145
    }
146

  
147
    @Override
148
    public Geometry finish() throws FinishServiceException {
149
        EditingProviderServices editingProviderServices =
150
            (EditingProviderServices) getProviderServices();
151

  
152
        Geometry geometry = geometryValue.cloneGeometry();
153
        FeatureQuery query;
154
        try {
155
            query = queryByGeometry(geometry);
156
            if (query != null) {
157
                FeatureSet features = featureStore.getFeatureSet(query);
158
                DisposableIterator featuresIterator = features.fastIterator();
159
                while (featuresIterator.hasNext()) {
160
                    Feature feature = (Feature) featuresIterator.next();
161
                    geometry =
162
                        geometry.difference(feature.getDefaultGeometry());
163
                }
164
                featuresIterator.dispose();
165
                features.dispose();
166
            }
167
            GeometryType storeGeomType =
168
                editingProviderServices.getGeomType(featureStore);
169

  
170
            if (storeGeomType.isTypeOf(MULTISURFACE)) {
171
                MultiSurface multisurface;
172
                multisurface =
173
                    GeometryLocator.getGeometryManager().createMultiSurface(
174
                        storeGeomType.getSubType());
175
                multisurface.addSurface((Surface)geometry);
176
                return multisurface;
177
            }
178

  
179
        } catch (Exception e) {
180
            throw new FinishServiceException(e);
181
        }
182
        return geometry;
183
    }
184

  
185
    @Override
186
    public void start() throws StartServiceException, InvalidEntryException {
187
        geometryValue = null;
188
    }
189

  
190
    @Override
191
    public String getName() {
192
        return AutopolygonEditingProviderFactory.PROVIDER_NAME;
193
    }
194

  
195
    private FeatureQuery queryByGeometry(Geometry geometry) throws DataException {
196
        FeatureQuery featureQuery = featureStore.createFeatureQuery();
197
        FeatureType featureType = featureStore.getDefaultFeatureType();
198
        String geomName = featureType.getDefaultGeometryAttributeName();
199
        featureQuery.setFeatureType(featureType);
200

  
201
        IProjection query_proj = featureType.getDefaultSRS();
202
        Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
203
            geometry, 
204
            query_proj, 
205
            featureStore
206
        );
207
        featureQuery.setFilter(iee);
208
        featureQuery.setAttributeNames(null);
209
        return featureQuery;
210
    }
211

  
212
    @Override
213
    public Object getValue(EditingServiceParameter parameter) {
214
        if(parameter == this.geometryParameter){
215
            return geometryValue;
216
        }
217
        return null;
218
    }
219

  
220

  
221
}
0 222

  
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
  <modelVersion>4.0.0</modelVersion>
3
  <parent>
4
    <groupId>org.gvsig</groupId>
5
    <artifactId>org.gvsig.vectorediting.lib.prov</artifactId>
6
    <version>1.0.163</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.lib.prov.editvertex</artifactId>
9
  <name>org.gvsig.vectorediting.lib.prov.editvertex</name>
10
  <description>Edit Vertex Tool</description>
11
</project>
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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/PointEditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.exception.CreateGeometryException;
7
import org.gvsig.fmap.geom.primitive.Point;
8
import org.gvsig.fmap.geom.primitive.Primitive;
9
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
10
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
11
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
12
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
13

  
14
/**
15
 * @author fdiaz
16
 *
17
 */
18
public class PointEditVertexOperation implements EditVertexOperation {
19

  
20
    /**
21
     *
22
     */
23
    public PointEditVertexOperation() {
24
        // TODO Auto-generated constructor stub
25
    }
26

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

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

  
37
    @Override
38
    public Geometry moveVertex(Primitive geom, int index, Point point) {
39
        if(index!=0) {
40
            return geom;
41
        }
42
        Point p = ((Point)geom);
43
        int min = point.getDimension() < p.getDimension() ? point.getDimension() : p.getDimension();
44
        for (int i = 0; i < min; i++) {
45
            p.setCoordinateAt(i, point.getCoordinateAt(i));
46
        }
47
        return p;
48
    }
49

  
50
    @Override
51
    public List<Point> getVertexesList(Primitive geom) {
52
        ArrayList<Point> vertexList = new ArrayList<>();
53
        if (geom instanceof Point) {
54
            Point point = (Point) geom;
55
            vertexList.add(point);
56
        }
57
        return vertexList;
58
    }
59

  
60
    @Override
61
    public int getNumVertex(Primitive geom) {
62
        return 1;
63
    }
64

  
65
    @Override
66
    public boolean canInsertVertex(Primitive geom, int index) {
67
        return false;
68
    }
69

  
70
    @Override
71
    public boolean canRemoveVertex(Primitive geom, int index) {
72
        return false;
73
    }
74

  
75
    @Override
76
    public boolean canMoveVertex(int index, Point point) {
77
        return true;
78
    }
79

  
80
    @Override
81
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
82
        Primitive primitive) {
83
        EditingProviderManager editingProviderManager =
84
            EditingProviderLocator.getProviderManager();
85
        ISymbol pointSymbolEditing =
86
            editingProviderManager.getSymbol("point-symbol-editing");
87
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
88
        drawingStatus.addStatus(primitive, pointSymbolEditing, "");
89
    }
90

  
91
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.GeometryLocator;
7
import org.gvsig.fmap.geom.GeometryManager;
8
import org.gvsig.fmap.geom.exception.CreateGeometryException;
9
import org.gvsig.fmap.geom.primitive.Circumference;
10
import org.gvsig.fmap.geom.primitive.Point;
11
import org.gvsig.fmap.geom.primitive.Primitive;
12
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
13
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
14
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
15
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
16

  
17
public class CircumferenceEditVertexOperation implements EditVertexOperation {
18

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

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

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

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

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

  
57
        return vertexList;
58
    }
59

  
60
    @Override
61
    public int getNumVertex(Primitive geom) {
62
        return 2;
63
    }
64

  
65
    @Override
66
    public boolean canInsertVertex(Primitive geom, int index) {
67
        return false;
68
    }
69

  
70
    @Override
71
    public boolean canRemoveVertex(Primitive geom, int index) {
72
        return false;
73
    }
74

  
75
    @Override
76
    public boolean canMoveVertex(int index, Point point) {
77
        return true;
78
    }
79

  
80
    @Override
81
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
82
        Primitive primitive) {
83
        EditingProviderManager editingProviderManager =
84
            EditingProviderLocator.getProviderManager();
85
        ISymbol lineSymbolEditing =
86
            editingProviderManager.getSymbol("line-symbol-editing");
87
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
88
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
89
    }
90

  
91
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.GeometryLocator;
7
import org.gvsig.fmap.geom.GeometryManager;
8
import org.gvsig.fmap.geom.exception.CreateGeometryException;
9
import org.gvsig.fmap.geom.primitive.FilledSpline;
10
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
11
import org.gvsig.fmap.geom.primitive.Point;
12
import org.gvsig.fmap.geom.primitive.Primitive;
13
import org.gvsig.fmap.geom.type.GeometryType;
14
import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
15
import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
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
/**
22
 * @author fdiaz
23
 *
24
 */
25
public class FilledSplineEditVertexOperation implements EditVertexOperation {
26

  
27
    /**
28
     *
29
     */
30
    public FilledSplineEditVertexOperation() {
31
        // TODO Auto-generated constructor stub
32
    }
33

  
34
    @Override
35
    public Geometry insertVertex(Primitive geom, int index)
36
        throws CreateGeometryException {
37
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
38
        GeometryType geomType = geom.getGeometryType();
39
        FilledSpline result =
40
            (FilledSpline) geometryManager.create(Geometry.TYPES.FILLEDSPLINE,geomType.getSubType());
41

  
42
        FilledSpline filledSpline = (FilledSpline) geom;
43
        int numVertices = filledSpline.getNumVertices();
44

  
45

  
46
        double[][] values = new double[geom.getDimension()][numVertices];
47
        for (int v = 0; v < numVertices; v++) {
48
            for (int d = 0; d < filledSpline.getDimension(); d++) {
49
                values[d][v] = filledSpline.getCoordinateAt(v, d);
50
            }
51
        }
52
        int auxIndex = index;
53
        if(index==0) {
54
            auxIndex = numVertices-1;
55
        }
56

  
57
        for (int i = 0; i < numVertices; i++) {
58
            Point point = filledSpline.getVertex(i);
59
            if (i > 0 && i == auxIndex) {
60
                Point newPoint;
61
                try {
62
                    newPoint = (Point) geometryManager.create(geometryManager.getGeometryType(Geometry.TYPES.POINT, geomType.getSubType()));
63
                } catch (GeometryTypeNotSupportedException | GeometryTypeNotValidException e) {
64
                    throw new CreateGeometryException(Geometry.TYPES.POINT, geomType.getSubType(), e);
65
                }
66

  
67
                SplineCalculator splineDim;
68
                for(int d=0; d<geom.getDimension(); d++){
69

  
70
                    splineDim = new SplineCalculator(values[d]);
71
                    newPoint.setCoordinateAt(d, splineDim.fn(i-1, 0.5));
72

  
73
                }
74

  
75
                result.addVertex(newPoint);
76
            }
77
            result.addVertex(point);
78
        }
79
        return result;
80
    }
81

  
82
    @Override
83
    public Geometry removeVertex(Primitive geom, int index)
84
        throws CreateGeometryException {
85
        org.gvsig.fmap.geom.primitive.FilledSpline filledSpline = (org.gvsig.fmap.geom.primitive.FilledSpline) geom.cloneGeometry();
86

  
87
        if (index < 0) {
88
            return filledSpline;
89
        }
90
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
91

  
92
        int numVertices = filledSpline.getNumVertices();
93
        if (index >= numVertices){
94
            return filledSpline;
95
        }
96

  
97
        if (filledSpline.getVertex(0).equals(filledSpline.getVertex(numVertices - 1))) {
98
            if (numVertices <= 4) {
99
                return filledSpline;
100
            }
101
            if(index == 0 || index == numVertices - 1){
102
                filledSpline.removeVertex(numVertices - 1);
103
                filledSpline.removeVertex(0);
104
                filledSpline.addVertex(filledSpline.getVertex(0));
105
                numVertices --;
106

  
107
                return filledSpline;
108
            }
109
            numVertices--;
110
        } else {
111
            if (numVertices <= 3) {
112
                return filledSpline;
113
            }
114
        }
115
        filledSpline.removeVertex(index);
116
        return filledSpline;
117
    }
118

  
119
    @Override
120
    public Geometry moveVertex(Primitive geom, int index, Point point) {
121
        FilledSpline result = (FilledSpline) geom.cloneGeometry();
122
        int numVertices = result.getNumVertices();
123
        if (result.getVertex(0).equals(result.getVertex(numVertices - 1))) {
124
            if (index == 0 || index == (result.getNumVertices() - 1)) {
125
                EditVertexOperationUtils.setVertex(result, 0, point);
126
                EditVertexOperationUtils.setVertex(result,
127
                    result.getNumVertices() - 1, (Point)point.cloneGeometry());
128
                return result;
129
            }
130
        }
131
        EditVertexOperationUtils.setVertex(result, index, point);
132
        return result;
133
    }
134

  
135
    @Override
136
    public List<Point> getVertexesList(Primitive geom) {
137
        ArrayList<Point> vertexList = new ArrayList<>();
138
        if (geom instanceof OrientablePrimitive) {
139
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
140
            orientable.getNumVertices();
141
            for (int i = 0; i < orientable.getNumVertices(); i++) {
142
                vertexList.add(orientable.getVertex(i));
143
            }
144
        }
145
        return vertexList;
146
    }
147

  
148
    @Override
149
    public int getNumVertex(Primitive geom) {
150
        if (geom instanceof OrientablePrimitive) {
151
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
152
            return orientable.getNumVertices();
153
        }
154
        return 0;
155
    }
156

  
157
    @Override
158
    public boolean canInsertVertex(Primitive geom, int index) {
159
        return true;
160
    }
161

  
162
    @Override
163
    public boolean canRemoveVertex(Primitive geom, int index) {
164
        return true;
165
    }
166

  
167
    @Override
168
    public boolean canMoveVertex(int index, Point point) {
169
        return true;
170
    }
171

  
172
    @Override
173
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
174
        Primitive primitive) {
175
        EditingProviderManager editingProviderManager =
176
            EditingProviderLocator.getProviderManager();
177
        ISymbol lineSymbolEditing =
178
            editingProviderManager.getSymbol("polygon-symbol-editing");
179
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
180
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
181
    }
182

  
183
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.GeometryLocator;
7
import org.gvsig.fmap.geom.GeometryManager;
8
import org.gvsig.fmap.geom.exception.CreateGeometryException;
9
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
10
import org.gvsig.fmap.geom.primitive.Point;
11
import org.gvsig.fmap.geom.primitive.Primitive;
12
import org.gvsig.fmap.geom.type.GeometryType;
13
import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
14
import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
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
/**
21
 * @author fdiaz
22
 *
23
 */
24
public class SplineEditVertexOperation implements EditVertexOperation {
25

  
26
    /**
27
     *
28
     */
29
    public SplineEditVertexOperation() {
30
        // TODO Auto-generated constructor stub
31
    }
32

  
33
    @Override
34
    public Geometry insertVertex(Primitive geom, int index)
35
        throws CreateGeometryException {
36
        if (index == 0) {
37
            return geom;
38
        }
39
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
40
        GeometryType geomType = geom.getGeometryType();
41
        org.gvsig.fmap.geom.primitive.Spline result =
42
            (org.gvsig.fmap.geom.primitive.Spline) geometryManager.create(Geometry.TYPES.SPLINE,geomType.getSubType());
43

  
44
        org.gvsig.fmap.geom.primitive.Spline spline = (org.gvsig.fmap.geom.primitive.Spline) geom;
45
        int numVertices = spline.getNumVertices();
46

  
47
        double[][] values = new double[geom.getDimension()][numVertices];
48
        for (int v = 0; v < numVertices; v++) {
49
            for (int d = 0; d < spline.getDimension(); d++) {
50
                values[d][v] = spline.getCoordinateAt(v, d);
51
            }
52
        }
53

  
54
        for (int i = 0; i < numVertices; i++) {
55
            Point point = spline.getVertex(i);
56
            if (i>0 && i == index) {
57
                Point newPoint;
58
                try {
59
                    newPoint = (Point) geometryManager.create(geometryManager.getGeometryType(Geometry.TYPES.POINT, geomType.getSubType()));
60
                } catch (GeometryTypeNotSupportedException | GeometryTypeNotValidException e) {
61
                    throw new CreateGeometryException(Geometry.TYPES.POINT, geomType.getSubType(), e);
62
                }
63

  
64
                SplineCalculator splineDim;
65
                for(int d=0; d<geom.getDimension(); d++){
66

  
67
                    splineDim = new SplineCalculator(values[d]);
68
                    newPoint.setCoordinateAt(d, splineDim.fn(i-1, 0.5));
69

  
70
                }
71

  
72
                result.addVertex(newPoint);
73
            }
74
            result.addVertex(point);
75
        }
76
        return result;
77
    }
78

  
79
    @Override
80
    public Geometry removeVertex(Primitive geom, int index)
81
        throws CreateGeometryException {
82
        if (index < 0) {
83
            return geom;
84
        }
85
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
86
        org.gvsig.fmap.geom.primitive.Spline result =
87
            (org.gvsig.fmap.geom.primitive.Spline) geometryManager.create(Geometry.TYPES.SPLINE,geom.getGeometryType().getSubType());
88

  
89
        org.gvsig.fmap.geom.primitive.Spline spline = (org.gvsig.fmap.geom.primitive.Spline) geom;
90
        int numVertices = spline.getNumVertices();
91

  
92
        for (int i = 0; i < numVertices; i++) {
93
            Point point = spline.getVertex(i);
94
            if (i == index) {
95
                continue;
96
            }
97
            result.addVertex(point);
98
        }
99
        return result;
100
    }
101

  
102
    @Override
103
    public Geometry moveVertex(Primitive geom, int index, Point point) {
104
        org.gvsig.fmap.geom.primitive.Spline result = (org.gvsig.fmap.geom.primitive.Spline) geom.cloneGeometry();
105
        EditVertexOperationUtils.setVertex(result, index, point);
106
        return result;
107
    }
108

  
109
    @Override
110
    public List<Point> getVertexesList(Primitive geom) {
111
        ArrayList<Point> vertexList = new ArrayList<>();
112
        if (geom instanceof OrientablePrimitive) {
113
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
114
            orientable.getNumVertices();
115
            for (int i = 0; i < orientable.getNumVertices(); i++) {
116
                vertexList.add(orientable.getVertex(i));
117
            }
118
        }
119
        return vertexList;
120
    }
121

  
122
    @Override
123
    public int getNumVertex(Primitive geom) {
124
        if (geom instanceof OrientablePrimitive) {
125
            OrientablePrimitive orientable = (OrientablePrimitive) geom;
126
            return orientable.getNumVertices();
127
        }
128
        return 0;
129
    }
130

  
131
    @Override
132
    public boolean canInsertVertex(Primitive geom, int index) {
133
        return index != 0;
134
    }
135

  
136
    @Override
137
    public boolean canRemoveVertex(Primitive geom, int index) {
138
        return true;
139
    }
140

  
141
    @Override
142
    public boolean canMoveVertex(int index, Point point) {
143
        return true;
144
    }
145

  
146
    @Override
147
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
148
        Primitive primitive) {
149
        EditingProviderManager editingProviderManager =
150
            EditingProviderLocator.getProviderManager();
151
        ISymbol lineSymbolEditing =
152
            editingProviderManager.getSymbol("line-symbol-editing");
153
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
154
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
155
    }
156
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.GeometryLocator;
7
import org.gvsig.fmap.geom.GeometryManager;
8
import org.gvsig.fmap.geom.exception.CreateGeometryException;
9
import org.gvsig.fmap.geom.operation.GeometryOperationException;
10
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
11
import org.gvsig.fmap.geom.primitive.Line;
12
import org.gvsig.fmap.geom.primitive.PeriEllipse;
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 EllipseEditVertexOperation implements EditVertexOperation {
21

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

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

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

  
38
    @Override
39
    public Geometry moveVertex(Primitive geom, int index, Point point) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
40
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
41
        PeriEllipse original = (PeriEllipse)geom;
42
        PeriEllipse result = (PeriEllipse) original.cloneGeometry();
43
        switch (index) {
44
            case 0:
45
                result.setPoints(point, original.getAxis1End(), original.getAxis2Dist());
46
                break;
47
            case 1:
48
                result.setPoints(original.getAxis1Start(), point, original.getAxis2Dist());
49
                break;
50
            case 2:
51
                Point axis1Start = original.getAxis1Start();
52
                Point axis1End = original.getAxis1End();
53
                Point center = geometryManager.createPoint(
54
                        (axis1Start.getX()+axis1End.getX())/2,
55
                        (axis1Start.getY()+axis1End.getY())/2,
56
                        geom.getGeometryType().getSubType());
57
                result.setPoints(original.getAxis1Start(), original.getAxis1End(), center.distance(point));
58
                break;
59
            default:
60
                break;
61
        }
62
        return result;
63
    }
64

  
65
    @Override
66
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
67
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
68
        ArrayList<Point> vertexList = new ArrayList<>();
69
        PeriEllipse ellipse = (PeriEllipse) geom;
70
        Point axis1Start = ellipse.getAxis1Start();
71
        vertexList.add(axis1Start);
72
        Point axis1End = ellipse.getAxis1End();
73
        vertexList.add(axis1End);
74
        Point center = geometryManager.createPoint(
75
            (axis1Start.getX()+axis1End.getX())/2,
76
            (axis1Start.getY()+axis1End.getY())/2,
77
            geom.getGeometryType().getSubType());
78

  
79
        double angle = getAngle(axis1Start, axis1End);
80

  
81
        vertexList.add(geometryManager.createPoint(
82
            center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
83
            center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
84
            geom.getGeometryType().getSubType()));
85

  
86
        return vertexList;
87
    }
88

  
89
    @Override
90
    public int getNumVertex(Primitive geom) {
91
        return 3;
92
    }
93

  
94
    @Override
95
    public boolean canInsertVertex(Primitive geom, int index) {
96
        return false;
97
    }
98

  
99
    @Override
100
    public boolean canRemoveVertex(Primitive geom, int index) {
101
        return false;
102
    }
103

  
104
    @Override
105
    public boolean canMoveVertex(int index, Point point) {
106
        return true;
107
    }
108

  
109
    public double getAngle(Point start, Point end)
110
        throws GeometryOperationNotSupportedException,
111
        GeometryOperationException {
112
        double angle =
113
            Math.acos((end.getX() - start.getX()) / start.distance(end));
114

  
115
        if (start.getY() > end.getY()) {
116
            angle = -angle;
117
        }
118

  
119
        if (angle < 0) {
120
            angle += (2 * Math.PI);
121
        }
122

  
123
        return angle;
124
    }
125

  
126
    @Override
127
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
128
        Primitive primitive) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
129
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
130
        EditingProviderManager editingProviderManager =
131
            EditingProviderLocator.getProviderManager();
132
        ISymbol auxiliaryLineSymbolEditing =
133
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
134
        ISymbol lineSymbolEditing =
135
            editingProviderManager.getSymbol("line-symbol-editing");
136
        PeriEllipse ellipse = (PeriEllipse)primitive;
137
        Point axis1Start = ellipse.getAxis1Start();
138
        Point axis1End = ellipse.getAxis1End();
139
        Line axis1Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
140
        axis1Line.setPoints(axis1Start,axis1End);
141
        drawingStatus.addStatus(axis1Line, auxiliaryLineSymbolEditing, "");
142

  
143
        Line axis2Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
144

  
145
        Point center = geometryManager.createPoint(
146
            (axis1Start.getX()+axis1End.getX())/2,
147
            (axis1Start.getY()+axis1End.getY())/2,
148
            primitive.getGeometryType().getSubType());
149

  
150
        double angle = getAngle(axis1Start, axis1End);
151

  
152
        Point axis2Point1 = geometryManager.createPoint(
153
        center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
154
        center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
155
        primitive.getGeometryType().getSubType());
156

  
157
        Point axis2Point2 = geometryManager.createPoint(
158
        center.getX() - ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
159
        center.getY() - ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
160
        primitive.getGeometryType().getSubType());
161

  
162
        axis2Line.setPoints(axis2Point1,
163
            axis2Point2);
164
        drawingStatus.addStatus(axis2Line, auxiliaryLineSymbolEditing, "");
165

  
166
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
167
        drawingStatus.addStatus(primitive, lineSymbolEditing, "");
168
    }
169

  
170
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
import org.gvsig.fmap.geom.Geometry;
6
import org.gvsig.fmap.geom.GeometryLocator;
7
import org.gvsig.fmap.geom.GeometryManager;
8
import org.gvsig.fmap.geom.exception.CreateGeometryException;
9
import org.gvsig.fmap.geom.operation.GeometryOperationException;
10
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
11
import org.gvsig.fmap.geom.primitive.Ellipse;
12
import org.gvsig.fmap.geom.primitive.Line;
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 FilledEllipseEditVertexOperation implements EditVertexOperation {
21

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

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

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

  
38
    @Override
39
    public Geometry moveVertex(Primitive geom, int index, Point point) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
40
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
41
        Ellipse result = (Ellipse) geom.cloneGeometry();
42
        switch (index) {
43
            case 0:
44
                result.setPoints(point, ((Ellipse)geom).getAxis1End(), ((Ellipse)geom).getAxis2Dist());
45
                break;
46
            case 1:
47
                result.setPoints(((Ellipse)geom).getAxis1Start(), point, ((Ellipse)geom).getAxis2Dist());
48
                break;
49
            case 2:
50
                Point axis1Start = ((Ellipse)geom).getAxis1Start();
51
                Point axis1End = ((Ellipse)geom).getAxis1End();
52
                Point center = geometryManager.createPoint(
53
                        (axis1Start.getX()+axis1End.getX())/2,
54
                        (axis1Start.getY()+axis1End.getY())/2,
55
                        geom.getGeometryType().getSubType());
56
                result.setPoints(((Ellipse)geom).getAxis1Start(), ((Ellipse)geom).getAxis1End(), center.distance(point));
57
                break;
58
            default:
59
                break;
60
        }
61
        return result;
62
    }
63

  
64
    @Override
65
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
66
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
67
        ArrayList<Point> vertexList = new ArrayList<>();
68
        Ellipse ellipse = (Ellipse) geom;
69
        Point axis1Start = ellipse.getAxis1Start();
70
        vertexList.add(axis1Start);
71
        Point axis1End = ellipse.getAxis1End();
72
        vertexList.add(axis1End);
73
        Point center = geometryManager.createPoint(
74
            (axis1Start.getX()+axis1End.getX())/2,
75
            (axis1Start.getY()+axis1End.getY())/2,
76
            geom.getGeometryType().getSubType());
77

  
78
        double angle = getAngle(axis1Start, axis1End);
79

  
80
        vertexList.add(geometryManager.createPoint(
81
            center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
82
            center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
83
            geom.getGeometryType().getSubType()));
84

  
85
        return vertexList;
86
    }
87

  
88
    @Override
89
    public int getNumVertex(Primitive geom) {
90
        return 3;
91
    }
92

  
93
    @Override
94
    public boolean canInsertVertex(Primitive geom, int index) {
95
        return false;
96
    }
97

  
98
    @Override
99
    public boolean canRemoveVertex(Primitive geom, int index) {
100
        return false;
101
    }
102

  
103
    @Override
104
    public boolean canMoveVertex(int index, Point point) {
105
        return true;
106
    }
107

  
108
    public double getAngle(Point start, Point end)
109
        throws GeometryOperationNotSupportedException,
110
        GeometryOperationException {
111
        double angle =
112
            Math.acos((end.getX() - start.getX()) / start.distance(end));
113

  
114
        if (start.getY() > end.getY()) {
115
            angle = -angle;
116
        }
117

  
118
        if (angle < 0) {
119
            angle += (2 * Math.PI);
120
        }
121

  
122
        return angle;
123
    }
124

  
125
    @Override
126
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
127
        Primitive primitive) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
128
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
129
        EditingProviderManager editingProviderManager =
130
            EditingProviderLocator.getProviderManager();
131
        ISymbol auxiliaryLineSymbolEditing =
132
            editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
133
        ISymbol polygonSymbolEditing =
134
            editingProviderManager.getSymbol("polygon-symbol-editing");
135
        Ellipse ellipse = (Ellipse)primitive;
136
        Point axis1Start = ellipse.getAxis1Start();
137
        Point axis1End = ellipse.getAxis1End();
138
        Line axis1Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
139
        axis1Line.setPoints(axis1Start,axis1End);
140
        drawingStatus.addStatus(axis1Line, auxiliaryLineSymbolEditing, "");
141

  
142
        Line axis2Line = geometryManager.createLine(primitive.getGeometryType().getSubType());
143

  
144
        Point center = geometryManager.createPoint(
145
            (axis1Start.getX()+axis1End.getX())/2,
146
            (axis1Start.getY()+axis1End.getY())/2,
147
            primitive.getGeometryType().getSubType());
148

  
149
        double angle = getAngle(axis1Start, axis1End);
150

  
151
        Point axis2Point1 = geometryManager.createPoint(
152
        center.getX() + ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
153
        center.getY() + ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
154
        primitive.getGeometryType().getSubType());
155

  
156
        Point axis2Point2 = geometryManager.createPoint(
157
        center.getX() - ellipse.getAxis2Dist()*Math.cos(angle+Math.PI/2),
158
        center.getY() - ellipse.getAxis2Dist()*Math.sin(angle+Math.PI/2),
159
        primitive.getGeometryType().getSubType());
160

  
161
        axis2Line.setPoints(axis2Point1,
162
            axis2Point2);
163
        drawingStatus.addStatus(axis2Line, auxiliaryLineSymbolEditing, "");
164

  
165
        drawingStatus.addStatus(primitive, drawingStatus.getPreviewSymbol(), "");
166
        drawingStatus.addStatus(primitive, polygonSymbolEditing, "");
167
    }
168

  
169
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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/EditVertexOperation.java
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3
import java.util.List;
4
import org.gvsig.fmap.geom.Geometry;
5
import org.gvsig.fmap.geom.exception.CreateGeometryException;
6
import org.gvsig.fmap.geom.operation.GeometryOperationException;
7
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
8
import org.gvsig.fmap.geom.primitive.Point;
9
import org.gvsig.fmap.geom.primitive.Primitive;
10
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
11

  
12

  
13
/**
14
 * @author fdiaz
15
 *
16
 */
17
public interface EditVertexOperation {
18

  
19
    /**
20
     * @param geom
21
     * @param index
22
     * @return The geometry with the inserted vertex
23
     * @throws CreateGeometryException
24
     */
25
    public Geometry insertVertex(Primitive geom, int index) throws CreateGeometryException;
26

  
27
    /**
28
     * @param geom
29
     * @param index
30
     * @return true if can insert vertex
31
     */
32
    public boolean canInsertVertex(Primitive geom, int index);
33

  
34
    /**
35
     * @param geom
36
     * @param index
37
     * @return The geometry without the removed vertex
38
     * @throws CreateGeometryException
39
     */
40
    public Geometry removeVertex(Primitive geom, int index) throws CreateGeometryException;
41

  
42
    /**
43
     * @param geom
44
     * @param index
45
     * @return true if can remove vertex
46
     */
47
    public boolean canRemoveVertex(Primitive geom, int index);
48

  
49
    /**
50
     * @param geom
51
     * @param index
52
     * @param point
53
     * @return the geometry with the moved vertex
54
     * @throws CreateGeometryException
55
     * @throws GeometryOperationNotSupportedException
56
     * @throws GeometryOperationException
57
     */
58
    public Geometry moveVertex(Primitive geom, int index, Point point) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException;
59

  
60
    /**
61
     * @param index
62
     * @param point
63
     * @return true if can move vertex
64
     */
65
    public boolean canMoveVertex(int index, Point point);
66

  
67
    /**
68
     * @param geom
69
     * @return a list of vertices
70
     * @throws CreateGeometryException
71
     * @throws GeometryOperationNotSupportedException
72
     * @throws GeometryOperationException
73
     */
74
    public List<Point> getVertexesList(Primitive geom) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException;
75

  
76
    /**
77
     * @param geom
78
     * @return the number of vertices
79
     */
80
    public int getNumVertex(Primitive geom);
81

  
82
    /**
83
     * @param drawingStatus
84
     * @param primitive
85
     * @throws CreateGeometryException
86
     * @throws GeometryOperationNotSupportedException
87
     * @throws GeometryOperationException
88
     */
89
    public void addToDrawingStatus(DefaultDrawingStatus drawingStatus,
90
        Primitive primitive) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException;
91

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

  
25

  
26
/**
27
 * @author fdiaz
28
 *
29
 */
30
public class SplineCalculator {
31
    private final double y[];
32
    private final double y2[];
33

  
34
    /**
35
     * The constructor calculates the second derivatives of the interpolating function
36
     * at the tabulated points xi, with xi = (i, y[i]).
37
     * Based on numerical recipes in C, http://www.library.cornell.edu/nr/bookcpdf/c3-3.pdf .
38
     * @param y Array of y coordinates for cubic-spline interpolation.
39
     */
40
    public SplineCalculator(double y[]) {
41
        this.y = y;
42
        int n = y.length;
43
        y2 = new double[n];
44
        double u[] = new double[n];
45
        for (int i = 1; i < n - 1; i++) {
46
            y2[i] = -1.0 / (4.0 + y2[i - 1]);
47
            u[i] = (6.0 * (y[i + 1] - 2.0 * y[i] + y[i - 1]) - u[i - 1]) / (4.0 + y2[i - 1]);
48
        }
49
        for (int i = n - 2; i >= 0; i--) {
50
            y2[i] = y2[i] * y2[i + 1] + u[i];
51
        }
52
    }
53

  
54
    /**
55
     * Returns a cubic-spline interpolated value y for the point between
56
     * point (n, y[n]) and (n+1, y[n+1), with t ranging from 0 for (n, y[n])
57
     * to 1 for (n+1, y[n+1]).
58
     * @param n The start point.
59
     * @param t The distance to the next point (0..1).
60
     * @return A cubic-spline interpolated value.
61
     */
62
    public double fn(int n, double t) {
63
        return t * y[n + 1] - ((t - 1.0) * t * ((t - 2.0) * y2[n] - (t + 1.0) * y2[n + 1])) / 6.0 + y[n] - t * y[n];
64
    }
65

  
66
}
org.gvsig.vectorediting/tags/org.gvsig.vectorediting-1.0.163/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
1
package org.gvsig.vectorediting.lib.prov.editvertex.operation;
2

  
3

  
4
import java.util.HashMap;
5
import java.util.Map;
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.primitive.Arc;
8
import org.gvsig.fmap.geom.primitive.Circle;
9
import org.gvsig.fmap.geom.primitive.Circumference;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff