summaryrefslogtreecommitdiff
path: root/graphics/asymptote/prc/PRC.h
blob: 9ce6ea70e0e3ab7fc38c7dcfdb2a13e483603362 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
#ifndef __PRC_H
#define __PRC_H

#ifdef _MSC_VER
#if _MSC_VER >= 1600
#include <stdint.h>
#else
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
#endif // _MSC_VER >= 1600
#else
#include <inttypes.h>
#endif // _MSC_VER

//const uint32_t PRCVersion=7094;   // For Adobe Reader 8 or later
const uint32_t PRCVersion=8137; // For Adobe Reader 9 or later

// from Adobe's documentation

#define PRC_TYPE_Unknown			( (uint32_t)-1 )

#define PRC_TYPE_ROOT				0			// This type does not correspond to any entity

#define PRC_TYPE_ROOT_PRCBase			( PRC_TYPE_ROOT + 1 )	// Abstract root type for any PRC entity. 
#define PRC_TYPE_ROOT_PRCBaseWithGraphics	( PRC_TYPE_ROOT + 2 )	// Abstract root type for any PRC entity which can bear graphics. 

#define PRC_TYPE_CRV				( PRC_TYPE_ROOT + 10 )	// Types for PRC geometrical curves
#define PRC_TYPE_SURF				( PRC_TYPE_ROOT + 75 )	// Types for PRC geometrical surfaces
#define PRC_TYPE_TOPO				( PRC_TYPE_ROOT + 140 )	// Types for PRC topology
#define PRC_TYPE_TESS				( PRC_TYPE_ROOT + 170 )	// Types for PRC tessellation
#define PRC_TYPE_MISC				( PRC_TYPE_ROOT + 200 )	// Types for PRC global data
#define PRC_TYPE_RI				( PRC_TYPE_ROOT + 230 )	// Types for PRC representation items
#define PRC_TYPE_ASM				( PRC_TYPE_ROOT + 300 )	// Types for PRC assembly
#define PRC_TYPE_MKP				( PRC_TYPE_ROOT + 500 )	// Types for PRC markup
#define PRC_TYPE_GRAPH				( PRC_TYPE_ROOT + 700 )	// Types for PRC graphics
#define PRC_TYPE_MATH				( PRC_TYPE_ROOT + 900 )	// Types for PRC mathematical operators

#define PRC_TYPE_CRV_Base			( PRC_TYPE_CRV + 1 )	// Abstract type for all geometric curves. 
#define PRC_TYPE_CRV_Blend02Boundary		( PRC_TYPE_CRV + 2 )	// Boundary Curve. 
#define PRC_TYPE_CRV_NURBS			( PRC_TYPE_CRV + 3 )	// Non Uniform BSpline curve. 
#define PRC_TYPE_CRV_Circle			( PRC_TYPE_CRV + 4 )	// Circle. 
#define PRC_TYPE_CRV_Composite			( PRC_TYPE_CRV + 5 )	// Array of oriented curves. 
#define PRC_TYPE_CRV_OnSurf			( PRC_TYPE_CRV + 6 )	// Curve defined by a UV curve on a surface. 
#define PRC_TYPE_CRV_Ellipse			( PRC_TYPE_CRV + 7 )	// Ellipse. 
#define PRC_TYPE_CRV_Equation			( PRC_TYPE_CRV + 8 )	// curve described by specific law elements 
#define PRC_TYPE_CRV_Helix			( PRC_TYPE_CRV + 9 )	// Helix curve. 
#define PRC_TYPE_CRV_Hyperbola			( PRC_TYPE_CRV + 10 )	// Hyperbola. 
#define PRC_TYPE_CRV_Intersection		( PRC_TYPE_CRV + 11 )	// Intersection between 2 surfaces. 
#define PRC_TYPE_CRV_Line			( PRC_TYPE_CRV + 12 )	// Line. 
#define PRC_TYPE_CRV_Offset			( PRC_TYPE_CRV + 13 )	// Offset curve. 
#define PRC_TYPE_CRV_Parabola			( PRC_TYPE_CRV + 14 )	// Parabola. 
#define PRC_TYPE_CRV_PolyLine			( PRC_TYPE_CRV + 15 )	// Polyedric curve. 
#define PRC_TYPE_CRV_Transform			( PRC_TYPE_CRV + 16 )	// Transformed curve. 

