1 /*! @header QuesaGeometry.h
2         Declares the Quesa geometry objects.
3  */
4 /*  NAME:
5         QuesaGeometry.h
6 
7     DESCRIPTION:
8         Quesa public header.
9 
10     COPYRIGHT:
11         Copyright (c) 1999-2004, Quesa Developers. All rights reserved.
12 
13         For the current release of Quesa, please see:
14 
15             <http://www.quesa.org/>
16 
17         Redistribution and use in source and binary forms, with or without
18         modification, are permitted provided that the following conditions
19         are met:
20 
21             o Redistributions of source code must retain the above copyright
22               notice, this list of conditions and the following disclaimer.
23 
24             o Redistributions in binary form must reproduce the above
25               copyright notice, this list of conditions and the following
26               disclaimer in the documentation and/or other materials provided
27               with the distribution.
28 
29             o Neither the name of Quesa nor the names of its contributors
30               may be used to endorse or promote products derived from this
31               software without specific prior written permission.
32 
33         THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
34         "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35         LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
36         A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
37         OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38         SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
39         TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
40         PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
41         LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
42         NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
43         SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44     ___________________________________________________________________________
45 */
46 #ifndef QUESA_GEOMETRY_HDR
47 #define QUESA_GEOMETRY_HDR
48 //=============================================================================
49 //      Include files
50 //-----------------------------------------------------------------------------
51 #include "Quesa.h"
52 #include "QuesaSet.h"
53 
54 // Disable QD3D header
55 #if defined(__QD3DGEOMETRY__)
56 #error
57 #endif
58 
59 #define __QD3DGEOMETRY__
60 
61 
62 
63 
64 
65 //=============================================================================
66 //      C++ preamble
67 //-----------------------------------------------------------------------------
68 #ifdef __cplusplus
69 extern "C" {
70 #endif
71 
72 
73 
74 
75 
76 //=============================================================================
77 //      Constants
78 //-----------------------------------------------------------------------------
79 /*!
80  *	@enum
81  *      TQ3GeneralPolygonShapeHint
82  *	@discussion
83  *		A general polygon has a shape hint that may be used by the renderer to
84  *		optimize drawing.
85  *	@constant	kQ3GeneralPolygonShapeHintComplex	The general polygon has more
86  *							than one contour, or is self-intersecting, or it is not
87  *							known whether it is concave or convex.
88  *	@constant	kQ3GeneralPolygonShapeHintConcave	There is exactly one contour, which
89  *							is concave.
90  *	@constant	kQ3GeneralPolygonShapeHintConvex	There is exactly one contour, which
91  *							is convex.
92  */
93 typedef enum TQ3GeneralPolygonShapeHint {
94     kQ3GeneralPolygonShapeHintComplex           = 0,
95     kQ3GeneralPolygonShapeHintConcave           = 1,
96     kQ3GeneralPolygonShapeHintConvex            = 2,
97     kQ3GeneralPolygonShapeHintSize32            = 0xFFFFFFFF
98 } TQ3GeneralPolygonShapeHint;
99 
100 
101 /*!
102  *	@enum
103  *      Nurb Limits
104  *	@discussion
105  *		Miscellaneous limits for NURB curves and patches.
106  *	@constant	kQ3NURBCurveMaxOrder	Maximum order for NURB curves.
107  *	@constant	kQ3NURBPatchMaxOrder	Maximum order for NURB patches. Note that this was
108  *                                      set to 11 in QD3DGeometry.h, however a Develop article
109  *                                      on NURBs indicated it should be 16.
110  */
111 enum {
112 	kQ3NURBCurveMaxOrder = 16,
113 	kQ3NURBPatchMaxOrder = 16
114 };
115 
116 
117 /*!
118  *	@enum
119  *      TQ3PolyhedronEdgeMasks
120  *	@discussion
121  *		These are flags indicating which edges of a polyhedral triangle should be
122  *		rendered.
123  *	@constant	kQ3PolyhedronEdgeNone		No Edge.
124  *	@constant	kQ3PolyhedronEdge01			Render the edge between vertex 0 and vertex 1.
125  *	@constant	kQ3PolyhedronEdge12			Render the edge between vertex 1 and vertex 2.
126  *	@constant	kQ3PolyhedronEdge20			Render the edge between vertex 2 and vertex 0.
127  *	@constant	kQ3PolyhedronEdgeAll		Render all the edges.
128  */
129 typedef enum TQ3PolyhedronEdgeMasks {
130     kQ3PolyhedronEdgeNone                       = 0,
131     kQ3PolyhedronEdge01                         = (1 << 0),
132     kQ3PolyhedronEdge12                         = (1 << 1),
133     kQ3PolyhedronEdge20                         = (1 << 2),
134     kQ3PolyhedronEdgeAll                        = (kQ3PolyhedronEdge01 | kQ3PolyhedronEdge12 | kQ3PolyhedronEdge20),
135     kQ3PolyhedronEdgeSize32                     = 0xFFFFFFFF
136 } TQ3PolyhedronEdgeMasks;
137 
138 
139 
140 
141 
142 //=============================================================================
143 //      Types
144 //-----------------------------------------------------------------------------
145 /*!
146  *	@struct
147  *      TQ3BoxData
148  *	@discussion
149  *		Data describing the state of a box object.
150  *
151  *	@field		origin				Origin of the box (one of the corners).
152  *	@field		orientation			Orientation vector of the box.
153  *	@field		majorAxis			Major axis of the box.
154  *	@field		minorAxis			Minor axis of the box.
155  *	@field		faceAttributeSet	Array of attribute set objects for the 6 faces.
156  *									This field may be NULL, or individual sets in the
157  *									array may be NULL.
158  *	@field		boxAttributeSet		Attribute set object holding attributes that apply
159  *									to all of the faces.  May be NULL.
160  */
161 typedef struct TQ3BoxData {
162     TQ3Point3D                                  origin;
163     TQ3Vector3D                                 orientation;
164     TQ3Vector3D                                 majorAxis;
165     TQ3Vector3D                                 minorAxis;
166     TQ3AttributeSet                             *faceAttributeSet;
167     TQ3AttributeSet                             boxAttributeSet;
168 } TQ3BoxData;
169 
170 
171 /*!
172  *	@struct
173  *      TQ3ConeData
174  *	@discussion
175  *		Data describing the state of a cone object.  The orientation, major radius,
176  *		and minor radius vectors need not be orthogonal, though they should be
177  *		independent.  Normally these vectors (in that order) should form a right-handed system.
178  *		If they form a left-handed system, then the cone is "inside out", i.e., the front face
179  *		is inside.
180  *
181  *		The values <code>uMin</code>, <code>uMax</code>, <code>vMin</code>, and <code>vMax</code>
182  *		allow partial cones, e.g., a cone with a wedge cut out of it or with its tip cut off.
183  *		This feature was not implemented in QuickDraw 3D.  See the discussion of
184  *		<code>TQ3EllipseData</code> for notes on the interpretation of <code>uMin</code> and
185  *		code>uMax</code>.
186  *
187  *		If <code>vMax</code> < 1, so that the tip is cut off, the top disk is considered part of
188  *		an interior face, rather than a top cap.
189  *
190  *	@field		origin					The center of the base of the cone.
191  *	@field		orientation				Vector from the origin to the tip of the cone.
192  *	@field		majorRadius				A vector from the origin to a point on the perimeter
193  *										of the base.
194  *	@field		minorRadius				A vector from the origin to a point on the perimeter
195  *										of the base.
196  *	@field		uMin					Minimum value of the u parameter, which goes around
197  *										the base.  Typically 0.
198  *	@field		uMax					Maximum value of the u parameter, which goes around
199  *										the base.  Typically 1.
200  *	@field		vMin					Minimum value of the v parameter, which goes from
201  *										base to tip.  Typically 0.
202  *	@field		vMax					Minimum value of the v parameter, which goes from
203  *										base to tip.  Typically 1.
204  *	@field		caps					End cap masks, determining whether there is a bottom cap,
205  *										and in the case of partial cones, determining whether
206  *										there is an interior face.
207  *	@field		interiorAttributeSet	Interior attributes.  Unused by QD3D.
208  *	@field		faceAttributeSet		Attributes that affect the face but not the bottom.
209  *										May be NULL.
210  *	@field		bottomAttributeSet		Attributes that affect the bottom end cap.  May be NULL.
211  *	@field		coneAttributeSet		Attributes for all parts of the cone.  May be NULL.
212  */
213 typedef struct TQ3ConeData {
214     TQ3Point3D                                  origin;
215     TQ3Vector3D                                 orientation;
216     TQ3Vector3D                                 majorRadius;
217     TQ3Vector3D                                 minorRadius;
218     float                                       uMin;
219     float                                       uMax;
220     float                                       vMin;
221     float                                       vMax;
222     TQ3EndCap                                   caps;
223     TQ3AttributeSet                             interiorAttributeSet;
224     TQ3AttributeSet                             faceAttributeSet;
225     TQ3AttributeSet                             bottomAttributeSet;
226     TQ3AttributeSet                             coneAttributeSet;
227 } TQ3ConeData;
228 
229 
230 /*!
231  *	@struct
232  *      TQ3CylinderData
233  *	@discussion
234  *		Data describing the state of a cylinder object.  The orientation, major radius,
235  *		and minor radius vectors need not be orthogonal, though they should be
236  *		independent.  Ordinarily, the vectors (orientation, major axis, minor axis)
237  *		should form a left-handed coordinate system.  If they form a left-handed system,
238  *		then the cylinder is "inside out", i.e., the front face is inside.
239  *
240  *		The values <code>uMin</code>, <code>uMax</code>, <code>vMin</code>, and <code>vMax</code>
241  *		allow partial cylinders, e.g., a cylinder with a wedge cut out of it.
242  *		This feature was not implemented in QuickDraw 3D.  See the discussion of
243  *		<code>TQ3EllipseData</code> for notes on the interpretation of <code>uMin</code> and
244  *		code>uMax</code>.
245  *
246  *	@field		origin					The center of the base of the cylinder.
247  *	@field		orientation				Vector from the origin to the center of the opposite end.
248  *	@field		majorRadius				A vector from the origin to a point on the perimeter
249  *										of the base.
250  *	@field		minorRadius				A vector from the origin to a point on the perimeter
251  *										of the base.
252  *	@field		uMin					Starting value of the u parameter, which goes around
253  *										the base counterclockwise.  Typically 0.
254  *	@field		uMax					Ending value of the u parameter, which goes around
255  *										the base counterclockwise.  Typically 1.
256  *	@field		vMin					Minimum value of the v parameter, which goes from the
257  *										base to the other end.  Typically 0.
258  *	@field		vMax					Maximum value of the v parameter, which goes from the
259  *										base to the other end.  Typically 1.
260  *	@field		caps					End cap masks, determining whether the cylinder is
261  *										closed on one end, the other, or both.
262  *	@field		interiorAttributeSet	Interior attributes.  May be NULL.  Unused by QD3D.
263  *	@field		topAttributeSet			Attributes that affect the top end cap.  May be NULL.
264  *	@field		faceAttributeSet		Attributes that affect the face but not the bottom or top.
265  *										May be NULL.
266  *	@field		bottomAttributeSet		Attributes that affect the bottom end cap.  May be NULL.
267  *	@field		cylinderAttributeSet	Attributes for all parts of the cylinder.  May be NULL.
268  */
269 typedef struct TQ3CylinderData {
270     TQ3Point3D                                  origin;
271     TQ3Vector3D                                 orientation;
272     TQ3Vector3D                                 majorRadius;
273     TQ3Vector3D                                 minorRadius;
274     float                                       uMin;
275     float                                       uMax;
276     float                                       vMin;
277     float                                       vMax;
278     TQ3EndCap                                   caps;
279     TQ3AttributeSet                             interiorAttributeSet;
280     TQ3AttributeSet                             topAttributeSet;
281     TQ3AttributeSet                             faceAttributeSet;
282     TQ3AttributeSet                             bottomAttributeSet;
283     TQ3AttributeSet                             cylinderAttributeSet;
284 } TQ3CylinderData;
285 
286 
287 /*!
288  *	@struct
289  *      TQ3DiskData
290  *	@discussion
291  *		Data describing the state of a disk object (a filled ellipse).  The major radius
292  *		and minor radius vectors need not be orthogonal, though they should be independent.
293  *		The direction of the front face is the cross product of the major and minor axes.
294  *
295  *		The values <code>uMin</code>, <code>uMax</code>, <code>vMin</code>, and <code>vMax</code>
296  *		allow partial disks, e.g., a slice of pie (partial range of u values) or a washer
297  *		(partial range of v values).  This feature was never implemented in QuickDraw 3D,
298  *		although it was planned.  See the discussion of <code>TQ3EllipseData</code> for notes
299  *		on the interpretation of <code>uMin</code> and code>uMax</code>.
300  *
301  *		The u and v limits here do not have anything to do with the uv parametrization used by
302  *		shaders.
303  *
304  *	@field		origin					The center of the disk.
305  *	@field		majorRadius				A vector from the origin to a point on the perimeter
306  *										of the disk.
307  *	@field		minorRadius				A vector from the origin to a point on the perimeter
308  *										of the disk.
309  *	@field		uMin					Starting value of the u parameter, which goes around
310  *										the perimeter counterclockwise.  Typically 0, must be
311  *										in the range [0, 1].
312  *	@field		uMax					Ending value of the u parameter, which goes around
313  *										the perimeter counterclockwise.  Typically 1, must be
314  *										in the range [0, 1].
315  *	@field		vMin					Minimum value of the v parameter, which goes from the
316  *										perimeter to the origin.  Typically 0, must be in the
317  *										range [0, 1].
318  *	@field		vMax					Maximum value of the v parameter, which goes from the
319  *										perimeter to the origin.  Typically 1, must be in the
320  *										range [0, 1].
321  *	@field		diskAttributeSet		Attributes for the disk.  May be NULL.
322  */
323 typedef struct TQ3DiskData {
324     TQ3Point3D                                  origin;
325     TQ3Vector3D                                 majorRadius;
326     TQ3Vector3D                                 minorRadius;
327     float                                       uMin;
328     float                                       uMax;
329     float                                       vMin;
330     float                                       vMax;
331     TQ3AttributeSet                             diskAttributeSet;
332 } TQ3DiskData;
333 
334 
335 /*!
336  *	@struct
337  *      TQ3EllipseData
338  *	@discussion
339  *		Data describing the state of an ellipse.  The major radius and minor radius
340  *		vectors need not be orthogonal, though they should be independent.
341  *
342  *		You can make a partial ellipse by using values other than 0 and 1 for the
343  *		<code>uMin</code> and <code>uMax</code> fields.  The ellipse travels
344  *		counterclockwise from the <code>uMin</code> to the <code>uMax</code> value.
345  *		It is permissible for <code>uMin</code> to be greater than <code>uMax</code>.
346  *		For example, if <code>uMin</code> = 7/8 and <code>uMax</code> = 1/8, then the
347  *		ellipse covers a range of 45 degrees, including the zero angle.
348  *
349  *	@field		origin					Center of the ellipse.
350  *	@field		majorRadius				A vector from the origin to a point on the curve.
351  *	@field		minorRadius				Another vector from the origin to a point on the curve.
352  *	@field		uMin					Starting value of the u parameter.  Typically 0.
353  *	@field		uMax					Ending value of the u parameter.  Typically 1.
354  *	@field		ellipseAttributeSet		Attributes for the ellipse.  May be NULL.
355  */
356 typedef struct TQ3EllipseData {
357     TQ3Point3D                                  origin;
358     TQ3Vector3D                                 majorRadius;
359     TQ3Vector3D                                 minorRadius;
360     float                                       uMin;
361     float                                       uMax;
362     TQ3AttributeSet                             ellipseAttributeSet;
363 } TQ3EllipseData;
364 
365 
366 /*!
367  *	@struct
368  *      TQ3EllipsoidData
369  *	@discussion
370  *		Data describing the state of an ellipsoid.  The major axis, minor axis, and
371  *		orientation vectors need not be orthogonal, but should be independent.
372  *		The ellipsoid can be expressed by a parametric equation
373  *
374  *		f(u,v) = origin + cos(&pi;v)orientation + sin(&pi;v)(cos(2&pi;u)majorRadius + sin(2&pi;u)minorRadius)
375  *
376  *		where u and v range from 0 to 1.
377  *
378  *		The values <code>uMin</code>, <code>uMax</code>, <code>vMin</code>, and <code>vMax</code>
379  *		were apparently intended to allow partial ellipsoids, e.g., an ellipsoid with a wedge
380  *		cut out of it.
381  *		But Quesa does not implement this feature, and I do not believe that QuickDraw 3D
382  *		ever did either.
383  *
384  *	@field		origin					Center of the ellipsoid.
385  *	@field		orientation				A vector from the origin to a point on the ellipsoid.
386  *	@field		majorRadius				A vector from the origin to a point on the ellipsoid.
387  *	@field		minorRadius				A vector from the origin to a point on the ellipsoid.
388  *	@field		uMin					Minimum value of the u parameter, which goes around
389  *										the perimeter (the ellipse determined by the major and
390  *										minor axes).  Typically 0.
391  *	@field		uMax					Maximum value of the u parameter.  Typically 1.
392  *	@field		vMin					Minimum value of the v parameter, which goes from the
393  *										south pole (origin - orientation) to the north pole
394  *										(origin + orientation).  Typically 0.
395  *	@field		vMax					Minimum value of the v parameter.  Typically 1.
396  *	@field		caps					Style of caps to be used on partial ellipsoids.
397  *										Currently ignored by Quesa.
398  *	@field		interiorAttributeSet	Interior attributes.  Currently unused by Quesa
399  *										rendering, so leave it NULL.
400  *	@field		ellipsoidAttributeSet	Attributes for the ellipsoid surface.  May be NULL.
401  */
402 typedef struct TQ3EllipsoidData {
403     TQ3Point3D                                  origin;
404     TQ3Vector3D                                 orientation;
405     TQ3Vector3D                                 majorRadius;
406     TQ3Vector3D                                 minorRadius;
407     float                                       uMin;
408     float                                       uMax;
409     float                                       vMin;
410     float                                       vMax;
411     TQ3EndCap                                   caps;
412     TQ3AttributeSet                             interiorAttributeSet;
413     TQ3AttributeSet                             ellipsoidAttributeSet;
414 } TQ3EllipsoidData;
415 
416 
417 /*!
418  *	@struct
419  *      TQ3GeneralPolygonContourData
420  *	@discussion
421  *		An ordered list of vertices forming a contour of a general polygon.
422  *		Used within the <code>TQ3GeneralPolygonData</code> structure.
423  *	@field		numVertices				Number of vertices.  Must be at least 3.
424  *	@field		vertices				Array of vertices.
425  */
426 typedef struct TQ3GeneralPolygonContourData {
427     TQ3Uns32                                    numVertices;
428     TQ3Vertex3D                                 *vertices;
429 } TQ3GeneralPolygonContourData;
430 
431 
432 /*!
433  *	@struct
434  *      TQ3GeneralPolygonData
435  *	@discussion
436  *		Data describing a general polygon.  A general polygon is a closed figure
437  *		defined by one or more coplanar closed curves called contours.  If there are
438  *		holes, the even-odd rule determines which parts are inside.
439  *	@field		numContours				Number of contours in the following array.
440  *										Must be at least 1.
441  *	@field		contours				Array of contours.
442  *	@field		shapeHint				Information about the shape of the general polygon,
443  *										which may be used by the renderer to optimize
444  *										drawing.
445  *	@field		generalPolygonAttributeSet		Set of attributes for the polygon.
446  *										May be NULL.
447  */
448 typedef struct TQ3GeneralPolygonData {
449     TQ3Uns32                                    numContours;
450     TQ3GeneralPolygonContourData                *contours;
451     TQ3GeneralPolygonShapeHint                  shapeHint;
452     TQ3AttributeSet                             generalPolygonAttributeSet;
453 } TQ3GeneralPolygonData;
454 
455 
456 /*!
457  *	@struct
458  *      TQ3LineData
459  *	@discussion
460  *		Data describing a line.
461  *	@field		vertices				Array of two vertices, the ends of the line.
462  *	@field		lineAttributeSet		Set of attributes for the line.  May be NULL.
463  */
464 typedef struct TQ3LineData {
465     TQ3Vertex3D                                 vertices[2];
466     TQ3AttributeSet                             lineAttributeSet;
467 } TQ3LineData;
468 
469 
470 /*!
471  *	@struct
472  *      TQ3MarkerData
473  *	@discussion
474  *		Data describing a bitmap marker, a 2-dimensional image drawn on top of a scene
475  *		at a specified location.
476  *	@field		location				Location of the marker, in local coordinates.
477  *	@field		xOffset					Horizontal offset from the <code>location</code> to the
478  *										upper left corner of the marker, in pixels.
479  *	@field		yOffset					Vertical offset from the <code>location</code> to the
480  *										upper left corner of the marker, in pixels.
481  *	@field		bitmap					A bitmap.  Each bit corresponds to a pixel in the image.
482  *	@field		markerAttributeSet		Marker attributes, which can for instance modify the color
483  *										or transparency of the 1 bits.  May be NULL.
484  */
485 typedef struct TQ3MarkerData {
486     TQ3Point3D                                  location;
487     TQ3Int32                                    xOffset;
488     TQ3Int32                                    yOffset;
489     TQ3Bitmap                                   bitmap;
490     TQ3AttributeSet                             markerAttributeSet;
491 } TQ3MarkerData;
492 
493 
494 /*!
495  *	@typedef
496  *      TQ3MeshVertex
497  *	@discussion
498  *      Opaque pointer representing a vertex of a Mesh.
499  */
500 typedef struct OpaqueTQ3MeshVertex              *TQ3MeshVertex;
501 
502 
503 /*!
504  *	@typedef
505  *      TQ3MeshContour
506  *	@discussion
507  *      Opaque pointer representing a contour of a Mesh, one of the closed
508  *		paths that bounds a face.
509  */
510 typedef struct OpaqueTQ3MeshContour             *TQ3MeshContour;
511 
512 
513 /*!
514  *	@typedef
515  *      TQ3MeshFace
516  *	@discussion
517  *      Opaque pointer representing a face of a Mesh.  This is a polygonal
518  *		figure, normally planar, which may contain holes.
519  */
520 typedef struct OpaqueTQ3MeshFace                *TQ3MeshFace;
521 
522 
523 /*!
524  *	@typedef
525  *      TQ3MeshEdge
526  *	@discussion
527  *      Opaque pointer representing an edge of a Mesh, a straight line
528  *		segment that connects two vertices.
529  */
530 typedef struct OpaqueTQ3MeshEdge                *TQ3MeshEdge;
531 
532 
533 /*!
534  *	@typedef
535  *      TQ3MeshComponent
536  *	@discussion
537  *      Opaque pointer representing a connected component of a Mesh.
538  */
539 typedef struct OpaqueTQ3MeshComponent           *TQ3MeshComponent;
540 
541 
542 /*!
543  *	@struct
544  *      TQ3MeshIterator
545  *	@discussion
546  *      This structure is used for iterating through various parts of a
547  *		Mesh.  You should consider it opaque, because the meanings of the
548  *		fields are not documented.
549  */
550 typedef struct TQ3MeshIterator {
551     void                                        *var1;
552     void                                        *var2;
553     void                                        *var3;
554     struct {
555         void                                    *field1;
556         char                                    field2[4];
557     } var4;
558 } TQ3MeshIterator;
559 
560 
561 #if QUESA_ALLOW_QD3D_EXTENSIONS
562 
563 // Mesh data (all not available in QD3D)
564 /*!
565  *	@struct
566  *      TQ3MeshCornerData
567  *	@discussion
568  *		Data describing a corner for a mesh vertex.
569  *
570  *		Note that a <code>TQ3MeshCornerData</code> is an external data structure
571  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
572  *
573  *		<em>This structure is not available in QD3D.</em>
574  *	@field		numFaces				Number of faces.  Must be at least 1.
575  *	@field		faceIndices				Indices of the faces.
576  *	@field		cornerAttributeSet		Set of attributes for the corner.  <em>Should not be NULL.</em>
577  */
578 typedef struct TQ3MeshCornerData {
579     TQ3Uns32                                    numFaces;
580     TQ3Uns32                  			        *faceIndices;
581     TQ3AttributeSet                             cornerAttributeSet;
582 } TQ3MeshCornerData;
583 
584 /*!
585  *	@struct
586  *      TQ3MeshVertexData
587  *	@discussion
588  *		Data describing a vertex within a mesh.
589  *
590  *		Note that a <code>TQ3MeshVertexData</code> is an external data structure
591  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
592  *		In contrast, a <code>TQ3MeshVertex</code> is a pointer to an opaque internal
593  *		data structure, which is most likely not a <code>TQ3MeshVertexData</code>.
594  *
595  *		<em>This structure is not available in QD3D.</em>
596  *  @field		point					Location of the vertex.
597  *	@field		numCorners				Number of corners in the following array.  May be 0
598  *										if you do not want to specify any corners.
599  *	@field		corners					Pointer to an array of corners.  May be NULL if you
600  *										also specify 0 for <code>numCorners</code>.
601  *	@field		attributeSet			Attribute set for the vertex.
602  */
603 typedef struct TQ3MeshVertexData {
604     TQ3Point3D                                  point;
605     TQ3Uns32                                    numCorners;
606     TQ3MeshCornerData                           *corners;
607     TQ3AttributeSet                             attributeSet;
608 } TQ3MeshVertexData;
609 
610 /*!
611  *	@struct
612  *      TQ3MeshEdgeData
613  *	@discussion
614  *		Data describing an edge within a mesh.
615  *		Used within the <code>TQ3MeshData</code> structure.
616  *
617  *		Note that a <code>TQ3MeshEdgeData</code> is an external data structure
618  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
619  *		In contrast, a <code>TQ3MeshEdge</code> is a pointer to an opaque internal
620  *		data structure, which is most likely not a <code>TQ3MeshEdgeData</code>.
621  *
622  *		<em>This structure is not available in QD3D.</em>
623  *	@field		vertexIndices			Indices of the two vertices that are ends of the edge.
624  *	@field		edgeAttributeSet		Set of attributes for the edge.  May be NULL.
625  */
626 typedef struct TQ3MeshEdgeData {
627     TQ3Uns32                                    vertexIndices[2];
628     TQ3AttributeSet                             edgeAttributeSet;
629 } TQ3MeshEdgeData;
630 
631 /*!
632  *	@struct
633  *      TQ3MeshContourData
634  *	@discussion
635  *		Data describing a contour within a mesh face.
636   *
637  *		Note that a <code>TQ3MeshContourData</code> is an external data structure
638  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
639  *		In contrast, a <code>TQ3MeshContour</code> is a pointer to an opaque internal
640  *		data structure, which is most likely not a <code>TQ3MeshContourData</code>.
641  *
642  *		<em>This structure is not available in QD3D.</em>
643 *	@field		numVertices				Number of vertices.  Must be at least 3.
644  *	@field		vertexIndices			Indices of the vertices of the contour.
645  */
646 typedef struct TQ3MeshContourData {
647     TQ3Uns32                                    numVertices;
648     TQ3Uns32                                    *vertexIndices;
649 } TQ3MeshContourData;
650 
651 /*!
652  *	@struct
653  *      TQ3MeshFaceData
654  *	@discussion
655  *		Data describing a face within a mesh.
656  *
657  *		Note that a <code>TQ3MeshFaceData</code> is an external data structure
658  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
659  *		In contrast, a <code>TQ3MeshFace</code> is a pointer to an opaque internal
660  *		data structure, which is most likely not a <code>TQ3MeshFaceData</code>.
661  *
662  *		<em>This structure is not available in QD3D.</em>
663  *	@field		numContours				Number of contours.  Must be at least 1.
664  *	@field		contours				Contours of the face.
665  *	@field		faceAttributeSet		Set of attributes for the face.  May be NULL.
666  */
667 typedef struct TQ3MeshFaceData {
668     TQ3Uns32                                    numContours;
669     TQ3MeshContourData                          *contours;
670     TQ3AttributeSet                             faceAttributeSet;
671 } TQ3MeshFaceData;
672 
673 /*!
674  *	@struct
675  *      TQ3MeshData
676  *	@discussion
677  *		Data describing a mesh.
678  *
679  *		Note that a <code>TQ3MeshData</code> is an external data structure
680  *		for use with the <code>Q3Mesh_Set/Get/EmptyData</code> functions.
681  *
682  *		<em>This structure is not available in QD3D.</em>
683  *	@field		numVertices				Number of vertices in the following array.
684  *	@field		vertices				Pointer to array of vertices of the mesh.
685  *	@field		numEdges				Number of edges in the following array.  May be 0
686  *										if you do not want to specify any edges.
687  *	@field		edges					Pointer to an array of edges.  May be NULL if you
688  *										also specify 0 for <code>numEdges</code>.
689  *	@field		numFaces				Number of faces in the mesh.
690  *	@field		faces					Pointer to an array of faces.
691  *	@field		meshAttributeSet		Set of attributes for the mesh.  May be NULL.
692  */
693 typedef struct TQ3MeshData {
694     TQ3Uns32									numVertices;
695     TQ3MeshVertexData							*vertices;
696     TQ3Uns32									numEdges;
697     TQ3MeshEdgeData								*edges;
698     TQ3Uns32									numFaces;
699     TQ3MeshFaceData								*faces;
700     TQ3AttributeSet								meshAttributeSet;
701 } TQ3MeshData;
702 
703 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
704 
705 
706 /*!
707  *	@struct
708  *      TQ3NURBCurveData
709  *	@discussion
710  *      Data defining a NURBS curve, a 3-dimensional curve represented by
711  *		a nonuniform rational B-spline equation.
712  *	@field		order							The order of the curve, one more than the
713  *												degree of the polynomials defining the curve.
714  *												Must be greater than one.
715  *	@field		numPoints						Number of control points.  Must be greater than
716  *												or equal to the order.
717  *	@field		controlPoints					Array of rational 4-dimensional control points.
718  *	@field		knots							Array of knots that define the curve.  The number
719  *												of knots must equal the sum of <code>order</code>
720  *												and <code>numPoints</code>.  The values must be
721  *												nondecreasing.
722  *	@field		curveAttributeSet				Set of attributes for the curve.  May be NULL.
723  */
724 typedef struct TQ3NURBCurveData {
725     TQ3Uns32                                    order;
726     TQ3Uns32                                    numPoints;
727     TQ3RationalPoint4D                          *controlPoints;
728     float                                       *knots;
729     TQ3AttributeSet                             curveAttributeSet;
730 } TQ3NURBCurveData;
731 
732 
733 // NURBPatch data
734 /*!
735  *	@struct		TQ3NURBPatchTrimCurveData
736  *	@discussion
737  *		Curve that trims a NURB patch.  Note that this is similar to TQ3NURBCurveData,
738  *		but lacks an attribute set.
739  *	@field		order							The order of the curve, one more than the
740  *												degree of the polynomials defining the curve.
741  *												Must be greater than one.
742  *	@field		numPoints						Number of control points.  Must be greater than
743  *												or equal to the order.
744  *	@field		controlPoints					Array of rational 4-dimensional control points.
745  *	@field		knots							Array of knots that define the curve.  The number
746  *												of knots must equal the sum of <code>order</code>
747  *												and <code>numPoints</code>.  The values must be
748  *												nondecreasing.
749  */
750 typedef struct TQ3NURBPatchTrimCurveData {
751     TQ3Uns32                                    order;
752     TQ3Uns32                                    numPoints;
753     TQ3RationalPoint3D                          *controlPoints;
754     float                                       *knots;
755 } TQ3NURBPatchTrimCurveData;
756 
757 /*!
758  *	@struct		TQ3NURBPatchTrimLoopData
759  *	@discussion
760  *		Data describing curves that trim a NURB patch.
761  *	@field		numTrimCurves			Number of curves in the following array.
762  *	@field		trimCurves				Pointer to an array of curves.
763  */
764 typedef struct TQ3NURBPatchTrimLoopData {
765     TQ3Uns32                                    numTrimCurves;
766     TQ3NURBPatchTrimCurveData                   *trimCurves;
767 } TQ3NURBPatchTrimLoopData;
768 
769 /*!
770  *	@struct		TQ3NURBPatchData
771  *	@discussion
772  *		Data describing a NURB patch, a surface defined by a ratio of B-spline surfaces.
773  *	@field		uOrder					Order of the NURB patch in the u parametric direction.
774  *										The order is one greater than the degree of the
775  *										polynomial functions involved, and must be
776  *										greater than one.
777  *	@field		vOrder					Order of the NURB patch in the v parametric direction.
778  *										The order is one greater than the degree of the
779  *										polynomial functions involved, and must be
780  *										greater than one.
781  *	@field		numRows					Number of control points in the u parametric equation.
782  *										Must be greater than 1.
783  *	@field		numColumns				Number of control points in the v parametric equation.
784  *										Must be greater than 1.
785  *	@field		controlPoints			Array of rational 4-dimensional control points.
786  *										They are listed first in the direction of increasing u
787  *										and then in the direction of increasing v.
788  *										The number of control points is <code>numRows</code> times
789  *										<code>numColumns</code>.
790  *	@field		uKnots					Array of knots in the u parametric direction.  The
791  *										number of these knots is the sum of <code>uOrder</code>
792  *										and <code>numColumns</code>.  The values must be
793  *										nondecreasing.
794  *	@field		vKnots					Array of knots in the v parametric direction.  The
795  *										number of these knots is the sum of <code>vOrder</code>
796  *										and <code>numRows</code>.  The values must be
797  *										nondecreasing.
798  *	@field		numTrimLoops			Number of trim loops in the following array.
799  *										Currently this should be 0.
800  *	@field		trimLoops				Pointer to an array of trim loop structures.
801  *										Currently this should be NULL.
802  *	@field		patchAttributeSet		Set of attributes for the patch.  May be NULL.
803  */
804 typedef struct TQ3NURBPatchData {
805     TQ3Uns32                                    uOrder;
806     TQ3Uns32                                    vOrder;
807     TQ3Uns32                                    numRows;
808     TQ3Uns32                                    numColumns;
809     TQ3RationalPoint4D                          *controlPoints;
810     float                                       *uKnots;
811     float                                       *vKnots;
812     TQ3Uns32                                    numTrimLoops;
813     TQ3NURBPatchTrimLoopData                    *trimLoops;
814     TQ3AttributeSet                             patchAttributeSet;
815 } TQ3NURBPatchData;
816 
817 
818 /*!
819  *	@struct		TQ3PixmapMarkerData
820  *	@discussion
821  *		Data describing a pixmap marker, a 2-dimensional color image drawn on top of a scene
822  *		at a specified location.
823  *	@field		position				Location of the marker, in local coordinates.
824  *	@field		xOffset					Horizontal offset from the <code>position</code> to the
825  *										upper left corner of the marker, in pixels.
826  *	@field		yOffset					Vertical offset from the <code>position</code> to the
827  *										upper left corner of the marker, in pixels.
828  *	@field		pixmap					A pixmap.
829  *	@field		pixmapMarkerAttributeSet		A set of attributes for the marker.  May be NULL.
830  */
831 typedef struct TQ3PixmapMarkerData {
832     TQ3Point3D                                  position;
833     TQ3Int32                                    xOffset;
834     TQ3Int32                                    yOffset;
835     TQ3StoragePixmap                            pixmap;
836     TQ3AttributeSet                             pixmapMarkerAttributeSet;
837 } TQ3PixmapMarkerData;
838 
839 
840 /*!
841  *	@struct		TQ3PointData
842  *	@discussion
843  *		Data describing a point object.
844  *	@field		point					Location of the point.
845  *	@field		pointAttributeSet		Set of attributes for the point.  May be NULL.
846  */
847 typedef struct TQ3PointData {
848     TQ3Point3D                                  point;
849     TQ3AttributeSet                             pointAttributeSet;
850 } TQ3PointData;
851 
852 
853 /*!
854  *	@struct		TQ3PolygonData
855  *	@discussion
856  *		Data describing a simple convex polygon.
857  *	@field		numVertices				Number of vertices.  Must be at least 3.
858  *	@field		vertices				Pointer to an array of vertices.
859  *	@field		polygonAttributeSet		Set of attributes for the polygon.  May be NULL.
860  */
861 typedef struct TQ3PolygonData {
862     TQ3Uns32                                    numVertices;
863     TQ3Vertex3D                                 *vertices;
864     TQ3AttributeSet                             polygonAttributeSet;
865 } TQ3PolygonData;
866 
867 
868 // Polyhedron data
869 /*!
870  *	@typedef	TQ3PolyhedronEdge
871  *	@discussion
872  *		A combination of masks of type TQ3PolyhedronEdgeMasks indicating which edges of
873  *		a triangle are to be rendered.
874  */
875 typedef TQ3Uns32                                TQ3PolyhedronEdge;
876 
877 /*!
878  *	@struct		TQ3PolyhedronEdgeData
879  *	@discussion
880  *		Data describing an edge within a polyhedron.
881  *	@field		vertexIndices			Indices of the two vertices that are ends of the edge.
882  *	@field		triangleIndices			Indices of the two triangles that contain the edge.
883  *	@field		edgeAttributeSet		Set of attributes for the edge.  May be NULL.
884  */
885 typedef struct TQ3PolyhedronEdgeData {
886     TQ3Uns32                                    vertexIndices[2];
887     TQ3Uns32                                    triangleIndices[2];
888     TQ3AttributeSet                             edgeAttributeSet;
889 } TQ3PolyhedronEdgeData;
890 
891 /*!
892  *	@struct		TQ3PolyhedronTriangleData
893  *	@discussion
894  *		Data describing a triangle within a polyhedron.
895  *	@field		vertexIndices			Indices of the 3 vertices of the triangle.
896  *	@field		edgeFlag				Flags indicating which edges of the triangle should
897  *										be rendered.  See <code>TQ3PolyhedronEdgeMasks</code>.
898  *	@field		triangleAttributeSet	Set of attributes for the triangle.  May be NULL.
899  */
900 typedef struct TQ3PolyhedronTriangleData {
901     TQ3Uns32                                    vertexIndices[3];
902     TQ3PolyhedronEdge                           edgeFlag;
903     TQ3AttributeSet                             triangleAttributeSet;
904 } TQ3PolyhedronTriangleData;
905 
906 /*!
907  *	@struct		TQ3PolyhedronData
908  *	@discussion
909  *		Data describing a polyhedron.
910  *	@field		numVertices				Number of vertices in the following array.
911  *	@field		vertices				Pointer to array of vertices of the polyhedron.
912  *	@field		numEdges				Number of edges in the following array.  May be 0
913  *										if you do not want to specify any edges.
914  *	@field		edges					Pointer to an array of edges.  May be NULL if you
915  *										also specify 0 for <code>numEdges</code>.
916  *	@field		numTriangles			Number of triangles (faces) in the polygon.
917  *	@field		triangles				Pointer to an array of triangles.
918  *	@field		polyhedronAttributeSet	Set of attributes for the polyhedron.  May be NULL.
919  */
920 typedef struct TQ3PolyhedronData {
921     TQ3Uns32                                    numVertices;
922     TQ3Vertex3D                                 *vertices;
923     TQ3Uns32                                    numEdges;
924     TQ3PolyhedronEdgeData                       *edges;
925     TQ3Uns32                                    numTriangles;
926     TQ3PolyhedronTriangleData                   *triangles;
927     TQ3AttributeSet                             polyhedronAttributeSet;
928 } TQ3PolyhedronData;
929 
930 
931 /*!
932  *	@struct		TQ3PolyLineData
933  *	@discussion
934  *		Data describing a connected but not closed curve made up of several straight line
935  *		segments.
936  *	@field		numVertices				Number of vertices of the curve (one more than the
937  *										number of line segments).  Must be at least 2.
938  *	@field		vertices				Pointer to an array of vertices.
939  *	@field		segmentAttributeSet		Pointer to an array of attribute sets, one for each
940  *										segment.  If you do not want to assign attributes
941  *										to any segment, this pointer may be NULL.
942  *	@field		polyLineAttributeSet	Set of attributes for the whole curve.  May be NULL.
943  */
944 typedef struct TQ3PolyLineData {
945     TQ3Uns32                                    numVertices;
946     TQ3Vertex3D                                 *vertices;
947     TQ3AttributeSet                             *segmentAttributeSet;
948     TQ3AttributeSet                             polyLineAttributeSet;
949 } TQ3PolyLineData;
950 
951 
952 /*!
953  *	@struct		TQ3TorusData
954  *	@discussion
955  *		Data describing a generalized torus.  A torus is a surface formed by rotating an
956  *		ellipse about an axis that is in the same plane as the ellipse but does not pass
957  *		through the ellipse.
958  *
959  *		The kind of torus usually encountered in elementary mathematics, with circular
960  *		cross sections, would be one where the <code>orientation</code>, <code>majorRadius</code>,
961  *		and <code>minorRadius</code> vectors are mutually orthogonal, where
962  *		<code>majorRadius</code> and <code>minorRadius</code> have the same length, and where
963  *		<code>ratio</code> is 1.
964  *
965  *		The values <code>uMin</code>, <code>uMax</code>, <code>vMin</code>, and <code>vMax</code>
966  *		were apparently intended to allow partial tori, e.g., a torus with a wedge
967  *		cut out of it.
968  *		But Quesa does not implement this feature, and I do not believe that QuickDraw 3D
969  *		ever did either.
970  *
971  *	@field		origin					Center of rotation.
972  *	@field		orientation				Vector whose direction is the axis of rotation, and
973  *										whose length is the length of the radius of the ellipse
974  *										in the direction of the axis of rotation.
975  *	@field		majorRadius				Vector from the origin to the center of the ellipse.
976  *	@field		minorRadius				Vector from the origin to the center of a different
977  *										cross-sectional ellipse.
978  *	@field		ratio					The ratio between the radius of the ellipse in the direction
979  *										of <code>majorRadius</code>, and the length of
980  *										<code>orientation</code>.
981  *	@field		uMin					Minimum value in the u parametric direction (the long way
982  *										around.)  Normally 0.
983  *	@field		uMax					Maximum value in the u parametric direction (the long way
984  *										around.)  Normally 1.
985  *	@field		vMin					Minimum value in the v parametric direction (the short way
986  *										around.)  Normally 0.
987  *	@field		vMax					Maximum value in the v parametric direction (the short way
988  *										around.)  Normally 1.
989  *	@field		caps					Cap style.  Should be kQ3EndCapNone.
990  *
991  *	@field		interiorAttributeSet	Interior attribute set.  Not currently used.
992  *
993  *	@field		torusAttributeSet		Overall attribute set.
994  */
995 typedef struct TQ3TorusData {
996     TQ3Point3D                                  origin;
997     TQ3Vector3D                                 orientation;
998     TQ3Vector3D                                 majorRadius;
999     TQ3Vector3D                                 minorRadius;
1000     float                                       ratio;
1001     float                                       uMin;
1002     float                                       uMax;
1003     float                                       vMin;
1004     float                                       vMax;
1005     TQ3EndCap                                   caps;
1006     TQ3AttributeSet                             interiorAttributeSet;
1007     TQ3AttributeSet                             torusAttributeSet;
1008 } TQ3TorusData;
1009 
1010 
1011 /*!
1012  *	@struct		TQ3TriangleData
1013  *	@discussion
1014  *		Data defining a single triangle.
1015  *	@field		vertices				The 3 vertices of the triangle.
1016  *	@field		triangleAttributeSet	Set of attributes for the triangle.  May be NULL.
1017  */
1018 typedef struct TQ3TriangleData {
1019     TQ3Vertex3D                                 vertices[3];
1020     TQ3AttributeSet                             triangleAttributeSet;
1021 } TQ3TriangleData;
1022 
1023 
1024 /*!
1025  *	@struct		TQ3TriGridData
1026  *	@discussion
1027  *		Data describing a TriGrid object.  A TriGrid is defined by a grid of points in
1028  *		3-dimensional space.  Each set of 4 adjacent points (in the mth and (m+1)st row and
1029  *		nth and (n+1)st column) defines a quadrilateral that can be subdivided into
1030  *		triangles in 2 natural ways.  This subdivision is done in an alternating way,
1031  *		such that the vertex in the first row and first column belongs to two triangles.
1032  *	@field		numRows					Number of rows of vertices.  Should be at least 2.
1033  *	@field		numColumns				Number of columns of vertices.  Should be at least 2.
1034  *	@field		vertices				Pointer to an array of vertices, listed in rectangular
1035  *										order, first by increasing columns and then by
1036  *										increasing rows.  The number of vertices should be
1037  *										<code>numRows</code> times <code>numColumns</code>.
1038  *	@field		facetAttributeSet		Pointer to an array of triangle attributes.  May be
1039  *										NULL, but otherwise should point to an array of
1040  *										2&times;(<code>numRows</code>-1)&times;(<code>numColumns</code>-1)
1041  *										attribute sets.
1042  *	@field		triGridAttributeSet		Set of attributes for the whole TriGrid object.
1043  *										May be NULL.
1044  */
1045 typedef struct TQ3TriGridData {
1046     TQ3Uns32                                    numRows;
1047     TQ3Uns32                                    numColumns;
1048     TQ3Vertex3D                                 *vertices;
1049     TQ3AttributeSet                             *facetAttributeSet;
1050     TQ3AttributeSet                             triGridAttributeSet;
1051 } TQ3TriGridData;
1052 
1053 
1054 // TriMesh data
1055 /*!
1056  *	@struct		TQ3TriMeshTriangleData
1057  *	@discussion
1058  *		Data defining a triangle within a TriMesh.
1059  *	@field		pointIndices			Array of 3 indices into the TriMesh array of points.
1060  */
1061 typedef struct TQ3TriMeshTriangleData {
1062     TQ3Uns32                                    pointIndices[3];
1063 } TQ3TriMeshTriangleData;
1064 
1065 /*!
1066  *	@struct		TQ3TriMeshEdgeData
1067  *	@discussion
1068  *		Data defining an edge within a TriMesh.
1069  *	@field		pointIndices			Array of 2 indices into the TriMesh array of points,
1070  *										the ends of the edge.
1071  *	@field		triangleIndices			Array of 2 indices into the TriMesh array of triangles,
1072  *										the triangles containing the edge.
1073  */
1074 typedef struct TQ3TriMeshEdgeData {
1075     TQ3Uns32                                    pointIndices[2];
1076     TQ3Uns32                                    triangleIndices[2];
1077 } TQ3TriMeshEdgeData;
1078 
1079 /*!
1080  *	@struct		TQ3TriMeshAttributeData
1081  *	@discussion
1082  *		A structure holding an array of attribute data of a particular type.
1083  *	@field		attributeType			Type of the attribute.
1084  *	@field		data					Pointer to an array of attribute data.  The number of
1085  *										members in the array is determined by context in the
1086  *										enclosing <code>TQ3TriMeshData</code> structure; for
1087  *										instance, if these are vertex attributes, the number
1088  *										of members is the number of vertices.  The size of each
1089  *										member depends on the attribute type.
1090  *	@field		attributeUseArray		For non-custom attribute types, this must be NULL.
1091  *										For custom attribute types, it can point to an array
1092  *										of 1-byte 0s and 1s, with 1s indicating which items
1093  *										have the custom attribute.
1094  */
1095 typedef struct TQ3TriMeshAttributeData {
1096     TQ3AttributeType                            attributeType;
1097     void                                        *data;
1098     char                                        *attributeUseArray;
1099 } TQ3TriMeshAttributeData;
1100 
1101 /*!
1102  *	@struct		TQ3TriMeshData
1103  *	@discussion
1104  *		Structure describing a TriMesh object, which is an object composed of vertices, edges,
1105  *		and triangular faces.  The main difference between a TriMesh and a Polyhedron is that
1106  *		attribute data for vertices, edges, and faces are not stored in attribute sets, but
1107  *		in arrays of attribute data.  This is normally more efficient, so long as you are
1108  *		going to be assigning an attribute to every vertex, or every edge, or every face.
1109  *	@field		triMeshAttributeSet		Set of attributes for the whole object.  May be NULL.
1110  *	@field		numTriangles			Number of triangles in the following array.
1111  *	@field		triangles				Pointer to an array of triangle data.
1112  *	@field		numTriangleAttributeTypes	Number of triangle attribute types listed in the
1113  *											following array.
1114  *	@field		triangleAttributeTypes		Pointer to an array of attribute data for triangles (faces).
1115  *											May be NULL, if <code>numTriangleAttributeTypes</code> is 0.
1116  *	@field		numEdges				Number of edges in the following array.
1117  *	@field		edges					Pointer to an array of edge data.  If you do not wish to
1118  *										specify any edges, you can set this to NULL, and set
1119  *										<code>numEdges</code> to 0.
1120  *	@field		numEdgeAttributeTypes	Number of edge attribute types in the following array.
1121  *	@field		edgeAttributeTypes		Pointer to an array of edge attribute types.  May be NULL,
1122  *										provided that <code>numEdgeAttributeTypes</code> is 0.
1123  *	@field		numPoints				Number of points (vertices).
1124  *	@field		points					Pointer to an array of points.
1125  *	@field		numVertexAttributeTypes	Number of vertex attribute types in the following array.
1126  *	@field		vertexAttributeTypes	Pointer to an array of vertex attribute data.  May be NULL,
1127  *										so long as <code>numVertexAttributeTypes</code> is 0.
1128  *	@field		bBox					Bounding box of the TriMesh.
1129  */
1130 typedef struct TQ3TriMeshData {
1131     TQ3AttributeSet                             triMeshAttributeSet;
1132 
1133     TQ3Uns32                                    numTriangles;
1134     TQ3TriMeshTriangleData                      *triangles;
1135 
1136     TQ3Uns32                                    numTriangleAttributeTypes;
1137     TQ3TriMeshAttributeData                     *triangleAttributeTypes;
1138 
1139     TQ3Uns32                                    numEdges;
1140     TQ3TriMeshEdgeData                          *edges;
1141 
1142     TQ3Uns32                                    numEdgeAttributeTypes;
1143     TQ3TriMeshAttributeData                     *edgeAttributeTypes;
1144 
1145     TQ3Uns32                                    numPoints;
1146     TQ3Point3D                                  *points;
1147 
1148     TQ3Uns32                                    numVertexAttributeTypes;
1149     TQ3TriMeshAttributeData                     *vertexAttributeTypes;
1150 
1151     TQ3BoundingBox                              bBox;
1152 } TQ3TriMeshData;
1153 
1154 
1155 
1156 
1157 
1158 //=============================================================================
1159 //      Macros
1160 //-----------------------------------------------------------------------------
1161 /*!
1162 	@functiongroup	Mesh Iterator Macros
1163 */
1164 /*!
1165  *	@function		Q3ForEachMeshComponent
1166  *	@discussion
1167  *		Macro to aid in iterating over components of a Mesh object.  Example:
1168  *
1169  *		<blockquote><pre><code>
1170  *		TQ3MeshIterator		iter;
1171  *		TQ3MeshComponent	comp;
1172  *		Q3ForEachMeshComponent( myMesh, comp, &amp;iter )
1173  *		{
1174  *		&nbsp;	DoSomething( comp );
1175  *		}
1176  *		</code></pre></blockquote>
1177  *	@param		_m						The mesh object.
1178  *	@param		_c						The component.
1179  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1180  */
1181 #define Q3ForEachMeshComponent(_m, _c, _i)                  \
1182         for ((_c) = Q3Mesh_FirstMeshComponent((_m), (_i));  \
1183              (_c) != NULL;                                  \
1184              (_c) = Q3Mesh_NextMeshComponent((_i)))
1185 
1186 /*!
1187  *	@function		Q3ForEachComponentVertex
1188  *	@discussion
1189  *		Macro to aid in iterating over vertices of a component of a Mesh object.
1190  *	@param		_c						The component.
1191  *	@param		_v						The vertex.
1192  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1193  */
1194 #define Q3ForEachComponentVertex(_c, _v, _i)                \
1195         for ((_v) = Q3Mesh_FirstComponentVertex((_c), (_i));\
1196              (_v) != NULL;                                  \
1197              (_v) = Q3Mesh_NextComponentVertex((_i)))
1198 
1199 /*!
1200  *	@function		Q3ForEachComponentEdge
1201  *	@discussion
1202  *		Macro to aid in iterating over edges of a component of a Mesh object.
1203  *	@param		_c						The component.
1204  *	@param		_e						The edge.
1205  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1206  */
1207 #define Q3ForEachComponentEdge(_c, _e, _i)                  \
1208         for ((_e) = Q3Mesh_FirstComponentEdge((_c), (_i));  \
1209              (_e) != NULL;                                  \
1210              (_e) = Q3Mesh_NextComponentEdge((_i)))
1211 
1212 /*!
1213  *	@function		Q3ForEachMeshVertex
1214  *	@discussion
1215  *		Macro to aid in iterating over vertices of a Mesh object.
1216  *	@param		_m						The mesh.
1217  *	@param		_v						The vertex.
1218  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1219  */
1220 #define Q3ForEachMeshVertex(_m, _v, _i)                     \
1221         for ((_v) = Q3Mesh_FirstMeshVertex((_m), (_i));     \
1222              (_v) != NULL;                                  \
1223              (_v) = Q3Mesh_NextMeshVertex((_i)))
1224 
1225 /*!
1226  *	@function		Q3ForEachMeshFace
1227  *	@discussion
1228  *		Macro to aid in iterating over faces of a Mesh object.
1229  *	@param		_m						The mesh.
1230  *	@param		_f						The face.
1231  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1232  */
1233 #define Q3ForEachMeshFace(_m, _f, _i)                       \
1234         for ((_f) = Q3Mesh_FirstMeshFace((_m), (_i));       \
1235              (_f) != NULL;                                  \
1236              (_f) = Q3Mesh_NextMeshFace((_i)))
1237 
1238 /*!
1239  *	@function		Q3ForEachMeshEdge
1240  *	@discussion
1241  *		Macro to aid in iterating over edges of a Mesh object.
1242  *	@param		_m						The mesh.
1243  *	@param		_e						The edge.
1244  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1245  */
1246 #define Q3ForEachMeshEdge(_m, _e, _i)                       \
1247         for ((_e) = Q3Mesh_FirstMeshEdge((_m), (_i));       \
1248              (_e) != NULL;                                  \
1249              (_e) = Q3Mesh_NextMeshEdge((_i)))
1250 
1251 /*!
1252  *	@function		Q3ForEachVertexEdge
1253  *	@discussion
1254  *		Macro to aid in iterating over edges incident to a vertex of a Mesh object.
1255  *	@param		_v						The vertex.
1256  *	@param		_e						The edge.
1257  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1258  */
1259 #define Q3ForEachVertexEdge(_v, _e, _i)                     \
1260         for ((_e) = Q3Mesh_FirstVertexEdge((_v), (_i));     \
1261              (_e) != NULL;                                  \
1262              (_e) = Q3Mesh_NextVertexEdge((_i)))
1263 
1264 
1265 /*!
1266  *	@function		Q3ForEachVertexVertex
1267  *	@discussion
1268  *		Macro to aid in iterating over vertices adjacent to a vertex of a Mesh object.
1269  *	@param		_v						The vertex.
1270  *	@param		_n						An adjacent vertex.
1271  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1272  */
1273 #define Q3ForEachVertexVertex(_v, _n, _i)                   \
1274         for ((_n) = Q3Mesh_FirstVertexVertex((_v), (_i));   \
1275              (_n) != NULL;                                  \
1276              (_n) = Q3Mesh_NextVertexVertex((_i)))
1277 
1278 /*!
1279  *	@function		Q3ForEachVertexFace
1280  *	@discussion
1281  *		Macro to aid in iterating over faces incident to a vertex of a Mesh object.
1282  *	@param		_v						The vertex.
1283  *	@param		_f						An incident face.
1284  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1285  */
1286 #define Q3ForEachVertexFace(_v, _f, _i)                     \
1287         for ((_f) = Q3Mesh_FirstVertexFace((_v), (_i));     \
1288              (_f) != NULL;                                  \
1289              (_f) = Q3Mesh_NextVertexFace((_i)))
1290 
1291 /*!
1292  *	@function		Q3ForEachFaceEdge
1293  *	@discussion
1294  *		Macro to aid in iterating over edges incident to a face of a Mesh object.
1295  *	@param		_f						The face.
1296  *	@param		_e						An incident edge.
1297  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1298  */
1299 #define Q3ForEachFaceEdge(_f, _e, _i)                       \
1300         for ((_e) = Q3Mesh_FirstFaceEdge((_f), (_i));       \
1301              (_e) != NULL;                                  \
1302              (_e) = Q3Mesh_NextFaceEdge((_i)))
1303 
1304 /*!
1305  *	@function		Q3ForEachFaceVertex
1306  *	@discussion
1307  *		Macro to aid in iterating over vertices incident to a face of a Mesh object.
1308  *	@param		_f						The face.
1309  *	@param		_v						An incident vertex.
1310  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1311  */
1312 #define Q3ForEachFaceVertex(_f, _v, _i)                     \
1313         for ((_v) = Q3Mesh_FirstFaceVertex((_f), (_i));     \
1314              (_v) != NULL;                                  \
1315              (_v) = Q3Mesh_NextFaceVertex((_i)))
1316 
1317 /*!
1318  *	@function		Q3ForEachFaceFace
1319  *	@discussion
1320  *		Macro to aid in iterating over faces adjacent to a face of a Mesh object.
1321  *	@param		_f						The face.
1322  *	@param		_n						An incident face.
1323  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1324  */
1325 #define Q3ForEachFaceFace(_f, _n, _i)                       \
1326         for ((_n) = Q3Mesh_FirstFaceFace((_f), (_i));       \
1327              (_n) != NULL;                                  \
1328              (_n) = Q3Mesh_NextFaceFace((_i)))
1329 
1330 /*!
1331  *	@function		Q3ForEachFaceContour
1332  *	@discussion
1333  *		Macro to aid in iterating over contours of a face of a Mesh object.
1334  *	@param		_f						The face.
1335  *	@param		_h						A contour of the face.
1336  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1337  */
1338 #define Q3ForEachFaceContour(_f, _h, _i)                    \
1339         for ((_h) = Q3Mesh_FirstFaceContour((_f), (_i));    \
1340              (_h) != NULL;                                  \
1341              (_h) = Q3Mesh_NextFaceContour((_i)))
1342 
1343 /*!
1344  *	@function		Q3ForEachContourEdge
1345  *	@discussion
1346  *		Macro to aid in iterating over edges of a contour of a Mesh object.
1347  *	@param		_h						The contour.
1348  *	@param		_e						An edge of the contour.
1349  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1350  */
1351 #define Q3ForEachContourEdge(_h, _e, _i)                    \
1352         for ((_e) = Q3Mesh_FirstContourEdge((_h), (_i));    \
1353              (_e) != NULL;                                  \
1354              (_e) = Q3Mesh_NextContourEdge((_i)))
1355 
1356 /*!
1357  *	@function		Q3ForEachContourVertex
1358  *	@discussion
1359  *		Macro to aid in iterating over vertices of a contour of a Mesh object.
1360  *	@param		_h						The contour.
1361  *	@param		_v						A vertex of the contour.
1362  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1363  */
1364 #define Q3ForEachContourVertex(_h, _v, _i)                  \
1365         for ((_v) = Q3Mesh_FirstContourVertex((_h), (_i));  \
1366              (_v) != NULL;                                  \
1367              (_v) = Q3Mesh_NextContourVertex((_i)))
1368 
1369 /*!
1370  *	@function		Q3ForEachContourFace
1371  *	@discussion
1372  *		Macro to aid in iterating over edges of a contour of a Mesh object.
1373  *	@param		_h						The contour.
1374  *	@param		_v						An edge of the contour.
1375  *	@param		_i						Address of a <code>TQ3MeshIterator</code>.
1376  */
1377 #define Q3ForEachContourFace(_h, _f, _i)                    \
1378         for ((_f) = Q3Mesh_FirstContourFace((_h), (_i));    \
1379              (_f) != NULL;                                  \
1380              (_f) = Q3Mesh_NextContourFace((_i)))
1381 
1382 
1383 
1384 
1385 
1386 //=============================================================================
1387 //      Function prototypes
1388 //-----------------------------------------------------------------------------
1389 /*!
1390 	@functiongroup	Geometry Functions
1391 */
1392 
1393 /*!
1394  *  @function
1395  *      Q3Geometry_GetType
1396  *  @discussion
1397  *      Returns the type of the GeometryObject passed in.
1398  *
1399  *      This function is used to determine the type of geometry object the parameter
1400  *      is a reference to. If 'geometry' is invalid, <code>kQ3ObjectTypeInvalid</code> will be
1401  *		returned.
1402  *
1403  *  @param geometry         A reference to a geometry object.
1404  *  @result                 A constant enumerating the type of 'geometry'.
1405  */
1406 Q3_EXTERN_API_C ( TQ3ObjectType  )
1407 Q3Geometry_GetType (
1408     TQ3GeometryObject             geometry
1409 );
1410 
1411 
1412 
1413 /*!
1414  *  @function
1415  *      Q3Geometry_GetAttributeSet
1416  *  @discussion
1417  *      Returns the attribute set associated with a geometric object.
1418  *
1419  *      This function fills the <code>TQ3AttributeSet*</code> parameter out with the
1420  *		attribute set of the passed in <code>TQ3GeometryObject</code> reference.
1421  *
1422  *		The reference count of the attribute set is incremented.
1423  *
1424  *		To decrease the reference count when finished with the attribute set, use
1425  *		<code>Q3ObjectDispose()</code>.
1426  *
1427  *  @param geometry         A reference to a geometry object.
1428  *  @param attributeSet     Receives a reference to the attribute set of the geometry.
1429  *  @result                 Success or failure of the operation.
1430  */
1431 Q3_EXTERN_API_C ( TQ3Status  )
1432 Q3Geometry_GetAttributeSet (
1433     TQ3GeometryObject             geometry,
1434     TQ3AttributeSet               *attributeSet
1435 );
1436 
1437 
1438 
1439 /*!
1440  *  @function
1441  *      Q3Geometry_SetAttributeSet
1442  *  @discussion
1443  *      Sets the attribute set associated with a geometric object.
1444  *
1445  *      Applies the attribute set given by the <code>TQ3AttributeSet</code> parameter onto
1446  *		the <code>TQ3GeometryObject</code> reference passed in.
1447  *
1448  *  @param geometry         A reference to a geometry object.
1449  *  @param attributeSet     The attribute set to apply to the object.
1450  *  @result                 Success or failure of the operation.
1451  */
1452 Q3_EXTERN_API_C ( TQ3Status  )
1453 Q3Geometry_SetAttributeSet (
1454     TQ3GeometryObject             geometry,
1455     TQ3AttributeSet               attributeSet
1456 );
1457 
1458 
1459 
1460 /*!
1461  *  @function
1462  *      Q3Geometry_Submit
1463  *  @discussion
1464  *      Submits a geometry object for drawing, picking, bounding, or writing.
1465  *
1466  *      Submits the passed in <code>TQ3GeometryObject</code> to the supplied view for
1467  *      drawing, picking, bounding, or writing.
1468  *
1469  *		This function should only be called in a submitting loop.
1470  *
1471  *  @param geometry         A reference to a (retained) geometry object.
1472  *  @param view             The view to submit the geometric object to.
1473  *  @result                 Success or failure of the operation.
1474  */
1475 Q3_EXTERN_API_C ( TQ3Status  )
1476 Q3Geometry_Submit (
1477     TQ3GeometryObject             geometry,
1478     TQ3ViewObject                 view
1479 );
1480 
1481 
1482 
1483 /*!
1484  *	@function
1485  *		Q3Geometry_GetDecomposed
1486  *	@discussion
1487  *		Creates the decomposed form of the geometry, if any.
1488  *
1489  *      The result may be a geometry or a group.  If the geometry cannot be decomposed
1490  *      further, NULL is returned.
1491  *
1492  *      The decomposition of a given geometry is not documented and is subject to change.
1493  *      Geometries may be decomposed to multiple objects; for example, the decomposition
1494  *      of a cone with a bottom cap may be a group containing a TriMesh and a Disk.
1495  *
1496  *		You are free to modify the group or geometry returned by this function, and
1497  *		it is your responsibility to dispose it when you are done with it.
1498  *
1499  *		This function must be called in a submitting loop. Depending on the geometry,
1500  *      the result may be affected by the current view state. E.g., the geometry may
1501  *      be affected by the current transforms and camera, or even by styles such as
1502  *      subdivision or orientation.
1503  *
1504  *		<em>This function is not available in QD3D.</em>
1505  *
1506  *	@param	geometry		A geometry object.
1507  *	@param	view			A view object
1508  *	@result					A new reference to a group or geometry object, or NULL.
1509  */
1510 #if QUESA_ALLOW_QD3D_EXTENSIONS
1511 
1512 Q3_EXTERN_API_C( TQ3Object )
1513 Q3Geometry_GetDecomposed (
1514 	TQ3GeometryObject			geometry,
1515 	TQ3ViewObject				view
1516 );
1517 
1518 #endif
1519 
1520 
1521 
1522 /*!
1523 	@functiongroup	Box Functions
1524 */
1525 
1526 
1527 
1528 /*!
1529  *  @function
1530  *      Q3Box_New
1531  *  @discussion
1532  *      Constructs a new Box geometry object.
1533  *
1534  *		If you pass NULL, you will get a default box with orientation (1, 0, 0), major axis
1535  *		(0, 1, 0), minor axis (0, 0, 1), and origin (0, 0, 0).  <em>This behavior was
1536  *		not present in QuickDraw 3D.</em>
1537  *
1538  *  @param boxData          Instance data passed in specifying the parameters of the new box object,
1539  *							or NULL.
1540  *  @result                 A reference to the new geometry object, or NULL on failure.
1541  */
1542 Q3_EXTERN_API_C ( TQ3GeometryObject  )
1543 Q3Box_New (
1544     const TQ3BoxData              *boxData
1545 );
1546 
1547 
1548 
1549 /*!
1550  *  @function
1551  *      Q3Box_Submit
1552  *  @discussion
1553  *		Submits a box for drawing, picking, bounding, or writing in immediate mode.
1554  *
1555  *		This function should only be called in a submitting loop.
1556  *
1557  *  @param boxData			A pointer to a <code>TQ3BoxData</code> structure specifying the box
1558  *							to be drawn.
1559  *  @param view				The view to submit the box to.
1560  *  @result					Success or failure of the operation.
1561  */
1562 Q3_EXTERN_API_C ( TQ3Status  )
1563 Q3Box_Submit (
1564     const TQ3BoxData              *boxData,
1565     TQ3ViewObject                 view
1566 );
1567 
1568 
1569 
1570 /*!
1571  *  @function
1572  *      Q3Box_SetData
1573  *  @discussion
1574  *      Sets the properties of an existing box object.
1575  *
1576  *  @param box              A reference to a box geometry object.
1577  *  @param boxData          A pointer to the box data to apply to the box object.
1578  *  @result                 Success or failure of the operation.
1579  */
1580 Q3_EXTERN_API_C ( TQ3Status  )
1581 Q3Box_SetData (
1582     TQ3GeometryObject             box,
1583     const TQ3BoxData              *boxData
1584 );
1585 
1586 
1587 
1588 /*!
1589  *  @function
1590  *      Q3Box_GetData
1591  *  @discussion
1592  *      Gets the properties of an existing box object.
1593  *
1594  *		Memory is allocated for the 'boxData' parameter, and <code>Q3Box_EmptyData</code>
1595  *		must be called to dispose of this memory.
1596  *
1597  *  @param box              A reference to a box geometry object.
1598  *  @param boxData          Receives the box object's description.
1599  *  @result                 Success or failure of the operation.
1600  */
1601 Q3_EXTERN_API_C ( TQ3Status  )
1602 Q3Box_GetData (
1603     TQ3GeometryObject             box,
1604     TQ3BoxData                    *boxData
1605 );
1606 
1607 
1608 
1609 /*!
1610  *  @function
1611  *      Q3Box_EmptyData
1612  *  @discussion
1613  *      Releases the memory allocated by a prior call to <code>Q3Box_GetData</code>.
1614  *
1615  *  @param boxData          A pointer to the box data allocated by <code>Q3Box_GetData()</code>.
1616  *  @result                 Success or failure of the operation.
1617  */
1618 Q3_EXTERN_API_C ( TQ3Status  )
1619 Q3Box_EmptyData (
1620     TQ3BoxData                    *boxData
1621 );
1622 
1623 
1624 
1625 /*!
1626  *  @function
1627  *      Q3Box_SetOrigin
1628  *  @discussion
1629  *      Sets the origin of a box object.
1630  *
1631  *  @param box              A reference to a box geometry object.
1632  *  @param origin           The point to which to set 'box's origin.
1633  *  @result                 Success or failure of the operation.
1634  */
1635 Q3_EXTERN_API_C ( TQ3Status  )
1636 Q3Box_SetOrigin (
1637     TQ3GeometryObject             box,
1638     const TQ3Point3D              *origin
1639 );
1640 
1641 
1642 
1643 /*!
1644  *  @function
1645  *      Q3Box_SetOrientation
1646  *  @discussion
1647  *      Sets the orientation of a box object.
1648  *
1649  *  @param box              A reference to a box geometry object.
1650  *  @param orientation      The vector to which to set 'box's orientation.
1651  *  @result                 Success or failure of the operation.
1652  */
1653 Q3_EXTERN_API_C ( TQ3Status  )
1654 Q3Box_SetOrientation (
1655     TQ3GeometryObject             box,
1656     const TQ3Vector3D             *orientation
1657 );
1658 
1659 
1660 
1661 /*!
1662  *  @function
1663  *      Q3Box_SetMajorAxis
1664  *  @discussion
1665  *      Sets the major axis of a box object.
1666  *
1667  *  @param box              A reference to a box geometry object.
1668  *  @param majorAxis        The vector to which to set 'box's major axis.
1669  *  @result                 Success or failure of the operation.
1670  */
1671 Q3_EXTERN_API_C ( TQ3Status  )
1672 Q3Box_SetMajorAxis (
1673     TQ3GeometryObject             box,
1674     const TQ3Vector3D             *majorAxis
1675 );
1676 
1677 
1678 
1679 /*!
1680  *  @function
1681  *      Q3Box_SetMinorAxis
1682  *  @discussion
1683  *      Sets the minor axis of a box object.
1684  *
1685  *  @param box              A reference to a box geometry object.
1686  *  @param minorAxis        The vector to which to set 'box's minor axis.
1687  *  @result                 Success or failure of the operation.
1688  */
1689 Q3_EXTERN_API_C ( TQ3Status  )
1690 Q3Box_SetMinorAxis (
1691     TQ3GeometryObject             box,
1692     const TQ3Vector3D             *minorAxis
1693 );
1694 
1695 
1696 
1697 /*!
1698  *  @function
1699  *      Q3Box_GetOrigin
1700  *  @discussion
1701  *      Gets the origin of a box object.
1702  *
1703  *  @param box              A reference to a box geometry object.
1704  *  @param origin           Receives the origin of the box object.
1705  *  @result                 Success or failure of the operation.
1706  */
1707 Q3_EXTERN_API_C ( TQ3Status  )
1708 Q3Box_GetOrigin (
1709     TQ3GeometryObject             box,
1710     TQ3Point3D                    *origin
1711 );
1712 
1713 
1714 
1715 /*!
1716  *  @function
1717  *      Q3Box_GetOrientation
1718  *  @discussion
1719  *      Gets the orientation of a box object.
1720  *
1721  *  @param box              A reference to a box geometry object.
1722  *  @param orientation      Receives the orientation vector of the box.
1723  *  @result                 Success or failure of the operation.
1724  */
1725 Q3_EXTERN_API_C ( TQ3Status  )
1726 Q3Box_GetOrientation (
1727     TQ3GeometryObject             box,
1728     TQ3Vector3D                   *orientation
1729 );
1730 
1731 
1732 
1733 /*!
1734  *  @function
1735  *      Q3Box_GetMajorAxis
1736  *  @discussion
1737  *      Gets the major axis of a box object.
1738  *
1739  *  @param box              A reference to a box geometry object.
1740  *  @param majorAxis        Receives the major axis of the box.
1741  *  @result                 Success or failure of the operation.
1742  */
1743 Q3_EXTERN_API_C ( TQ3Status  )
1744 Q3Box_GetMajorAxis (
1745     TQ3GeometryObject             box,
1746     TQ3Vector3D                   *majorAxis
1747 );
1748 
1749 
1750 
1751 /*!
1752  *  @function
1753  *      Q3Box_GetMinorAxis
1754  *  @discussion
1755  *      Gets the minor axis of a box object.
1756  *
1757  *  @param box              A reference to a box geometry object.
1758  *  @param minorAxis        Receives the minor axis of the box.
1759  *  @result                 Success or failure of the operation.
1760  */
1761 Q3_EXTERN_API_C ( TQ3Status  )
1762 Q3Box_GetMinorAxis (
1763     TQ3GeometryObject             box,
1764     TQ3Vector3D                   *minorAxis
1765 );
1766 
1767 
1768 
1769 /*!
1770  *  @function
1771  *      Q3Box_GetFaceAttributeSet
1772  *  @discussion
1773  *      Gets the attribute set associated with a certain face of a box object.
1774  *
1775  *      The <code>TQ3AttributeSet*</code> parameter is filled with the attribute set
1776  *      of the face indexed with 'faceIndex' of the box geometry object.
1777  *		faceIndex must be between 0 and 5 (inclusive).
1778  *
1779  *		The reference count of the returned <code>TQ3AttributeSet</code> is incremented.
1780  *
1781  *  @param box              A reference to a box geometry object.
1782  *  @param faceIndex        The index of the face of the box.
1783  *  @param faceAttributeSet Receives a reference to the attribute set of the box face, or
1784  *							NULL if the face does not have an attribute set.
1785  *  @result                 Success or failure of the operation.
1786  */
1787 Q3_EXTERN_API_C ( TQ3Status  )
1788 Q3Box_GetFaceAttributeSet (
1789     TQ3GeometryObject             box,
1790     TQ3Uns32                      faceIndex,
1791     TQ3AttributeSet               *faceAttributeSet
1792 );
1793 
1794 
1795 
1796 /*!
1797  *  @function
1798  *      Q3Box_SetFaceAttributeSet
1799  *  @discussion
1800  *      Sets the attribute set associated with a certain face of a box object.
1801  *
1802  *      This function applies the <code>TQ3AttributeSet*</code> parameter to the attribute set
1803  *      of the face indexed with <code>faceIndex</code> of the box geometry object.
1804  *		<code>faceIndex</code> must be between 0 and 5 (inclusive).
1805  *
1806  *  @param box              A reference to a box geometry object.
1807  *  @param faceIndex        The index of the face of the box.
1808  *  @param faceAttributeSet An attribute set to be applied.
1809  *  @result                 Success or failure of the operation.
1810  */
1811 Q3_EXTERN_API_C ( TQ3Status  )
1812 Q3Box_SetFaceAttributeSet (
1813     TQ3GeometryObject             box,
1814     TQ3Uns32                      faceIndex,
1815     TQ3AttributeSet               faceAttributeSet
1816 );
1817 
1818 
1819 
1820 /*!
1821 	@functiongroup	Cone Functions
1822 */
1823 
1824 
1825 
1826 /*!
1827  *  @function
1828  *      Q3Cone_New
1829  *  @discussion
1830  *      Create a cone geometry object.
1831  *
1832  *		If you pass NULL, you will get a default cone with orientation (1, 0, 0), major axis
1833  *		(0, 1, 0), minor axis (0, 0, 1), and origin (0, 0, 0).  <em>This behavior was
1834  *		not present in QuickDraw 3D.</em>
1835  *
1836  *  @param coneData         Pointer to data describing the cone, or NULL.
1837  *  @result                 The new cone object, or NULL on failure.
1838  */
1839 Q3_EXTERN_API_C ( TQ3GeometryObject  )
1840 Q3Cone_New (
1841     const TQ3ConeData             *coneData
1842 );
1843 
1844 
1845 
1846 /*!
1847  *  @function
1848  *      Q3Cone_Submit
1849  *  @discussion
1850  *      Submits a cone in immediate mode for rendering, bounding, picking, or writing.
1851  *
1852  *		This function should only be called in a submitting loop.
1853  *
1854  *  @param coneData         Pointer to data describing a cone.
1855  *  @param view             A view object.
1856  *  @result                 Success or failure of the operation.
1857  */
1858 Q3_EXTERN_API_C ( TQ3Status  )
1859 Q3Cone_Submit (
1860     const TQ3ConeData             *coneData,
1861     TQ3ViewObject                 view
1862 );
1863 
1864 
1865 
1866 /*!
1867  *  @function
1868  *      Q3Cone_SetData
1869  *  @discussion
1870  *      Modify a cone object by supplying new data.
1871  *
1872  *  @param cone             The cone object.
1873  *  @param coneData         Pointer to data describing a cone.
1874  *  @result                 Success or failure of the operation.
1875  */
1876 Q3_EXTERN_API_C ( TQ3Status  )
1877 Q3Cone_SetData (
1878     TQ3GeometryObject             cone,
1879     const TQ3ConeData             *coneData
1880 );
1881 
1882 
1883 
1884 /*!
1885  *  @function
1886  *      Q3Cone_GetData
1887  *  @discussion
1888  *      Get data describing a cone object.
1889  *
1890  *		This may allocate memory, which should be freed using <code>Q3Cone_EmptyData</code>.
1891  *
1892  *  @param cone             The cone object.
1893  *  @param coneData         Receives data describing the cone.
1894  *  @result                 Success or failure of the operation.
1895  */
1896 Q3_EXTERN_API_C ( TQ3Status  )
1897 Q3Cone_GetData (
1898     TQ3GeometryObject             cone,
1899     TQ3ConeData                   *coneData
1900 );
1901 
1902 
1903 
1904 /*!
1905  *  @function
1906  *      Q3Cone_SetOrigin
1907  *  @discussion
1908  *      Change the origin of a cone object.
1909  *
1910  *  @param cone             The cone object.
1911  *  @param origin           The new origin.
1912  *  @result                 Success or failure of the operation.
1913  */
1914 Q3_EXTERN_API_C ( TQ3Status  )
1915 Q3Cone_SetOrigin (
1916     TQ3GeometryObject             cone,
1917     const TQ3Point3D              *origin
1918 );
1919 
1920 
1921 
1922 /*!
1923  *  @function
1924  *      Q3Cone_SetOrientation
1925  *  @discussion
1926  *      Change the orientation vector of a cone object.
1927  *
1928  *  @param cone             The cone object.
1929  *  @param orientation      The new orientation vector.
1930  *  @result                 Success or failure of the operation.
1931  */
1932 Q3_EXTERN_API_C ( TQ3Status  )
1933 Q3Cone_SetOrientation (
1934     TQ3GeometryObject             cone,
1935     const TQ3Vector3D             *orientation
1936 );
1937 
1938 
1939 
1940 /*!
1941  *  @function
1942  *      Q3Cone_SetMajorRadius
1943  *  @discussion
1944  *      Change the major radius vector of a cone object.
1945  *
1946  *  @param cone             The cone object.
1947  *  @param majorRadius      New major radius vector.
1948  *  @result                 Success or failure of the operation.
1949  */
1950 Q3_EXTERN_API_C ( TQ3Status  )
1951 Q3Cone_SetMajorRadius (
1952     TQ3GeometryObject             cone,
1953     const TQ3Vector3D             *majorRadius
1954 );
1955 
1956 
1957 
1958 /*!
1959  *  @function
1960  *      Q3Cone_SetMinorRadius
1961  *  @discussion
1962  *      Change the minor radius vector of a cone object.
1963  *
1964  *  @param cone             The cone object.
1965  *  @param minorRadius      New minor radius vector.
1966  *  @result                 Success or failure of the operation.
1967  */
1968 Q3_EXTERN_API_C ( TQ3Status  )
1969 Q3Cone_SetMinorRadius (
1970     TQ3GeometryObject             cone,
1971     const TQ3Vector3D             *minorRadius
1972 );
1973 
1974 
1975 
1976 /*!
1977  *  @function
1978  *      Q3Cone_GetOrigin
1979  *  @discussion
1980  *      Get the origin of a cone object.
1981  *
1982  *  @param cone             The cone object.
1983  *  @param origin           Receives the origin.
1984  *  @result                 Success or failure of the operation.
1985  */
1986 Q3_EXTERN_API_C ( TQ3Status  )
1987 Q3Cone_GetOrigin (
1988     TQ3GeometryObject             cone,
1989     TQ3Point3D                    *origin
1990 );
1991 
1992 
1993 
1994 /*!
1995  *  @function
1996  *      Q3Cone_GetOrientation
1997  *  @discussion
1998  *      Get the orientation vector of a cone object.
1999  *
2000  *  @param cone             The cone object.
2001  *  @param orientation      Receives the orientation vector.
2002  *  @result                 Success or failure of the operation.
2003  */
2004 Q3_EXTERN_API_C ( TQ3Status  )
2005 Q3Cone_GetOrientation (
2006     TQ3GeometryObject             cone,
2007     TQ3Vector3D                   *orientation
2008 );
2009 
2010 
2011 
2012 /*!
2013  *  @function
2014  *      Q3Cone_GetMajorRadius
2015  *  @discussion
2016  *      Get the major radius vector of a cone object.
2017  *
2018  *  @param cone             The cone object.
2019  *  @param majorRadius      Receives the major radius vector.
2020  *  @result                 Success or failure of the operation.
2021  */
2022 Q3_EXTERN_API_C ( TQ3Status  )
2023 Q3Cone_GetMajorRadius (
2024     TQ3GeometryObject             cone,
2025     TQ3Vector3D                   *majorRadius
2026 );
2027 
2028 
2029 
2030 /*!
2031  *  @function
2032  *      Q3Cone_GetMinorRadius
2033  *  @discussion
2034  *      Get the minor radius vector of a cone object.
2035  *
2036  *  @param cone             The cone object.
2037  *  @param minorRadius      Receives the minor radius vector.
2038  *  @result                 Success or failure of the operation.
2039  */
2040 Q3_EXTERN_API_C ( TQ3Status  )
2041 Q3Cone_GetMinorRadius (
2042     TQ3GeometryObject             cone,
2043     TQ3Vector3D                   *minorRadius
2044 );
2045 
2046 
2047 
2048 /*!
2049  *  @function
2050  *      Q3Cone_SetCaps
2051  *  @discussion
2052  *      Set the end cap flags of a cone object.
2053  *
2054  *      Currently, this simply determines whether the cone will have a bottom cap.
2055  *
2056  *  @param cone             The cone object.
2057  *  @param caps             End cap value (do not include <code>kQ3EndCapMaskTop</code>).
2058  *  @result                 Success or failure of the operation.
2059  */
2060 Q3_EXTERN_API_C ( TQ3Status  )
2061 Q3Cone_SetCaps (
2062     TQ3GeometryObject             cone,
2063     TQ3EndCap                     caps
2064 );
2065 
2066 
2067 
2068 /*!
2069  *  @function
2070  *      Q3Cone_GetCaps
2071  *  @discussion
2072  *      Get the end cap flags of a cone object.
2073  *
2074  *  @param cone             The cone object.
2075  *  @param caps             Receives the end cap flags.  See <code>TQ3EndCapMasks</code>,
2076  *							defined in Quesa.h, for values.
2077  *  @result                 Success or failure of the operation.
2078  */
2079 Q3_EXTERN_API_C ( TQ3Status  )
2080 Q3Cone_GetCaps (
2081     TQ3GeometryObject             cone,
2082     TQ3EndCap                     *caps
2083 );
2084 
2085 
2086 
2087 /*!
2088  *  @function
2089  *      Q3Cone_SetBottomAttributeSet
2090  *  @discussion
2091  *      Change the bottom attribute set of a cone object.
2092  *
2093  *      Naturally, this only makes sense if the cone has a bottom end cap.
2094  *
2095  *  @param cone             	The cone object.
2096  *  @param bottomAttributeSet	New bottom attribute set.  May be NULL.
2097  *  @result                 	Success or failure of the operation.
2098  */
2099 Q3_EXTERN_API_C ( TQ3Status  )
2100 Q3Cone_SetBottomAttributeSet (
2101     TQ3GeometryObject             cone,
2102     TQ3AttributeSet               bottomAttributeSet
2103 );
2104 
2105 
2106 
2107 /*!
2108  *  @function
2109  *      Q3Cone_GetBottomAttributeSet
2110  *  @discussion
2111  *      Get the attribute set for the bottom cap of a cone object.
2112  *
2113  *  @param cone             	The cone object.
2114  *  @param bottomAttributeSet	Receives a reference to the bottom attribute set, or NULL.
2115  *  @result                 	Success or failure of the operation.
2116  */
2117 Q3_EXTERN_API_C ( TQ3Status  )
2118 Q3Cone_GetBottomAttributeSet (
2119     TQ3GeometryObject             cone,
2120     TQ3AttributeSet               *bottomAttributeSet
2121 );
2122 
2123 
2124 
2125 /*!
2126  *  @function
2127  *      Q3Cone_SetFaceAttributeSet
2128  *  @discussion
2129  *      Set the attribute set for the face (as opposed to the bottom cap) of a cone.
2130  *
2131  *  @param cone             The cone object.
2132  *  @param faceAttributeSet New face attribute set.  May be NULL.
2133  *  @result                 Success or failure of the operation.
2134  */
2135 Q3_EXTERN_API_C ( TQ3Status  )
2136 Q3Cone_SetFaceAttributeSet (
2137     TQ3GeometryObject             cone,
2138     TQ3AttributeSet               faceAttributeSet
2139 );
2140 
2141 
2142 
2143 /*!
2144  *  @function
2145  *      Q3Cone_GetFaceAttributeSet
2146  *  @discussion
2147  *      Get the attribute set for the face (as opposed to the bottom cap) of a cone.
2148  *
2149  *  @param cone             The cone object.
2150  *  @param faceAttributeSet Receives the attribute set for the face, or NULL.
2151  *  @result                 Success or failure of the operation.
2152  */
2153 Q3_EXTERN_API_C ( TQ3Status  )
2154 Q3Cone_GetFaceAttributeSet (
2155     TQ3GeometryObject             cone,
2156     TQ3AttributeSet               *faceAttributeSet
2157 );
2158 
2159 
2160 
2161 /*!
2162  *  @function
2163  *      Q3Cone_SetInteriorAttributeSet
2164  *  @discussion
2165  *      Set the attribute set for the interior of a cone object.
2166  *
2167  *      <em>This function is not available in QD3D.</em>
2168  *
2169  *  @param cylinder         A cone object.
2170  *  @param faceAttributeSet New attribute set for the interior of the cone.
2171  *  @result                 Success or failure of the operation.
2172  */
2173 #if QUESA_ALLOW_QD3D_EXTENSIONS
2174 
2175 Q3_EXTERN_API_C ( TQ3Status  )
2176 Q3Cone_SetInteriorAttributeSet (
2177     TQ3GeometryObject             cone,
2178     TQ3AttributeSet               interiorAttributeSet
2179 );
2180 
2181 #endif	// QUESA_ALLOW_QD3D_EXTENSIONS
2182 
2183 
2184 
2185 /*!
2186  *  @function
2187  *      Q3Cone_GetInteriorAttributeSet
2188  *  @discussion
2189  *      Get the attribute set for the interior of a cone object.
2190  *
2191  *      <em>This function is not available in QD3D.</em>
2192  *
2193  *  @param cylinder         A cone object.
2194  *  @param faceAttributeSet Receives the attribute set for the interior, or NULL.
2195  *  @result                 Success or failure of the operation.
2196  */
2197 #if QUESA_ALLOW_QD3D_EXTENSIONS
2198 
2199 Q3_EXTERN_API_C ( TQ3Status  )
2200 Q3Cone_GetInteriorAttributeSet (
2201     TQ3GeometryObject             cone,
2202     TQ3AttributeSet               *interiorAttributeSet
2203 );
2204 
2205 #endif	// QUESA_ALLOW_QD3D_EXTENSIONS
2206 
2207 
2208 
2209 /*!
2210  *  @function
2211  *      Q3Cone_EmptyData
2212  *  @discussion
2213  *      Release memory allocated by <code>Q3Cone_GetData</code>.
2214  *
2215  *  @param coneData         Data describing a cone, previously obtained with
2216  *							<code>Q3Cone_GetData</code>.
2217  *  @result                 Success or failure of the operation.
2218  */
2219 Q3_EXTERN_API_C ( TQ3Status  )
2220 Q3Cone_EmptyData (
2221     TQ3ConeData                   *coneData
2222 );
2223 
2224 
2225 
2226 /*!
2227 	@functiongroup	Cylinder Functions
2228 */
2229 
2230 
2231 
2232 /*!
2233  *  @function
2234  *      Q3Cylinder_New
2235  *  @discussion
2236  *      Create a new Cylinder object.
2237  *
2238  *		If you pass NULL, you will get a default cylinder with orientation (1, 0, 0), major axis
2239  *		(0, 1, 0), minor axis (0, 0, 1), origin (0, 0, 0), and no end caps.  <em>This behavior was
2240  *		not present in QuickDraw 3D.</em>
2241  *
2242  *  @param cylinderData     Data describing a cylinder, or NULL.
2243  *  @result                 Reference to a new Cylinder geometry object, or NULL on failure.
2244  */
2245 Q3_EXTERN_API_C ( TQ3GeometryObject  )
2246 Q3Cylinder_New (
2247     const TQ3CylinderData         *cylinderData
2248 );
2249 
2250 
2251 
2252 /*!
2253  *  @function
2254  *      Q3Cylinder_Submit
2255  *  @discussion
2256  *		Submits a cylinder for drawing, picking, bounding, or writing in immediate mode.
2257  *
2258  *		This function should only be called in a submitting loop.
2259  *
2260  *  @param cylinderData     Data describing a cylinder.
2261  *  @param view             A view object.
2262  *  @result                 Success or failure of the operation.
2263  */
2264 Q3_EXTERN_API_C ( TQ3Status  )
2265 Q3Cylinder_Submit (
2266     const TQ3CylinderData         *cylinderData,
2267     TQ3ViewObject                 view
2268 );
2269 
2270 
2271 
2272 /*!
2273  *  @function
2274  *      Q3Cylinder_SetData
2275  *  @discussion
2276  *      Modify a cylinder object by supplying all new data.
2277  *
2278  *  @param cylinder         A cylinder object.
2279  *  @param cylinderData     Data describing a cylinder.
2280  *  @result                 Success or failure of the operation.
2281  */
2282 Q3_EXTERN_API_C ( TQ3Status  )
2283 Q3Cylinder_SetData (
2284     TQ3GeometryObject             cylinder,
2285     const TQ3CylinderData         *cylinderData
2286 );
2287 
2288 
2289 
2290 /*!
2291  *  @function
2292  *      Q3Cylinder_GetData
2293  *  @discussion
2294  *      Get data describing a cylinder.
2295  *
2296  *      This operation may allocate memory, which should be freed using
2297  *		<code>Q3Cylinder_EmptyData</code>.
2298  *
2299  *  @param cylinder         A cylinder object.
2300  *  @param cylinderData     Receives data describing the cylinder.
2301  *  @result                 Success or failure of the operation.
2302  */
2303 Q3_EXTERN_API_C ( TQ3Status  )
2304 Q3Cylinder_GetData (
2305     TQ3GeometryObject             cylinder,
2306     TQ3CylinderData               *cylinderData
2307 );
2308 
2309 
2310 
2311 /*!
2312  *  @function
2313  *      Q3Cylinder_SetOrigin
2314  *  @discussion
2315  *      Change the origin of a cylinder object.
2316  *
2317  *  @param cylinder         A cylinder object.
2318  *  @param origin           New point of origin.
2319  *  @result                 Success or failure of the operation.
2320  */
2321 Q3_EXTERN_API_C ( TQ3Status  )
2322 Q3Cylinder_SetOrigin (
2323     TQ3GeometryObject             cylinder,
2324     const TQ3Point3D              *origin
2325 );
2326 
2327 
2328 
2329 /*!
2330  *  @function
2331  *      Q3Cylinder_SetOrientation
2332  *  @discussion
2333  *      Change the orientation vector of a cylinder object.
2334  *
2335  *  @param cylinder         A cylinder object.
2336  *  @param orientation      New orientation vector for the cylinder.
2337  *  @result                 Success or failure of the operation.
2338  */
2339 Q3_EXTERN_API_C ( TQ3Status  )
2340 Q3Cylinder_SetOrientation (
2341     TQ3GeometryObject             cylinder,
2342     const TQ3Vector3D             *orientation
2343 );
2344 
2345 
2346 
2347 /*!
2348  *  @function
2349  *      Q3Cylinder_SetMajorRadius
2350  *  @discussion
2351  *      Change the major radius vector of a cylinder object.
2352  *
2353  *  @param cylinder         A cylinder object.
2354  *  @param majorRadius      New major radius vector for the cylinder.
2355  *  @result                 Success or failure of the operation.
2356  */
2357 Q3_EXTERN_API_C ( TQ3Status  )
2358 Q3Cylinder_SetMajorRadius (
2359     TQ3GeometryObject             cylinder,
2360     const TQ3Vector3D             *majorRadius
2361 );
2362 
2363 
2364 
2365 /*!
2366  *  @function
2367  *      Q3Cylinder_SetMinorRadius
2368  *  @discussion
2369  *      Change the minor radius vector of a cylinder object.
2370  *
2371  *  @param cylinder         A cylinder object.
2372  *  @param minorRadius      New minor radius vector for the cylinder.
2373  *  @result                 Success or failure of the operation.
2374  */
2375 Q3_EXTERN_API_C ( TQ3Status  )
2376 Q3Cylinder_SetMinorRadius (
2377     TQ3GeometryObject             cylinder,
2378     const TQ3Vector3D             *minorRadius
2379 );
2380 
2381 
2382 
2383 /*!
2384  *  @function
2385  *      Q3Cylinder_GetOrigin
2386  *  @discussion
2387  *      Get the origin of a cylinder.
2388  *
2389  *  @param cylinder         A cylinder object.
2390  *  @param origin           Receives the origin of the cylinder.
2391  *  @result                 Success or failure of the operation.
2392  */
2393 Q3_EXTERN_API_C ( TQ3Status  )
2394 Q3Cylinder_GetOrigin (
2395     TQ3GeometryObject             cylinder,
2396     TQ3Point3D                    *origin
2397 );
2398 
2399 
2400 
2401 /*!
2402  *  @function
2403  *      Q3Cylinder_GetOrientation
2404  *  @discussion
2405  *      Get the orientation vector of a cylinder.
2406  *
2407  *  @param cylinder         A cylinder object.
2408  *  @param orientation      Receives the orientation vector of the cylinder.
2409  *  @result                 Success or failure of the operation.
2410  */
2411 Q3_EXTERN_API_C ( TQ3Status  )
2412 Q3Cylinder_GetOrientation (
2413     TQ3GeometryObject             cylinder,
2414     TQ3Vector3D                   *orientation
2415 );
2416 
2417 
2418 
2419 /*!
2420  *  @function
2421  *      Q3Cylinder_GetMajorRadius
2422  *  @discussion
2423  *      Get the major radius vector of a cylinder.
2424  *
2425  *  @param cylinder         A cylinder object.
2426  *  @param majorRadius      Receives the major radius vector of the cylinder.
2427  *  @result                 Success or failure of the operation.
2428  */
2429 Q3_EXTERN_API_C ( TQ3Status  )
2430 Q3Cylinder_GetMajorRadius (
2431     TQ3GeometryObject             cylinder,
2432     TQ3Vector3D                   *majorRadius
2433 );
2434 
2435 
2436 
2437 /*!
2438  *  @function
2439  *      Q3Cylinder_GetMinorRadius
2440  *  @discussion
2441  *      Get the minor radius vector of a cylinder.
2442  *
2443  *  @param cylinder         A cylinder object.
2444  *  @param minorRadius      Receives the minor radius vector of the cylinder.
2445  *  @result                 Success or failure of the operation.
2446  */
2447 Q3_EXTERN_API_C ( TQ3Status  )
2448 Q3Cylinder_GetMinorRadius (
2449     TQ3GeometryObject             cylinder,
2450     TQ3Vector3D                   *minorRadius
2451 );
2452 
2453 
2454 
2455 /*!
2456  *  @function
2457  *      Q3Cylinder_SetCaps
2458  *  @discussion
2459  *      Set the cap flags of a cylinder object.  This determines whether the
2460  *		cylinder is closed off at one end or the other.  The end containing the
2461  *		origin is considered the bottom.
2462  *
2463  *  @param cylinder         A cylinder object.
2464  *  @param caps             The end cap flags.  See <code>TQ3EndCapMasks</code>,
2465  *							defined in Quesa.h, for values.
2466  *  @result                 Success or failure of the operation.
2467  */
2468 Q3_EXTERN_API_C ( TQ3Status  )
2469 Q3Cylinder_SetCaps (
2470     TQ3GeometryObject             cylinder,
2471     TQ3EndCap                     caps
2472 );
2473 
2474 
2475 
2476 /*!
2477  *  @function
2478  *      Q3Cylinder_GetCaps
2479  *  @discussion
2480  *      Get the cap flags of a cylinder object.
2481  *
2482  *  @param cylinder         A cylinder object.
2483  *  @param caps             Receives the end cap flags.  See <code>TQ3EndCapMasks</code>,
2484  *							defined in Quesa.h, for values.
2485  *  @result                 Success or failure of the operation.
2486  */
2487 Q3_EXTERN_API_C ( TQ3Status  )
2488 Q3Cylinder_GetCaps (
2489     TQ3GeometryObject             cylinder,
2490     TQ3EndCap                     *caps
2491 );
2492 
2493 
2494 
2495 /*!
2496  *  @function
2497  *      Q3Cylinder_SetTopAttributeSet
2498  *  @discussion
2499  *      Set the attribute set for the top cap of a cylinder object.
2500  *
2501  *  @param cylinder         A cylinder object.
2502  *  @param topAttributeSet  New attribute set for the top cap.
2503  *  @result                 Success or failure of the operation.
2504  */
2505 Q3_EXTERN_API_C ( TQ3Status  )
2506 Q3Cylinder_SetTopAttributeSet (
2507     TQ3GeometryObject             cylinder,
2508     TQ3AttributeSet               topAttributeSet
2509 );
2510 
2511 
2512 
2513 /*!
2514  *  @function
2515  *      Q3Cylinder_GetTopAttributeSet
2516  *  @discussion
2517  *      Get the attribute set for the top cap of a cylinder object.
2518  *
2519  *  @param cylinder         A cylinder object.
2520  *  @param topAttributeSet  Receives the attribute set for the top cap, or NULL.
2521  *  @result                 Success or failure of the operation.
2522  */
2523 Q3_EXTERN_API_C ( TQ3Status  )
2524 Q3Cylinder_GetTopAttributeSet (
2525     TQ3GeometryObject             cylinder,
2526     TQ3AttributeSet               *topAttributeSet
2527 );
2528 
2529 
2530 
2531 /*!
2532  *  @function
2533  *      Q3Cylinder_SetBottomAttributeSet
2534  *  @discussion
2535  *      Set the attribute set for the bottom cap of a cylinder object.
2536  *
2537  *  @param cylinder         	A cylinder object.
2538  *  @param bottomAttributeSet	New attribute set for the bottom cap.
2539  *  @result                		Success or failure of the operation.
2540  */
2541 Q3_EXTERN_API_C ( TQ3Status  )
2542 Q3Cylinder_SetBottomAttributeSet (
2543     TQ3GeometryObject             cylinder,
2544     TQ3AttributeSet               bottomAttributeSet
2545 );
2546 
2547 
2548 
2549 /*!
2550  *  @function
2551  *      Q3Cylinder_GetBottomAttributeSet
2552  *  @discussion
2553  *      Get the attribute set for the bottom cap of a cylinder object.
2554  *
2555  *  @param cylinder         	A cylinder object.
2556  *  @param bottomAttributeSet	Receives the attribute set for the bottom cap, or NULL.
2557  *  @result						Success or failure of the operation.
2558  */
2559 Q3_EXTERN_API_C ( TQ3Status  )
2560 Q3Cylinder_GetBottomAttributeSet (
2561     TQ3GeometryObject             cylinder,
2562     TQ3AttributeSet               *bottomAttributeSet
2563 );
2564 
2565 
2566 
2567 /*!
2568  *  @function
2569  *      Q3Cylinder_SetFaceAttributeSet
2570  *  @discussion
2571  *      Set the attribute set for the face of a cylinder object (i.e., neither end).
2572  *
2573  *  @param cylinder         A cylinder object.
2574  *  @param faceAttributeSet New attribute set for the face of the cylinder.
2575  *  @result                 Success or failure of the operation.
2576  */
2577 Q3_EXTERN_API_C ( TQ3Status  )
2578 Q3Cylinder_SetFaceAttributeSet (
2579     TQ3GeometryObject             cylinder,
2580     TQ3AttributeSet               faceAttributeSet
2581 );
2582 
2583 
2584 
2585 /*!
2586  *  @function
2587  *      Q3Cylinder_GetFaceAttributeSet
2588  *  @discussion
2589  *      Get the attribute set for the face of a cylinder object (i.e., neither end).
2590  *
2591  *  @param cylinder         A cylinder object.
2592  *  @param faceAttributeSet Receives the attribute set for the face, or NULL.
2593  *  @result                 Success or failure of the operation.
2594  */
2595 Q3_EXTERN_API_C ( TQ3Status  )
2596 Q3Cylinder_GetFaceAttributeSet (
2597     TQ3GeometryObject             cylinder,
2598     TQ3AttributeSet               *faceAttributeSet
2599 );
2600 
2601 
2602 
2603 /*!
2604  *  @function
2605  *      Q3Cylinder_SetInteriorAttributeSet
2606  *  @discussion
2607  *      Set the attribute set for the interior of a cylinder object (which only shows
2608  *		when the u parameter does not have the full range 0 to 1).
2609  *
2610  *      <em>This function is not available in QD3D.</em>
2611  *
2612  *  @param cylinder         A cylinder object.
2613  *  @param faceAttributeSet New attribute set for the interior of the cylinder.
2614  *  @result                 Success or failure of the operation.
2615  */
2616 #if QUESA_ALLOW_QD3D_EXTENSIONS
2617 
2618 Q3_EXTERN_API_C ( TQ3Status  )
2619 Q3Cylinder_SetInteriorAttributeSet (
2620     TQ3GeometryObject             cylinder,
2621     TQ3AttributeSet               interiorAttributeSet
2622 );
2623 
2624 #endif	// QUESA_ALLOW_QD3D_EXTENSIONS
2625 
2626 
2627 
2628 /*!
2629  *  @function
2630  *      Q3Cylinder_GetInteriorAttributeSet
2631  *  @discussion
2632  *      Get the attribute set for the interior of a cylinder object.
2633  *
2634  *      <em>This function is not available in QD3D.</em>
2635  *
2636  *  @param cylinder         A cylinder object.
2637  *  @param faceAttributeSet Receives the attribute set for the interior, or NULL.
2638  *  @result                 Success or failure of the operation.
2639  */
2640 #if QUESA_ALLOW_QD3D_EXTENSIONS
2641 
2642 Q3_EXTERN_API_C ( TQ3Status  )
2643 Q3Cylinder_GetInteriorAttributeSet (
2644     TQ3GeometryObject             cylinder,
2645     TQ3AttributeSet               *interiorAttributeSet
2646 );
2647 
2648 #endif	// QUESA_ALLOW_QD3D_EXTENSIONS
2649 
2650 
2651 
2652 /*!
2653  *  @function
2654  *      Q3Cylinder_EmptyData
2655  *  @discussion
2656  *      Free memory allocated by <code>Q3Cylinder_GetData</code>.
2657  *
2658  *  @param cylinderData     Cylinder data previously obtained using <code>Q3Cylinder_GetData</code>.
2659  *  @result                 Success or failure of the operation.
2660  */
2661 Q3_EXTERN_API_C ( TQ3Status  )
2662 Q3Cylinder_EmptyData (
2663     TQ3CylinderData               *cylinderData
2664 );
2665 
2666 
2667 
2668 /*!
2669 	@functiongroup	Disk Functions
2670 */
2671 
2672 
2673 
2674 /*!
2675  *  @function
2676  *      Q3Disk_New
2677  *  @discussion
2678  *      Create a new disk object.
2679  *
2680  *		If you pass NULL instead of a data pointer, you will get a default disk, with origin
2681  *		(0, 0, 0), major radius (1, 0, 0), and minor radius (0, 1, 0).  <em>This behavior was
2682  *		not present in QuickDraw 3D.</em>
2683  *
2684  *  @param diskData         Data describing a disk object, or NULL.
2685  *  @result                 Reference to a new Disk geometry object, or NULL on failure.
2686  */
2687 Q3_EXTERN_API_C ( TQ3GeometryObject  )
2688 Q3Disk_New (
2689     const TQ3DiskData             *diskData
2690 );
2691 
2692 
2693 
2694 /*!
2695  *  @function
2696  *      Q3Disk_Submit
2697  *  @discussion
2698  *		Submits a disk for drawing, picking, bounding, or writing in immediate mode.
2699  *
2700  *		This function should only be called in a submitting loop.
2701  *
2702  *  @param diskData         Data describing a disk object.
2703  *  @param view             A view object.
2704  *  @result                 Success or failure of the operation.
2705  */
2706 Q3_EXTERN_API_C ( TQ3Status  )
2707 Q3Disk_Submit (
2708     const TQ3DiskData             *diskData,
2709     TQ3ViewObject                 view
2710 );
2711 
2712 
2713 
2714 /*!
2715  *  @function
2716  *      Q3Disk_SetData
2717  *  @discussion
2718  *      Modify a disk object by supplying a whole new set of data.
2719  *
2720  *  @param disk             A disk geometry object.
2721  *  @param diskData         Data describing a disk object.
2722  *  @result                 Success or failure of the operation.
2723  */
2724 Q3_EXTERN_API_C ( TQ3Status  )
2725 Q3Disk_SetData (
2726     TQ3GeometryObject             disk,
2727     const TQ3DiskData             *diskData
2728 );
2729 
2730 
2731 
2732 /*!
2733  *  @function
2734  *      Q3Disk_GetData
2735  *  @discussion
2736  *      Get the data of a Disk object.
2737  *
2738  *		This may allocate memory, which should be freed using <code>Q3Disk_EmptyData</code>.
2739  *
2740  *  @param disk             A disk geometry object.
2741  *  @param diskData         Data describing a disk object.
2742  *  @result                 Success or failure of the operation.
2743  */
2744 Q3_EXTERN_API_C ( TQ3Status  )
2745 Q3Disk_GetData (
2746     TQ3GeometryObject             disk,
2747     TQ3DiskData                   *diskData
2748 );
2749 
2750 
2751 
2752 /*!
2753  *  @function
2754  *      Q3Disk_SetOrigin
2755  *  @discussion
2756  *      Change the origin of a Disk object.
2757  *
2758  *  @param disk             A disk geometry object.
2759  *  @param origin           New origin for the disk.
2760  *  @result                 Success or failure of the operation.
2761  */
2762 Q3_EXTERN_API_C ( TQ3Status  )
2763 Q3Disk_SetOrigin (
2764     TQ3GeometryObject             disk,
2765     const TQ3Point3D              *origin
2766 );
2767 
2768 
2769 
2770 /*!
2771  *  @function
2772  *      Q3Disk_SetMajorRadius
2773  *  @discussion
2774  *      Change the major radius vector of a disk object.
2775  *
2776  *  @param disk             A disk geometry object.
2777  *  @param majorRadius      New major radius vector for the disk object.
2778  *  @result                 Success or failure of the operation.
2779  */
2780 Q3_EXTERN_API_C ( TQ3Status  )
2781 Q3Disk_SetMajorRadius (
2782     TQ3GeometryObject             disk,
2783     const TQ3Vector3D             *majorRadius
2784 );
2785 
2786 
2787 
2788 /*!
2789  *  @function
2790  *      Q3Disk_SetMinorRadius
2791  *  @discussion
2792  *      Change the minor radius vector of a disk object.
2793  *
2794  *  @param disk             A disk geometry object.
2795  *  @param minorRadius      New minor radius vector for the disk object.
2796  *  @result                 Success or failure of the operation.
2797  */
2798 Q3_EXTERN_API_C ( TQ3Status  )
2799 Q3Disk_SetMinorRadius (
2800     TQ3GeometryObject             disk,
2801     const TQ3Vector3D             *minorRadius
2802 );
2803 
2804 
2805 
2806 /*!
2807  *  @function
2808  *      Q3Disk_GetOrigin
2809  *  @discussion
2810  *      Get the origin of a disk object.
2811  *
2812  *  @param disk             A disk geometry object.
2813  *  @param origin           Receives the origin of the disk.
2814  *  @result                 Success or failure of the operation.
2815  */
2816 Q3_EXTERN_API_C ( TQ3Status  )
2817 Q3Disk_GetOrigin (
2818     TQ3GeometryObject             disk,
2819     TQ3Point3D                    *origin
2820 );
2821 
2822 
2823 
2824 /*!
2825  *  @function
2826  *      Q3Disk_GetMajorRadius
2827  *  @discussion
2828  *      Get the major radius vector of a disk object.
2829  *
2830  *  @param disk             A disk geometry object.
2831  *  @param majorRadius      Receives the major radius vector of the disk.
2832  *  @result                 Success or failure of the operation.
2833  */
2834 Q3_EXTERN_API_C ( TQ3Status  )
2835 Q3Disk_GetMajorRadius (
2836     TQ3GeometryObject             disk,
2837     TQ3Vector3D                   *majorRadius
2838 );
2839 
2840 
2841 
2842 /*!
2843  *  @function
2844  *      Q3Disk_GetMinorRadius
2845  *  @discussion
2846  *      Get the minor radius vector of a disk object.
2847  *
2848  *  @param disk             A disk geometry object.
2849  *  @param minorRadius      Receives the minor radius vector of the disk.
2850  *  @result                 Success or failure of the operation.
2851  */
2852 Q3_EXTERN_API_C ( TQ3Status  )
2853 Q3Disk_GetMinorRadius (
2854     TQ3GeometryObject             disk,
2855     TQ3Vector3D                   *minorRadius
2856 );
2857 
2858 
2859 
2860 /*!
2861  *  @function
2862  *      Q3Disk_EmptyData
2863  *  @discussion
2864  *      Free memory allocated by <code>Q3Disk_GetData</code>.
2865  *
2866  *  @param diskData         Data describing a disk object, previously obtained by
2867  *							<code>Q3Disk_GetData</code>.
2868  *  @result                 Success or failure of the operation.
2869  */
2870 Q3_EXTERN_API_C ( TQ3Status  )
2871 Q3Disk_EmptyData (
2872     TQ3DiskData                   *diskData
2873 );
2874 
2875 
2876 
2877 /*!
2878 	@functiongroup	Ellipse Functions
2879 */
2880 
2881 
2882 
2883 /*!
2884  *  @function
2885  *      Q3Ellipse_New
2886  *  @discussion
2887  *      Create a new ellipse geometry object.
2888  *
2889  *		If you pass NULL, you will get a default ellipse with major axis (0, 1, 0),
2890  *		minor axis (0, 0, 1), and origin (0, 0, 0).  <em>This behavior was
2891  *		not present in QuickDraw 3D.</em>
2892  *
2893  *  @param ellipseData      Data describing an ellipse, or NULL.
2894  *  @result                 Reference to a new Ellipse geometry object, or NULL on failure.
2895  */
2896 Q3_EXTERN_API_C ( TQ3GeometryObject  )
2897 Q3Ellipse_New (
2898     const TQ3EllipseData          *ellipseData
2899 );
2900 
2901 
2902 
2903 /*!
2904  *  @function
2905  *      Q3Ellipse_Submit
2906  *  @discussion
2907  *		Submits an ellipse for drawing, picking, bounding, or writing in immediate mode.
2908  *
2909  *		This function should only be called in a submitting loop.
2910  *
2911  *  @param ellipseData      Data describing an ellipse.
2912  *  @param view             A view object.
2913  *  @result                 Success or failure of the operation.
2914  */
2915 Q3_EXTERN_API_C ( TQ3Status  )
2916 Q3Ellipse_Submit (
2917     const TQ3EllipseData          *ellipseData,
2918     TQ3ViewObject                 view
2919 );
2920 
2921 
2922 
2923 /*!
2924  *  @function
2925  *      Q3Ellipse_SetData
2926  *  @discussion
2927  *      Modify an ellipse object by supplying a full new set of data.
2928  *
2929  *  @param ellipse          An ellipse object.
2930  *  @param ellipseData      Data describing an ellipse.
2931  *  @result                 Success or failure of the operation.
2932  */
2933 Q3_EXTERN_API_C ( TQ3Status  )
2934 Q3Ellipse_SetData (
2935     TQ3GeometryObject             ellipse,
2936     const TQ3EllipseData          *ellipseData
2937 );
2938 
2939 
2940 
2941 /*!
2942  *  @function
2943  *      Q3Ellipse_GetData
2944  *  @discussion
2945  *      Get the data of an Ellipse object.
2946  *
2947  *      This function may allocate memory, which should be freed using
2948  *		<code>Q3Ellipse_EmptyData</code>.
2949  *
2950  *  @param ellipse          An ellipse object.
2951  *  @param ellipseData      Receives data describing the ellipse object.
2952  *  @result                 Success or failure of the operation.
2953  */
2954 Q3_EXTERN_API_C ( TQ3Status  )
2955 Q3Ellipse_GetData (
2956     TQ3GeometryObject             ellipse,
2957     TQ3EllipseData                *ellipseData
2958 );
2959 
2960 
2961 
2962 /*!
2963  *  @function
2964  *      Q3Ellipse_SetOrigin
2965  *  @discussion
2966  *      Change the origin of an ellipse object.
2967  *
2968  *  @param ellipse          The ellipse object.
2969  *  @param origin           The new origin.
2970  *  @result                 Success or failure of the operation.
2971  */
2972 Q3_EXTERN_API_C ( TQ3Status  )
2973 Q3Ellipse_SetOrigin (
2974     TQ3GeometryObject             ellipse,
2975     const TQ3Point3D              *origin
2976 );
2977 
2978 
2979 
2980 /*!
2981  *  @function
2982  *      Q3Ellipse_SetMajorRadius
2983  *  @discussion
2984  *      Change the major radius vector of an Ellipse object.
2985  *
2986  *  @param ellipse          The Ellipse object.
2987  *  @param majorRadius      New major radius vector.
2988  *  @result                 Success or failure of the operation.
2989  */
2990 Q3_EXTERN_API_C ( TQ3Status  )
2991 Q3Ellipse_SetMajorRadius (
2992     TQ3GeometryObject             ellipse,
2993     const TQ3Vector3D             *majorRadius
2994 );
2995 
2996 
2997 
2998 /*!
2999  *  @function
3000  *      Q3Ellipse_SetMinorRadius
3001  *  @discussion
3002  *      Change the minor radius vector of an Ellipse object.
3003  *
3004  *  @param ellipse          The Ellipse object.
3005  *  @param minorRadius      New minor radius vector.
3006  *  @result                 Success or failure of the operation.
3007  */
3008 Q3_EXTERN_API_C ( TQ3Status  )
3009 Q3Ellipse_SetMinorRadius (
3010     TQ3GeometryObject             ellipse,
3011     const TQ3Vector3D             *minorRadius
3012 );
3013 
3014 
3015 
3016 /*!
3017  *  @function
3018  *      Q3Ellipse_GetOrigin
3019  *  @discussion
3020  *      Get the origin of an Ellipse object.
3021  *
3022  *  @param ellipse          The Ellipse object.
3023  *  @param origin           Receives the origin.
3024  *  @result                 Success or failure of the operation.
3025  */
3026 Q3_EXTERN_API_C ( TQ3Status  )
3027 Q3Ellipse_GetOrigin (
3028     TQ3GeometryObject             ellipse,
3029     TQ3Point3D                    *origin
3030 );
3031 
3032 
3033 
3034 /*!
3035  *  @function
3036  *      Q3Ellipse_GetMajorRadius
3037  *  @discussion
3038  *      Get the major radius vector of an Ellipse object.
3039  *
3040  *  @param ellipse          The Ellipse object.
3041  *  @param majorRadius      Receives the major radius vector.
3042  *  @result                 Success or failure of the operation.
3043  */
3044 Q3_EXTERN_API_C ( TQ3Status  )
3045 Q3Ellipse_GetMajorRadius (
3046     TQ3GeometryObject             ellipse,
3047     TQ3Vector3D                   *majorRadius
3048 );
3049 
3050 
3051 
3052 /*!
3053  *  @function
3054  *      Q3Ellipse_GetMinorRadius
3055  *  @discussion
3056  *      Get the minor radius vector of an Ellipse object.
3057  *
3058  *  @param ellipse          The Ellipse object.
3059  *  @param minorRadius      Receives the minor radius vector.
3060  *  @result                 Success or failure of the operation.
3061  */
3062 Q3_EXTERN_API_C ( TQ3Status  )
3063 Q3Ellipse_GetMinorRadius (
3064     TQ3GeometryObject             ellipse,
3065     TQ3Vector3D                   *minorRadius
3066 );
3067 
3068 
3069 
3070 /*!
3071  *  @function
3072  *      Q3Ellipse_EmptyData
3073  *  @discussion
3074  *      Release memory allocated by <code>Q3Ellipse_GetData</code>.
3075  *
3076  *  @param ellipseData      Data describing an ellipse, previously obtained with
3077  *							<code>Q3Ellipse_GetData</code>.
3078  *  @result                 Success or failure of the operation.
3079  */
3080 Q3_EXTERN_API_C ( TQ3Status  )
3081 Q3Ellipse_EmptyData (
3082     TQ3EllipseData                *ellipseData
3083 );
3084 
3085 
3086 
3087 /*!
3088 	@functiongroup	Ellipsoid Functions
3089 */
3090 
3091 
3092 
3093 /*!
3094  *  @function
3095  *      Q3Ellipsoid_New
3096  *  @discussion
3097  *      Create a new ellipsoid geometry object.
3098  *
3099  *		If you pass NULL, you will get a default ellipsoid with orientation (1, 0, 0), major axis
3100  *		(0, 1, 0), minor axis (0, 0, 1), and origin (0, 0, 0).  <em>This behavior was
3101  *		not present in QuickDraw 3D.</em>
3102  *
3103  *  @param ellipsoidData    Data describing an ellipsoid, or NULL.
3104  *  @result                 Reference to a new Ellipsoid geometry object, or NULL on failure.
3105  */
3106 Q3_EXTERN_API_C ( TQ3GeometryObject  )
3107 Q3Ellipsoid_New (
3108     const TQ3EllipsoidData        *ellipsoidData
3109 );
3110 
3111 
3112 
3113 /*!
3114  *  @function
3115  *      Q3Ellipsoid_Submit
3116  *  @discussion
3117  *		Submits an ellipsoid for drawing, picking, bounding, or writing in immediate mode.
3118  *
3119  *		This function should only be called in a submitting loop.
3120  *
3121  *  @param ellipsoidData    Data describing an ellipsoid.
3122  *  @param view             A view object.
3123  *  @result                 Success or failure of the operation.
3124  */
3125 Q3_EXTERN_API_C ( TQ3Status  )
3126 Q3Ellipsoid_Submit (
3127     const TQ3EllipsoidData        *ellipsoidData,
3128     TQ3ViewObject                 view
3129 );
3130 
3131 
3132 
3133 /*!
3134  *  @function
3135  *      Q3Ellipsoid_SetData
3136  *  @discussion
3137  *      Modify an ellipsoid object by supplying a full new set of data.
3138  *
3139  *  @param ellipsoid        An ellipsoid object.
3140  *  @param ellipsoidData    Data describing an ellipsoid.
3141  *  @result                 Success or failure of the operation.
3142  */
3143 Q3_EXTERN_API_C ( TQ3Status  )
3144 Q3Ellipsoid_SetData (
3145     TQ3GeometryObject             ellipsoid,
3146     const TQ3EllipsoidData        *ellipsoidData
3147 );
3148 
3149 
3150 
3151 /*!
3152  *  @function
3153  *      Q3Ellipsoid_GetData
3154  *  @discussion
3155  *      Get the data of an Ellipse object.
3156  *
3157  *      This function may allocate memory, which should be freed using
3158  *		<code>Q3Ellipsoid_EmptyData</code>.
3159  *
3160  *  @param ellipsoid        An ellipsoid object.
3161  *  @param ellipsoidData    Receives data describing the ellipsoid object.
3162  *  @result                 Success or failure of the operation.
3163  */
3164 Q3_EXTERN_API_C ( TQ3Status  )
3165 Q3Ellipsoid_GetData (
3166     TQ3GeometryObject             ellipsoid,
3167     TQ3EllipsoidData              *ellipsoidData
3168 );
3169 
3170 
3171 
3172 /*!
3173  *  @function
3174  *      Q3Ellipsoid_SetOrigin
3175  *  @discussion
3176  *      Change the origin of an ellipsoid object.
3177  *
3178  *  @param ellipsoid        The ellipsoid object.
3179  *  @param origin           The new origin.
3180  *  @result                 Success or failure of the operation.
3181  */
3182 Q3_EXTERN_API_C ( TQ3Status  )
3183 Q3Ellipsoid_SetOrigin (
3184     TQ3GeometryObject             ellipsoid,
3185     const TQ3Point3D              *origin
3186 );
3187 
3188 
3189 
3190 /*!
3191  *  @function
3192  *      Q3Ellipsoid_SetOrientation
3193  *  @discussion
3194  *      Change the orientation vector of an Ellipsoid object.
3195  *
3196  *  @param ellipsoid        An Ellipsoid object.
3197  *  @param orientation      New orientation vector for the Ellipsoid.
3198  *  @result                 Success or failure of the operation.
3199  */
3200 Q3_EXTERN_API_C ( TQ3Status  )
3201 Q3Ellipsoid_SetOrientation (
3202     TQ3GeometryObject             ellipsoid,
3203     const TQ3Vector3D             *orientation
3204 );
3205 
3206 
3207 
3208 /*!
3209  *  @function
3210  *      Q3Ellipsoid_SetMajorRadius
3211  *  @discussion
3212  *      Change the major radius vector of an Ellipsoid object.
3213  *
3214  *  @param ellipsoid        The Ellipsoid object.
3215  *  @param majorRadius      New major radius vector.
3216  *  @result                 Success or failure of the operation.
3217  */
3218 Q3_EXTERN_API_C ( TQ3Status  )
3219 Q3Ellipsoid_SetMajorRadius (
3220     TQ3GeometryObject             ellipsoid,
3221     const TQ3Vector3D             *majorRadius
3222 );
3223 
3224 
3225 
3226 /*!
3227  *  @function
3228  *      Q3Ellipsoid_SetMinorRadius
3229  *  @discussion
3230  *      Change the minor radius vector of an Ellipsoid object.
3231  *
3232  *  @param ellipsoid        The Ellipsoid object.
3233  *  @param minorRadius      New minor radius vector.
3234  *  @result                 Success or failure of the operation.
3235  */
3236 Q3_EXTERN_API_C ( TQ3Status  )
3237 Q3Ellipsoid_SetMinorRadius (
3238     TQ3GeometryObject             ellipsoid,
3239     const TQ3Vector3D             *minorRadius
3240 );
3241 
3242 
3243 
3244 /*!
3245  *  @function
3246  *      Q3Ellipsoid_GetOrigin
3247  *  @discussion
3248  *      Get the origin of an Ellipsoid object.
3249  *
3250  *  @param ellipsoid        The Ellipsoid object.
3251  *  @param origin           Receives the origin.
3252  *  @result                 Success or failure of the operation.
3253  */
3254 Q3_EXTERN_API_C ( TQ3Status  )
3255 Q3Ellipsoid_GetOrigin (
3256     TQ3GeometryObject             ellipsoid,
3257     TQ3Point3D                    *origin
3258 );
3259 
3260 
3261 
3262 /*!
3263  *  @function
3264  *      Q3Ellipsoid_GetOrientation
3265  *  @discussion
3266  *      Get the orientation vector of an Ellipsoid.
3267  *
3268  *  @param ellipsoid        An Ellipsoid object.
3269  *  @param orientation      Receives the orientation vector of the Ellipsoid.
3270  *  @result                 Success or failure of the operation.
3271  */
3272 Q3_EXTERN_API_C ( TQ3Status  )
3273 Q3Ellipsoid_GetOrientation (
3274     TQ3GeometryObject             ellipsoid,
3275     TQ3Vector3D                   *orientation
3276 );
3277 
3278 
3279 
3280 /*!
3281  *  @function
3282  *      Q3Ellipsoid_GetMajorRadius
3283  *  @discussion
3284  *      Get the major radius vector of an Ellipsoid object.
3285  *
3286  *  @param ellipsoid        The Ellipsoid object.
3287  *  @param majorRadius      Receives the major radius vector.
3288  *  @result                 Success or failure of the operation.
3289  */
3290 Q3_EXTERN_API_C ( TQ3Status  )
3291 Q3Ellipsoid_GetMajorRadius (
3292     TQ3GeometryObject             ellipsoid,
3293     TQ3Vector3D                   *majorRadius
3294 );
3295 
3296 
3297 
3298 /*!
3299  *  @function
3300  *      Q3Ellipsoid_GetMinorRadius
3301  *  @discussion
3302  *      Get the minor radius vector of an Ellipsoid object.
3303  *
3304  *  @param ellipsoid        The Ellipsoid object.
3305  *  @param minorRadius      Receives the minor radius vector.
3306  *  @result                 Success or failure of the operation.
3307  */
3308 Q3_EXTERN_API_C ( TQ3Status  )
3309 Q3Ellipsoid_GetMinorRadius (
3310     TQ3GeometryObject             ellipsoid,
3311     TQ3Vector3D                   *minorRadius
3312 );
3313 
3314 
3315 
3316 /*!
3317  *  @function
3318  *      Q3Ellipsoid_EmptyData
3319  *  @discussion
3320  *      Release memory allocated by <code>Q3Ellipsoid_GetData</code>.
3321  *
3322  *  @param ellipsoidData    Data describing an Ellipsoid, previously obtained with
3323  *							<code>Q3Ellipsoid_GetData</code>.
3324  *  @result                 Success or failure of the operation.
3325  */
3326 Q3_EXTERN_API_C ( TQ3Status  )
3327 Q3Ellipsoid_EmptyData (
3328     TQ3EllipsoidData              *ellipsoidData
3329 );
3330 
3331 
3332 
3333 /*!
3334 	@functiongroup	General Polygon Functions
3335 */
3336 
3337 
3338 
3339 /*!
3340  *  @function
3341  *      Q3GeneralPolygon_New
3342  *  @discussion
3343  *      Create a new general polygon geometry object.
3344  *
3345  *  @param generalPolygonData	Data describing a general polygon.
3346  *  @result						Reference to a new General Polygon geometry object, or NULL on failure.
3347  */
3348 Q3_EXTERN_API_C ( TQ3GeometryObject  )
3349 Q3GeneralPolygon_New (
3350     const TQ3GeneralPolygonData   *generalPolygonData
3351 );
3352 
3353 
3354 
3355 /*!
3356  *  @function
3357  *      Q3GeneralPolygon_Submit
3358  *  @discussion
3359  *		Submits a general polygon for drawing, picking, bounding, or writing in immediate mode.
3360  *
3361  *		This function should only be called in a submitting loop.
3362  *
3363  *  @param generalPolygonData	Data describing a general polygon.
3364  *  @param view					A view object.
3365  *  @result						Success or failure of the operation.
3366  */
3367 Q3_EXTERN_API_C ( TQ3Status  )
3368 Q3GeneralPolygon_Submit (
3369     const TQ3GeneralPolygonData   *generalPolygonData,
3370     TQ3ViewObject                 view
3371 );
3372 
3373 
3374 
3375 /*!
3376  *  @function
3377  *      Q3GeneralPolygon_SetData
3378  *  @discussion
3379  *      Modify a general polygon object by supplying a full new set of data.
3380  *
3381  *  @param generalPolygon   	A general polygon object.
3382  *  @param generalPolygonData	Data describing a general polygon object.
3383  *  @result						Success or failure of the operation.
3384  */
3385 Q3_EXTERN_API_C ( TQ3Status  )
3386 Q3GeneralPolygon_SetData (
3387     TQ3GeometryObject             generalPolygon,
3388     const TQ3GeneralPolygonData   *generalPolygonData
3389 );
3390 
3391 
3392 
3393 /*!
3394  *  @function
3395  *      Q3GeneralPolygon_GetData
3396  *  @discussion
3397  *      Get the data of a General Polygon object.
3398  *
3399  *      This function may allocate memory, which should be freed using
3400  *		<code>Q3GeneralPolygon_EmptyData</code>.
3401  *
3402  *  @param polygon          	A general polygon object.
3403  *  @param generalPolygonData	Receives data describing the general polygon object.
3404  *  @result						Success or failure of the operation.
3405  */
3406 Q3_EXTERN_API_C ( TQ3Status  )
3407 Q3GeneralPolygon_GetData (
3408     TQ3GeometryObject             polygon,
3409     TQ3GeneralPolygonData         *generalPolygonData
3410 );
3411 
3412 
3413 
3414 /*!
3415  *  @function
3416  *      Q3GeneralPolygon_EmptyData
3417  *  @discussion
3418  *      Release memory allocated by <code>Q3GeneralPolygon_GetData</code>.
3419  *
3420  *  @param generalPolygonData	Data describing a General Polygon, previously obtained with
3421  *								<code>Q3GeneralPolygon_GetData</code>.
3422  *  @result						Success or failure of the operation.
3423  */
3424 Q3_EXTERN_API_C ( TQ3Status  )
3425 Q3GeneralPolygon_EmptyData (
3426     TQ3GeneralPolygonData         *generalPolygonData
3427 );
3428 
3429 
3430 
3431 /*!
3432  *  @function
3433  *      Q3GeneralPolygon_GetVertexPosition
3434  *  @discussion
3435  *      Get the 3D position of a vertex in a general polygon.
3436  *
3437  *  @param generalPolygon   A general polygon object.
3438  *  @param contourIndex		A 0-based index into the array of contours.
3439  *  @param pointIndex       A 0-based index into the array of vertices of a contour.
3440  *  @param position         Receives the position of the vertex.
3441  *  @result                 Success or failure of the operation.
3442  */
3443 Q3_EXTERN_API_C ( TQ3Status  )
3444 Q3GeneralPolygon_GetVertexPosition (
3445     TQ3GeometryObject             generalPolygon,
3446     TQ3Uns32                      contourIndex,
3447     TQ3Uns32                      pointIndex,
3448     TQ3Point3D                    *position
3449 );
3450 
3451 
3452 
3453 /*!
3454  *  @function
3455  *      Q3GeneralPolygon_SetVertexPosition
3456  *  @discussion
3457  *      Set the 3D position of a vertex in a general polygon.
3458  *
3459  *  @param generalPolygon   A general polygon object.
3460  *  @param contourIndex		A 0-based index into the array of contours.
3461  *  @param pointIndex       A 0-based index into the array of vertices of a contour.
3462  *  @param position         New position for the vertex.
3463  *  @result                 Success or failure of the operation.
3464  */
3465 Q3_EXTERN_API_C ( TQ3Status  )
3466 Q3GeneralPolygon_SetVertexPosition (
3467     TQ3GeometryObject             generalPolygon,
3468     TQ3Uns32                      contourIndex,
3469     TQ3Uns32                      pointIndex,
3470     const TQ3Point3D              *position
3471 );
3472 
3473 
3474 
3475 /*!
3476  *  @function
3477  *      Q3GeneralPolygon_GetVertexAttributeSet
3478  *  @discussion
3479  *      Get the attribute set of a vertex of a general polygon.
3480  *
3481  *  @param generalPolygon   A general polygon object.
3482  *  @param contourIndex		A 0-based index into the array of contours.
3483  *  @param pointIndex       A 0-based index into the array of vertices of a contour.
3484  *  @param attributeSet     Receives a new reference to the vertex attribute set, or NULL.
3485  *  @result                 Success or failure of the operation.
3486  */
3487 Q3_EXTERN_API_C ( TQ3Status  )
3488 Q3GeneralPolygon_GetVertexAttributeSet (
3489     TQ3GeometryObject             generalPolygon,
3490     TQ3Uns32                      contourIndex,
3491     TQ3Uns32                      pointIndex,
3492     TQ3AttributeSet               *attributeSet
3493 );
3494 
3495 
3496 
3497 /*!
3498  *  @function
3499  *      Q3GeneralPolygon_SetVertexAttributeSet
3500  *  @discussion
3501  *      Assign an attribute set to a vertex of a general polygon.
3502  *
3503  *      The function increments the reference count of the attribute set.
3504  *
3505  *  @param generalPolygon   A general polygon object.
3506  *  @param contourIndex		A 0-based index into the array of contours.
3507  *  @param pointIndex       A 0-based index into the array of vertices of a contour.
3508  *  @param attributeSet     Attribute set for the vertex.
3509  *  @result                 Success or failure of the operation.
3510  */
3511 Q3_EXTERN_API_C ( TQ3Status  )
3512 Q3GeneralPolygon_SetVertexAttributeSet (
3513     TQ3GeometryObject             generalPolygon,
3514     TQ3Uns32                      contourIndex,
3515     TQ3Uns32                      pointIndex,
3516     TQ3AttributeSet               attributeSet
3517 );
3518 
3519 
3520 
3521 /*!
3522  *  @function
3523  *      Q3GeneralPolygon_SetShapeHint
3524  *  @discussion
3525  *      Set the shape hint of a general polygon.
3526  *
3527  *      The hint may allow a renderer to optimize drawing the polygon.
3528  *
3529  *  @param generalPolygon   A general polygon object.
3530  *  @param shapeHint        The shape hint.
3531  *  @result                 Success or failure of the operation.
3532  */
3533 Q3_EXTERN_API_C ( TQ3Status  )
3534 Q3GeneralPolygon_SetShapeHint (
3535     TQ3GeometryObject             generalPolygon,
3536     TQ3GeneralPolygonShapeHint    shapeHint
3537 );
3538 
3539 
3540 
3541 /*!
3542  *  @function
3543  *      Q3GeneralPolygon_GetShapeHint
3544  *  @discussion
3545  *      Get the shape hint of a general polygon.
3546  *
3547  *  @param generalPolygon   A general polygon object.
3548  *  @param shapeHint        Receives the shape hint.
3549  *  @result                 Success or failure of the operation.
3550  */
3551 Q3_EXTERN_API_C ( TQ3Status  )
3552 Q3GeneralPolygon_GetShapeHint (
3553     TQ3GeometryObject             generalPolygon,
3554     TQ3GeneralPolygonShapeHint    *shapeHint
3555 );
3556 
3557 
3558 
3559 /*!
3560 	@functiongroup	Line Functions
3561 */
3562 
3563 
3564 
3565 /*!
3566  *  @function
3567  *      Q3Line_New
3568  *  @discussion
3569  *      Create a new line geometry object.
3570  *
3571  *  @param lineData         Data describing a line.
3572  *  @result                 Reference to a new Line geometry object, or NULL on failure.
3573  */
3574 Q3_EXTERN_API_C ( TQ3GeometryObject  )
3575 Q3Line_New (
3576     const TQ3LineData             *lineData
3577 );
3578 
3579 
3580 
3581 /*!
3582  *  @function
3583  *      Q3Line_Submit
3584  *  @discussion
3585  *		Submits a line for drawing, picking, bounding, or writing in immediate mode.
3586  *
3587  *		This function should only be called in a submitting loop.
3588  *
3589  *  @param lineData         Data describing a line.
3590  *  @param view             A view object.
3591  *  @result                 Success or failure of the operation.
3592  */
3593 Q3_EXTERN_API_C ( TQ3Status  )
3594 Q3Line_Submit (
3595     const TQ3LineData             *lineData,
3596     TQ3ViewObject                 view
3597 );
3598 
3599 
3600 
3601 /*!
3602  *  @function
3603  *      Q3Line_GetData
3604  *  @discussion
3605  *      Get the data of a Line object.
3606  *
3607  *      This function may allocate memory, which should be freed using
3608  *		<code>Q3Line_EmptyData</code>.
3609  *
3610  *  @param line             A Line object.
3611  *  @param lineData         Receives data describing the Line object.
3612  *  @result                 Success or failure of the operation.
3613  */
3614 Q3_EXTERN_API_C ( TQ3Status  )
3615 Q3Line_GetData (
3616     TQ3GeometryObject             line,
3617     TQ3LineData                   *lineData
3618 );
3619 
3620 
3621 
3622 /*!
3623  *  @function
3624  *      Q3Line_SetData
3625  *  @discussion
3626  *      Modify a line object by supplying a full new set of data.
3627  *
3628  *  @param line             A line object.
3629  *  @param lineData         Data describing a line.
3630  *  @result                 Success or failure of the operation.
3631  */
3632 Q3_EXTERN_API_C ( TQ3Status  )
3633 Q3Line_SetData (
3634     TQ3GeometryObject             line,
3635     const TQ3LineData             *lineData
3636 );
3637 
3638 
3639 
3640 /*!
3641  *  @function
3642  *      Q3Line_GetVertexPosition
3643  *  @discussion
3644  *      Get the position of one of the ends of a line.
3645  *
3646  *  @param line             A line object.
3647  *  @param index            An index, 0 or 1, specifying an end of the line.
3648  *  @param position         Receives the position of the vertex.
3649  *  @result                 Success or failure of the operation.
3650  */
3651 Q3_EXTERN_API_C ( TQ3Status  )
3652 Q3Line_GetVertexPosition (
3653     TQ3GeometryObject             line,
3654     TQ3Uns32                      index,
3655     TQ3Point3D                    *position
3656 );
3657 
3658 
3659 
3660 /*!
3661  *  @function
3662  *      Q3Line_SetVertexPosition
3663  *  @discussion
3664  *      Change the position of one of the ends of a line object.
3665  *
3666  *  @param line             A line object.
3667  *  @param index            An index, 0 or 1, specifying an end of the line.
3668  *  @param position         New position of the vertex.
3669  *  @result                 Success or failure of the operation.
3670  */
3671 Q3_EXTERN_API_C ( TQ3Status  )
3672 Q3Line_SetVertexPosition (
3673     TQ3GeometryObject             line,
3674     TQ3Uns32                      index,
3675     const TQ3Point3D              *position
3676 );
3677 
3678 
3679 
3680 /*!
3681  *  @function
3682  *      Q3Line_GetVertexAttributeSet
3683  *  @discussion
3684  *      Get the attribute set of one of the ends of a line object.
3685  *
3686  *  @param line             A line object.
3687  *  @param index            An index, 0 or 1, specifying an end of the line.
3688  *  @param attributeSet     Receives a new reference to the attribute set, or NULL.
3689  *  @result                 Success or failure of the operation.
3690  */
3691 Q3_EXTERN_API_C ( TQ3Status  )
3692 Q3Line_GetVertexAttributeSet (
3693     TQ3GeometryObject             line,
3694     TQ3Uns32                      index,
3695     TQ3AttributeSet               *attributeSet
3696 );
3697 
3698 
3699 
3700 /*!
3701  *  @function
3702  *      Q3Line_SetVertexAttributeSet
3703  *  @discussion
3704  *      Assign an attribute set to one of the ends of a line.
3705  *
3706  *      Any previous attribute set on the vertex is disposed.
3707  *		The new attribute set has its reference count incremented.
3708  *
3709  *  @param line             A line object.
3710  *  @param index            An index, 0 or 1, specifying an end of the line.
3711  *  @param attributeSet     The new attribute set.
3712  *  @result                 Success or failure of the operation.
3713  */
3714 Q3_EXTERN_API_C ( TQ3Status  )
3715 Q3Line_SetVertexAttributeSet (
3716     TQ3GeometryObject             line,
3717     TQ3Uns32                      index,
3718     TQ3AttributeSet               attributeSet
3719 );
3720 
3721 
3722 
3723 /*!
3724  *  @function
3725  *      Q3Line_EmptyData
3726  *  @discussion
3727  *      Release memory allocated by <code>Q3Line_GetData</code>.
3728  *
3729  *  @param lineData         Data describing a Line, previously obtained with
3730  *							<code>Q3Line_GetData</code>.
3731  *  @result                 Success or failure of the operation.
3732  */
3733 Q3_EXTERN_API_C ( TQ3Status  )
3734 Q3Line_EmptyData (
3735     TQ3LineData                   *lineData
3736 );
3737 
3738 
3739 
3740 /*!
3741 	@functiongroup	Marker Functions
3742 */
3743 
3744 
3745 
3746 /*!
3747  *  @function
3748  *      Q3Marker_New
3749  *  @discussion
3750  *      Create a new marker geometry object.
3751  *
3752  *  @param markerData       Data describing a marker.
3753  *  @result                 Reference to a new Marker geometry object, or NULL on failure.
3754  */
3755 Q3_EXTERN_API_C ( TQ3GeometryObject  )
3756 Q3Marker_New (
3757     const TQ3MarkerData           *markerData
3758 );
3759 
3760 
3761 
3762 /*!
3763  *  @function
3764  *      Q3Marker_Submit
3765  *  @discussion
3766  *		Submits a marker for drawing, picking, bounding, or writing in immediate mode.
3767  *
3768  *		This function should only be called in a submitting loop.
3769  *
3770  *  @param markerData       Data describing a marker.
3771  *  @param view             A view object.
3772  *  @result                 Success or failure of the operation.
3773  */
3774 Q3_EXTERN_API_C ( TQ3Status  )
3775 Q3Marker_Submit (
3776     const TQ3MarkerData           *markerData,
3777     TQ3ViewObject                 view
3778 );
3779 
3780 
3781 
3782 /*!
3783  *  @function
3784  *      Q3Marker_SetData
3785  *  @discussion
3786  *      Modify a marker object by supplying a full new set of data.
3787  *
3788  *  @param geometry         A marker object.
3789  *  @param markerData       Data describing a marker.
3790  *  @result                 Success or failure of the operation.
3791  */
3792 Q3_EXTERN_API_C ( TQ3Status  )
3793 Q3Marker_SetData (
3794     TQ3GeometryObject             geometry,
3795     const TQ3MarkerData           *markerData
3796 );
3797 
3798 
3799 
3800 /*!
3801  *  @function
3802  *      Q3Marker_GetData
3803  *  @discussion
3804  *      Get the data of a Marker object.
3805  *
3806  *      This function may allocate memory, which should be freed using
3807  *		<code>Q3Marker_EmptyData</code>.
3808  *
3809  *  @param geometry         A Marker object.
3810  *  @param markerData       Receives data describing the Marker object.
3811  *  @result                 Success or failure of the operation.
3812  */
3813 Q3_EXTERN_API_C ( TQ3Status  )
3814 Q3Marker_GetData (
3815     TQ3GeometryObject             geometry,
3816     TQ3MarkerData                 *markerData
3817 );
3818 
3819 
3820 
3821 /*!
3822  *  @function
3823  *      Q3Marker_EmptyData
3824  *  @discussion
3825  *      Release memory allocated by <code>Q3Marker_GetData</code>.
3826  *
3827  *  @param markerData       Data describing a Marker, previously obtained with
3828  *							<code>Q3Marker_GetData</code>.
3829  *  @result                 Success or failure of the operation.
3830  */
3831 Q3_EXTERN_API_C ( TQ3Status  )
3832 Q3Marker_EmptyData (
3833     TQ3MarkerData                 *markerData
3834 );
3835 
3836 
3837 
3838 /*!
3839  *  @function
3840  *      Q3Marker_GetPosition
3841  *  @discussion
3842  *      Get the position of a Marker object.
3843  *
3844  *      The position corresponds to the <code>location</code> field of the
3845  *		<code>TQ3MarkerData</code> structure.
3846  *
3847  *  @param marker			A marker object.
3848  *  @param location         Receives the location of the marker object.
3849  *  @result                 Success or failure of the operation.
3850  */
3851 Q3_EXTERN_API_C ( TQ3Status  )
3852 Q3Marker_GetPosition (
3853     TQ3GeometryObject             marker,
3854     TQ3Point3D                    *location
3855 );
3856 
3857 
3858 
3859 /*!
3860  *  @function
3861  *      Q3Marker_SetPosition
3862  *  @discussion
3863  *      Set the position of a Marker object.
3864  *
3865  *      The position corresponds to the <code>location</code> field of the
3866  *		<code>TQ3MarkerData</code> structure.
3867  *
3868  *  @param marker			A marker object.
3869  *  @param location         New location of the marker object.
3870  *  @result                 Success or failure of the operation.
3871  */
3872 Q3_EXTERN_API_C ( TQ3Status  )
3873 Q3Marker_SetPosition (
3874     TQ3GeometryObject             marker,
3875     const TQ3Point3D              *location
3876 );
3877 
3878 
3879 
3880 /*!
3881  *  @function
3882  *      Q3Marker_GetXOffset
3883  *  @discussion
3884  *      Get the horizontal offset, in screen pixels, from the marker location to the
3885  *		upper left corner of the marker bitmap.
3886  *
3887  *  @param marker			A marker object.
3888  *  @param xOffset          Receives the horizontal offset in pixels.
3889  *  @result                 Success or failure of the operation.
3890  */
3891 Q3_EXTERN_API_C ( TQ3Status  )
3892 Q3Marker_GetXOffset (
3893     TQ3GeometryObject             marker,
3894     TQ3Int32                      *xOffset
3895 );
3896 
3897 
3898 
3899 /*!
3900  *  @function
3901  *      Q3Marker_SetXOffset
3902  *  @discussion
3903  *      Set the horizontal offset, in screen pixels, from the marker location to the
3904  *		upper left corner of the marker bitmap.
3905  *
3906  *  @param marker			A marker object.
3907  *  @param xOffset          New horizontal offset in pixels.
3908  *  @result                 Success or failure of the operation.
3909  */
3910 Q3_EXTERN_API_C ( TQ3Status  )
3911 Q3Marker_SetXOffset (
3912     TQ3GeometryObject             marker,
3913     TQ3Int32                      xOffset
3914 );
3915 
3916 
3917 
3918 /*!
3919  *  @function
3920  *      Q3Marker_GetYOffset
3921  *  @discussion
3922  *      Get the vertical offset, in screen pixels, from the marker location to the
3923  *		upper left corner of the marker bitmap.
3924  *
3925  *  @param marker			A marker object.
3926  *  @param yOffset          Receives the vertical offset in pixels.
3927  *  @result                 Success or failure of the operation.
3928  */
3929 Q3_EXTERN_API_C ( TQ3Status  )
3930 Q3Marker_GetYOffset (
3931     TQ3GeometryObject             marker,
3932     TQ3Int32                      *yOffset
3933 );
3934 
3935 
3936 
3937 /*!
3938  *  @function
3939  *      Q3Marker_SetYOffset
3940  *  @discussion
3941  *      Set the vertical offset, in screen pixels, from the marker location to the
3942  *		upper left corner of the marker bitmap.
3943  *
3944  *  @param marker			A marker object.
3945  *  @param yOffset          New vertical offset in pixels.
3946  *  @result                 Success or failure of the operation.
3947  */
3948 Q3_EXTERN_API_C ( TQ3Status  )
3949 Q3Marker_SetYOffset (
3950     TQ3GeometryObject             marker,
3951     TQ3Int32                      yOffset
3952 );
3953 
3954 
3955 
3956 /*!
3957  *  @function
3958  *      Q3Marker_GetBitmap
3959  *  @discussion
3960  *      Get the bitmap of a Marker object.
3961  *
3962  *      This returns a copy of the bitmap of the marker.  When you are done
3963  *      with it, use <code>Q3Bitmap_Empty</code> to release the memory.
3964  *
3965  *  @param marker			A marker object.
3966  *  @param bitmap           Receives a copy of the bitmap of the marker.
3967  *  @result                 Success or failure of the operation.
3968  */
3969 Q3_EXTERN_API_C ( TQ3Status  )
3970 Q3Marker_GetBitmap (
3971     TQ3GeometryObject             marker,
3972     TQ3Bitmap                     *bitmap
3973 );
3974 
3975 
3976 
3977 /*!
3978  *  @function
3979  *      Q3Marker_SetBitmap
3980  *  @discussion
3981  *      Change the bitmap of a Marker object.
3982  *
3983  *      This makes a copy of the bitmap data, so you can dispose of the
3984  *      original.
3985  *
3986  *  @param marker			A marker object.
3987  *  @param bitmap           New bitmap to be used by the marker.
3988  *  @result                 Success or failure of the operation.
3989  */
3990 Q3_EXTERN_API_C ( TQ3Status  )
3991 Q3Marker_SetBitmap (
3992     TQ3GeometryObject             marker,
3993     const TQ3Bitmap               *bitmap
3994 );
3995 
3996 
3997 
3998 /*!
3999 	@functiongroup	Mesh Functions
4000 */
4001 
4002 
4003 
4004 /*!
4005  *  @function
4006  *      Q3Mesh_New
4007  *  @discussion
4008  *      Create a new empty Mesh geometry object.
4009  *
4010  *  @result                 Reference to a new Mesh geometry object, or NULL on failure.
4011  */
4012 Q3_EXTERN_API_C ( TQ3GeometryObject  )
4013 Q3Mesh_New (
4014     void
4015 );
4016 
4017 
4018 
4019 /*!
4020  *  @function
4021  *      Q3Mesh_SetData
4022  *  @discussion
4023  *      Sets the properties of an existing mesh object.
4024  *
4025  *      If successful, this function invalidates all preexisting references to mesh parts
4026  *		(<code>TQ3MeshVertex</code>, <code>TQ3MeshContour</code>, <code>TQ3MeshFace</code>,
4027  *		<code>TQ3MeshCorner</code>, <code>TQ3MeshEdge</code>, <code>TQ3MeshComponent</code>)
4028  *		and mesh iterators (<code>TQ3MeshIterator</code>).
4029  *
4030  *      <em>This function is not available in QD3D.</em>
4031  *
4032  *  @param mesh             A reference to a mesh geometry object.
4033  *  @param meshData         A pointer to the mesh data to apply to the mesh object.
4034  *  @result                 Success or failure of the operation.
4035  */
4036 #if QUESA_ALLOW_QD3D_EXTENSIONS
4037 
4038 Q3_EXTERN_API_C ( TQ3Status  )
4039 Q3Mesh_SetData (
4040     TQ3GeometryObject             mesh,
4041     const TQ3MeshData             *meshData
4042 );
4043 
4044 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
4045 
4046 
4047 
4048 /*!
4049  *  @function
4050  *      Q3Mesh_GetData
4051  *  @discussion
4052  *      Gets the properties of an existing mesh object.
4053  *
4054  *		Memory is allocated for the 'meshData' parameter, and <code>Q3Mesh_EmptyData</code>
4055  *		must be called to dispose of this memory.
4056  *
4057  *      <em>This function is not available in QD3D.</em>
4058  *
4059  *  @param mesh             A reference to a mesh geometry object.
4060  *  @param meshData         Receives the mesh object's description.
4061  *  @result                 Success or failure of the operation.
4062  */
4063 #if QUESA_ALLOW_QD3D_EXTENSIONS
4064 
4065 Q3_EXTERN_API_C ( TQ3Status  )
4066 Q3Mesh_GetData (
4067     TQ3GeometryObject             mesh,
4068     TQ3MeshData                   *meshData
4069 );
4070 
4071 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
4072 
4073 
4074 
4075 /*!
4076  *  @function
4077  *      Q3Mesh_EmptyData
4078  *  @discussion
4079  *      Releases the memory allocated by a prior call to <code>Q3Mesh_GetData</code>.
4080  *
4081  *      <em>This function is not available in QD3D.</em>
4082  *
4083  *  @param meshData         A pointer to the mesh data allocated by <code>Q3Mesh_GetData()</code>.
4084  *  @result                 Success or failure of the operation.
4085  */
4086 #if QUESA_ALLOW_QD3D_EXTENSIONS
4087 
4088 Q3_EXTERN_API_C ( TQ3Status  )
4089 Q3Mesh_EmptyData (
4090     TQ3MeshData                   *meshData
4091 );
4092 
4093 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
4094 
4095 
4096 
4097 /*!
4098  *  @function
4099  *      Q3Mesh_VertexNew
4100  *  @discussion
4101  *      Create a new mesh vertex.
4102  *
4103  *  @param mesh             The mesh to create the vertex within.
4104  *  @param vertex           The data for the vertex.
4105  *  @result                 The new mesh vertex.
4106  */
4107 Q3_EXTERN_API_C ( TQ3MeshVertex  )
4108 Q3Mesh_VertexNew (
4109     TQ3GeometryObject             mesh,
4110     const TQ3Vertex3D             *vertex
4111 );
4112 
4113 
4114 
4115 /*!
4116  *  @function
4117  *      Q3Mesh_FaceNew
4118  *  @discussion
4119  *      Create a new mesh face.
4120  *
4121  *  @param mesh             The mesh to create the face within.
4122  *  @param numVertices      The number of vertices in the face.
4123  *  @param vertices         The vertices for the face.
4124  *  @param attributeSet     The attribute set for the face.
4125  *  @result                 The new mesh face.
4126  */
4127 Q3_EXTERN_API_C ( TQ3MeshFace  )
4128 Q3Mesh_FaceNew (
4129     TQ3GeometryObject             mesh,
4130     TQ3Uns32                      numVertices,
4131     const TQ3MeshVertex           *vertices,
4132     TQ3AttributeSet               attributeSet
4133 );
4134 
4135 
4136 
4137 /*!
4138  *  @function
4139  *      Q3Mesh_VertexDelete
4140  *  @discussion
4141  *      Delete a mesh vertex.
4142  *
4143  *  @param mesh             The mesh to remove the vertex from.
4144  *  @param vertex           The mesh vertex to delete.
4145  *  @result                 Success or failure of the operation.
4146  */
4147 Q3_EXTERN_API_C ( TQ3Status  )
4148 Q3Mesh_VertexDelete (
4149     TQ3GeometryObject             mesh,
4150     TQ3MeshVertex                 vertex
4151 );
4152 
4153 
4154 
4155 /*!
4156  *  @function
4157  *      Q3Mesh_FaceDelete
4158  *  @discussion
4159  *      Delete a mesh face.
4160  *
4161  *  @param mesh             The mesh to remove the face from.
4162  *  @param face             The mesh face to delete.
4163  *  @result                 Success or failure of the operation.
4164  */
4165 Q3_EXTERN_API_C ( TQ3Status  )
4166 Q3Mesh_FaceDelete (
4167     TQ3GeometryObject             mesh,
4168     TQ3MeshFace                   face
4169 );
4170 
4171 
4172 
4173 /*!
4174  *  @function
4175  *      Q3Mesh_DelayUpdates
4176  *  @discussion
4177  *      Delay updates to a mesh.
4178  *
4179  *      Can be used before a mesh is edited to allow Quesa to defer any
4180  *      geometrical optimisations on the mesh. While updates are deferred,
4181  *      Quesa will select a more flexible internal mesh representation.
4182  *
4183  *  @param mesh             The mesh to delay updates on.
4184  *  @result                 Success or failure of the operation.
4185  */
4186 Q3_EXTERN_API_C ( TQ3Status  )
4187 Q3Mesh_DelayUpdates (
4188     TQ3GeometryObject             mesh
4189 );
4190 
4191 
4192 
4193 /*!
4194  *  @function
4195  *      Q3Mesh_ResumeUpdates
4196  *  @discussion
4197  *      Resume updates to a mesh.
4198  *
4199  *      Should be used after a preceding call to Q3Mesh_DelayUpdates to
4200  *      indicate to Quesa that an optimised internal representation of
4201  *      the mesh would be preferred to a more flexible form.
4202  *
4203  *  @param mesh             The mesh to resume updatse for.
4204  *  @result                 Success or failure of the operation.
4205  */
4206 Q3_EXTERN_API_C ( TQ3Status  )
4207 Q3Mesh_ResumeUpdates (
4208     TQ3GeometryObject             mesh
4209 );
4210 
4211 
4212 
4213 /*!
4214  *  @function
4215  *      Q3Mesh_FaceToContour
4216  *  @discussion
4217  *      Convert a mesh face to a contour.
4218  *
4219  *  @param mesh             The mesh to update.
4220  *  @param containerFace    The face containing the face which will be converted.
4221  *  @param face             The face to convert to a contour.
4222  *  @result                 The new mesh contour.
4223  */
4224 Q3_EXTERN_API_C ( TQ3MeshContour  )
4225 Q3Mesh_FaceToContour (
4226     TQ3GeometryObject             mesh,
4227     TQ3MeshFace                   containerFace,
4228     TQ3MeshFace                   face
4229 );
4230 
4231 
4232 
4233 /*!
4234  *  @function
4235  *      Q3Mesh_ContourToFace
4236  *  @discussion
4237  *      Convert a mesh face to a contour.
4238  *
4239  *  @param mesh             The mesh to update.
4240  *  @param contour          The contour to convert to a face.
4241  *  @result                 The new mesh face.
4242  */
4243 Q3_EXTERN_API_C ( TQ3MeshFace  )
4244 Q3Mesh_ContourToFace (
4245     TQ3GeometryObject             mesh,
4246     TQ3MeshContour                contour
4247 );
4248 
4249 
4250 
4251 /*!
4252  *  @function
4253  *      Q3Mesh_GetNumComponents
4254  *  @discussion
4255  *      Get the number of components of a mesh.
4256  *
4257  *  @param mesh             The mesh to query.
4258  *  @param numComponents    Receives the number of components of the mesh.
4259  *  @result                 Success or failure of the operation.
4260  */
4261 Q3_EXTERN_API_C ( TQ3Status  )
4262 Q3Mesh_GetNumComponents (
4263     TQ3GeometryObject             mesh,
4264     TQ3Uns32                      *numComponents
4265 );
4266 
4267 
4268 
4269 /*!
4270  *  @function
4271  *      Q3Mesh_GetNumEdges
4272  *  @discussion
4273  *      Get the number of edges in a mesh
4274  *
4275  *  @param mesh             The mesh to query.
4276  *  @param numEdges         Receives the number of edges in the mesh.
4277  *  @result                 Success or failure of the operation.
4278  */
4279 Q3_EXTERN_API_C ( TQ3Status  )
4280 Q3Mesh_GetNumEdges (
4281     TQ3GeometryObject             mesh,
4282     TQ3Uns32                      *numEdges
4283 );
4284 
4285 
4286 
4287 /*!
4288  *  @function
4289  *      Q3Mesh_GetNumVertices
4290  *  @discussion
4291  *      Get the number of vertices in a mesh
4292  *
4293  *  @param mesh             The mesh to query.
4294  *  @param numVertices      Receives the number of vertices in the mesh.
4295  *  @result                 Success or failure of the operation.
4296  */
4297 Q3_EXTERN_API_C ( TQ3Status  )
4298 Q3Mesh_GetNumVertices (
4299     TQ3GeometryObject             mesh,
4300     TQ3Uns32                      *numVertices
4301 );
4302 
4303 
4304 
4305 /*!
4306  *  @function
4307  *      Q3Mesh_GetNumFaces
4308  *  @discussion
4309  *      Get the number of faces in a mesh
4310  *
4311  *  @param mesh             The mesh to query.
4312  *  @param numFaces         Receives the number of faces in the mesh.
4313  *  @result                 Success or failure of the operation.
4314  */
4315 Q3_EXTERN_API_C ( TQ3Status  )
4316 Q3Mesh_GetNumFaces (
4317     TQ3GeometryObject             mesh,
4318     TQ3Uns32                      *numFaces
4319 );
4320 
4321 
4322 
4323 /*!
4324  *  @function
4325  *      Q3Mesh_GetNumCorners
4326  *  @discussion
4327  *      Get the number of corners in a mesh
4328  *
4329  *  @param mesh             The mesh to query.
4330  *  @param numCorners       Receives the number of corners in the mesh.
4331  *  @result                 Success or failure of the operation.
4332  */
4333 Q3_EXTERN_API_C ( TQ3Status  )
4334 Q3Mesh_GetNumCorners (
4335     TQ3GeometryObject             mesh,
4336     TQ3Uns32                      *numCorners
4337 );
4338 
4339 
4340 
4341 /*!
4342  *  @function
4343  *      Q3Mesh_GetOrientable
4344  *  @discussion
4345  *      Get the mesh orientable state
4346  *
4347  *  @param mesh             The mesh to query.
4348  *  @param orientable       Receives the mesh orientable state.
4349  *  @result                 Success or failure of the operation.
4350  */
4351 Q3_EXTERN_API_C ( TQ3Status  )
4352 Q3Mesh_GetOrientable (
4353     TQ3GeometryObject             mesh,
4354     TQ3Boolean                    *orientable
4355 );
4356 
4357 
4358 
4359 /*!
4360  *  @function
4361  *      Q3Mesh_GetComponentNumVertices
4362  *  @discussion
4363  *      Get the number of vertices in a mesh component
4364  *
4365  *  @param mesh             The mesh to query.
4366  *  @param component        The component to query.
4367  *  @param numVertices      Receives the number of vertices in the component.
4368  *  @result                 Success or failure of the operation.
4369  */
4370 Q3_EXTERN_API_C ( TQ3Status  )
4371 Q3Mesh_GetComponentNumVertices (
4372     TQ3GeometryObject             mesh,
4373     TQ3MeshComponent              component,
4374     TQ3Uns32                      *numVertices
4375 );
4376 
4377 
4378 
4379 /*!
4380  *  @function
4381  *      Q3Mesh_GetComponentNumEdges
4382  *  @discussion
4383  *      Get the number of edges in a mesh component
4384  *
4385  *  @param mesh             The mesh to query.
4386  *  @param component        The component to query.
4387  *  @param numEdges         Receives the number of edges in the component.
4388  *  @result                 Success or failure of the operation.
4389  */
4390 Q3_EXTERN_API_C ( TQ3Status  )
4391 Q3Mesh_GetComponentNumEdges (
4392     TQ3GeometryObject             mesh,
4393     TQ3MeshComponent              component,
4394     TQ3Uns32                      *numEdges
4395 );
4396 
4397 
4398 
4399 /*!
4400  *  @function
4401  *      Q3Mesh_GetComponentBoundingBox
4402  *  @discussion
4403  *      Get the bounding box of a mesh component
4404  *
4405  *  @param mesh             The mesh to query.
4406  *  @param component        The component to query.
4407  *  @param boundingBox      Receives the bounding box of the component.
4408  *  @result                 Success or failure of the operation.
4409  */
4410 Q3_EXTERN_API_C ( TQ3Status  )
4411 Q3Mesh_GetComponentBoundingBox (
4412     TQ3GeometryObject             mesh,
4413     TQ3MeshComponent              component,
4414     TQ3BoundingBox                *boundingBox
4415 );
4416 
4417 
4418 
4419 /*!
4420  *  @function
4421  *      Q3Mesh_GetComponentOrientable
4422  *  @discussion
4423  *      Get the orientable state of a mesh component
4424  *
4425  *  @param mesh             The mesh to query.
4426  *  @param component        The component to query.
4427  *  @param orientable       Receives the orientable state of the component.
4428  *  @result                 Success or failure of the operation.
4429  */
4430 Q3_EXTERN_API_C ( TQ3Status  )
4431 Q3Mesh_GetComponentOrientable (
4432     TQ3GeometryObject             mesh,
4433     TQ3MeshComponent              component,
4434     TQ3Boolean                    *orientable
4435 );
4436 
4437 
4438 
4439 /*!
4440  *  @function
4441  *      Q3Mesh_GetVertexCoordinates
4442  *  @discussion
4443  *      Get the coordinates of a mesh vertex.
4444  *
4445  *  @param mesh             The mesh to query.
4446  *  @param vertex           The vertex to query.
4447  *  @param coordinates      Receives the coordinates of the vertex.
4448  *  @result                 Success or failure of the operation.
4449  */
4450 Q3_EXTERN_API_C ( TQ3Status  )
4451 Q3Mesh_GetVertexCoordinates (
4452     TQ3GeometryObject             mesh,
4453     TQ3MeshVertex                 vertex,
4454     TQ3Point3D                    *coordinates
4455 );
4456 
4457 
4458 
4459 /*!
4460  *  @function
4461  *      Q3Mesh_GetVertexIndex
4462  *  @discussion
4463  *      Get the index of a mesh vertex.
4464  *
4465  *  @param mesh             The mesh to query.
4466  *  @param vertex           The vertex to query.
4467  *  @param index            Receives the index of the vertex.
4468  *  @result                 Success or failure of the operation.
4469  */
4470 Q3_EXTERN_API_C ( TQ3Status  )
4471 Q3Mesh_GetVertexIndex (
4472     TQ3GeometryObject             mesh,
4473     TQ3MeshVertex                 vertex,
4474     TQ3Uns32                      *index
4475 );
4476 
4477 
4478 
4479 /*!
4480  *  @function
4481  *      Q3Mesh_GetVertexOnBoundary
4482  *  @discussion
4483  *      Get the boundary state for a mesh vertex
4484  *
4485  *  @param mesh             The mesh to query.
4486  *  @param vertex           The vertex to query.
4487  *  @param onBoundary       Receives the vertex boundary state.
4488  *  @result                 Success or failure of the operation.
4489  */
4490 Q3_EXTERN_API_C ( TQ3Status  )
4491 Q3Mesh_GetVertexOnBoundary (
4492     TQ3GeometryObject             mesh,
4493     TQ3MeshVertex                 vertex,
4494     TQ3Boolean                    *onBoundary
4495 );
4496 
4497 
4498 
4499 /*!
4500  *  @function
4501  *      Q3Mesh_GetVertexComponent
4502  *  @discussion
4503  *      Get the component of a mesh vertex.
4504  *
4505  *  @param mesh             The mesh to query.
4506  *  @param vertex           The vertex to query.
4507  *  @param component        Receives the component of the mesh vertex.
4508  *  @result                 Success or failure of the operation.
4509  */
4510 Q3_EXTERN_API_C ( TQ3Status  )
4511 Q3Mesh_GetVertexComponent (
4512     TQ3GeometryObject             mesh,
4513     TQ3MeshVertex                 vertex,
4514     TQ3MeshComponent              *component
4515 );
4516 
4517 
4518 
4519 /*!
4520  *  @function
4521  *      Q3Mesh_GetVertexAttributeSet
4522  *  @discussion
4523  *      Get the attribute set of a mesh vertex.
4524  *
4525  *  @param mesh             The mesh to query.
4526  *  @param vertex           The vertex to query.
4527  *  @param attributeSet     Receives the attribute set of the mesh vertex.
4528  *  @result                 Success or failure of the operation.
4529  */
4530 Q3_EXTERN_API_C ( TQ3Status  )
4531 Q3Mesh_GetVertexAttributeSet (
4532     TQ3GeometryObject             mesh,
4533     TQ3MeshVertex                 vertex,
4534     TQ3AttributeSet               *attributeSet
4535 );
4536 
4537 
4538 
4539 /*!
4540  *  @function
4541  *      Q3Mesh_SetVertexCoordinates
4542  *  @discussion
4543  *      Set the coordinates of a mesh vertex.
4544  *
4545  *  @param mesh             The mesh to update.
4546  *  @param vertex           The vertex to update.
4547  *  @param coordinates      The new coordinates for the mesh vertex.
4548  *  @result                 Success or failure of the operation.
4549  */
4550 Q3_EXTERN_API_C ( TQ3Status  )
4551 Q3Mesh_SetVertexCoordinates (
4552     TQ3GeometryObject             mesh,
4553     TQ3MeshVertex                 vertex,
4554     const TQ3Point3D              *coordinates
4555 );
4556 
4557 
4558 
4559 /*!
4560  *  @function
4561  *      Q3Mesh_SetVertexAttributeSet
4562  *  @discussion
4563  *      Set the attribute set of a mesh vertex
4564  *
4565  *  @param mesh             The mesh to udate.
4566  *  @param vertex           The vertex to update.
4567  *  @param attributeSet     The new attribute set for the mesh vertex.
4568  *  @result                 Success or failure of the operation.
4569  */
4570 Q3_EXTERN_API_C ( TQ3Status  )
4571 Q3Mesh_SetVertexAttributeSet (
4572     TQ3GeometryObject             mesh,
4573     TQ3MeshVertex                 vertex,
4574     TQ3AttributeSet               attributeSet
4575 );
4576 
4577 
4578 
4579 /*!
4580  *  @function
4581  *      Q3Mesh_GetFaceNumVertices
4582  *  @discussion
4583  *      Get the number of vertices in a mesh face.
4584  *
4585  *  @param mesh             The mesh to query.
4586  *  @param face             The face to query.
4587  *  @param numVertices      Receives the number of vertices in the mesh face.
4588  *  @result                 Success or failure of the operation.
4589  */
4590 Q3_EXTERN_API_C ( TQ3Status  )
4591 Q3Mesh_GetFaceNumVertices (
4592     TQ3GeometryObject             mesh,
4593     TQ3MeshFace                   face,
4594     TQ3Uns32                      *numVertices
4595 );
4596 
4597 
4598 
4599 /*!
4600  *  @function
4601  *      Q3Mesh_GetFacePlaneEquation
4602  *  @discussion
4603  *      Get the plane equation of a mesh face.
4604  *
4605  *  @param mesh             The mesh to query.
4606  *  @param face             The face to query.
4607  *  @param planeEquation    Receives the plane equation of the mesh face.
4608  *  @result                 Success or failure of the operation.
4609  */
4610 Q3_EXTERN_API_C ( TQ3Status  )
4611 Q3Mesh_GetFacePlaneEquation (
4612     TQ3GeometryObject             mesh,
4613     TQ3MeshFace                   face,
4614     TQ3PlaneEquation              *planeEquation
4615 );
4616 
4617 
4618 
4619 /*!
4620  *  @function
4621  *      Q3Mesh_GetFaceNumContours
4622  *  @discussion
4623  *      Get the number of contours of a mesh face.
4624  *
4625  *  @param mesh             The mesh to query.
4626  *  @param face             The face to query.
4627  *  @param numContours      Receives the number of contours of the mesh face.
4628  *  @result                 Success or failure of the operation.
4629  */
4630 Q3_EXTERN_API_C ( TQ3Status  )
4631 Q3Mesh_GetFaceNumContours (
4632     TQ3GeometryObject             mesh,
4633     TQ3MeshFace                   face,
4634     TQ3Uns32                      *numContours
4635 );
4636 
4637 
4638 
4639 /*!
4640  *  @function
4641  *      Q3Mesh_GetFaceIndex
4642  *  @discussion
4643  *      Get the index of a mesh face.
4644  *
4645  *  @param mesh             The mesh to query.
4646  *  @param face             The face to query.
4647  *  @param index            Receives the index of the mesh face.
4648  *  @result                 Success or failure of the operation.
4649  */
4650 Q3_EXTERN_API_C ( TQ3Status  )
4651 Q3Mesh_GetFaceIndex (
4652     TQ3GeometryObject             mesh,
4653     TQ3MeshFace                   face,
4654     TQ3Uns32                      *index
4655 );
4656 
4657 
4658 
4659 /*!
4660  *  @function
4661  *      Q3Mesh_GetFaceComponent
4662  *  @discussion
4663  *      Get the component of a mesh face.
4664  *
4665  *  @param mesh             The mesh to query.
4666  *  @param face             The face to query.
4667  *  @param component        Receives the component of the mesh face.
4668  *  @result                 Success or failure of the operation.
4669  */
4670 Q3_EXTERN_API_C ( TQ3Status  )
4671 Q3Mesh_GetFaceComponent (
4672     TQ3GeometryObject             mesh,
4673     TQ3MeshFace                   face,
4674     TQ3MeshComponent              *component
4675 );
4676 
4677 
4678 
4679 /*!
4680  *  @function
4681  *      Q3Mesh_GetFaceAttributeSet
4682  *  @discussion
4683  *      Get the attribute set of a mesh face.
4684  *
4685  *  @param mesh             The mesh to query.
4686  *  @param face             The face to query.
4687  *  @param attributeSet     Receives the attribute set of the mesh face.
4688  *  @result                 Success or failure of the operation.
4689  */
4690 Q3_EXTERN_API_C ( TQ3Status  )
4691 Q3Mesh_GetFaceAttributeSet (
4692     TQ3GeometryObject             mesh,
4693     TQ3MeshFace                   face,
4694     TQ3AttributeSet               *attributeSet
4695 );
4696 
4697 
4698 
4699 /*!
4700  *  @function
4701  *      Q3Mesh_SetFaceAttributeSet
4702  *  @discussion
4703  *      Set the attribute set of a mesh face.
4704  *
4705  *  @param mesh             The mesh to update.
4706  *  @param face             The face to update.
4707  *  @param attributeSet     The new attribute set for the mesh face.
4708  *  @result                 Success or failure of the operation.
4709  */
4710 Q3_EXTERN_API_C ( TQ3Status  )
4711 Q3Mesh_SetFaceAttributeSet (
4712     TQ3GeometryObject             mesh,
4713     TQ3MeshFace                   face,
4714     TQ3AttributeSet               attributeSet
4715 );
4716 
4717 
4718 
4719 /*!
4720  *  @function
4721  *      Q3Mesh_GetEdgeVertices
4722  *  @discussion
4723  *      Get the vertices of a mesh edge.
4724  *
4725  *  @param mesh             The mesh to query.
4726  *  @param edge             The edge to query.
4727  *  @param vertex1          Receives the first vertex of the mesh edge.
4728  *  @param vertex2          Receives the second vertex of the mesh edge.
4729  *  @result                 Success or failure of the operation.
4730  */
4731 Q3_EXTERN_API_C ( TQ3Status  )
4732 Q3Mesh_GetEdgeVertices (
4733     TQ3GeometryObject             mesh,
4734     TQ3MeshEdge                   edge,
4735     TQ3MeshVertex                 *vertex1,
4736     TQ3MeshVertex                 *vertex2
4737 );
4738 
4739 
4740 
4741 /*!
4742  *  @function
4743  *      Q3Mesh_GetEdgeFaces
4744  *  @discussion
4745  *      Get the faces of a mesh edge.
4746  *
4747  *  @param mesh             The mesh to query.
4748  *  @param edge             The edge to query.
4749  *  @param face1            Receives the first face of the mesh edge.
4750  *  @param face2            Receives the second face of the mesh edge.
4751  *  @result                 Success or failure of the operation.
4752  */
4753 Q3_EXTERN_API_C ( TQ3Status  )
4754 Q3Mesh_GetEdgeFaces (
4755     TQ3GeometryObject             mesh,
4756     TQ3MeshEdge                   edge,
4757     TQ3MeshFace                   *face1,
4758     TQ3MeshFace                   *face2
4759 );
4760 
4761 
4762 
4763 /*!
4764  *  @function
4765  *      Q3Mesh_GetEdgeOnBoundary
4766  *  @discussion
4767  *      Get the boundary state of a mesh edge.
4768  *
4769  *  @param mesh             The mesh to query.
4770  *  @param edge             The edge to query.
4771  *  @param onBoundary       Receives the boundary state of the mesh edge.
4772  *  @result                 Success or failure of the operation.
4773  */
4774 Q3_EXTERN_API_C ( TQ3Status  )
4775 Q3Mesh_GetEdgeOnBoundary (
4776     TQ3GeometryObject             mesh,
4777     TQ3MeshEdge                   edge,
4778     TQ3Boolean                    *onBoundary
4779 );
4780 
4781 
4782 
4783 /*!
4784  *  @function
4785  *      Q3Mesh_GetEdgeComponent
4786  *  @discussion
4787  *      Get the component of a mesh edge.
4788  *
4789  *  @param mesh             The mesh to query.
4790  *  @param edge             The edge to query.
4791  *  @param component        Receives the component of the mesh edge.
4792  *  @result                 Success or failure of the operation.
4793  */
4794 Q3_EXTERN_API_C ( TQ3Status  )
4795 Q3Mesh_GetEdgeComponent (
4796     TQ3GeometryObject             mesh,
4797     TQ3MeshEdge                   edge,
4798     TQ3MeshComponent              *component
4799 );
4800 
4801 
4802 
4803 /*!
4804  *  @function
4805  *      Q3Mesh_GetEdgeAttributeSet
4806  *  @discussion
4807  *      Get the attribute set of a mesh edge.
4808  *
4809  *  @param mesh             The mesh to query.
4810  *  @param edge             The edge to query.
4811  *  @param attributeSet     Receives the attribute set of the mesh edge.
4812  *  @result                 Success or failure of the operation.
4813  */
4814 Q3_EXTERN_API_C ( TQ3Status  )
4815 Q3Mesh_GetEdgeAttributeSet (
4816     TQ3GeometryObject             mesh,
4817     TQ3MeshEdge                   edge,
4818     TQ3AttributeSet               *attributeSet
4819 );
4820 
4821 
4822 
4823 /*!
4824  *  @function
4825  *      Q3Mesh_SetEdgeAttributeSet
4826  *  @discussion
4827  *      Set the attribute set for a mesh edge.
4828  *
4829  *  @param mesh             The mesh to update.
4830  *  @param edge             The edge to update.
4831  *  @param attributeSet     The new attribute set for the mesh edge.
4832  *  @result                 Success or failure of the operation.
4833  */
4834 Q3_EXTERN_API_C ( TQ3Status  )
4835 Q3Mesh_SetEdgeAttributeSet (
4836     TQ3GeometryObject             mesh,
4837     TQ3MeshEdge                   edge,
4838     TQ3AttributeSet               attributeSet
4839 );
4840 
4841 
4842 
4843 /*!
4844  *  @function
4845  *      Q3Mesh_GetContourFace
4846  *  @discussion
4847  *      Get the face of a mesh contour.
4848  *
4849  *  @param mesh             The mesh to query.
4850  *  @param contour          The contour to query.
4851  *  @param face             Receives the face of the mesh contour.
4852  *  @result                 Success or failure of the operation.
4853  */
4854 Q3_EXTERN_API_C ( TQ3Status  )
4855 Q3Mesh_GetContourFace (
4856     TQ3GeometryObject             mesh,
4857     TQ3MeshContour                contour,
4858     TQ3MeshFace                   *face
4859 );
4860 
4861 
4862 
4863 /*!
4864  *  @function
4865  *      Q3Mesh_GetContourNumVertices
4866  *  @discussion
4867  *      Get the number of vertices in a mesh contour.
4868  *
4869  *  @param mesh             The mesh to query.
4870  *  @param contour          The contour to query.
4871  *  @param numVertices      Receives the number of vertices in the mesh contour.
4872  *  @result                 Success or failure of the operation.
4873  */
4874 Q3_EXTERN_API_C ( TQ3Status  )
4875 Q3Mesh_GetContourNumVertices (
4876     TQ3GeometryObject             mesh,
4877     TQ3MeshContour                contour,
4878     TQ3Uns32                      *numVertices
4879 );
4880 
4881 
4882 
4883 /*!
4884  *  @function
4885  *      Q3Mesh_GetCornerAttributeSet
4886  *  @discussion
4887  *      Get the attribute set of a mesh corner.
4888  *
4889  *  @param mesh             The mesh to query.
4890  *  @param vertex           The vertex to query.
4891  *  @param face             The face to query.
4892  *  @param attributeSet     Receives the attribute set of the mesh corner.
4893  *  @result                 Success or failure of the operation.
4894  */
4895 Q3_EXTERN_API_C ( TQ3Status  )
4896 Q3Mesh_GetCornerAttributeSet (
4897     TQ3GeometryObject             mesh,
4898     TQ3MeshVertex                 vertex,
4899     TQ3MeshFace                   face,
4900     TQ3AttributeSet               *attributeSet
4901 );
4902 
4903 
4904 
4905 /*!
4906  *  @function
4907  *      Q3Mesh_SetCornerAttributeSet
4908  *  @discussion
4909  *      Set the attribute set for a mesh corner.
4910  *
4911  *  @param mesh             The mesh to update.
4912  *  @param vertex           The vertex to update.
4913  *  @param face             The face to update.
4914  *  @param attributeSet     The new attribute set for the mesh corner.
4915  *  @result                 Success or failure of the operation.
4916  */
4917 Q3_EXTERN_API_C ( TQ3Status  )
4918 Q3Mesh_SetCornerAttributeSet (
4919     TQ3GeometryObject             mesh,
4920     TQ3MeshVertex                 vertex,
4921     TQ3MeshFace                   face,
4922     TQ3AttributeSet               attributeSet
4923 );
4924 
4925 
4926 
4927 /*!
4928  *  @function
4929  *      Q3Mesh_FirstMeshComponent
4930  *  @discussion
4931  *      Get the first component in a mesh.
4932  *
4933  *  @param mesh             The mesh to query.
4934  *  @param iterator         Receives the mesh iterator.
4935  *  @result                 The first component in the mesh.
4936  */
4937 Q3_EXTERN_API_C ( TQ3MeshComponent  )
4938 Q3Mesh_FirstMeshComponent (
4939     TQ3GeometryObject             mesh,
4940     TQ3MeshIterator               *iterator
4941 );
4942 
4943 
4944 
4945 /*!
4946  *  @function
4947  *      Q3Mesh_NextMeshComponent
4948  *  @discussion
4949  *      Get the next component in a mesh.
4950  *
4951  *  @param iterator         The mesh iterator.
4952  *  @result                 The next component in the mesh.
4953  */
4954 Q3_EXTERN_API_C ( TQ3MeshComponent  )
4955 Q3Mesh_NextMeshComponent (
4956     TQ3MeshIterator               *iterator
4957 );
4958 
4959 
4960 
4961 /*!
4962  *  @function
4963  *      Q3Mesh_FirstComponentVertex
4964  *  @discussion
4965  *      Get the first vertex in a mesh component.
4966  *
4967  *  @param component        The component to query.
4968  *  @param iterator         Receives the mesh iterator.
4969  *  @result                 The first vertex in the component.
4970  */
4971 Q3_EXTERN_API_C ( TQ3MeshVertex  )
4972 Q3Mesh_FirstComponentVertex (
4973     TQ3MeshComponent              component,
4974     TQ3MeshIterator               *iterator
4975 );
4976 
4977 
4978 
4979 /*!
4980  *  @function
4981  *      Q3Mesh_NextComponentVertex
4982  *  @discussion
4983  *      Get the next vertex in a mesh component.
4984  *
4985  *  @param iterator         The mesh iterator.
4986  *  @result                 The next vertex in the component.
4987  */
4988 Q3_EXTERN_API_C ( TQ3MeshVertex  )
4989 Q3Mesh_NextComponentVertex (
4990     TQ3MeshIterator               *iterator
4991 );
4992 
4993 
4994 
4995 /*!
4996  *  @function
4997  *      Q3Mesh_FirstComponentEdge
4998  *  @discussion
4999  *      Get the first edge in a mesh component.
5000  *
5001  *  @param component        The component to query.
5002  *  @param iterator         Receives the mesh iterator.
5003  *  @result                 The first edge in the component.
5004  */
5005 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5006 Q3Mesh_FirstComponentEdge (
5007     TQ3MeshComponent              component,
5008     TQ3MeshIterator               *iterator
5009 );
5010 
5011 
5012 
5013 /*!
5014  *  @function
5015  *      Q3Mesh_NextComponentEdge
5016  *  @discussion
5017  *      Get the next edge in a mesh component.
5018  *
5019  *  @param iterator         The mesh iterator.
5020  *  @result                 The next edge in the component.
5021  */
5022 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5023 Q3Mesh_NextComponentEdge (
5024     TQ3MeshIterator               *iterator
5025 );
5026 
5027 
5028 
5029 /*!
5030  *  @function
5031  *      Q3Mesh_FirstMeshVertex
5032  *  @discussion
5033  *      Get the first vertex in a mesh.
5034  *
5035  *  @param mesh             The mesh to query.
5036  *  @param iterator         Receives the mesh iterator.
5037  *  @result                 The first vertex in the mesh.
5038  */
5039 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5040 Q3Mesh_FirstMeshVertex (
5041     TQ3GeometryObject             mesh,
5042     TQ3MeshIterator               *iterator
5043 );
5044 
5045 
5046 
5047 /*!
5048  *  @function
5049  *      Q3Mesh_NextMeshVertex
5050  *  @discussion
5051  *      Get the next vertex in a mesh.
5052  *
5053  *  @param iterator         The mesh iterator.
5054  *  @result                 The next vertex in the mesh.
5055  */
5056 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5057 Q3Mesh_NextMeshVertex (
5058     TQ3MeshIterator               *iterator
5059 );
5060 
5061 
5062 
5063 /*!
5064  *  @function
5065  *      Q3Mesh_FirstMeshFace
5066  *  @discussion
5067  *      Get the first face in a mesh.
5068  *
5069  *  @param mesh             The mesh to query.
5070  *  @param iterator         Receives the mesh iterator.
5071  *  @result                 The first face in the mesh.
5072  */
5073 Q3_EXTERN_API_C ( TQ3MeshFace  )
5074 Q3Mesh_FirstMeshFace (
5075     TQ3GeometryObject             mesh,
5076     TQ3MeshIterator               *iterator
5077 );
5078 
5079 
5080 
5081 /*!
5082  *  @function
5083  *      Q3Mesh_NextMeshFace
5084  *  @discussion
5085  *      Get the next face in a mesh.
5086  *
5087  *  @param iterator         The mesh iterator.
5088  *  @result                 The next face in the mesh.
5089  */
5090 Q3_EXTERN_API_C ( TQ3MeshFace  )
5091 Q3Mesh_NextMeshFace (
5092     TQ3MeshIterator               *iterator
5093 );
5094 
5095 
5096 
5097 /*!
5098  *  @function
5099  *      Q3Mesh_FirstMeshEdge
5100  *  @discussion
5101  *      Get the first edge in a mesh.
5102  *
5103  *  @param mesh             The mesh to query.
5104  *  @param iterator         Receives the mesh iterator.
5105  *  @result                 The first edge in the mesh.
5106  */
5107 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5108 Q3Mesh_FirstMeshEdge (
5109     TQ3GeometryObject             mesh,
5110     TQ3MeshIterator               *iterator
5111 );
5112 
5113 
5114 
5115 /*!
5116  *  @function
5117  *      Q3Mesh_NextMeshEdge
5118  *  @discussion
5119  *      Get the next edge in a mesh.
5120  *
5121  *  @param iterator         The mesh iterator.
5122  *  @result                 The next edge in the mesh.
5123  */
5124 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5125 Q3Mesh_NextMeshEdge (
5126     TQ3MeshIterator               *iterator
5127 );
5128 
5129 
5130 
5131 /*!
5132  *  @function
5133  *      Q3Mesh_FirstVertexEdge
5134  *  @discussion
5135  *      Get the first edge in a mesh vertex.
5136  *
5137  *  @param vertex           The vertex to query.
5138  *  @param iterator         Receives the mesh iterator.
5139  *  @result                 The first edge in the vertex.
5140  */
5141 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5142 Q3Mesh_FirstVertexEdge (
5143     TQ3MeshVertex                 vertex,
5144     TQ3MeshIterator               *iterator
5145 );
5146 
5147 
5148 
5149 /*!
5150  *  @function
5151  *      Q3Mesh_NextVertexEdge
5152  *  @discussion
5153  *      Get the next edge in a mesh vertex.
5154  *
5155  *  @param iterator         The mesh iterator.
5156  *  @result                 The next edge in the vertex.
5157  */
5158 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5159 Q3Mesh_NextVertexEdge (
5160     TQ3MeshIterator               *iterator
5161 );
5162 
5163 
5164 
5165 /*!
5166  *  @function
5167  *      Q3Mesh_FirstVertexVertex
5168  *  @discussion
5169  *      Get the first vertex in a mesh vertex.
5170  *
5171  *  @param vertex           The vertex to query.
5172  *  @param iterator         Receives the mesh iterator.
5173  *  @result                 The first vertex in the vertex.
5174  */
5175 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5176 Q3Mesh_FirstVertexVertex (
5177     TQ3MeshVertex                 vertex,
5178     TQ3MeshIterator               *iterator
5179 );
5180 
5181 
5182 
5183 /*!
5184  *  @function
5185  *      Q3Mesh_NextVertexVertex
5186  *  @discussion
5187  *      Get the next vertex in a mesh vertex.
5188  *
5189  *  @param iterator         The mesh iterator.
5190  *  @result                 The next vertex in the vertex.
5191  */
5192 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5193 Q3Mesh_NextVertexVertex (
5194     TQ3MeshIterator               *iterator
5195 );
5196 
5197 
5198 
5199 /*!
5200  *  @function
5201  *      Q3Mesh_FirstVertexFace
5202  *  @discussion
5203  *      Get the first face in a mesh vertex.
5204  *
5205  *  @param vertex           The vertex to query.
5206  *  @param iterator         Receives the mesh iterator.
5207  *  @result                 The first face in the vertex.
5208  */
5209 Q3_EXTERN_API_C ( TQ3MeshFace  )
5210 Q3Mesh_FirstVertexFace (
5211     TQ3MeshVertex                 vertex,
5212     TQ3MeshIterator               *iterator
5213 );
5214 
5215 
5216 
5217 /*!
5218  *  @function
5219  *      Q3Mesh_NextVertexFace
5220  *  @discussion
5221  *      Get the next face in a mesh vertex.
5222  *
5223  *  @param iterator         The mesh iterator.
5224  *  @result                 The next face in the vertex.
5225  */
5226 Q3_EXTERN_API_C ( TQ3MeshFace  )
5227 Q3Mesh_NextVertexFace (
5228     TQ3MeshIterator               *iterator
5229 );
5230 
5231 
5232 
5233 /*!
5234  *  @function
5235  *      Q3Mesh_FirstFaceEdge
5236  *  @discussion
5237  *      Get the first edge in a mesh face.
5238  *
5239  *  @param face             The face to query.
5240  *  @param iterator         Receives the mesh iterator.
5241  *  @result                 The first edge in the face.
5242  */
5243 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5244 Q3Mesh_FirstFaceEdge (
5245     TQ3MeshFace                   face,
5246     TQ3MeshIterator               *iterator
5247 );
5248 
5249 
5250 
5251 /*!
5252  *  @function
5253  *      Q3Mesh_NextFaceEdge
5254  *  @discussion
5255  *      Get the next edge in a mesh face.
5256  *
5257  *  @param iterator         The mesh iterator.
5258  *  @result                 The next edge in the face.
5259  */
5260 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5261 Q3Mesh_NextFaceEdge (
5262     TQ3MeshIterator               *iterator
5263 );
5264 
5265 
5266 
5267 /*!
5268  *  @function
5269  *      Q3Mesh_FirstFaceVertex
5270  *  @discussion
5271  *      Get the first vertex in a mesh face.
5272  *
5273  *  @param face             The face to query.
5274  *  @param iterator         Receives the mesh iterator.
5275  *  @result                 The first vertex in the face.
5276  */
5277 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5278 Q3Mesh_FirstFaceVertex (
5279     TQ3MeshFace                   face,
5280     TQ3MeshIterator               *iterator
5281 );
5282 
5283 
5284 
5285 /*!
5286  *  @function
5287  *      Q3Mesh_NextFaceVertex
5288  *  @discussion
5289  *      Get the next vertex in a mesh face.
5290  *
5291  *  @param iterator         The mesh iterator.
5292  *  @result                 The next vertex in the face.
5293  */
5294 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5295 Q3Mesh_NextFaceVertex (
5296     TQ3MeshIterator               *iterator
5297 );
5298 
5299 
5300 
5301 /*!
5302  *  @function
5303  *      Q3Mesh_FirstFaceFace
5304  *  @discussion
5305  *      Get the first face in a mesh face.
5306  *
5307  *  @param face             The face to query.
5308  *  @param iterator         Receives the mesh iterator.
5309  *  @result                 The first face in the face.
5310  */
5311 Q3_EXTERN_API_C ( TQ3MeshFace  )
5312 Q3Mesh_FirstFaceFace (
5313     TQ3MeshFace                   face,
5314     TQ3MeshIterator               *iterator
5315 );
5316 
5317 
5318 
5319 /*!
5320  *  @function
5321  *      Q3Mesh_NextFaceFace
5322  *  @discussion
5323  *      Get the next face in a mesh face.
5324  *
5325  *  @param iterator         The mesh iterator.
5326  *  @result                 The next face in the face.
5327  */
5328 Q3_EXTERN_API_C ( TQ3MeshFace  )
5329 Q3Mesh_NextFaceFace (
5330     TQ3MeshIterator               *iterator
5331 );
5332 
5333 
5334 
5335 /*!
5336  *  @function
5337  *      Q3Mesh_FirstFaceContour
5338  *  @discussion
5339  *      Get the first contour in a mesh face.
5340  *
5341  *  @param face             The face to query.
5342  *  @param iterator         Receives the mesh iterator.
5343  *  @result                 The first contour in the face.
5344  */
5345 Q3_EXTERN_API_C ( TQ3MeshContour  )
5346 Q3Mesh_FirstFaceContour (
5347     TQ3MeshFace                   face,
5348     TQ3MeshIterator               *iterator
5349 );
5350 
5351 
5352 
5353 /*!
5354  *  @function
5355  *      Q3Mesh_NextFaceContour
5356  *  @discussion
5357  *      Get the next contour in a mesh face.
5358  *
5359  *  @param iterator         The mesh iterator.
5360  *  @result                 The next contour in the face.
5361  */
5362 Q3_EXTERN_API_C ( TQ3MeshContour  )
5363 Q3Mesh_NextFaceContour (
5364     TQ3MeshIterator               *iterator
5365 );
5366 
5367 
5368 
5369 /*!
5370  *  @function
5371  *      Q3Mesh_FirstContourEdge
5372  *  @discussion
5373  *      Get the first edge in a mesh contour.
5374  *
5375  *  @param contour          The contour to query.
5376  *  @param iterator         Receives the mesh iterator.
5377  *  @result                 The first edge in the contour.
5378  */
5379 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5380 Q3Mesh_FirstContourEdge (
5381     TQ3MeshContour                contour,
5382     TQ3MeshIterator               *iterator
5383 );
5384 
5385 
5386 
5387 /*!
5388  *  @function
5389  *      Q3Mesh_NextContourEdge
5390  *  @discussion
5391  *      Get the next edge in a mesh contour.
5392  *
5393  *  @param iterator         The mesh iterator.
5394  *  @result                 The next edge in the contour.
5395  */
5396 Q3_EXTERN_API_C ( TQ3MeshEdge  )
5397 Q3Mesh_NextContourEdge (
5398     TQ3MeshIterator               *iterator
5399 );
5400 
5401 
5402 
5403 /*!
5404  *  @function
5405  *      Q3Mesh_FirstContourVertex
5406  *  @discussion
5407  *      Get the first vertex in a mesh contour.
5408  *
5409  *  @param contour          The contour to query.
5410  *  @param iterator         Receives the mesh iterator.
5411  *  @result                 The first vertex in the contour.
5412  */
5413 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5414 Q3Mesh_FirstContourVertex (
5415     TQ3MeshContour                contour,
5416     TQ3MeshIterator               *iterator
5417 );
5418 
5419 
5420 
5421 /*!
5422  *  @function
5423  *      Q3Mesh_NextContourVertex
5424  *  @discussion
5425  *      Get the next vertex in a mesh contour.
5426  *
5427  *  @param iterator         The mesh iterator.
5428  *  @result                 The next vertex in the contour.
5429  */
5430 Q3_EXTERN_API_C ( TQ3MeshVertex  )
5431 Q3Mesh_NextContourVertex (
5432     TQ3MeshIterator               *iterator
5433 );
5434 
5435 
5436 
5437 /*!
5438  *  @function
5439  *      Q3Mesh_FirstContourFace
5440  *  @discussion
5441  *      Get the first face in a mesh contour.
5442  *
5443  *  @param contour          The contour to query.
5444  *  @param iterator         Receives the mesh iterator.
5445  *  @result                 The first face in the contour.
5446  */
5447 Q3_EXTERN_API_C ( TQ3MeshFace  )
5448 Q3Mesh_FirstContourFace (
5449     TQ3MeshContour                contour,
5450     TQ3MeshIterator               *iterator
5451 );
5452 
5453 
5454 
5455 /*!
5456  *  @function
5457  *      Q3Mesh_NextContourFace
5458  *  @discussion
5459  *      Get the next face in a mesh contour.
5460  *
5461  *  @param iterator         The mesh iterator.
5462  *  @result                 The next face in the contour.
5463  */
5464 Q3_EXTERN_API_C ( TQ3MeshFace  )
5465 Q3Mesh_NextContourFace (
5466     TQ3MeshIterator               *iterator
5467 );
5468 
5469 
5470 
5471 /*!
5472 	@functiongroup	NURB Curve Functions
5473 */
5474 
5475 
5476 
5477 /*!
5478  *  @function
5479  *      Q3NURBCurve_New
5480  *  @discussion
5481  *      Create a new NURB curve geometry object.
5482  *
5483  *  @param curveData        Data describing a NURB curve.
5484  *  @result                 Reference to a new NURB curve geometry object, or NULL on failure.
5485  */
5486 Q3_EXTERN_API_C ( TQ3GeometryObject  )
5487 Q3NURBCurve_New (
5488     const TQ3NURBCurveData        *curveData
5489 );
5490 
5491 
5492 
5493 /*!
5494  *  @function
5495  *      Q3NURBCurve_Submit
5496  *  @discussion
5497  *		Submits a NURB curve for drawing, picking, bounding, or writing in immediate mode.
5498  *
5499  *		This function should only be called in a submitting loop.
5500  *
5501  *  @param curveData        Data describing a NURB curve.
5502  *  @param view             A view object.
5503  *  @result                 Success or failure of the operation.
5504  */
5505 Q3_EXTERN_API_C ( TQ3Status  )
5506 Q3NURBCurve_Submit (
5507     const TQ3NURBCurveData        *curveData,
5508     TQ3ViewObject                 view
5509 );
5510 
5511 
5512 
5513 /*!
5514  *  @function
5515  *      Q3NURBCurve_SetData
5516  *  @discussion
5517  *      Modify a NURB curve object by supplying a full new set of data.
5518  *
5519  *  @param curve            A NURB curve object.
5520  *  @param nurbCurveData    Data describing a NURB curve object.
5521  *  @result                 Success or failure of the operation.
5522  */
5523 Q3_EXTERN_API_C ( TQ3Status  )
5524 Q3NURBCurve_SetData (
5525     TQ3GeometryObject             curve,
5526     const TQ3NURBCurveData        *nurbCurveData
5527 );
5528 
5529 
5530 
5531 /*!
5532  *  @function
5533  *      Q3NURBCurve_GetData
5534  *  @discussion
5535  *      Get the data of a NURB Curve object.
5536  *
5537  *      This function may allocate memory, which should be freed using
5538  *		<code>Q3NURBCurve_EmptyData</code>.
5539  *
5540  *  @param curve            A NURB Curve object.
5541  *  @param nurbCurveData    Receives data describing the NURB Curve object.
5542  *  @result                 Success or failure of the operation.
5543  */
5544 Q3_EXTERN_API_C ( TQ3Status  )
5545 Q3NURBCurve_GetData (
5546     TQ3GeometryObject             curve,
5547     TQ3NURBCurveData              *nurbCurveData
5548 );
5549 
5550 
5551 
5552 /*!
5553  *  @function
5554  *      Q3NURBCurve_EmptyData
5555  *  @discussion
5556  *      Release memory allocated by <code>Q3NURBCurve_GetData</code>.
5557  *
5558  *  @param nurbCurveData    Data describing a NURB Curve, previously obtained with
5559  *							<code>Q3NURBCurve_GetData</code>.
5560  *  @result                 Success or failure of the operation.
5561  */
5562 Q3_EXTERN_API_C ( TQ3Status  )
5563 Q3NURBCurve_EmptyData (
5564     TQ3NURBCurveData              *nurbCurveData
5565 );
5566 
5567 
5568 
5569 /*!
5570  *  @function
5571  *      Q3NURBCurve_SetControlPoint
5572  *  @discussion
5573  *      Set a control point for a NURB curve.
5574  *
5575  *  @param curve            The NURB curve to update.
5576  *  @param pointIndex       The index of the point to update.
5577  *  @param point4D          The new control point value.
5578  *  @result                 Success or failure of the operation.
5579  */
5580 Q3_EXTERN_API_C ( TQ3Status  )
5581 Q3NURBCurve_SetControlPoint (
5582     TQ3GeometryObject             curve,
5583     TQ3Uns32                      pointIndex,
5584     const TQ3RationalPoint4D      *point4D
5585 );
5586 
5587 
5588 
5589 /*!
5590  *  @function
5591  *      Q3NURBCurve_GetControlPoint
5592  *  @discussion
5593  *      Get a control point from a NURB curve.
5594  *
5595  *  @param curve            The NURB curve to query.
5596  *  @param pointIndex       The index of the point to query.
5597  *  @param point4D          Receives the control point value.
5598  *  @result                 Success or failure of the operation.
5599  */
5600 Q3_EXTERN_API_C ( TQ3Status  )
5601 Q3NURBCurve_GetControlPoint (
5602     TQ3GeometryObject             curve,
5603     TQ3Uns32                      pointIndex,
5604     TQ3RationalPoint4D            *point4D
5605 );
5606 
5607 
5608 
5609 /*!
5610  *  @function
5611  *      Q3NURBCurve_SetKnot
5612  *  @discussion
5613  *      Set a knot for a NURB curve.
5614  *
5615  *  @param curve            The NURB curve to update.
5616  *  @param knotIndex        The index of the knot to update.
5617  *  @param knotValue        The new knot value.
5618  *  @result                 Success or failure of the operation.
5619  */
5620 Q3_EXTERN_API_C ( TQ3Status  )
5621 Q3NURBCurve_SetKnot (
5622     TQ3GeometryObject             curve,
5623     TQ3Uns32                      knotIndex,
5624     float                         knotValue
5625 );
5626 
5627 
5628 
5629 /*!
5630  *  @function
5631  *      Q3NURBCurve_GetKnot
5632  *  @discussion
5633  *      Get a knot from a NURB curve.
5634  *
5635  *  @param curve            The NURB curve to query.
5636  *  @param knotIndex        The index of the knot to query.
5637  *  @param knotValue        Receives the knot value.
5638  *  @result                 Success or failure of the operation.
5639  */
5640 Q3_EXTERN_API_C ( TQ3Status  )
5641 Q3NURBCurve_GetKnot (
5642     TQ3GeometryObject             curve,
5643     TQ3Uns32                      knotIndex,
5644     float                         *knotValue
5645 );
5646 
5647 
5648 
5649 /*!
5650 	@functiongroup	NURB Patch Functions
5651 */
5652 
5653 
5654 
5655 /*!
5656  *  @function
5657  *      Q3NURBPatch_New
5658  *  @discussion
5659  *      Create a new NURB patch geometry object.
5660  *
5661  *  @param nurbPatchData    Data describing a NURB patch.
5662  *  @result                 Reference to a new NURB patch geometry object, or NULL on failure.
5663  */
5664 Q3_EXTERN_API_C ( TQ3GeometryObject  )
5665 Q3NURBPatch_New (
5666     const TQ3NURBPatchData        *nurbPatchData
5667 );
5668 
5669 
5670 
5671 /*!
5672  *  @function
5673  *      Q3NURBPatch_Submit
5674  *  @discussion
5675  *		Submits a NURB patch for drawing, picking, bounding, or writing in immediate mode.
5676  *
5677  *		This function should only be called in a submitting loop.
5678  *
5679  *  @param nurbPatchData    Data describing a NURB patch.
5680  *  @param view             A view object.
5681  *  @result                 Success or failure of the operation.
5682  */
5683 Q3_EXTERN_API_C ( TQ3Status  )
5684 Q3NURBPatch_Submit (
5685     const TQ3NURBPatchData        *nurbPatchData,
5686     TQ3ViewObject                 view
5687 );
5688 
5689 
5690 
5691 /*!
5692  *  @function
5693  *      Q3NURBPatch_SetData
5694  *  @discussion
5695  *      Modify a NURB patch object by supplying a full new set of data.
5696  *
5697  *  @param nurbPatch        A NURB patch object.
5698  *  @param nurbPatchData    Data describing a NURB patch object.
5699  *  @result                 Success or failure of the operation.
5700  */
5701 Q3_EXTERN_API_C ( TQ3Status  )
5702 Q3NURBPatch_SetData (
5703     TQ3GeometryObject             nurbPatch,
5704     const TQ3NURBPatchData        *nurbPatchData
5705 );
5706 
5707 
5708 
5709 /*!
5710  *  @function
5711  *      Q3NURBPatch_GetData
5712  *  @discussion
5713  *      Get the data of a NURB Patch object.
5714  *
5715  *      This function may allocate memory, which should be freed using
5716  *		<code>Q3NURBPatch_EmptyData</code>.
5717  *
5718  *  @param nurbPatch        A NURB Patch object.
5719  *  @param nurbPatchData    Receives data describing the NURB Patch object.
5720  *  @result                 Success or failure of the operation.
5721  */
5722 Q3_EXTERN_API_C ( TQ3Status  )
5723 Q3NURBPatch_GetData (
5724     TQ3GeometryObject             nurbPatch,
5725     TQ3NURBPatchData              *nurbPatchData
5726 );
5727 
5728 
5729 
5730 /*!
5731  *  @function
5732  *      Q3NURBPatch_SetControlPoint
5733  *  @discussion
5734  *      Set a control point for a NURB patch.
5735  *
5736  *  @param nurbPatch        The NURB patch to update.
5737  *  @param rowIndex         The row index of the control point.
5738  *  @param columnIndex      The column index of the control point.
5739  *  @param point4D          The new control point value.
5740  *  @result                 Success or failure of the operation.
5741  */
5742 Q3_EXTERN_API_C ( TQ3Status  )
5743 Q3NURBPatch_SetControlPoint (
5744     TQ3GeometryObject             nurbPatch,
5745     TQ3Uns32                      rowIndex,
5746     TQ3Uns32                      columnIndex,
5747     const TQ3RationalPoint4D      *point4D
5748 );
5749 
5750 
5751 
5752 /*!
5753  *  @function
5754  *      Q3NURBPatch_GetControlPoint
5755  *  @discussion
5756  *      Get a control point for a NURB patch.
5757  *
5758  *  @param nurbPatch        The NURB patch to query.
5759  *  @param rowIndex         The row index of the control point.
5760  *  @param columnIndex      The column index of the control point.
5761  *  @param point4D          Receives the control point value.
5762  *  @result                 Success or failure of the operation.
5763  */
5764 Q3_EXTERN_API_C ( TQ3Status  )
5765 Q3NURBPatch_GetControlPoint (
5766     TQ3GeometryObject             nurbPatch,
5767     TQ3Uns32                      rowIndex,
5768     TQ3Uns32                      columnIndex,
5769     TQ3RationalPoint4D            *point4D
5770 );
5771 
5772 
5773 
5774 /*!
5775  *  @function
5776  *      Q3NURBPatch_SetUKnot
5777  *  @discussion
5778  *      Set a U knot for a NURB patch.
5779  *
5780  *  @param nurbPatch        The NURB patch to update.
5781  *  @param knotIndex        The index of the knot to update.
5782  *  @param knotValue        The new value for the knot.
5783  *  @result                 Success or failure of the operation.
5784  */
5785 Q3_EXTERN_API_C ( TQ3Status  )
5786 Q3NURBPatch_SetUKnot (
5787     TQ3GeometryObject             nurbPatch,
5788     TQ3Uns32                      knotIndex,
5789     float                         knotValue
5790 );
5791 
5792 
5793 
5794 /*!
5795  *  @function
5796  *      Q3NURBPatch_SetVKnot
5797  *  @discussion
5798  *      Set a K knot for a NURB patch.
5799  *
5800  *  @param nurbPatch        The NURB patch to update.
5801  *  @param knotIndex        The index of the knot to update.
5802  *  @param knotValue        The new value for the knot.
5803  *  @result                 Success or failure of the operation.
5804  */
5805 Q3_EXTERN_API_C ( TQ3Status  )
5806 Q3NURBPatch_SetVKnot (
5807     TQ3GeometryObject             nurbPatch,
5808     TQ3Uns32                      knotIndex,
5809     float                         knotValue
5810 );
5811 
5812 
5813 
5814 /*!
5815  *  @function
5816  *      Q3NURBPatch_GetUKnot
5817  *  @discussion
5818  *      Get a U knot from a NURB patch.
5819  *
5820  *  @param nurbPatch        The NURB patch to query.
5821  *  @param knotIndex        The index of the knot to query.
5822  *  @param knotValue        Rceives the knot value.
5823  *  @result                 Success or failure of the operation.
5824  */
5825 Q3_EXTERN_API_C ( TQ3Status  )
5826 Q3NURBPatch_GetUKnot (
5827     TQ3GeometryObject             nurbPatch,
5828     TQ3Uns32                      knotIndex,
5829     float                         *knotValue
5830 );
5831 
5832 
5833 
5834 /*!
5835  *  @function
5836  *      Q3NURBPatch_GetVKnot
5837  *  @discussion
5838  *      Get a V knot from a NURB patch.
5839  *
5840  *  @param nurbPatch        The NURB patch to query.
5841  *  @param knotIndex        The index of the knot to query.
5842  *  @param knotValue        Rceives the knot value.
5843  *  @result                 Success or failure of the operation.
5844  */
5845 Q3_EXTERN_API_C ( TQ3Status  )
5846 Q3NURBPatch_GetVKnot (
5847     TQ3GeometryObject             nurbPatch,
5848     TQ3Uns32                      knotIndex,
5849     float                         *knotValue
5850 );
5851 
5852 
5853 
5854 /*!
5855  *  @function
5856  *      Q3NURBPatch_EmptyData
5857  *  @discussion
5858  *      Release memory allocated by <code>Q3NURBPatch_GetData</code>.
5859  *
5860  *  @param nurbPatchData    Data describing a NURB Patch, previously obtained with
5861  *							<code>Q3NURBPatch_GetData</code>.
5862  *  @result                 Success or failure of the operation.
5863  */
5864 Q3_EXTERN_API_C ( TQ3Status  )
5865 Q3NURBPatch_EmptyData (
5866     TQ3NURBPatchData              *nurbPatchData
5867 );
5868 
5869 
5870 
5871 /*!
5872 	@functiongroup	Pixmap Marker Functions
5873 */
5874 
5875 
5876 
5877 /*!
5878  *  @function
5879  *      Q3PixmapMarker_New
5880  *  @discussion
5881  *      Create a new pixmap marker geometry object.
5882  *
5883  *  @param pixmapMarkerData Data describing a pixmap marker.
5884  *  @result                 Reference to a new pixmap marker geometry object, or NULL on failure.
5885  */
5886 Q3_EXTERN_API_C ( TQ3GeometryObject  )
5887 Q3PixmapMarker_New (
5888     const TQ3PixmapMarkerData     *pixmapMarkerData
5889 );
5890 
5891 
5892 
5893 /*!
5894  *  @function
5895  *      Q3PixmapMarker_Submit
5896  *  @discussion
5897  *		Submits a pixmap marker for drawing, picking, bounding, or writing in immediate mode.
5898  *
5899  *		This function should only be called in a submitting loop.
5900  *
5901  *  @param pixmapMarkerData Data describing a pixmap marker.
5902  *  @param view             A view object.
5903  *  @result                 Success or failure of the operation.
5904  */
5905 Q3_EXTERN_API_C ( TQ3Status  )
5906 Q3PixmapMarker_Submit (
5907     const TQ3PixmapMarkerData     *pixmapMarkerData,
5908     TQ3ViewObject                 view
5909 );
5910 
5911 
5912 
5913 /*!
5914  *  @function
5915  *      Q3PixmapMarker_SetData
5916  *  @discussion
5917  *      Modify a pixmap marker object by supplying a full new set of data.
5918  *
5919  *  @param geometry         A pixmap marker object.
5920  *  @param pixmapMarkerData Data describing a pixmap marker object.
5921  *  @result                 Success or failure of the operation.
5922  */
5923 Q3_EXTERN_API_C ( TQ3Status  )
5924 Q3PixmapMarker_SetData (
5925     TQ3GeometryObject             geometry,
5926     const TQ3PixmapMarkerData     *pixmapMarkerData
5927 );
5928 
5929 
5930 
5931 /*!
5932  *  @function
5933  *      Q3PixmapMarker_GetData
5934  *  @discussion
5935  *      Get the data of a Pixmap Marker object.
5936  *
5937  *      This function may allocate memory, which should be freed using
5938  *		<code>Q3PixmapMarker_EmptyData</code>.
5939  *
5940  *  @param geometry         A Pixmap Marker object.
5941  *  @param pixmapMarkerData Receives data describing the Pixmap Marker object.
5942  *  @result                 Success or failure of the operation.
5943  */
5944 Q3_EXTERN_API_C ( TQ3Status  )
5945 Q3PixmapMarker_GetData (
5946     TQ3GeometryObject             geometry,
5947     TQ3PixmapMarkerData           *pixmapMarkerData
5948 );
5949 
5950 
5951 
5952 /*!
5953  *  @function
5954  *      Q3PixmapMarker_EmptyData
5955  *  @discussion
5956  *      Release memory allocated by <code>Q3PixmapMarker_GetData</code>.
5957  *
5958  *  @param pixmapMarkerData Data describing a Pixmap Marker, previously obtained with
5959  *							<code>Q3PixmapMarker_GetData</code>.
5960  *  @result                 Success or failure of the operation.
5961  */
5962 Q3_EXTERN_API_C ( TQ3Status  )
5963 Q3PixmapMarker_EmptyData (
5964     TQ3PixmapMarkerData           *pixmapMarkerData
5965 );
5966 
5967 
5968 
5969 /*!
5970  *  @function
5971  *      Q3PixmapMarker_GetPosition
5972  *  @discussion
5973  *      Get the position of the pixmap marker in world coordinates.
5974  *
5975  *  @param pixmapMarker		A pixmap marker object.
5976  *  @param position         Receives the position of the pixmap marker.
5977  *  @result                 Success or failure of the operation.
5978  */
5979 Q3_EXTERN_API_C ( TQ3Status  )
5980 Q3PixmapMarker_GetPosition (
5981     TQ3GeometryObject             pixmapMarker,
5982     TQ3Point3D                    *position
5983 );
5984 
5985 
5986 
5987 /*!
5988  *  @function
5989  *      Q3PixmapMarker_SetPosition
5990  *  @discussion
5991  *      Change the position of a pixmap marker object.
5992  *
5993  *  @param pixmapMarker		A pixmap marker object.
5994  *  @param position         New position of the pixmap marker in world coordinates.
5995  *  @result                 Success or failure of the operation.
5996  */
5997 Q3_EXTERN_API_C ( TQ3Status  )
5998 Q3PixmapMarker_SetPosition (
5999     TQ3GeometryObject             pixmapMarker,
6000     const TQ3Point3D              *position
6001 );
6002 
6003 
6004 
6005 /*!
6006  *  @function
6007  *      Q3PixmapMarker_GetXOffset
6008  *  @discussion
6009  *      Get the horizontal offset, in screen pixels, from the marker position to
6010  *		the upper left corner of the marker image.
6011  *
6012  *  @param pixmapMarker		A pixmap marker object.
6013  *  @param xOffset          Receives the horizontal offset of the marker in pixels.
6014  *  @result                 Success or failure of the operation.
6015  */
6016 Q3_EXTERN_API_C ( TQ3Status  )
6017 Q3PixmapMarker_GetXOffset (
6018     TQ3GeometryObject             pixmapMarker,
6019     TQ3Int32                      *xOffset
6020 );
6021 
6022 
6023 
6024 /*!
6025  *  @function
6026  *      Q3PixmapMarker_SetXOffset
6027  *  @discussion
6028  *      Set the horizontal offset, in screen pixels, from the marker position to
6029  *		the upper left corner of the marker image.
6030  *
6031  *  @param pixmapMarker		A pixmap marker object.
6032  *  @param xOffset          The horizontal offset of the marker in pixels.
6033  *  @result                 Success or failure of the operation.
6034  */
6035 Q3_EXTERN_API_C ( TQ3Status  )
6036 Q3PixmapMarker_SetXOffset (
6037     TQ3GeometryObject             pixmapMarker,
6038     TQ3Int32                      xOffset
6039 );
6040 
6041 
6042 
6043 /*!
6044  *  @function
6045  *      Q3PixmapMarker_GetYOffset
6046  *  @discussion
6047  *      Get the vertical offset, in screen pixels, from the marker position to
6048  *		the upper left corner of the marker image.
6049  *
6050  *  @param pixmapMarker		A pixmap marker object.
6051  *  @param yOffset          Receives the vertical offset of the marker in pixels.
6052  *  @result                 Success or failure of the operation.
6053  */
6054 Q3_EXTERN_API_C ( TQ3Status  )
6055 Q3PixmapMarker_GetYOffset (
6056     TQ3GeometryObject             pixmapMarker,
6057     TQ3Int32                      *yOffset
6058 );
6059 
6060 
6061 
6062 /*!
6063  *  @function
6064  *      Q3PixmapMarker_SetYOffset
6065  *  @discussion
6066  *      Set the vertical offset, in screen pixels, from the marker position to
6067  *		the upper left corner of the marker image.
6068  *
6069  *  @param pixmapMarker		A pixmap marker object.
6070  *  @param yOffset          The vertical offset of the marker in pixels.
6071  *  @result                 Success or failure of the operation.
6072  */
6073 Q3_EXTERN_API_C ( TQ3Status  )
6074 Q3PixmapMarker_SetYOffset (
6075     TQ3GeometryObject             pixmapMarker,
6076     TQ3Int32                      yOffset
6077 );
6078 
6079 
6080 
6081 /*!
6082  *  @function
6083  *      Q3PixmapMarker_GetPixmap
6084  *  @discussion
6085  *      Get a copy of the pixmap used within a pixmap marker, including
6086  *		a new reference to the image storage.
6087  *
6088  *  @param pixmapMarker		A pixmap marker object.
6089  *  @param pixmap           Receives the pixmap structure of the marker.
6090  *  @result                 Success or failure of the operation.
6091  */
6092 Q3_EXTERN_API_C ( TQ3Status  )
6093 Q3PixmapMarker_GetPixmap (
6094     TQ3GeometryObject             pixmapMarker,
6095     TQ3StoragePixmap              *pixmap
6096 );
6097 
6098 
6099 
6100 /*!
6101  *  @function
6102  *      Q3PixmapMarker_SetPixmap
6103  *  @discussion
6104  *      Change the pixmap used by a pixmap marker.  The function makes a copy of the data,
6105  *		including incrementing the reference count of the image storage.
6106  *
6107  *  @param pixmapMarker		A pixmap marker object.
6108  *  @param pixmap           New pixmap to be used by the marker.
6109  *  @result                 Success or failure of the operation.
6110  */
6111 Q3_EXTERN_API_C ( TQ3Status  )
6112 Q3PixmapMarker_SetPixmap (
6113     TQ3GeometryObject             pixmapMarker,
6114     const TQ3StoragePixmap        *pixmap
6115 );
6116 
6117 
6118 
6119 /*!
6120 	@functiongroup	Point Functions
6121 */
6122 
6123 
6124 
6125 /*!
6126  *  @function
6127  *      Q3Point_New
6128  *  @discussion
6129  *      Create a new point geometry object.
6130  *
6131  *		If you pass NULL instead of a data pointer, you will get a point disk, at (0, 0, 0).
6132  *		<em>This behavior was not present in QuickDraw 3D.</em>
6133  *
6134  *  @param pointData        Data describing a point, or NULL.
6135  *  @result                 Reference to a new Point geometry object, or NULL on failure.
6136  */
6137 Q3_EXTERN_API_C ( TQ3GeometryObject  )
6138 Q3Point_New (
6139     const TQ3PointData            *pointData
6140 );
6141 
6142 
6143 
6144 /*!
6145  *  @function
6146  *      Q3Point_Submit
6147  *  @discussion
6148  *		Submits a point for drawing, picking, bounding, or writing in immediate mode.
6149  *
6150  *		This function should only be called in a submitting loop.
6151  *
6152  *  @param pointData        Data describing a point.
6153  *  @param view             A view object.
6154  *  @result                 Success or failure of the operation.
6155  */
6156 Q3_EXTERN_API_C ( TQ3Status  )
6157 Q3Point_Submit (
6158     const TQ3PointData            *pointData,
6159     TQ3ViewObject                 view
6160 );
6161 
6162 
6163 
6164 /*!
6165  *  @function
6166  *      Q3Point_GetData
6167  *  @discussion
6168  *      Get the data of a Point object.
6169  *
6170  *      This function may allocate memory, which should be freed using
6171  *		<code>Q3Point_EmptyData</code>.
6172  *
6173  *  @param point            A Point object.
6174  *  @param pointData        Receives data describing the Point object.
6175  *  @result                 Success or failure of the operation.
6176  */
6177 Q3_EXTERN_API_C ( TQ3Status  )
6178 Q3Point_GetData (
6179     TQ3GeometryObject             point,
6180     TQ3PointData                  *pointData
6181 );
6182 
6183 
6184 
6185 /*!
6186  *  @function
6187  *      Q3Point_SetData
6188  *  @discussion
6189  *      Modify a point object by supplying a full new set of data.
6190  *
6191  *  @param point            A point object
6192  *  @param pointData        Data describing a point object.
6193  *  @result                 Success or failure of the operation.
6194  */
6195 Q3_EXTERN_API_C ( TQ3Status  )
6196 Q3Point_SetData (
6197     TQ3GeometryObject             point,
6198     const TQ3PointData            *pointData
6199 );
6200 
6201 
6202 
6203 /*!
6204  *  @function
6205  *      Q3Point_EmptyData
6206  *  @discussion
6207  *      Release memory allocated by <code>Q3Point_GetData</code>.
6208  *
6209  *  @param pointData        Data describing a Point, previously obtained with
6210  *							<code>Q3Point_GetData</code>.
6211  *  @result                 Success or failure of the operation.
6212  */
6213 Q3_EXTERN_API_C ( TQ3Status  )
6214 Q3Point_EmptyData (
6215     TQ3PointData                  *pointData
6216 );
6217 
6218 
6219 
6220 /*!
6221  *  @function
6222  *      Q3Point_SetPosition
6223  *  @discussion
6224  *      Change the position of a point object.
6225  *
6226  *  @param point            A point object.
6227  *  @param position         New position for the point.
6228  *  @result                 Success or failure of the operation.
6229  */
6230 Q3_EXTERN_API_C ( TQ3Status  )
6231 Q3Point_SetPosition (
6232     TQ3GeometryObject             point,
6233     const TQ3Point3D              *position
6234 );
6235 
6236 
6237 
6238 /*!
6239  *  @function
6240  *      Q3Point_GetPosition
6241  *  @discussion
6242  *      Get the position of a point object.
6243  *
6244  *  @param point            A point object.
6245  *  @param position         Receives the position of the point.
6246  *  @result                 Success or failure of the operation.
6247  */
6248 Q3_EXTERN_API_C ( TQ3Status  )
6249 Q3Point_GetPosition (
6250     TQ3GeometryObject             point,
6251     TQ3Point3D                    *position
6252 );
6253 
6254 
6255 
6256 /*!
6257 	@functiongroup	Polygon Functions
6258 */
6259 
6260 
6261 
6262 /*!
6263  *  @function
6264  *      Q3Polygon_New
6265  *  @discussion
6266  *      Create a new polygon geometry object.
6267  *
6268  *  @param polygonData      Data describing a polygon.
6269  *  @result                 Reference to a new Polygon geometry object, or NULL on failure.
6270  */
6271 Q3_EXTERN_API_C ( TQ3GeometryObject  )
6272 Q3Polygon_New (
6273     const TQ3PolygonData          *polygonData
6274 );
6275 
6276 
6277 
6278 /*!
6279  *  @function
6280  *      Q3Polygon_Submit
6281  *  @discussion
6282  *		Submits a polygon for drawing, picking, bounding, or writing in immediate mode.
6283  *
6284  *		This function should only be called in a submitting loop.
6285  *
6286  *  @param polygonData      Data describing a polygon.
6287  *  @param view             A view object.
6288  *  @result                 Success or failure of the operation.
6289  */
6290 Q3_EXTERN_API_C ( TQ3Status  )
6291 Q3Polygon_Submit (
6292     const TQ3PolygonData          *polygonData,
6293     TQ3ViewObject                 view
6294 );
6295 
6296 
6297 
6298 /*!
6299  *  @function
6300  *      Q3Polygon_SetData
6301  *  @discussion
6302  *      Modify a polygon object by supplying a full new set of data.
6303  *
6304  *  @param polygon          A polygon object.
6305  *  @param polygonData      Data describing a polygon.
6306  *  @result                 Success or failure of the operation.
6307  */
6308 Q3_EXTERN_API_C ( TQ3Status  )
6309 Q3Polygon_SetData (
6310     TQ3GeometryObject             polygon,
6311     const TQ3PolygonData          *polygonData
6312 );
6313 
6314 
6315 
6316 /*!
6317  *  @function
6318  *      Q3Polygon_GetData
6319  *  @discussion
6320  *      Get the data of a Polygon object.
6321  *
6322  *      This function may allocate memory, which should be freed using
6323  *		<code>Q3Polygon_EmptyData</code>.
6324  *
6325  *  @param polygon          A Polygon object.
6326  *  @param polygonData      Receives data describing the Polygon object.
6327  *  @result                 Success or failure of the operation.
6328  */
6329 Q3_EXTERN_API_C ( TQ3Status  )
6330 Q3Polygon_GetData (
6331     TQ3GeometryObject             polygon,
6332     TQ3PolygonData                *polygonData
6333 );
6334 
6335 
6336 
6337 /*!
6338  *  @function
6339  *      Q3Polygon_EmptyData
6340  *  @discussion
6341  *      Release memory allocated by <code>Q3Polygon_GetData</code>.
6342  *
6343  *  @param polygonData      Data describing a Polygon, previously obtained with
6344  *							<code>Q3Polygon_GetData</code>.
6345  *  @result                 Success or failure of the operation.
6346  */
6347 Q3_EXTERN_API_C ( TQ3Status  )
6348 Q3Polygon_EmptyData (
6349     TQ3PolygonData                *polygonData
6350 );
6351 
6352 
6353 
6354 /*!
6355  *  @function
6356  *      Q3Polygon_GetVertexPosition
6357  *  @discussion
6358  *      Get the 3D position of a vertex of a polygon object.
6359  *
6360  *  @param polygon          A polygon object.
6361  *  @param index            A 0-based index into the array of vertices of the polygon.
6362  *  @param point            Receives the position of the vertex.
6363  *  @result                 Success or failure of the operation.
6364  */
6365 Q3_EXTERN_API_C ( TQ3Status  )
6366 Q3Polygon_GetVertexPosition (
6367     TQ3GeometryObject             polygon,
6368     TQ3Uns32                      index,
6369     TQ3Point3D                    *point
6370 );
6371 
6372 
6373 
6374 /*!
6375  *  @function
6376  *      Q3Polygon_SetVertexPosition
6377  *  @discussion
6378  *      Change the 3D position of a vertex of a polygon object.
6379  *
6380  *  @param polygon          A polygon object.
6381  *  @param index            A 0-based index into the array of vertices of the polygon.
6382  *  @param point            New position of the vertex.
6383  *  @result                 Success or failure of the operation.
6384  */
6385 Q3_EXTERN_API_C ( TQ3Status  )
6386 Q3Polygon_SetVertexPosition (
6387     TQ3GeometryObject             polygon,
6388     TQ3Uns32                      index,
6389     const TQ3Point3D              *point
6390 );
6391 
6392 
6393 
6394 /*!
6395  *  @function
6396  *      Q3Polygon_GetVertexAttributeSet
6397  *  @discussion
6398  *      Get the attribute set of a vertex in a polygon object.
6399  *
6400  *  @param polygon          A polygon object.
6401  *  @param index            A 0-based index into the array of vertices of the polygon.
6402  *  @param attributeSet     Receives a new reference to the attribute set, or NULL.
6403  *  @result                 Success or failure of the operation.
6404  */
6405 Q3_EXTERN_API_C ( TQ3Status  )
6406 Q3Polygon_GetVertexAttributeSet (
6407     TQ3GeometryObject             polygon,
6408     TQ3Uns32                      index,
6409     TQ3AttributeSet               *attributeSet
6410 );
6411 
6412 
6413 
6414 /*!
6415  *  @function
6416  *      Q3Polygon_SetVertexAttributeSet
6417  *  @discussion
6418  *      Change the attribute set of a vertex in a polygon object.
6419  *
6420  *  @param polygon          A polygon object.
6421  *  @param index            A 0-based index into the array of vertices of the polygon.
6422  *  @param attributeSet     New attribute set for the vertex.
6423  *  @result                 Success or failure of the operation.
6424  */
6425 Q3_EXTERN_API_C ( TQ3Status  )
6426 Q3Polygon_SetVertexAttributeSet (
6427     TQ3GeometryObject             polygon,
6428     TQ3Uns32                      index,
6429     TQ3AttributeSet               attributeSet
6430 );
6431 
6432 
6433 
6434 /*!
6435 	@functiongroup	Polyhedron Functions
6436 */
6437 
6438 
6439 
6440 /*!
6441  *  @function
6442  *      Q3Polyhedron_New
6443  *  @discussion
6444  *      Create a new polyhedron geometry object.
6445  *
6446  *  @param polyhedronData   Data describing a polyhedron.
6447  *  @result                 Reference to a new Polyhedron geometry object, or NULL on failure.
6448  */
6449 Q3_EXTERN_API_C ( TQ3GeometryObject  )
6450 Q3Polyhedron_New (
6451     const TQ3PolyhedronData       *polyhedronData
6452 );
6453 
6454 
6455 
6456 /*!
6457  *  @function
6458  *      Q3Polyhedron_Submit
6459  *  @discussion
6460  *		Submits a polyhedron for drawing, picking, bounding, or writing in immediate mode.
6461  *
6462  *		This function should only be called in a submitting loop.
6463  *
6464  *  @param polyhedronData   Data describing a polyhedron.
6465  *  @param view             A view object.
6466  *  @result                 Success or failure of the operation.
6467  */
6468 Q3_EXTERN_API_C ( TQ3Status  )
6469 Q3Polyhedron_Submit (
6470     const TQ3PolyhedronData       *polyhedronData,
6471     TQ3ViewObject                 view
6472 );
6473 
6474 
6475 
6476 /*!
6477  *  @function
6478  *      Q3Polyhedron_SetData
6479  *  @discussion
6480  *      Modify a polyhedron object by supplying a full new set of data.
6481  *
6482  *  @param polyhedron       A polyhedron object.
6483  *  @param polyhedronData   Data describing a polyhedron.
6484  *  @result                 Success or failure of the operation.
6485  */
6486 Q3_EXTERN_API_C ( TQ3Status  )
6487 Q3Polyhedron_SetData (
6488     TQ3GeometryObject             polyhedron,
6489     const TQ3PolyhedronData       *polyhedronData
6490 );
6491 
6492 
6493 
6494 /*!
6495  *  @function
6496  *      Q3Polyhedron_GetData
6497  *  @discussion
6498  *      Get the data of a Polyhedron object.
6499  *
6500  *      This function may allocate memory, which should be freed using
6501  *		<code>Q3Polyhedron_EmptyData</code>.
6502  *
6503  *  @param polyhedron       A Polyhedron object.
6504  *  @param polyhedronData   Receives data describing the Polyhedron object.
6505  *  @result                 Success or failure of the operation.
6506  */
6507 Q3_EXTERN_API_C ( TQ3Status  )
6508 Q3Polyhedron_GetData (
6509     TQ3GeometryObject             polyhedron,
6510     TQ3PolyhedronData             *polyhedronData
6511 );
6512 
6513 
6514 
6515 /*!
6516  *  @function
6517  *      Q3Polyhedron_EmptyData
6518  *  @discussion
6519  *      Release memory allocated by <code>Q3Polyhedron_GetData</code>.
6520  *
6521  *  @param polyhedronData   Data describing a Polyhedron, previously obtained with
6522  *							<code>Q3Polyhedron_GetData</code>.
6523  *  @result                 Success or failure of the operation.
6524  */
6525 Q3_EXTERN_API_C ( TQ3Status  )
6526 Q3Polyhedron_EmptyData (
6527     TQ3PolyhedronData             *polyhedronData
6528 );
6529 
6530 
6531 
6532 /*!
6533  *  @function
6534  *      Q3Polyhedron_SetVertexPosition
6535  *  @discussion
6536  *      Set the position of a polyhedron vertex.
6537  *
6538  *  @param polyhedron       The polyhedron to update.
6539  *  @param index            The index of the vertex to update.
6540  *  @param point            The new position for the vertex.
6541  *  @result                 Success or failure of the operation.
6542  */
6543 Q3_EXTERN_API_C ( TQ3Status  )
6544 Q3Polyhedron_SetVertexPosition (
6545     TQ3GeometryObject             polyhedron,
6546     TQ3Uns32                      index,
6547     const TQ3Point3D              *point
6548 );
6549 
6550 
6551 
6552 /*!
6553  *  @function
6554  *      Q3Polyhedron_GetVertexPosition
6555  *  @discussion
6556  *      Get the position of a polyhedron vertex.
6557  *
6558  *  @param polyhedron       The polyhedron to query.
6559  *  @param index            The index of the vertex to query.
6560  *  @param point            Receives the position of the vertex.
6561  *  @result                 Success or failure of the operation.
6562  */
6563 Q3_EXTERN_API_C ( TQ3Status  )
6564 Q3Polyhedron_GetVertexPosition (
6565     TQ3GeometryObject             polyhedron,
6566     TQ3Uns32                      index,
6567     TQ3Point3D                    *point
6568 );
6569 
6570 
6571 
6572 /*!
6573  *  @function
6574  *      Q3Polyhedron_SetVertexAttributeSet
6575  *  @discussion
6576  *      Set the attribute set of a polyhedron vertex.
6577  *
6578  *  @param polyhedron       The polyhedron to update.
6579  *  @param index            The index of the vertex to update.
6580  *  @param attributeSet     The new attribute set for the vertex.
6581  *  @result                 Success or failure of the operation.
6582  */
6583 Q3_EXTERN_API_C ( TQ3Status  )
6584 Q3Polyhedron_SetVertexAttributeSet (
6585     TQ3GeometryObject             polyhedron,
6586     TQ3Uns32                      index,
6587     TQ3AttributeSet               attributeSet
6588 );
6589 
6590 
6591 
6592 /*!
6593  *  @function
6594  *      Q3Polyhedron_GetVertexAttributeSet
6595  *  @discussion
6596  *      Get the position of a polyhedron vertex.
6597  *
6598  *  @param polyhedron       The polyhedron to query.
6599  *  @param index            The index of the vertex to query.
6600  *  @param attributeSet     Receives the attribute set of the vertex.
6601  *  @result                 Success or failure of the operation.
6602  */
6603 Q3_EXTERN_API_C ( TQ3Status  )
6604 Q3Polyhedron_GetVertexAttributeSet (
6605     TQ3GeometryObject             polyhedron,
6606     TQ3Uns32                      index,
6607     TQ3AttributeSet               *attributeSet
6608 );
6609 
6610 
6611 
6612 /*!
6613  *  @function
6614  *      Q3Polyhedron_GetTriangleData
6615  *  @discussion
6616  *      Get the data of a polyhedron triangle.
6617  *
6618  *  @param polyhedron       The polyhedron to query.
6619  *  @param triangleIndex    The index of the triangle to query.
6620  *  @param triangleData     Receives the data of the triangle.
6621  *  @result                 Success or failure of the operation.
6622  */
6623 Q3_EXTERN_API_C ( TQ3Status  )
6624 Q3Polyhedron_GetTriangleData (
6625     TQ3GeometryObject             polyhedron,
6626     TQ3Uns32                      triangleIndex,
6627     TQ3PolyhedronTriangleData     *triangleData
6628 );
6629 
6630 
6631 
6632 /*!
6633  *  @function
6634  *      Q3Polyhedron_SetTriangleData
6635  *  @discussion
6636  *      Set the data of a polyhedron triangle.
6637  *
6638  *  @param polyhedron       The polyhedron to update.
6639  *  @param triangleIndex    The index of the triangle to update.
6640  *  @param triangleData     The new data for the triangle.
6641  *  @result                 Success or failure of the operation.
6642  */
6643 Q3_EXTERN_API_C ( TQ3Status  )
6644 Q3Polyhedron_SetTriangleData (
6645     TQ3GeometryObject             polyhedron,
6646     TQ3Uns32                      triangleIndex,
6647     const TQ3PolyhedronTriangleData *triangleData
6648 );
6649 
6650 
6651 
6652 /*!
6653  *  @function
6654  *      Q3Polyhedron_GetEdgeData
6655  *  @discussion
6656  *      Get the data of a polyhedron edge.
6657  *
6658  *  @param polyhedron       The polyhedron to query.
6659  *  @param edgeIndex        The index of the edge to query.
6660  *  @param edgeData         Receives the data of the edge.
6661  *  @result                 Success or failure of the operation.
6662  */
6663 Q3_EXTERN_API_C ( TQ3Status  )
6664 Q3Polyhedron_GetEdgeData (
6665     TQ3GeometryObject             polyhedron,
6666     TQ3Uns32                      edgeIndex,
6667     TQ3PolyhedronEdgeData         *edgeData
6668 );
6669 
6670 
6671 
6672 /*!
6673  *  @function
6674  *      Q3Polyhedron_SetEdgeData
6675  *  @discussion
6676  *      Set the data of a polyhedron edge.
6677  *
6678  *  @param polyhedron       The polyhedron to update.
6679  *  @param edgeIndex        The index of the edge to update.
6680  *  @param edgeData         The new data for the edge.
6681  *  @result                 Success or failure of the operation.
6682  */
6683 Q3_EXTERN_API_C ( TQ3Status  )
6684 Q3Polyhedron_SetEdgeData (
6685     TQ3GeometryObject             polyhedron,
6686     TQ3Uns32                      edgeIndex,
6687     const TQ3PolyhedronEdgeData   *edgeData
6688 );
6689 
6690 
6691 
6692 /*!
6693 	@functiongroup	PolyLine Functions
6694 */
6695 
6696 
6697 
6698 /*!
6699  *  @function
6700  *      Q3PolyLine_New
6701  *  @discussion
6702  *      Create a new polyline geometry object.
6703  *
6704  *  @param polylineData     Data describing a polyline.
6705  *  @result                 Reference to a new Polyline geometry object, or NULL on failure.
6706  */
6707 Q3_EXTERN_API_C ( TQ3GeometryObject  )
6708 Q3PolyLine_New (
6709     const TQ3PolyLineData         *polylineData
6710 );
6711 
6712 
6713 
6714 /*!
6715  *  @function
6716  *      Q3PolyLine_Submit
6717  *  @discussion
6718  *		Submits a PolyLine for drawing, picking, bounding, or writing in immediate mode.
6719  *
6720  *		This function should only be called in a submitting loop.
6721  *
6722  *  @param polyLineData     Data describing a PolyLine.
6723  *  @param view             A view object.
6724  *  @result                 Success or failure of the operation.
6725  */
6726 Q3_EXTERN_API_C ( TQ3Status  )
6727 Q3PolyLine_Submit (
6728     const TQ3PolyLineData         *polyLineData,
6729     TQ3ViewObject                 view
6730 );
6731 
6732 
6733 
6734 /*!
6735  *  @function
6736  *      Q3PolyLine_SetData
6737  *  @discussion
6738  *      Modify a PolyLine object by supplying a full new set of data.
6739  *
6740  *  @param polyLine         A PolyLine object.
6741  *  @param polyLineData     Data describing a PolyLine.
6742  *  @result                 Success or failure of the operation.
6743  */
6744 Q3_EXTERN_API_C ( TQ3Status  )
6745 Q3PolyLine_SetData (
6746     TQ3GeometryObject             polyLine,
6747     const TQ3PolyLineData         *polyLineData
6748 );
6749 
6750 
6751 
6752 /*!
6753  *  @function
6754  *      Q3PolyLine_GetData
6755  *  @discussion
6756  *      Get the data of a PolyLine object.
6757  *
6758  *      This function may allocate memory, which should be freed using
6759  *		<code>Q3PolyLine_EmptyData</code>.
6760  *
6761  *  @param polyLine         A PolyLine object.
6762  *  @param polyLineData     Receives data describing the PolyLine object.
6763  *  @result                 Success or failure of the operation.
6764  */
6765 Q3_EXTERN_API_C ( TQ3Status  )
6766 Q3PolyLine_GetData (
6767     TQ3GeometryObject             polyLine,
6768     TQ3PolyLineData               *polyLineData
6769 );
6770 
6771 
6772 
6773 /*!
6774  *  @function
6775  *      Q3PolyLine_EmptyData
6776  *  @discussion
6777  *      Release memory allocated by <code>Q3PolyLine_GetData</code>.
6778  *
6779  *  @param polyLineData     Data describing a PolyLine, previously obtained with
6780  *							<code>Q3PolyLine_GetData</code>.
6781  *  @result                 Success or failure of the operation.
6782  */
6783 Q3_EXTERN_API_C ( TQ3Status  )
6784 Q3PolyLine_EmptyData (
6785     TQ3PolyLineData               *polyLineData
6786 );
6787 
6788 
6789 
6790 /*!
6791  *  @function
6792  *      Q3PolyLine_GetVertexPosition
6793  *  @discussion
6794  *      Get the position of a polyline vertex.
6795  *
6796  *  @param polyLine         The polyline to query.
6797  *  @param index            The index of the vertex to query.
6798  *  @param position         Receives the position of the polyline vertex.
6799  *  @result                 Success or failure of the operation.
6800  */
6801 Q3_EXTERN_API_C ( TQ3Status  )
6802 Q3PolyLine_GetVertexPosition (
6803     TQ3GeometryObject             polyLine,
6804     TQ3Uns32                      index,
6805     TQ3Point3D                    *position
6806 );
6807 
6808 
6809 
6810 /*!
6811  *  @function
6812  *      Q3PolyLine_SetVertexPosition
6813  *  @discussion
6814  *      Set the position of a polyline vertex.
6815  *
6816  *  @param polyLine         The polyline to update.
6817  *  @param index            The index of the vertex to update.
6818  *  @param position         The new position for the polyline vertex.
6819  *  @result                 Success or failure of the operation.
6820  */
6821 Q3_EXTERN_API_C ( TQ3Status  )
6822 Q3PolyLine_SetVertexPosition (
6823     TQ3GeometryObject             polyLine,
6824     TQ3Uns32                      index,
6825     const TQ3Point3D              *position
6826 );
6827 
6828 
6829 
6830 /*!
6831  *  @function
6832  *      Q3PolyLine_GetVertexAttributeSet
6833  *  @discussion
6834  *      Get the attribute set of a polyline vertex.
6835  *
6836  *  @param polyLine         The polyline to query.
6837  *  @param index            The index of the vertex to query.
6838  *  @param attributeSet     Receives the attribute set of the polyline vertex.
6839  *  @result                 Success or failure of the operation.
6840  */
6841 Q3_EXTERN_API_C ( TQ3Status  )
6842 Q3PolyLine_GetVertexAttributeSet (
6843     TQ3GeometryObject             polyLine,
6844     TQ3Uns32                      index,
6845     TQ3AttributeSet               *attributeSet
6846 );
6847 
6848 
6849 
6850 /*!
6851  *  @function
6852  *      Q3PolyLine_SetVertexAttributeSet
6853  *  @discussion
6854  *      Set the attribute set of a polyline vertex.
6855  *
6856  *  @param polyLine         The polyline to update.
6857  *  @param index            The index of the vertex to update.
6858  *  @param attributeSet     The new attribute set for the polyline vertex.
6859  *  @result                 Success or failure of the operation.
6860  */
6861 Q3_EXTERN_API_C ( TQ3Status  )
6862 Q3PolyLine_SetVertexAttributeSet (
6863     TQ3GeometryObject             polyLine,
6864     TQ3Uns32                      index,
6865     TQ3AttributeSet               attributeSet
6866 );
6867 
6868 
6869 
6870 /*!
6871  *  @function
6872  *      Q3PolyLine_GetSegmentAttributeSet
6873  *  @discussion
6874  *      Get the attribute set of a polyline segment.
6875  *
6876  *  @param polyLine         The polyline to query.
6877  *  @param index            The index of the segment to query.
6878  *  @param attributeSet     Receives the attribute set of the polyline segment.
6879  *  @result                 Success or failure of the operation.
6880  */
6881 Q3_EXTERN_API_C ( TQ3Status  )
6882 Q3PolyLine_GetSegmentAttributeSet (
6883     TQ3GeometryObject             polyLine,
6884     TQ3Uns32                      index,
6885     TQ3AttributeSet               *attributeSet
6886 );
6887 
6888 
6889 
6890 /*!
6891  *  @function
6892  *      Q3PolyLine_SetSegmentAttributeSet
6893  *  @discussion
6894  *      Set the attribute set of a polyline segment.
6895  *
6896  *  @param polyLine         The polyline to update.
6897  *  @param index            The index of the segment to update.
6898  *  @param attributeSet     The new attribute set for the polyline segment.
6899  *  @result                 Success or failure of the operation.
6900  */
6901 Q3_EXTERN_API_C ( TQ3Status  )
6902 Q3PolyLine_SetSegmentAttributeSet (
6903     TQ3GeometryObject             polyLine,
6904     TQ3Uns32                      index,
6905     TQ3AttributeSet               attributeSet
6906 );
6907 
6908 
6909 
6910 /*!
6911 	@functiongroup	Torus Functions
6912 */
6913 
6914 
6915 
6916 /*!
6917  *  @function
6918  *      Q3Torus_New
6919  *  @discussion
6920  *      Create a new torus geometry object.
6921  *
6922  *		If you pass NULL, you will get a default torus with orientation (1, 0, 0), major axis
6923  *		(0, 1, 0), minor axis (0, 0, 1), origin (0, 0, 0), and ratio 1.  <em>This behavior was
6924  *		not present in QuickDraw 3D.</em>
6925  *
6926  *  @param torusData        Data describing a torus, or NULL.
6927  *  @result                 Reference to a new Torus geometry object, or NULL on failure.
6928  */
6929 Q3_EXTERN_API_C ( TQ3GeometryObject  )
6930 Q3Torus_New (
6931     const TQ3TorusData            *torusData
6932 );
6933 
6934 
6935 
6936 /*!
6937  *  @function
6938  *      Q3Torus_Submit
6939  *  @discussion
6940  *		Submits a torus for drawing, picking, bounding, or writing in immediate mode.
6941  *
6942  *		This function should only be called in a submitting loop.
6943  *
6944  *  @param torusData        Data describing a torus.
6945  *  @param view             A view object.
6946  *  @result                 Success or failure of the operation.
6947  */
6948 Q3_EXTERN_API_C ( TQ3Status  )
6949 Q3Torus_Submit (
6950     const TQ3TorusData            *torusData,
6951     TQ3ViewObject                 view
6952 );
6953 
6954 
6955 
6956 /*!
6957  *  @function
6958  *      Q3Torus_SetData
6959  *  @discussion
6960  *      Modify a torus object by supplying a full new set of data.
6961  *
6962  *  @param torus            A torus object.
6963  *  @param torusData        Data describing a torus.
6964  *  @result                 Success or failure of the operation.
6965  */
6966 Q3_EXTERN_API_C ( TQ3Status  )
6967 Q3Torus_SetData (
6968     TQ3GeometryObject             torus,
6969     const TQ3TorusData            *torusData
6970 );
6971 
6972 
6973 
6974 /*!
6975  *  @function
6976  *      Q3Torus_GetData
6977  *  @discussion
6978  *      Get the data of a Torus object.
6979  *
6980  *      This function may allocate memory, which should be freed using
6981  *		<code>Q3Torus_EmptyData</code>.
6982  *
6983  *  @param torus            A Torus object.
6984  *  @param torusData        Receives data describing the Torus object.
6985  *  @result                 Success or failure of the operation.
6986  */
6987 Q3_EXTERN_API_C ( TQ3Status  )
6988 Q3Torus_GetData (
6989     TQ3GeometryObject             torus,
6990     TQ3TorusData                  *torusData
6991 );
6992 
6993 
6994 
6995 /*!
6996  *  @function
6997  *      Q3Torus_SetOrigin
6998  *  @discussion
6999  *      Change the origin of a torus object.
7000  *
7001  *  @param torus            The torus object.
7002  *  @param origin           The new origin.
7003  *  @result                 Success or failure of the operation.
7004  */
7005 Q3_EXTERN_API_C ( TQ3Status  )
7006 Q3Torus_SetOrigin (
7007     TQ3GeometryObject             torus,
7008     const TQ3Point3D              *origin
7009 );
7010 
7011 
7012 
7013 /*!
7014  *  @function
7015  *      Q3Torus_SetOrientation
7016  *  @discussion
7017  *      Change the orientation vector of a torus object.
7018  *
7019  *  @param torus            A torus object.
7020  *  @param orientation      New orientation vector for the torus.
7021  *  @result                 Success or failure of the operation.
7022  */
7023 Q3_EXTERN_API_C ( TQ3Status  )
7024 Q3Torus_SetOrientation (
7025     TQ3GeometryObject             torus,
7026     const TQ3Vector3D             *orientation
7027 );
7028 
7029 
7030 
7031 /*!
7032  *  @function
7033  *      Q3Torus_SetMajorRadius
7034  *  @discussion
7035  *      Change the major radius vector of a Torus object.
7036  *
7037  *  @param torus            The Torus object.
7038  *  @param majorRadius      New major radius vector.
7039  *  @result                 Success or failure of the operation.
7040  */
7041 Q3_EXTERN_API_C ( TQ3Status  )
7042 Q3Torus_SetMajorRadius (
7043     TQ3GeometryObject             torus,
7044     const TQ3Vector3D             *majorRadius
7045 );
7046 
7047 
7048 
7049 /*!
7050  *  @function
7051  *      Q3Torus_SetMinorRadius
7052  *  @discussion
7053  *      Change the minor radius vector of a Torus object.
7054  *
7055  *  @param torus            The Torus object.
7056  *  @param minorRadius      New minor radius vector.
7057  *  @result                 Success or failure of the operation.
7058  */
7059 Q3_EXTERN_API_C ( TQ3Status  )
7060 Q3Torus_SetMinorRadius (
7061     TQ3GeometryObject             torus,
7062     const TQ3Vector3D             *minorRadius
7063 );
7064 
7065 
7066 
7067 /*!
7068  *  @function
7069  *      Q3Torus_SetRatio
7070  *  @discussion
7071  *      Set the ratio of a torus.
7072  *
7073  *  @param torus            The torus to update.
7074  *  @param ratio            The new ratio for the torus.
7075  *  @result                 Success or failure of the operation.
7076  */
7077 Q3_EXTERN_API_C ( TQ3Status  )
7078 Q3Torus_SetRatio (
7079     TQ3GeometryObject             torus,
7080     float                         ratio
7081 );
7082 
7083 
7084 
7085 /*!
7086  *  @function
7087  *      Q3Torus_GetOrigin
7088  *  @discussion
7089  *      Get the origin of a Torus object.
7090  *
7091  *  @param torus            The Torus object.
7092  *  @param origin           Receives the origin.
7093  *  @result                 Success or failure of the operation.
7094  */
7095 Q3_EXTERN_API_C ( TQ3Status  )
7096 Q3Torus_GetOrigin (
7097     TQ3GeometryObject             torus,
7098     TQ3Point3D                    *origin
7099 );
7100 
7101 
7102 
7103 /*!
7104  *  @function
7105  *      Q3Torus_GetOrientation
7106  *  @discussion
7107  *      Get the orientation vector of a torus.
7108  *
7109  *  @param torus            A torus object.
7110  *  @param orientation      Receives the orientation vector of the torus.
7111  *  @result                 Success or failure of the operation.
7112  */
7113 Q3_EXTERN_API_C ( TQ3Status  )
7114 Q3Torus_GetOrientation (
7115     TQ3GeometryObject             torus,
7116     TQ3Vector3D                   *orientation
7117 );
7118 
7119 
7120 
7121 /*!
7122  *  @function
7123  *      Q3Torus_GetMajorRadius
7124  *  @discussion
7125  *      Get the major radius vector of a Torus object.
7126  *
7127  *  @param torus            The Torus object.
7128  *  @param majorRadius      Receives the major radius vector.
7129  *  @result                 Success or failure of the operation.
7130  */
7131 Q3_EXTERN_API_C ( TQ3Status  )
7132 Q3Torus_GetMajorRadius (
7133     TQ3GeometryObject             torus,
7134     TQ3Vector3D                   *majorRadius
7135 );
7136 
7137 
7138 
7139 /*!
7140  *  @function
7141  *      Q3Torus_GetMinorRadius
7142  *  @discussion
7143  *      Get the minor radius vector of a Torus object.
7144  *
7145  *  @param torus            The Torus object.
7146  *  @param minorRadius      Receives the minor radius vector.
7147  *  @result                 Success or failure of the operation.
7148  */
7149 Q3_EXTERN_API_C ( TQ3Status  )
7150 Q3Torus_GetMinorRadius (
7151     TQ3GeometryObject             torus,
7152     TQ3Vector3D                   *minorRadius
7153 );
7154 
7155 
7156 
7157 /*!
7158  *  @function
7159  *      Q3Torus_GetRatio
7160  *  @discussion
7161  *      Get the ratio of a torus.
7162  *
7163  *  @param torus            The torus to query.
7164  *  @param ratio            Receives the ratio of the torus.
7165  *  @result                 Success or failure of the operation.
7166  */
7167 Q3_EXTERN_API_C ( TQ3Status  )
7168 Q3Torus_GetRatio (
7169     TQ3GeometryObject             torus,
7170     float                         *ratio
7171 );
7172 
7173 
7174 
7175 /*!
7176  *  @function
7177  *      Q3Torus_EmptyData
7178  *  @discussion
7179  *      Release memory allocated by <code>Q3Torus_GetData</code>.
7180  *
7181  *  @param torusData        Data describing a Torus, previously obtained with
7182  *							<code>Q3Torus_GetData</code>.
7183  *  @result                 Success or failure of the operation.
7184  */
7185 Q3_EXTERN_API_C ( TQ3Status  )
7186 Q3Torus_EmptyData (
7187     TQ3TorusData                  *torusData
7188 );
7189 
7190 
7191 
7192 /*!
7193 	@functiongroup	Triangle Functions
7194 */
7195 
7196 
7197 
7198 /*!
7199  *  @function
7200  *      Q3Triangle_New
7201  *  @discussion
7202  *      Create a new triangle geometry object.
7203  *
7204  *  @param triangleData     Data describing a triangle.
7205  *  @result                 Reference to a new Triangle geometry object, or NULL on failure.
7206  */
7207 Q3_EXTERN_API_C ( TQ3GeometryObject  )
7208 Q3Triangle_New (
7209     const TQ3TriangleData         *triangleData
7210 );
7211 
7212 
7213 
7214 /*!
7215  *  @function
7216  *      Q3Triangle_Submit
7217  *  @discussion
7218  *		Submits a triangle for drawing, picking, bounding, or writing in immediate mode.
7219  *
7220  *		This function should only be called in a submitting loop.
7221  *
7222  *  @param triangleData     Data describing a triangle.
7223  *  @param view             A view object.
7224  *  @result                 Success or failure of the operation.
7225  */
7226 Q3_EXTERN_API_C ( TQ3Status  )
7227 Q3Triangle_Submit (
7228     const TQ3TriangleData         *triangleData,
7229     TQ3ViewObject                 view
7230 );
7231 
7232 
7233 
7234 /*!
7235  *  @function
7236  *      Q3Triangle_SetData
7237  *  @discussion
7238  *      Modify a triangle object by supplying a full new set of data.
7239  *
7240  *  @param triangle         A triangle object.
7241  *  @param triangleData     Data describing a triangle.
7242  *  @result                 Success or failure of the operation.
7243  */
7244 Q3_EXTERN_API_C ( TQ3Status  )
7245 Q3Triangle_SetData (
7246     TQ3GeometryObject             triangle,
7247     const TQ3TriangleData         *triangleData
7248 );
7249 
7250 
7251 
7252 /*!
7253  *  @function
7254  *      Q3Triangle_GetData
7255  *  @discussion
7256  *      Get the data of a Triangle object.
7257  *
7258  *      This function may allocate memory, which should be freed using
7259  *		<code>Q3Triangle_EmptyData</code>.
7260  *
7261  *  @param triangle         A Triangle object.
7262  *  @param triangleData     Receives data describing the Triangle object.
7263  *  @result                 Success or failure of the operation.
7264  */
7265 Q3_EXTERN_API_C ( TQ3Status  )
7266 Q3Triangle_GetData (
7267     TQ3GeometryObject             triangle,
7268     TQ3TriangleData               *triangleData
7269 );
7270 
7271 
7272 
7273 /*!
7274  *  @function
7275  *      Q3Triangle_EmptyData
7276  *  @discussion
7277  *      Release memory allocated by <code>Q3Triangle_GetData</code>.
7278  *
7279  *  @param triangleData     Data describing a Triangle, previously obtained with
7280  *							<code>Q3Triangle_GetData</code>.
7281  *  @result                 Success or failure of the operation.
7282  */
7283 Q3_EXTERN_API_C ( TQ3Status  )
7284 Q3Triangle_EmptyData (
7285     TQ3TriangleData               *triangleData
7286 );
7287 
7288 
7289 
7290 /*!
7291  *  @function
7292  *      Q3Triangle_GetVertexPosition
7293  *  @discussion
7294  *      Get the position of a triangle vertex.
7295  *
7296  *  @param triangle         The triangle to query.
7297  *  @param index            The index of the vertex to query.
7298  *  @param point            Receives the position of the triangle vertex.
7299  *  @result                 Success or failure of the operation.
7300  */
7301 Q3_EXTERN_API_C ( TQ3Status  )
7302 Q3Triangle_GetVertexPosition (
7303     TQ3GeometryObject             triangle,
7304     TQ3Uns32                      index,
7305     TQ3Point3D                    *point
7306 );
7307 
7308 
7309 
7310 /*!
7311  *  @function
7312  *      Q3Triangle_SetVertexPosition
7313  *  @discussion
7314  *      Set the position of a triangle vertex.
7315  *
7316  *  @param triangle         The triangle to update.
7317  *  @param index            The index of the vertex to update.
7318  *  @param point            The new position for the triangle vertex.
7319  *  @result                 Success or failure of the operation.
7320  */
7321 Q3_EXTERN_API_C ( TQ3Status  )
7322 Q3Triangle_SetVertexPosition (
7323     TQ3GeometryObject             triangle,
7324     TQ3Uns32                      index,
7325     const TQ3Point3D              *point
7326 );
7327 
7328 
7329 
7330 /*!
7331  *  @function
7332  *      Q3Triangle_GetVertexAttributeSet
7333  *  @discussion
7334  *      Get the attribute set of a triangle vertex.
7335  *
7336  *  @param triangle         The triangle to query.
7337  *  @param index            The index of the vertex to query.
7338  *  @param attributeSet     Receives the attribute set of the triangle vertex.
7339  *  @result                 Success or failure of the operation.
7340  */
7341 Q3_EXTERN_API_C ( TQ3Status  )
7342 Q3Triangle_GetVertexAttributeSet (
7343     TQ3GeometryObject             triangle,
7344     TQ3Uns32                      index,
7345     TQ3AttributeSet               *attributeSet
7346 );
7347 
7348 
7349 
7350 /*!
7351  *  @function
7352  *      Q3Triangle_SetVertexAttributeSet
7353  *  @discussion
7354  *      Set the attribute set of a triangle vertex.
7355  *
7356  *  @param triangle         The triangle to update.
7357  *  @param index            The index of the vertex to update.
7358  *  @param attributeSet     The new attribute set for the triangle vertex.
7359  *  @result                 Success or failure of the operation.
7360  */
7361 Q3_EXTERN_API_C ( TQ3Status  )
7362 Q3Triangle_SetVertexAttributeSet (
7363     TQ3GeometryObject             triangle,
7364     TQ3Uns32                      index,
7365     TQ3AttributeSet               attributeSet
7366 );
7367 
7368 
7369 
7370 /*!
7371 	@functiongroup	TriGrid Functions
7372 */
7373 
7374 
7375 
7376 /*!
7377  *  @function
7378  *      Q3TriGrid_New
7379  *  @discussion
7380  *      Create a new TriGrid geometry object.
7381  *
7382  *  @param triGridData      Data describing a TriGrid.
7383  *  @result                 Reference to a new TriGrid geometry object, or NULL on failure.
7384  */
7385 Q3_EXTERN_API_C ( TQ3GeometryObject  )
7386 Q3TriGrid_New (
7387     const TQ3TriGridData          *triGridData
7388 );
7389 
7390 
7391 
7392 /*!
7393  *  @function
7394  *      Q3TriGrid_Submit
7395  *  @discussion
7396  *		Submits a TriGrid for drawing, picking, bounding, or writing in immediate mode.
7397  *
7398  *		This function should only be called in a submitting loop.
7399  *
7400  *  @param triGridData      Data describing a TriGrid.
7401  *  @param view             A view object.
7402  *  @result                 Success or failure of the operation.
7403  */
7404 Q3_EXTERN_API_C ( TQ3Status  )
7405 Q3TriGrid_Submit (
7406     const TQ3TriGridData          *triGridData,
7407     TQ3ViewObject                 view
7408 );
7409 
7410 
7411 
7412 /*!
7413  *  @function
7414  *      Q3TriGrid_SetData
7415  *  @discussion
7416  *      Modify a TriGrid object by supplying a full new set of data.
7417  *
7418  *  @param triGrid          A TriGrid object.
7419  *  @param triGridData      Data describing a TriGrid.
7420  *  @result                 Success or failure of the operation.
7421  */
7422 Q3_EXTERN_API_C ( TQ3Status  )
7423 Q3TriGrid_SetData (
7424     TQ3GeometryObject             triGrid,
7425     const TQ3TriGridData          *triGridData
7426 );
7427 
7428 
7429 
7430 /*!
7431  *  @function
7432  *      Q3TriGrid_GetData
7433  *  @discussion
7434  *      Get the data of a TriGrid object.
7435  *
7436  *      This function may allocate memory, which should be freed using
7437  *		<code>Q3TriGrid_EmptyData</code>.
7438  *
7439  *  @param triGrid          A TriGrid object.
7440  *  @param triGridData      Receives data describing the TriGrid object.
7441  *  @result                 Success or failure of the operation.
7442  */
7443 Q3_EXTERN_API_C ( TQ3Status  )
7444 Q3TriGrid_GetData (
7445     TQ3GeometryObject             triGrid,
7446     TQ3TriGridData                *triGridData
7447 );
7448 
7449 
7450 
7451 /*!
7452  *  @function
7453  *      Q3TriGrid_EmptyData
7454  *  @discussion
7455  *      Release memory allocated by <code>Q3TriGrid_GetData</code>.
7456  *
7457  *  @param triGridData      Data describing a TriGrid, previously obtained with
7458  *							<code>Q3TriGrid_GetData</code>.
7459  *  @result                 Success or failure of the operation.
7460  */
7461 Q3_EXTERN_API_C ( TQ3Status  )
7462 Q3TriGrid_EmptyData (
7463     TQ3TriGridData                *triGridData
7464 );
7465 
7466 
7467 
7468 /*!
7469  *  @function
7470  *      Q3TriGrid_GetVertexPosition
7471  *  @discussion
7472  *      Get the position of a trigrid vertex.
7473  *
7474  *  @param triGrid          The trigrid to query.
7475  *  @param rowIndex         The row index of the vertex to query.
7476  *  @param columnIndex      The column index of the vertex to query.
7477  *  @param position         Receives the position of the trigrid vertex.
7478  *  @result                 Success or failure of the operation.
7479  */
7480 Q3_EXTERN_API_C ( TQ3Status  )
7481 Q3TriGrid_GetVertexPosition (
7482     TQ3GeometryObject             triGrid,
7483     TQ3Uns32                      rowIndex,
7484     TQ3Uns32                      columnIndex,
7485     TQ3Point3D                    *position
7486 );
7487 
7488 
7489 
7490 /*!
7491  *  @function
7492  *      Q3TriGrid_SetVertexPosition
7493  *  @discussion
7494  *      Set the position of a trigrid vertex.
7495  *
7496  *  @param triGrid          The trigrid to update.
7497  *  @param rowIndex         The row index of the vertex to update.
7498  *  @param columnIndex      The column index of the vertex to update.
7499  *  @param position         The new position for the trigrid vertex.
7500  *  @result                 Success or failure of the operation.
7501  */
7502 Q3_EXTERN_API_C ( TQ3Status  )
7503 Q3TriGrid_SetVertexPosition (
7504     TQ3GeometryObject             triGrid,
7505     TQ3Uns32                      rowIndex,
7506     TQ3Uns32                      columnIndex,
7507     const TQ3Point3D              *position
7508 );
7509 
7510 
7511 
7512 /*!
7513  *  @function
7514  *      Q3TriGrid_GetVertexAttributeSet
7515  *  @discussion
7516  *      Get the attribute set of a trigrid vertex.
7517  *
7518  *  @param triGrid          The trigrid to query.
7519  *  @param rowIndex         The row index of the vertex to query.
7520  *  @param columnIndex      The column index of the vertex to query.
7521  *  @param attributeSet     Receives the attribute set of the trigrid vertex.
7522  *  @result                 Success or failure of the operation.
7523  */
7524 Q3_EXTERN_API_C ( TQ3Status  )
7525 Q3TriGrid_GetVertexAttributeSet (
7526     TQ3GeometryObject             triGrid,
7527     TQ3Uns32                      rowIndex,
7528     TQ3Uns32                      columnIndex,
7529     TQ3AttributeSet               *attributeSet
7530 );
7531 
7532 
7533 
7534 /*!
7535  *  @function
7536  *      Q3TriGrid_SetVertexAttributeSet
7537  *  @discussion
7538  *      Set the attribute set of a trigrid vertex.
7539  *
7540  *  @param triGrid          The trigrid to update.
7541  *  @param rowIndex         The row index of the vertex to update.
7542  *  @param columnIndex      The column index of the vertex to update.
7543  *  @param attributeSet     The new attribute set for the trigrid vertex.
7544  *  @result                 Success or failure of the operation.
7545  */
7546 Q3_EXTERN_API_C ( TQ3Status  )
7547 Q3TriGrid_SetVertexAttributeSet (
7548     TQ3GeometryObject             triGrid,
7549     TQ3Uns32                      rowIndex,
7550     TQ3Uns32                      columnIndex,
7551     TQ3AttributeSet               attributeSet
7552 );
7553 
7554 
7555 
7556 /*!
7557  *  @function
7558  *      Q3TriGrid_GetFacetAttributeSet
7559  *  @discussion
7560  *      Get the attribute set of a trigrid face.
7561  *
7562  *  @param triGrid              The trigrid to query.
7563  *  @param faceIndex            The index of the face to query.
7564  *  @param facetAttributeSet    Receives the attribute set of the trigrid face.
7565  *  @result                     Success or failure of the operation.
7566  */
7567 Q3_EXTERN_API_C ( TQ3Status  )
7568 Q3TriGrid_GetFacetAttributeSet (
7569     TQ3GeometryObject             triGrid,
7570     TQ3Uns32                      faceIndex,
7571     TQ3AttributeSet               *facetAttributeSet
7572 );
7573 
7574 
7575 
7576 /*!
7577  *  @function
7578  *      Q3TriGrid_SetFacetAttributeSet
7579  *  @discussion
7580  *      Set the attribute set of a trigrid face.
7581  *
7582  *  @param triGrid              The trigrid to update.
7583  *  @param faceIndex            The index of the face to update.
7584  *  @param facetAttributeSet    The new attribute set for the trigrid face.
7585  *  @result                     Success or failure of the operation.
7586  */
7587 Q3_EXTERN_API_C ( TQ3Status  )
7588 Q3TriGrid_SetFacetAttributeSet (
7589     TQ3GeometryObject             triGrid,
7590     TQ3Uns32                      faceIndex,
7591     TQ3AttributeSet               facetAttributeSet
7592 );
7593 
7594 
7595 
7596 /*!
7597 	@functiongroup	TriMesh Functions
7598 */
7599 
7600 
7601 
7602 /*!
7603  *  @function
7604  *      Q3TriMesh_New
7605  *  @discussion
7606  *      Create a new TriMesh geometry object.
7607  *
7608  *		If you wish, you can set the <code>isEmpty</code> flag in the <code>bBox</code> field,
7609  *		and Quesa will compute the bounding box.
7610  *
7611  *  @param triMeshData      Data describing a TriMesh.
7612  *  @result                 Reference to a new TriMesh geometry object, or NULL on failure.
7613  */
7614 Q3_EXTERN_API_C ( TQ3GeometryObject  )
7615 Q3TriMesh_New (
7616     const TQ3TriMeshData          *triMeshData
7617 );
7618 
7619 
7620 
7621 /*!
7622  *  @function
7623  *      Q3TriMesh_Submit
7624  *  @discussion
7625  *		Submits a TriMesh for drawing, picking, bounding, or writing in immediate mode.
7626  *
7627  *		This function should only be called in a submitting loop.
7628  *
7629  *  @param triMeshData      Data describing a TriMesh.
7630  *  @param view             A view object.
7631  *  @result                 Success or failure of the operation.
7632  */
7633 Q3_EXTERN_API_C ( TQ3Status  )
7634 Q3TriMesh_Submit (
7635     const TQ3TriMeshData          *triMeshData,
7636     TQ3ViewObject                 view
7637 );
7638 
7639 
7640 
7641 /*!
7642  *  @function
7643  *      Q3TriMesh_SetData
7644  *  @discussion
7645  *      Modify a TriMesh object by supplying a full new set of data.
7646  *
7647  *		If you wish, you can set the <code>isEmpty</code> flag in the <code>bBox</code> field,
7648  *		and Quesa will compute the bounding box.
7649  *
7650  *  @param triMesh          A TriMesh object.
7651  *  @param triMeshData      Data describing a TriMesh.
7652  *  @result                 Success or failure of the operation.
7653  */
7654 Q3_EXTERN_API_C ( TQ3Status  )
7655 Q3TriMesh_SetData (
7656     TQ3GeometryObject             triMesh,
7657     const TQ3TriMeshData          *triMeshData
7658 );
7659 
7660 
7661 
7662 /*!
7663  *  @function
7664  *      Q3TriMesh_GetData
7665  *  @discussion
7666  *      Get the data of a TriMesh object.
7667  *
7668  *      This function may allocate memory, which should be freed using
7669  *		<code>Q3TriMesh_EmptyData</code>.
7670  *
7671  *  @param triMesh          A TriMesh object.
7672  *  @param triMeshData      Receives data describing the TriMesh object.
7673  *  @result                 Success or failure of the operation.
7674  */
7675 Q3_EXTERN_API_C ( TQ3Status  )
7676 Q3TriMesh_GetData (
7677     TQ3GeometryObject             triMesh,
7678     TQ3TriMeshData                *triMeshData
7679 );
7680 
7681 
7682 
7683 /*!
7684  *  @function
7685  *      Q3TriMesh_EmptyData
7686  *  @discussion
7687  *      Release memory allocated by <code>Q3TriMesh_GetData</code>.
7688  *
7689  *  @param triMeshData      Data describing a TriMesh, previously obtained with
7690  *							<code>Q3TriMesh_GetData</code>.
7691  *  @result                 Success or failure of the operation.
7692  */
7693 Q3_EXTERN_API_C ( TQ3Status  )
7694 Q3TriMesh_EmptyData (
7695     TQ3TriMeshData                *triMeshData
7696 );
7697 
7698 
7699 
7700 /*!
7701  *  @function
7702  *      Q3TriMesh_LockData
7703  *  @discussion
7704  *      Lock a Trimesh for direct access.
7705  *
7706  *      Returns a pointer to the internal TQ3TriMeshData for a TriMesh,
7707  *      allowing direct access without the need to copy TriMesh data out
7708  *      of and back in to Quesa.
7709  *
7710  *      The readOnly flag should be used to indicate if the application
7711  *      needs to make changes to the TriMesh data, or if the pointer
7712  *      should be considered const.
7713  *
7714  *      When the application no longer needs access to the TriMesh data,
7715  *      it must unlock the TriMesh with Q3TriMesh_UnlockData. Changes to
7716  *      the TriMesh data may not be relayed to renderers until the TriMesh
7717  *      has been unlocked.
7718  *
7719  *      <em>This function is not available in QD3D.</em>
7720  *
7721  *  @param triMesh          The TriMesh to lock.
7722  *  @param readOnly         Indicates if the returned data is read-only.
7723  *  @param triMeshData      Receives a pointer to the TQ3TriMeshData for
7724  *                          the TriMesh.
7725  *  @result                 Success or failure of the operation.
7726  */
7727 #if QUESA_ALLOW_QD3D_EXTENSIONS
7728 
7729 Q3_EXTERN_API_C ( TQ3Status  )
7730 Q3TriMesh_LockData (
7731     TQ3GeometryObject             triMesh,
7732     TQ3Boolean                    readOnly,
7733     TQ3TriMeshData                **triMeshData
7734 );
7735 
7736 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
7737 
7738 
7739 
7740 /*!
7741  *  @function
7742  *      Q3TriMesh_UnlockData
7743  *  @discussion
7744  *      Unlocks a TriMesh previously locked with Q3TriMesh_LockData.
7745  *
7746  *      <em>This function is not available in QD3D.</em>
7747  *
7748  *  @param triMesh          The TriMesh to unlock.
7749  *  @result                 Success or failure of the operation.
7750  */
7751 #if QUESA_ALLOW_QD3D_EXTENSIONS
7752 
7753 Q3_EXTERN_API_C ( TQ3Status  )
7754 Q3TriMesh_UnlockData (
7755     TQ3GeometryObject             triMesh
7756 );
7757 
7758 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
7759 
7760 
7761 
7762 /*!
7763  *	@function
7764  *		Q3TriMesh_OptimizeData
7765  *	@abstract
7766  *		Modify TriMesh data, if needed, for efficient use by the
7767  *		interactive renderer.
7768  *
7769  *	@discussion
7770  *		This operation modifies TriMesh data so that:
7771  *				<ol>
7772  *					<li>Face normals exist.</li>
7773  *					<li>Vertex normals exist.</li>
7774  *					<li>If Face colors exist, then vertex colors exist.</li>
7775  *				</ol>
7776  *		If face normals do not already exist, they will be computed
7777  *		by cross products of edges.  The orientation will be assumed
7778  *		to be counterclockwise.
7779  *
7780  *		If vertex normals do not already exist, they will be derived
7781  *		from face normals.  When a vertex belongs to faces with
7782  *		different normals, the vertex will be duplicated.
7783  *
7784  *		If a color attribute (diffuse, transparent, or specular) exists
7785  *		on faces but not vertices, it will be converted to a vertex
7786  *		attribute, duplicating vertices when needed.
7787  *
7788  *		If no optimization is needed, outDidChange will return kQ3False
7789  *		and outData will be cleared to zero.  If optimization was
7790  *		performed, indicated by outDidChange being kQ3True, then you
7791  *		are responsible for calling Q3TriMesh_EmptyData on the outData
7792  *		structure when you are done with it.
7793  *
7794  *		The time it takes to perform the optimization depends on the numbers
7795  *		of vertices, faces, edges, and attributes in the TriMesh.  However,
7796  *		determining whether optimization is <em>needed</em> is quick, as it
7797  *		depends only on the number of attribute types.
7798  *
7799  *	@param		inData			TriMesh data.
7800  *	@param		outData			Receives new TriMesh data, if outDidChange is true.
7801  *	@param		outDidChange	Receives a flag indicating whether new data
7802  *								was created.
7803  *	@result		Success or failure of the operation.
7804 */
7805 #if QUESA_ALLOW_QD3D_EXTENSIONS
7806 
7807 Q3_EXTERN_API_C( TQ3Status )
7808 Q3TriMesh_OptimizeData( const TQ3TriMeshData* inData,
7809 								TQ3TriMeshData* outData,
7810 								TQ3Boolean* outDidChange
7811 );
7812 
7813 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
7814 
7815 
7816 
7817 /*!
7818  *	@function
7819  *		Q3TriMesh_Optimize
7820  *	@abstract
7821  *		Modify a TriMesh, if needed, for efficient use by the interactive renderer.
7822  *
7823  *	@discussion
7824  *		See discussion of E3TriMesh_OptimizeData for the optimizations
7825  *		that are performed.  If no optimizations are needed, NULL is returned.
7826  *
7827  *	@param		inTriMesh		A TriMesh geometry.
7828  *	@result		A TriMesh or NULL.
7829 */
7830 #if QUESA_ALLOW_QD3D_EXTENSIONS
7831 
7832 Q3_EXTERN_API_C( TQ3GeometryObject )
7833 Q3TriMesh_Optimize(
7834 	TQ3GeometryObject inTriMesh
7835 );
7836 
7837 #endif // QUESA_ALLOW_QD3D_EXTENSIONS
7838 
7839 
7840 
7841 // Work around a HeaderDoc bug
7842 /*!
7843 	@functiongroup
7844 */
7845 
7846 
7847 
7848 //=============================================================================
7849 //      C++ postamble
7850 //-----------------------------------------------------------------------------
7851 #ifdef __cplusplus
7852 }
7853 #endif
7854 
7855 #endif
7856 
7857 
7858