Revision 12333 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterListener.java
FilterListener.java | ||
---|---|---|
49 | 49 |
import org.gvsig.raster.dataset.Params; |
50 | 50 |
import org.gvsig.raster.dataset.Params.Param; |
51 | 51 |
import org.gvsig.raster.grid.filter.IRasterFilterListManager; |
52 |
import org.gvsig.raster.grid.filter.RasterFilter; |
|
52 | 53 |
import org.gvsig.raster.grid.filter.RasterFilterList; |
53 | 54 |
import org.gvsig.raster.grid.filter.RasterFilterListManager; |
54 | 55 |
import org.gvsig.raster.grid.render.Rendering; |
... | ... | |
188 | 189 |
|
189 | 190 |
switch (params.getParam(i).type) { |
190 | 191 |
case Params.CHECK: |
191 |
propertiesComponent.addValue(name, key, new Boolean(p.defaultValue), types); |
|
192 |
propertiesComponent.addValue(name, key, new Boolean((String) p.defaultValue), types);
|
|
192 | 193 |
break; |
193 | 194 |
case Params.CHOICE: |
194 | 195 |
ArrayList list = new ArrayList(); |
195 | 196 |
for (int j = 0; j < p.list.length; j++) { |
196 | 197 |
list.add(p.list[j]); |
197 |
if (p.defaultValue.compareTo(p.list[j]) == 0)
|
|
198 |
if (((String) p.defaultValue).compareTo(p.list[j]) == 0)
|
|
198 | 199 |
selectedValue = j; |
199 | 200 |
} |
200 | 201 |
types = new Object[] { new Integer(PropertiesComponent.TYPE_COMBO), list }; |
... | ... | |
202 | 203 |
break; |
203 | 204 |
case Params.SLIDER: |
204 | 205 |
types = new Object[]{new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(p.list[0]), new Integer(p.list[1])}; |
205 |
propertiesComponent.addValue(name, key, new Integer((int) Math.round(new Double(p.defaultValue).doubleValue())), types); |
|
206 |
propertiesComponent.addValue(name, key, new Integer((int) Math.round(new Double((String) p.defaultValue).doubleValue())), types);
|
|
206 | 207 |
break; |
207 | 208 |
default: |
208 | 209 |
propertiesComponent.addValue(params.getParam(i).id, params.getParam(i).id, params.getParam(i).defaultValue, null); |
... | ... | |
233 | 234 |
|
234 | 235 |
/* |
235 | 236 |
* (non-Javadoc) |
236 |
* @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, double, double, int, int) |
|
237 |
*/ |
|
238 |
public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) { |
|
239 |
if (getFilterPanel().getLayer() == null) |
|
240 |
return; |
|
241 |
|
|
242 |
Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender(); |
|
243 |
|
|
244 |
if ((rendering == null) || ((x2 - x1) == 0.0) || ((y2 - y1) == 0.0)) |
|
245 |
return; |
|
246 |
|
|
247 |
rendering.getFilterList().pushStatus(); |
|
248 |
|
|
249 |
rendering.getFilterList().clear(); |
|
250 |
|
|
251 |
RasterFilterList filterList = rendering.getFilterList(); |
|
252 |
RasterFilterListManager stackManager = new RasterFilterListManager(filterList); |
|
253 |
|
|
254 |
if (getFilterPanel().getCBShowFilters().isSelected()) { |
|
255 |
ListModel list = getFilterPanel().getTreeListContainer().getListModel(); |
|
256 |
for (int i = 0; i < list.getSize(); i++) { |
|
257 |
Hashtable hastTable = getFilterPanel().getTreeListContainer().getMap(); |
|
258 |
for (int j = 0; j < paramsList.size(); j++) { |
|
259 |
boolean active = true; |
|
260 |
Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById(PluginServices.getText(this, "enabled")); |
|
261 |
if ((param != null) && ((new Boolean(param.defaultValue).booleanValue()) == false)) |
|
262 |
active = false; |
|
263 |
if (active) { |
|
264 |
if (((ParamStruct) paramsList.get(j)).getFilterName().equals(hastTable.get(list.getElementAt(i)))) { |
|
265 |
IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(((ParamStruct) paramsList.get(j)).getFilterClass()); |
|
266 |
|
|
267 |
Params params; |
|
268 |
try { |
|
269 |
params = (Params) ((ParamStruct) paramsList.get(j)).getFilterParam().clone(); |
|
270 |
String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2]; |
|
271 |
params.setParam("RenderBands", rgb, 0, null); |
|
272 |
|
|
273 |
filterManager.addFilter(((ParamStruct) paramsList.get(j)).getFilterClass(), params); |
|
274 |
} catch (CloneNotSupportedException e) { |
|
275 |
} |
|
276 |
} |
|
277 |
} |
|
278 |
} |
|
279 |
} |
|
280 |
} |
|
281 |
|
|
282 |
ViewPort vp = new ViewPort(null); |
|
283 |
|
|
284 |
Dimension2D dimension = new Dimension(width, height); |
|
285 |
Extent extent = new Extent(x1, y1, x2, y2); |
|
286 |
|
|
287 |
ViewPortData vp2 = new ViewPortData(vp.getProjection(), extent, dimension); |
|
288 |
vp2.setMat(new AffineTransform(zoom, 0.0, 0.0, zoom, -x1*zoom, -y1*zoom)); |
|
289 |
|
|
290 |
Extent extent2 = ((FLyrRasterSE) getFilterPanel().getLayer()).getDatasource().getExtent(); |
|
291 |
|
|
292 |
AffineTransform trans = g.getTransform(); |
|
293 |
// Calcular cuanto sobresale la imagen y rectificar ese desplazamiento |
|
294 |
if (y1 > extent2.maxY()) { |
|
295 |
g.translate(0.0, (-(extent2.maxY() - y1) * zoom)*2.0); |
|
296 |
} |
|
297 |
|
|
298 |
rendering.draw(g, vp2); |
|
299 |
g.setTransform(trans); |
|
300 |
|
|
301 |
rendering.getFilterList().popStatus(); |
|
302 |
} |
|
303 |
|
|
304 |
/* |
|
305 |
* (non-Javadoc) |
|
306 | 237 |
* @see org.gvsig.gui.beans.propertiespanel.PropertiesComponentListener#actionChangeProperties(java.util.EventObject) |
307 | 238 |
*/ |
308 | 239 |
public void actionChangeProperties(EventObject e) { |
... | ... | |
395 | 326 |
} |
396 | 327 |
|
397 | 328 |
/** |
398 |
* Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar |
|
329 |
* Aqui se seleccionan que filtros se van a aplicar y se devuelven en forma |
|
330 |
* de ArrayList tanto para el dibujado como cuando aceptan o aplican el panel. |
|
331 |
* @param rendering |
|
332 |
* @return |
|
399 | 333 |
*/ |
400 |
public void accept() { |
|
401 |
MultiRasterDataset multiRasterDataset = (MultiRasterDataset)((FLyrRasterSE) getFilterPanel().getLayer()).getGeoRasterMultiDataset(); |
|
402 |
if (multiRasterDataset == null) |
|
403 |
return; |
|
334 |
public ArrayList applyFilters(Rendering rendering) { |
|
335 |
ArrayList listFilterUsed = new ArrayList(); |
|
404 | 336 |
|
405 |
String path = null; |
|
406 |
if (!getFilterPanel().getRadioOnlyView().isSelected()) { |
|
407 |
path = getFileSelected(); |
|
408 |
if (path == null) |
|
409 |
return; |
|
410 |
} |
|
337 |
RasterFilterList filterList = new RasterFilterList(); |
|
338 |
RasterFilterListManager stackManager = new RasterFilterListManager(filterList); |
|
411 | 339 |
|
412 |
// Array para guardar los filtros que se van a usar en forma de ParamStruct |
|
413 |
ArrayList listFilterUsed = new ArrayList(); |
|
340 |
// Conservamos filtros no visibles ya existentes |
|
341 |
ArrayList filtersInit = getFilterPanel().getFilterStatus(); |
|
342 |
for (int i = 0; i < filtersInit.size(); i++) { |
|
343 |
// Si es visible no hacemos nada |
|
344 |
if (((RasterFilter) filtersInit.get(i)).isVisible()) |
|
345 |
continue; |
|
414 | 346 |
|
415 |
Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender(); |
|
347 |
RasterFilter obj = null; |
|
348 |
for (int j = 0; j < stackManager.getRasterFilterList().size(); j++) { |
|
349 |
Class classFilter = (Class) stackManager.getRasterFilterList().get(j); |
|
350 |
try { |
|
351 |
obj = (RasterFilter) classFilter.newInstance(); |
|
352 |
if (obj.getName().equals(((RasterFilter) filtersInit.get(i)).getName())) |
|
353 |
break; |
|
354 |
} catch (InstantiationException e) { |
|
355 |
e.printStackTrace(); |
|
356 |
} catch (IllegalAccessException e) { |
|
357 |
e.printStackTrace(); |
|
358 |
} |
|
359 |
} |
|
416 | 360 |
|
361 |
// Si no encontramos el filtro apropiado, nos olvidamos de el |
|
362 |
if (obj == null) |
|
363 |
continue; |
|
364 |
|
|
365 |
// Si no es visible tenemos que conservar el filtro |
|
366 |
try { |
|
367 |
Params params = (Params) ((RasterFilter) filtersInit.get(i)).getUIParams(((RasterFilter) filtersInit.get(i)).getName()).clone(); |
|
368 |
// A?ado el parametro RenderBands a los parametros del filtro |
|
369 |
String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2]; |
|
370 |
params.setParam("RenderBands", rgb, 0, null); |
|
371 |
|
|
372 |
ParamStruct newParam = new ParamStruct(); |
|
373 |
newParam.setFilterClass(obj.getClass()); |
|
374 |
newParam.setFilterName(((RasterFilter) filtersInit.get(i)).getName()); |
|
375 |
newParam.setFilterParam(params); |
|
376 |
listFilterUsed.add(newParam); |
|
377 |
} catch (CloneNotSupportedException e) { |
|
378 |
} |
|
379 |
} |
|
380 |
|
|
381 |
// Metemos los filtros seleccionados en el panel |
|
417 | 382 |
ListModel list = getFilterPanel().getTreeListContainer().getListModel(); |
418 | 383 |
for (int i = 0; i < list.getSize(); i++) { |
419 | 384 |
Hashtable hastTable = getFilterPanel().getTreeListContainer().getMap(); |
420 | 385 |
for (int j = 0; j < paramsList.size(); j++) { |
421 | 386 |
boolean active = true; |
422 | 387 |
Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById(PluginServices.getText(this, "enabled")); |
423 |
if ((param != null) && ((new Boolean(param.defaultValue).booleanValue()) == false)) |
|
388 |
if ((param != null) && ((new Boolean((String) param.defaultValue).booleanValue()) == false))
|
|
424 | 389 |
active = false; |
425 | 390 |
if (active) { |
426 | 391 |
if (((ParamStruct) paramsList.get(j)).getFilterName().equals(hastTable.get(list.getElementAt(i)))) { |
427 | 392 |
try { |
428 | 393 |
Params params = (Params) ((ParamStruct) paramsList.get(j)).getFilterParam().clone(); |
429 |
|
|
430 | 394 |
// A?ado el parametro RenderBands a los parametros del filtro |
431 | 395 |
String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2]; |
432 | 396 |
params.setParam("RenderBands", rgb, 0, null); |
... | ... | |
436 | 400 |
newParam.setFilterName(((ParamStruct) paramsList.get(j)).getFilterName()); |
437 | 401 |
newParam.setFilterParam(params); |
438 | 402 |
listFilterUsed.add(newParam); |
439 |
|
|
440 | 403 |
} catch (CloneNotSupportedException e) { |
441 |
// TODO Auto-generated catch block |
|
442 | 404 |
} |
443 | 405 |
} |
444 | 406 |
} |
445 | 407 |
} |
446 | 408 |
} |
409 |
return listFilterUsed; |
|
410 |
} |
|
447 | 411 |
|
412 |
/* |
|
413 |
* (non-Javadoc) |
|
414 |
* @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, double, double, int, int) |
|
415 |
*/ |
|
416 |
public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) { |
|
417 |
if (getFilterPanel().getLayer() == null) |
|
418 |
return; |
|
419 |
|
|
420 |
Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender(); |
|
421 |
|
|
422 |
if ((rendering == null) || ((x2 - x1) == 0.0) || ((y2 - y1) == 0.0)) |
|
423 |
return; |
|
424 |
|
|
425 |
rendering.getFilterList().pushStatus(); |
|
426 |
|
|
427 |
rendering.getFilterList().clear(); |
|
428 |
|
|
429 |
if (getFilterPanel().getCBShowFilters().isSelected()) { |
|
430 |
RasterFilterList filterList = rendering.getFilterList(); |
|
431 |
RasterFilterListManager stackManager = new RasterFilterListManager(filterList); |
|
432 |
|
|
433 |
ArrayList listFilterUsed = applyFilters(rendering); |
|
434 |
for (int i = 0; i < listFilterUsed.size(); i++) { |
|
435 |
IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(((ParamStruct) listFilterUsed.get(i)).getFilterClass()); |
|
436 |
filterManager.addFilter(((ParamStruct) listFilterUsed.get(i)).getFilterClass(), ((ParamStruct) listFilterUsed.get(i)).getFilterParam()); |
|
437 |
} |
|
438 |
} |
|
439 |
|
|
440 |
ViewPort vp = new ViewPort(null); |
|
441 |
|
|
442 |
Dimension2D dimension = new Dimension(width, height); |
|
443 |
Extent extent = new Extent(x1, y1, x2, y2); |
|
444 |
|
|
445 |
ViewPortData vp2 = new ViewPortData(vp.getProjection(), extent, dimension); |
|
446 |
vp2.setMat(new AffineTransform(zoom, 0.0, 0.0, zoom, -x1*zoom, -y1*zoom)); |
|
447 |
|
|
448 |
Extent extent2 = ((FLyrRasterSE) getFilterPanel().getLayer()).getDatasource().getExtent(); |
|
449 |
|
|
450 |
AffineTransform trans = g.getTransform(); |
|
451 |
// Calcular cuanto sobresale la imagen y rectificar ese desplazamiento |
|
452 |
if (y1 > extent2.maxY()) { |
|
453 |
g.translate(0.0, (-(extent2.maxY() - y1) * zoom)*2.0); |
|
454 |
} |
|
455 |
|
|
456 |
rendering.draw(g, vp2); |
|
457 |
g.setTransform(trans); |
|
458 |
|
|
459 |
rendering.getFilterList().popStatus(); |
|
460 |
} |
|
461 |
|
|
462 |
/** |
|
463 |
* Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar |
|
464 |
*/ |
|
465 |
public void accept() { |
|
466 |
MultiRasterDataset multiRasterDataset = (MultiRasterDataset)((FLyrRasterSE) getFilterPanel().getLayer()).getGeoRasterMultiDataset(); |
|
467 |
if (multiRasterDataset == null) |
|
468 |
return; |
|
469 |
|
|
470 |
String path = null; |
|
471 |
if (!getFilterPanel().getRadioOnlyView().isSelected()) { |
|
472 |
path = getFileSelected(); |
|
473 |
if (path == null) |
|
474 |
return; |
|
475 |
} |
|
476 |
|
|
477 |
Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender(); |
|
478 |
|
|
479 |
// Array para guardar los filtros que se van a usar en forma de ParamStruct |
|
480 |
ArrayList listFilterUsed = applyFilters(rendering); |
|
481 |
|
|
448 | 482 |
if (filterPanel.getRadioOnlyView().isSelected()) { |
449 | 483 |
FilterProcess.addSelectedFilters(rendering.getFilterList(), listFilterUsed); |
450 | 484 |
getFilterPanel().getLayer().getMapContext().invalidate(); |
Also available in: Unified diff