Revision 2585

View differences:

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