Revision 2866

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/config.xml
85 85
        position="601002100" action-command="insert-circle-cr" icon="insert-circle-cr"
86 86
        accelerator="" />
87 87

  
88
      <action name="insert-circle-cd" label="insert_circle_cd" tooltip="insert_circle_cd"
89
        position="601002110" action-command="insert-circle-cd" icon="insert-circle-cd"
90
        accelerator="" />
91

  
88 92
      <action name="insert-circle-2tg1p" label="insert_circle_2tg1p" tooltip="insert_circle_2tg1p"
89
        position="601002110" action-command="insert-circle-2tg1p" icon="insert-circle-2tg1p"
93
        position="601002120" action-command="insert-circle-2tg1p" icon="insert-circle-2tg1p"
90 94
        accelerator="" />
91 95

  
92 96
      <action name="insert-circle-tantanradius" label="insert_circle_tantanradius" tooltip="insert_circle_tantanradius"
93
        position="601002120" action-command="insert-circle-tantanradius" icon="insert-circle-tantanradius"
97
        position="601002130" action-command="insert-circle-tantanradius" icon="insert-circle-tantanradius"
94 98
        accelerator="" />
95 99

  
96
      <action name="insert-circumference-cr" label="insert_circumference_cr"
97
        tooltip="insert_circumference_cr" position="601002101" action-command="insert-circumference-cr"
100
      <action name="insert-circumference-cr" label="insert_circumference_cr" tooltip="insert_circumference_cr" 
101
        position="601002101" action-command="insert-circumference-cr"
98 102
        icon="insert-circumference-cr" accelerator="" />
99 103

  
104
      <action name="insert-circumference-cd" label="insert_circumference_cd" tooltip="insert_circumference_cd" 
105
        position="601002111" action-command="insert-circumference-cd"
106
        icon="insert-circumference-cd" accelerator="" />
107

  
100 108
      <action name="insert-circumference-2tg1p" label="insert_circumference_2tg1p" tooltip="insert_circumference_2tg1p"
101
        position="601002111" action-command="insert-circumference-2tg1p" icon="insert-circumference-2tg1p"
109
        position="601002121" action-command="insert-circumference-2tg1p" icon="insert-circumference-2tg1p"
102 110
        accelerator="" />
103 111

  
104 112
      <action name="insert-circumference-tantanradius" label="insert_circumference_tantanradius" tooltip="insert_circumference_tantanradius"
105
        position="601002121" action-command="insert-circumference-tantanradius" icon="insert-circumference-tantanradius"
113
        position="601002131" action-command="insert-circumference-tantanradius" icon="insert-circumference-tantanradius"
106 114
        accelerator="" />
107 115

  
108 116
      <action name="insert-circle-3p" label="insert_circle_3p" tooltip="insert_circle_3p"
109
        position="601002125" action-command="insert-circle-3p" icon="insert-circle-3p"
117
        position="601002135" action-command="insert-circle-3p" icon="insert-circle-3p"
110 118
        accelerator="" />
111 119

  
112
      <action name="insert-circumference-3p" label="insert_circumference_3p"
113
        tooltip="insert_circumference_3p" position="601002126" action-command="insert-circumference-3p"
120
      <action name="insert-circumference-3p" label="insert_circumference_3p" tooltip="insert_circumference_3p" 
121
        position="601002136" action-command="insert-circumference-3p"
114 122
        icon="insert-circumference-3p" accelerator="" />
115 123

  
116 124
      <action name="insert-circle-2p" label="insert_circle_2p" tooltip="insert_circle_2p"
117
        position="601002127" action-command="insert-circle-2p" icon="insert-circle-2p"
125
        position="601002137" action-command="insert-circle-2p" icon="insert-circle-2p"
118 126
        accelerator="" />
119 127

  
120
      <action name="insert-circumference-2p" label="insert_circumference_2p"
121
        tooltip="insert_circumference_2p" position="601002128" action-command="insert-circumference-2p"
128
      <action name="insert-circumference-2p" label="insert_circumference_2p" tooltip="insert_circumference_2p" 
129
        position="601002138" action-command="insert-circumference-2p"
122 130
        icon="insert-circumference-2p" accelerator="" />
123 131

  
124 132
      <action name="insert-ellipse" label="insert_ellipse" tooltip="insert_ellipse"
......
279 287
      <menu text="Layer/Insert/insert_arc_three_points" name="insert-arc-three-points" />
