Statistics
| Revision:

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

History | View | Annotate | Download (4.08 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 org.gvsig.symbology.fmap.symbols.CharacterMarkerSymbol;
16

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

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

    
31
public class CharacterPoint3DSymbol extends Abstract3DSymbol{
32

    
33
        private CharacterMarkerSymbol characterMarketSymbol;
34
        private String imagePath = null;
35
        
36

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

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

    
45
        public CharacterPoint3DSymbol(ISymbol symbol) {
46
                super(symbol);
47
                characterMarketSymbol =  (CharacterMarkerSymbol) symbol;
48
                this.setImagePath(rasterizeSymbol(characterMarketSymbol));
49
                
50
        }
51

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

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

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