1 19 package jcckit; 20 21 import java.io.FileWriter ; 22 23 import jcckit.data.DataPlot; 24 import jcckit.graphic.ClippingRectangle; 25 import jcckit.plot.PlotCanvas; 26 import jcckit.renderer.SVGRenderer; 27 import jcckit.util.ConfigParameters; 28 import jcckit.util.Factory; 29 import jcckit.util.Format; 30 import jcckit.util.PropertiesBasedConfigData; 31 32 38 public class SVGPlotter { 39 private static final Format HEADER_FORMAT = new Format( 40 "<?xml version='1.0' encoding='ISO-8859-1'?>\n" 41 + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" " 42 + "\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n" 43 + "<svg viewBox='%9.7g %9.7g %9.7g %9.7g' preserveAspectRatio='x"); 44 45 57 public static String makeSVG(PlotCanvas canvas, String renderer) { 58 ClippingRectangle paper = canvas.getPaper(); 59 double w = paper.getMaxX() - paper.getMinX(); 60 double h = paper.getMaxY() - paper.getMinY(); 61 StringBuffer buffer = new StringBuffer ( 62 HEADER_FORMAT.form(new double[] {paper.getMinX(), -paper.getMaxY(), 63 w, h})); 64 buffer.append(mapAnchor(canvas.getHorizontalAnchor().getFactor())) 65 .append('Y') 66 .append(mapAnchor(2 - canvas.getVerticalAnchor().getFactor())) 67 .append("'>\n"); 68 69 canvas.getPlot().getCompletePlot().renderWith( 70 ((SVGRenderer) Factory.create(renderer)) 71 .init(buffer, 1, Math.sqrt(w * w + h * h))); 72 buffer.append("</svg>\n"); 73 return new String (buffer); 74 } 75 76 private static String mapAnchor(int anchorFactor) { 77 return anchorFactor == 0 ? "Min" : (anchorFactor == 1 ? "Mid" : "Max"); 78 } 79 80 89 public static void main(String [] args) throws Exception { 90 if (args.length == 0) { 91 showUsageAndExit(); 92 } 93 int index = 0; 94 String propFileName = args[0]; 95 String outputFileName = null; 96 if (propFileName.equals("-o")) { 97 if (args.length > 2) { 98 outputFileName = args[1]; 99 propFileName = args[2]; 100 } else { 101 showUsageAndExit(); 102 } 103 index += 2; 104 } 105 propFileName = args[index]; 106 String renderer = "jcckit.renderer.SVGRenderer"; 107 if (propFileName.equals("-r")) { 108 if (args.length > index + 2) { 109 renderer = args[++index]; 110 propFileName = args[++index]; 111 } else { 112 showUsageAndExit(); 113 } 114 } 115 ConfigParameters config 116 = new ConfigParameters(new PropertiesBasedConfigData(propFileName)); 117 PlotCanvas plotCanvas = new PlotCanvas(config); 118 plotCanvas.connect(DataPlot.create(config)); 119 String output = makeSVG(plotCanvas, renderer); 120 if (outputFileName == null) { 121 System.out.println(output); 122 } else { 123 FileWriter writer = new FileWriter (outputFileName); 124 writer.write(output, 0, output.length()); 125 writer.close(); 126 } 127 } 128 129 private static void showUsageAndExit() { 130 System.out.println("Usage: java jcckit.SVGPlotter [-o <output file>] " 131 + "[-r <renderer class>] <properties file>"); 132 System.exit(1); 133 } 134 } 135 | Popular Tags |