Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / core / styles / SVGStyle.java @ 10995

History | View | Annotate | Download (2.82 KB)

1
package com.iver.cit.gvsig.fmap.core.styles;
2
import java.awt.Graphics2D;
3
import java.awt.Rectangle;
4
import java.awt.RenderingHints;
5
import java.io.File;
6
import java.io.IOException;
7

    
8
import org.apache.batik.bridge.BridgeContext;
9
import org.apache.batik.bridge.DocumentLoader;
10
import org.apache.batik.bridge.GVTBuilder;
11
import org.apache.batik.bridge.UserAgentAdapter;
12
import org.apache.batik.bridge.ViewBox;
13
import org.apache.batik.gvt.GraphicsNode;
14
import org.apache.batik.gvt.renderer.StaticRenderer;
15
import org.w3c.dom.Document;
16
import org.w3c.dom.Element;
17
import org.w3c.dom.svg.SVGDocument;
18

    
19
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
20
import com.iver.utiles.XMLEntity;
21

    
22
public class SVGStyle extends AbstractStyle {
23

    
24
        private GVTBuilder gvtBuilder = new GVTBuilder();
25
    private UserAgentAdapter userAgent;
26
        private DocumentLoader loader;
27
        private StaticRenderer renderer = new StaticRenderer();
28
        private GraphicsNode gvtRoot;
29
        private BridgeContext ctx;
30
        private Element elt;
31
        private String sourceFile;
32
        protected static RenderingHints defaultRenderingHints;
33
    static {
34
        defaultRenderingHints = new RenderingHints(null);
35
        defaultRenderingHints.put(RenderingHints.KEY_ANTIALIASING,
36
                                  RenderingHints.VALUE_ANTIALIAS_ON);
37

    
38
        defaultRenderingHints.put(RenderingHints.KEY_INTERPOLATION,
39
                                  RenderingHints.VALUE_INTERPOLATION_BILINEAR);
40
    }
41

    
42
        public SVGStyle(){
43
                userAgent = new UserAgentAdapter();
44
                loader    = new DocumentLoader(userAgent);
45
                ctx       = new BridgeContext(userAgent, loader);
46
                renderer.setDoubleBuffered(true);
47
        }
48
        
49
        public void drawInsideRectangle(Graphics2D g, Rectangle r) {
50
                Graphics2D g2 = (Graphics2D) g;
51
                RenderingHints renderingHints = new RenderingHints(defaultRenderingHints);
52
                g2.setRenderingHints(renderingHints);
53
                gvtRoot.setTransform((ViewBox.getViewTransform(null, elt, (float) r.getWidth()-1, (float) r.getHeight()-1)));
54
                gvtRoot.paint(g2);
55
        }
56

    
57
        public boolean isSuitableFor(ISymbol symbol) {
58
                return true;
59
        }
60

    
61
        public String getClassName() {
62
                return getClass().getName();
63
        }
64

    
65
        public XMLEntity getXMLEntity() {
66
                XMLEntity xml = new XMLEntity();
67
                xml.putProperty("className", getClassName());
68
                xml.putProperty("source", sourceFile);
69
                xml.putProperty("desc", getDescription());
70
                return xml;
71
        }
72

    
73
        public void setXMLEntity(XMLEntity xml) {
74
                try {
75
                        setSource(new File(xml.getStringProperty("source")));
76
                        setDescription(xml.getStringProperty("desc"));
77
                } catch (IOException e) {
78
                        // TODO Auto-generated catch block
79
                        e.printStackTrace();
80
                }
81
        }
82

    
83
        public void setSource(File f) throws IOException {
84
                sourceFile = f.getAbsolutePath();
85
                Document svgDoc = loader.loadDocument(f.toURI().toString());
86
        gvtRoot = gvtBuilder.build(ctx, svgDoc);
87
        renderer.setTree(gvtRoot);
88
        elt = ((SVGDocument)svgDoc).getRootElement();
89
        }
90
}