Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / ui / RasterFilterDialog.java @ 11507

History | View | Annotate | Download (9.37 KB)

1
/*
2
 * Created on 25-jul-2006
3
 *
4
 * To change the template for this generated file go to
5
 * Window>Preferences>Java>Code Generation>Code and Comments
6
 */
7
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
8
 *
9
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
10
 *
11
 * This program is free software; you can redistribute it and/or
12
 * modify it under the terms of the GNU General Public License
13
 * as published by the Free Software Foundation; either version 2
14
 * of the License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software
23
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
24
 */
25
package org.gvsig.rastertools.filter.ui;
26

    
27
import java.awt.BorderLayout;
28

    
29
import javax.swing.JPanel;
30
import javax.swing.ListModel;
31

    
32
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
33
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
34
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
35
import org.gvsig.gui.beans.treelist.TreeListContainer;
36

    
37
import com.iver.andami.PluginServices;
38
import com.iver.andami.ui.mdiManager.IWindow;
39
import com.iver.andami.ui.mdiManager.WindowInfo;
40
import com.iver.cit.gvsig.fmap.layers.FLayer;
41

    
42
/**
43
 * Dialogo para los filtros de raster.
44
 * 
45
 * @author Nacho Brodin <brodin_ign@gva.es>
46
 */
