diff options
Diffstat (limited to 'generic/Geo.h')
-rw-r--r-- | generic/Geo.h | 384 |
1 files changed, 0 insertions, 384 deletions
diff --git a/generic/Geo.h b/generic/Geo.h deleted file mode 100644 index 08c5892..0000000 --- a/generic/Geo.h +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Geo.h -- Header for common geometric routines. - * - * Authors : Patrick Lecoanet. - * Creation date : - * - * $Id$ - */ - -/* - * Copyright (c) 1993 - 2005 CENA, Patrick Lecoanet -- - * - * See the file "Copyright" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - */ - - -#ifndef _Geo_h -#define _Geo_h - - -#include "Attrs.h" -#include "List.h" - -#include <math.h> -#include <limits.h> - - -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327 -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif -#ifndef M_PI_4 -#define M_PI_4 0.78539816339744830962 -#endif - -#define PRECISION_LIMIT 1.0e-10 -#define X_PRECISION_LIMIT 5.0e-2 -#define ZN_LINE_END_POINTS 6 - -/* - * Constants used to specify circle approximation quality. - */ -#define ZN_CIRCLE_COARSE 0 -#define ZN_CIRCLE_MEDIUM ZN_CIRCLE_COARSE+1 -#define ZN_CIRCLE_FINE ZN_CIRCLE_MEDIUM+1 -#define ZN_CIRCLE_FINER ZN_CIRCLE_FINE+1 -#define ZN_CIRCLE_FINEST ZN_CIRCLE_FINER+1 - - -/* - * I would like to make these be floats, - * but have to investigate how. Structures - * handed to GL or GLU tess _must_ have - * points has doubles. - */ -typedef struct { - double x, y; -} ZnPoint; - -typedef struct { - double x, y, w, h; -} ZnRect; - -/* - * ZnBBox: orig is into the area while corner is not. - * Thus the test: ((bbox.orig.x == bbox.corner.x) || - * (bbox.orig.y == bbox.corner.y)) - * tells whether the bbox is empty or not. - * When interpreting bboxes the X coordinate system is - * the norm. x goes from left toward the right and y - * goes from the top toward the bottom. Bboxes are - * always axes aligned. - */ -typedef struct { - ZnPoint orig, corner; -} ZnBBox; - -typedef struct { - unsigned int num_points; - ZnPoint *points; - char *controls; - ZnBool cw; -} ZnContour; - -/* - * contour1 can be used to store a single contour - * without having to alloc the contours array. - */ -typedef struct { - unsigned int num_contours; - ZnContour *contours; - ZnContour contour1; -} ZnPoly; - -/* - * Keep this enum in sync with op_strings in Contour() - * in tkZinc.c. - */ -typedef enum { - ZN_CONTOUR_ADD, ZN_CONTOUR_REMOVE -} ZnContourCmd; - -typedef struct { - unsigned int num_points; - ZnPoint *points; - ZnBool fan; /* When using a fan, all contour vertices must be - * included to describe the contour as a polygon - * (clipping code use that to speed up region - * rendering) and the center must be the first - * vertex. */ -} ZnStrip; - -typedef struct { - unsigned int num_strips; - ZnStrip *strips; - ZnStrip strip1; -} ZnTriStrip; - - -#ifndef MIN -#define MIN(a, b) ((a) <= (b) ? (a) : (b)) -#endif -#ifndef MAX -#define MAX(a, b) ((a) >= (b) ? (a) : (b)) -#endif -#ifndef ABS -#define ABS(a) ((a) < 0 ? -(a) : (a)) -#endif - -#define ZnDegRad(angle) \ - (M_PI * (double) (angle) / 180.0) -#define ZnRadDeg(angle) \ - (fmod((angle) * 180.0 / M_PI, 360.0)) -#define ZnRadDeg360(angle) \ - (fmod(ZnRadDeg(angle)+360.0,360.0)) - -#define ZnNearestInt(d) \ - (((int) ((d) + (((d) > 0) ? 0.5 : -0.5)))) - -void -ZnPolyInit(ZnPoly *poly); -void -ZnPolyContour1(ZnPoly *poly, - ZnPoint *pts, - unsigned int num_pts, - ZnBool cw); -void -ZnPolySet(ZnPoly *poly1, - ZnPoly *poly2); -void -ZnPolyFree(ZnPoly *poly); -void -ZnTriStrip1(ZnTriStrip *tristrip, - ZnPoint *pts, - unsigned int num_pts, - ZnBool fan); -void -ZnTriFree(ZnTriStrip *tristrip); - -void -ZnAnchor2Origin(ZnPoint *position, - ZnDim width, - ZnDim height, - Tk_Anchor anchor, - ZnPoint *origin); -void -ZnOrigin2Anchor(ZnPoint *origin, - ZnDim width, - ZnDim height, - Tk_Anchor anchor, - ZnPoint *position); -void ZnRectOrigin2Anchor(ZnPoint *rect, Tk_Anchor anchor, ZnPoint *position); -void -ZnBBox2XRect(ZnBBox *bbox, - XRectangle *rect); -void -ZnGetStringBBox(char *str, - Tk_Font font, - ZnPos x, - ZnPos y, - ZnBBox *str_bbox); -void -ZnResetBBox(ZnBBox *bbox); -void -ZnCopyBBox(ZnBBox *bbox_from, - ZnBBox *bbox_to); -void -ZnIntersectBBox(ZnBBox *bbox1, - ZnBBox *bbox2, - ZnBBox *bbox_inter); -ZnBool -ZnIsEmptyBBox(ZnBBox *bbox); -void -ZnAddBBoxToBBox(ZnBBox *bbox, - ZnBBox *bbox2); -void -ZnAddPointToBBox(ZnBBox *bbox, - ZnPos px, - ZnPos py); -void -ZnAddPointsToBBox(ZnBBox *bbox, - ZnPoint *points, - unsigned int num_points); -void -ZnAddStringToBBox(ZnBBox *bbox, - char *str, - Tk_Font font, - ZnPos cx, - ZnPos cy); -ZnBool -ZnPointInBBox(ZnBBox *bbox, - ZnPos x, - ZnPos y); - -int -ZnLineInBBox(ZnPoint *p1, - ZnPoint *p2, - ZnBBox *bbox); - -int -ZnBBoxInBBox(ZnBBox *bbox1, - ZnBBox *bbox2); - -int -ZnPolylineInBBox(ZnPoint *points, - unsigned int num_points, - ZnDim width, - int cap_style, - int join_style, - ZnBBox *bbox); - -int -ZnPolygonInBBox(ZnPoint *points, - unsigned int num_points, - ZnBBox *bbox, - ZnBool *area_enclosed); - -int -ZnOvalInBBox(ZnPoint *center, - ZnDim width, - ZnDim height, - ZnBBox *bbox); - -ZnBool -ZnHorizLineToArc(ZnReal x1, - ZnReal x2, - ZnReal y, - ZnReal rx, - ZnReal ry, - int start_angle, - int angle_extent); - -ZnBool -ZnVertLineToArc(ZnReal x, - ZnReal y1, - ZnReal y2, - ZnReal rx, - ZnReal ry, - int start_angle, - int angle_extent); - -ZnBool -ZnPointInAngle(int start_angle, - int angle_extent, - ZnPoint *p); - -void -ZnPointPolarToCartesian(ZnReal heading, - ZnReal rho, - ZnReal theta, - ZnReal *delta_x, - ZnReal *delta_y); - -ZnReal -ZnProjectionToAngle(ZnReal dx, - ZnReal dy); - -ZnDim -ZnRectangleToPointDist(ZnBBox *bbox, - ZnPoint *p); -ZnDim ZnLineToPointDist(ZnPoint *p1, ZnPoint *p2, ZnPoint *p, ZnPoint *closest); - -ZnDim -ZnPolygonToPointDist(ZnPoint *points, - unsigned int num_points, - ZnPoint *p); - -ZnDim -ZnPolylineToPointDist(ZnPoint *points, - unsigned int num_points, - ZnDim width, - int cap_style, - int join_style, - ZnPoint *p); - -ZnDim -ZnOvalToPointDist(ZnPoint *center, - ZnDim width, - ZnDim height, - ZnDim line_width, - ZnPoint *p); - -void -ZnGetButtPoints(ZnPoint *p1, - ZnPoint *p2, - ZnDim width, - ZnBool projecting, - ZnPoint *c1, - ZnPoint *c2); - -ZnBool -ZnGetMiterPoints(ZnPoint *p1, - ZnPoint *p2, - ZnPoint *p3, - ZnDim width, - ZnPoint *c1, - ZnPoint *c2); - -ZnBool -ZnIntersectLines(ZnPoint *a1, - ZnPoint *a2, - ZnPoint *b1, - ZnPoint *b2, - ZnPoint *pi); - -void -ZnShiftLine(ZnPoint *p1, - ZnPoint *p2, - ZnDim dist, - ZnPoint *p3, - ZnPoint *p4); - -void -ZnInsetPolygon(ZnPoint *p, - unsigned int num_points, - ZnDim inset); - -void -ZnSmoothPathWithBezier(ZnPoint *from_points, - unsigned int num_points, - ZnList to_points); - -void -ZnGetBezierPoints(ZnPoint *p1, - ZnPoint *c1, - ZnPoint *c2, - ZnPoint *p2, - ZnList to_points, - double eps); -void -ZnGetBezierPath(ZnList from_points, - ZnList to_points); - - -ZnPoint * -ZnGetCirclePoints(int type, - int quality, - ZnReal start_angle, - ZnReal angle_extent, - unsigned int *num_points, - ZnList point_list); - -void -ZnGetArcPath(ZnReal start_angle, - ZnReal end_angle, - int type, - ZnList to_points); - -void -ZnFitBezier(ZnPoint *pts, - unsigned int num_points, - ZnReal error, - ZnList controls); - -ZnBool -ZnTestCCW(ZnPoint *p, - unsigned int num_points); - - -#endif /* _Geo_h */ |