#define PRC_TYPE_SURF_Base			( PRC_TYPE_SURF + 1 )	// Abstract type for all geometric surfaces. 
#define PRC_TYPE_SURF_Blend01			( PRC_TYPE_SURF + 2 )	// Blend surface. 
#define PRC_TYPE_SURF_Blend02			( PRC_TYPE_SURF + 3 )	// Blend Surface. 
#define PRC_TYPE_SURF_Blend03			( PRC_TYPE_SURF + 4 )	// Blend Surface. 
#define PRC_TYPE_SURF_NURBS			( PRC_TYPE_SURF + 5 )	// Non Uniform BSpline surface. 
#define PRC_TYPE_SURF_Cone			( PRC_TYPE_SURF + 6 )	// Cone. 
#define PRC_TYPE_SURF_Cylinder			( PRC_TYPE_SURF + 7 )	// Cylinder. 
#define PRC_TYPE_SURF_Cylindrical		( PRC_TYPE_SURF + 8 )	// Surface who is defined in cylindrical space. 
#define PRC_TYPE_SURF_Offset			( PRC_TYPE_SURF + 9 )	// Offset surface. 
#define PRC_TYPE_SURF_Pipe			( PRC_TYPE_SURF + 10 )	// Pipe. 
#define PRC_TYPE_SURF_Plane			( PRC_TYPE_SURF + 11 )	// Plane. 
#define PRC_TYPE_SURF_Ruled			( PRC_TYPE_SURF + 12 )	// Ruled surface. 
#define PRC_TYPE_SURF_Sphere			( PRC_TYPE_SURF + 13 )	// Sphere. 
#define PRC_TYPE_SURF_Revolution		( PRC_TYPE_SURF + 14 )	// Surface of revolution. 
#define PRC_TYPE_SURF_Extrusion			( PRC_TYPE_SURF + 15 )	// Surface of extrusion. 
#define PRC_TYPE_SURF_FromCurves		( PRC_TYPE_SURF + 16 )	// Surface from two curves. 
#define PRC_TYPE_SURF_Torus			( PRC_TYPE_SURF + 17 )	// Torus. 
#define PRC_TYPE_SURF_Transform			( PRC_TYPE_SURF + 18 )	// Transformed surface. 
#define PRC_TYPE_SURF_Blend04			( PRC_TYPE_SURF + 19 )	// defined for future use. 

#define PRC_TYPE_TOPO_Context			( PRC_TYPE_TOPO + 1 )	// Self-containing set of topological entities. 
#define PRC_TYPE_TOPO_Item			( PRC_TYPE_TOPO + 2 )	// Abstract root type for any topological entity (body or single item).
#define PRC_TYPE_TOPO_MultipleVertex		( PRC_TYPE_TOPO + 3 )	// Vertex whose position is the average of all edges' extremity positions to whom it belongs.
#define PRC_TYPE_TOPO_UniqueVertex		( PRC_TYPE_TOPO + 4 )	// Vertex with one set of coordinates (absolute position).
#define PRC_TYPE_TOPO_WireEdge			( PRC_TYPE_TOPO + 5 )	// Edge belonging to a wire body / single wire body.
#define PRC_TYPE_TOPO_Edge			( PRC_TYPE_TOPO + 6 )	// Edge belonging to a brep data.
#define PRC_TYPE_TOPO_CoEdge			( PRC_TYPE_TOPO + 7 )	// Usage of an edge in a loop.
#define PRC_TYPE_TOPO_Loop			( PRC_TYPE_TOPO + 8 )	// Array of co edges which delimits a face.
#define PRC_TYPE_TOPO_Face			( PRC_TYPE_TOPO + 9 )	// Topological face delimiting a shell.
#define PRC_TYPE_TOPO_Shell			( PRC_TYPE_TOPO + 10 )	// Topological shell (open or closed).
#define PRC_TYPE_TOPO_Connex			( PRC_TYPE_TOPO + 11 )	// Topological region delimited by one or several shells. 
#define PRC_TYPE_TOPO_Body			( PRC_TYPE_TOPO + 12 )	// Abstract root type for any topological body.
#define PRC_TYPE_TOPO_SingleWireBody		( PRC_TYPE_TOPO + 13 )	// Single wire body.
#define PRC_TYPE_TOPO_BrepData			( PRC_TYPE_TOPO + 14 )	// Main entry to solid and surface topology (regular form).
#define PRC_TYPE_TOPO_SingleWireBodyCompress	( PRC_TYPE_TOPO + 15 )	// Single wire body. (ultra compressed form).
#define PRC_TYPE_TOPO_BrepDataCompress		( PRC_TYPE_TOPO + 16 )	// Main entry to solid and surface topology (ultra compressed form).
#define PRC_TYPE_TOPO_WireBody			( PRC_TYPE_TOPO + 17 )	// This type is the main entry to wire topology. 

#define PRC_TYPE_TESS_Base			( PRC_TYPE_TESS + 1 )	// Abstract root type for any tessellated entity. 
#define PRC_TYPE_TESS_3D			( PRC_TYPE_TESS + 2 )	// Tessellated faceted data; regular form. 
#define PRC_TYPE_TESS_3D_Compressed		( PRC_TYPE_TESS + 3 )	// Tessellated faceted data; highly compressed form. 
#define PRC_TYPE_TESS_Face			( PRC_TYPE_TESS + 4 )	// Tessellated face. 
#define PRC_TYPE_TESS_3D_Wire			( PRC_TYPE_TESS + 5 )	// Tessellated wireframe. 
#define PRC_TYPE_TESS_Markup			( PRC_TYPE_TESS + 6 )	// Tessellated markup. 

