Revision 13021

View differences:

trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/cutting/ui/listener/CuttingPanelListener.java
90 90
	public void setAffineTransform(AffineTransform at) {
91 91
		this.at = at;
92 92
	}
93
	
93

  
94 94
	/**
95 95
	 * Asigna la dimensi?n del raster
96 96
	 * @param dim
......
204 204
		if (e.getSource() == getCuttingPanel().getButtonBarContainer().getButton(0)) {
205 205
			Point2D ulPx = new Point2D.Double(0, 0);
206 206
			Point2D lrPx = new Point2D.Double(dim.width, dim.height);
207
			
207

  
208 208
			double minX = Math.min(ulPx.getX(), lrPx.getX());
209 209
			double maxX = Math.max(ulPx.getX(), lrPx.getX());
210 210
			double minY = Math.min(ulPx.getY(), lrPx.getY());
......
215 215
			Point2D lrWc = new Point2D.Double();
216 216
			at.transform(new Point2D.Double(minX, minY), ulWc);
217 217
			at.transform(new Point2D.Double(maxX, maxY), lrWc);
218
			
218

  
219 219
			getCuttingPanel().setCoorRealFromDouble(ulWc.getX(), ulWc.getY(), lrWc.getX(), lrWc.getY(), 3);
220 220
			getCuttingPanel().setCoorPixelFromDouble(0, 0, dim.width - 1, dim.height - 1, 3);
221 221
			getCuttingPanel().setWidthText(dim.width, 0);
......
256 256
			Extent ex = getMapWindow();
257 257
			if (obj == getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField())
258 258
				getCuttingPanel().setCoorRealFromDouble(Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField().getText()).doubleValue(),
259
														ex.getULY(),//getCuttingPanel().getWcMinY(), 
260
														ex.getLRX(),//getCuttingPanel().getWcMaxX(), 
259
														ex.getULY(),//getCuttingPanel().getWcMinY(),
260
														ex.getLRX(),//getCuttingPanel().getWcMaxX(),
261 261
														ex.getLRY(), 6);//getCuttingPanel().getWcMaxY(), 6);
262 262
			if (obj == getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField())
263 263
				getCuttingPanel().setCoorRealFromDouble(ex.getULX(),//getCuttingPanel().getWcMinX(),
264
														Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField().getText()).doubleValue(), 
264
														Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField().getText()).doubleValue(),
265 265
														ex.getLRX(),//getCuttingPanel().getWcMaxX(),
266 266
														ex.getLRY(), 6);//getCuttingPanel().getWcMaxY(), 6);
267 267
			if (obj == getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField())
268
				getCuttingPanel().setCoorRealFromDouble(ex.getULX(),//getCuttingPanel().getWcMinX(), 
268
				getCuttingPanel().setCoorRealFromDouble(ex.getULX(),//getCuttingPanel().getWcMinX(),
269 269
														ex.getULY(),//getCuttingPanel().getWcMinY(),
270
														Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField().getText()).doubleValue(), 
270
														Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField().getText()).doubleValue(),
271 271
														ex.getLRY(), 6);//getCuttingPanel().getWcMaxY(), 6);
272 272
			if (obj == getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField())
273
				getCuttingPanel().setCoorRealFromDouble(ex.getULX(), //getCuttingPanel().getWcMinX(), 
274
														ex.getURY(), //getCuttingPanel().getWcMinY(), 
273
				getCuttingPanel().setCoorRealFromDouble(ex.getULX(), //getCuttingPanel().getWcMinX(),
274
														ex.getURY(), //getCuttingPanel().getWcMinY(),
275 275
														ex.getLRX(), //getCuttingPanel().getWcMaxX(),
276 276
														Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField().getText()).doubleValue(), 6);
277 277
		} catch (NumberFormatException ex1) {
......
344 344
						return;
345 345
					Point2D ulPx = new Point2D.Double(pxWindow.getMinX(), pxWindow.getMinY());
346 346
					Point2D lrPx = new Point2D.Double(pxWindow.getMaxX(), pxWindow.getMaxY());
347
									
347

  
348 348
					//Comprobamos si la selecci?n est? fuera del ?rea
349 349
					if(isOutside(ulPx, lrPx)) {
350 350
						cuttingPanel.setCoorPixelFromDouble(0, 0, 0, 0, 0);
......
355 355
						cuttingPanel.setCoorRealFromDouble(0, 0, 0, 0, 0);
356 356
						return;
357 357
					}
358
					
358

  
359 359
					//Comprobamos que las esquinas no esten cambiadas de sitio
360 360
					if(ulPx.getX() > lrPx.getX()) {
361 361
						double ulTmp = ulPx.getX();
......
367 367
						ulPx.setLocation(ulPx.getX(), lrPx.getY());
368 368
						lrPx.setLocation(lrPx.getX(), ulTmp);
369 369
					}
370
						
370

  
371 371
					Point2D[] pointList = new Point2D[]{ulPx, lrPx};
372 372
					Point2D dim = new Point2D.Double(this.dim.width, this.dim.height);
373
					
373

  
374 374
					//Ajustamos los puntos al ?rea en pixeles del raster
375 375
					RasterUtilities.adjustToPixelSize(pointList, dim);
376
					
376

  
377 377
					Point2D ulWc = new Point2D.Double();
378 378
					Point2D lrWc = new Point2D.Double();
379 379
					at.transform(ulPx, ulWc);
380 380
					at.transform(new Point2D.Double(lrPx.getX() + 1, lrPx.getY() + 1), lrWc);
381
					
381

  
382 382
					cuttingPanel.setCoorRealFromDouble(ulWc.getX(), ulWc.getY(), lrWc.getX(), lrWc.getY(), 3);
383 383
					cuttingPanel.setCoorPixelFromDouble(ulPx.getX(), ulPx.getY(), lrPx.getX(), lrPx.getY(), 3);
384 384
					cuttingPanel.setWidthText(dim.getX(), 0);
385 385
					cuttingPanel.setHeightText(dim.getY(), 0);
386 386
					cuttingPanel.setCellSizeText((Math.abs(lrWc.getX() - ulWc.getX()) / dim.getX()), 4);
387
					cuttingPanel.setRelWidthHeight((double) (dim.getX() / dim.getY()));										
387
					cuttingPanel.setRelWidthHeight((double) (dim.getX() / dim.getY()));
388 388
				} else {
389 389
					Extent mapWindow = getMapWindow();
390 390
					if (mapWindow == null)
391 391
						return;
392
										
392

  
393 393
					Point2D ulPx = new Point2D.Double(mapWindow.getULX(), mapWindow.getULY());
394 394
					Point2D lrPx = new Point2D.Double(mapWindow.getLRX(), mapWindow.getLRY());
395
					Point2D p = new Point2D.Double();
396 395

  
397
					try {					
396
					try {
398 397
						at.inverseTransform(ulPx, ulPx);
399 398
						at.inverseTransform(lrPx, lrPx);
400 399
					} catch (NoninvertibleTransformException e) {
......
417 416
					}
418 417
					//Ajustamos los puntos al ?rea en pixeles del raster
419 418
					RasterUtilities.adjustToPixelSize(pointList, dim);
420
					
419

  
421 420
					double minX = Math.min(ulPx.getX(), lrPx.getX());
422 421
					double maxX = Math.max(ulPx.getX(), lrPx.getX());
423 422
					double minY = Math.min(ulPx.getY(), lrPx.getY());
......
428 427
					Point2D lrWc = new Point2D.Double();
429 428
					at.transform(new Point2D.Double(minX, minY), ulWc);
430 429
					at.transform(new Point2D.Double(maxX + 1, maxY + 1), lrWc);
431
					
430

  
432 431
					cuttingPanel.setCoorRealFromDouble(ulWc.getX(), ulWc.getY(), lrWc.getX(), lrWc.getY(), 3);
433 432
					cuttingPanel.setCoorPixelFromDouble(minX, minY, maxX, maxY, 3);
434 433
					cuttingPanel.setWidthText(dim.getX(), 0);
......
441 440
			}
442 441
		}
443 442
	}
444
	
443

  
445 444
	/**
446
	 * Comprueba si la selecci?n del punto est? fuera del ?rea del raster. 
445
	 * Comprueba si la selecci?n del punto est? fuera del ?rea del raster.
447 446
	 * @param ulPx Coordenada superior izquierda en pixeles
448 447
	 * @param lrPx Corrdenada inferior derecha en pixeles
449 448
	 * @return true si la selecci?n del punto est? fuera del raster y false si no lo est?
......
453 452
		double minY = Math.min(ulPx.getY(), lrPx.getY());
454 453
		double maxX = Math.max(ulPx.getX(), lrPx.getX());
455 454
		double maxY = Math.max(ulPx.getY(), lrPx.getY());
456
		if(minX >= dim.width || minY >= dim.height || maxX < 0 || maxY < 0) 
455
		if(minX >= dim.width || minY >= dim.height || maxX < 0 || maxY < 0)
457 456
			return true;
458 457
		return false;
459 458
	}
......
607 606

  
608 607
		WriterBufferServer dataWriter1 = new WriterBufferServer();
609 608
		//TODO: FUNCIONALIDAD: Falta asignar la matriz de transformaci?n para que se salve con georreferenciaci?n.
610
		
609

  
611 610
		AffineTransform transf = calcAffineTransform(ulx, uly, lrx, lry, getCuttingPanel().getWidthText(), getCuttingPanel().getHeightText());
612 611

  
613 612
		int interpMethod = getCuttingPanel().getPResolution().getSelectedInterpolationMethod();
......
638 637
	private AffineTransform calcAffineTransform(double ulx, double uly, double lrx, double lry, double width, double height) {
639 638
		Point2D ul = new Point2D.Double(ulx, uly);
640 639
		Point2D lr = new Point2D.Double(lrx, lry);
641
		Point2D p = new Point2D.Double();
642 640
		try {
643 641
			at.inverseTransform(ul, ul);
644 642
			at.inverseTransform(lr, lr);
......
647 645
			return new AffineTransform();
648 646
		}
649 647
		double w = Math.abs(lr.getX() - ul.getX());
650
		double h = Math.abs(lr.getY() - ul.getY());
651
		
648

  
652 649
		Point2D ur = new Point2D.Double(ul.getX() + w, ul.getY());
653 650
		Point2D ll = new Point2D.Double(lr.getX() - w, lr.getY() );
654
		
651

  
655 652
		//Obtenemos la georreferenciaci?n de las cuatro esquinas del nuevo raster
656 653
		at.transform(ul, ul);
657 654
		at.transform(ur, ur);
658 655
		at.transform(lr, lr);
659 656
		at.transform(ll, ll);
660
		
657

  
661 658
		double pixelSizeX = (ur.getX() - ul.getX()) / width;
662 659
		double pixelSizeY = (ll.getY() - ul.getY()) / height;
663 660
		double rotX = at.getShearX();
664 661
		double rotY = at.getShearY();
665 662
		return new AffineTransform(pixelSizeX, rotY, rotX, pixelSizeY, ulx, uly);
666 663
	}
667
	
668
	private double[] calcNewShear(AffineTransform trOld, double psX, double psY, double tX, double tY, Point2D ul, Point2D lr) {
669
		at.transform(ul, ul);
670
		at.transform(lr, lr);
671
		return null;
672
	}
673
	
664

  
674 665
	/*
675 666
	 * (non-Javadoc)
676 667
	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
......
714 705
	public Cursor getCursor() {
715 706
		return null;
716 707
	}
708

  
709
	/**
710
	 * @return the widthPx
711
	 */
