Statistics
| Revision:

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

History | View | Annotate | Download (6.08 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.geom.Geometry;
8
import org.gvsig.fmap.geom.GeometryLocator;
9
import org.gvsig.fmap.geom.GeometryManager;
10
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
11
import org.gvsig.fmap.geom.exception.CreateGeometryException;
12
import org.gvsig.fmap.geom.primitive.GeneralPathX;
13
import org.gvsig.fmap.geom.util.UtilFunctions;
14
import org.gvsig.fmap.mapcontext.layers.GraphicLayer;
15
import org.gvsig.fmap.mapcontext.rendering.legend.FGraphic;
16
import org.gvsig.fmap.mapcontext.rendering.symbols.IFillSymbol;
17
import org.gvsig.fmap.mapcontext.rendering.symbols.ILineSymbol;
18
import org.gvsig.fmap.mapcontext.rendering.symbols.IMarkerSymbol;
19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
20
import org.gvsig.fmap.mapcontext.rendering.symbols.SimpleMarkerSymbol;
21
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbologyFactory;
22
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
23
import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
24
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
25
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
26
import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
27
import org.gvsig.fmap.raster.grid.roi.VectorialROI;
28
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
29
import org.gvsig.raster.grid.GridException;
30
import org.gvsig.raster.util.RasterToolsUtil;
31
import org.gvsig.rastertools.rasterresolution.ZoomPixelCursorListener;
32
import org.gvsig.rastertools.roi.ui.ROIsTablePanel;
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

    
36
public class DrawMouseViewListener implements PolylineListener,PointListener {
37
        private static final GeometryManager        geomManager = GeometryLocator.getGeometryManager();
38
        private static final Logger                         logger                 = LoggerFactory.getLogger(DrawMouseViewListener.class);
39
        private ROIsTablePanel                                         tablePanel         = null;
40
        private VectorialROI                                         roi                 = null;
41

    
42
        public DrawMouseViewListener(ROIsTablePanel roiManagerPanel) {
43
                this.tablePanel = roiManagerPanel;
44
        }
45

    
46
        public void pointFixed(MeasureEvent event) throws BehaviorException {
47

    
48
        }
49

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

    
52
        }
53

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

    
67
                int selectedRow;
68
                try {
69
                        selectedRow = tablePanel.getTable().getSelectedRow();
70
                        roiName = (String)tablePanel.getTable().getModel().getValueAt(selectedRow,0);
71
                        roi = (VectorialROI)tablePanel.getROI(roiName);
72
                        roi.addGeometry(geometry);
73
                        int numGeometries;
74

    
75
                        ISymbol sym = null;
76
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
77

    
78
                        if(tablePanel.getPolygonToolButton().isSelected()){
79
                                numGeometries = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,1)).intValue();
80
                                tablePanel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 1);
81
                                sym =SymbologyFactory.createDefaultFillSymbol();
82
                                ((IFillSymbol)sym).setFillColor(geometryColor);
83
                        }
84
                        else{
85
                                numGeometries = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,2)).intValue();
86
                                tablePanel.getTable().getModel().setValueAt(new Integer(numGeometries+1), selectedRow, 2);
87
                                sym =SymbologyFactory.createDefaultLineSymbol();
88
                                ((ILineSymbol)sym).setLineColor(geometryColor);
89
                        }
90

    
91
                        GraphicLayer graphicLayer = tablePanel.getMapControl().getMapContext().getGraphicsLayer();
92

    
93
                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
94
                        tablePanel.getMapControl().getMapContext().getGraphicsLayer().addGraphic(fGraphic);
95
                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
96
                        tablePanel.getMapControl().drawGraphics();
97
                } catch (NotInitializeException e) {
98
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
99
                }
100

    
101
        }
102

    
103
        public boolean cancelDrawing() {
104
                return true;
105
        }
106

    
107
        public Image getImageCursor() {
108
                return tablePanel.getToolImage();
109
        }
110

    
111
        public void point(PointEvent event) throws BehaviorException {
112
                Point2D point = event.getPoint();
113
                Point2D p= tablePanel.getMapControl().getViewPort().toMapPoint(point);
114
                Geometry geometry = null;
115
                try {
116
                        geometry = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
117
                } catch (CreateGeometryException e1) {
118
                        logger.error("Error creating a point", e1);
119
                }
120
                String roiName = "";
121
                int selectedRow;
122
                try {
123
                        selectedRow = tablePanel.getTable().getSelectedRow();
124
                        roiName = (String)tablePanel.getTable().getModel().getValueAt(selectedRow,0);
125
                        roi = (VectorialROI)tablePanel.getROI(roiName);
126
                        roi.addGeometry(geometry);
127
                        int numPoints = ((Integer)tablePanel.getTable().getModel().getValueAt(selectedRow,3)).intValue();
128
                        tablePanel.getTable().getModel().setValueAt(new Integer(numPoints+1), selectedRow, 3);
129
                        tablePanel.getTable().getModel().setValueAt(new Integer(roi.getValues()), selectedRow, 5);
130

    
131
                        GraphicLayer graphicLayer = tablePanel.getMapControl().getMapContext().getGraphicsLayer();
132
                        Color geometryColor = (Color)tablePanel.getTable().getModel().getValueAt(selectedRow, 4);
133
                        ISymbol sym = SymbologyFactory.createDefaultMarkerSymbol();
134
                        ((IMarkerSymbol)sym).setColor(geometryColor);
135
                        ((SimpleMarkerSymbol)sym).setStyle(SimpleMarkerSymbol.CIRCLE_STYLE);
136

    
137
                        FGraphic fGraphic = new FGraphic(geometry,graphicLayer.addSymbol(sym));
138
                        tablePanel.getMapControl().getMapContext().getGraphicsLayer().addGraphic(fGraphic);
139
                        tablePanel.getRoiGraphics(roiName).add(fGraphic);
140
                        tablePanel.getMapControl().drawGraphics();
141
                } catch (NotInitializeException e) {
142
                        RasterToolsUtil.messageBoxError("error_tabla_rois", tablePanel, e);
143
                } catch (GridException e) {
144
                        e.printStackTrace();
145
                }
146
        }
147

    
148
        public void pointDoubleClick(PointEvent event) throws BehaviorException {
149
        }
150

    
151
}