#define PRC_TYPE_MISC_Attribute			( PRC_TYPE_MISC + 1 )	// Entity attribute. 
#define PRC_TYPE_MISC_CartesianTransformation	( PRC_TYPE_MISC + 2 )	// Cartesian transformation. 
#define PRC_TYPE_MISC_EntityReference		( PRC_TYPE_MISC + 3 )	// Entity reference. 
#define PRC_TYPE_MISC_MarkupLinkedItem		( PRC_TYPE_MISC + 4 )	// Link between a markup and an entity. 
#define PRC_TYPE_MISC_ReferenceOnPRCBase	( PRC_TYPE_MISC + 5 )	// Reference pointing on a regular entity (not topological). 
#define PRC_TYPE_MISC_ReferenceOnTopology	( PRC_TYPE_MISC + 6 )	// Reference pointing on a topological entity. 
#define PRC_TYPE_MISC_GeneralTransformation	( PRC_TYPE_MISC + 7 )	// General transformation.

#define PRC_TYPE_RI_RepresentationItem		( PRC_TYPE_RI + 1 )	// Basic abstract type for representation items. 
#define PRC_TYPE_RI_BrepModel			( PRC_TYPE_RI + 2 )	// Basic type for surfaces and solids. 
#define PRC_TYPE_RI_Curve			( PRC_TYPE_RI + 3 )	// Basic type for curves. 
#define PRC_TYPE_RI_Direction			( PRC_TYPE_RI + 4 )	// Optional point + vector. 
#define PRC_TYPE_RI_Plane			( PRC_TYPE_RI + 5 )	// Construction plane, as opposed to planar surface. 
#define PRC_TYPE_RI_PointSet			( PRC_TYPE_RI + 6 )	// Set of points. 
#define PRC_TYPE_RI_PolyBrepModel		( PRC_TYPE_RI + 7 )	// Basic type to polyhedral surfaces and solids. 
#define PRC_TYPE_RI_PolyWire			( PRC_TYPE_RI + 8 )	// Polyedric wireframe entity. 
#define PRC_TYPE_RI_Set				( PRC_TYPE_RI + 9 )	// Logical grouping of arbitrary number of representation items. 
#define PRC_TYPE_RI_CoordinateSystem		( PRC_TYPE_RI + 10 )	// Coordinate system. 

#define PRC_TYPE_ASM_ModelFile			( PRC_TYPE_ASM + 1 )	// Basic entry type for PRC. 
#define PRC_TYPE_ASM_FileStructure		( PRC_TYPE_ASM + 2 )	// Basic structure for PRC files. 
#define PRC_TYPE_ASM_FileStructureGlobals	( PRC_TYPE_ASM + 3 )	// Basic structure for PRC files : globals. 
#define PRC_TYPE_ASM_FileStructureTree		( PRC_TYPE_ASM + 4 )	// Basic structure for PRC files : tree. 
#define PRC_TYPE_ASM_FileStructureTessellation	( PRC_TYPE_ASM + 5 )	// Basic structure for PRC files : tessellation. 
#define PRC_TYPE_ASM_FileStructureGeometry	( PRC_TYPE_ASM + 6 )	// Basic structure for PRC files : geometry. 
#define PRC_TYPE_ASM_FileStructureExtraGeometry	( PRC_TYPE_ASM + 7 )	// Basic structure for PRC files : extra geometry data.
#define PRC_TYPE_ASM_ProductOccurence		( PRC_TYPE_ASM + 10 )	// Basic contruct for assemblies. 
#define PRC_TYPE_ASM_PartDefinition		( PRC_TYPE_ASM + 11 )	// Basic construct for parts. 
#define PRC_TYPE_ASM_Filter			( PRC_TYPE_ASM + 20 )

#define PRC_TYPE_MKP_View			( PRC_TYPE_MKP + 1 )	// Grouping of markup by views. 
#define PRC_TYPE_MKP_Markup			( PRC_TYPE_MKP + 2 )	// Basic type for simple markups. 
#define PRC_TYPE_MKP_Leader			( PRC_TYPE_MKP + 3 )	// basic type for markup leader 
#define PRC_TYPE_MKP_AnnotationItem		( PRC_TYPE_MKP + 4 )	// Usage of a markup.
#define PRC_TYPE_MKP_AnnotationSet		( PRC_TYPE_MKP + 5 )	// Group of annotations.
#define PRC_TYPE_MKP_AnnotationReference	( PRC_TYPE_MKP + 6 )	// Logical grouping of annotations for reference.

