gvsig-raster / org.gvsig.raster.georeferencing / trunk / org.gvsig.raster.georeferencing / org.gvsig.raster.georeferencing.swing / org.gvsig.raster.georeferencing.swing.impl / src / main / java / org / gvsig / raster / georeferencing / swing / impl / option / CellSizeDialog.java @ 1752
History | View | Annotate | Download (6.04 KB)
1 |
package org.gvsig.raster.georeferencing.swing.impl.option; |
---|---|
2 |
|
3 |
import java.awt.Color; |
4 |
import java.awt.GridBagConstraints; |
5 |
import java.awt.GridBagLayout; |
6 |
import java.beans.PropertyChangeEvent; |
7 |
import java.beans.PropertyChangeListener; |
8 |
import java.util.EventObject; |
9 |
import java.util.HashMap; |
10 |
|
11 |
import javax.swing.JLabel; |
12 |
import javax.swing.JPanel; |
13 |
|
14 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
15 |
import org.gvsig.gui.beans.datainput.DataInputContainerListener; |
16 |
import org.gvsig.i18n.Messages; |
17 |
import org.gvsig.raster.georeferencing.GeoreferencingLibrary; |
18 |
import org.gvsig.raster.georeferencing.Geotransformation; |
19 |
import org.gvsig.raster.georeferencing.swing.model.GeoreferencingOptionsDataModel; |
20 |
import org.gvsig.raster.swing.basepanel.AbstractButtonsPanel; |
21 |
import org.gvsig.raster.swing.basepanel.ButtonsPanelListener; |
22 |
import org.gvsig.raster.swing.impl.basepanel.ButtonsPanel; |
23 |
import org.gvsig.raster.tools.algorithm.base.RasterBaseAlgorithmLibrary; |
24 |
import org.gvsig.raster.tools.algorithm.base.process.ProcessException; |
25 |
import org.gvsig.raster.tools.algorithm.base.process.RasterProcess; |
26 |
|
27 |
/**
|
28 |
* @author Nacho Brodin (nachobrodin@gmail.com)
|
29 |
*/
|
30 |
public class CellSizeDialog extends AbstractButtonsPanel implements DataInputContainerListener, PropertyChangeListener { |
31 |
private static final long serialVersionUID = 1L; |
32 |
private CellSizeOptionsPanel cellSizePanel = null; |
33 |
private JPanel panel = null; |
34 |
private JLabel labelText = null; |
35 |
private JLabel xsizeText = null; |
36 |
private JLabel ysizeText = null; |
37 |
private GeoreferencingOptionsDataModel dataModel = null; |
38 |
|
39 |
public CellSizeDialog(GeoreferencingOptionsDataModel dataModel, ButtonsPanelListener listener) {
|
40 |
this.dataModel = dataModel;
|
41 |
getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setVisible(false);
|
42 |
getButtonsPanel().addButtonPressedListener(listener); |
43 |
init(); |
44 |
if(dataModel != null) { |
45 |
calculateTransformation(); |
46 |
} |
47 |
} |
48 |
|
49 |
/**
|
50 |
* Acciones de inicializaci?n del panel
|
51 |
*/
|
52 |
public void init() { |
53 |
labelText = new JLabel(Messages.getText("recomended_size")); |
54 |
xsizeText = new JLabel("X:- px"); |
55 |
ysizeText = new JLabel("Y:- px"); |
56 |
xsizeText.setForeground(Color.red);
|
57 |
ysizeText.setForeground(Color.red);
|
58 |
|
59 |
GridBagLayout gl = new GridBagLayout(); |
60 |
setLayout(gl); |
61 |
|
62 |
GridBagConstraints gbc = new GridBagConstraints(); |
63 |
gbc.weightx = 1.0;
|
64 |
gbc.weighty = 0;
|
65 |
gbc.fill = GridBagConstraints.HORIZONTAL;
|
66 |
|
67 |
gbc.gridy = 1;
|
68 |
add(getCellSizePanel(), gbc); |
69 |
|
70 |
gbc.gridy = 2;
|
71 |
add(getPanel(), gbc); |
72 |
} |
73 |
|
74 |
public CellSizeOptionsPanel getCellSizePanel() {
|
75 |
if(cellSizePanel == null) { |
76 |
cellSizePanel = new CellSizeOptionsPanel();
|
77 |
cellSizePanel.getXCellSizeTextField().setListener(this);
|
78 |
cellSizePanel.getYCellSizeTextField().setListener(this);
|
79 |
} |
80 |
return cellSizePanel;
|
81 |
} |
82 |
|
83 |
public JPanel getPanel() { |
84 |
if(panel == null) { |
85 |
panel = new JPanel(new GridBagLayout()); |
86 |
|
87 |
GridBagConstraints gbc = new GridBagConstraints(); |
88 |
gbc.weightx = 1.0;
|
89 |
gbc.weighty = 0;
|
90 |
gbc.fill = GridBagConstraints.HORIZONTAL;
|
91 |
|
92 |
gbc.gridy = 1;
|
93 |
panel.add(labelText, gbc); |
94 |
|
95 |
gbc.gridy = 2;
|
96 |
panel.add(xsizeText, gbc); |
97 |
|
98 |
gbc.gridy = 3;
|
99 |
panel.add(ysizeText, gbc); |
100 |
} |
101 |
return panel;
|
102 |
} |
103 |
|
104 |
public void actionValueChanged(EventObject e) { |
105 |
calculateTransformation(); |
106 |
} |
107 |
|
108 |
public void propertyChange(PropertyChangeEvent evt) { |
109 |
if(evt.getPropertyName().equals("value")) |
110 |
calculateTransformation(); |
111 |
} |
112 |
|
113 |
@SuppressWarnings("unchecked") |
114 |
private void calculateTransformation() { |
115 |
if(dataModel == null) |
116 |
return;
|
117 |
|
118 |
double xCellSize = 0; |
119 |
double yCellSize = 0; |
120 |
String cs1 = getCellSizePanel().getXCellSizeTextField().getValue();
|
121 |
String cs2 = getCellSizePanel().getYCellSizeTextField().getValue();
|
122 |
try {
|
123 |
xCellSize = Double.valueOf(cs1);
|
124 |
yCellSize = Double.valueOf(cs2);
|
125 |
} catch (NumberFormatException e) { |
126 |
xsizeText.setText("X: ? px");
|
127 |
ysizeText.setText("Y: ? px");
|
128 |
return;
|
129 |
} |
130 |
|
131 |
try {
|
132 |
RasterProcess transform = RasterBaseAlgorithmLibrary.getManager().createRasterTask(GeoreferencingLibrary.GEOTRANSFORM_PROCESS_LABEL); |
133 |
transform.addParam("gcps", dataModel.getGCPList().getGeoPointList());
|
134 |
transform.addParam("Order", new Integer(dataModel.getDegree())); |
135 |
transform.execute(); |
136 |
int w = (int)dataModel.getDataStore().getWidth(); |
137 |
int h = (int)dataModel.getDataStore().getHeight(); |
138 |
HashMap<String, Object> map = (HashMap<String, Object>)transform.getResult(); |
139 |
Geotransformation gt = (Geotransformation)map.get("RESULT");
|
140 |
|
141 |
// Obtenida la transformacion la aplicamos a los puntos extremos de la imagen
|
142 |
double p1[] = gt.getCoordMap(0, 0); |
143 |
double p2[] = gt.getCoordMap(w, 0); |
144 |
double p3[] = gt.getCoordMap(0, h); |
145 |
double p4[] = gt.getCoordMap(w, h); |
146 |
|
147 |
double xmin = Math.min(Math.min(p1[0], p3[0]), Math.min(p2[0], p4[0])); |
148 |
double ymin = Math.min(Math.min(p3[1], p4[1]), Math.min(p1[1], p2[1])); |
149 |
double xmax = Math.max(Math.max(p2[0], p4[0]), Math.max(p1[0], p3[0])); |
150 |
double ymax = Math.max(Math.max(p1[1], p2[1]), Math.max(p3[1], p4[1])); |
151 |
|
152 |
if(xCellSize > 0 && yCellSize > 0) { |
153 |
w = (int)((xmax - xmin) / xCellSize);
|
154 |
h = (int)((ymax - ymin) / yCellSize);
|
155 |
} else {
|
156 |
xCellSize = ((xmax - xmin) / w); |
157 |
yCellSize = ((ymax - ymin) / h); |
158 |
getCellSizePanel().getXCellSizeTextField().setValue(Double.toString(xCellSize));
|
159 |
getCellSizePanel().getYCellSizeTextField().setValue(Double.toString(yCellSize));
|
160 |
} |
161 |
|
162 |
if(dataModel.getAlgorithm() == GeoreferencingLibrary.AFFINE) {
|
163 |
xsizeText.setText("X: "+ (int)dataModel.getDataStore().getWidth() + " px (native)"); |
164 |
ysizeText.setText("Y: "+ (int)dataModel.getDataStore().getHeight() + " px (native)"); |
165 |
} else {
|
166 |
xsizeText.setText("X: " + w + " px"); |
167 |
ysizeText.setText("Y: " + h + " px"); |
168 |
} |
169 |
dataModel.setXCellSize(xCellSize); |
170 |
dataModel.setYCellSize(yCellSize); |
171 |
} catch (ProcessInterruptedException e) {
|
172 |
} catch (ProcessException e) {
|
173 |
xsizeText.setText("X: ? px");
|
174 |
ysizeText.setText("Y: ? px");
|
175 |
} |
176 |
} |
177 |
|
178 |
} |