CFx SDK Documentation  2020SP3
avgpc.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2017, Open Design Alliance (the "Alliance").
3 // All rights reserved.
4 //
5 // This software and its documentation and related materials are owned by
6 // the Alliance. The software may only be incorporated into application
7 // programs owned by members of the Alliance, subject to a signed
8 // Membership Agreement and Supplemental Software License Agreement with the
9 // Alliance. The structure and organization of this software are the valuable
10 // trade secrets of the Alliance and its suppliers. The software is also
11 // protected by copyright law and international treaty provisions. Application
12 // programs incorporating this software must include the following statement
13 // with their copyright notices:
14 //
15 // This application incorporates Teigha(R) software pursuant to a license
16 // agreement with Open Design Alliance.
17 // Teigha(R) Copyright (C) 2002-2017 by Open Design Alliance.
18 // All rights reserved.
19 //
20 // By use of this software, its documentation or related materials, you
21 // acknowledge and accept the above terms.
23 
24 /*
25 ===========================================================================
26 
27 Project: Generic Polygon Clipper
28 
29  A new algorithm for calculating the difference, intersection,
30  exclusive-or or union of arbitrary polygon sets.
31 
32 File: gpc.h
33 Author: Alan Murta (email: gpc@cs.man.ac.uk)
34 Version: 2.32
35 Date: 17th December 2004
36 
37 Copyright: (C) Advanced Interfaces Group,
38  University of Manchester.
39 
40  This software is free for non-commercial use. It may be copied,
41  modified, and redistributed provided that this copyright notice
42  is preserved on all copies. The intellectual property rights of
43  the algorithms used reside with the University of Manchester
44  Advanced Interfaces Group.
45 
46  You may not use this software, in whole or in part, in support
47  of any commercial product without the express consent of the
48  author.
49 
50  There is no warranty or other guarantee of fitness of this
51  software for any purpose. It is provided solely "as is".
52 
53 ODA Notice: This software has been licensed by the Open Design Alliance. Any
54  use outside of Teigha-based member applications requires the user
55  to obtain a separate license.
56 
57 ===========================================================================
58 */
59 
60 #ifndef __gpc_h
61 #define __gpc_h
62 
63 #include <stdio.h>
64 #include "Ge/GeExport.h"
65 
66 #ifdef __cplusplus
67 extern "C"
68 {
69 #endif
70 
71 /*
72 ===========================================================================
73  Constants
74 ===========================================================================
75 */
76 
77 /* Increase GPC_EPSILON to encourage merging of near coincident edges */
78 
79 #define GPC_EPSILON (DBL_EPSILON)
80 
81 #define GPC_VERSION "2.32"
82 
83 
84 /*
85 ===========================================================================
86  Public Data Types
87 ===========================================================================
88 */
89 
90 typedef enum /* Set operation type */
91 {
92  GPC_DIFF, /* Difference */
93  GPC_INT, /* Intersection */
94  GPC_XOR, /* Exclusive or */
95  GPC_UNION /* Union */
97 
98 typedef struct /* Polygon vertex structure */
99 {
100  double x; /* Vertex x component */
101  double y; /* vertex y component */
102 } gpc_vertex;
103 
104 typedef struct /* Vertex list structure */
105 {
106  int num_vertices; /* Number of vertices in list */
107  gpc_vertex *vertex; /* Vertex array pointer */
109 
110 typedef struct /* Polygon set structure */
111 {
112  int num_contours; /* Number of contours in polygon */
113  int *hole; /* Hole / external contour flags */
114  gpc_vertex_list *contour; /* Contour array pointer */
115 } gpc_polygon;
116 
117 typedef struct /* Tristrip set structure */
118 {
119  int num_strips; /* Number of tristrips */
120  gpc_vertex_list *strip; /* Tristrip array pointer */
121 } gpc_tristrip;
122 
123 
124 /*
125 ===========================================================================
126  Public Function Prototypes
127 ===========================================================================
128 */
129 //DD:EXPORT_ON
130 
131 void GE_TOOLKIT_EXPORT gpc_read_polygon (FILE *infile_ptr,
132  int read_hole_flags,
133  gpc_polygon *polygon);
134 
135 void GE_TOOLKIT_EXPORT gpc_write_polygon (FILE *outfile_ptr,
136  int write_hole_flags,
137  gpc_polygon *polygon);
138 
140  gpc_vertex_list *contour,
141  int hole);
142 
144  gpc_polygon *subject_polygon,
145  gpc_polygon *clip_polygon,
146  gpc_polygon *result_polygon);
147 
148 /* ODA extension
149 Returns 1 if returned result_polygon is the same as one of operands (depending on set_operation)
150 */
152  gpc_polygon *subject_polygon,
153  gpc_polygon *clip_polygon,
154  gpc_polygon *result_polygon);
155 
157  gpc_polygon *subject_polygon,
158  gpc_polygon *clip_polygon,
159  gpc_tristrip *result_tristrip);
160 
162  gpc_tristrip *tristrip);
163 
165 
167 
168 #ifdef __cplusplus
169 } // extern "C"
170 
171 #include "OdAlloc.h"
172 /* ODA extension
173 Allocate memory for polygon elements (compatible with gpc_free_polygon function).
174 */
175 template <class Type>
176 Type *gpc_alloc(int num_structs)
177 { return (Type*)::odrxAlloc(sizeof(Type) * num_structs); }
178 
179 #endif
180 
181 //DD:EXPORT_OFF
182 
183 #endif // __gpc_h
184 
185 /*
186 ===========================================================================
187  End of file: gpc.h
188 ===========================================================================
189 */
OdPdfPublish::Action::Type
Type
Definition: PdfPublishCommon.h:444
GPC_XOR
@ GPC_XOR
Definition: avgpc.h:94
gpc_polygon::contour
gpc_vertex_list * contour
Definition: avgpc.h:114
gpc_tristrip::strip
gpc_vertex_list * strip
Definition: avgpc.h:120
gpc_vertex
Definition: avgpc.h:99
gpc_write_polygon
void GE_TOOLKIT_EXPORT gpc_write_polygon(FILE *outfile_ptr, int write_hole_flags, gpc_polygon *polygon)
gpc_polygon::num_contours
int num_contours
Definition: avgpc.h:112
GPC_UNION
@ GPC_UNION
Definition: avgpc.h:95
GPC_DIFF
@ GPC_DIFF
Definition: avgpc.h:92
gpc_vertex::y
double y
Definition: avgpc.h:101
gpc_op
gpc_op
Definition: avgpc.h:91
gpc_vertex_list
Definition: avgpc.h:105
GeExport.h
OdAlloc.h
gpc_read_polygon
void GE_TOOLKIT_EXPORT gpc_read_polygon(FILE *infile_ptr, int read_hole_flags, gpc_polygon *polygon)
gpc_add_contour
void GE_TOOLKIT_EXPORT gpc_add_contour(gpc_polygon *polygon, gpc_vertex_list *contour, int hole)
gpc_tristrip_clip
void GE_TOOLKIT_EXPORT gpc_tristrip_clip(gpc_op set_operation, gpc_polygon *subject_polygon, gpc_polygon *clip_polygon, gpc_tristrip *result_tristrip)
gpc_polygon_clip
void GE_TOOLKIT_EXPORT gpc_polygon_clip(gpc_op set_operation, gpc_polygon *subject_polygon, gpc_polygon *clip_polygon, gpc_polygon *result_polygon)
gpc_tristrip::num_strips
int num_strips
Definition: avgpc.h:119
gpc_polygon_clip_ex
int GE_TOOLKIT_EXPORT gpc_polygon_clip_ex(gpc_op set_operation, gpc_polygon *subject_polygon, gpc_polygon *clip_polygon, gpc_polygon *result_polygon)
odrxAlloc
ALLOCDLL_EXPORT void * odrxAlloc(size_t nBytes)
gpc_vertex_list::vertex
gpc_vertex * vertex
Definition: avgpc.h:107
GE_TOOLKIT_EXPORT
#define GE_TOOLKIT_EXPORT
Definition: GeExport.h:49
gpc_polygon::hole
int * hole
Definition: avgpc.h:113
gpc_vertex_list::num_vertices
int num_vertices
Definition: avgpc.h:106
gpc_tristrip
Definition: avgpc.h:118
gpc_free_tristrip
void GE_TOOLKIT_EXPORT gpc_free_tristrip(gpc_tristrip *tristrip)
GPC_INT
@ GPC_INT
Definition: avgpc.h:93
gpc_polygon
Definition: avgpc.h:111
gpc_vertex::x
double x
Definition: avgpc.h:100
gpc_polygon_to_tristrip
void GE_TOOLKIT_EXPORT gpc_polygon_to_tristrip(gpc_polygon *polygon, gpc_tristrip *tristrip)
gpc_free_polygon
void GE_TOOLKIT_EXPORT gpc_free_polygon(gpc_polygon *polygon)