Revision 18264

View differences:

trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/Georeferencing.java
162 162
		
163 163
		//Inicializamos la extensi?n del componente y dibujamos
164 164
		try {
165
			viewRequestManager.initRequest(lyrToGeoref.getFullExtent());
165
			viewRequestManager.initRequest(lyrToGeoref.getFullExtent());/*new Rectangle2D.Double(	lyrToGeoref.getFullRasterExtent().getULX(), 
166
																	lyrToGeoref.getFullRasterExtent().getULY(), 
167
																	lyrToGeoref.getFullRasterExtent().width(), 
168
																	lyrToGeoref.getFullRasterExtent().height()));*/
166 169
			view.setZoomCursorSize(zoomPixel.getCanvasWidth() / 3, zoomPixel.getCanvasHeight() / 3);
167 170
			
168
			Rectangle2D ext = view.getCursorWorldCoordinates();
171
			Rectangle2D ext = view.getCursorAdjustedWorldCoordinates(zoomPixel.getCanvasWidth(), zoomPixel.getCanvasHeight());
172
			viewRequestManagerZoomPixel.initRequest(lyrToGeoref.getFullExtent());
173
			//viewRequestManagerZoomPixel.setDrawParams(null, new Rectangle2D.Double(ext.getX(), ext.getY() - ext.getHeight(), ext.getWidth(), ext.getHeight()));
169 174
			viewRequestManagerZoomPixel.request(ext);
170 175
		} catch (InvalidRequestException e1) {
171 176
			RasterToolsUtil.messageBoxError("error_setview_preview", this);
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/view/ViewDialog.java
198 198
		Rectangle2D r = getZoomCursorGraphicLayer().getCursorViewCoordinates();
199 199

  
200 200
		double x = r.getX(), y = r.getY(), w = r.getWidth(), h = r.getHeight();
201
		if(r.getWidth() >= r.getHeight()) { //La X y la W no varian
202
			h = (hWindow * r.getWidth()) / wWindow;
203
			y = r.getCenterY() - (h / 2);
204
		} else { //La Y y la H no varian
205
			w = (wWindow * r.getHeight()) / hWindow;
206
			x = r.getCenterX() - (r.getWidth() / 2);
201
		if(wWindow < hWindow) { //Si la de destino es m?s alta que ancha
202
			if((r.getWidth() / r.getHeight()) >= (wWindow / hWindow)) {
203
				h = (hWindow * r.getWidth()) / wWindow;
204
				y = r.getCenterY() - (h / 2);
205
			} else {
206
				w = (wWindow * r.getHeight()) / hWindow;
207
				x = r.getCenterX() - (w / 2);
208
			}
209
		} else { //Si la de destino es m?s ancha que alta
210
			if((r.getWidth() / r.getHeight()) <= (wWindow / hWindow)) {
211
				w = (wWindow * r.getHeight()) / hWindow;
212
				x = r.getCenterX() - (w / 2);
213
			} else {
214
				h = (hWindow * r.getWidth()) / wWindow;
215
				y = r.getCenterY() - (h / 2);
216
			}
207 217
		}
208
		r = new Rectangle2D.Double(x, y, w, h);
218
		r = new Rectangle2D.Double(x, y + h, w, h);
209 219
		Point2D p1 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getX(), r.getY()));
210 220
		Point2D p2 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getX() + r.getWidth(), r.getY() + r.getHeight()));
211 221
		return new Rectangle2D.Double(	Math.min(p1.getX(), p2.getX()), 
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/ViewRasterRequestManager.java
75 75
			y = extent.getCenterY() - (h / 2);
76 76
		}
77 77
		Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
78
		view.getCanvas().setCanvasExtent(new Rectangle2D.Double(x, y + h, w, h));
78
		view.getCanvas().setCanvasExtent(new Rectangle2D.Double(x, y + h , w, h));
79 79
		request(r);
80 80
		return r;
81 81
	}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/layers/ZoomCursorGraphicLayer.java
51 51
	private static final int    MOVE_UL = 5;
52 52
	private static final int    MOVE_LR = 6;
53 53
	private static final int    MOVE_LL = 7;
54
	
55
	private final int           MIN_CURSOR_SIZE = 10;
54 56
	private int                 operation = NONE; 
55 57
	
56 58
	private Color               color = Color.RED;
......
130 132
	 */
131 133
	public void draw(Graphics2D g, Rectangle2D ext, int w, int h) {
132 134
		g.setColor(Color.RED);
135
		wCursor = Math.max(wCursor, MIN_CURSOR_SIZE); 
136
		hCursor = Math.max(hCursor, MIN_CURSOR_SIZE);
133 137
		g.drawRect(posX - (wCursor >> 1), posY - (hCursor >> 1), wCursor, hCursor);
134 138
		g.drawLine(posX, posY - (hCursor >> 1), posX, 0);
135 139
		g.drawLine(posX, posY + (hCursor >> 1), posX, h);
......
289 293
			setOperation(REDIM_DOWN);
290 294
			return;
291 295
		}
296
		setOperation(NONE);
292 297
		canvas.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
293 298
	}
294 299
	
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/CanvasZone.java
52 52
	 * ?ltimo extent aplicado. Si no ha variado el siguiente a aplicar no hace falta que releamos de nuevo
53 53
	 */
54 54
	private Rectangle2D            lastExtent = null;
55
	//Ultimo Image con la capa dibujada y con la transformaci?n que tiene en cuenta los desplazamientos dentro de un pixel
56
	//Este buffer no varia hasta que se hace la siguiente petici?n de setDrawParams
