// Copyright 2001 FreeHEP. package org.freehep.graphicsio.ps; import java.io.IOException; import java.io.PrintStream; import org.freehep.graphicsio.QuadToCubicPathConstructor; /** * @author Mark Donszelmann * @version $Id: PSPathConstructor.java,v 1.2 2002/08/28 22:44:05 duns Exp $ */ public class PSPathConstructor extends QuadToCubicPathConstructor { private PrintStream os; private boolean intPrecision; private String moveto, lineto, curveto, close; public PSPathConstructor(PrintStream os, boolean useProlog, boolean intPrecision) { super(); this.os=os; this.intPrecision = intPrecision; if (useProlog) { moveto = "m"; lineto = "l"; curveto = "c"; close = "h"; } else { moveto = "moveto"; lineto = "lineto"; curveto = "curveto"; close = "closepath"; } } public void move(double x, double y) throws IOException { os.println(fixedPrecision(x)+" "+fixedPrecision(y)+" "+moveto); super.move(x, y); } public void line(double x, double y) throws IOException { os.println(fixedPrecision(x)+" "+fixedPrecision(y)+" "+lineto); super.line(x, y); } public void cubic(double x1, double y1, double x2, double y2, double x3, double y3) throws IOException { os.println(fixedPrecision(x1)+" "+fixedPrecision(y1)+" "+ fixedPrecision(x2)+" "+fixedPrecision(y2)+" "+ fixedPrecision(x3)+" "+fixedPrecision(y3)+" "+" "+curveto); super.cubic(x1, y1, x2, y2, x3, y3); } public void closePath() throws IOException { os.println(close); super.closePath(); } protected String fixedPrecision(double d) { if (intPrecision) { return Integer.toString((int)d); } else { String dbl = Double.toString(d); int index = dbl.lastIndexOf("."); index = Math.min(index+7,dbl.length()); return dbl.substring(0,index); } } }