Revision 11033

View differences:

trunk/libraries/libUIComponent/src/org/gvsig/gui/beans/graphic/GraphicChartPanel.java
63 63
		initialize();
64 64
		
65 65
		Plot plot = this.jPanelChart.getChart().getPlot();
66
        plot.setOutlineStroke(new BasicStroke(1));
67
        plot.setOutlinePaint(Color.magenta);
66
		plot.setOutlineStroke(new BasicStroke(1));
67
		plot.setOutlinePaint(Color.magenta);
68 68
	}
69 69
	
70 70
	/**
......
108 108
        // color
109 109
        XYPlot plot = chart.getXYPlot();
110 110
        plot.getRenderer().setSeriesPaint(0, Color.red);
111
        plot.getRenderer().setSeriesPaint(1, Color.green); 
111
        plot.getRenderer().setSeriesPaint(1, Color.green);
112 112
        plot.getRenderer().setSeriesPaint(2, Color.blue);
113 113
        plot.getRenderer().setSeriesPaint(3, Color.cyan);
114 114
        plot.getRenderer().setSeriesPaint(4, Color.black);
......
117 117
        plot.getRenderer().setSeriesPaint(7, Color.magenta);
118 118
        plot.getRenderer().setSeriesPaint(8, Color.yellow);
119 119
        plot.getRenderer().setSeriesPaint(9, Color.orange);
120
        
121 120
    }
122 121
    
123 122
    /**
trunk/libraries/libUIComponent/src/org/gvsig/gui/beans/graphic/GraphicContainer.java
19 19
package org.gvsig.gui.beans.graphic;
20 20

  
21 21
import java.awt.BorderLayout;
22
import java.awt.Color;
22 23
import java.awt.GridBagConstraints;
23 24
import java.util.ArrayList;
24 25
import java.util.Iterator;
......
189 190
		eventId++;
190 191
	}
191 192
	
193
	public void setBandVisible(int band, boolean visible) {
194
		getPGraphic().getChart().getChart().getXYPlot().getRenderer().setSeriesVisible(band, Boolean.valueOf(visible));
195
	}
196
	
197
	public void setBandColor(int band, Color color) {
198
		getPGraphic().getChart().getChart().getXYPlot().getRenderer().setSeriesPaint(band, color);
199
	}
192 200
}
trunk/libraries/libRaster/src/org/gvsig/raster/util/Histogram.java
142 142
	}
143 143
	
144 144
	/**
145
	 * Devuelve el histograma acumulado
145
	 * Devuelve el histograma logaritmico
146 146
	 * @return
147 147
	 */
148 148
	public long[][] getLogaritmicHistogram() {
149
		//TODO: FUNCIONALIDAD: Falta el calculo del histograma logaritmico
150
		return histogram;
149
		if (histogram != null) {
150
			long[][] hist = new long[histogram.length][histogram[0].length];
151
			for (int iBand = 0; iBand < hist.length; iBand++) {
152
				long min = hist[iBand][0];
153
				for (int j = 1; j < hist[iBand].length; j++)
154
					if (min > hist[iBand][j]) min = hist[iBand][j];
155
				for (int j = 0; j < hist[iBand].length; j++)
156
					// Lo multiplico por 1000 para que no se pierdan datos al redondear
157
					hist[iBand][j] = (long) (java.lang.Math.log((double) (histogram[iBand][j] - min + 1))*1000);
158
			}
159
			return hist;
160
		}
161
		return null;
151 162
	}
152 163
	