55 57
	private BufferedImage          lastImage = null;
58
	//lastImage sobre el que se pintan las capas gr?ficas. Este buffer varia en cada repaint. El orden en el que se carga
59
	//es: se vuelva el lastImage, se pintan las capas gr?ficas, se pintan las tools.
60
	private BufferedImage          lastImageWithLayers = null;
56 61
    
57 62
    private boolean                clear = false;
58 63
    private Color                  background = Color.WHITE;
......
245 250
	protected void paintComponent(Graphics g) {
246 251
		if(image == null)
247 252
			return;
248
			
253
				
249 254
		int w = getVisibleRect().width;
250 255
		int h = getVisibleRect().height;
251 256
		Rectangle2D ext = getCanvasExtent(w, h, scale);
252 257
		
253
		if(lastImage == null || !equal(lastExtent, ext)) 
258
		if(lastImage == null || !equal(lastExtent, ext)) { 
254 259
			lastImage = new BufferedImage((int)w, (int)h, BufferedImage.TYPE_INT_RGB);
255
		
260
			lastImageWithLayers = new BufferedImage((int)w, (int)h, BufferedImage.TYPE_INT_RGB);
261
		}
262
				
256 263
		if(clear) {
257 264
			g.setColor(Color.WHITE);
258 265
			g.fillRect(0, 0, w, h);
259 266
			return;
260 267
		}
261

  
268
		
262 269
		//Dibujamos el buffer sobre el grafics
263
		draw((Graphics2D)g, ext, w, h);	
264
		
270
		Graphics graphicsDB = draw(ext, w, h);	
271
				
265 272
		//Dibujamos todas las capas registradas
266 273
		for (int i = 0; i < graphicLayers.size(); i++) 
267
			((IGraphicLayer)graphicLayers.get(i)).draw((Graphics2D)g, ext, w, h);
274
			((IGraphicLayer)graphicLayers.get(i)).draw((Graphics2D)graphicsDB, ext, w, h);
268 275
		
269 276
		lastExtent = ext;
270 277
		
271 278
		if(selectedTool != null)
272
			selectedTool.draw(g);
279
			selectedTool.draw(graphicsDB);
273 280
			
274 281
		if(showInfo)
275
			showInfo(g);
276
		
277
		g.dispose();
282
			showInfo(graphicsDB);
283
				
284
		g.drawImage(lastImageWithLayers, 0, 0, this);
285
		graphicsDB.dispose();
278 286
	}
279 287
	
280 288
	/**
......
283 291
	 */
284 292
	private void showInfo(Graphics g) {
285 293
		g.setColor(Color.RED);
286
		g.drawString("X: " + MathUtils.tailDecimals(viewCoord.getX(), 3), 12, 10);
287
		g.drawString("Y: " + MathUtils.tailDecimals(viewCoord.getY(), 3), 12, 24);
288
		g.drawString("X': " + MathUtils.tailDecimals(realCoord.getX(), 3), 12, 38);
289
		g.drawString("Y': " + MathUtils.tailDecimals(realCoord.getY(), 3), 12, 52);
294
		g.drawString("X: " + MathUtils.tailDecimals(viewCoord.getX(), 3), 12, 12);
295
		g.drawString("Y: " + MathUtils.tailDecimals(viewCoord.getY(), 3), 12, 26);
296
		g.drawString("X': " + MathUtils.tailDecimals(realCoord.getX(), 3), 12, 40);
297
		g.drawString("Y': " + MathUtils.tailDecimals(realCoord.getY(), 3), 12, 54);
290 298
	}
291 299
	
292 300
	/**
......
333 341
	 * @param w
334 342
	 * @param h
335 343
	 */
336
	private void draw(Graphics2D g, Rectangle2D ext, double w, double h) {
344
	private Graphics draw(Rectangle2D ext, double w, double h) {
337 345
		if(!equal(lastExtent, ext)) {
338 346
			//Hallamos la coordenada pixel del buffer de la esquina superior izquierda del extent
339 347
			double pxX = ((ext.getMinX() - extent.getMinX()) * (w / scale)) / ext.getWidth();
......
348 356
			for (int i = 0; i < w; i++) {
349 357
				yValue = pxY;
350 358
				for (int j = 0; j < h; j++) {
351
					if((int)xValue >= 0 && (int)yValue >= 0 && (int)xValue < image.getWidth() && (int)yValue < image.getHeight())
359
					if((int)xValue >= 0 && (int)yValue >= 0 && (int)xValue < image.getWidth() && (int)yValue < image.getHeight()) {
352 360
						lastImage.setRGB(i, j, image.getRGB((int)xValue, (int)yValue));
353
					else
361
						lastImageWithLayers.setRGB(i, j, image.getRGB((int)xValue, (int)yValue));
362
					} else {
354 363
						lastImage.setRGB(i, j, 0xffffffff);
364
						lastImageWithLayers.setRGB(i, j, 0xffffffff);
365
					}
355 366
					yValue += step;
356 367
				}
357 368
				xValue += step;
358 369
			}
359
		}
360
		//Ahora ya podemos ordenar el dibujado con coordenadas enteras
361
		g.setColor(background);
362
		g.fillRect(0, 0, (int)w, (int)h);
363
		g.drawImage(lastImage, 0, 0, this);
370
		} else 
371
			((Graphics2D)lastImageWithLayers.getGraphics()).drawImage(lastImage, 0, 0, null);
372
		
373
		return lastImageWithLayers.getGraphics();
364 374
	}
365 375

  
366 376
	/*

Also available in: Unified diff