Revision 37962 trunk/libraries/libRaster/src/org/gvsig/raster/grid/render/Rendering.java
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