Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extRasterTools-SE / src / org / gvsig / rastertools / roi / ui / listener / DrawMouseViewListener.java @ 30346

History | View | Annotate | Download (6.87 KB)

1
package org.gvsig.rastertools.roi.ui.listener;
2

    
3
import java.awt.Color;
4
import java.awt.Image;
5
import java.awt.geom.Point2D;
6

    
7
import org.gvsig.fmap.dal.exception.DataException;
8
import org.gvsig.fmap.dal.feature.EditableFeature;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.fmap.geom.Geometry;
11
import org.gvsig.fmap.geom.GeometryLocator;
12
import org.gvsig.fmap.geom.GeometryManager;
13
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
14
import org.gvsig.fmap.geom.exception.CreateGeometryException;
15
import org.gvsig.fmap.geom.primitive.GeneralPathX;
16
import org.gvsig.fmap.mapcontext.MapContextLocator;
17
import org.gvsig.fmap.mapcontext.MapContextManager;
18
import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
20
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
21
import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
22
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
23
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
24
import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
25
import org.gvsig.fmap.raster.grid.roi.VectorialROI;
26
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
27
import org.gvsig.raster.grid.GridException;
28
import org.gvsig.raster.util.RasterToolsUtil;
29
import org.gvsig.rastertools.roi.ui.ROIsTablePanel;
30
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
31
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
32
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
33
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
34
import org.slf4j.Logger;
35
import org.slf4j.LoggerFactory;
36

    
37
public class DrawMouseViewListener implements PolylineListener,PointListener {
38
        private static final GeometryManager        geomManager = GeometryLocator.getGeometryManager();
39
        private static final Logger                         logger                 = LoggerFactory.getLogger(DrawMouseViewListener.class);
40
        private ROIsTablePanel                                         tablePanel         = null;
41
        private VectorialROI                                         roi                 = null;
42
        
43
        private MapContextManager mapContextManager = MapContextLocator
44
                        .getMapContextManager();
45

    
46
        public DrawMouseViewListener(ROIsTablePanel roiManagerPanel) {
47
                this.tablePanel = roiManagerPanel;
48
        }
49

    
50
        public void pointFixed(MeasureEvent event) throws BehaviorException {
51

    
52
        }
53

    
54
        public void points(MeasureEvent event) throws BehaviorException {
55

    
56
        }
57

    
58
        public void polylineFinished(MeasureEvent event) throws BehaviorException {
59
                GeneralPathX gp = event.getGP();
60
                Geometry geometry = null;
61
                try{
62
                        if (tablePanel.getMapControl().getCurrentTool().equals("drawPolygonROI"))
63
                                geometry = geomManager.createSurface(gp, SUBTYPES.GEOM2D);
64
                        else
65
                                geometry = geomManager.createSurface(gp, SUBTYPES.GEOM2D);
66
                }catch(CreateGeometryException e){
67
                        logger.error("Error creating the envelope", e);
68
                }
69
                String roiName = "";
70

    
71
                int selectedRow;
72
                try {
73
                        selectedRow = tablePanel.getTable().getSelectedRow();
74
                        roiName = (String)tablePanel.getTable().getModel().getValueAt(selectedRow,0);
75
                        roi = (VectorialROI)tablePanel.getROI(roiName);
76
                        if(roi == null) {
77
                                RasterToolsUtil.messageBoxError("error_roi_not_selected", tablePanel, new NullPointerException("ROI no seleccionada DrawMouseViewListener L 61"));
78
                                return;
79
                        }
80
                        roi.addGeometry(geometry);
81
                        int numGeometries;
82

    
83
                        ISymbol sym = null;
84
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
85

    
86
                        if(tablePanel.getPolygonToolButton().isSelected()){
87
                                numGeometries = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,1)).intValue();
88
                                tablePanel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 1);
89
                                sym = mapContextManager.createSymbol(IFillSymbol.SYMBOL_NAME,
90
                                                geometryColor);
91
                        }
92
                        else{
93
                                numGeometries = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,2)).intValue();
94
                                tablePanel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 2);
95
                                sym = mapContextManager.createSymbol(ILineSymbol.SYMBOL_NAME,
96
                                                geometryColor);
97
                        }
98

    
99
                        GraphicLayer graphicLayer = tablePanel.getGraphicLayer();
100

    
101
                        FeatureStore store = graphicLayer.getFeatureStore();
102
                        store.edit();
103
                        EditableFeature feature = tablePanel.getRoiFeatureManager()
104
                                        .addROIFeature(roi, graphicLayer, geometry, sym);
105
                        store.insert(feature);
106

    
107
//                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
108
//                        graphicLayer.addGraphic(fGraphic);
109
//                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
110
                        tablePanel.getMapControl().drawGraphics();
111
                } catch (NotInitializeException e) {
112
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
113
                } catch (DataException e) {
114
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
115
                }
116

    
117
        }
118

    
119
        public boolean cancelDrawing() {
120
                return true;
121
        }
122

    
123
        public Image getImageCursor() {
124
                return tablePanel.getToolImage();
125
        }
126

    
127
        public void point(PointEvent event) throws BehaviorException {
128
                Point2D point = event.getPoint();
129
                Point2D p= tablePanel.getMapControl().getViewPort().toMapPoint(point);
130
                Geometry geometry = null;
131
                try {
132
                        geometry = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
133
                } catch (CreateGeometryException e1) {
134
                        logger.error("Error creating a point", e1);
135
                }
136
                String roiName = "";
137
                int selectedRow;
138
                try {
139
                        selectedRow = tablePanel.getTable().getSelectedRow();
140
                        roiName = (String)tablePanel.getTable().getModel().getValueAt(selectedRow,0);
141
                        roi = (VectorialROI)tablePanel.getROI(roiName);
142
                        roi.addGeometry(geometry);
143
                        int numPoints = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,3)).intValue();
144
                        tablePanel.getTable().getModel().setValueAt(new Integer(numPoints+1), selectedRow, 3);
145
                        //tablePanel.getTable().getModel().setValueAt(new Integer(roi.getValues()), selectedRow, 5);
146

    
147
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
148
                        ISymbol sym = mapContextManager.createSymbol(
149
                                        IMarkerSymbol.SYMBOL_NAME, geometryColor);
150
                        ((SimpleMarkerSymbol)sym).setStyle(SimpleMarkerSymbol.CIRCLE_STYLE);
151

    
152
                        GraphicLayer graphicLayer = tablePanel.getGraphicLayer();
153

    
154
                        FeatureStore store = graphicLayer.getFeatureStore();
155
                        store.edit();
156
                        EditableFeature feature = tablePanel.getRoiFeatureManager()
157
                                        .addROIFeature(roi, graphicLayer, geometry, sym);
158
                        store.insert(feature);
159
                        
160
//                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
161
//                        tablePanel.getMapControl().getMapContext().getGraphicsLayer().addGraphic(fGraphic);
162
//                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
163
                        tablePanel.getMapControl().drawGraphics();
164
                } catch (NotInitializeException e) {
165
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
166
                } catch (DataException e) {
167
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
168
                }
169
        }
170

    
171
        public void pointDoubleClick(PointEvent event) throws BehaviorException {
172
        }
173

    
174
}