Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / lib3DMap / src / com / iver / ai2 / gvsig3d / simbology3D / symbol3D / point / MultiLayerPoint3DSymbol.java @ 18219

History | View | Annotate | Download (3.61 KB)

1
package com.iver.ai2.gvsig3d.simbology3D.symbol3D.point;
2

    
3
import java.awt.Color;
4
import java.awt.Graphics2D;
5
import java.awt.Image;
6
import java.awt.Rectangle;
7
import java.awt.geom.AffineTransform;
8
import java.awt.image.BufferedImage;
9
import java.awt.image.RenderedImage;
10
import java.io.File;
11
import java.io.FileOutputStream;
12
import java.io.IOException;
13
import java.util.List;
14

    
15
import com.iver.ai2.gvsig3d.gui.FeatureFactory;
16
import com.iver.ai2.gvsig3d.simbology3D.symbol3D.Abstract3DSymbol;
17
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
18
import com.iver.cit.gvsig.fmap.core.symbols.MultiLayerMarkerSymbol;
19
import com.sun.media.jai.codec.ImageCodec;
20
import com.sun.media.jai.codec.ImageEncoder;
21
import com.sun.media.jai.codec.PNGEncodeParam;
22
import com.sun.media.jai.codec.TIFFEncodeParam;
23

    
24
import es.upv.ai2.osgvp.Node;
25
import es.upv.ai2.osgvp.Vec3;
26
import es.upv.ai2.osgvp.Vec4;
27

    
28
public class MultiLayerPoint3DSymbol extends Abstract3DSymbol{
29

    
30
        private MultiLayerMarkerSymbol multiLayerMarketSymbol;
31
        private String imagePath = null;
32
        
33

    
34
        public String getImagePath() {
35
                return imagePath;
36
        }
37

    
38
        public void setImagePath(String imagePath) {
39
                this.imagePath = imagePath;
40
        }
41

    
42
        public MultiLayerPoint3DSymbol(ISymbol symbol) {
43
                super(symbol);
44
                multiLayerMarketSymbol =  (MultiLayerMarkerSymbol) symbol;
45
                this.setImagePath(rasterizeSymbol(multiLayerMarketSymbol));
46
                
47
        }
48

    
49
        @Override
50
        public Node generateSymbol(List<Vec3> position) {
51
                return FeatureFactory.generateQuadPoligon(position.get(0),new Vec4(1.0,1.0,1.0,1.0),this.getImagePath(),(float)multiLayerMarketSymbol.getSize()*10);
52
        }
53
        
54
        
55
        private String rasterizeSymbol(MultiLayerMarkerSymbol sym) {
56

    
57
                BufferedImage image;
58
                // Setting the size symbol
59
                double size = sym.getSize();
60
                // Generating the image
61
                image = new BufferedImage((int) size, (int) size,
62
                                BufferedImage.TYPE_INT_ARGB);
63
                // Getting graphics
64
                Graphics2D graphics = image.createGraphics();
65
                // Transparent background
66
                Color backgColor = new Color(0, 0,0, 0);
67
                graphics.setColor(backgColor);
68
                // Setting the fill rectangle
69
                graphics.fillRect(0, 0, (int) size, (int) size);
70
                // Drawing
71

    
72
                AffineTransform at =new AffineTransform();
73
                at.scale(10, 10);
74
                
75
                sym.drawInsideRectangle(graphics,at ,new Rectangle((int)size,(int)size));
76
                
77
                String sip = "SymbolTmp.png";
78
                File file = new File(sip);
79
                String format = "png";
80
                try {
81
                        saveCachedFile(image, format, file);
82
                } catch (IOException e) {
83
                        // TODO Auto-generated catch block
84
                        e.printStackTrace();
85
                }
86
                
87
                return sip;
88
        }
89
        
90
        public void saveCachedFile(Image img, String format, File f)
91
                        throws IOException {
92
                // ImageIO.write((RenderedImage) img, format, f);
93
                // File file = new File(fName);
94
                FileOutputStream out = new FileOutputStream(f);
95
                if (f.exists()){
96
                        f.delete();
97
                        f.createNewFile();
98
                }
99
                if (format.equals("png")) {
100
                        PNGEncodeParam params = new PNGEncodeParam.RGB();
101
                        
102
                        // params.setsetCompression(TIFFEncodeParam.COMPRESSION_NONE);
103
                        ImageEncoder encoder = ImageCodec.createImageEncoder("PNG", out,
104
                                        params);
105
                        if (encoder == null) {
106
                                System.out.println("imageEncoder is null");
107
                                System.exit(0);
108
                        }
109
                        encoder.encode((RenderedImage) img);
110
                } else if (format.equals("tif")) {
111
                        TIFFEncodeParam params = new TIFFEncodeParam();
112
                        params.setCompression(TIFFEncodeParam.COMPRESSION_NONE);
113
                        ImageEncoder encoder = ImageCodec.createImageEncoder("TIFF", out,
114
                                        params);
115
                        if (encoder == null) {
116
                                System.out.println("imageEncoder is null");
117
                                System.exit(0);
118
                        }
119
                        encoder.encode((RenderedImage) img);
120
                }
121
                out.close();
122
        }
123
}