Dan, Attached are two older postings, which may help you. Good luck, Elias.
-----Original Message----- From: Danilo Costa [mailto:[EMAIL PROTECTED] Sent: Tuesday, August 24, 2004 11:23 AM To: [EMAIL PROTECTED] Subject: SVG to Java2D Hi! I 'm new here! I need to convert SVG Elements to java2D element such as elipses, rectangles, lines, how ca n I do that easily? Using GVT? []s Dan -- "...YOU CANNOT KNOW THE MEANING OF YOUR LIFE UNTIL YOU ARE CONNECTED WITH THE POWER THAT CREATED YOU..." Shri Mataji Nirmala Devi --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--- Begin Message ---Hello: Peter, thanks for the code, I am sure a lot of us will find it useful. For the meanwhile, I am using Thomas suggestion (thanks!) to get access the the Java2D Shape object in the GVT items and from that i intend to build the DXF descriptions. It was really clarifing what the GVT stands for, before it was a little confusing. Thanks you guys, and if i come with something useful for all, i will post it. Andres. On Tuesday, February 17, 2004, at 06:00 PM, Peter Becker wrote: > Hi Andres, > > I did something similar, but the code is just a quick little hack for > a particular subset of SVG (only some elements, limited attributes, no > groups, no transforms). That was good enough to use little SVGs as > icons in Java. And it was also good enough to export some shapes from > OpenOffice into SVG and import them into our programs. > > Code is attached, feel free to use it. It is not much anyway. > > Peter > > > > Andres Toussaint wrote: > >> Hello: >> >> I am interested to get some guideance in creating Java2D objects from >> my >> JSVGCanvas SVGDocument. The purpose of this is to bridge it into a >> Java2D >> to DXF (autoCad) converter that i am also working on. >> >> Ultimately I think I would need to have a SVGtoDXFTranscoder, but i >> think >> having a SVGtoJava2DTranscoder is more useful in terms of using the >> Java2D >> for other formats as well. >> >> Thanks in advance, >> >> Andres. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > import java.awt.Shape; > import java.awt.geom.*; > import java.util.Iterator; > import java.util.StringTokenizer; > > import org.jdom.Element; > > /** > * This class imports simple SVG images into AWT Shape objects. > * > * Supported are: <rect>, <circle>, <ellipse>, <line>, <polyline>, > <polygon>. > * > * Styles are ignored, transformations are ignored. Group elements are > * processed via recursion, but ignored otherwise, the result is the > same as > * if the group elements have been removed before. The methods work > for simple > * SVG, but have not been tested on anything complex. > * > * @todo adding path would greatly enhance this > * @todo add tests > */ > public class SVG2Shape { > public static Shape importShape(Element svgElement) { > GeneralPath shape = importShapeUncentered(svgElement); > return centerShape(shape); > } > > private static GeneralPath importShapeUncentered(Element > svgElement) { > GeneralPath shape = new GeneralPath(); > Iterator it = svgElement.getChildren().iterator(); > while(it.hasNext()) { > Element cur = (Element) it.next(); > if(cur.getName().equals("rect")) { > double x = Double.parseDouble(cur.getAttributeValue("x")); > double y = Double.parseDouble(cur.getAttributeValue("y")); > double width = > Double.parseDouble(cur.getAttributeValue("width")); > double height = > Double.parseDouble(cur.getAttributeValue("height")); > shape.append(new Rectangle2D.Double(x, y, width, > height),false); > } else if(cur.getName().equals("circle")) { > double cx = > Double.parseDouble(cur.getAttributeValue("cx")); > double cy = > Double.parseDouble(cur.getAttributeValue("cy")); > double r = Double.parseDouble(cur.getAttributeValue("r")); > shape.append(new Ellipse2D.Double(cx - r, cy - r, 2*r, > 2*r),false); > } else if(cur.getName().equals("ellipse")) { > double cx = > Double.parseDouble(cur.getAttributeValue("cx")); > double cy = > Double.parseDouble(cur.getAttributeValue("cy")); > double rx = > Double.parseDouble(cur.getAttributeValue("rx")); > double ry = > Double.parseDouble(cur.getAttributeValue("ry")); > shape.append(new Ellipse2D.Double(cx - rx, cy - ry, > 2*rx, 2*ry),false); > } else if(cur.getName().equals("line")) { > double x1 = > Double.parseDouble(cur.getAttributeValue("x1")); > double y1 = > Double.parseDouble(cur.getAttributeValue("y1")); > double x2 = > Double.parseDouble(cur.getAttributeValue("x2")); > double y2 = > Double.parseDouble(cur.getAttributeValue("y2")); > shape.append(new Line2D.Double(x1, y1, x2, y2),false); > } else if(cur.getName().equals("polyline") || > cur.getName().equals("polygon")) { > StringTokenizer tokenizer = new > StringTokenizer(cur.getAttributeValue("points"), " ,"); > boolean first = true; > while(tokenizer.hasMoreElements()) { > float x = Float.parseFloat(tokenizer.nextToken()); > float y = Float.parseFloat(tokenizer.nextToken()); > if(first) { > shape.moveTo(x,y); > first = false; > } else { > shape.lineTo(x,y); > } > } > if(cur.getName().equals("polygon")) { > shape.closePath(); > } > } else if(cur.getName().equals("g")) { > shape.append(importShapeUncentered(cur),false); > } > } > return shape; > } > > private static Shape centerShape(Shape shape) { > Rectangle2D bounds = shape.getBounds2D(); > double xOffset = bounds.getX() - bounds.getWidth()/2; > double yOffset = bounds.getY() - bounds.getHeight()/2; > return AffineTransform.getTranslateInstance(xOffset, > yOffset).createTransformedShape(shape); > } > > public static Shape importShape(Element svgElement, double width, > double height) { > Shape untransformedShape = importShape(svgElement); > float scaleX = (float) (width / > untransformedShape.getBounds2D().getWidth()); > float scaleY = (float) (height / > untransformedShape.getBounds2D().getHeight()); > AffineTransform transform; > if(scaleX > scaleY) { > transform = AffineTransform.getScaleInstance(scaleY, scaleY); > } else { > transform = AffineTransform.getScaleInstance(scaleX, > scaleX); > } > return transform.createTransformedShape(untransformedShape); > } > } > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--- End Message ---
--- Begin Message ---Hi: My suggestion is to read the Java Graphics 2D information you need from the GVT tree. Once you load a SVGDocument into a JSCGComponent (you do not need a canvas to access the GVT), you can access the GVT by adding a GVTTreeBuilderListener to your SVGComponent, in the gvtBuildCompleted event. Once you have the GVT tree, you can walk through it, and retrieve the Graphics2D representation of your SVG file. I use this method to feed a DXF exporter Library that requires Graphics 2D objects to transform into DXF and it works perfectly. Basically: public SomeMethod() { JSVGComponent svg = new JSVGComponent(); svg.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() { public void documentLoadingStarted(SVGDocumentLoaderEvent e) { } public void documentLoadingCompleted(SVGDocumentLoaderEvent e) { } }); svg.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() { public void gvtBuildStarted(GVTTreeBuilderEvent e) { } public void gvtBuildCompleted(GVTTreeBuilderEvent e) { // Now the tree is ready, we have to walk through it GVTTreeWalker tw = new GVTTreeWalker(e.getGVTRoot()); GraphicsNode node = tw.firstChild(); //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // Walk through the tree to locate and extract the Graphics info you want. //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// } }); try { svg.loadSVGDocument(f.toURL().toString()); } catch(Exception e){ System.out.println("Could not load SVG file into Component. "+e); } } On Jun 23, 2004, at 12:48 PM, Arek Stryjski wrote: > Hi, > > I'm wondering that is the simplest way to change SVG into Java Image. > > I will need to change XML fragment (one of org.w3c.dom.svg.SVGElement > returned > from org.w3c.dom.events.Event.getTarget()) into java.awt.Image > In most cases the produced Image will be kind of Icon for element. I > don't need > to save it in any format, I will use it in other swing components. > > I was looking at org.apache.batik.transcoder and one way I see, is to > implement > my own ImageTranscoder, TranscoderInput and TranscoderOutput > However maybe there are some ready classes that could help me to do > part of this > job, or maybe there is some other place in Batik I should look for > solution for > this. > > Best regards > Arek > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--- End Message ---
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