280 288
      <menu text="Layer/Insert/insert_circle_cr" name="insert-circle-cr" />
281 289
      <menu text="Layer/Insert/insert_circumference_cr" name="insert-circumference-cr" />
290
      <menu text="Layer/Insert/insert_circle_cd" name="insert-circle-cd" />
291
      <menu text="Layer/Insert/insert_circumference_cd" name="insert-circumference-cd" />
282 292
      <menu text="Layer/Insert/insert_circle_3p" name="insert-circle-3p" />
283 293
      <menu text="Layer/Insert/insert_circumference_3p" name="insert-circumference-3p" />
284 294
      <menu text="Layer/Insert/insert_circle_2p" name="insert-circle-2p" />
......
333 343
        <selectable-tool name="insert-arc" dropdowngroup="arc" />
334 344
        <selectable-tool name="insert-arc-by-center" dropdowngroup="arc" />
335 345
        <selectable-tool name="insert-arc-three-points" dropdowngroup="arc" />
346
        <selectable-tool name="insert-circle-cr" dropdowngroup="circle" />
336 347
        <selectable-tool name="insert-circumference-cr" dropdowngroup="circle" />
337
        <selectable-tool name="insert-circle-cr" dropdowngroup="circle" />
348
        <selectable-tool name="insert-circle-cd" dropdowngroup="circle" />
349
        <selectable-tool name="insert-circumference-cd" dropdowngroup="circle" />
338 350
        <selectable-tool name="insert-circle-2tg1p" dropdowngroup="circle" />
351
        <selectable-tool name="insert-circumference-2tg1p" dropdowngroup="circle" />
339 352
        <selectable-tool name="insert-circle-tantanradius" dropdowngroup="circle" />
353
        <selectable-tool name="insert-circumference-tantanradius" dropdowngroup="circle" />
354
        <selectable-tool name="insert-circle-3p" dropdowngroup="circle" />
340 355
        <selectable-tool name="insert-circumference-3p" dropdowngroup="circle" />
341
        <selectable-tool name="insert-circle-3p" dropdowngroup="circle" />
356
        <selectable-tool name="insert-circle-2p" dropdowngroup="circle" />
342 357
        <selectable-tool name="insert-circumference-2p" dropdowngroup="circle" />
343
        <selectable-tool name="insert-circle-2p" dropdowngroup="circle" />
344
        <selectable-tool name="insert-circumference-2tg1p" dropdowngroup="circle" />
345
        <selectable-tool name="insert-circumference-tantanradius" dropdowngroup="circle" />
346 358
        <selectable-tool name="insert-ellipse" dropdowngroup="ellipse" />
347 359
        <selectable-tool name="insert-filled-ellipse" dropdowngroup="ellipse" />