#define PRC_TYPE_GRAPH_Style			( PRC_TYPE_GRAPH + 1 )	// Display style. 
#define PRC_TYPE_GRAPH_Material			( PRC_TYPE_GRAPH + 2 )	// Display material properties. 
#define PRC_TYPE_GRAPH_Picture			( PRC_TYPE_GRAPH + 3 )	// Picture. 
#define PRC_TYPE_GRAPH_TextureApplication	( PRC_TYPE_GRAPH + 11 )	// Texture application. 
#define PRC_TYPE_GRAPH_TextureDefinition	( PRC_TYPE_GRAPH + 12 )	// Texture definition. 
#define PRC_TYPE_GRAPH_TextureTransformation	( PRC_TYPE_GRAPH + 13 )	// Texture transformation. 
#define PRC_TYPE_GRAPH_LinePattern		( PRC_TYPE_GRAPH + 21 )	// One dimensional display style. 
#define PRC_TYPE_GRAPH_FillPattern		( PRC_TYPE_GRAPH + 22 )	// Abstract class for two-dimensional display style. 
#define PRC_TYPE_GRAPH_DottingPattern		( PRC_TYPE_GRAPH + 23 )	// Two-dimensional filling with dots. 
#define PRC_TYPE_GRAPH_HatchingPattern		( PRC_TYPE_GRAPH + 24 )	// Two-dimensional filling with hatches. 
#define PRC_TYPE_GRAPH_SolidPattern		( PRC_TYPE_GRAPH + 25 )	// Two-dimensional filling with particular style (color, material, texture). 
#define PRC_TYPE_GRAPH_VPicturePattern		( PRC_TYPE_GRAPH + 26 )	// Two-dimensional filling with vectorised picture. 
#define PRC_TYPE_GRAPH_AmbientLight		( PRC_TYPE_GRAPH + 31 )	// Scene ambient illumination. 
#define PRC_TYPE_GRAPH_PointLight		( PRC_TYPE_GRAPH + 32 )	// Scene point illumination. 
#define PRC_TYPE_GRAPH_DirectionalLight		( PRC_TYPE_GRAPH + 33 )	// Scene directional illumination. 
#define PRC_TYPE_GRAPH_SpotLight		( PRC_TYPE_GRAPH + 34 )	// Scene spot illumination. 
#define PRC_TYPE_GRAPH_SceneDisplayParameters	( PRC_TYPE_GRAPH + 41 )	// Parameters for scene visualisation. 
#define PRC_TYPE_GRAPH_Camera			( PRC_TYPE_GRAPH + 42 )	// 

#define PRC_TYPE_MATH_FCT_1D			( PRC_TYPE_MATH + 1 )	// Basic type for one degree equation object. 
#define PRC_TYPE_MATH_FCT_1D_Polynom		( PRC_TYPE_MATH_FCT_1D + 1 )	// Polynomial equation. 
#define PRC_TYPE_MATH_FCT_1D_Trigonometric	( PRC_TYPE_MATH_FCT_1D + 2 )	// Cosinus based equation. 
#define PRC_TYPE_MATH_FCT_1D_Fraction		( PRC_TYPE_MATH_FCT_1D + 3 )	// Fraction between 2 one degree equation object. 
#define PRC_TYPE_MATH_FCT_1D_ArctanCos		( PRC_TYPE_MATH_FCT_1D + 4 )	// Specific equation. 
#define PRC_TYPE_MATH_FCT_1D_Combination	( PRC_TYPE_MATH_FCT_1D + 5 )	// Combination of one degree equation object. 
#define PRC_TYPE_MATH_FCT_3D			( PRC_TYPE_MATH + 10 )	// Basic type for 3rd degree equation object. 
#define PRC_TYPE_MATH_FCT_3D_Linear		( PRC_TYPE_MATH_FCT_3D + 1 )	// Linear transformation ( with a matrix ). 
#define PRC_TYPE_MATH_FCT_3D_NonLinear		( PRC_TYPE_MATH_FCT_3D + 2 )	// Specific transformation. 

#define PRC_PRODUCT_FLAG_DEFAULT        0x0001
#define PRC_PRODUCT_FLAG_INTERNAL       0x0002
#define PRC_PRODUCT_FLAG_CONTAINER      0x0004
#define PRC_PRODUCT_FLAG_CONFIG         0x0008
#define PRC_PRODUCT_FLAG_VIEW           0x0010

#define PRC_TRANSFORMATION_Identity     0x00
#define PRC_TRANSFORMATION_Translate    0x01
#define PRC_TRANSFORMATION_Rotate       0x02
#define PRC_TRANSFORMATION_Mirror       0x04
#define PRC_TRANSFORMATION_Scale        0x08
#define PRC_TRANSFORMATION_NonUniformScale 0x10
#define PRC_TRANSFORMATION_NonOrtho     0x20
#define PRC_TRANSFORMATION_Homogeneous  0x40

#define PRC_FACETESSDATA_Polyface                          0x0001
#define PRC_FACETESSDATA_Triangle                          0x0002
#define PRC_FACETESSDATA_TriangleFan                       0x0004
#define PRC_FACETESSDATA_TriangleStripe                    0x0008
#define PRC_FACETESSDATA_PolyfaceOneNormal                 0x0010
#define PRC_FACETESSDATA_TriangleOneNormal                 0x0020
#define PRC_FACETESSDATA_TriangleFanOneNormal              0x0040
#define PRC_FACETESSDATA_TriangleStripeOneNormal           0x0080
#define PRC_FACETESSDATA_PolyfaceTextured                  0x0100
#define PRC_FACETESSDATA_TriangleTextured                  0x0200
#define PRC_FACETESSDATA_TriangleFanTextured               0x0400
#define PRC_FACETESSDATA_TriangleStripeTextured            0x0800
#define PRC_FACETESSDATA_PolyfaceOneNormalTextured         0x1000
#define PRC_FACETESSDATA_TriangleOneNormalTextured         0x2000
#define PRC_FACETESSDATA_TriangleFanOneNormalTextured      0x4000
#define PRC_FACETESSDATA_TriangleStripeOneNormalTextured   0x8000
#define PRC_FACETESSDATA_NORMAL_Single   		0x40000000
#define PRC_FACETESSDATA_NORMAL_Mask			0x3FFFFFFF
#define PRC_FACETESSDATA_WIRE_IsNotDrawn		0x4000		// Indicates that the edge should not be drawn (its neighbor will be drawn).
#define PRC_FACETESSDATA_WIRE_IsClosing			0x8000		// Indicates that this is the last edge of a loop.

