Re: Modify a loaded SVG document with Graphics2D?
| Newsgroups | gmane.text.xml.batik.user |
|---|---|
| Message-ID | <[email protected]> |
> is it possible to load an SVG document from file and display it in an
> SVGCanvas and additionally modify that document via a Graphics2D object?
>
> For example, is the following possible:
> ------------------/------------------
> final JFrame jFrame= new JFrame();
> final SVGCanvas canvas= new SVGCanvas();
> canvas.setURI(new File("mySVGFile.svg").toURI().toString());
> jFrame.getContentPane().add(canvas);
> jFrame.pack();
> jFrame.setVisible(true);
>
> [...]
>
> final SVGGraphics2D g= new SVGGraphics2D(canvas.getSVGDocument());
> final Rectangle r= new Rectangle(10,10,100,100);
> g.setPaint(Color.RED);
> g.setStroke(new BasicStroke(15f));
> g.draw(r);
>
> [...]
> ------------------/------------------
> to modify the image in the canvas?
I found it out.
It is:
------------------/------------------
Element root = canvas.getDocument().getDocumentElement();
g.getRoot(root);
------------------/------------------
The rather confusingly named method getRoot(Element) does the writing by
appending the drawn elements to the end of the SVG document.
Unfortunately, batik always adds an (empty) <def> element with
id="genericDefs". So if modifying the document is done multiple times, you
end up with several <def> elements with the same id....
Regards
Marco