153 164
	/**
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/histogram/HistogramPanelListener.java
18 18
*/
19 19
package org.gvsig.rastertools.histogram;
20 20

  
21
import java.awt.Color;
22
import java.awt.Component;
21 23
import java.awt.event.ActionEvent;
22 24
import java.awt.event.ActionListener;
23
import java.awt.event.KeyEvent;
25
import java.io.File;
26
import java.io.IOException;
27
import java.io.RandomAccessFile;
28
import java.nio.channels.FileChannel;
29
import java.nio.channels.WritableByteChannel;
24 30
import java.util.ArrayList;
25 31

  
26 32
import javax.swing.JButton;
27 33
import javax.swing.JComboBox;
34
import javax.swing.JFileChooser;
35
import javax.swing.JOptionPane;
28 36

  
29 37
import org.gvsig.gui.beans.graphic.GraphicEvent;
30 38
import org.gvsig.gui.beans.graphic.GraphicListener;
......
34 42
import org.gvsig.raster.util.Histogram;
35 43
import org.gvsig.raster.util.IHistogramable;
36 44
import org.gvsig.rastertools.histogram.ui.HistogramPanel;
45

  
46
import com.hardcode.driverManager.DriverLoadException;
47
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
48
import com.hardcode.gdbms.engine.data.DataSource;
49
import com.hardcode.gdbms.engine.data.DataSourceFactory;
50
import com.hardcode.gdbms.engine.data.NoSuchTableException;
51
import com.hardcode.gdbms.engine.values.Value;
52
import com.hardcode.gdbms.engine.values.ValueFactory;
53
import com.iver.andami.PluginServices;
54
import com.iver.cit.gvsig.ProjectExtension;
55
import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileHeaderNIO;
56
import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileWriterNIO;
57
import com.iver.cit.gvsig.fmap.edition.EditableAdapter;
58
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
59
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
60
import com.iver.cit.gvsig.project.ProjectFactory;
61
import com.iver.cit.gvsig.project.documents.table.ProjectTable;
62
import com.iver.cit.gvsig.project.documents.table.gui.Table;
37 63
/**
38 64
 * Listener para eventos del panel de histograma
39 65
 *
......
51 77
	public boolean						comboEventEnable = false;
52 78
	
53 79
	private boolean[]					showBands = {true, true, true};
54

  
80
  private Color[]						bandsColor = {
81
  		Color.red,
82
  		Color.green,
83
  		Color.blue,
84
  		Color.cyan,
85
  		Color.black,
86
  		Color.darkGray,
87
  		Color.gray,
88
  		Color.magenta,
89
  		Color.yellow,
90
  		Color.orange};
55 91
		
56 92
	public HistogramPanelListener(HistogramPanel p){
57 93
		histogramPanel = p;
......
63 99

  
64 100
	
65 101
	private void updateStatistic() {
66
//		TODO Actualizar tabla de los histogramas.
67
//		histogramPanel.setStatistic(DatasetStatistics.getBasicStatsFromHistogram(getLastHistogram(), (int)panel.getBoxesValues()[1], (int)panel.getBoxesValues()[0], panel.showBands));
102
//		long[][] auxHistogram = lastHistogram.getHistogramByType(Histogram.getType(histogramPanel.getJComboBoxTipo().getSelectedIndex()));
103
//		long[][] auxHistogram = lastHistogram.getHistogram();
104

  
105
		int first = (int) ((histogramPanel.getGraphicContainer().getX1()*(lastHistogram.getNumValues()-1))/100);
106
		int end = (int) ((histogramPanel.getGraphicContainer().getX2()*(lastHistogram.getNumValues()-1))/100);
107

  
108
//		first = histogramPanel.getGraphicContainer().getX1();
109
//		end = histogramPanel.getGraphicContainer().getX2();
110

  
111
//		Histogram aux = new Histogram();
112
//		aux.setHistogram(auxHistogram);
113
		
114
//		histogramPanel.setStatistic(aux.getBasicStats(first, end, showBands));
115
		histogramPanel.setStatistic(lastHistogram.getBasicStats((int) first, (int) end, showBands));
68 116
	}
69 117

  
70 118
	public void actionPerformed(ActionEvent e) {
......
80 128
			if (cbb.getSelectedItem().equals("R")) addOrRemoveGraphicBand(0);
81 129
			if (cbb.getSelectedItem().equals("G")) addOrRemoveGraphicBand(1);
82 130
			if (cbb.getSelectedItem().equals("B")) addOrRemoveGraphicBand(2);
83
			for (int i = 0; i < HistogramPanel.MAXBANDS; i++)
84
				if (cbb.getSelectedItem().equals("Band "+i))
131
			for (int i = 0; i < showBands.length; i++)
132
				if (cbb.getSelectedItem().equals("Band " + i))
85 133
					addOrRemoveGraphicBand(i);
86 134

  
135
			updateGraphic();
87 136
			updateStatistic();
88
			updateGraphic();
89 137
			return;
90 138
		}
91 139
		
92 140
		//--------------------------------------		
93 141
		//Limpiar
94
		JButton clean = histogramPanel.getJButtonClear();
95
		if (e.getSource() == clean) {
96
			cleanChart();
142
		if (e.getSource() == histogramPanel.getJButtonClear()) {
143
			for (int i = 0; i < showBands.length; i++)
144
				showBands[i] = false;
145
			updateGraphic();
97 146
			return;
98 147
		}
99 148
		
......
108 157
			
109 158
			//En caso de que el histograma se monte a partir de los datos reales ponemos el n?mero de bandas en el combo
110 159
			if (cbo.getSelectedIndex() == 1 || cbo.getSelectedIndex() == 2) {
111
				// TODO: Rellenar BandCount con el valor que toca
160
				bandCount = lastHistogram.getNumBands();
112 161
				histogramPanel.setBands(bandCount);
113 162
				showBands = new boolean[bandCount];
114 163
				for (int i = 0; i < showBands.length; i++)
......
127 176
			updateGraphic();
128 177
			return;
129 178
		}
179
		
180
		//--------------------------------------
181
		// Boton Crear Tabla
182
		JButton table = histogramPanel.getBCreateTable();
183
		if (e.getSource() == table) {
184
			try {
185
//	        	-------Mostrar un fileChooser------------------
186
				String fName;
187
				JFileChooser chooser = new JFileChooser();
188
				chooser.setDialogTitle(PluginServices.getText(this, "guardar_tabla"));
189
	    		
190
				int returnVal = chooser.showOpenDialog(histogramPanel);
191
				if (returnVal == JFileChooser.APPROVE_OPTION) {
192
					fName = chooser.getSelectedFile().toString();
193
					if (!fName.endsWith(".dbf"))
194
						fName += ".dbf";
195
	        	     
196
					//-------------Crear el dbf----------------------
197
	    		
198
					DbaseFileWriterNIO dbfWrite = null;
199
					DbaseFileHeaderNIO myHeader;
200
					Value[] record;
201
		        	
202
					long histogram[][]= lastHistogram.getHistogram();
203
					int numBands = histogram.length;
204
					int numRecors = histogram[0].length;
205
		        	
206
					File file = new File(fName);
207
		        	
208
					String names[] = new String[numBands+1];
209
					int types[] = new int [numBands+1];
210
					int lengths[] = new int [numBands+1];
211
		        	
212
					names[0]="Value";
213
					types[0]=4;
214
					lengths[0]=15;
215
					for (int band = 0; band < numBands; band++){
216
						names[band+1]="Band"+band;
217
						types[band+1]=4;
218
						lengths[band+1]=15;
219
					}
220
		        	
221
					myHeader = DbaseFileHeaderNIO.createDbaseHeader(names,types,lengths);
222
	
223
					myHeader.setNumRecords(numRecors);
224
					dbfWrite = new DbaseFileWriterNIO(myHeader, (FileChannel) getWriteChannel(file.getPath()));
225
					record = new Value[numBands+1];
226
	
227
					for (int j = 0; j < numRecors; j++) {
228
						record[0] = ValueFactory.createValue(j);
229
						for (int r = 0; r < numBands; r++) {
230
							record[r+1] = ValueFactory.createValue(histogram[r][j]);
231
						}
232
	
233
						dbfWrite.write(record);
234
					}
235
	
236
					dbfWrite.close();
237
		            
238
					//------------A?adir el dbf al proyecto--------------
239
					ProjectExtension ext = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
240
					String name = file.getName();
241
					LayerFactory.getDataSourceFactory().addFileDataSource("gdbms dbf driver", name, fName);
242
					DataSource dataSource;
243
					dataSource = LayerFactory.getDataSourceFactory().createRandomDataSource(name, DataSourceFactory.AUTOMATIC_OPENING);
244
					
245
					SelectableDataSource sds = new SelectableDataSource(dataSource);
246
					EditableAdapter auxea=new EditableAdapter();
247
					auxea.setOriginalDataSource(sds);
248
					ProjectTable projectTable = ProjectFactory.createTable(name, auxea);
249
					//ext.getProject().addTable(projectTable);
250
					ext.getProject().addDocument(projectTable);
251
					
252
					Table t = new Table();
253
					t.setModel(projectTable);
254
					//projectTable.setAndamiWindow(t);
255
					PluginServices.getMDIManager().addWindow(t);
256
				}
257
			} catch (IOException e1) {
258
				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),histogramPanel.getName() + " " + PluginServices.getText(this,"table_not_create"));
259
			} catch (DriverLoadException e1) {
260
				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),histogramPanel.getName() + " " + PluginServices.getText(this,"table_not_create"));
261
			} catch (NoSuchTableException e1) {
262
				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),histogramPanel.getName() + " " + PluginServices.getText(this,"table_not_create"));
263
			} catch (ReadDriverException e1) {
264
				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),histogramPanel.getName() + " " + PluginServices.getText(this,"table_not_create"));
265
			}
266
		}
130 267
	}
131 268

  
132 269
	public void showHistogram() {
......
145 282
	 * @param band banda a visualizar o borrar del gr?fico
146 283
	 */
