Statistics
| Revision:

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

History | View | Annotate | Download (6.68 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
                        roi.addGeometry(geometry);
77
                        int numGeometries;
78

    
79
                        ISymbol sym = null;
80
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
81

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

    
95
                        GraphicLayer graphicLayer = tablePanel.getGraphicLayer();
96

    
97
                        FeatureStore store = graphicLayer.getFeatureStore();
98
                        store.edit();
99
                        EditableFeature feature = tablePanel.getRoiFeatureManager()
100
                                        .addROIFeature(roi, graphicLayer, geometry, sym);
101
                        store.insert(feature);
102

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

    
113
        }
114

    
115
        public boolean cancelDrawing() {
116
                return true;
117
        }
118

    
119
        public Image getImageCursor() {
120
                return tablePanel.getToolImage();
121
        }
122

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

    
143
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
144
                        ISymbol sym = mapContextManager.createSymbol(
145
                                        IMarkerSymbol.SYMBOL_NAME, geometryColor);
146
                        ((SimpleMarkerSymbol)sym).setStyle(SimpleMarkerSymbol.CIRCLE_STYLE);
147

    
148
                        GraphicLayer graphicLayer = tablePanel.getGraphicLayer();
149

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

    
167
        public void pointDoubleClick(PointEvent event) throws BehaviorException {
168
        }
169

    
170
}