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(πv)orientation + sin(πv)(cos(2πu)majorRadius + sin(2π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×(<code>numRows</code>-1)×(<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, &iter ) 1173 * { 1174 * 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