Revision 20057 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/enhanced/ui/EnhancedListener.java
EnhancedListener.java | ||
---|---|---|
31 | 31 |
import org.gvsig.raster.beans.canvas.GCanvasEvent; |
32 | 32 |
import org.gvsig.raster.beans.canvas.IGCanvasListener; |
33 | 33 |
import org.gvsig.raster.beans.canvas.layers.GraphicHistogram; |
34 |
import org.gvsig.raster.beans.canvas.layers.functions.BaseFunction; |
|
34 | 35 |
import org.gvsig.raster.beans.canvas.layers.functions.DensitySlicingLine; |
35 | 36 |
import org.gvsig.raster.beans.canvas.layers.functions.LogaritmicExponentialLine; |
36 | 37 |
import org.gvsig.raster.beans.canvas.layers.functions.SquareRootPowLine; |
37 | 38 |
import org.gvsig.raster.beans.canvas.layers.functions.StraightLine; |
38 |
import org.gvsig.raster.beans.previewbase.PreviewBasePanel; |
|
39 | 39 |
import org.gvsig.raster.dataset.IRasterDataSource; |
40 | 40 |
import org.gvsig.raster.dataset.Params; |
41 | 41 |
import org.gvsig.raster.grid.filter.FilterTypeException; |
42 |
import org.gvsig.raster.grid.filter.RasterFilterList; |
|
42 | 43 |
import org.gvsig.raster.grid.filter.enhancement.EqualizationFilter; |
44 |
import org.gvsig.raster.grid.filter.enhancement.LinearStretchEnhancementFilter; |
|
45 |
import org.gvsig.raster.grid.filter.enhancement.LinearStretchParams; |
|
46 |
import org.gvsig.raster.grid.filter.enhancement.LinearStretchParams.Stretch; |
|
43 | 47 |
import org.gvsig.raster.hierarchy.IRasterRendering; |
44 | 48 |
import org.gvsig.raster.util.RasterNotLoadException; |
45 | 49 |
import org.gvsig.raster.util.RasterToolsUtil; |
... | ... | |
57 | 61 |
public class EnhancedListener implements ActionListener, IGCanvasListener, ButtonsPanelListener, IProcessActions { |
58 | 62 |
private SelectorsPanel selectorsPanel = null; |
59 | 63 |
private GraphicsPanel graphicsPanel = null; |
60 |
private PreviewBasePanel enhancedPanel = null; |
|
61 | 64 |
private EnhancedDialog enhancedDialog = null; |
62 | 65 |
private PreviewFiltering filteredPreview = null; |
63 | 66 |
private EnhancedHistogramController enhancedManager = null; |
... | ... | |
72 | 75 |
*/ |
73 | 76 |
public EnhancedListener(SelectorsPanel selectorsPanel, |
74 | 77 |
GraphicsPanel graphicsPanel, |
75 |
PreviewBasePanel enhancedPanel, |
|
76 | 78 |
EnhancedDialog enhancedDialog, |
77 | 79 |
PreviewFiltering filteredPreview) { |
78 | 80 |
this.selectorsPanel = selectorsPanel; |
79 | 81 |
this.graphicsPanel = graphicsPanel; |
80 |
this.enhancedPanel = enhancedPanel; |
|
81 | 82 |
this.enhancedDialog = enhancedDialog; |
82 | 83 |
this.filteredPreview = filteredPreview; |
83 | 84 |
|
... | ... | |
149 | 150 |
graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.BLUE); |
150 | 151 |
} |
151 | 152 |
|
152 |
HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED); |
|
153 |
|
|
154 |
if (status.getBaseFunction().getClass().equals(DensitySlicingLine.class)) |
|
155 |
selectorsPanel.getEnhancedType().setSelectedItem("Level-slice"); |
|
156 |
|
|
157 |
if (status.getBaseFunction().getClass().equals(StraightLine.class)) |
|
158 |
selectorsPanel.getEnhancedType().setSelectedItem("Lineal"); |
|
159 |
|
|
160 |
if (status.getBaseFunction().getClass().equals(EqualizationFilter.class)) |
|
161 |
selectorsPanel.getEnhancedType().setSelectedItem("Equalization"); |
|
162 |
|
|
163 |
if (status.getBaseFunction().getClass().equals(SquareRootPowLine.class)) |
|
164 |
selectorsPanel.getEnhancedType().setSelectedItem("Square-root"); |
|
165 |
|
|
166 |
if (status.getBaseFunction().getClass().equals(LogaritmicExponentialLine.class)) |
|
167 |
selectorsPanel.getEnhancedType().setSelectedItem("Logaritmic"); |
|
153 |
updateTypeSelected(); |
|
168 | 154 |
|
169 |
status = graphicsPanel.getOutputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED); |
|
155 |
HistogramStatus status = graphicsPanel.getOutputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
|
|
170 | 156 |
|
171 | 157 |
switch (status.getGraphicHistogram().getType()) { |
172 | 158 |
case GraphicHistogram.TYPE_FILL: |
... | ... | |
268 | 254 |
//No asignamos el nivel |
269 | 255 |
} |
270 | 256 |
} |
271 |
|
|
272 |
manageMainButtons(e); |
|
273 | 257 |
} |
274 | 258 |
|
275 | 259 |
/** |
276 |
* Gestiona los eventos de los botones principales (Aceptar, Aplicar, Cancelar)
|
|
277 |
* @param e
|
|
260 |
* Actualiza el combo de EnhancedType para que este seleccionado siempre el
|
|
261 |
* item que corresponde con la grafica mostrada en ese momento
|
|
278 | 262 |
*/ |
279 |
private void manageMainButtons(ActionEvent e) { |
|
280 |
if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT)) { |
|
281 |
/*Params params = new Params(); |
|
282 |
params.setParam("TailTrim", |
|
283 |
new Double(Math.round(0 * 100.0)), |
|
284 |
Params.SLIDER, |
|
285 |
new String[]{ "0", "100", "0", "1", "25" }); |
|
286 |
params.setParam("Stretch", |
|
287 |
new Double[][] {{new Double(0), new Double(1269)}, {new Double(0), new Double(1525)}, {new Double(0), new Double(888)}}, |
|
288 |
Params.CHOICE, |
|
289 |
null); |
|
290 |
params.setParam("StretchRGB", |
|
291 |
new Integer[] {new Integer(255)}, |
|
292 |
Params.CHOICE, |
|
293 |
null); |
|
294 |
filteredPreview.addNewParam("param1", params, LinearStretchEnhancementFilter.class);*/ |
|
263 |
private void updateTypeSelected() { |
|
264 |
HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED); |
|
265 |
|
|
266 |
if (status.getBaseFunction().getClass().equals(DensitySlicingLine.class)) |
|
267 |
selectorsPanel.setSelectedEnhancedType("Level-slice"); |
|
268 |
|
|
269 |
if (status.getBaseFunction().getClass().equals(StraightLine.class)) |
|
270 |
selectorsPanel.setSelectedEnhancedType("Lineal"); |
|
271 |
|
|
272 |
if (status.getBaseFunction().getClass().equals(EqualizationFilter.class)) |
|
273 |
selectorsPanel.setSelectedEnhancedType("Equalization"); |
|
274 |
|
|
275 |
if (status.getBaseFunction().getClass().equals(SquareRootPowLine.class)) |
|
276 |
selectorsPanel.setSelectedEnhancedType("Square-root"); |
|
277 |
|
|
278 |
if (status.getBaseFunction().getClass().equals(LogaritmicExponentialLine.class)) { |
|
279 |
if (((StraightLine) status.getBaseFunction()).getValueFunction() >= 0) |
|
280 |
selectorsPanel.setSelectedEnhancedType("Logaritmic"); |
|
281 |
else |
|
282 |
selectorsPanel.setSelectedEnhancedType("Exponential"); |
|
295 | 283 |
} |
296 |
if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY)) { |
|
297 |
|
|
284 |
} |
|
285 |
|
|
286 |
/** |
|
287 |
* En la primera carga se define cada banda en los histogramas, para dejarlo en |
|
288 |
* su estado logico. |
|
289 |
* @param stretch |
|
290 |
* @param band |
|
291 |
*/ |
|
292 |
private void firstLoadBand(Stretch stretch, int band) { |
|
293 |
boolean firstBand = ((band == HistogramGraphicBase.GRAY) || (band == HistogramGraphicBase.RED)); |
|
294 |
|
|
295 |
graphicsPanel.getInputHistogram().setHistogramDrawed(band); |
|
296 |
|
|
297 |
BaseFunction baseFunction = null; |
|
298 |
HistogramStatus status; |
|
299 |
status = graphicsPanel.getInputHistogram().getHistogramStatus(band); |
|
300 |
if (status == null) |
|
301 |
return; |
|
302 |
|
|
303 |
switch (stretch.functionType) { |
|
304 |
case 0: |
|
305 |
if (firstBand) { |
|
306 |
selectorsPanel.getEnhancedType().setSelectedItem("Lineal"); |
|
307 |
graphicsPanel.setLevelsEnabled(false); |
|
308 |
} |
|
309 |
baseFunction = new StraightLine(status.getBaseFunction().getColor()); |
|
310 |
break; |
|
311 |
case 1: |
|
312 |
if (firstBand) { |
|
313 |
if (stretch.valueFunction >= 0) |
|
314 |
selectorsPanel.getEnhancedType().setSelectedItem("Logaritmic"); |
|
315 |
else |
|
316 |
selectorsPanel.getEnhancedType().setSelectedItem("Exponential"); |
|
317 |
graphicsPanel.setLevelsEnabled(false); |
|
318 |
} |
|
319 |
baseFunction = new LogaritmicExponentialLine(status.getBaseFunction().getColor(), stretch.valueFunction); |
|
320 |
break; |
|
321 |
case 2: |
|
322 |
if (firstBand) { |
|
323 |
selectorsPanel.getEnhancedType().setSelectedItem("Square-root"); |
|
324 |
graphicsPanel.setLevelsEnabled(false); |
|
325 |
} |
|
326 |
baseFunction = new SquareRootPowLine(status.getBaseFunction().getColor(), stretch.valueFunction); |
|
327 |
break; |
|
328 |
case 3: |
|
329 |
if (firstBand) { |
|
330 |
selectorsPanel.getEnhancedType().setSelectedItem("Level-slice"); |
|
331 |
graphicsPanel.setLevelsEnabled(true); |
|
332 |
} |
|
333 |
baseFunction = new DensitySlicingLine(status.getBaseFunction().getColor(), (int) stretch.valueFunction); |
|
334 |
break; |
|
298 | 335 |
} |
299 |
if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL)) { |
|
300 |
enhancedDialog.close(); |
|
336 |
if (baseFunction != null) { |
|
337 |
status.setBaseFunction(baseFunction); |
|
338 |
graphicsPanel.getInputHistogram().setHistogramDrawed(band); |
|
339 |
// graphicsPanel.getInputHistogram().getCanvas().replaceDrawableElement(baseFunction, BaseFunction.class); |
|
301 | 340 |
} |
302 | 341 |
} |
342 |
|
|
343 |
/** |
|
344 |
* En la primera carga se han de establecer todos los histogramas de entrada |
|
345 |
* a sus valores correspondientes segun el filtro. |
|
346 |
*/ |
|
347 |
public void firstLoad() { |
|
348 |
RasterFilterList rasterFilterList = ((FLyrRasterSE) enhancedDialog.getLayer()).getRenderFilterList(); |
|
303 | 349 |
|
350 |
LinearStretchEnhancementFilter filter = (LinearStretchEnhancementFilter) rasterFilterList.getByName(LinearStretchEnhancementFilter.names[0]); |
|
351 |
if (filter != null) { |
|
352 |
LinearStretchParams stretch = filter.getStretchs(); |
|
353 |
|
|
354 |
firstLoadBand(stretch.blue, HistogramGraphicBase.BLUE); |
|
355 |
firstLoadBand(stretch.green, HistogramGraphicBase.GREEN); |
|
356 |
firstLoadBand(stretch.red, HistogramGraphicBase.RED); |
|
357 |
firstLoadBand(stretch.gray, HistogramGraphicBase.GRAY); |
|
358 |
} |
|
359 |
graphicsPanel.getInputHistogram().repaint(); |
|
360 |
} |
|
361 |
|
|
304 | 362 |
/** |
305 | 363 |
* Coge los datos que hay en los histogramas y los aplica a la vista previa |
306 | 364 |
*/ |
... | ... | |
313 | 371 |
* Coge los datos que hay en los histogramas y los aplica en el histograma de salida |
314 | 372 |
*/ |
315 | 373 |
private void updateHistogramOut() { |
374 |
updateTypeSelected(); |
|
316 | 375 |
enhancedManager.updatePreview(); |
317 | 376 |
enhancedManager.updateHistogramOut(); |
318 | 377 |
} |
Also available in: Unified diff