Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / enhanced / graphics / InputHistogram.java @ 2585

History | View | Annotate | Download (5.8 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.tools.app.basic.tool.enhanced.graphics;
23

    
24
import java.awt.Color;
25
import java.awt.Component;
26
import java.util.List;
27

    
28
import javax.swing.JPanel;
29

    
30
import org.gvsig.fmap.dal.coverage.datastruct.BufferHistogram;
31
import org.gvsig.raster.fmap.layers.FLyrRaster;
32
import org.gvsig.raster.swing.RasterSwingLocator;
33
import org.gvsig.raster.swing.gcanvas.BaseFunction;
34
import org.gvsig.raster.swing.gcanvas.DensitySlicingLine;
35
import org.gvsig.raster.swing.gcanvas.DrawableElement;
36
import org.gvsig.raster.swing.gcanvas.GCanvas;
37
import org.gvsig.raster.swing.gcanvas.GraphicHistogram;
38
import org.gvsig.raster.swing.gcanvas.LogaritmicExponentialLine;
39
import org.gvsig.raster.swing.gcanvas.SquareRootPowLine;
40
import org.gvsig.raster.swing.gcanvas.StraightLine;
41
import org.gvsig.raster.tools.app.basic.tool.enhanced.ui.EnhancedListener;
42
/**
43
 * Componente con el histograma de entrada.
44
 * 
45
 * @author Nacho Brodin nachobrodin@gmail.com
46
 */
47
public class InputHistogram extends HistogramGraphicBase {
48
        private static final long serialVersionUID = 681848373747974757L;
49
        
50
        /**
51
         * Crea una nueva instancia de InputHistogram.
52
         */
53
        public InputHistogram(BufferHistogram hist, FLyrRaster lyr, double[] minList, double[] maxList) {
54
                super(hist, lyr, minList, maxList);
55
        }
56
        
57
        public GCanvas getCanvas() {
58
                if(canvas == null) {
59
                        canvas = RasterSwingLocator.getSwingManager().createGraphicCanvas(Color.BLACK);
60
                        
61
                        canvas.addDrawableElement(canvas.createHistogramForGCanvas(null, Color.white));
62
                        canvas.addDrawableElement(canvas.createMinMaxLinesForGCanvas(minMaxLineColor));
63
                        canvas.addDrawableElement((DrawableElement)canvas.createStraightLineForGCanvas(functionColor));
64
                        canvas.addDrawableElement(canvas.createBorderLayerForGCanvas(borderColor));
65
                        canvas.addDrawableElement(canvas.createInfoLayerForGCanvas(Color.WHITE));
66
                }
67
                return canvas;
68
        }
69
        
70
        /**
71
         * Asigna el listener para gestionar el evento de movimiento de gr?ficos
72
         * @param listener
73
         */
74
        public void setListener(EnhancedListener listener) {
75
                getCanvas().addValueChangedListener(listener);
76
        }
77
        
78
        /**
79
         * Asigna el nivel de la funci?n si esta es density slicing.
80
         * @param level
81
         */
82
        public void setLevel(int level) {
83
                if (histogramDrawed != null)
84
                        histogramDrawed.setLevel(level);
85
                ((Component)getCanvas()).repaint();
86
        }
87
        
88
        /**
89
         * Asigna el tipo de funci?n Lineal, Exponencial, logaritmica, density slicing, campana de gauss, 
90
         * raiz cuadrada o ecualizaci?n.
91
         * 
92
         * @param type Tipo de histograma. El valor est? definido en las constantes de GraphicHistogram
93
         */
94
        public void setFunction(int function) {
95
                if (histogramDrawed == null)
96
                        return;
97

    
98
                BaseFunction baseFunction = histogramDrawed.getBaseFunction();
99
                
100
                List<DrawableElement> listBaseFunc = canvas.getDrawableElements(BaseFunction.class);
101
                if(listBaseFunc != null && listBaseFunc.get(0) instanceof DrawableElement)
102
                        ((DrawableElement)listBaseFunc.get(0)).setDrawing(true);
103
                
104
                boolean regen = false;
105
                switch (function) {
106
                        case GraphicHistogram.FUNCTION_DENSITY:
107
                                if (!baseFunction.getClass().equals(DensitySlicingLine.class))
108
                                        baseFunction = canvas.createDensitySliceForGCanvas(
109
                                                        ((DrawableElement)histogramDrawed.getBaseFunction()).getColor(), -1);
110
                                break;
111
                        case GraphicHistogram.FUNCTION_LINEAL:
112
                                if (!baseFunction.getClass().equals(StraightLine.class))
113
                                        baseFunction = canvas.createStraightLineForGCanvas(((DrawableElement)histogramDrawed.getBaseFunction()).getColor());
114
                                break;
115
                        case GraphicHistogram.FUNCTION_LOGARIT:
116
                                regen = false;
117
                                if (!baseFunction.getClass().equals(LogaritmicExponentialLine.class)) {
118
                                        regen = true;
119
                                } else {
120
                                        if (!((LogaritmicExponentialLine) baseFunction).isLogaritmical())
121
                                                regen = true;
122
                                }
123
                                if (regen)
124
                                        baseFunction = canvas.createLogaritmicExponentialLineForGCanvas(
125
                                                        ((DrawableElement)histogramDrawed.getBaseFunction()).getColor(), 1.0);
126
                                break;
127
                        case GraphicHistogram.FUNCTION_EXPONENT:
128
                                regen = false;
129
                                if (!baseFunction.getClass().equals(LogaritmicExponentialLine.class)) {
130
                                        regen = true;
131
                                } else {
132
                                        if (!((LogaritmicExponentialLine) baseFunction).isExponencial())
133
                                                regen = true;
134
                                }
135
                                if (regen)
136
                                        baseFunction = canvas.createLogaritmicExponentialLineForGCanvas(
137
                                                        ((DrawableElement)histogramDrawed.getBaseFunction()).getColor(), -1.0);
138
                                break;
139
                        case GraphicHistogram.FUNCTION_SQUARE_ROOT:
140
                                if (!baseFunction.getClass().equals(SquareRootPowLine.class))
141
                                        baseFunction = canvas.createSquareRootPowLineForGCanvas(
142
                                                        ((DrawableElement)histogramDrawed.getBaseFunction()).getColor(), 1.0);
143
                                break;
144
                        case GraphicHistogram.FUNCTION_NONE:
145
                                ((DrawableElement)listBaseFunc.get(0)).setDrawing(false);                
146
                                break;
147
                }
148
                                        
149
                histogramDrawed.setBaseFunction(baseFunction);
150
                getCanvas().replaceDrawableElement(((DrawableElement)histogramDrawed.getBaseFunction()), BaseFunction.class);
151
                
152
                // Fuerza un repintado inmediato para actualizar los valores
153
                getCanvas().paint(((JPanel)getCanvas()).getGraphics());
154
        }
155
}