Revision 2585
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/ui/EnhancedListener.java | ||
---|---|---|
25 | 25 |
import java.awt.Component; |
26 | 26 |
import java.awt.event.ActionEvent; |
27 | 27 |
import java.awt.event.ActionListener; |
28 |
import java.awt.geom.Point2D; |
|
28 | 29 |
import java.io.File; |
30 |
import java.util.ArrayList; |
|
29 | 31 |
import java.util.List; |
30 | 32 |
|
31 | 33 |
import org.gvsig.fmap.dal.coverage.RasterLocator; |
... | ... | |
51 | 53 |
import org.gvsig.raster.swing.gcanvas.GraphicHistogram; |
52 | 54 |
import org.gvsig.raster.swing.gcanvas.IGCanvasListener; |
53 | 55 |
import org.gvsig.raster.swing.gcanvas.LogaritmicExponentialLine; |
56 |
import org.gvsig.raster.swing.gcanvas.MinMaxLines; |
|
54 | 57 |
import org.gvsig.raster.swing.gcanvas.SquareRootPowLine; |
55 | 58 |
import org.gvsig.raster.swing.gcanvas.StraightLine; |
56 | 59 |
import org.gvsig.raster.tools.app.basic.RasterToolsUtil; |
... | ... | |
310 | 313 |
} |
311 | 314 |
|
312 | 315 |
/** |
316 |
* Gets the list of points from the stretches |
|
317 |
* @param stretch |
|
318 |
* @return |
|
319 |
*/ |
|
320 |
private List<Point2D> getPointListFromStretches(Stretch stretch) { |
|
321 |
List<Point2D> pointList = new ArrayList<Point2D>(); |
|
322 |
for (int i = 0; i < stretch.getStretchIn().length; i++) { |
|
323 |
Point2D p = new Point2D.Double( |
|
324 |
(stretch.getStretchIn()[i] - stretch.getMinValue()) / (stretch.getMaxValue() - stretch.getMinValue()), |
|
325 |
stretch.getStretchOut()[i] / 255.0D); |
|
326 |
pointList.add(p); |
|
327 |
} |
|
328 |
simplifyPointList(pointList); |
|
329 |
return pointList; |
|
330 |
} |
|
331 |
|
|
332 |
/** |
|
333 |
* Removes the first and the last point if the coordinate X don't change. |
|
334 |
* @param pointList |
|
335 |
*/ |
|
336 |
private void simplifyPointList(List<Point2D> pointList) { |
|
337 |
int lastPoint = pointList.size() - 1; |
|
338 |
if(pointList.size() > 1) { |
|
339 |
if(pointList.get(lastPoint).getX() == 1 && |
|
340 |
pointList.get(lastPoint).getY() == 1 && |
|
341 |
pointList.get(lastPoint - 1).getY() == 1) { |
|
342 |
pointList.remove(lastPoint); |
|
343 |
} |
|
344 |
} |
|
345 |
|
|
346 |
if(pointList.size() > 1) { |
|
347 |
if(pointList.get(0).getX() == 0 && |
|
348 |
pointList.get(0).getY() == 0 && |
|
349 |
pointList.get(1).getY() == 0) { |
|
350 |
pointList.remove(0); |
|
351 |
} |
|
352 |
} |
|
353 |
} |
|
354 |
|
|
355 |
/** |
|
313 | 356 |
* En la primera carga se define cada banda en los histogramas, para dejarlo en |
314 | 357 |
* su estado logico. |
315 | 358 |
* @param stretch |
... | ... | |
326 | 369 |
if (status == null) |
327 | 370 |
return; |
328 | 371 |
|
372 |
//MinMaxLines linesLayer = status.getMinMaxLines(); |
|
373 |
|
|
329 | 374 |
GCanvas canvas = RasterSwingLocator.getSwingManager().createGraphicCanvas(Color.white); |
330 | 375 |
|
331 | 376 |
switch (stretch.getFunctionType()) { |
... | ... | |
337 | 382 |
baseFunction = canvas.createStraightLineForGCanvas( |
338 | 383 |
((DrawableElement)status.getBaseFunction()).getColor()); |
339 | 384 |
((StraightLine) baseFunction).clearSquares(); |
340 |
for (int i = 0; i < stretch.getStretchIn().length; i++) { |
|
341 |
((StraightLine) baseFunction).addSquare( |
|
342 |
(stretch.getStretchIn()[i] - stretch.getMinValue()) / (stretch.getMaxValue() - stretch.getMinValue()), |
|
343 |
stretch.getStretchOut()[i] / 255.0D); |
|
385 |
List<Point2D> pointList = getPointListFromStretches(stretch); |
|
386 |
|
|
387 |
StraightLine func = ((StraightLine) baseFunction); |
|
388 |
for (int i = 0; i < pointList.size(); i++) { |
|
389 |
func.addSquare(pointList.get(i).getX(), pointList.get(i).getY()); |
|
344 | 390 |
} |
345 | 391 |
break; |
346 | 392 |
case 1: |
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/ui/GraphicsPanel.java | ||
---|---|---|
43 | 43 |
import org.gvsig.fmap.dal.coverage.exception.HistogramException; |
44 | 44 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
45 | 45 |
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer; |
46 |
import org.gvsig.i18n.Messages; |
|
46 | 47 |
import org.gvsig.raster.fmap.layers.FLyrRaster; |
47 | 48 |
import org.gvsig.raster.swing.preview.PreviewBasePanelTab; |
48 |
import org.gvsig.raster.tools.app.basic.RasterToolsUtil; |
|
49 | 49 |
import org.gvsig.raster.tools.app.basic.tool.enhanced.graphics.InputHistogram; |
50 | 50 |
import org.gvsig.raster.tools.app.basic.tool.enhanced.graphics.OutputHistogram; |
51 | 51 |
import org.gvsig.tools.locator.LocatorException; |
... | ... | |
111 | 111 |
*/ |
112 | 112 |
private void init() { |
113 | 113 |
setLayout(new GridBagLayout()); |
114 |
setBorder(javax.swing.BorderFactory.createTitledBorder(null, RasterToolsUtil.getText(this, "histograms"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
|
|
114 |
setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("histograms"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
|
|
115 | 115 |
GridBagConstraints gridBagConstraints = null; |
116 | 116 |
|
117 |
JLabel label1 = new JLabel(RasterToolsUtil.getText(null, "input_hist"));
|
|
117 |
JLabel label1 = new JLabel(Messages.getText("input_hist"));
|
|
118 | 118 |
gridBagConstraints = new GridBagConstraints(); |
119 | 119 |
gridBagConstraints.insets = new Insets(4, 4, 4, 4); |
120 | 120 |
gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; |
... | ... | |
122 | 122 |
label1.setPreferredSize(new Dimension(150, 14)); |
123 | 123 |
add(label1, gridBagConstraints); |
124 | 124 |
|
125 |
JLabel label2 = new JLabel(RasterToolsUtil.getText(null, "output_hist"));
|
|
125 |
JLabel label2 = new JLabel(Messages.getText("output_hist"));
|
|
126 | 126 |
gridBagConstraints = new GridBagConstraints(); |
127 | 127 |
gridBagConstraints.gridx = 2; |
128 | 128 |
gridBagConstraints.gridy = 0; |
... | ... | |
235 | 235 |
controls = new JPanel(); |
236 | 236 |
controls.setLayout(new GridBagLayout()); |
237 | 237 |
|
238 |
llevels = new JLabel(RasterToolsUtil.getText(null, "levels"));
|
|
238 |
llevels = new JLabel(Messages.getText("levels"));
|
|
239 | 239 |
|
240 | 240 |
GridBagConstraints gbc = new GridBagConstraints(); |
241 | 241 |
gbc.weightx = 1; |
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 | ||
---|---|---|
23 | 23 |
|
24 | 24 |
import java.awt.Color; |
25 | 25 |
import java.awt.Component; |
26 |
import java.util.ArrayList;
|
|
26 |
import java.util.List; |
|
27 | 27 |
|
28 | 28 |
import javax.swing.JPanel; |
29 | 29 |
|
... | ... | |
42 | 42 |
/** |
43 | 43 |
* Componente con el histograma de entrada. |
44 | 44 |
* |
45 |
* 20/02/2008 |
|
46 | 45 |
* @author Nacho Brodin nachobrodin@gmail.com |
47 | 46 |
*/ |
48 | 47 |
public class InputHistogram extends HistogramGraphicBase { |
... | ... | |
55 | 54 |
super(hist, lyr, minList, maxList); |
56 | 55 |
} |
57 | 56 |
|
58 |
/* |
|
59 |
* (non-Javadoc) |
|
60 |
* @see org.gvsig.rastertools.enhanced.graphics.HistogramGraphicBase#getCanvas() |
|
61 |
*/ |
|
62 | 57 |
public GCanvas getCanvas() { |
63 | 58 |
if(canvas == null) { |
64 | 59 |
canvas = RasterSwingLocator.getSwingManager().createGraphicCanvas(Color.BLACK); |
... | ... | |
102 | 97 |
|
103 | 98 |
BaseFunction baseFunction = histogramDrawed.getBaseFunction(); |
104 | 99 |
|
105 |
ArrayList<DrawableElement> listBaseFunc = canvas.getDrawableElements(BaseFunction.class);
|
|
100 |
List<DrawableElement> listBaseFunc = canvas.getDrawableElements(BaseFunction.class); |
|
106 | 101 |
if(listBaseFunc != null && listBaseFunc.get(0) instanceof DrawableElement) |
107 | 102 |
((DrawableElement)listBaseFunc.get(0)).setDrawing(true); |
108 | 103 |
|
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/HistogramGraphicBase.java | ||
---|---|---|
24 | 24 |
import java.awt.BorderLayout; |
25 | 25 |
import java.awt.Color; |
26 | 26 |
import java.awt.Component; |
27 |
import java.util.ArrayList;
|
|
27 |
import java.util.List; |
|
28 | 28 |
|
29 | 29 |
import javax.swing.JPanel; |
30 | 30 |
|
... | ... | |
42 | 42 |
/** |
43 | 43 |
* Clase base para los gr?ficos de histogramas de entrada y salida. |
44 | 44 |
* |
45 |
* 20/02/2008 |
|
46 | 45 |
* @author Nacho Brodin nachobrodin@gmail.com |
47 | 46 |
*/ |
48 | 47 |
public abstract class HistogramGraphicBase extends JPanel { |
... | ... | |
54 | 53 |
/** |
55 | 54 |
* Clase para tener guardados los valores de estado de una banda del histograma |
56 | 55 |
* |
57 |
* @version 04/03/2008 |
|
58 |
* @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es) |
|
56 |
* @author BorSanZa - Borja S?nchez Zamorano |
|
59 | 57 |
*/ |
60 | 58 |
public class HistogramStatus { |
61 | 59 |
private double[] histogram = new double[] { 0, 0, 3, 4, 5, 8, 7, 18, 45, 36, 21, 36, 12, 23, 23, 40, 17, 10, 5, 1, 0, 0, 0 }; |
... | ... | |
360 | 358 |
* @param type |
361 | 359 |
*/ |
362 | 360 |
public void setType(int type) { |
363 |
ArrayList<DrawableElement> elements = getCanvas().getDrawableElements(GraphicHistogram.class);
|
|
361 |
List<DrawableElement> elements = getCanvas().getDrawableElements(GraphicHistogram.class); |
|
364 | 362 |
for (int i = 0; i < elements.size(); i++) |
365 | 363 |
((GraphicHistogram) elements.get(i)).setType(type); |
366 | 364 |
} |
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/EnhancedTocMenuEntry.java | ||
---|---|---|
26 | 26 |
import org.gvsig.andami.PluginServices; |
27 | 27 |
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction; |
28 | 28 |
import org.gvsig.app.project.documents.view.toc.ITocItem; |
29 |
import org.gvsig.fmap.IconThemeHelper; |
|
29 | 30 |
import org.gvsig.fmap.dal.coverage.datastruct.BufferHistogram; |
30 | 31 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
32 |
import org.gvsig.i18n.Messages; |
|
31 | 33 |
import org.gvsig.raster.fmap.layers.FLyrRaster; |
32 | 34 |
import org.gvsig.raster.fmap.layers.ILayerState; |
33 | 35 |
import org.gvsig.raster.fmap.layers.IRasterLayerActions; |
34 | 36 |
import org.gvsig.raster.mainplugin.toolbar.IGenericToolBarMenuItem; |
35 |
import org.gvsig.raster.tools.app.basic.RasterToolsUtil; |
|
36 | 37 |
import org.gvsig.raster.tools.app.basic.raster.process.HistogramProcess; |
37 | 38 |
import org.gvsig.raster.tools.app.basic.raster.process.IProcessActions; |
38 | 39 |
import org.gvsig.raster.tools.app.basic.raster.process.StatisticsProcess; |
... | ... | |
77 | 78 |
} |
78 | 79 |
|
79 | 80 |
public String getText() { |
80 |
return RasterToolsUtil.getText(this, "enhanced_rad");
|
|
81 |
return Messages.getText("enhanced_rad");
|
|
81 | 82 |
} |
82 | 83 |
|
83 | 84 |
public boolean isEnabled(ITocItem item, FLayer[] selectedItems) { |
... | ... | |
119 | 120 |
} |
120 | 121 |
|
121 | 122 |
public Icon getIcon() { |
122 |
return RasterToolsUtil.getIcon("layer-enhanced");
|
|
123 |
return IconThemeHelper.getImageIcon("layer-enhanced");
|
|
123 | 124 |
} |
124 | 125 |
|
125 | 126 |
/** |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.api/src/main/java/org/gvsig/raster/swing/gcanvas/MinMaxLines.java | ||
---|---|---|
26 | 26 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
27 | 27 |
*/ |
28 | 28 |
public abstract class MinMaxLines extends DrawableElement { |
29 |
public abstract void setMinimum(double min); |
|
29 | 30 |
|
31 |
public abstract void setMaximum(double max); |
|
30 | 32 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/canvas/layer/function/DefaultStraightLine.java | ||
---|---|---|
205 | 205 |
*/ |
206 | 206 |
protected void paint(Graphics g) { |
207 | 207 |
super.paint(g); |
208 |
|
|
209 | 208 |
g.setColor(color); |
210 | 209 |
|
211 | 210 |
// Dibujamos una l?nea desde un punto hasta el siguiente |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/canvas/layer/function/DefaultBaseFunction.java | ||
---|---|---|
55 | 55 |
} |
56 | 56 |
|
57 | 57 |
protected void paint(Graphics g) { |
58 |
List<DrawableElement> elements = canvas.getDrawableElements(DefaultMinMaxLines.class); |
|
58 |
/*List<DrawableElement> elements = canvas.getDrawableElements(DefaultMinMaxLines.class);
|
|
59 | 59 |
if (elements.size() > 0) { |
60 | 60 |
DefaultMinMaxLines minMaxLines = (DefaultMinMaxLines) elements.get(0); |
61 | 61 |
setMinX(minMaxLines.getMinDistance()); |
62 | 62 |
setMaxX(minMaxLines.getMaxDistance()); |
63 |
} |
|
63 |
}*/
|
|
64 | 64 |
} |
65 | 65 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/canvas/layer/function/DefaultLogaritmicExponentialLine.java | ||
---|---|---|
113 | 113 |
* ( 0.0 a -1.0) - Funcion exponencial con aproximacion al centro |
114 | 114 |
* (-1.0 a -2.0) - Funcion exponencial con aproximacion al borde |
115 | 115 |
*/ |
116 |
@SuppressWarnings("unchecked") |
|
117 | 116 |
private void recalcList() { |
118 | 117 |
double x, y = 0.0; |
119 | 118 |
|
... | ... | |
216 | 215 |
return false; |
217 | 216 |
} |
218 | 217 |
|
219 |
/* |
|
220 |
* (non-Javadoc) |
|
221 |
* @see org.gvsig.raster.beans.canvas.layers.functions.StraightLine#mouseMoved(java.awt.event.MouseEvent) |
|
222 |
*/ |
|
223 | 218 |
public boolean mouseMoved(MouseEvent e) { |
224 | 219 |
return true; |
225 | 220 |
} |
226 | 221 |
|
227 |
/* |
|
228 |
* (non-Javadoc) |
|
229 |
* @see org.gvsig.raster.beans.canvas.layers.functions.StraightLine#mousePressed(java.awt.event.MouseEvent) |
|
230 |
*/ |
|
231 | 222 |
public boolean mousePressed(MouseEvent e) { |
232 | 223 |
return mouseDragged(e); |
233 | 224 |
} |
234 | 225 |
|
235 |
/* |
|
236 |
* (non-Javadoc) |
|
237 |
* @see org.gvsig.raster.beans.canvas.layers.functions.StraightLine#mouseReleased(java.awt.event.MouseEvent) |
|
238 |
*/ |
|
239 | 226 |
public boolean mouseReleased(MouseEvent e) { |
240 | 227 |
setInfoPoint(null); |
241 | 228 |
return true; |
242 | 229 |
} |
243 | 230 |
|
244 |
/* |
|
245 |
* (non-Javadoc) |
|
246 |
* @see org.gvsig.raster.swing.gcanvas.LogaritmicExponentialLine#isLogaritmical() |
|
247 |
*/ |
|
248 | 231 |
public boolean isLogaritmical() { |
249 | 232 |
return (valueFunction > 0.0); |
250 | 233 |
} |
251 | 234 |
|
252 |
/* |
|
253 |
* (non-Javadoc) |
|
254 |
* @see org.gvsig.raster.swing.gcanvas.LogaritmicExponentialLine#isExponencial() |
|
255 |
*/ |
|
256 | 235 |
public boolean isExponencial() { |
257 | 236 |
return (valueFunction < 0.0); |
258 | 237 |
} |
259 | 238 |
|
260 |
/* |
|
261 |
* (non-Javadoc) |
|
262 |
* @see org.gvsig.raster.beans.canvas.layers.functions.StraightLine#getFunctionType() |
|
263 |
*/ |
|
264 | 239 |
public int getFunctionType() { |
265 | 240 |
return 1; |
266 | 241 |
} |
267 | 242 |
|
268 |
/* |
|
269 |
* (non-Javadoc) |
|
270 |
* @see org.gvsig.raster.beans.canvas.layers.functions.StraightLine#getValueFunction() |
|
271 |
*/ |
|
272 | 243 |
public double getValueFunction() { |
273 | 244 |
return valueFunction; |
274 | 245 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/canvas/layer/DefaultMinMaxLines.java | ||
---|---|---|
63 | 63 |
setColor(c); |
64 | 64 |
} |
65 | 65 |
|
66 |
public void setMinimum(double min) { |
|
67 |
this.minPos = min; |
|
68 |
} |
|
69 |
|
|
70 |
public void setMaximum(double max) { |
|
71 |
this.maxPos = max; |
|
72 |
} |
|
73 |
|
|
66 | 74 |
private int valueToPixel(double value) { |
67 | 75 |
return (int) Math.round(canvas.getCanvasMinX() + border + ((canvas.getCanvasMaxX() - canvas.getCanvasMinX() - (border * 2)) * value)); |
68 | 76 |
} |
... | ... | |
149 | 157 |
if (minPos > maxPos) |
150 | 158 |
maxPos = minPos; |
151 | 159 |
|
152 |
List<DrawableElement> elements = canvas.getDrawableElements(DefaultBaseFunction.class); |
|
153 |
if (elements.size() > 0) { |
|
154 |
DefaultBaseFunction baseFunction = (DefaultBaseFunction) elements.get(0); |
|
155 |
baseFunction.setMinX(minPos); |
|
156 |
baseFunction.setMaxX(maxPos); |
|
157 |
} |
|
158 |
|
|
159 |
((Component)canvas).repaint(); |
|
160 |
SwingUtilities.invokeLater(new Runnable() { |
|
161 |
public void run() { |
|
162 |
canvas.callDataDragged("minmax", this); |
|
163 |
} |
|
164 |
}); |
|
160 |
updateDrawableElements(); |
|
165 | 161 |
return false; |
166 | 162 |
} |
167 | 163 |
if (maxSelected) { |
... | ... | |
173 | 169 |
if (maxPos < minPos) |
174 | 170 |
minPos = maxPos; |
175 | 171 |
|
176 |
((Component)canvas).repaint(); |
|
177 |
SwingUtilities.invokeLater(new Runnable() { |
|
178 |
public void run() { |
|
179 |
canvas.callDataDragged("minmax", this); |
|
180 |
} |
|
181 |
}); |
|
172 |
updateDrawableElements(); |
|
182 | 173 |
return false; |
183 | 174 |
} |
184 | 175 |
return true; |
185 | 176 |
} |
186 | 177 |
|
187 |
/* |
|
188 |
* (non-Javadoc) |
|
189 |
* @see org.gvsig.raster.beans.canvas.DrawableElement#mouseMoved(java.awt.event.MouseEvent) |
|
190 |
*/ |
|
178 |
private void updateDrawableElements() { |
|
179 |
List<DrawableElement> elements = canvas.getDrawableElements(DefaultBaseFunction.class); |
|
180 |
if (elements.size() > 0) { |
|
181 |
DefaultBaseFunction baseFunction = (DefaultBaseFunction) elements.get(0); |
|
182 |
baseFunction.setMinX(minPos); |
|
183 |
baseFunction.setMaxX(maxPos); |
|
184 |
} |
|
185 |
|
|
186 |
((Component)canvas).repaint(); |
|
187 |
SwingUtilities.invokeLater(new Runnable() { |
|
188 |
public void run() { |
|
189 |
canvas.callDataDragged("minmax", this); |
|
190 |
} |
|
191 |
}); |
|
192 |
} |
|
193 |
|
|
191 | 194 |
public boolean mouseMoved(MouseEvent e) { |
192 | 195 |
if (e.getY() > canvas.getCanvasMinY() && e.getY() < canvas.getCanvasMaxY()) { |
193 | 196 |
if (e.getX() >= (valueToPixel(minPos) - 3) && |
Also available in: Unified diff