Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libCq CMS for java.old / src / org / cresques / px / PxRaster.java @ 28

History | View | Annotate | Download (4.55 KB)

1
/*
2
 * PxRaster.java
3
 */
4
package org.cresques.px;
5

    
6
import java.awt.geom.Point2D;
7

    
8
import java.awt.Color;
9
import java.awt.Graphics2D;
10
import java.awt.Image;
11

    
12
import java.awt.image.ImageObserver;
13

    
14
import org.cresques.geo.ViewPort;
15
import org.cresques.io.EcwFile;
16
import org.cresques.io.GeoRasterFile;
17

    
18
public class PxRaster extends PxObj {
19
        protected GeoRasterFile geoFile = null;
20
        protected ImageObserver component = null;
21
        
22
        int transparente = 0x10ffff00;
23

    
24
        String vName = null;
25
        boolean pintaMarco = false; 
26
        
27
        /**
28
         * Constructor.
29
         * 
30
         * @param fname
31
         * @param component
32
         */        
33

    
34
        public PxRaster(ImageObserver component) {
35
                this.component = component;
36
        }
37
                
38
        public PxRaster(String fname, ImageObserver component) {
39
                geoFile = new EcwFile(fname);//loadECW(fname);
40
                this.component = component;
41
                extent = geoFile.getExtent();
42
                geoFile.setView(geoFile.getExtent());
43
        }
44
        
45
        public PxRaster(String fname, ImageObserver component, Extent view) {
46
                geoFile = new EcwFile(fname);//loadECW(fname);
47
                this.component = component;
48
                extent = geoFile.getExtent();
49
                geoFile.setView(view);
50
                
51
                //double x = 680800,y = 4128600;
52
                //setView(new Extent(x, y, x+4200, y-4200),"Huelva capital");
53
        }
54
        
55
        public PxRaster(EcwFile eFile, ImageObserver component, Extent view) {
56
                geoFile = eFile;//loadECW(fname);
57
                this.component = component;
58
                extent = eFile.getExtent();
59
                eFile.setView(view);
60
        }
61

    
62
        public void setTransparency(boolean t) {geoFile.setTransparency(t);}
63
        
64
        /**
65
         * Cambia la vista (viewport) sobre el raster.
66
         * 
67
         * @param v
68
         * @param vName
69
         */
70
        public void setView(Extent v, String vName) {
71
                geoFile.setView(v);
72
                this.vName = vName;
73
        }
74
        
75
        /**
76
         * Obtiene la escala.
77
         * 
78
         * @param width
79
         * @param height
80
         * @return
81
         */
82
        
83
        public double[] getScale(int width, int height) {
84
                double scale[] = new double[2];
85
                scale[0] = ((float) width) /geoFile.getView().width();                
86
                scale[1] = ((float) height)/geoFile.getView().height();                
87
                return scale;
88
        }
89
        
90
        /**
91
         * 'Normaliza' la vista en funci?n del extent del raster.
92
         * 
93
         * @param mat
94
         * @param sz
95
         */
96

    
97
        void calculateNewView(Extent sz) {
98
                double vx = sz.minX(), vy = sz.minY(), vx2 = sz.maxX(), vy2 = sz.maxY();
99
                if (sz.minX() < extent.minX()) vx = extent.minX();
100
                if (sz.minY() < extent.minY()) vy = extent.minY();
101
                if (sz.maxX() > extent.maxX()) vx2 = extent.maxX();
102
                if (sz.maxY() > extent.maxY()) vy2 = extent.maxY();
103
                geoFile.setView(new Extent(vx, vy, vx2, vy2));
104
        }
105

    
106
        /**
107
         * Dibuja el raster
108
         */        
109

    
110
        public void draw(Graphics2D g, ViewPort vp) {
111
                System.out.println("PxRaster.draw(): vp.extent = "+ vp.getExtent());
112
                System.out.println("PxRaster.draw():    extent = "+ getExtent());
113
                if (vp.getExtent().minX()> extent.maxX()) return;
114
                if (vp.getExtent().minY()> extent.maxY()) return;
115
                if (vp.getExtent().maxX()< extent.minX()) return;
116
                if (vp.getExtent().maxY()< extent.minY()) return;
117
                calculateNewView(vp.getExtent()); 
118
                Extent v = geoFile.getView();
119
                double x = v.minX();
120
                double y = v.minY();
121
                double w = v.width();
122
                double h = v.height();
123
                System.out.println("Pinto PxRaster:" + v);
124
                
125
                double scalex = vp.mat.getScaleX()        /* g.getTransform().getScaleX()*/ ,
126
                        scaley = vp.mat.getScaleY()                /* g.getTransform().getScaleY() */;
127
                int wImg = (int) Math.abs(w*scalex), hImg = (int) Math.abs(h*scaley);
128
                System.out.println("Sz=("+wImg+","+hImg+"); scale=("+scalex+","+scaley+")");
129
                if (wImg <= 0 || hImg <= 0) return;
130
                Image geoImage = geoFile.updateImage(wImg, hImg);
131
                
132
                Point2D.Double pt = new Point2D.Double(x, y+h);
133
                try {
134
                        System.out.println("Dibujando PxRaster: pt0 = "+pt);
135
                        vp.mat.transform(pt, pt);
136
                        System.out.println("Dibujando PxRaster: pt1 = "+pt);
137
                        if (geoFile != null) {
138
                                System.out.println("Dibujando PxRaster ...");
139

    
140
                                g.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), component);
141
                                System.out.println("Dibujando PxRaster: Hecho.");
142
                        } else {
143
                                System.err.println("Dibujando PxRaster: Foto no cargada.");
144
                        }
145
                } catch (Exception e) {
146
                        e.printStackTrace();
147
                };
148

    
149
                if (pintaMarco) {
150
                        drawMarco(g, vp);
151
                }
152
        }
153
        public void drawMarco(Graphics2D g, ViewPort vp) {
154
//                Color color = new Color(255,222,165,128), fillColor = new Color(255,214,132,128);
155
                Color color = new Color(0,0,0), fillColor = new Color(255,214,132,128);
156
                new PxRect((int) extent.minX(), (int) extent.minY(), (int) extent.width(), (int) extent.height(), color, fillColor).draw(g, vp);
157
                //new PxLine((int) extent.minX(), (int) extent.minY(), (int) extent.maxX(), (int) extent.maxY(), color).draw(g, vp);
158
                //new PxLine((int) extent.maxX(), (int) extent.minY(), (int) extent.minX(), (int) extent.maxY(), color).draw(g, vp);
159
        }
160

    
161
}