#define PRC_3DWIRETESSDATA_IsClosing			0x10000000 // Indicates that the first point is implicitely repeated after the last one to close the wire edge.
#define PRC_3DWIRETESSDATA_IsContinuous			0x20000000 // Indicates that the last point of the preceding wire should be linked with the first point of the current one.

#define PRC_TEXTURE_MAPPING_DIFFUSE			0x0001 // Diffuse texture mapping attribute. Default value.
#define PRC_TEXTURE_MAPPING_BUMP			0x0002 // Bump texture mapping attribute.
#define PRC_TEXTURE_MAPPING_OPACITY			0x0004 // Opacity texture mapping attribute.
#define PRC_TEXTURE_MAPPING_SPHERICAL_REFLECTION	0x0008 // Spherical reflection texture mapping attribute (used for environment mapping).
#define PRC_TEXTURE_MAPPING_CUBICAL_REFLECTION		0x0010 // Cubical reflection texture mapping attribute (used for environment mapping).
#define PRC_TEXTURE_MAPPING_REFRACTION			0x0020 // Refraction texture mapping attribute.
#define PRC_TEXTURE_MAPPING_SPECULAR			0x0040 // Specular texture mapping attribute.
#define PRC_TEXTURE_MAPPING_AMBIENT			0x0080 // Ambient texture mapping attribute.
#define PRC_TEXTURE_MAPPING_EMISSION			0x0100 // Emission texture mapping attribute.

#define PRC_TEXTURE_APPLYING_MODE_NONE		0x00 // let the application choose
#define PRC_TEXTURE_APPLYING_MODE_LIGHTING	0x01 // use lighting mode
#define PRC_TEXTURE_APPLYING_MODE_ALPHATEST	0x02 // use alpha test
#define PRC_TEXTURE_APPLYING_MODE_VERTEXCOLOR	0x04 // combine a texture with one-color-per-vertex mode

#define PRC_TEXTURE_MAPPING_COMPONENTS_RED	0x0001 // Red texture mapping component.
#define PRC_TEXTURE_MAPPING_COMPONENTS_GREEN	0x0002 // Green texture mapping component.
#define PRC_TEXTURE_MAPPING_COMPONENTS_BLUE	0x0004 // Blue texture mapping component.
#define PRC_TEXTURE_MAPPING_COMPONENTS_RGB	0x0007 // RGB texture mapping component.
#define PRC_TEXTURE_MAPPING_COMPONENTS_ALPHA	0x0008 // Alpha texture mapping component.
#define PRC_TEXTURE_MAPPING_COMPONENTS_RGBA	0x000F // RGBA texture mapping component.

enum EPRCModellerAttributeType {
  KEPRCModellerAttributeTypeNull = 0,
  KEPRCModellerAttributeTypeInt = 1,
  KEPRCModellerAttributeTypeReal = 2,
  KEPRCModellerAttributeTypeTime = 3,
  KEPRCModellerAttributeTypeString = 4
};

enum EPRCPictureDataFormat {
  KEPRCPicture_PNG,
  KEPRCPicture_JPG,
  KEPRCPicture_BITMAP_RGB_BYTE,
  KEPRCPicture_BITMAP_RGBA_BYTE,
  KEPRCPicture_BITMAP_GREY_BYTE,
  KEPRCPicture_BITMAP_GREYA_BYTE
};

enum EPRCProductLoadStatus {
  KEPRCProductLoadStatus_Unknown = 0,
  KEPRCProductLoadStatus_Error,
  KEPRCProductLoadStatus_NotLoaded,
  KEPRCProductLoadStatus_NotLoadable,
  KEPRCProductLoadStatus_Loaded
};

enum EPRCExtendType { 
  KEPRCExtendTypeNone = 0,      // Discontinuous position.
  KEPRCExtendTypeExt1 = 2,      // Same as EPRCExtendTypeCInfinity.
  KEPRCExtendTypeExt2 = 4,      // Same as EPRCExtendTypeG1R for surface, and EPRCExtendTypeG1 for curve.
  KEPRCExtendTypeG1 = 6,        // Continuous in direction but not magnitude of first derivative.
  KEPRCExtendTypeG1R = 8,       // Surface extended with a ruled surface that connects with G1-continuity.
  KEPRCExtendTypeG1_G2 = 10,    // Extended by reflection, yielding a G2 continuous extension.
  KEPRCExtendTypeCInfinity = 12 // Unlimited continuity.
};

