001 package net.abriraqui.dm4.importexport; 002 003 import javax.xml.stream.XMLStreamException; 004 import javax.xml.stream.XMLStreamWriter; 005 import javax.xml.stream.XMLOutputFactory; 006 007 import java.io.FileWriter; 008 import java.io.IOException; 009 010 class SVGRenderer { 011 012 private XMLStreamWriter svgWriter; 013 014 public SVGRenderer(String filename) { 015 try { 016 XMLOutputFactory xof = XMLOutputFactory.newInstance(); 017 svgWriter = xof.createXMLStreamWriter(new FileWriter(filename)); 018 svgWriter.writeStartDocument(); 019 svgWriter.writeDTD("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000802//EN\" " 020 + "\"http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd\">"); 021 svgWriter.writeStartElement("svg"); 022 svgWriter.writeAttribute("width", "1200"); 023 svgWriter.writeAttribute("height", "1200"); 024 svgWriter.writeAttribute("xmlns","http://www.w3.org/2000/svg"); 025 svgWriter.writeAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"); 026 } catch (Exception e) { 027 throw new RuntimeException("Construction SVGRenderer failed", e); 028 } 029 } 030 031 public void closeDocument() throws XMLStreamException { 032 svgWriter.writeEndDocument(); // closes svg element 033 svgWriter.flush(); 034 svgWriter.close(); 035 } 036 037 038 public void line(int x1, int x2, int y1, int y2) throws XMLStreamException { 039 040 svgWriter.writeEmptyElement("line"); 041 svgWriter.writeAttribute("x1", Integer.toString(x1)); 042 svgWriter.writeAttribute("x2", Integer.toString(x2)); 043 svgWriter.writeAttribute("y1", Integer.toString(y1)); 044 svgWriter.writeAttribute("y2", Integer.toString(y2)); 045 svgWriter.writeAttribute("stroke", "lightgray"); 046 svgWriter.writeAttribute("stroke-width", "3"); 047 048 } 049 050 public void rectangle(int x, int y, int width, int height, String color) throws XMLStreamException { 051 052 svgWriter.writeEmptyElement("rect"); 053 svgWriter.writeAttribute("x", Integer.toString(x)); 054 svgWriter.writeAttribute("y", Integer.toString(y)); 055 svgWriter.writeAttribute("width", Integer.toString(width)); 056 svgWriter.writeAttribute("height", Integer.toString(height)); 057 svgWriter.writeAttribute("fill", color); 058 059 } 060 061 public void text(int x, int y, String value, String color) throws XMLStreamException { 062 text(x, y, 0, 0, value, color, 0); 063 } 064 065 066 public void text(int x, int y, int x1, int y1, String value, String color, double alpha) throws XMLStreamException { 067 068 svgWriter.writeStartElement("text"); 069 svgWriter.writeAttribute("x", Integer.toString(x)); 070 svgWriter.writeAttribute("y", Integer.toString(y)); 071 svgWriter.writeAttribute("font-size", "0.8em"); 072 svgWriter.writeAttribute("fill", color); 073 svgWriter.writeAttribute("transform","translate(" + x1 + "," + y1 +")" + " " + "rotate(" + Double.toString(alpha) + "," + x + "," + y + ")"); 074 svgWriter.writeCharacters(value); 075 svgWriter.writeEndElement(); 076 } 077 078 079 080 public void image(int x, int y, int imgWidth, int imgHeight, String imgUri) throws XMLStreamException { 081 082 svgWriter.writeEmptyElement("image"); 083 svgWriter.writeAttribute("x", Integer.toString(x)); 084 svgWriter.writeAttribute("y", Integer.toString(y)); 085 svgWriter.writeAttribute("width", Integer.toString(imgWidth)); 086 svgWriter.writeAttribute("height", Integer.toString(imgHeight)); 087 svgWriter.writeAttribute("xlink:href", imgUri); 088 089 } 090 }