Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.plugin / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / ZoomToRasterLayerResolutionExtension.java @ 43876

History | View | Annotate | Download (8.21 KB)

1
package org.gvsig.raster.tools.app.mainplugin;
2

    
3
import java.awt.Dimension;
4
import java.awt.Image;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.util.Collections;
8
import java.util.Iterator;
9

    
10
import javax.swing.JOptionPane;
11

    
12
import org.apache.commons.lang3.StringUtils;
13
import org.slf4j.Logger;
14
import org.slf4j.LoggerFactory;
15

    
16
import org.gvsig.andami.IconThemeHelper;
17
import org.gvsig.andami.plugins.Extension;
18
import org.gvsig.app.ApplicationLocator;
19
import org.gvsig.app.ApplicationManager;
20
import org.gvsig.app.project.documents.view.ViewDocument;
21
import org.gvsig.app.project.documents.view.gui.IView;
22
import org.gvsig.fmap.dal.exception.InitializeException;
23
import org.gvsig.fmap.dal.exception.ReadException;
24
import org.gvsig.fmap.dal.raster.RasterStore;
25
import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
26
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
27
import org.gvsig.fmap.geom.GeometryLocator;
28
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
29
import org.gvsig.fmap.geom.operation.GeometryOperationException;
30
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
31
import org.gvsig.fmap.geom.primitive.Envelope;
32
import org.gvsig.fmap.geom.primitive.Point;
33
import org.gvsig.fmap.mapcontext.ViewPort;
34
import org.gvsig.fmap.mapcontext.layers.FLayer;
35
import org.gvsig.fmap.mapcontext.layers.FLayers;
36
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
37
import org.gvsig.fmap.mapcontrol.MapControl;
38
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
39
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
40
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
41
import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
42
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
43
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
44
import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
45
import org.gvsig.raster.tools.lib.api.RasterClip;
46
import org.gvsig.raster.tools.lib.api.RasterToolsLocator;
47
import org.gvsig.raster.tools.lib.api.exceptions.ClipException;
48
import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
49
import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
50
import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
51
import org.gvsig.raster.tools.swing.api.clip.ClipPanel;
52
import org.gvsig.raster.tools.swing.impl.clip.ClipPanelController;
53
import org.gvsig.tools.ToolsLocator;
54
import org.gvsig.tools.i18n.I18nManager;
55
import org.gvsig.tools.swing.api.ToolsSwingLocator;
56
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
57
import org.gvsig.tools.swing.api.windowmanager.Dialog;
58
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
59
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
60

    
61
/**
62
 *
63
 * @author fdiaz
64
 *
65
 */