enum EPRCKnotType {			// Knot vector type
  KEPRCKnotTypeUniformKnots,		// Uniform knot vector.
  KEPRCKnotTypeUnspecified,		// Unspecified knot type.
  KEPRCKnotTypeQuasiUniformKnots,	// Quasi-uniform knot vector.
  KEPRCKnotTypePiecewiseBezierKnots	// Extrema with multiplicities of degree +1.
};					// Note : this value is currently unused and should be set to KEPRCKnotTypeUnspecified.


enum EPRCBSplineSurfaceForm {
  KEPRCBSplineSurfaceFormPlane,			// Planar surface.
  KEPRCBSplineSurfaceFormCylindrical,		// Cylindrical surface.
  KEPRCBSplineSurfaceFormConical,		// Conical surface.
  KEPRCBSplineSurfaceFormSpherical,		// Spherical surface.
  KEPRCBSplineSurfaceFormRevolution,		// Surface of revolution.
  KEPRCBSplineSurfaceFormRuled,			// Ruled surface.
  KEPRCBSplineSurfaceFormGeneralizedCone,	// Cone.
  KEPRCBSplineSurfaceFormQuadric,		// Quadric surface.
  KEPRCBSplineSurfaceFormLinearExtrusion,	// Surface of extrusion.
  KEPRCBSplineSurfaceFormUnspecified,		// Unspecified surface.
  KEPRCBSplineSurfaceFormPolynomial		// Polynomial surface.
};

enum EPRCBSplineCurveForm {		// NURBS curve form
  KEPRCBSplineCurveFormUnspecified,	// Unspecified curve form.
  KEPRCBSplineCurveFormPolyline,	// Polygon.
  KEPRCBSplineCurveFormCircularArc,	// Circle arc.
  KEPRCBSplineCurveFormEllipticArc,	// Elliptical arc.
  KEPRCBSplineCurveFormParabolicArc,	// Parabolic arc.
  KEPRCBSplineCurveFormHyperbolicArc	// Hyperbolic arc.
};					// Note : this value is currently unused and should be set to KEPRCBSplineCurveFormUnspecified.

enum EPRCTextureMappingType {			// Defines how to retrieve mapping coordinates.
  KEPRCTextureMappingType_Unknown,		// Let the application choose.
  KEPRCTextureMappingType_Stored,		// Use the mapping coordinates that are stored on a 3D tessellation object
  KEPRCTextureMappingType_Parametric,		// Retrieve the UV coordinates on the surface as mapping coordinates
  KEPRCTextureMappingType_Operator		// Use the defined Texture mapping operator to calculate mapping coordinates
};

enum EPRCTextureFunction {			// Defines how to paint a texture on the surface being rendered.
  KEPRCTextureFunction_Unknown,			// Let the application choose.
  KEPRCTextureFunction_Modulate,		// Combine lighting with texturing. This is the default value.
  KEPRCTextureFunction_Replace,			// Replace the object color with texture color data.
  KEPRCTextureFunction_Blend,			// Reserved for future use.
  KEPRCTextureFunction_Decal			// Reserved for future use.
};

enum EPRCTextureMappingOperator {		// The operator to use when computing mapping coordinates.
  KEPRCTextureMappingOperator_Unknown,		// Default value
  KEPRCTextureMappingOperator_Planar,		// Reserved for future use
  KEPRCTextureMappingOperator_Cylindrical,	// Reserved for future use
  KEPRCTextureMappingOperator_Spherical, 	// Reserved for future use
  KEPRCTextureMappingOperator_Cubical 		// Reserved for future use
};

enum EPRCTextureBlendParameter {		// Reserved for future use. Defines how to apply blending.
  KEPRCTextureBlendParameter_Unknown,		// Default value.
  KEPRCTextureBlendParameter_Zero,		// Reserved for future use.
  KEPRCTextureBlendParameter_One,		// Reserved for future use.
  KEPRCTextureBlendParameter_SrcColor,		// Reserved for future use.
  KEPRCTextureBlendParameter_OneMinusSrcColor,	// Reserved for future use.
  KEPRCTextureBlendParameter_DstColor,		// Reserved for future use.
  KEPRCTextureBlendParameter_OneMinusDstColor,	// Reserved for future use.
  KEPRCTextureBlendParameter_SrcAlpha,		// Reserved for future use.
  KEPRCTextureBlendParameter_OneMinusSrcAlpha,	// Reserved for future use.
  KEPRCTextureBlendParameter_DstAlpha,		// Reserved for future use.
  KEPRCTextureBlendParameter_OneMinusDstAlpha,	// Reserved for future use.
  KEPRCTextureBlendParameter_SrcAlphaSaturate	// Reserved for future use.
};