712
	public int getWidthPx() {
713
		return widthPx;
714
	}
715

  
716
	/**
717
	 * @return the heightPx
718
	 */
719
	public int getHeightPx() {
720
		return heightPx;
721
	}
717 722
}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/cutting/ui/listener/CuttingMouseViewListener.java
76 76
	 */
77 77
	public void rectangle(RectangleEvent event) {
78 78
		super.rectangle(event);
79
		
79

  
80 80
		AffineTransform at = ((FLyrRasterSE) layer).getAffineTransform();
81 81
		Point2D ulPx = new Point2D.Double(rect.getMinX(), rect.getMaxY());
82 82
		Point2D lrPx = new Point2D.Double(rect.getMaxX(), rect.getMinY());
83 83
		Point2D urPx = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
84 84
		Point2D llPx = new Point2D.Double(rect.getMinX(), rect.getMinY());
85
		Point2D p = new Point2D.Double();
86 85
		try {
87 86
			at.inverseTransform(ulPx, ulPx);
88 87
			at.inverseTransform(lrPx, lrPx);
......
106 105
			cuttingPanel.setCoorRealFromDouble(0, 0, 0, 0, 0);
107 106
			return;
108 107
		}
109
		
108

  
110 109
		//Ajustamos los puntos al ?rea en pixeles del raster
111 110
		RasterUtilities.adjustToPixelSize(pointList, dim);
112
		
111

  
113 112
		double minX = Math.min(ulPx.getX(), lrPx.getX());
114 113
		double maxX = Math.max(ulPx.getX(), lrPx.getX());
115 114
		double minY = Math.min(ulPx.getY(), lrPx.getY());
......
120 119
		Point2D lrWc = new Point2D.Double();
121 120
		at.transform(new Point2D.Double(minX, minY), ulWc);
122 121
		at.transform(new Point2D.Double(maxX + 1, maxY + 1), lrWc);
123
		
122

  
124 123
		cuttingPanel.setCoorRealFromDouble(ulWc.getX(), ulWc.getY(), lrWc.getX(), lrWc.getY(), 3);
125 124

  
126 125
		cuttingPanel.setCoorPixelFromDouble(minX, minY, maxX, maxY, 3);
......
131 130
		if (currentTool != null)
132 131
			mapControl.setTool(currentTool);
133 132
	}
134
		
133

  
135 134
	/**
136
	 * Comprueba si la selecci?n del punto est? fuera del ?rea del raster. 
135
	 * Comprueba si la selecci?n del punto est? fuera del ?rea del raster.
137 136
	 * @param ulPx Coordenada superior izquierda en pixeles
138 137
	 * @param lrPx Corrdenada inferior derecha en pixeles
139 138
	 * @return true si la selecci?n del punto est? fuera del raster y false si no lo est?
......
143 142
		double minY = Math.min(ulPx.getY(), lrPx.getY());
144 143
		double maxX = Math.max(ulPx.getX(), lrPx.getX());
145 144
		double maxY = Math.max(ulPx.getY(), lrPx.getY());
146
		if(minX >= layer.getPxWidth() || minY >= layer.getPxHeight() || maxX < 0 || maxY < 0) 
145
		if(minX >= layer.getPxWidth() || minY >= layer.getPxHeight() || maxX < 0 || maxY < 0)
147 146
			return true;
148 147
		return false;
149 148
	}

Also available in: Unified diff