Revision 1711 org.gvsig.raster.georeferencing/trunk/org.gvsig.raster.georeferencing/org.gvsig.raster.georeferencing.app/org.gvsig.raster.georeferencing.app.georeferencingclient/src/main/java/org/gvsig/raster/georeferencing/app/georeferencingclient/listener/ViewRasterRequestManager.java

View differences:

ViewRasterRequestManager.java
24 24
import java.awt.Color;
25 25
import java.awt.Dimension;
26 26
import java.awt.Graphics2D;
27
import java.awt.geom.AffineTransform;
28 27
import java.awt.geom.Point2D;
29 28
import java.awt.geom.Rectangle2D;
30 29
import java.awt.image.BufferedImage;
31 30

  
32 31
import org.gvsig.fmap.dal.coverage.RasterLocator;
33 32
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
34
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
35
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
36
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
37
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
38 33
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
39
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
34
import org.gvsig.fmap.dal.exception.ReadException;
35
import org.gvsig.fmap.geom.GeometryLocator;
36
import org.gvsig.fmap.geom.GeometryManager;
37
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
38
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
39
import org.gvsig.fmap.geom.primitive.Envelope;
40
import org.gvsig.fmap.mapcontext.ViewPort;
41
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
42
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
43
import org.gvsig.raster.fmap.layers.FLyrRaster;
40 44
import org.gvsig.raster.georeferencing.swing.exception.InvalidRequestException;
41 45
import org.gvsig.raster.georeferencing.swing.impl.GeoreferencingSwingImplLibrary;
42 46
import org.gvsig.raster.georeferencing.swing.impl.layer.GCPsGraphicLayer;
......
48 52
 * @author Nacho Brodin (nachobrodin@gmail.com)
49 53
 */
50 54
public class ViewRasterRequestManager implements IExtensionRequest {
55
	private GeometryManager          geomManager       = GeometryLocator.getGeometryManager();
51 56
	private GeoreferencingView       view              = null;
52 57
	private RasterDataStore          store             = null;
53 58
	private IGraphicLayer            graphicLayer      = null;
54 59
	private Color                    backGroundColor   = null;
60
	private FLyrRaster               lyr               = null;
55 61
	
56 62
	/**
57 63
	 * Asigna la capa a georreferenciar de donde se obtienen los datos.
......
60 66
	public ViewRasterRequestManager(GeoreferencingView view, RasterDataStore store) {
61 67
		this.store = store;
62 68
		this.view = view;
69
		lyr = new DefaultFLyrRaster();
70
		try {
71
			((DefaultFLyrRaster)lyr).setDataStore(store);
72
		} catch (LoadLayerException e) {
73
			GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", null, e);
74
		}
63 75
	}
64 76
	
65 77
	/**
......
86 98
		if(extent.getWidth() < extent.getHeight()) {
87 99
			if(((double)view.getCanvasWidth() / (double)view.getCanvasHeight()) <= (extent.getWidth() / extent.getHeight())) {
88 100
				h = (view.getCanvasHeight() * w) / view.getCanvasWidth();
89
				y = extent.getCenterY() - (h / 2);
101
				y = extent.getCenterY() + (h / 2);
90 102
			} else { //p1 < p2
91 103
				w = (view.getCanvasWidth() * h) / view.getCanvasHeight();
92 104
				x = extent.getCenterX() - (w / 2);
......
97 109
				x = extent.getCenterX() - (w / 2);
98 110
			} else { //p1 < p2
99 111
				h = (view.getCanvasHeight() * w) / view.getCanvasWidth();
100
				y = extent.getCenterY() - (h / 2);
112
				y = extent.getCenterY() + (h / 2);
101 113
			}
102 114
		}
103 115
		Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
......
121 133
	}
122 134
	
123 135
	/**
124
	 * Ajusta la extensi?n del primer par?metro a los l?mites de la segunda
125
	 * @param extToAdj
126
	 * @param imgExt
127
	 * @return
128
	 */
129
	private Extent calculateAdjustedView(Extent extToAdj, Extent imgExt) { 
130
        double vx = extToAdj.minX();
131
        double vy = extToAdj.minY();
132
        double vx2 = extToAdj.maxX();
133
        double vy2 = extToAdj.maxY();
134

  
135
        if (extToAdj.minX() < imgExt.minX())
136
            vx = imgExt.minX();
137
        if (extToAdj.minY() < imgExt.minY()) 
138
            vy = imgExt.minY();
139
        if (extToAdj.maxX() > imgExt.maxX()) 
140
            vx2 = imgExt.maxX();
141
        if (extToAdj.maxY() > imgExt.maxY())
142
            vy2 = imgExt.maxY();
143
        
144
        return RasterLocator.getManager().getDataStructFactory().createExtent(vx, vy2, vx2, vy);
145
    }
146
	
147
	/**
148 136
	 * Obtiene el color de fondo
149 137
	 * @return
150 138
	 */
......
174 162
		}
175 163
							
176 164
		//Ajustamos el extent al del raster
177
		Extent ext = null;
178
		Extent extSelection = null;
179
		if(view.getCanvas().getMinxMaxyUL()) {
165
		Extent ext = RasterLocator.getManager().getDataStructFactory().createExtent(extent.getMinX(), extent.getMaxY(), extent.getMaxX(), extent.getMinY());
166
		/*if(view.getCanvas().getMinxMaxyUL()) {
180 167
			ext = RasterLocator.getManager().getDataStructFactory().createExtent(extent);
181
			extSelection = calculateAdjustedView(ext, store.getExtent());
182 168
		} else {
183 169
			ext = RasterLocator.getManager().getDataStructFactory().createExtent(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY());
184
			RasterUtils rasterUtil = RasterLocator.getManager().getRasterUtils();
185
		    extSelection = rasterUtil.calculateAdjustedView(ext, store.getExtent());
186
		}
170
		}*/
187 171
		
188
		//Obtenemos el viewport y calculamos la matriz de transformaci?n
189
		ViewPortData vp = RasterLocator.getManager().createViewPortData();
190
		vp.setExtent(ext);
191
		vp.setSize(new Dimension(view.getCanvasWidth(), view.getCanvasHeight()));
192
		vp.calculateAffineTransform();
193
		
194
		//Calculamos el punto del canvas de la vista donde se empieza a dibujar el buffer de la imagen
195
		Point2D pt = new Point2D.Double(extSelection.getULX(), extSelection.getULY());
196
		AffineTransform at = vp.getMat();
197
		if(!view.getCanvas().getMinxMaxyUL()) {
198
			at = new AffineTransform(1, 0, 0, -1, 0, 0);
199
			at.concatenate(vp.getMat());
200
		}
201
		at.transform(pt, pt);
202
		
203 172
		try {
173
			ViewPort vp = new ViewPort();
174
			vp.setImageSize(new Dimension(view.getCanvasWidth(), view.getCanvasHeight()));
175
			Envelope env = geomManager.createEnvelope(ext.getMin().getX(), ext.getMin().getY(), ext.getMax().getX(), ext.getMax().getY(), SUBTYPES.GEOM2D);
176
			vp.setEnvelope(env);
177
			
204 178
			//Dibujamos a trav?s del render de la capa en un graphics como el de la vista
205
			BufferedImage initImg = new BufferedImage(view.getCanvasWidth(), view.getCanvasHeight(), BufferedImage.TYPE_INT_RGB);
179
			BufferedImage initImg = new BufferedImage(view.getCanvasWidth(), view.getCanvasHeight(), BufferedImage.TYPE_INT_ARGB);
206 180
			Graphics2D g2d = ((Graphics2D)initImg.getGraphics());
207 181
			if(backGroundColor != null && backGroundColor != Color.BLACK) {
208 182
				g2d.setColor(backGroundColor);
209 183
				g2d.fillRect(0, 0, view.getCanvasWidth(), view.getCanvasHeight());
210 184
			}
211
			BufferedImage drawedImg = (BufferedImage)store.getRender().draw(g2d, vp, null);
212
			g2d.drawImage(drawedImg, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
185
			lyr.draw(initImg, g2d, vp, null, 1);
213 186
		
214 187
			setDrawParams(initImg, extent);
215 188
			
216 189
			if(graphicLayer != null)
217 190
				graphicLayer.recalcPixelDrawCoordinates();
218 191
			
219
		} catch (RasterDriverException e) {
192
		} catch (ReadException e) {
220 193
			throw new InvalidRequestException("Error en al acceso al fichero", e);
221
		} catch (InvalidSetViewException e) {
194
		} catch (CreateEnvelopeException e) {
222 195
			throw new InvalidRequestException("Error asignando el ?rea de la petici?n", e);
223
		} catch (ProcessInterruptedException e) {
224 196
		}
225 197
		return extent;
226 198
	}

Also available in: Unified diff