Revision 24170 trunk/libraries/libRaster/src/org/gvsig/raster/grid/render/Rendering.java
Rendering.java | ||
---|---|---|
24 | 24 |
import java.awt.geom.AffineTransform; |
25 | 25 |
import java.awt.geom.NoninvertibleTransformException; |
26 | 26 |
import java.awt.geom.Point2D; |
27 |
import java.util.ArrayList; |
|
27 | 28 |
|
28 | 29 |
import org.gvsig.raster.buffer.BufferFactory; |
29 | 30 |
import org.gvsig.raster.dataset.IBuffer; |
... | ... | |
36 | 37 |
import org.gvsig.raster.datastruct.ViewPortData; |
37 | 38 |
import org.gvsig.raster.grid.Grid; |
38 | 39 |
import org.gvsig.raster.grid.GridTransparency; |
40 |
import org.gvsig.raster.grid.filter.FilterListChangeEvent; |
|
41 |
import org.gvsig.raster.grid.filter.FilterListChangeListener; |
|
39 | 42 |
import org.gvsig.raster.grid.filter.RasterFilter; |
40 | 43 |
import org.gvsig.raster.grid.filter.RasterFilterList; |
41 | 44 |
import org.gvsig.raster.grid.filter.bands.ColorTableFilter; |
45 |
import org.gvsig.raster.util.PropertyEvent; |
|
46 |
import org.gvsig.raster.util.PropertyListener; |
|
42 | 47 |
import org.gvsig.raster.util.RasterUtilities; |
43 | 48 |
/** |
44 | 49 |
* Esta clase se encarga de la gesti?n del dibujado de datos le?dos desde la capa |
... | ... | |
61 | 66 |
* |
62 | 67 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
63 | 68 |
*/ |
64 |
public class Rendering { |
|
69 |
public class Rendering implements PropertyListener, FilterListChangeListener {
|
|
65 | 70 |
|
66 | 71 |
/** |
67 | 72 |
* Grid para la gesti?n del buffer |
68 | 73 |
*/ |
69 |
private Grid grid = null; |
|
74 |
private Grid grid = null;
|
|
70 | 75 |
/** |
71 | 76 |
* Fuente de datos para el renderizado |
72 | 77 |
*/ |
73 |
private BufferFactory bufferFactory = null; |
|
78 |
private BufferFactory bufferFactory = null;
|
|
74 | 79 |
/** |
75 | 80 |
* Objeto sobre el cual se hace el renderizado |
76 | 81 |
*/ |
77 |
private Image geoImage = null; |
|
82 |
private Image geoImage = null;
|
|
78 | 83 |
/** |
79 | 84 |
* N?mero de bandas a renderizar y en el orden que se har?. Esto es asignado |
80 | 85 |
* por el usuario de la renderizaci?n. |
81 | 86 |
*/ |
82 |
private int[] renderBands = { 0, 1, 2 }; |
|
87 |
private int[] renderBands = { 0, 1, 2 };
|
|
83 | 88 |
/** |
84 | 89 |
* Tiene el comportamiento cuando se tiene un raster con una. Dice si en las |
85 | 90 |
* otras bandas a renderizar se replica la banda existente o se ponen a 0. |
86 | 91 |
*/ |
87 |
private boolean replicateBand = false; |
|
92 |
private boolean replicateBand = false;
|
|
88 | 93 |
|
89 |
private ImageDrawer drawer = null; |
|
94 |
private ImageDrawer drawer = null;
|
|
90 | 95 |
/** |
91 | 96 |
* Ultima transparencia aplicada en la visualizaci?n que es obtenida desde el |
92 | 97 |
* grid |
93 | 98 |
*/ |
94 |
private GridTransparency lastTransparency = null; |
|
99 |
private GridTransparency lastTransparency = null;
|
|
95 | 100 |
/** |
96 | 101 |
* Lista de filtros aplicada en la renderizaci?n |
97 | 102 |
*/ |
98 |
private RasterFilterList filterList = null; |
|
103 |
private RasterFilterList filterList = null;
|
|
99 | 104 |
|
100 |
private IBuffer lastRenderBuffer = null; |
|
105 |
private IBuffer lastRenderBuffer = null;
|
|
101 | 106 |
|
102 | 107 |
/** |
103 | 108 |
* Ancho y alto del objeto Image en una petici?n de dibujado a un raster |
... | ... | |
106 | 111 |
private double widthImage, heightImage; |
107 | 112 |
|
108 | 113 |
private Point2D ulPxRequest, lrPxRequest; |
114 |
|
|
115 |
/** |
|
116 |
* Array de listeners que ser?n informados cuando cambia una propiedad en la visualizaci?n |
|
117 |
*/ |
|
118 |
private ArrayList visualPropertyListener = new ArrayList(); |
|
109 | 119 |
|
110 | 120 |
/** |
111 | 121 |
* Constructor |
... | ... | |
184 | 194 |
} |
185 | 195 |
} |
186 | 196 |
} |
197 |
|
|
198 |
/** |
|
199 |
* Asigna un listener a la lista que ser? informado cuando cambie una |
|
200 |
* propiedad visual en la renderizaci?n. |
|
201 |
* @param listener VisualPropertyListener |
|
202 |
*/ |
|
203 |
public void addVisualPropertyListener(VisualPropertyListener listener) { |
|
204 |
visualPropertyListener.add(listener); |
|
205 |
} |
|
206 |
|
|
207 |
/** |
|
208 |
* M?todo llamado cuando hay un cambio en una propiedad de visualizaci?n |
|
209 |
*/ |
|
210 |
private void callVisualPropertyChanged(Object obj) { |
|
211 |
for (int i = 0; i < visualPropertyListener.size(); i++) { |
|
212 |
VisualPropertyEvent ev = new VisualPropertyEvent(obj); |
|
213 |
((VisualPropertyListener)visualPropertyListener.get(i)).visualPropertyValueChanged(ev); |
|
214 |
} |
|
215 |
} |
|
187 | 216 |
|
188 | 217 |
/** |
189 | 218 |
* Dibuja el raster sobre el Graphics. Para ello debemos de pasar el viewPort que corresponde a la |
... | ... | |
231 | 260 |
double[] step = null; |
232 | 261 |
|
233 | 262 |
if (bufferFactory != null) { |
234 |
if (lastTransparency == null) |
|
263 |
if (lastTransparency == null) {
|
|
235 | 264 |
lastTransparency = new GridTransparency(bufferFactory.getDataSource().getTransparencyFilesStatus()); |
265 |
lastTransparency.addPropertyListener(this); |
|
266 |
} |
|
236 | 267 |
// Asignamos la banda de transparencia si existe esta |
237 | 268 |
if (bufferFactory.getDataSource().getTransparencyFilesStatus().getAlphaBandNumber() != -1) { |
238 | 269 |
bufferFactory.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer. |
... | ... | |
437 | 468 |
* @param renderBands: bandas y su posici?n |
438 | 469 |
*/ |
439 | 470 |
public void setRenderBands(int[] renderBands) { |
471 |
if( renderBands[0] != this.renderBands[0] || |
|
472 |
renderBands[1] != this.renderBands[1] || |
|
473 |
renderBands[2] != this.renderBands[2]) |
|
474 |
callVisualPropertyChanged(renderBands); |
|
440 | 475 |
this.renderBands = renderBands; |
441 | 476 |
if (filterList != null) { |
442 | 477 |
for (int i = 0; i < filterList.lenght(); i++) |
... | ... | |
483 | 518 |
*/ |
484 | 519 |
public void setLastTransparency(GridTransparency lastTransparency) { |
485 | 520 |
this.lastTransparency = lastTransparency; |
521 |
this.lastTransparency.addPropertyListener(this); |
|
486 | 522 |
if (getFilterList() != null) |
487 | 523 |
getFilterList().addEnvParam("Transparency", lastTransparency); |
488 | 524 |
} |
... | ... | |
517 | 553 |
*/ |
518 | 554 |
public void setFilterList(RasterFilterList filterList) { |
519 | 555 |
this.filterList = filterList; |
556 |
this.filterList.addFilterListListener(this); |
|
520 | 557 |
} |
521 | 558 |
|
522 | 559 |
/** |
... | ... | |
542 | 579 |
public void setBufferFactory(BufferFactory bf) { |
543 | 580 |
this.bufferFactory = bf; |
544 | 581 |
} |
582 |
|
|
583 |
/** |
|
584 |
* Evento activado cuando cambia una propiedad de transparencia. |
|
585 |
*/ |
|
586 |
public void actionValueChanged(PropertyEvent e) { |
|
587 |
callVisualPropertyChanged(new VisualPropertyEvent(e.getSource())); |
|
588 |
} |
|
589 |
|
|
590 |
/** |
|
591 |
* Evento activado cuando cambia la lista de filtros. |
|
592 |
*/ |
|
593 |
public void filterListChanged(FilterListChangeEvent e) { |
|
594 |
callVisualPropertyChanged(new VisualPropertyEvent(e.getSource())); |
|
595 |
} |
|
545 | 596 |
} |
Also available in: Unified diff