Revision 37962 trunk/libraries/libRaster/src/org/gvsig/raster/grid/render/Rendering.java

View differences:

Rendering.java
42 42
import org.gvsig.raster.grid.filter.RasterFilter;
43 43
import org.gvsig.raster.grid.filter.RasterFilterList;
44 44
import org.gvsig.raster.grid.filter.bands.ColorTableFilter;
45
import org.gvsig.raster.util.Cancellable;
45 46
import org.gvsig.raster.util.PropertyEvent;
46 47
import org.gvsig.raster.util.PropertyListener;
47 48
import org.gvsig.raster.util.RasterUtilities;
49

  
48 50
/**
49 51
 * Esta clase se encarga de la gesti?n del dibujado de datos le?dos desde la capa
50 52
 * "dataaccess" sobre objetos java. Para ello necesita una fuente de datos que tipicamente
......
236 238
	 *
237 239
	 * @param g Graphics sobre el que se pinta
238 240
	 * @param vp ViewPort de la extensi?n a dibujar
241
	 * @param cancel 
239 242
	 * @throws InvalidSetViewException
240 243
	 * @throws ArrayIndexOutOfBoundsException
241 244
	 */
242
	public synchronized Image draw(Graphics2D g, ViewPortData vp)
245
	public synchronized Image draw(Graphics2D g, ViewPortData vp, Object cancel)
243 246
		throws RasterDriverException, InvalidSetViewException, InterruptedException {
244 247
		Image geoImage = null;
248
		if (bufferFactory == null) {
249
			System.err.println("Rendering.java: bufferFactory = null");
250
			return null;
251
		}
252
		Cancellable cancelWrapper = new Cancellable(cancel);
245 253
		IRasterDataSource dataset = bufferFactory.getDataSource();
246 254
		AffineTransform transf = dataset.getAffineTransform(0);
247 255

  
......
270 278
			}
271 279
			bufferFactory.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
272 280
			// En el renderizado ser? ImageDrawer el que se encargue de esta funci?n
281
			Thread.sleep(50); // damos tiempo a un posible interrupci?n
282
			if (cancel != null)
283
				if (cancelWrapper.isCanceled())
284
					return null;
285
		
273 286
			bufferFactory.setDrawableBands(getRenderBands());
274
			step = bufferFactory.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage));
287
			step = bufferFactory.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(),
288
					adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(),
289
					(int)Math.round(widthImage), (int)Math.round(heightImage));
290
			if (cancel != null)
291
				if (cancelWrapper.isCanceled())
292
					return null;
293
			
275 294
			bufferFactory.setSupersamplingLoadingBuffer(true);
295
						
276 296
			
277 297
			//Asignamos los datos al objeto transparencia antes de aplicar la pila de filtros para que el valor NoData sea efectivo
278 298
			if (bufferFactory.getDataSource().getTransparencyFilesStatus().isNoDataActive())
......
288 308
		grid = new Grid(bufferFactory, true);
289 309
		filterList.addEnvParam("Transparency", lastTransparency);
290 310
		grid.setFilterList(filterList);
291
		grid.applyFilters();
311
		grid.applyFilters(); // Esto tambi?n consume tiempo. TODO: Revisar
292 312
		
293 313
		//Si la lista de filtros genera bandas de transparencia se mezclan con la actual 
294 314
		if(grid.getFilterList().getAlphaBand() != null) {
......
304 324
		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
305 325
		drawer.setStep(step); // Desplazamiento para supersampleo
306 326
		drawer.setBufferSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
307
		geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
327
		geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands(), cancelWrapper); // Acci?n de renderizado
308 328

  
309 329
		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
310 330
		lastTransparency.setAlphaBand(null);
......
603 623
			lastRenderBuffer.free();
604 624
		lastRenderBuffer = null;
605 625
	}
626

  
627
	public Image draw(Graphics2D g, ViewPortData vp) throws RasterDriverException, InvalidSetViewException, InterruptedException {
628
		System.err.println("TODO: REVISAR EL DIBUJADO!!!. Hay una llamada a Rendering.draw sin cancel");
629
		return draw(g, vp, null);
630
	}
606 631
}

Also available in: Unified diff