Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ===========================================================================
- Project: Generic Polygon Clipper
- A new algorithm for calculating the difference, intersection,
- exclusive-or or union of arbitrary polygon sets.
- File: gpc.h
- Author: Alan Murta (email: gpc@cs.man.ac.uk)
- Version: 2.32
- Date: 17th December 2004
- Copyright: (C) Advanced Interfaces Group,
- University of Manchester.
- This software is free for non-commercial use. It may be copied,
- modified, and redistributed provided that this copyright notice
- is preserved on all copies. The intellectual property rights of
- the algorithms used reside with the University of Manchester
- Advanced Interfaces Group.
- You may not use this software, in whole or in part, in support
- of any commercial product without the express consent of the
- author.
- There is no warranty or other guarantee of fitness of this
- software for any purpose. It is provided solely "as is".
- ===========================================================================
- */
- #ifndef __gpc_h
- #define __gpc_h
- #include <stdio.h>
- /*
- ===========================================================================
- Constants
- ===========================================================================
- */
- /* Increase GPC_EPSILON to encourage merging of near coincident edges */
- #define GPC_EPSILON (DBL_EPSILON)
- #define GPC_VERSION "2.32"
- /*
- ===========================================================================
- Public Data Types
- ===========================================================================
- */
- typedef enum /* Set operation type */
- {
- GPC_DIFF, /* Difference */
- GPC_INT, /* Intersection */
- GPC_XOR, /* Exclusive or */
- GPC_UNION /* Union */
- } gpc_op;
- typedef struct /* Polygon vertex structure */
- {
- double x; /* Vertex x component */
- double y; /* vertex y component */
- } gpc_vertex;
- typedef struct /* Vertex list structure */
- {
- int num_vertices; /* Number of vertices in list */
- gpc_vertex *vertex; /* Vertex array pointer */
- } gpc_vertex_list;
- typedef struct /* Polygon set structure */
- {
- int num_contours; /* Number of contours in polygon */
- int *hole; /* Hole / external contour flags */
- gpc_vertex_list *contour; /* Contour array pointer */
- } gpc_polygon;
- typedef struct /* Tristrip set structure */
- {
- int num_strips; /* Number of tristrips */
- gpc_vertex_list *strip; /* Tristrip array pointer */
- } gpc_tristrip;
- /*
- ===========================================================================
- TCL compatibility
- ===========================================================================
- */
- /*
- ===========================================================================
- Public Function Prototypes
- ===========================================================================
- */
- void gpc_read_polygon (FILE *infile_ptr,
- int read_hole_flags,
- gpc_polygon *polygon);
- void gpc_write_polygon (FILE *outfile_ptr,
- int write_hole_flags,
- gpc_polygon *polygon);
- void gpc_add_contour (gpc_polygon *polygon,
- gpc_vertex_list *contour,
- int hole);
- void gpc_polygon_clip (gpc_op set_operation,
- gpc_polygon *subject_polygon,
- gpc_polygon *clip_polygon,
- gpc_polygon *result_polygon);
- void gpc_tristrip_clip (gpc_op set_operation,
- gpc_polygon *subject_polygon,
- gpc_polygon *clip_polygon,
- gpc_tristrip *result_tristrip);
- void gpc_polygon_to_tristrip (gpc_polygon *polygon,
- gpc_tristrip *tristrip);
- void gpc_free_polygon (gpc_polygon *polygon);
- void gpc_free_tristrip (gpc_tristrip *tristrip);
- /*
- ===========================================================================
- TCL compatibility functions
- ===========================================================================
- */
- //vertex
- gpc_vertex_list gpc_vertex_list_make (int n);
- int gpc_vertex_num_get (gpc_vertex_list *list);
- void gpc_vertex_set (gpc_vertex_list *list, int n, double x, double y);
- #ifdef SWIG
- %apply double *OUTPUT {double *x, double *y };
- #endif
- void gpc_vertex_get (gpc_vertex_list *list, int n, double *x, double *y);
- #ifdef SWIG
- %clear double *x;
- %clear double *y;
- #endif
- //polygon
- gpc_polygon * gpc_polygon_empty_make ();
- int gpc_polygon_num_get (gpc_polygon *polygon);
- gpc_vertex_list gpc_polygon_vertex_list_get (gpc_polygon *polygon, int n);
- //functions taken from https://github.com/jraedler/Polygon3
- void gpc_polygon_rotate (gpc_polygon *p, double alpha, double xc, double yc);
- void gpc_polygon_scale (gpc_polygon *p, double xs, double ys, double xc, double yc);
- void gpc_polygon_shift (gpc_polygon *p, double x, double y);
- //misc
- int gpc_write_polygon_tcl (const char *filename, gpc_polygon *polygon);
- #endif
- /*
- ===========================================================================
- End of file: gpc.h
- ===========================================================================
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement