From 5abe4bd15642bbc83f46553aa5275430b14f5f91 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Tue, 10 May 2005 14:55:18 +0000 Subject: *** empty log message *** --- zinclib.d/src/ZincPath.hpp | 162 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 zinclib.d/src/ZincPath.hpp (limited to 'zinclib.d/src/ZincPath.hpp') diff --git a/zinclib.d/src/ZincPath.hpp b/zinclib.d/src/ZincPath.hpp new file mode 100644 index 0000000..4b6fa21 --- /dev/null +++ b/zinclib.d/src/ZincPath.hpp @@ -0,0 +1,162 @@ +/** Path.hpp + * zinclib + * + * This software is the property of IntuiLab SA, France. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Here we defines The ZincPath object + * + * 08/03/05 + * + * Contributors: + * Benoit Peccatte + * + */ +#include "ZincTypes.hpp" + +#include +#include + +#ifndef ZINC_PATH +#define ZINC_PATH + +class ZincPath +{ + double firstX, firstY; //first point's coordinate + double lastX, lastY; //last point's coordinate + Tcl_Obj* path; //list of points + + /** + * Append the point to the real path + * + * @param x,y the point coordinate + * @param c true if the point is a control point + */ + inline void addPoint (double x, double y, bool c); + + /** + * Convert ellipse from SVG form to centered form (used only by arcTo) + * + * @param x0,y0 origin of the arc + * @param rx x-radius of ellipse in degree (can be modified) + * @param ry y-radius of ellipse in degree (can be modified) + * @param phi rotation of ellipse in degree (can be modified) + * @param largeArc true if the large part of the ellipse + * @param sweep true for a positive angle direction for the drawing + * @param x,y destination point + * @param cx,cy center coordinate + * @param theta begining of arc in degree + * @param delta extent of arc in degree + */ + void convertFromSvg (double x0, double y0, double &rx, double &ry, double &phi, + bool larcgeArc, bool sweep, double x, double y, + double &cx, double &cy, double &theta, double &delta); + + +public: + /** + * The public constructor + * + * @param x,y the initial point + */ + ZincPath (double x, double y); + + /** + * The public destructor + * + * @warning Do not destroy a ZincPath if Zinc is not loaded + */ + ~ZincPath (); + + /****************************************** + ZincPath manipulation + ******************************************/ + /** + * Close current path + */ + void close (); + + /** + * Draw a line from current point to next point + * + * @param x,y next point + */ + void lineTo (double x, double y); + + /** + * Draw a cubic bezier using specified control and destination points + * call cubicBezierTo + * + * @param cx1,cy1 first control point + * @param cx2,cy2 second control point + * @param x,y destination point + */ + void curveTo (double cx1, double cy1, double cx2, double cy2, + double x, double y); + + /** + * Draw a cubic bezier using specified control and destination points + * + * @param cx1,cy1 first control point + * @param cx2,cy2 second control point + * @param x,y destination point + */ + void cubicBezierTo (double cx1, double cy1, double cx2, double cy2, + double x, double y); + + /** + * Draw a quadratic bezier using specified control and destination point + * + * @param cx1,cy1 first control point + * @param cx2,cy2 second control point + * @param x,y destination point + */ + void quadraticBezierTo (double cx, double cy, double x, double y); + + /** + * Draw an arc from current point to x,y + * + * @param rx x-radius of ellipse + * @param ry y-radius of ellipse + * @param xAxisRotation rotation of ellipse + * @param largeArc true if the large part of the ellipse + * @param sweepFlag true for a positive angle direction for the drawing + * @param x,y destination point + */ + void arcTo (double rx, double ry, double xAxisRotation, bool largeArc, + bool sweepFlag, double x, double y); + + /** + * Return a Tcl_Obj* containing a list of coords points + * It's up to the caller to delete the resulting table + * + * @return a Tcl_Obj* of type list + */ + Tcl_Obj* getTable (); + +}; + +#endif + -- cgit v1.1