Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / roi / ui / listener / DrawMouseViewListener.java @ 2125

History | View | Annotate | Download (8 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
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
 */
22
package org.gvsig.raster.tools.app.basic.tool.roi.ui.listener;
23

    
24
import java.awt.Color;
25
import java.awt.Image;
26
import java.awt.geom.Point2D;
27

    
28
import org.gvsig.fmap.dal.exception.DataException;
29
import org.gvsig.fmap.dal.feature.EditableFeature;
30
import org.gvsig.fmap.dal.feature.FeatureStore;
31
import org.gvsig.fmap.geom.Geometry;
32
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
33
import org.gvsig.fmap.geom.GeometryLocator;
34
import org.gvsig.fmap.geom.GeometryManager;
35
import org.gvsig.fmap.geom.exception.CreateGeometryException;
36
import org.gvsig.fmap.geom.primitive.GeneralPathX;
37
import org.gvsig.fmap.mapcontext.MapContextLocator;
38
import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
39
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
40
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
41
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
42
import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
43
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
44
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
45
import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
46
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
47
import org.gvsig.raster.roi.VectorialROI;
48
import org.gvsig.raster.swing.roi.ROIPanel;
49
import org.gvsig.raster.tools.app.basic.RasterToolsUtil;
50
import org.gvsig.raster.tools.app.basic.tool.roi.ROIDataModel;
51
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
52
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
53
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
54
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
55
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
57

    
58
@SuppressWarnings("deprecation")
59
public class DrawMouseViewListener implements PolylineListener, PointListener {
60
        private static final GeometryManager        geomManager     = GeometryLocator.getGeometryManager();
61
        private static final Logger                         logger                     = LoggerFactory.getLogger(DrawMouseViewListener.class);
62
        private ROIDataModel                                         roiDataModel         = null;
63
        private VectorialROI                                         roi                     = null;
64
        private SymbolManager                   symbolManager   = MapContextLocator.getSymbolManager();
65

    
66
        public DrawMouseViewListener(ROIDataModel roiManagerPanel) {
67
                this.roiDataModel = roiManagerPanel;
68
        }
69

    
70
        public void pointFixed(MeasureEvent event) throws BehaviorException {
71

    
72
        }
73

    
74
        public void points(MeasureEvent event) throws BehaviorException {
75

    
76
        }
77

    
78
        public void polylineFinished(MeasureEvent event) throws BehaviorException {
79
                GeneralPathX gp = event.getGP();
80
                Geometry geometry = null;
81
                try{
82
                        if (roiDataModel.getMapControl().getCurrentTool().equals("drawPolygonROI"))
83
                                geometry = geomManager.createSurface(gp, SUBTYPES.GEOM2D);
84
                        else
85
                                geometry = geomManager.createCurve(gp, SUBTYPES.GEOM2D);
86
                } catch(CreateGeometryException e) {
87
                        logger.error("Error creating the envelope", e);
88
                }
89
                String roiName = "";
90

    
91
                int selectedRow;
92
                try {
93
                        selectedRow = roiDataModel.getTable().getSelectedRow();
94
                        roiName = (String)roiDataModel.getTable().getModel().getValueAt(selectedRow,0);
95
                        roi = (VectorialROI)roiDataModel.getROI(roiName);
96
                        if(roi == null) {
97
                                RasterToolsUtil.messageBoxError("error_roi_not_selected", roiDataModel, new NullPointerException("ROI no seleccionada DrawMouseViewListener L 61"));
98
                                return;
99
                        }
100
                        roi.addGeometry(geometry);
101
                        roi.setID(System.currentTimeMillis());
102
                        int numGeometries;
103

    
104
                        ISymbol sym = null;
105
                        Color geometryColor = (Color)roiDataModel.getTable().getModel().getValueAt(selectedRow, 4);
106

    
107
                        if(roiDataModel.getROIPanel().getButton(ROIPanel.POLYGON_BUTTON).isSelected()){
108
                                numGeometries = ((Integer)roiDataModel.getTable().getModel().getValueAt(selectedRow,1)).intValue();
109
                                roiDataModel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 1);
110
                                sym = symbolManager.createSymbol(IFillSymbol.SYMBOL_NAME, geometryColor);
111
                        }
112
                        else{
113
                                numGeometries = ((Integer)roiDataModel.getTable().getModel().getValueAt(selectedRow,2)).intValue();
114
                                roiDataModel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 2);
115
                                sym = symbolManager.createSymbol(ILineSymbol.SYMBOL_NAME, geometryColor);
116
                        }
117

    
118
                        GraphicLayer graphicLayer = roiDataModel.getGraphicLayer();
119

    
120
                        FeatureStore store = graphicLayer.getFeatureStore();
121
                        if(!store.isEditing())
122
                                store.edit();
123
                        EditableFeature feature = roiDataModel.getRoiFeatureManager().addROIFeature(roi, graphicLayer, geometry, sym);
124
                        store.insert(feature);
125

    
126
//                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
127
//                        graphicLayer.addGraphic(fGraphic);
128
//                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
129
                        roiDataModel.getMapControl().drawGraphics();
130
                } catch (NotInitializeException e) {
131
                        RasterToolsUtil.messageBoxError("error_tabla_rois", roiDataModel, e);
132
                } catch (DataException e) {
133
                        RasterToolsUtil.messageBoxError("error_tabla_rois", roiDataModel, e);
134
                }
135

    
136
        }
