Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extgvSIGPiloto-Raster / src / com / iver / cit / gvsig / project / documents / view / toolListeners / CutRasterListener.java @ 9935

History | View | Annotate | Download (3.67 KB)

1
package com.iver.cit.gvsig.project.documents.view.toolListeners;
2

    
3
import java.awt.Cursor;
4
import java.awt.geom.Rectangle2D;
5
import java.util.ArrayList;
6

    
7
import com.iver.cit.gvsig.fmap.DriverException;
8
import com.iver.cit.gvsig.fmap.MapControl;
9
import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
10
import com.iver.cit.gvsig.fmap.tools.SaveRasterListenerImpl;
11
import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
12
import com.iver.cit.gvsig.project.documents.raster.gui.dialogs.CutRasterDialog;
13

    
14
/**
15
 * Listener del recorte de raster. Al seleccionar un ?rea sobre la vista debe cargar
16
 * el cuadro con los datos de coordenadas pixel, coordenadas reales, ancho y alto
17
 * del raster resultante, tama?o de celda.
18
 */
19
public class CutRasterListener extends SaveRasterListenerImpl {
20
        private FLyrRaster                         layer = null;
21
        private CutRasterDialog         cutRasterDialog;
22
        private MapControl                        mapCtrl = null;
23
        private String                                currentTool = null;
24
        
25
        /**
26
         * Constructor.
27
         * @param mapCtrl
28
         * @param cutRasterDialog
29
         */
30
        public CutRasterListener(MapControl mapCtrl, CutRasterDialog cutRasterDialog) {
31
                super(mapCtrl);
32
                this.cutRasterDialog = cutRasterDialog;
33
                this.layer = cutRasterDialog.getFLayer();
34
                this.mapCtrl = mapCtrl;
35
                currentTool = mapCtrl.getCurrentTool();
36
        }
37

    
38
        /**
39
         * Asigna la capa raster.
40
         * @param flyr Capa raster
41
         */
42
        public void  setRasterLayer(FLyrRaster flyr){
43
                layer = flyr;
44
        }
45
        
46
        /**
47
         * Realiza las acciones de selecci?n del ?rea de recorte por medio de un rectangulo
48
         * sobre la vista.
49
         */
50
        public void rectangle(RectangleEvent event) {
51
                super.rectangle(event);
52
                
53
                //Obtenemos el extent completo de la capa
54
                Rectangle2D extent = null;
55
                try {
56
                        extent = ((FLyrRaster)layer).getFullExtent();        
57
                } catch (DriverException e1) {
58
                        return;
59
                }
60
                
61
                if(extent == null)
62
                        return;
63
                
64
                //Si nos salimos de los margenes de la capa lo ajustamos a esta
65
                double minx = rect.getMinX(), miny = rect.getMinY(), maxx = rect.getMaxX(), maxy = rect.getMaxY();
66
                if(extent.getMinX() > rect.getMinX())
67
                        minx = extent.getMinX();
68
                if(extent.getMinY() > rect.getMinY())
69
                        miny = extent.getMinY();
70
                if(extent.getMaxX() < rect.getMaxX())
71
                        maxx = extent.getMaxX();
72
                if(extent.getMaxY() < rect.getMaxY())
73
                        maxy = extent.getMaxY();
74
                rect = new Rectangle2D.Double(minx, miny, Math.abs(maxx - minx), Math.abs(maxy - miny));
75
                
76
                //Asignamos las coordenadas reales
77
                cutRasterDialog.getPCut().setCoorRealFromDouble(rect.getMinX(), rect.getMaxY(), rect.getMaxX(), rect.getMinY(), 6);
78
                try {
79
                        int widthPx = 0;
80
                        int heightPx = 0;
81
                        ArrayList attr = ((FLyrRaster)layer).getSource().getAttributes();
82
                           for (int i=0; i<attr.size(); i++) {
83
                                Object[] a = (Object []) attr.get(i);
84
                                if(a[0].toString().equals("Width"))
85
                                        widthPx = ((Integer)a[1]).intValue();
86
                                if(a[0].toString().equals("Height"))
87
                                        heightPx = ((Integer)a[1]).intValue();
88
                        }
89
        
90
                           Rectangle2D window = new Rectangle2D.Double(rect.getMinX(), rect.getMinY(), rect.getWidth(), rect.getHeight());
91
                           Rectangle2D r = org.cresques.util.Utilities.getPxRectFromMapRect(layer.getFullExtent(), widthPx, heightPx, window);
92
                           cutRasterDialog.getPCut().setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
93
                           cutRasterDialog.getPCut().setWidthText(r.getWidth(), 0);
94
                           cutRasterDialog.getPCut().setHeightText(r.getHeight(), 0);
95
                           cutRasterDialog.getPCut().setCellSizeText((rect.getWidth() / r.getWidth()), 4);
96
                           cutRasterDialog.getPCut().setRelWidthHeight((double)(r.getWidth() / r.getHeight()));
97
                           cutRasterDialog.setInitValuesToSize(r.getWidth(), r.getHeight());
98
                           if(currentTool != null)
99
                                   mapCtrl.setTool(currentTool);
100
                } catch (DriverException e) {
101
                
102
                } catch (NumberFormatException e) {
103
                
104
                }
105
        }
106

    
107
}