root / branches / v2_0_0_prep / extensions / extGeoreferencing / src / org / gvsig / georeferencing / view / ViewDialog.java @ 27098
History | View | Annotate | Download (9.98 KB)
1 | 18530 | nbrodin | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
|
||
4 | *
|
||
5 | * This program is free software; you can redistribute it and/or
|
||
6 | * modify it under the terms of the GNU General Public License
|
||
7 | * as published by the Free Software Foundation; either version 2
|
||
8 | * of the License, or (at your option) any later version.
|
||
9 | *
|
||
10 | * This program is distributed in the hope that it will be useful,
|
||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
13 | * GNU General Public License for more details.
|
||
14 | *
|
||
15 | * You should have received a copy of the GNU General Public License
|
||
16 | * along with this program; if not, write to the Free Software
|
||
17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
18 | */
|
||
19 | package org.gvsig.georeferencing.view; |
||
20 | |||
21 | import java.awt.BorderLayout; |
||
22 | import java.awt.geom.Point2D; |
||
23 | import java.awt.image.BufferedImage; |
||
24 | |||
25 | 26730 | vcaballero | import org.gvsig.fmap.geom.primitive.Envelope; |
26 | 27098 | jmvivo | import org.gvsig.fmap.geom.util.UtilFunctions; |
27 | 18530 | nbrodin | import org.gvsig.georeferencing.ui.zoom.IExtensionRequest; |
28 | import org.gvsig.georeferencing.ui.zoom.IGraphicLayer; |
||
29 | import org.gvsig.georeferencing.ui.zoom.ViewControl; |
||
30 | import org.gvsig.georeferencing.ui.zoom.ViewListener; |
||
31 | import org.gvsig.georeferencing.ui.zoom.layers.ZoomCursorGraphicLayer; |
||
32 | import org.gvsig.georeferencing.ui.zoom.tools.ToolListener; |
||
33 | 18590 | nbrodin | import org.gvsig.raster.util.RasterToolsUtil; |
34 | 18530 | nbrodin | |
35 | import com.iver.andami.PluginServices; |
||
36 | import com.iver.andami.ui.mdiManager.IWindow; |
||
37 | import com.iver.andami.ui.mdiManager.WindowInfo; |
||
38 | |||
39 | /**
|
||
40 | * Panel que contiene el panel con la vista a georreferenciar
|
||
41 | 26730 | vcaballero | *
|
42 | 18530 | nbrodin | * 22/12/2007
|
43 | * @author Nacho Brodin (nachobrodin@gmail.com)
|
||
44 | */
|
||
45 | public class ViewDialog extends BaseZoomView implements IWindow { |
||
46 | private static final long serialVersionUID = 1L; |
||
47 | private ZoomCursorGraphicLayer zoomCursorGraphic = null; |
||
48 | private ToolListener zoomCursorGraphicListener = null; |
||
49 | private int w = 640; |
||
50 | private int h = 100; |
||
51 | private int posX = 0; |
||
52 | private int posY = 0; |
||
53 | 26730 | vcaballero | |
54 | 18530 | nbrodin | /**
|
55 | * Constructor.
|
||
56 | * Crea la composici?n de controles de zoom.
|
||
57 | * @param posX Posici?n en X
|
||
58 | * @param posY Posici?n en Y
|
||
59 | * @param w Tama?o en pixeles de ancho
|
||
60 | * @param h Tama?o en pixeles de alto
|
||
61 | */
|
||
62 | public ViewDialog(int posX, int posY, int w, int h, ToolListener zoomCursorGraphicListener) { |
||
63 | setPosition(posX, posY); |
||
64 | setWindowsSize(w, h); |
||
65 | this.zoomCursorGraphicListener = zoomCursorGraphicListener;
|
||
66 | init(); |
||
67 | } |
||
68 | 26730 | vcaballero | |
69 | 18530 | nbrodin | /**
|
70 | * Asigna el listener de eventos de la vista
|
||
71 | * @param listener
|
||
72 | */
|
||
73 | public void setViewListener(ViewListener listener) { |
||
74 | getControl().setViewListener(listener); |
||
75 | } |
||
76 | 26730 | vcaballero | |
77 | 18530 | nbrodin | /**
|
78 | * Asigna la posici?n de la ventana
|
||
79 | * @param posX Posici?n en X
|
||
80 | * @param posY Posici?n en Y
|
||
81 | */
|
||
82 | public void setPosition(int posX, int posY) { |
||
83 | this.posX = posX;
|
||
84 | this.posY = posY;
|
||
85 | } |
||
86 | 26730 | vcaballero | |
87 | 18530 | nbrodin | /**
|
88 | * Asigna el tama?o de la ventana
|
||
89 | * @param w Tama?o en pixeles de ancho
|
||
90 | * @param h Tama?o en pixeles de alto
|
||
91 | */
|
||
92 | public void setWindowsSize(int w, int h) { |
||
93 | this.w = w;
|
||
94 | this.h = h;
|
||
95 | } |
||
96 | 26730 | vcaballero | |
97 | 18530 | nbrodin | /**
|
98 | 26730 | vcaballero | * Asigna el valor para el flag minxMaxyUL. Este flag informa de que la esquina
|
99 | * superior izquierda corresponde con el valor de m?nimo X y m?ximo Y. En caso
|
||
100 | 18530 | nbrodin | * de ser false esta esquina ser?a de m?nimo X y m?nimo Y.
|
101 | * @param v
|
||
102 | */
|
||
103 | public void setMinxMaxyUL(boolean v) { |
||
104 | getCanvas().setMinxMaxyUL(v); |
||
105 | } |
||
106 | 26730 | vcaballero | |
107 | 18530 | nbrodin | /**
|
108 | * Asigna un nuevo centro de visualizaci?n. Vuelve a realizar la petici?n
|
||
109 | * @param center
|
||
110 | */
|
||
111 | public void setCenter(Point2D center) { |
||
112 | //TODO: Calcular las coordenadas del cursor gr?fico
|
||
113 | getControl().setCenter(center); |
||
114 | } |
||
115 | 26730 | vcaballero | |
116 | 18530 | nbrodin | /**
|
117 | * Inicializaci?n de los componentes gr?ficos
|
||
118 | */
|
||
119 | private void init() { |
||
120 | setLayout(new BorderLayout()); |
||
121 | add(getControl(), BorderLayout.CENTER);
|
||
122 | getZoomCursorGraphicLayer(); |
||
123 | } |
||
124 | 26730 | vcaballero | |
125 | 18530 | nbrodin | /**
|
126 | * Asigna los par?metros de dibujado para el raster
|
||
127 | * @param img Buffer con un ?rea de datos
|
||
128 | 26730 | vcaballero | * @param ext Rectangle2D del ?rea de datos dada
|
129 | 18530 | nbrodin | * @param pixelSize Tama?o de pixel
|
130 | * @param center Punto del ?rea de datos donde se quiere centrar el dibujado del buffer
|
||
131 | */
|
||
132 | 26730 | vcaballero | public void setDrawParams(BufferedImage img, Envelope ext, double pixelSize, Point2D center) { |
133 | 18530 | nbrodin | getControl().setDrawParams(img, ext, pixelSize, center) ; |
134 | } |
||
135 | 26730 | vcaballero | |
136 | 18530 | nbrodin | /**
|
137 | * Obtiene el panel de control de zoom de coordenadas pixel
|
||
138 | * @return
|
||
139 | */
|
||
140 | public ViewControl getControl() {
|
||
141 | 27098 | jmvivo | if(zoomPixelControl == null) { |
142 | 18530 | nbrodin | zoomPixelControl = new ViewControl(ViewControl.RIGHT_CONTROL);
|
143 | 27098 | jmvivo | } |
144 | 18530 | nbrodin | return zoomPixelControl;
|
145 | } |
||
146 | 26730 | vcaballero | |
147 | 18530 | nbrodin | /**
|
148 | * Registra un objeto IExtensionRequest para que no se aplique un escalado sobre
|
||
149 | * el buffer pasado por par?metro. Alternativamente a la aplicaci?n de este escalado
|
||
150 | 26730 | vcaballero | * se ejecutar? el m?todo request del interfaz para que el cliente pueda pasar un
|
151 | 18530 | nbrodin | * nuevo buffer con escala 1:1 y con la extensi?n correspondiente al zoom.
|
152 | * @param er
|
||
153 | */
|
||
154 | public void setExtensionRequest(IExtensionRequest er) { |
||
155 | zoomPixelControl.setExtensionRequest(er); |
||
156 | } |
||
157 | 26730 | vcaballero | |
158 | 18530 | nbrodin | /*
|
159 | * (non-Javadoc)
|
||
160 | * @see org.gvsig.rastertools.georeferencing.view.BaseZoomView#addGraphicLayer(org.gvsig.rastertools.georeferencing.ui.zoom.IGraphicLayer)
|
||
161 | */
|
||
162 | public void addGraphicLayer(IGraphicLayer graphicLayer) { |
||
163 | getControl().setGraphicLayer(graphicLayer); |
||
164 | } |
||
165 | 26730 | vcaballero | |
166 | 18530 | nbrodin | /**
|
167 | * Obtiene el la capa gr?fica con la ventana de zoom
|
||
168 | * @return
|
||
169 | */
|
||
170 | public ZoomCursorGraphicLayer getZoomCursorGraphicLayer() {
|
||
171 | if(zoomCursorGraphic == null) { |
||
172 | zoomCursorGraphic = new ZoomCursorGraphicLayer(w / 2, h / 2, 12, 6, zoomCursorGraphicListener); |
||
173 | zoomCursorGraphic.setCanvas(getControl().getCanvas()); |
||
174 | getControl().setGraphicLayer(zoomCursorGraphic); |
||
175 | } |
||
176 | return zoomCursorGraphic;
|
||
177 | } |
||
178 | 26730 | vcaballero | |
179 | 18530 | nbrodin | /**
|
180 | * Asigna la posici?n del cursor en el canvas
|
||
181 | * @param x Posici?n en X
|
||
182 | * @param y Posici?n en Y
|
||
183 | */
|
||
184 | public void setCursorPosition(int x, int y) { |
||
185 | getZoomCursorGraphicLayer().setCursorPosition(x, y); |
||
186 | } |
||
187 | 26730 | vcaballero | |
188 | 18530 | nbrodin | /**
|
189 | * Asigna el tama?o del cursor en pixeles del canvas
|
||
190 | * @param w Ancho
|
||
191 | * @param h Alto
|
||
192 | */
|
||
193 | public void setCursorSize(int w, int h) { |
||
194 | getZoomCursorGraphicLayer().setCursorSize(w, h); |
||
195 | } |
||
196 | 26730 | vcaballero | |
197 | 18530 | nbrodin | /**
|
198 | * Activa o desactiva el mostrado de informaci?n
|
||
199 | * @param showInfo
|
||
200 | */
|
||
201 | public void setShowInfo(boolean show) { |
||
202 | zoomPixelControl.getCanvas().setShowInfo(show); |
||
203 | } |
||
204 | 26730 | vcaballero | |
205 | 18530 | nbrodin | /**
|
206 | * Obtiene las coordenadas de la ventana de zoom. Las coordenadas son devueltas
|
||
207 | 26730 | vcaballero | * en referencia a las coordenadas del mundo.
|
208 | 18530 | nbrodin | * @return
|
209 | */
|
||
210 | 26730 | vcaballero | public Envelope getCursorWorldCoordinates() {
|
211 | Envelope r = getZoomCursorGraphicLayer().getCursorViewCoordinates(); |
||
212 | Point2D p1 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getMinimum(0), r.getMinimum(1))); |
||
213 | Point2D p2 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getMinimum(0) + r.getLength(0), r.getMinimum(1) + r.getLength(1))); |
||
214 | 27098 | jmvivo | return UtilFunctions.createEnvelope(Math.min(p1.getX(), p2.getX()), |
215 | 26730 | vcaballero | Math.max(p1.getY(), p2.getY()),
|
216 | Math.min(p1.getX(), p2.getX()) + Math.abs(p2.getX() - p1.getX()), |
||
217 | Math.max(p1.getY(), p2.getY()) + Math.abs(p2.getY() - p1.getY())); |
||
218 | 18530 | nbrodin | } |
219 | 26730 | vcaballero | |
220 | 18530 | nbrodin | /**
|
221 | * Obtiene las coordenadas de la ventana de zoom. Las coordenadas son devueltas
|
||
222 | 26730 | vcaballero | * en referencia a las coordenadas del mundo. Esta llamada ajusta el tama?o de la ventana a la
|
223 | * proporci?n pasada por par?metro. Es decir, si pasamos una proporci?n en la que el ancho es 3 veces
|
||
224 | 18530 | nbrodin | * mayor que el alto se ajustar? el zoom a esta proporci?n ya que presupone que la ventana de
|
225 | * destino del zoom va a tener esas proporciones.
|
||
226 | * @return
|
||
227 | */
|
||
228 | 26730 | vcaballero | public Envelope getCursorAdjustedWorldCoordinates(int wWindow, int hWindow) { |
229 | Envelope r = getZoomCursorGraphicLayer().getCursorViewCoordinates(); |
||
230 | double x = r.getMinimum(0), y = r.getMinimum(1), w = r.getLength(0), h = r.getLength(1); |
||
231 | |||
232 | 18590 | nbrodin | try {
|
233 | if(wWindow < hWindow) { //Si la de destino es m?s alta que ancha |
||
234 | 26730 | vcaballero | if((r.getLength(0) / r.getLength(1)) >= (wWindow / hWindow)) { |
235 | h = (hWindow * r.getLength(0)) / wWindow;
|
||
236 | y = r.getCenter(1) - (h / 2); |
||
237 | 18590 | nbrodin | } else {
|
238 | 26730 | vcaballero | w = (wWindow * r.getLength(1)) / hWindow;
|
239 | x = r.getCenter(0) - (w / 2); |
||
240 | 18590 | nbrodin | } |
241 | } else { //Si la de destino es m?s ancha que alta |
||
242 | 26730 | vcaballero | if((r.getLength(0) / r.getLength(1)) <= (wWindow / hWindow)) { |
243 | w = (wWindow * r.getLength(1)) / hWindow;
|
||
244 | x = r.getCenter(0) - (w / 2); |
||
245 | 18590 | nbrodin | } else {
|
246 | 26730 | vcaballero | h = (hWindow * r.getLength(0)) / wWindow;
|
247 | y = r.getCenter(1) - (h / 2); |
||
248 | 18590 | nbrodin | } |
249 | 18530 | nbrodin | } |
250 | 18590 | nbrodin | }catch(ArithmeticException ex) { |
251 | RasterToolsUtil.debug("Redimensi?n de las ventanas. La altura de estas es menor que cero", this, ex); |
||
252 | return r;
|
||
253 | 18530 | nbrodin | } |
254 | 27098 | jmvivo | if(zoomPixelControl.getCanvas().getMinxMaxyUL()) {
|
255 | r = UtilFunctions.createEnvelope(x, y + h, x + w, y + h + h); |
||
256 | } else {
|
||
257 | r = UtilFunctions.createEnvelope(x, y - h, x + w, y); |
||
258 | } |
||
259 | 26730 | vcaballero | Point2D p1 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getMinimum(0), r.getMinimum(1))); |
260 | Point2D p2 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getMinimum(0) + r.getLength(0), r.getMinimum(1) + r.getLength(1))); |
||
261 | 27098 | jmvivo | return UtilFunctions.createEnvelope(Math.min(p1.getX(), p2.getX()), |
262 | 26730 | vcaballero | Math.max(p1.getY(), p2.getY()),
|
263 | Math.min(p1.getX(), p2.getX()) + Math.abs(p2.getX() - p1.getX()), |
||
264 | Math.max(p1.getY(), p2.getY()) + Math.abs(p2.getY() - p1.getY())); |
||
265 | 18530 | nbrodin | } |
266 | 26730 | vcaballero | |
267 | 18530 | nbrodin | /**
|
268 | * Obtiene el extent del canvas en coordenadas del mundo real
|
||
269 | 26730 | vcaballero | * @return Envelope
|
270 | 18530 | nbrodin | */
|
271 | 26730 | vcaballero | public Envelope getViewEnvelope() {
|
272 | return zoomPixelControl.getCanvas().getEnvelope();
|
||
273 | 18530 | nbrodin | } |
274 | 26730 | vcaballero | |
275 | 18530 | nbrodin | /*
|
276 | * (non-Javadoc)
|
||
277 | * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
|
||
278 | */
|
||
279 | public WindowInfo getWindowInfo() {
|
||
280 | WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
|
||
281 | //if (getClippingPanel().getFLayer() != null)
|
||
282 | //m_viewinfo.setAdditionalInfo(getClippingPanel().getFLayer().getName());
|
||
283 | m_viewinfo.setTitle(PluginServices.getText(this, "view_panel")); |
||
284 | m_viewinfo.setX(posX); |
||
285 | m_viewinfo.setY(posY); |
||
286 | m_viewinfo.setHeight(h); |
||
287 | m_viewinfo.setWidth(w); |
||
288 | return m_viewinfo;
|
||
289 | } |
||
290 | 26730 | vcaballero | |
291 | 24989 | jcampos | public Object getWindowProfile(){ |
292 | return WindowInfo.TOOL_PROFILE;
|
||
293 | } |
||
294 | 18530 | nbrodin | } |