Revision 12333 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterListener.java

View differences:

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