Statistics
| Revision:

svn-gvsig-desktop / branches / gvSIG_03_raster / applications / appgvSIG / src / com / iver / cit / gvsig / gui / Panels / SaveRasterDialog.java @ 1930

History | View | Annotate | Download (9.15 KB)

1
/*
2
 * Creado el 7-marzo-2005
3
 */
4
package com.iver.cit.gvsig.gui.Panels;
5

    
6
import java.awt.Container;
7
import java.awt.Dimension;
8
import java.awt.event.ActionEvent;
9
import java.awt.geom.Rectangle2D;
10
import java.io.IOException;
11

    
12
import javax.swing.JDialog;
13
import javax.swing.JPanel;
14

    
15
import org.cresques.cts.IProjection;
16
import org.cresques.geo.ViewPortData;
17
import org.cresques.io.EcwWriter;
18
import org.cresques.io.GdalWriter;
19
import org.cresques.io.GeoRasterWriter;
20
import org.cresques.io.IDataWriter;
21
import org.cresques.io.Rasterizer;
22
import org.cresques.px.Extent;
23
import org.cresques.px.PxLayerList;
24
import org.cresques.ui.CQSaveRaster;
25
import org.cresques.ui.raster.DataInputSaveRaster;
26
import org.cresques.ui.raster.SaveRasterDialogPanel;
27
import org.cresques.ui.raster.SaveSetupPanel;
28

    
29
import com.iver.andami.PluginServices;
30
import com.iver.andami.ui.mdiManager.View;
31
import com.iver.andami.ui.mdiManager.ViewInfo;
32
import com.iver.cit.gvsig.RasterizerLayer;
33
import com.iver.cit.gvsig.fmap.MapControl;
34
import com.iver.cit.gvsig.fmap.ViewPort;
35
import com.iver.cit.gvsig.fmap.layers.FLayers;
36

    
37
/**
38
 * Dialogo para abrir fichero.
39
 * @author Nacho Brodin <brodin_ign@gva.es>
40
 */
41
//public class SaveRasterDialog extends JDialog{
42
public class SaveRasterDialog extends SaveRasterDialogPanel implements View{
43
        
44
        //private SaveRasterDialogPanel                 contentPane = null;  
45
        private GeoRasterWriter                                writer=null;
46
        private GeoRasterWriter                                writerProps=null;
47
        private IProjection                                 currentProjection = null;
48
        private SaveRasterPropsDialog                 frameSaveRasterProps = null;
49
        private int                                                 compresion = 1;
50
        private int                                                 sizeBlock = 64;
51
        public DriverProperties                                driverProps = null;
52
        private FLayers                                                 layers = null;
53
        private MapControl                                        mapCtrl = null;
54
         
55
        class DriverProperties{
56
                
57
                private String[][]                                driversProps = null;
58
                private String[]                                driversExtension = null;
59
                
60
                DriverProperties(){
61
                        
62
                        driversProps = new String[GeoRasterWriter.getNDrivers()][];
63
                        for(int i=0;i<GeoRasterWriter.getNDrivers();i++)
64
                                driversProps[i] = null;
65
                        driversExtension = GeoRasterWriter.getDriversExtensions();
66
                        
67
                }
68
                
69
                /**
70
                 * Asigna un vector de propiedades de driver de escritura.
71
                 * @param ext        extensi?n del driver.
72
                 * @param props        propiedades.
73
                 */
74
                public void setProperties(String ext, String[] props){
75
                        for(int i=0;i<driversExtension.length;i++){
76
                                if(ext.equals(driversExtension[i])){
77
                                        driversProps[i] = props;
78
                                }
79
                        }
80
                }
81
                
82
                /**
83
                 * Obtiene un vector de propiedades de driver de escritura.
84
                 * @param ext        extensi?n del driver.
85
                 * @return        propiedades.
86
                 */
87
                public String[] getProperties(String ext){
88
                        for(int i=0;i<driversExtension.length;i++){
89
                                if(ext.equals(driversExtension[i])){
90
                                        return driversProps[i];
91
                                }
92
                        }
93
                        return null;
94
                }
95
                
96
        }
97
        
98
        /**
99
         * Constructor de la ventana de dialogo.
100
         *
101
         */
102
        public SaveRasterDialog(FLayers layers, MapControl mapCtrl) {
103
                super();
104
                //super.setModal(true);
105
                driverProps = new DriverProperties();
106
                this.layers = layers;
107
                this.mapCtrl = mapCtrl;
108
                init();
109
        }
110
        
111
        /**
112
         * Inicializa el jDialog        
113
         *         
114
         * @return javax.swing.JDialog        
115
         */    
116
        private void init() {
117
                setBounds(0, 0, 386, 268);
118
                setName("saveRaster");
119
                                
120
                 this.getAcceptButton().setEnabled(false);
121
                 this.getAcceptButton().addActionListener(new java.awt.event.ActionListener() {
122
            public void actionPerformed(java.awt.event.ActionEvent evt) {
123
                    acceptButtonActionPerformed(evt);
124
                closeJDialog();
125
            }
126
        });
127
                 this.getCancelButton().addActionListener(new java.awt.event.ActionListener() {
128
            public void actionPerformed(java.awt.event.ActionEvent evt) {
129
                closeJDialog();
130
            }
131
        });
132
                 this.getApplyButton().addActionListener(new java.awt.event.ActionListener() {
133
            public void actionPerformed(java.awt.event.ActionEvent evt) {
134
                    acceptButtonActionPerformed(evt);
135
             }
136
        });
137
                
138
                //Captura de eventos para el bot?n de propiedades
139
                
140
                ((SaveSetupPanel)this.getContentPanel()).getSaveParameters().getBPropiedades().addActionListener(new java.awt.event.ActionListener() {
141
            public void actionPerformed(java.awt.event.ActionEvent evt) {
142
                    propsButtonActionPerformed(evt);
143
             }
144
        });
145
                
146
        }
147
        
148
        
149
        /**
150
         * This method initializes jContentPane        
151
         *         
152
         * @return javax.swing.JPanel        
153
         */    
154
        public Container getContentPane() {
155
                return this;
156
        }
157
        
158
        /**
159
         * 
160
         * @param prj
161
         */
162
        
163
        public void setProjection(IProjection prj) {
164
                this.currentProjection = prj;
165
        }
166
        
167
        /**
168
         * Asigna el FLayers
169
         * @param layers
170
         */
171
        public void setLayerList(FLayers layers){
172
                this.layers = layers;
173
        }
174
        
175
                
176
        public void closeJDialog() {
177
                this.hide();
178
                for(int i=0;i<layers.getLayersCount();i++){
179
                        layers.getLayer(i).getFMap().invalidate();
180
                }
181
                PluginServices.getMDIManager().closeView(SaveRasterDialog.this);
182
                //dlg.dispose();
183
        }
184
        
185
        private void propsButtonActionPerformed(ActionEvent e){
186
                DataInputSaveRaster dialog = (DataInputSaveRaster)((SaveSetupPanel)((SaveRasterDialogPanel)this.getContentPane()).getContentPanel()).getSaveParameters();
187
                if(dialog.getBPropiedades().getText().endsWith("Ecw")){
188
                        writerProps = new EcwWriter();
189
                        if(driverProps.getProperties("ecw")!=null){
190
                                writerProps.setProps(driverProps.getProperties("ecw"));
191
                        }
192
                }
193
                                
194
                if(dialog.getBPropiedades().getText().endsWith("GeoTiff")){
195
                        writerProps = new GdalWriter("GTiff");
196
                        if(driverProps.getProperties("tif")!=null){
197
                                writerProps.setProps(driverProps.getProperties("tif"));
198
                        }
199
                }
200
                                        
201
                frameSaveRasterProps = new SaveRasterPropsDialog(writerProps);
202
                frameSaveRasterProps.setParentDialog(this);
203
                frameSaveRasterProps.show();
204
        }
205
        
206
        /**
207
         * 
208
         * @param e
209
         */
210
    private void acceptButtonActionPerformed(ActionEvent e) {
211
            DataInputSaveRaster dialog = (DataInputSaveRaster)((SaveSetupPanel)((SaveRasterDialogPanel)this.getContentPane()).getContentPanel()).getSaveParameters();
212
                        
213
                String fName = ((SaveSetupPanel)((SaveRasterDialogPanel)this.getContentPane()).getContentPanel()).getFileName();
214
                Dimension dimension = new Dimension(Integer.parseInt(dialog.getTancho().getText()), 
215
                                                                                        Integer.parseInt(dialog.getTalto().getText()));
216
                
217
                double lrX = Double.parseDouble(dialog.getTinf_derX().getText());
218
                double lrY = Double.parseDouble(dialog.getTinf_derY().getText());
219
                double ulX = Double.parseDouble(dialog.getTsup_izqX().getText());
220
                double ulY = Double.parseDouble(dialog.getTsup_izqY().getText());
221
                double width = 0;
222
                if(ulX>lrX)width = ulX-lrX;
223
                        else width = lrX-ulX;
224
                double height = 0;
225
                if(ulY>lrY)height = ulY-lrY;
226
                        else height = lrY-ulY;
227
                Rectangle2D ext = null;
228
                
229
                if(ulY<lrY)
230
                        ext = new Rectangle2D.Double(ulX, ulY, width, height);
231
                else
232
                        ext = new Rectangle2D.Double(ulX, lrY, width, height);
233
                
234
                ViewPort vp = new ViewPort(this.currentProjection);
235
                vp.setBackColor(mapCtrl.getViewPort().getBackColor());
236
                vp.setImageSize(dimension);
237
                vp.setExtent(ext);
238
                                                                                                        
239
                if (fName.endsWith(".ecw")) {
240
                        //System.out.println("Salvando vista a fichero "+fName+" a formato Ecw");
241
                        try{
242
                        
243
                                RasterizerLayer p = new RasterizerLayer(this.layers, vp, sizeBlock, mapCtrl);
244
                                Extent ex = new Extent(vp.getAdjustedExtent());
245
                                Dimension imgSz = vp.getImageSize();
246
                                ViewPortData vpData = new ViewPortData(vp.getProjection(), ex, imgSz );
247
                                writer = new EcwWriter( ((IDataWriter)p), 
248
                                                                                vpData, 
249
                                                                                fName,
250
                                                                                sizeBlock,
251
                                                                                3, 
252
                                                                                compresion);
253
                                //Si han sido modificadas las propiedades se asignan los valores modificados
254
                                String[] prp = driverProps.getProperties("ecw"); 
255
                                if(prp!=null)
256
                                        writer.setProps(prp);
257
                                ((EcwWriter)writer).dataWrite();
258
                                ((EcwWriter)writer).writeClose(); 
259
                                        
260
                                        
261
                        }catch(IOException ev){
262
                                        ev.printStackTrace();
263
                        }catch(es.gva.cit.jecwcompress.EcwException r){ 
264
                                        r.printStackTrace();
265
                        }
266
                        
267
                }else if (fName.endsWith(".tif")) {        
268
                        //System.out.println("Salvando fichero "+fName+" a formato Tif");
269
                        try{
270
                                                        
271
                                RasterizerLayer p = new RasterizerLayer(this.layers, vp, sizeBlock, mapCtrl);
272
                                Extent ex = new Extent(vp.getAdjustedExtent());
273
                            writer = new GdalWriter(         ((IDataWriter)p), 
274
                                                                                    dimension.width, 
275
                                                                                        dimension.height, 
276
                                                                                        fName, 
277
                                                                                        ex.maxX(), 
278
                                                                                        ex.minX(), 
279
                                                                                        ex.maxY(), 
280
                                                                                        ex.minY(), 
281
                                                                                        3, 
282
                                                                                        sizeBlock,
283
                                                                                        "GTiff");
284
                            //Si han sido modificadas las propiedades se asignan los valores modificados
285
                            String[] prp = driverProps.getProperties("tif");
286
                            if(prp!=null)
287
                                        writer.setProps(prp);
288
                                ((GdalWriter)writer).dataWrite();
289
                                ((GdalWriter)writer).writeClose();
290
                        }catch(IOException ev){
291
                                ev.printStackTrace();
292
                        }catch(es.gva.cit.jgdal.GdalException r){ 
293
                                r.printStackTrace();
294
                        }
295
                        
296
                } else {
297
                    System.err.println("Extensi?n del fichero " + fName + " no soportada.");
298
                }
299
                
300
                for(int i=0;i<layers.getLayersCount();i++){
301
                        layers.getLayer(i).getFMap().invalidate();
302
                }
303
    }
304
    
305
        /**
306
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
307
         */
308
        public ViewInfo getViewInfo() {
309
                ViewInfo m_viewinfo=new ViewInfo(ViewInfo.MODALDIALOG);
310
                    m_viewinfo.setTitle(PluginServices.getText(this, "salvar_raster"));
311
                return m_viewinfo;
312
        }
313

    
314
}