From 7b52cc13af4e85f1ca2deb6b6c77de9c95ea0dcf Mon Sep 17 00:00:00 2001 From: scuri Date: Fri, 17 Oct 2008 06:10:33 +0000 Subject: First commit - moving from LuaForge to SourceForge --- src/pdflib/pdcore/pc_geom.h | 116 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/pdflib/pdcore/pc_geom.h (limited to 'src/pdflib/pdcore/pc_geom.h') diff --git a/src/pdflib/pdcore/pc_geom.h b/src/pdflib/pdcore/pc_geom.h new file mode 100644 index 0000000..629157d --- /dev/null +++ b/src/pdflib/pdcore/pc_geom.h @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------* + | PDFlib - A library for generating PDF on the fly | + +---------------------------------------------------------------------------+ + | Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. | + +---------------------------------------------------------------------------+ + | | + | This software is subject to the PDFlib license. It is NOT in the | + | public domain. Extended versions and commercial licenses are | + | available, please check http://www.pdflib.com. | + | | + *---------------------------------------------------------------------------*/ + +/* $Id: pc_geom.h,v 1.1 2008/10/17 06:10:43 scuri Exp $ + * + * PDFlib core geometry utilities + * + */ + +#ifndef PC_GEOM_H +#define PC_GEOM_H + +/* Unfortunately M_PI causes porting woes, so we use a private name */ +#define PDC_M_PI 3.14159265358979323846 /* pi */ +#define PDC_DEG2RAD 0.0174532925199433 +#define PDC_RAD2DEG 57.2957795130823070 + +/* Conversion factors */ +#define PDC_INCH2METER 0.0254 +#define PDC_METER2INCH 39.3701 + +/* same as PDF_SMALLREAL */ +#define PDC_SMALLREAL (0.000015) + +typedef double pdc_scalar; +typedef struct { pdc_scalar x, y; } pdc_vector; +typedef struct { pdc_vector ll, ur; } pdc_box; +typedef struct { pdc_scalar llx, lly, urx, ury; } pdc_rectangle; +typedef struct { int np; pdc_vector *p; } pdc_polyline; +typedef struct { pdc_scalar a, b, c, d, e, f; } pdc_matrix; + +/* methods for fitting rectangle elements into a box */ +typedef enum +{ + pdc_nofit = 0, /* no fit, only positioning */ + pdc_clip, /* no fit, only positioning with following condition: + * - the parts of element beyond the bounds of box + * are clipped */ + pdc_slice, /* fit into the box with following conditions: + * - aspect ratio of element is preserved + * - entire box is covered by the element + * - the parts of element beyond the bounds of box + * are clipped */ + pdc_meet, /* fit into the box with following conditions: + * - aspect ratio of element is preserved + * - entire element is visible in the box */ + pdc_entire, /* fit into the box with following conditions: + * - entire box is covered by the element + * - entire element is visible in the box */ + pdc_tauto /* automatic fitting. If element extends fit box in + * length, then element is shrinked, if shrink + * factor is greater than a specified value. Otherwise + * pdc_meet is applied. */ +} +pdc_fitmethod; + +pdc_bool pdc_is_identity_matrix(pdc_matrix *m); +void pdc_identity_matrix(pdc_matrix *M); +void pdc_translation_matrix(pdc_scalar tx, pdc_scalar ty, pdc_matrix *M); +void pdc_scale_matrix(pdc_scalar sx, pdc_scalar sy, pdc_matrix *M); +void pdc_rotation_matrix(pdc_scalar angle, pdc_matrix *M); +void pdc_skew_matrix(pdc_scalar alpha, pdc_scalar beta, pdc_matrix *M); +void pdc_multiply_matrix(const pdc_matrix *M, pdc_matrix *N); +void pdc_multiply_matrix3(pdc_matrix *L, const pdc_matrix *M, + const pdc_matrix *N); +void pdc_multiply_6s_matrix(pdc_matrix *M, pdc_scalar a, pdc_scalar b, + pdc_scalar c, pdc_scalar d, pdc_scalar e, pdc_scalar f); +void pdc_invert_matrix(pdc_core *pdc, pdc_matrix *N, pdc_matrix *M); +void pdc_print_matrix(const char *name, const pdc_matrix *M); +pdc_scalar pdc_transform_scalar(const pdc_matrix *M, pdc_scalar s); +void pdc_transform_point(const pdc_matrix *M, + pdc_scalar x, pdc_scalar y, pdc_scalar *tx, pdc_scalar *ty); +void pdc_transform_vector(const pdc_matrix *M, pdc_vector *v, pdc_vector *tv); +void pdc_transform_rvector(const pdc_matrix *M, pdc_vector *v, pdc_vector *tv); +pdc_scalar pdc_get_vector_length(pdc_vector *start, pdc_vector *end); + +void pdc_place_element(pdc_fitmethod method, pdc_scalar minfscale, + const pdc_box *fitbox, const pdc_vector *fitrelpos, + const pdc_vector *elemsize, const pdc_vector *elemrelpos, + pdc_box *elembox, pdc_vector *scale); +void pdc_box2polyline(const pdc_matrix *M, const pdc_box *box, + pdc_vector *polyline); +void *pdc_delete_polylinelist(pdc_core *pdc, pdc_polyline *polylinelist, + int nplines); +void pdc_init_box(pdc_box *box); +void pdc_adapt_box(pdc_box *box, const pdc_vector *v); +void pdc_normalize_box(pdc_box *box, pdc_scalar ydir); +void pdc_transform_box(const pdc_matrix *M, pdc_box *box, pdc_box *tbox); + +pdc_bool pdc_rect_isnull(const pdc_rectangle *r); +pdc_bool pdc_rect_contains(const pdc_rectangle *r1, const pdc_rectangle *r2); +void pdc_rect_copy(pdc_rectangle *r1, const pdc_rectangle *r2); +void pdc_rect_init(pdc_rectangle *r, + pdc_scalar llx, pdc_scalar lly, pdc_scalar urx, pdc_scalar ury); +pdc_bool pdc_rect_intersect(pdc_rectangle *result, + const pdc_rectangle *r1, const pdc_rectangle *r2); +void pdc_rect_transform(const pdc_matrix *M, + const pdc_rectangle *r1, pdc_rectangle *r2); +void pdc_rect_normalize(pdc_rectangle *r); +void pdc_rect_normalize2(pdc_rectangle *dst, const pdc_rectangle *src); +void pdc_rect2polyline(const pdc_matrix *M, const pdc_rectangle *r, + pdc_vector *polyline); +void pdc_polyline2rect(const pdc_vector *polyline, int np, pdc_rectangle *r); +void pdc_print_rectangle(const char *name, const pdc_rectangle *r); + +#endif /* PC_GEOM_H */ + -- cgit v1.2.3