147 284
	public void addOrRemoveGraphicBand(int band){
148
		if (band > showBands.length)
149
			return;
285
		if (band > showBands.length) return;
150 286
		showBands[band] = !showBands[band];
151 287
	}
152 288

  
153
	/**
154
	 * Limpia la gr?fica
155
	 */
156
	public void cleanChart(){
157
		histogramPanel.cleanChart();
158
		for(int i = 0; i < showBands.length; i++)
159
			showBands[i] = false;
160
	}
161

  
162 289
	private void updateGraphic() {
163 290
		long[][] auxHistogram = lastHistogram.getHistogramByType(Histogram.getType(histogramPanel.getJComboBoxTipo().getSelectedIndex()));
164 291
		if (auxHistogram == null) return;
165 292

  
166
		int first = 0;
167
		int end = auxHistogram[0].length;
293
		int first = (int) ((histogramPanel.getGraphicContainer().getX1()*(auxHistogram[0].length-1))/100);
294
		int end = (int) ((histogramPanel.getGraphicContainer().getX2()*(auxHistogram[0].length-1))/100);
168 295

  
169
		first = (int) ((histogramPanel.getGraphicContainer().getX1()*auxHistogram[0].length)/100);
170
		end = (int) ((histogramPanel.getGraphicContainer().getX2()*auxHistogram[0].length)/100);
171

  
172 296
		int bandCount = 0;
173 297
		for (int i = 0; i < showBands.length; i++) {
174 298
			if (showBands[i]) bandCount++;
......
187 311
				newHistogram[numBand][j-first] = (int) auxHistogram[iBand][j];
188 312
			bandNames[numBand] = iBand + "";
189 313

  
314
			histogramPanel.getGraphicContainer().setBandColor(numBand, bandsColor[iBand]);
315

  
190 316
			numBand++;
191 317
		}
192 318

  
193
		histogramPanel.getGraphicContainer().getPGraphic().cleanChart();
194 319
		histogramPanel.getGraphicContainer().getPGraphic().setNewChart(newHistogram, bandNames);
320
		updateStatistic();
195 321
	}