66
public class ZoomToRasterLayerResolutionExtension extends Extension {
67

    
68
    private static final Logger logger = LoggerFactory.getLogger(ZoomToRasterLayerResolutionExtension.class);
69
    private static final String ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME = "zoom-to-raster-layer-resolution-tool";
70

    
71
    @Override
72
    public void initialize() {
73
        IconThemeHelper.registerIcon("action", "zoom-to-raster-layer-resolution", this);
74
        IconThemeHelper.registerIcon("cursor", "zoom-to-raster-layer-resolution-cursor", this);
75
    }
76

    
77
    @Override
78
    public void execute(String actionCommand) {
79
        if (StringUtils.equalsIgnoreCase(actionCommand, "zoom-to-raster-layer-resolution")) {
80
            IView view = getActiveView();
81
            final MapControl mapControl = view.getMapControl();
82

    
83
            PointBehavior behavior = new PointBehavior(new PointListener() {
84

    
85
                @Override
86
                public Image getImageCursor() {
87
                    return IconThemeHelper.getImage("zoom-to-raster-layer-resolution-cursor");
88
                }
89

    
90
                @Override
91
                public boolean cancelDrawing() {
92
                    return false;
93
                }
94

    
95
                @Override
96
                public void pointDoubleClick(PointEvent event) throws BehaviorException {
97
                    // Do nothing
98
                }
99

    
100
                @Override
101
                public void point(PointEvent event) throws BehaviorException {
102
                    // TODO Seleccionar la capa raster superior que est? visible
103
                    Point point = event.getMapPoint();
104
                    FLayers layers = mapControl.getMapContext().getLayers();
105
                    for (int i = layers.size() - 1; i >= 0; i--) {
106
                        FLayer layer = layers.get(i);
107
                        if (layer.isVisible() && layer.isActive() && layer instanceof RasterLayer) {
108
                            try {
109
                                RasterLayer rasterLayer = (RasterLayer) layer;
110
                                RasterStore rasterStore = rasterLayer.getRasterStore();
111
                                double pixelSizeX = rasterLayer.getFullEnvelope().getLength(DIMENSIONS.X)/rasterStore.getDimensions().getColumns();
112
                                double pixelSizeY = rasterLayer.getFullEnvelope().getLength(DIMENSIONS.Y)/rasterStore.getDimensions().getRows();
113
                                ViewPort viewPort = mapControl.getViewPort();
114

    
115

    
116
                                double wcOriginX = point.getX() - ((viewPort.getImageWidth()*pixelSizeX)/2);
117
                                double wcOriginY = point.getY() - ((viewPort.getImageHeight()*pixelSizeY)/2);
118

    
119
                                double wcDstMinX = wcOriginX;
120
                                double wcDstMinY = wcOriginY;
121
                                double wcDstMaxX = wcDstMinX + (viewPort.getImageWidth()*pixelSizeX);
122
                                double wcDstMaxY = wcDstMinY + (viewPort.getImageHeight()*pixelSizeY);
123

    
124
                                double wcDstWidth = wcDstMaxX - wcDstMinX;
125
                                double wcDstHeight = wcDstMaxY - wcDstMinY;
126

    
127
                                Envelope ext = null;
128

    
129
                                try {
130
                                    ext = GeometryLocator.getGeometryManager().createEnvelope(wcDstMinX, wcDstMinY, wcDstMinX
131
                                            + wcDstWidth, wcDstMinY + wcDstHeight, SUBTYPES.GEOM2D);
132
                                } catch (CreateEnvelopeException e) {
133
                                    logger.error("Error creating the Envelope", e);
134
                                }
135
                                viewPort.setEnvelope(ext);
136

    
137
//
138
//                                viewPort.setDist1pixel(pixelSize);
139
//
140
                                return;
141
                            } catch (ReadException | InitializeException e) {
142
                                logger.warn("Can't get the pixel size of the layer '" + layer.getName() + "'.", e);
143
                            }
144
                        }
145
                    }
146
                }
147
            });
148

    
149
            if (!mapControl.hasTool(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME)) {
150
                mapControl.addBehavior(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME, behavior);
151
            }
152
            mapControl.setTool(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME);
153
        }
154
    }
155

    
156
    @Override
157
    public boolean isEnabled() {
158
        IView view = getActiveView();
159
        if (view != null) {
160
            ViewDocument viewDocument = view.getViewDocument();
161
            FLayers layers = viewDocument.getMapContext().getLayers();
162
            for (FLayer layer : layers) {
163
                if (layer instanceof RasterLayer && layer.isActive()) {
164
                    return true;
165
                }
166
            }
167
        }
168
        return false;
169
    }
170

    
171
    @Override
172
    public boolean isVisible() {
173
        IView view = getActiveView();
174
        if (view != null) {
175
            ViewDocument viewDocument = view.getViewDocument();
176
            FLayers layers = viewDocument.getMapContext().getLayers();
177
            for (FLayer layer : layers) {
178
                if (layer instanceof RasterLayer) {
179
                    return true;
180
                }
181
            }
182
        }
183
        return false;
184
    }
185

    
186
    private IView getActiveView() {
187
        ApplicationManager application = ApplicationLocator.getManager();
188
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
189
        return view;
190
    }
191

    
192
}