enum EPRCTextureWrappingMode {			// Defines repeating and clamping texture modes.
  KEPRCTextureWrappingMode_Unknown,		// Let the application choose.
  KEPRCTextureWrappingMode_Repeat,		// Display the repeated texture on the surface.
  KEPRCTextureWrappingMode_ClampToBorder,	// Clamp the texture to the border. Display the surface color along the texture limits.
  KEPRCTextureWrappingMode_Clamp,		// Reserved for future use.
  KEPRCTextureWrappingMode_ClampToEdge,		// Reserved for future use.
  KEPRCTextureWrappingMode_MirroredRepeat	// Reserved for future use.
};

enum EPRCTextureAlphaTest {			// Reserved for future use. Defines how to use a texture alpha test.
  KEPRCTextureAlphaTest_Unknown,		// Default value.
  KEPRCTextureAlphaTest_Never,			// Reserved for future use.
  KEPRCTextureAlphaTest_Less,			// Reserved for future use.
  KEPRCTextureAlphaTest_Equal,			// Reserved for future use.
  KEPRCTextureAlphaTest_Lequal,			// Reserved for future use.
  KEPRCTextureAlphaTest_Greater,		// Reserved for future use.
  KEPRCTextureAlphaTest_Notequal,		// Reserved for future use.
  KEPRCTextureAlphaTest_Gequal,			// Reserved for future use.
  KEPRCTextureAlphaTest_Always			// Reserved for future use.
};


// Bit field for graphics behavior
#define PRC_GRAPHICS_Show			0x0001 // The entity is shown.
#define PRC_GRAPHICS_SonHeritShow		0x0002 // Shown entity son inheritance.
#define PRC_GRAPHICS_FatherHeritShow		0x0004 // Shown entity father inheritance.
#define PRC_GRAPHICS_SonHeritColor		0x0008 // Color/material son inheritance.
#define PRC_GRAPHICS_FatherHeritColor		0x0010 // Color/material father inheritance.
#define PRC_GRAPHICS_SonHeritLayer		0x0020 // Layer son inheritance.
#define PRC_GRAPHICS_FatherHeritLayer		0x0040 // Layer father inheritance.
#define PRC_GRAPHICS_SonHeritTransparency	0x0080 // Transparency son inheritance.
#define PRC_GRAPHICS_FatherHeritTransparency	0x0100 // Transparency father inheritance.
#define PRC_GRAPHICS_SonHeritLinePattern	0x0200 // Line pattern son inheritance.
#define PRC_GRAPHICS_FatherHeritLinePattern	0x0400 // Line pattern father inheritance.
#define PRC_GRAPHICS_SonHeritLineWidth		0x0800 // Line width son inheritance.
#define PRC_GRAPHICS_FatherHeritLineWidth	0x1000 // Line width father inheritance.
#define PRC_GRAPHICS_Removed			0x2000 // The entity has been removed and no longer appears in the tree.

enum EPRCMarkupType {
  KEPRCMarkupType_Unknown = 0,
  KEPRCMarkupType_Text,
  KEPRCMarkupType_Dimension,
  KEPRCMarkupType_Arrow,
  KEPRCMarkupType_Balloon,
  KEPRCMarkupType_CircleCenter,
  KEPRCMarkupType_Coordinate,
  KEPRCMarkupType_Datum,
  KEPRCMarkupType_Fastener,
  KEPRCMarkupType_Gdt,
  KEPRCMarkupType_Locator,
  KEPRCMarkupType_MeasurementPoint,
  KEPRCMarkupType_Roughness,
  KEPRCMarkupType_Welding,
  KEPRCMarkupType_Table,
  KEPRCMarkupType_Other 
};

enum EPRCMarkupSubType {
  KEPRCMarkupSubType_Unknown = 0,
  KEPRCMarkupSubType_EnumMax,

  KEPRCMarkupSubType_Datum_Ident = 1 ,
  KEPRCMarkupSubType_Datum_EnumMax, 

  KEPRCMarkupSubType_Dimension_Distance = 1,
  KEPRCMarkupSubType_Dimension_Radius_Tangent,
  KEPRCMarkupSubType_Dimension_Radius_Cylinder,
  KEPRCMarkupSubType_Dimension_Radius_Edge,
  KEPRCMarkupSubType_Dimension_Diameter,
  KEPRCMarkupSubType_Dimension_Diameter_Tangent,
  KEPRCMarkupSubType_Dimension_Diameter_Cylinder,
  KEPRCMarkupSubType_Dimension_Diameter_Edge, 
  KEPRCMarkupSubType_Dimension_Diameter_Cone,
  KEPRCMarkupSubType_Dimension_Length,
  KEPRCMarkupSubType_Dimension_Length_Curvilinear,
  KEPRCMarkupSubType_Dimension_Length_Circular,
  KEPRCMarkupSubType_Dimension_Angle,
  KEPRCMarkupSubType_Dimension_EnumMax,

  KEPRCMarkupSubType_Gdt_Fcf = 1,
  KEPRCMarkupSubType_Gdt_EnumMax,

  KEPRCMarkupSubType_Welding_Line = 1,
  KEPRCMarkupSubType_Welding_EnumMax,

  KEPRCMarkupSubType_Other_Symbol_User = 1,
  KEPRCMarkupSubType_Other_EnumMax 
};

