Revision 11803

View differences:

trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/enhancement/EnhancementListManager.java
16 16
 * along with this program; if not, write to the Free Software
17 17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18 18
 */
19

  
20 19
package org.gvsig.raster.grid.filter.enhancement;
21 20

  
22 21
import java.util.ArrayList;
23 22

  
24
import org.gvsig.i18n.Messages;
25 23
import org.gvsig.raster.dataset.FileNotOpenException;
26 24
import org.gvsig.raster.dataset.IBuffer;
27 25
import org.gvsig.raster.dataset.IStatistics;
......
35 33
import org.gvsig.raster.grid.filter.statistics.TailTrimFilter;
36 34
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
37 35
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
38

  
39 36
/**
40 37
 * Gestor de la pila de filtros para el filtro de realce.
41 38
 * @author Nacho Brodin (nachobrodin@gmail.com)
......
69 66
		extensionPoints.add("RasterFilter", "Enhancement", EnhancementListManager.class);
70 67
	}
71 68
	
72
	 /**
73
     * A?ade un filtro de realce. Esta versi?n tiene el par?metro para a?adirle el nombre
74
     * del fichero. Esto se usa para que si a un fichero se le ha calculado ya el recorte de colas
75
     * no se vuelva a calcular, evitando as? que si hacemos un draw a una imagen por bloques cada
76
     * bloque tenga un c?lculo distinto para el recorte.
77
     */