196

  
197 322
	private void closeHistogramProcess() {
198 323
		histogramProcess = null;
199 324
		incrementableTask = null;
......
222 347
	}
223 348

  
224 349
	public void actionValueChanged(GraphicEvent e) {
225
		updateStatistic();
226 350
		updateGraphic();
227 351
	}
352
	
353
	private WritableByteChannel getWriteChannel(String path)throws IOException {
354
		WritableByteChannel channel;
355
		
356
		File f = new File(path);
357
		
358
		if (!f.exists()) {
359
			System.out.println("Creando fichero " + f.getAbsolutePath());
360
			
361
			if (!f.createNewFile()) {
362
				throw new IOException("Cannot create file " + f);
363
			}
364
		}
365
		
366
		RandomAccessFile raf = new RandomAccessFile(f, "rw");
367
		channel = raf.getChannel();
368
		
369
		return channel;
370
	}
371

  
228 372
}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/histogram/ui/HistogramDialog.java
61 61
	}
62 62

  
63 63
	public WindowInfo getWindowInfo() {
64
		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.RESIZABLE);
64
		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
65 65
    	m_viewinfo.setTitle(PluginServices.getText(this, "histograma"));
66 66
     	m_viewinfo.setHeight(this.getHeight());
67 67
     	m_viewinfo.setWidth(this.getWidth());
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/histogram/ui/HistogramPanel.java
32 32
import org.cresques.i18n.Messages;
33 33
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
34 34
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
35
import org.gvsig.gui.beans.graphic.GraphicChartPanel;
36 35
import org.gvsig.gui.beans.graphic.GraphicContainer;
37 36
import org.gvsig.gui.beans.table.TableContainer;
38 37
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
......
407 406
	}
408 407

  
409 408
	/**
410
	 * Limpia la gr?fica
411
	 */
412
	public void cleanChart(){
413
		GraphicChartPanel gcp = graphicContainer.getPGraphic();
414
		gcp.cleanChart();
415
	}
416

  
417
	/**
418 409
	 * Obtiene el tipo de histograma a mostrar
419 410
	 * @return acumulado/no acumulado
420 411
	 */

Also available in: Unified diff