Statistics
| Revision:

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

History | View | Annotate | Download (4.09 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.SymbologyFactory;
18
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
19
import com.iver.cit.gvsig.fmap.core.symbols.MultiLayerMarkerSymbol;
20
import com.iver.cit.gvsig.fmap.core.symbols.SymbolDrawingException;
21
import com.sun.media.jai.codec.ImageCodec;
22
import com.sun.media.jai.codec.ImageEncoder;
23
import com.sun.media.jai.codec.PNGEncodeParam;
24
import com.sun.media.jai.codec.TIFFEncodeParam;
25

    
26
import es.upv.ai2.osgvp.Node;
27
import es.upv.ai2.osgvp.Vec3;
28
import es.upv.ai2.osgvp.Vec4;
29

    
30
public class MultiLayerPoint3DSymbol extends Abstract3DSymbol{
31

    
32
        private MultiLayerMarkerSymbol multiLayerMarketSymbol;
33
        private String imagePath = null;
34
        
35

    
36
        public String getImagePath() {
37
                return imagePath;
38
        }
39

    
40
        public void setImagePath(String imagePath) {
41
                this.imagePath = imagePath;
42
        }
43

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

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

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

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