137

    
138
        public boolean cancelDrawing() {
139
                return true;
140
        }
141

    
142
        public Image getImageCursor() {
143
                return roiDataModel.getToolImage();
144
        }
145

    
146
        public void point(PointEvent event) throws BehaviorException {
147
                Point2D point = event.getPoint();
148
                Point2D p= roiDataModel.getMapControl().getViewPort().toMapPoint(point);
149
                Geometry geometry = null;
150
                try {
151
                        geometry = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
152
                } catch (CreateGeometryException e1) {
153
                        logger.error("Error creating a point", e1);
154
                }
155
                String roiName = "";
156
                int selectedRow;
157
                try {
158
                        selectedRow = roiDataModel.getTable().getSelectedRow();
159
                        roiName = (String)roiDataModel.getTable().getModel().getValueAt(selectedRow,0);
160
                        roi = (VectorialROI)roiDataModel.getROI(roiName);
161
                        roi.addGeometry(geometry);
162
                        int numPoints = ((Integer)roiDataModel.getTable().getModel().getValueAt(selectedRow,3)).intValue();
163
                        roiDataModel.getTable().getModel().setValueAt(new Integer(numPoints+1), selectedRow, 3);
164
                        //tablePanel.getTable().getModel().setValueAt(new Integer(roi.getValues()), selectedRow, 5);
165

    
166
                        Color geometryColor = (Color)roiDataModel.getTable().getModel().getValueAt(selectedRow, 4);
167
                        ISymbol sym =
168
                                        symbolManager.createSymbol(
169
                                        IMarkerSymbol.SYMBOL_NAME, geometryColor);
170
                        ((SimpleMarkerSymbol)sym).setStyle(SimpleMarkerSymbol.CIRCLE_STYLE);
171

    
172
                        GraphicLayer graphicLayer = roiDataModel.getGraphicLayer();
173

    
174
                        FeatureStore store = graphicLayer.getFeatureStore();
175
                        if(!store.isEditing())
176
                                store.edit();
177
                        EditableFeature feature = roiDataModel.getRoiFeatureManager()
178
                                        .addROIFeature(roi, graphicLayer, geometry, sym);
179
                        store.insert(feature);
180
                        
181
//                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
182
//                        tablePanel.getMapControl().getMapContext().getGraphicsLayer().addGraphic(fGraphic);
183
//                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
184
                        roiDataModel.getMapControl().drawGraphics();
185
                } catch (NotInitializeException e) {
186
                        RasterToolsUtil.messageBoxError("error_tabla_rois", roiDataModel, e);
187
                } catch (DataException e) {
188
                        RasterToolsUtil.messageBoxError("error_tabla_rois", roiDataModel, e);
189
                }
190
        }
191

    
192
        public void pointDoubleClick(PointEvent event) throws BehaviorException {
193
        }
194

    
195
}