348 360
        <selectable-tool name="insert-ellipse-center-axes" dropdowngroup="ellipse" />
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircumferenceCDEditingProvider.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.circlecr;
26

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

  
47
public class CircumferenceCDEditingProvider extends CircleCDEditingProvider
48
implements EditingProvider {
49

  
50
    public CircumferenceCDEditingProvider(ProviderServices providerServices,
51
        DynObject parameters) {
52
        super(providerServices, parameters);
53
    }
54

  
55
    @Override
56
    public DefaultDrawingStatus getDrawingStatus(Point mousePosition) throws DrawServiceException {
57
        DefaultDrawingStatus geometries = new DefaultDrawingStatus();
58
        EditingProviderManager editingProviderManager = EditingProviderLocator.getProviderManager();
59
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
60
        ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
61
        ISymbol auxiliaryLineSymbolEditing = editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
62
        ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
63

  
64
        ISymbol previewSymbol = this.getPreviewSymbol();
65
        geometries.setPreviewSymbol(previewSymbol);
66
        
67
        if ((values != null) && (values.get(center) != null)
68
            && (values.get(diameter) == null)) {
69
            Point centerPoint = (Point) values.get(center);
70
            EditingProviderServices editingProviderServices =
71
                (EditingProviderServices) getProviderServices();
72

  
73
            try {
74
                int subtype = editingProviderServices.getSubType(featureStore);
75
                Point oppositePosition = GeometryUtils.createPoint(
76
                        centerPoint.getX() - (mousePosition.getX() - centerPoint.getX()),
77
                        centerPoint.getY() - (mousePosition.getY() - centerPoint.getY())
78
                );
79
                Curve line
80
                        = editingProviderServices.createLine(oppositePosition, mousePosition, subtype);
81
                Circumference circumference = (Circumference) geomManager.create(CIRCUMFERENCE, subtype);
82
                circumference.setPoints(centerPoint, mousePosition.distance(centerPoint));
83

  
84
                geometries.addStatus(centerPoint, auxiliaryPointSymbolEditing, "");
85
                geometries.addStatus(line, auxiliaryLineSymbolEditing, "");
86
                geometries.addStatus(circumference, lineSymbolEditing, "");
87
                geometries.addStatus(circumference, previewSymbol, "");
88

  
89
            } catch (Exception e) {
90
                throw new DrawServiceException(e);
91
            }
92

  
93
            return geometries;
94
        }
95

  
96
        return null;
97

  
98
    }
99

  
100

  
101
    @Override
102
    public Geometry finish() throws FinishServiceException {
103
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
104
        Point centerPoint = (Point) values.get(center);
105
        double diameterValue = (Double) values.get(diameter);
106
        EditingProviderServices editingProviderServices =
107
            (EditingProviderServices) getProviderServices();
108
        try {
109
            int subtype = editingProviderServices.getSubType(featureStore);
110
            GeometryType storeGeomType =
111
                editingProviderServices.getGeomType(featureStore);
112
            Circumference circumference = (Circumference) geomManager.create(CIRCUMFERENCE, subtype);
113
            circumference.setPoints(centerPoint, diameterValue / 2.0);
114

  
115
            if (storeGeomType.isTypeOf(MULTICURVE)) {
116
                MultiCurve multicurve;
117
                multicurve =
118
                    GeometryLocator.getGeometryManager().createMultiCurve(
119
                        storeGeomType.getSubType());
120
                multicurve.addCurve((Circumference) circumference);
121
                return multicurve;
122
            }
123

  
124
            return circumference;
125
        } catch (Exception e) {
126
            throw new FinishServiceException(e);
127
        }
128
    }
129

  
130
    @Override
131
    public String getName() {
132
        return CircumferenceCDEditingProviderFactory.PROVIDER_NAME;
133
    }
134

  
135
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCREditingProvider.java
31 31
import org.gvsig.fmap.dal.feature.FeatureStore;
32 32
import org.gvsig.fmap.geom.Geometry;
33 33
import org.gvsig.fmap.geom.GeometryLocator;
34
import org.gvsig.fmap.geom.GeometryUtils;
34 35
import org.gvsig.fmap.geom.aggregate.MultiSurface;
35 36
import org.gvsig.fmap.geom.primitive.Circle;
36 37
import org.gvsig.fmap.geom.primitive.Curve;
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCDEditingProviderFactory.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.circlecr;
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 CircleCDEditingProviderFactory extends AbstractEditingProviderFactory {
36

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

  
39
    private final static String PROVIDER_DESCRIPTION =
40
        "Creates circles from the center and diametre";
41

  
42
    public CircleCDEditingProviderFactory() {
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
                true,
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 CircleCDEditingProvider(services, parameters);
63
    }
64

  
65
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCREditingLibrary.java
54 54
        manager.addProviderFactory(new Circumference2Tg1PEditingProviderFactory());
55 55
        manager.addProviderFactory(new CircleTanTanRadiusEditingProviderFactory());
56 56
        manager.addProviderFactory(new CircumferenceTanTanRadiusEditingProviderFactory());
57
        manager.addProviderFactory(new CircleCDEditingProviderFactory());
58
        manager.addProviderFactory(new CircumferenceCDEditingProviderFactory());
57 59

  
58 60
        manager.registerIcon("vectorediting-tools", "insert-circle-cr", this
59 61
            .getClass().getClassLoader(), this.getClass().getName());
......
67 69
            .getClass().getClassLoader(), this.getClass().getName());
68 70
        manager.registerIcon("vectorediting-tools", "insert-circumference-tantanradius",
69 71
            this.getClass().getClassLoader(), this.getClass().getName());
72
        manager.registerIcon("vectorediting-tools", "insert-circle-cd", this
73
            .getClass().getClassLoader(), this.getClass().getName());
74
        manager.registerIcon("vectorediting-tools", "insert-circumference-cd", this
75
            .getClass().getClassLoader(), this.getClass().getName());
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.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCDEditingProvider.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.circlecr;
26

  
27
import java.util.ArrayList;
28
import java.util.HashMap;
29
import java.util.List;
30
import java.util.Map;
31
import org.gvsig.fmap.dal.feature.FeatureStore;
32
import org.gvsig.fmap.geom.Geometry;
33
import org.gvsig.fmap.geom.GeometryLocator;
34
import org.gvsig.fmap.geom.GeometryUtils;
35
import org.gvsig.fmap.geom.aggregate.MultiSurface;
36
import org.gvsig.fmap.geom.primitive.Circle;
37
import org.gvsig.fmap.geom.primitive.Curve;
38
import org.gvsig.fmap.geom.primitive.Point;
39
import org.gvsig.fmap.geom.type.GeometryType;
40
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
41
import org.gvsig.tools.dynobject.DynObject;
42
import org.gvsig.tools.service.spi.ProviderServices;
43
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
44
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
45
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
46
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
47
import org.gvsig.vectorediting.lib.api.exceptions.InvalidEntryException;
48
import org.gvsig.vectorediting.lib.api.exceptions.StartServiceException;
49
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
50
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
51
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
52
import org.gvsig.vectorediting.lib.spi.EditingProvider;
53
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
54
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
55
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
56
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
57

  
58
public class CircleCDEditingProvider extends AbstractEditingProvider implements
59
EditingProvider {
60

  
61
    protected EditingServiceParameter center;
62

  
63
    protected EditingServiceParameter diameter;
64

  
65
    protected Map<EditingServiceParameter, Object> values;
66

  
67
    protected FeatureStore featureStore;
68

  
69
    public CircleCDEditingProvider(ProviderServices providerServices,
70
        DynObject parameters) {
71
        super(providerServices);
72

  
73
        this.featureStore =
74
            (FeatureStore) parameters
75
            .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
76

  
77
        this.center =
78
            new DefaultEditingServiceParameter("center", "center",
79
                TYPE.POSITION);
80

  
81
        this.diameter =
82
            new DefaultEditingServiceParameter("diameter", "diameter",
83
                TYPE.POSITION, TYPE.VALUE);
84
    }
85

  
86
    public DefaultDrawingStatus getDrawingStatus(Point mousePosition)
87
        throws DrawServiceException {
88
        DefaultDrawingStatus geometries = new DefaultDrawingStatus();
89
        EditingProviderManager editingProviderManager =
90
            EditingProviderLocator.getProviderManager();
91
        ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing");
92
        ISymbol auxiliaryLineSymbolEditing = editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
93
        ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
94

  
95
        ISymbol previewSymbol = this.getPreviewSymbol();
96
        
97
        if ((values != null) && (values.get(center) != null)
98
            && (values.get(diameter) == null)) {
99
            Point centerPoint = (Point) values.get(center);
100
            EditingProviderServices editingProviderServices =
101
                (EditingProviderServices) getProviderServices();
102

  
103
            try {
104
                int subtype = editingProviderServices.getSubType(featureStore);
105
                Point oppositePosition = GeometryUtils.createPoint(
106
                        centerPoint.getX() - (mousePosition.getX() - centerPoint.getX()),
107
                        centerPoint.getY() - (mousePosition.getY() - centerPoint.getY())
108
                );
109
                Curve line
110
                        = editingProviderServices.createLine(oppositePosition, mousePosition, subtype);
111
                Circle circle = editingProviderServices.createCircle(centerPoint, mousePosition.distance(centerPoint), subtype);
112
                geometries.addStatus(centerPoint, auxiliaryPointSymbolEditing, "");
113
                geometries.addStatus(line, auxiliaryLineSymbolEditing, "");
114
                geometries.addStatus(circle, polygonSymbolEditing, "");
115
                geometries.addStatus(circle, previewSymbol, "");
116

  
117
            } catch (Exception e) {
118
                throw new DrawServiceException(e);
119
            }
120

  
121
            return geometries;
122
        }
123

  
124
        return null;
125

  
126
    }
127

  
128
    @Override
129
    public EditingServiceParameter next() {
130
        if (values.get(center) == null) {
131
            return this.center;
132
        } else if (values.get(diameter) == null) {
133
            return this.diameter;
134
        }
135
        return null;
136
    }
137

  
138
    @Override
139
    public void stop() {
140
        values.clear();
141
    }
142

  
143
    private void validateAndInsertValue(EditingServiceParameter param,
144
        Object value) throws InvalidEntryException {
145
        if (param == center) {
146
            if (value instanceof Point) {
147
                values.put(param, value);
148
                return;
149
            }
150
        } else if (param == diameter) {
151

  
152
            if (value instanceof Point) {
153
                Double radiusValue = null;
154

  
155
                try {
156
                    radiusValue =
157
                        ((Point) value).distance((Point) values.get(center));
158
                } catch (Exception e) {
159
                    throw new InvalidEntryException(e);
160
                }
161

  
162
                if (radiusValue != null) {
163
                    values.put(param, radiusValue * 2.0);
164
                    return;
165
                }
166

  
167
            } else if (value instanceof Double) {
168

  
169
                if ((((Double) value) - 0.01) > 0) {
170
                    values.put(param, value);
171
                    return;
172
                }
173

  
174
            }
175
        }
176
        throw new InvalidEntryException(null);
177
    }
178

  
179
    @Override
180
    public List<EditingServiceParameter> getParameters() {
181
        List<EditingServiceParameter> list =
182
            new ArrayList<>();
183
        list.add(center);
184
        list.add(diameter);
185
        return list;
186
    }
187

  
188
    @Override
189
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
190
        validateAndInsertValue(parameter, value);
191
    }
192

  
193
    @Override
194
    public void setValue(Object value) throws InvalidEntryException {
195
        EditingServiceParameter param = next();
196
        validateAndInsertValue(param, value);
197
    }
198

  
199
    @Override
200
    public void finishAndStore() throws FinishServiceException {
201
        EditingProviderServices editingProviderServices =
202
            (EditingProviderServices) getProviderServices();
203
        Geometry geometry = finish();
204
        editingProviderServices.insertGeometryIntoFeatureStore(geometry,
205
            featureStore);
206
    }
207

  
208
    @Override
209
    public Geometry finish() throws FinishServiceException {
210
        Point centerPoint = (Point) values.get(center);
211
        double diameterValue = (Double) values.get(diameter);
212
        EditingProviderServices editingProviderServices =
213
            (EditingProviderServices) getProviderServices();
214

  
215
        try {
216
            int subtype = editingProviderServices.getSubType(featureStore);
217
            GeometryType storeGeomType =
218
                editingProviderServices.getGeomType(featureStore);
219
            Geometry geometry =
220
                editingProviderServices.createCircle(centerPoint, diameterValue/2.0,
221
                    subtype);
222

  
223
            if (storeGeomType.isTypeOf(MULTISURFACE)) {
224
                MultiSurface multisurface;
225
                multisurface =
226
                    GeometryLocator.getGeometryManager().createMultiSurface(
227
                        storeGeomType.getSubType());
228
                multisurface.addSurface((Circle) geometry);
229
                return multisurface;
230
            }
231

  
232
            return geometry;
233
        } catch (Exception e) {
234
            throw new FinishServiceException(e);
235
        }
236
    }
237

  
238
    @Override
239
    public void start() throws StartServiceException {
240
        this.values = new HashMap<>();
241
    }
242

  
243
    public String getName() {
244
        return CircleCDEditingProviderFactory.PROVIDER_NAME;
245
    }
246

  
247
    @Override
248
    public Object getValue(EditingServiceParameter parameter) {
249
        return values!=null?values.get(parameter):null;
250
    }
251

  
252
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircumferenceCDEditingProviderFactory.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.circlecr;
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 CircumferenceCDEditingProviderFactory extends AbstractEditingProviderFactory {
36

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

  
39
    private final static String PROVIDER_DESCRIPTION =
40
        "Creates circumferences from the center and diametre";
41

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

  
46

  
47
    @Override
48
    public EditingServiceInfo getServiceInfo() {
49
        EditingServiceInfo serviceInfo =
50
            new DefaultEditingServiceinfo(PROVIDER_NAME, "", true, null,
51
                new int[] { Geometry.TYPES.LINE, Geometry.TYPES.MULTILINE, Geometry.TYPES.CURVE, Geometry.TYPES.MULTICURVE });
52

  
53
        return serviceInfo;
54
    }
55

  
56
    @Override
57
    protected Provider doCreate(DynObject parameters, ProviderServices services) {
58
        return new CircumferenceCDEditingProvider(services, parameters);
59
    }
60

  
61
}

Also available in: Unified diff