47
public class RasterFilterDialog extends JPanel implements IWindow, ButtonsPanelListener {
48
        private static final long serialVersionUID = 7152780112689637266L;
49

    
50
        private int                                                         width = 0;
51
        private int                                                         height = 0;
52
        private RasterFilterPanel filterPanel = null;
53
        
54
        /**
55
         * Constructor 
56
         * @param width        Ancho del panel
57
         * @param height Alto del panel
58
         * @param stackManager Gestor de la pila de filtros
59
         */
60
        public RasterFilterDialog(FLayer layer, int width, int height) {
61
                this.width = width;
62
                this.height = height;
63
                
64
                this.setLayout(new BorderLayout());
65
                this.add(getPFilter(), BorderLayout.CENTER);
66
        }
67
        
68
        public void setLayer(FLayer layer) {
69
                filterPanel.setLayer(layer);
70
        }
71
                
72
        /**
73
         * Obtiene el panel de filtros
74
         * @return HistogramPanel
75
         */
76
        public RasterFilterPanel getPFilter() {
77
                if (filterPanel == null) {
78
                        filterPanel = new RasterFilterPanel();
79
                        filterPanel.addButtonPressedListener(this);
80
                }
81
                return filterPanel;
82
        }
83
        
84
        /**
85
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
86
         */
87
        public WindowInfo getWindowInfo() {
88
                WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
89
                m_viewinfo.setTitle(PluginServices.getText(this, "Filtros"));
90
                m_viewinfo.setWidth(width);
91
                m_viewinfo.setHeight(height);
92
                return m_viewinfo;
93
        }
94

    
95
        /**
96
         * A?ade un filtro desde el dialogo en la pila de filtros a partir de los par?metros
97
         * del panel.
98
         * @param filterName Nombre del filtro.
99
         */
100
        private void addFilterByName(String filterName) {
101
/*
102
                if (filterName.equals("sobel") || filterName.equals("roberts") || filterName.equals("prewitt") || filterName.equals("frei_chen")) {
103
                        // stackManager.removeFilter(FirstDerivativeStackManager.firstDerivative);
104
                        FirstDerivativePanel panel = (FirstDerivativePanel) RasterFilterPanel.getPanel(PluginServices.getText(this, filterName));
105
                        int umbral = 0;
106
                        try {
107
                                if (panel.getCbUmbralizar().isSelected())
108
                                        umbral = Integer.valueOf(panel.getTUmbral().getText()).intValue();
109
                        } catch (NumberFormatException ex) {
110
                                // No se ha podido leer el umbral y no hacemos nada. Tendr? el valor por
111
                                // defecto
112
                        }
113
                        boolean compare = panel.getCbUmbralizar().isSelected();
114
                        FirstDerivativeStackManager manager = (FirstDerivativeStackManager) stackManager.getManagerByClass(FirstDerivativeStackManager.class);
115

116
                        int operator = -1;
117
                        if (filterName.equals("sobel"))
118
                                operator = FirstDerivativeFilter.TYPE_SOBEL;
119
                        else if (filterName.equals("roberts"))
120
                                operator = FirstDerivativeFilter.TYPE_ROBERTS;
121
                        else if (filterName.equals("prewitt"))
122
                                operator = FirstDerivativeFilter.TYPE_PREWITT;
123
                        else if (filterName.equals("frei_chen"))
124
                                operator = FirstDerivativeFilter.TYPE_FREICHEN;
125

126
                        manager.addFirstDerivativeFilter(umbral, operator, compare, filterName);
127

128
                } else if (filterName.equals("laplace")) {
129
                        KernelFiltersPanel panel = (KernelFiltersPanel) RasterFilterPanel.getPanel(PluginServices.getText(this, filterName));
130
                        ConvolutionStackManager manager = (ConvolutionStackManager) stackManager.getManagerByClass(ConvolutionStackManager.class);
131
                        double k[][] = null;
132
                        double k3[][] = { { -1, -1, -1 }, { -1, 8, -1 }, { -1, -1, -1 } };
133
                        double k5[][] = { { 0, 0, -1, 0, 0 }, { 0, -1, -2, -1, 0 }, { -1, -2, 16, -2, -1 }, { 0, -1, -2, -1, 0 }, { 0, 0, -1, 0, 0 } };
134
                        switch (Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()) {
135
                                case 3:
136
                                        k = k3;
137
                                        break;
138
                                case 5:
139
                                        k = k5;
140
                                        break;
141
                        }
142

143
                        manager.addConvolutionFilter(new Kernel(k), 0, filterName);
144

145
                } else if (filterName.equals("gauss")) {
146
                        KernelFiltersPanel panel = (KernelFiltersPanel) RasterFilterPanel.getPanel(PluginServices.getText(this, filterName));
147
                        ConvolutionStackManager manager = (ConvolutionStackManager) stackManager.getManagerByClass(ConvolutionStackManager.class);
148
                        double k[][] = null;
149
                        double k3[][] = { { 1, 4, 1 }, { 4, 12, 4 }, { 1, 4, 1 } };
150
                        double k5[][] = { { 1, 2, 3, 2, 1 }, { 2, 7, 11, 7, 2 }, { 3, 11, 17, 11, 3 }, { 2, 7, 11, 7, 2 }, { 1, 2, 3, 2, 1 } };
151
                        switch (Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()) {
152
                                case 3:
153
                                        k = k3;
154
                                        break;
155
                                case 5:
156
                                        k = k5;
157
                                        break;
158
                        }
159

160
                        manager.addConvolutionFilter(new Kernel(k), 0, filterName);
161

162
                } else if (filterName.equals("media")) {
163
                        KernelFiltersPanel panel = (KernelFiltersPanel) RasterFilterPanel.getPanel(PluginServices.getText(this, filterName));
164
                        int ladoVentana = Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue();
165
                        ConvolutionStackManager manager = (ConvolutionStackManager) stackManager.getManagerByClass(ConvolutionStackManager.class);
166

167
                        double k[][] = new double[ladoVentana][ladoVentana];
168
                        for (int i = 0; i < ladoVentana; i++)
169
                                for (int j = 0; j < ladoVentana; j++)
170
                                        k[i][j] = 1;
171
                        manager.addConvolutionFilter(new Kernel(k), 0, filterName);
172

173
                } else if (filterName.equals("mediana")) {
174
                        KernelFiltersPanel panel = (KernelFiltersPanel) RasterFilterPanel.getPanel(PluginServices.getText(this, filterName));
175
                        MedianStackManager manager = (MedianStackManager) stackManager.getManagerByClass(MedianStackManager.class);
176
                        manager.addMedianFilter(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue());
177

178
                } else if (filterName.equals("paso_bajo")) {
179
                        ConvolutionStackManager manager = (ConvolutionStackManager) stackManager.getManagerByClass(ConvolutionStackManager.class);
180
                        double k[][] = { { 0, 1, 0 }, { 1, 6, 1 }, { 0, 1, 0 } };
181
                        manager.addConvolutionFilter(new Kernel(k), 0, filterName);
182
                }
183
*/
184
        }
185
        
186
        /**
187
         *Quita los filtros de la pila que no est?n en la lista. Esto solo tiene efecto para aquellos filtros con nombre
188
         *ya que son los filtros de usuario. Los filtros que no tienen nombre (filterName) no se visualizan en la lista por
189
         *lo que no son eliminados de esta.
190
         *@param stack Pila de filtros.
191
         */
192
/*
193
        private void removeFiltersFromStack(RasterFilterStack stack){
194
                //Recorremos la pila de filtros y eliminamos los que est?n "registrados" en el interfaz de filtros.
195
                for(int iFilter = 0; iFilter < stack.lenght(); iFilter ++){
196
                        RasterFilter rf = stack.get(iFilter);
197
                        if(!rf.getName().equals("") && getSelector().getMap().containsValue(rf.getName())){
198
                                        stack.removeFilter(rf);
199
                                        iFilter--;
200
                        }
201
                }
202
        }
203
*/
204
        
205
        /**
206
         * Obtiene el panel con el selector de filtros
207
         * @return TreeListContainer
208
         */
209
        public TreeListContainer getSelector() {
210
                return filterPanel.getPSelector();
211
        }
212
        
213
        //-------------------------------------------
214
        //M?TODOS DEL COMPONENTE
215
        
216
        /**
217
         * Asigna el panel visible en el dialogo
218
         * @param pos Posici?n del panel
219
         */
220
        public void setVisiblePanel(int pos) {
221
                getPFilter().setVisiblePanel(pos);
222
        }
223
        
224
        /**
225
         * Obtiene el panel visible
226
         * @return panel visible
227
         */
228
        public JPanel getVisiblePanel() {
229
                return getPFilter().getVisiblePanel();
230
        }
231
        
232
        /**
233
         * Obtiene el panel de la posici?n solicitada
234
         * @param pos Posici?n del panel solicitado
235
         * @return panel solicitado
236
         */
237
        public JPanel getPanel(int pos) {
238
                return RasterFilterPanel.getPanel(pos);
239
        }
240

    
241
        public void actionButtonPressed(ButtonsPanelEvent e) {
242
                //Al pulsar Aceptar o aplicar se a?aden los filtros
243
                if (e.getButton() == ButtonsPanel.BUTTON_APPLY || e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
244
                        ListModel model = getSelector().getList().getModel();
245
                        for(int iListFilter = 0; iListFilter < model.getSize(); iListFilter ++) {
246
                                String filterName = getSelector().getMap().get(model.getElementAt(iListFilter).toString()).toString();
247
                                addFilterByName(filterName);
248
                        }
249
                }
250
                
251
                //Al pulsar Cerrar o Aceptar la ventana se cierra
252
                if (e.getButton() == ButtonsPanel.BUTTON_CLOSE || e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
253
                        try {
254
                                PluginServices.getMDIManager().closeWindow(RasterFilterDialog.this);
255
                        } catch (ArrayIndexOutOfBoundsException ex) {
256
                                //Si la ventana no se puede eliminar no hacemos nada
257
                        }
258
                }
259
        }
260
}