#define PRC_MARKUP_IsHidden		0x01	// The tessellation is hidden.
#define PRC_MARKUP_HasFrame		0x02	// The tessellation has a frame.
#define PRC_MARKUP_IsNotModifiable	0x04	// The tessellation is given and should not be modified.
#define PRC_MARKUP_IsZoomable		0x08	// The tessellation has zoom capability.
#define PRC_MARKUP_IsOnTop		0x10	// The tessellation is on top of the geometry.
#define PRC_MARKUP_IsFlipable		0x20	// The text tessellation can be flipped to always be readable on screen. This value is currently unused.

#define PRC_RENDERING_PARAMETER_SPECIAL_CULLING	0x0001 // special culling strategy to apply
#define PRC_RENDERING_PARAMETER_FRONT_CULLING	0x0002 // apply front culling (ignored if no special culling strategy)
#define PRC_RENDERING_PARAMETER_BACK_CULLING	0x0004 // apply back culling (ignored if no special culling strategy)
#define PRC_RENDERING_PARAMETER_NO_LIGHT	0x0008 // if set, no light will apply on corresponding object

#define PRC_MARKUP_IsMatrix		0x08000000 // Bit to denote that the current entity is a matrix.
#define PRC_MARKUP_IsExtraData		0x04000000 // Bit to denote that the current entity is extra data (it is neither a matrix nor a polyline).
#define PRC_MARKUP_IntegerMask		0xFFFFF    // Integer mask to retrieve sizes.
#define PRC_MARKUP_ExtraDataType	0x3E00000  // Mask to retrieve the integer type of the entity.

#define PRC_MARKUP_ExtraDataType_Pattern	(( 0<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Picture	(( 1<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Triangles	(( 2<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Quads		(( 3<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_FaceViewMode	(( 6<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_FrameDrawMode	(( 7<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_FixedSizeMode	(( 8<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Symbol		(( 9<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Cylinder	((10<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Color		((11<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_LineStipple	((12<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Font		((13<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Text		((14<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Points		((15<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_Polygon	((16<<21)|PRC_MARKUP_IsExtraData)
#define PRC_MARKUP_ExtraDataType_LineWidth	((17<<21)|PRC_MARKUP_IsExtraData)

enum EPRCCharSet
{
  KEPRCCharsetUnknown = -1,
  KEPRCCharsetRoman = 0,
  KEPRCCharsetJapanese,
  KEPRCCharsetTraditionalChinese,
  KEPRCCharsetKorean,
  KEPRCCharsetArabic,
  KEPRCCharsetHebrew,
  KEPRCCharsetGreek,
  KEPRCCharsetCyrillic,
  KEPRCCharsetRightLeft,
  KEPRCCharsetDevanagari,
  KEPRCCharsetGurmukhi,
  KEPRCCharsetGujarati,
  KEPRCCharsetOriya,
  KEPRCCharsetBengali,
  KEPRCCharsetTamil,
  KEPRCCharsetTelugu,
  KEPRCCharsetKannada,
  KEPRCCharsetMalayalam,
  KEPRCCharsetSinhalese,
  KEPRCCharsetBurmese,
  KEPRCCharsetKhmer,
  KEPRCCharsetThai,
  KEPRCCharsetLaotian,
  KEPRCCharsetGeorgian,
  KEPRCCharsetArmenian,
  KEPRCCharsetSimplifiedChinese,
  KEPRCCharsetTibetan,
  KEPRCCharsetMongolian,
  KEPRCCharsetGeez,
  KEPRCCharsetEastEuropeanRoman,
  KEPRCCharsetVietnamese,
  KEPRCCharsetExtendedArabic
};

#define PRC_Font_Bold         0x02    /*!< Bold. */
#define PRC_Font_Italic       0x04    /*!< Italic. */
#define PRC_Font_Underlined   0x08    /*!< Underlined. */
#define PRC_Font_StrikedOut   0x10    /*!< Striked-out. */
#define PRC_Font_Overlined    0x20    /*!< Overlined. */
#define PRC_Font_Streched     0x40    /*!< Streched. In case the font used is not the original font, it indicates that the text needs to be stretched to fit its bounding box. */
#define PRC_Font_Wired        0x80    /*!< Wired. Indicates that the original font is a wirefame font. */
#define PRC_Font_FixedWidth   0x100   /*!< Fixed width. Indicates that the original font is not proportional (each glyph has the same width). */

#define PRC_CONTEXT_OuterLoopFirst 0x0001 // Outer loops are always first loops (specific to PRC_TYPE_TOPO_BrepData). 
#define PRC_CONTEXT_NoClamp        0x0002 // UV curves are clamped on the surface (specific to PRC_TYPE_TOPO_BrepData). 
#define PRC_CONTEXT_NoSplit        0x0004 // Faces are split (specific to PRC_TYPE_TOPO_BrepData). 

#define PRC_BODY_BBOX_Evaluation 0x0001 // Bounding box based on geometry. 
#define PRC_BODY_BBOX_Precise    0x0002 // Bounding box based on tessellation. 
#define PRC_BODY_BBOX_CADData    0x0003 // Bounding box given by a CAD data file. 

#endif // __PRC_H