78
    public void addEnhancedFilter(boolean removeEnds, IStatistics stats, double tailTrim, 
79
    		int insertionMode, int[] renderBands) {
80
        String fName = LinearEnhancementFilter.genericName;
81
		
82
		if(	insertionMode == RasterFilterList.ADD_END_AND_DELETE && filterList.isActive(fName)) {
69
	/**
70
	 * A?ade un filtro de realce. Esta versi?n tiene el par?metro para a?adirle el nombre
71
	 * del fichero. Esto se usa para que si a un fichero se le ha calculado ya el recorte de colas
72
	 * no se vuelva a calcular, evitando as? que si hacemos un draw a una imagen por bloques cada
73
	 * bloque tenga un c?lculo distinto para el recorte.
74
	 */
75
	public void addEnhancedFilter(boolean removeEnds, IStatistics stats, double tailTrim, int insertionMode, int[] renderBands) {
76
		String fName = LinearEnhancementFilter.genericName;
77

  
78
		if (insertionMode == RasterFilterList.ADD_END_AND_DELETE && filterList.isActive(fName)) {
83 79
			filterList.remove(TailTrimFilter.class);
84 80
			filterList.remove(LinearEnhancementFilter.class);
85 81
			filterListManager.controlTypes();
86 82
		}
87 83

  
88
		if (tailTrim == 0) { // En este caso siempre es necesario el m?ximo y m?nimo
84
		if (tailTrim == 0) { // En este caso siempre es necesario el m?ximo y
85
													// m?nimo
89 86
			if (!stats.isCalculated()) {
90 87
				try {
91 88
					stats.calcFullStatistics();
......
101 98
			StatisticsListManager slm = new StatisticsListManager(filterListManager, stats);
102 99
			slm.addTailFilter(tailTrim, 0D, removeEnds, stats);
103 100
		}
104
		
105
        RasterFilter filter = null;
106
        
107
        switch (filterList.getDataTypeInFilter(fName, insertionMode)) {
108
        case IBuffer.TYPE_IMAGE:
109
            //filter = new LinearEnhancementImageFilter();
110
            break;
111
        case IBuffer.TYPE_SHORT:
112
        	filter = new LinearEnhancementShortFilter();
113
            break;
114
        case IBuffer.TYPE_USHORT:
115
        case IBuffer.TYPE_INT:
116
        	//filter = new LinearEnhancementIntegerFilter();
117
            break;
118
        case IBuffer.TYPE_FLOAT:
119
        	filter = new LinearEnhancementFloatFilter();
120
            break;
121
        case IBuffer.TYPE_DOUBLE:
122
        	filter = new LinearEnhancementDoubleFilter();
123
            break;
124
        }
125 101

  
126
        if(filter != null){
127
        	filter.addParam("stats", stats);
128
	        if (removeEnds) {
129
	        	filter.addParam("remove", new Boolean(true));
130
	        } else {
131
	        	filter.addParam("remove", new Boolean(false));
132
	        }
133
	        filter.addParam("tailTrim", new Double(tailTrim));
134
	        filter.addParam("renderBands", renderBands);
135
	        
136
	        if(insertionMode == RasterFilterList.MODIFY_LAST) {
137
				if(filterList.isActive(fName)) {
102
		RasterFilter filter = null;
103

  
104
		switch (filterList.getDataTypeInFilter(fName, insertionMode)) {
105
			case IBuffer.TYPE_IMAGE:
106
				// filter = new LinearEnhancementImageFilter();
107
				break;
108
			case IBuffer.TYPE_SHORT:
109
				filter = new LinearEnhancementShortFilter();
110
				break;
111
			case IBuffer.TYPE_USHORT:
112
			case IBuffer.TYPE_INT:
113
				// filter = new LinearEnhancementIntegerFilter();
114
				break;
115
			case IBuffer.TYPE_FLOAT:
116
				filter = new LinearEnhancementFloatFilter();
117
				break;
118
			case IBuffer.TYPE_DOUBLE:
119
				filter = new LinearEnhancementDoubleFilter();
120
				break;
121
		}
122

  
123
		if (filter != null) {
124
			filter.addParam("stats", stats);
125
			if (removeEnds) {
126
				filter.addParam("remove", new Boolean(true));
127
			} else {
128
				filter.addParam("remove", new Boolean(false));
129
			}
130
			filter.addParam("tailTrim", new Double(tailTrim));
131
			filter.addParam("renderBands", renderBands);
132

  
133
			if (insertionMode == RasterFilterList.MODIFY_LAST) {
134
				if (filterList.isActive(fName)) {
138 135
					filterList.replace(filter, fName);
139 136
					return;
140 137
				}
141 138
			}
142 139
			filterList.add(filter);
143
        }
144
    }
140
		}
141
	}
145 142

  
146 143
	/**
147
	 * Obtiene un Array de Strings a partir de una pila de filtros. Cada elemento del array
148
	 * tendr? la forma de elemento=valor.
144
	 * Obtiene un Array de Strings a partir de una pila de filtros. Cada elemento
145
	 * del array tendr? la forma de elemento=valor.
149 146
	 */
150
	
151 147
	public ArrayList getStringsFromFilterList(ArrayList filterList, RasterFilter rf) {
152 148
		if (rf instanceof LinearEnhancementFilter) {
153
            filterList.add("filter.enhanced.active=true");
154
            filterList.add("filter.enhanced.tailTrim=" + ((LinearEnhancementFilter) rf).getTailTrim().toString());
155
            StringBuffer values = new StringBuffer();
156
            for (int i = 0; i < ((LinearEnhancementFilter) rf).renderBands.length; i++) {
149
			filterList.add("filter.enhanced.active=true");
150
			filterList.add("filter.enhanced.tailTrim=" + ((LinearEnhancementFilter) rf).getTailTrim().toString());
151
			StringBuffer values = new StringBuffer();
152
			for (int i = 0; i < ((LinearEnhancementFilter) rf).renderBands.length; i++) {
157 153
				values.append(((LinearEnhancementFilter) rf).renderBands[i]);
158
            	if(i < ((LinearEnhancementFilter) rf).renderBands.length - 1)
159
            		values.append(",");
160
            }
161
            filterList.add("filter.enhanced.renderbands=" + values.toString());
162
            filterList.add("filter.enhanced.remove=" + ((LinearEnhancementFilter) rf).getRemoveEnds().toString());
154
				if (i < ((LinearEnhancementFilter) rf).renderBands.length - 1)
155
					values.append(",");
156
			}
157
			filterList.add("filter.enhanced.renderbands=" + values.toString());
158
			filterList.add("filter.enhanced.remove=" + ((LinearEnhancementFilter) rf).getRemoveEnds().toString());
163 159
		}
164
					
160

  
165 161
		return filterList;
166 162
	}
167 163

  
......
170 166
	 * @see org.gvsig.raster.grid.filter.IRasterFilterListManager#createFilterListFromStrings(java.util.ArrayList, java.lang.String, int)
171 167
	 */
172 168
	public int createFilterListFromStrings(ArrayList filters, String fil, int filteri) {
173
		 if (	fil.startsWith("filter.enhanced.active") &&
174
				RasterFilterListManager.getValue(fil).equals("true")) {
175
             filters.remove(filteri);
176
             double tailTrim = 0D;
177
             int[] renderBands = new int[]{0, 0, 0};
169
		if (fil.startsWith("filter.enhanced.active") && RasterFilterListManager.getValue(fil).equals("true")) {
170
			filters.remove(filteri);
171
			double tailTrim = 0D;
172
			int[] renderBands = new int[] { 0, 0, 0 };
178 173

  
179
             for (int propFilter = 0;propFilter < filters.size();propFilter++) {
180
                 String elem = (String) filters.get(propFilter);
174
			for (int propFilter = 0; propFilter < filters.size(); propFilter++) {
175
				String elem = (String) filters.get(propFilter);
181 176

  
182
                 if (elem.startsWith("filter.enhanced.tailTrim")) {
183
                	 try{
184
                		 tailTrim = new Double(RasterFilterListManager.getValue(elem)).doubleValue();
185
                	 }catch(NumberFormatException ex){
186
                		 //tailTrim sigue valiendo 0
187
                	 }
188
                 }
189
             
190
                 if (elem.startsWith("filter.enhanced.renderbands")) {
191
                	 String value = RasterFilterListManager.getValue(elem);
192
                	 String[] valueList = value.split(",");
193
                	 renderBands = new int[valueList.length];
194
                	 for (int i = 0; i < renderBands.length; i++) {
195
                		 try {
196
                			 renderBands[i] = Integer.parseInt(valueList[i]);
197
                		 } catch(NumberFormatException e) {
198
                			 //No a?ade el valor
199
                		 }
200
                	 }
201
                	 //filters.remove(propFilter);
202
                     //propFilter--;
203
                 }
204
                 
205
                 if (elem.startsWith("filter.enhanced.remove")) {
206
                     addEnhancedFilter(Boolean.valueOf(RasterFilterListManager.getValue(elem)).booleanValue(), stats, tailTrim, RasterFilterList.ADD_END, renderBands);
207
                     filters.remove(propFilter);
208
                     propFilter--;
209
                 }
210
             }
177
				if (elem.startsWith("filter.enhanced.tailTrim")) {
178
					try {
179
						tailTrim = new Double(RasterFilterListManager.getValue(elem)).doubleValue();
180
					} catch (NumberFormatException ex) {
181
						// tailTrim sigue valiendo 0
182
					}
183
				}
211 184

  
212
             filteri = -1;
213
         }
214
		 return filteri;
185
				if (elem.startsWith("filter.enhanced.renderbands")) {
186
					String value = RasterFilterListManager.getValue(elem);
187
					String[] valueList = value.split(",");
188
					renderBands = new int[valueList.length];
189
					for (int i = 0; i < renderBands.length; i++) {
190
						try {
191
							renderBands[i] = Integer.parseInt(valueList[i]);
192
						} catch (NumberFormatException e) {
193
							// No a?ade el valor
194
						}
195
					}
196
					// filters.remove(propFilter);
197
					// propFilter--;
198
				}
199

  
200
				if (elem.startsWith("filter.enhanced.remove")) {
201
					addEnhancedFilter(Boolean.valueOf(RasterFilterListManager.getValue(elem)).booleanValue(), stats, tailTrim, RasterFilterList.ADD_END, renderBands);
202
					filters.remove(propFilter);
203
					propFilter--;
204
				}
205
			}
206

  
207
			filteri = -1;
208
		}
209
		return filteri;
215 210
	}
216 211

  
217 212
	/*
......
234 229
				if (params.getParam(i).id.equals("RemoveEnds"))
235 230
					removeEnds = new Boolean(params.getParam(i).defaultValue).booleanValue();
236 231
				if (params.getParam(i).id.equals("TailTrim"))
237
					tailTrim = Math.round(Double.parseDouble(params.getParam(i).defaultValue) / 100.0);
232
					tailTrim = Double.parseDouble(params.getParam(i).defaultValue) / 100.0;
238 233
			}
239 234

  
240 235
			addEnhancedFilter(removeEnds, (IStatistics) filterList.getParam("IStatistics"), 
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterProcess.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
*
3
* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
*/
19
package org.gvsig.rastertools.filter;
20

  
21
import org.gvsig.gui.beans.incrementabletask.IIncrementable;
22
import org.gvsig.gui.beans.incrementabletask.IncrementableEvent;
23
import org.gvsig.gui.beans.incrementabletask.IncrementableListener;
24
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
25
/**
26
 * 
27
 *
28
 * @version 24/05/2007
29
 * @author Borja S?nchez Zamorano (borja.sanchez@iver.es)
30
 */
31
public class FilterProcess implements Runnable, IIncrementable, IncrementableListener {
32
	IncrementableTask incrementableTask = null;
33

  
34
	/*
35
	 * (non-Javadoc)
36
	 * @see java.lang.Runnable#run()
37
	 */
38
	public void run() {
39
	}
40

  
41
	/**
42
	 * Definir el IncrementableTask 
43
	 * @param value
44
	 */
45
	public void setIncrementableTask(IncrementableTask value) {
46
		incrementableTask = value;
47
		incrementableTask.addIncrementableListener(this);
48
	}
49

  
50
	/*
51
	 * (non-Javadoc)
52
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLabel()
53
	 */
54
	public String getLabel() {
55
		return null;
56
	}
57

  
58
	/*
59
	 * (non-Javadoc)
60
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLog()
61
	 */
62
	public String getLog() {
63
		return null;
64
	}
65

  
66
	/*
67
	 * (non-Javadoc)
68
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getPercent()
69
	 */
70
	public int getPercent() {
71
		return 0;
72
	}
73

  
74
	/*
75
	 * (non-Javadoc)
76
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getTitle()
77
	 */
78
	public String getTitle() {
79
		return null;
80
	}
81

  
82
	/*
83
	 * (non-Javadoc)
84
	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
85
	 */
86
	public void actionCanceled(IncrementableEvent e) {
87
	}
88

  
89
	/*
90
	 * (non-Javadoc)
91
	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionResumed(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
92
	 */
93
	public void actionResumed(IncrementableEvent e) {
94
	}
95

  
96
	/*
97
	 * (non-Javadoc)
98
	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionSuspended(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
99
	 */
100
	public void actionSuspended(IncrementableEvent e) {
101
	}
102
}
0 103

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

  
52 52
import com.iver.cit.gvsig.fmap.ViewPort;
53 53

  
54
/**
55
 * <code>FilterListener</code> es la clase donde se procesar? gran parte del
56
 * c?digo que controla el panel para el manejo de un layer en la aplicaci?n de
57
 * filtros.
58
 *
59
 * @version 24/05/2007
60
 * @author Borja S?nchez Zamorano (borja.sanchez@iver.es)
61
 */
54 62
public class FilterListener implements ActionListener, IClientImageNavigator, TreeListComponentListener, TreeListChangeListener, PropertiesComponentListener {
55 63
	FilterPanel 			filterPanel = null;
56 64
	public int 				actualParam = -1;
......
140 148
  	return -1;
141 149
	}
142 150

  
151
  /**
152
   * Cambiar el panel de propiedades central por el nuevo panel, segun el filtro
153
   * seleccionado que se pasa por par?metro.
154
   * @param filter
155
   */
143 156
	public void changePanel(String filter) {
144 157
		int posParam = getParamSelected(filter);
145 158

  
......
184 197
				}
185 198
			}
186 199
		}
187

  
188 200
		filterPanel.setNewPropertiesComponent(propertiesComponent, filter);
189 201
	}
190
	
202

  
203
	/**
204
	 * A?adir un nuevo Params a la lista de Params que podemos manejar. Un Params
205
	 * equivale a un filtro cargado. El hecho de trabajar con Params y no con
206
	 * filtros, simplifica totalmente el panel. Sin tener que depender de los
207
	 * filtros nada m?s que para el momento de dibujado o guardado.
208
	 * @param name
209
	 * @param params
210
	 * @param classFilter
211
	 */
191 212
	public void addNewParam(String name, Params params, Class classFilter) {
192 213
		ParamStruct param = new ParamStruct();
193 214
		param.setFilterName(name);
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/ui/FilterDialog.java
95 95
	 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
96 96
	 */
97 97
	public void actionButtonPressed(ButtonsPanelEvent e) {
98
		//Al pulsar Aceptar o aplicar se a?aden los filtros
98
		//Al pulsar Aceptar o Aplicar se a?aden los filtros
99 99
		if (e.getButton() == ButtonsPanel.BUTTON_APPLY || e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
100 100
		}
101 101
		
102
		//Al pulsar Cerrar o Aceptar la ventana se cierra
103
		if (e.getButton() == ButtonsPanel.BUTTON_CLOSE || e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
102
		//Al pulsar Cancelar o Aceptar la ventana se cierra
103
		if (e.getButton() == ButtonsPanel.BUTTON_CANCEL || e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
104 104
			close();
105 105
		}
106 106
	}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/ui/FilterPanel.java
46 46
import com.iver.andami.PluginServices;
47 47
import com.iver.cit.gvsig.fmap.layers.FLayer;
48 48
/**
49
 * 
49
 * <code>FilterPanel</code> es el panel para filtros donde se construye sus
50
 * componentes visuales b?sicos.
50 51
 *
51 52
 * @version 18/05/2007
52 53
 * @author Borja S?nchez Zamorano (borja.sanchez@iver.es)
......
135 136
		return treeListContainer;
136 137
	}
137 138

  
139
	/**
140
	 * Obtener el PropertiesComponent del panel de filtros, en caso de no existir,
141
	 * lo crea.
142
	 * @return
143
	 */
138 144
	public PropertiesComponent getPropertiesComponent() {
139 145
		if (propertiesComponent == null) {
140 146
			propertiesComponent = new PropertiesComponent();
......
144 150
		return propertiesComponent;
145 151
	}
146 152

  
153
	/**
154
	 * Devuelve el panel donde estar? el widget de preview
155
	 * @return
156
	 */
147 157
	private JPanel getPPreview() {
148 158
		if (pPreview == null) {
149 159
			pPreview = new JPanel();
......
184 194
		return jCBShowFilters;
185 195
	}
186 196

  
197
	/**
198
	 * Devuelve el Widget del preview, en caso de no existir lo crea.
199
	 * @return
200
	 */
187 201
	private ImageNavigator getImageNavigator() {
188 202
		if (imageNavigator == null) {
189 203
			imageNavigator = new ImageNavigator(getFilterListener());
......
193 207
		return imageNavigator;
194 208
	}
195 209

  
210
	/**
211
	 * Devuelve el panel de Opciones, en caso de no existir, lo crea.
212
	 * @return
213
	 */
196 214
	private JPanel panelOptions() {
197 215
		if (jPanel1 == null) {
198 216
			JPanel jPanel2 = null;
......
285 303
		return jPanel1;
286 304
	}
287 305

  
306
	/**
307
	 * Devuelve el componente <code>FilterListener</code>, que contendr? el
308
	 * proceso en si del panel
309
	 */
288 310
	private FilterListener getFilterListener() {
289 311
		if (filterListener == null) {
290 312
			filterListener = new FilterListener(this);
......
293 315
		return filterListener;
294 316
	}
295 317

  
318
	/**
319
	 * Devuelve el FLayer asignado al panel
320
	 * @return
321
	 */
296 322
	public FLayer getLayer() {
297 323
		return fLayer;
298 324
	}
299 325

  
326
	/**
327
	 * Definir el FLayer del panel, haciendo todas las cargas necesarias despues
328
	 * de especificarlo.
329
	 * @param layer
330
	 */
300 331
	public void setLayer(FLayer layer) {
301 332
		this.fLayer = layer;
302 333

  
......
308 339
		Rendering rendering = ((FLyrRasterSE) layer).getRender();
309 340
		RasterFilterList rfl = rendering.getFilterList();
310 341

  
311
		System.out.println("-");
312 342
		int i=0;
313 343
		while (rfl.get(i) != null) {
314
//			System.out.println(rfl.get(i).getName());
315
			
316 344
			DefaultListModel list = (DefaultListModel) getTreeListContainer().getListModel();
317 345
			list.addElement("?" + rfl.get(i).getName() + "!");
318 346
			for (int j = 0; j < getFilterListener().getParamsList().size(); j++) {
......
324 352
			i++;
325 353
		}
326 354
		
327
		// Selecciona el primer item
355
		// Selecciona el primer item del arbol
328 356
		TreeListContainer lc = getTreeListContainer();
329 357
		lc.getTree().expandRow(1);
330 358
		lc.getTree().setSelectionInterval(2, 2);
......
336 364
	JRadioButton jRadioButton4;
337 365
	JPanel jPanel1 = null;
338 366

  
367
	/**
368
	 * Poner los estados de los RadioButton en caso de que cambien de valor
369
	 * @param evt
370
	 */
339 371
	private void jRadioButton2ItemStateChanged(java.awt.event.ItemEvent evt) {
340 372
		if (jRadioButton2.getSelectedObjects() != null) {
341 373
	    jRadioButton3.setEnabled(true);
......
361 393
		getImageNavigator().updateBuffer();
362 394
	}
363 395
  
396
  /**
397
   * Asignar un nuevo componente de PropertiesComponent, eliminando el anterior
398
   * que hubiera.
399
   * @param component
400
   * @param name
401
   */
364 402
  public void setNewPropertiesComponent(PropertiesComponent component, String name) {
365 403
  	getPropertiesComponent().setVisible(false);
366 404
		this.remove(propertiesComponent);

Also available in: Unified diff