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 | 18103 | jcampos | 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 | 18954 | jcampos | import com.iver.cit.gvsig.fmap.core.SymbologyFactory; |
18 | 18103 | jcampos | import com.iver.cit.gvsig.fmap.core.symbols.ISymbol; |
19 | import com.iver.cit.gvsig.fmap.core.symbols.MultiLayerMarkerSymbol; |
||
20 | 18954 | jcampos | import com.iver.cit.gvsig.fmap.core.symbols.SymbolDrawingException; |
21 | 18103 | jcampos | 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 | 18219 | mten | import es.upv.ai2.osgvp.Node; |
27 | import es.upv.ai2.osgvp.Vec3; |
||
28 | import es.upv.ai2.osgvp.Vec4; |
||
29 | 18103 | jcampos | |
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 | 18954 | jcampos | 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 | 18103 | jcampos | |
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 | } |