topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-QD3DGeometry.h / h



  /*
       File:       QD3DGeometry.h
   
       Contains:   Q3Geometry methods
   
       Version:    Technology: Quickdraw 3D 1.6
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1995-2001 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __QD3DGEOMETRY__
  define __QD3DGEOMETRY__
  
  ifndef __QD3D__
  include <QD3D.h>
  endif
  
  ifndef __QD3DSET__
  include <QD3DSet.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=power
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  if PRAGMA_ENUM_ALWAYSINT
      #if defined(__fourbyteints__) && !__fourbyteints__ 
          #define __QD3DGEOMETRY__RESTORE_TWOBYTEINTS
          #pragma fourbyteints on
      #endif
      #pragma enumsalwaysint on
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=int
  #elif PRAGMA_ENUM_PACK
      #if __option(pack_enums)
          #define __QD3DGEOMETRY__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  endif
  
  
**************************************************************************** * ** * Geometry Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3ObjectType )
  Q3Geometry_GetType              (TQ3GeometryObject      geometry);
  
  EXTERN_API_C( TQ3Status )
  Q3Geometry_GetAttributeSet      (TQ3GeometryObject      geometry,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Geometry_SetAttributeSet      (TQ3GeometryObject      geometry,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Geometry_Submit               (TQ3GeometryObject      geometry,
                                   TQ3ViewObject          view);
  
  
**************************************************************************** * ** * Box Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3BoxData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     orientation;
      TQ3Vector3D                     majorAxis;
      TQ3Vector3D                     minorAxis;
      TQ3AttributeSet *               faceAttributeSet;           /* Ordering : Left, right,    */
                                                                  /*           front, back,   */
                                                                  /*           top, bottom    */
      TQ3AttributeSet                 boxAttributeSet;
  };
  typedef struct TQ3BoxData               TQ3BoxData;
  
**************************************************************************** * ** * Box Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Box_New                       (const TQ3BoxData *     boxData);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_Submit                    (const TQ3BoxData *     boxData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetData                   (TQ3GeometryObject      box,
                                   const TQ3BoxData *     boxData);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetData                   (TQ3GeometryObject      box,
                                   TQ3BoxData *           boxData);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_EmptyData                 (TQ3BoxData *           boxData);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetOrigin                 (TQ3GeometryObject      box,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetOrientation            (TQ3GeometryObject      box,
                                   const TQ3Vector3D *    orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetMajorAxis              (TQ3GeometryObject      box,
                                   const TQ3Vector3D *    majorAxis);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetMinorAxis              (TQ3GeometryObject      box,
                                   const TQ3Vector3D *    minorAxis);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetOrigin                 (TQ3GeometryObject      box,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetOrientation            (TQ3GeometryObject      box,
                                   TQ3Vector3D *          orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetMajorAxis              (TQ3GeometryObject      box,
                                   TQ3Vector3D *          majorAxis);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetMinorAxis              (TQ3GeometryObject      box,
                                   TQ3Vector3D *          minorAxis);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_GetFaceAttributeSet       (TQ3GeometryObject      box,
                                   unsigned long          faceIndex,
                                   TQ3AttributeSet *      faceAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Box_SetFaceAttributeSet       (TQ3GeometryObject      box,
                                   unsigned long          faceIndex,
                                   TQ3AttributeSet        faceAttributeSet);
  
  
**************************************************************************** * ** * Cone Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3ConeData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     orientation;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           uMin;
      float                           uMax;
      float                           vMin;
      float                           vMax;
      TQ3EndCap                       caps;
      TQ3AttributeSet                 interiorAttributeSet;
      TQ3AttributeSet                 faceAttributeSet;
      TQ3AttributeSet                 bottomAttributeSet;
      TQ3AttributeSet                 coneAttributeSet;
  };
  typedef struct TQ3ConeData              TQ3ConeData;
  
**************************************************************************** * ** * Cone Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Cone_New                      (const TQ3ConeData *    coneData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_Submit                   (const TQ3ConeData *    coneData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetData                  (TQ3GeometryObject      cone,
                                   const TQ3ConeData *    coneData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetData                  (TQ3GeometryObject      cone,
                                   TQ3ConeData *          coneData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetOrigin                (TQ3GeometryObject      cone,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetOrientation           (TQ3GeometryObject      cone,
                                   const TQ3Vector3D *    orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetMajorRadius           (TQ3GeometryObject      cone,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetMinorRadius           (TQ3GeometryObject      cone,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetOrigin                (TQ3GeometryObject      cone,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetOrientation           (TQ3GeometryObject      cone,
                                   TQ3Vector3D *          orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetMajorRadius           (TQ3GeometryObject      cone,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetMinorRadius           (TQ3GeometryObject      cone,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetCaps                  (TQ3GeometryObject      cone,
                                   TQ3EndCap              caps);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetCaps                  (TQ3GeometryObject      cone,
                                   TQ3EndCap *            caps);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetBottomAttributeSet    (TQ3GeometryObject      cone,
                                   TQ3AttributeSet        bottomAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetBottomAttributeSet    (TQ3GeometryObject      cone,
                                   TQ3AttributeSet *      bottomAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_SetFaceAttributeSet      (TQ3GeometryObject      cone,
                                   TQ3AttributeSet        faceAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_GetFaceAttributeSet      (TQ3GeometryObject      cone,
                                   TQ3AttributeSet *      faceAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cone_EmptyData                (TQ3ConeData *          coneData);
  
  
**************************************************************************** * ** * Cylinder Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3CylinderData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     orientation;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           uMin;
      float                           uMax;
      float                           vMin;
      float                           vMax;
      TQ3EndCap                       caps;
      TQ3AttributeSet                 interiorAttributeSet;
      TQ3AttributeSet                 topAttributeSet;
      TQ3AttributeSet                 faceAttributeSet;
      TQ3AttributeSet                 bottomAttributeSet;
      TQ3AttributeSet                 cylinderAttributeSet;
  };
  typedef struct TQ3CylinderData          TQ3CylinderData;
  
**************************************************************************** * ** * Cylinder Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Cylinder_New                  (const TQ3CylinderData * cylinderData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_Submit               (const TQ3CylinderData * cylinderData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetData              (TQ3GeometryObject      cylinder,
                                   const TQ3CylinderData * cylinderData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetData              (TQ3GeometryObject      cylinder,
                                   TQ3CylinderData *      cylinderData);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetOrigin            (TQ3GeometryObject      cylinder,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetOrientation       (TQ3GeometryObject      cylinder,
                                   const TQ3Vector3D *    orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetMajorRadius       (TQ3GeometryObject      cylinder,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetMinorRadius       (TQ3GeometryObject      cylinder,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetOrigin            (TQ3GeometryObject      cylinder,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetOrientation       (TQ3GeometryObject      cylinder,
                                   TQ3Vector3D *          orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetMajorRadius       (TQ3GeometryObject      cylinder,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetMinorRadius       (TQ3GeometryObject      cylinder,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetCaps              (TQ3GeometryObject      cylinder,
                                   TQ3EndCap              caps);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetCaps              (TQ3GeometryObject      cylinder,
                                   TQ3EndCap *            caps);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetTopAttributeSet   (TQ3GeometryObject      cylinder,
                                   TQ3AttributeSet        topAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetTopAttributeSet   (TQ3GeometryObject      cylinder,
                                   TQ3AttributeSet *      topAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetBottomAttributeSet (TQ3GeometryObject     cylinder,
                                   TQ3AttributeSet        bottomAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetBottomAttributeSet (TQ3GeometryObject     cylinder,
                                   TQ3AttributeSet *      bottomAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_SetFaceAttributeSet  (TQ3GeometryObject      cylinder,
                                   TQ3AttributeSet        faceAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_GetFaceAttributeSet  (TQ3GeometryObject      cylinder,
                                   TQ3AttributeSet *      faceAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Cylinder_EmptyData            (TQ3CylinderData *      cylinderData);
  
  
**************************************************************************** * ** * Disk Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3DiskData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           uMin;
      float                           uMax;
      float                           vMin;
      float                           vMax;
      TQ3AttributeSet                 diskAttributeSet;
  };
  typedef struct TQ3DiskData              TQ3DiskData;
  
**************************************************************************** * ** * Disk Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Disk_New                      (const TQ3DiskData *    diskData);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_Submit                   (const TQ3DiskData *    diskData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_SetData                  (TQ3GeometryObject      disk,
                                   const TQ3DiskData *    diskData);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_GetData                  (TQ3GeometryObject      disk,
                                   TQ3DiskData *          diskData);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_SetOrigin                (TQ3GeometryObject      disk,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_SetMajorRadius           (TQ3GeometryObject      disk,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_SetMinorRadius           (TQ3GeometryObject      disk,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_GetOrigin                (TQ3GeometryObject      disk,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_GetMajorRadius           (TQ3GeometryObject      disk,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_GetMinorRadius           (TQ3GeometryObject      disk,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Disk_EmptyData                (TQ3DiskData *          diskData);
  
  
**************************************************************************** * ** * Ellipse Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3EllipseData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           uMin;
      float                           uMax;
      TQ3AttributeSet                 ellipseAttributeSet;
  };
  typedef struct TQ3EllipseData           TQ3EllipseData;
  
**************************************************************************** * ** * Ellipse Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Ellipse_New                   (const TQ3EllipseData * ellipseData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_Submit                (const TQ3EllipseData * ellipseData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_SetData               (TQ3GeometryObject      ellipse,
                                   const TQ3EllipseData * ellipseData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_GetData               (TQ3GeometryObject      ellipse,
                                   TQ3EllipseData *       ellipseData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_SetOrigin             (TQ3GeometryObject      ellipse,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_SetMajorRadius        (TQ3GeometryObject      ellipse,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_SetMinorRadius        (TQ3GeometryObject      ellipse,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_GetOrigin             (TQ3GeometryObject      ellipse,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_GetMajorRadius        (TQ3GeometryObject      ellipse,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_GetMinorRadius        (TQ3GeometryObject      ellipse,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipse_EmptyData             (TQ3EllipseData *       ellipseData);
  
  
**************************************************************************** * ** * Ellipsoid Data structures ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3EllipsoidData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     orientation;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           uMin;
      float                           uMax;
      float                           vMin;
      float                           vMax;
      TQ3EndCap                       caps;
      TQ3AttributeSet                 interiorAttributeSet;
      TQ3AttributeSet                 ellipsoidAttributeSet;
  };
  typedef struct TQ3EllipsoidData         TQ3EllipsoidData;
  
**************************************************************************** * ** * Ellipsoid Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Ellipsoid_New                 (const TQ3EllipsoidData * ellipsoidData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_Submit              (const TQ3EllipsoidData * ellipsoidData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_SetData             (TQ3GeometryObject      ellipsoid,
                                   const TQ3EllipsoidData * ellipsoidData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_GetData             (TQ3GeometryObject      ellipsoid,
                                   TQ3EllipsoidData *     ellipsoidData);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_SetOrigin           (TQ3GeometryObject      ellipsoid,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_SetOrientation      (TQ3GeometryObject      ellipsoid,
                                   const TQ3Vector3D *    orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_SetMajorRadius      (TQ3GeometryObject      ellipsoid,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_SetMinorRadius      (TQ3GeometryObject      ellipsoid,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_GetOrigin           (TQ3GeometryObject      ellipsoid,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_GetOrientation      (TQ3GeometryObject      ellipsoid,
                                   TQ3Vector3D *          orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_GetMajorRadius      (TQ3GeometryObject      ellipsoid,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_GetMinorRadius      (TQ3GeometryObject      ellipsoid,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Ellipsoid_EmptyData           (TQ3EllipsoidData *     ellipsoidData);
  
  
**************************************************************************** * ** * General Polygon Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  enum TQ3GeneralPolygonShapeHint {
      kQ3GeneralPolygonShapeHintComplex = 0,
      kQ3GeneralPolygonShapeHintConcave = 1,
      kQ3GeneralPolygonShapeHintConvex = 2
  };
  typedef enum TQ3GeneralPolygonShapeHint TQ3GeneralPolygonShapeHint;
  
  struct TQ3GeneralPolygonContourData {
      unsigned long                   numVertices;
      TQ3Vertex3D *                   vertices;
  };
  typedef struct TQ3GeneralPolygonContourData TQ3GeneralPolygonContourData;
  
  struct TQ3GeneralPolygonData {
      unsigned long                   numContours;
      TQ3GeneralPolygonContourData *  contours;
      TQ3GeneralPolygonShapeHint      shapeHint;
      TQ3AttributeSet                 generalPolygonAttributeSet;
  };
  typedef struct TQ3GeneralPolygonData    TQ3GeneralPolygonData;
  
**************************************************************************** * ** * General polygon Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3GeneralPolygon_New            (const TQ3GeneralPolygonData * generalPolygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_Submit         (const TQ3GeneralPolygonData * generalPolygonData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_SetData        (TQ3GeometryObject      generalPolygon,
                                   const TQ3GeneralPolygonData * generalPolygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_GetData        (TQ3GeometryObject      polygon,
                                   TQ3GeneralPolygonData * generalPolygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_EmptyData      (TQ3GeneralPolygonData * generalPolygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_GetVertexPosition (TQ3GeometryObject   generalPolygon,
                                   unsigned long          contourIndex,
                                   unsigned long          pointIndex,
                                   TQ3Point3D *           position);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_SetVertexPosition (TQ3GeometryObject   generalPolygon,
                                   unsigned long          contourIndex,
                                   unsigned long          pointIndex,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_GetVertexAttributeSet (TQ3GeometryObject  generalPolygon,
                                   unsigned long          contourIndex,
                                   unsigned long          pointIndex,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_SetVertexAttributeSet (TQ3GeometryObject  generalPolygon,
                                   unsigned long          contourIndex,
                                   unsigned long          pointIndex,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_SetShapeHint   (TQ3GeometryObject      generalPolygon,
                                   TQ3GeneralPolygonShapeHint  shapeHint);
  
  EXTERN_API_C( TQ3Status )
  Q3GeneralPolygon_GetShapeHint   (TQ3GeometryObject      generalPolygon,
                                   TQ3GeneralPolygonShapeHint * shapeHint);
  
  
**************************************************************************** * ** * Line Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3LineData {
      TQ3Vertex3D                     vertices[2];
      TQ3AttributeSet                 lineAttributeSet;
  };
  typedef struct TQ3LineData              TQ3LineData;
  
**************************************************************************** * ** * Line Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Line_New                      (const TQ3LineData *    lineData);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_Submit                   (const TQ3LineData *    lineData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_GetData                  (TQ3GeometryObject      line,
                                   TQ3LineData *          lineData);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_SetData                  (TQ3GeometryObject      line,
                                   const TQ3LineData *    lineData);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_GetVertexPosition        (TQ3GeometryObject      line,
                                   unsigned long          index,
                                   TQ3Point3D *           position);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_SetVertexPosition        (TQ3GeometryObject      line,
                                   unsigned long          index,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_GetVertexAttributeSet    (TQ3GeometryObject      line,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_SetVertexAttributeSet    (TQ3GeometryObject      line,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Line_EmptyData                (TQ3LineData *          lineData);
  
  
**************************************************************************** * ** * Marker Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3MarkerData {
      TQ3Point3D                      location;
      long                            xOffset;
      long                            yOffset;
      TQ3Bitmap                       bitmap;
      TQ3AttributeSet                 markerAttributeSet;
  };
  typedef struct TQ3MarkerData            TQ3MarkerData;
  
**************************************************************************** * ** * Marker Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Marker_New                    (const TQ3MarkerData *  markerData);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_Submit                 (const TQ3MarkerData *  markerData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_SetData                (TQ3GeometryObject      geometry,
                                   const TQ3MarkerData *  markerData);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_GetData                (TQ3GeometryObject      geometry,
                                   TQ3MarkerData *        markerData);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_EmptyData              (TQ3MarkerData *        markerData);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_GetPosition            (TQ3GeometryObject      marker,
                                   TQ3Point3D *           location);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_SetPosition            (TQ3GeometryObject      marker,
                                   const TQ3Point3D *     location);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_GetXOffset             (TQ3GeometryObject      marker,
                                   long *                 xOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_SetXOffset             (TQ3GeometryObject      marker,
                                   long                   xOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_GetYOffset             (TQ3GeometryObject      marker,
                                   long *                 yOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_SetYOffset             (TQ3GeometryObject      marker,
                                   long                   yOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_GetBitmap              (TQ3GeometryObject      marker,
                                   TQ3Bitmap *            bitmap);
  
  EXTERN_API_C( TQ3Status )
  Q3Marker_SetBitmap              (TQ3GeometryObject      marker,
                                   const TQ3Bitmap *      bitmap);
  
  
**************************************************************************** * ** * Mesh Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef struct OpaqueTQ3MeshComponent*  TQ3MeshComponent;
  typedef struct OpaqueTQ3MeshVertex*     TQ3MeshVertex;
  typedef struct OpaqueTQ3MeshFace*       TQ3MeshFace;
  typedef struct OpaqueTQ3MeshEdge*       TQ3MeshEdge;
  typedef struct OpaqueTQ3MeshContour*    TQ3MeshContour;
  
**************************************************************************** * ** * Mesh Routines ** * ** ***************************************************************************

  
  /*
   *  Constructors
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Mesh_New                      (void);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_VertexNew                (TQ3GeometryObject      mesh,
                                   const TQ3Vertex3D *    vertex);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_FaceNew                  (TQ3GeometryObject      mesh,
                                   unsigned long          numVertices,
                                   const TQ3MeshVertex *  vertices,
                                   TQ3AttributeSet        attributeSet);
  
  /*
   *  Destructors
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_VertexDelete             (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_FaceDelete               (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face);
  
  /*
   * Methods
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_DelayUpdates             (TQ3GeometryObject      mesh);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_ResumeUpdates            (TQ3GeometryObject      mesh);
  
  EXTERN_API_C( TQ3MeshContour )
  Q3Mesh_FaceToContour            (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            containerFace,
                                   TQ3MeshFace            face);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_ContourToFace            (TQ3GeometryObject      mesh,
                                   TQ3MeshContour         contour);
  
  /*
   * Mesh
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetNumComponents         (TQ3GeometryObject      mesh,
                                   unsigned long *        numComponents);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetNumEdges              (TQ3GeometryObject      mesh,
                                   unsigned long *        numEdges);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetNumVertices           (TQ3GeometryObject      mesh,
                                   unsigned long *        numVertices);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetNumFaces              (TQ3GeometryObject      mesh,
                                   unsigned long *        numFaces);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetNumCorners            (TQ3GeometryObject      mesh,
                                   unsigned long *        numCorners);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetOrientable            (TQ3GeometryObject      mesh,
                                   TQ3Boolean *           orientable);
  
  /*
   * Component
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetComponentNumVertices  (TQ3GeometryObject      mesh,
                                   TQ3MeshComponent       component,
                                   unsigned long *        numVertices);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetComponentNumEdges     (TQ3GeometryObject      mesh,
                                   TQ3MeshComponent       component,
                                   unsigned long *        numEdges);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetComponentBoundingBox  (TQ3GeometryObject      mesh,
                                   TQ3MeshComponent       component,
                                   TQ3BoundingBox *       boundingBox);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetComponentOrientable   (TQ3GeometryObject      mesh,
                                   TQ3MeshComponent       component,
                                   TQ3Boolean *           orientable);
  
  /*
   * Vertex
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetVertexCoordinates     (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3Point3D *           coordinates);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetVertexIndex           (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   unsigned long *        index);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetVertexOnBoundary      (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3Boolean *           onBoundary);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetVertexComponent       (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3MeshComponent *     component);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetVertexAttributeSet    (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_SetVertexCoordinates     (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   const TQ3Point3D *     coordinates);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_SetVertexAttributeSet    (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3AttributeSet        attributeSet);
  
  /*
   * Face
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFaceNumVertices       (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   unsigned long *        numVertices);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFacePlaneEquation     (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   TQ3PlaneEquation *     planeEquation);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFaceNumContours       (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   unsigned long *        numContours);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFaceIndex             (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   unsigned long *        index);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFaceComponent         (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   TQ3MeshComponent *     component);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetFaceAttributeSet      (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_SetFaceAttributeSet      (TQ3GeometryObject      mesh,
                                   TQ3MeshFace            face,
                                   TQ3AttributeSet        attributeSet);
  
  /*
   * Edge
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetEdgeVertices          (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3MeshVertex *        vertex1,
                                   TQ3MeshVertex *        vertex2);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetEdgeFaces             (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3MeshFace *          face1,
                                   TQ3MeshFace *          face2);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetEdgeOnBoundary        (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3Boolean *           onBoundary);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetEdgeComponent         (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3MeshComponent *     component);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetEdgeAttributeSet      (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_SetEdgeAttributeSet      (TQ3GeometryObject      mesh,
                                   TQ3MeshEdge            edge,
                                   TQ3AttributeSet        attributeSet);
  
  /*
   * Contour
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetContourFace           (TQ3GeometryObject      mesh,
                                   TQ3MeshContour         contour,
                                   TQ3MeshFace *          face);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetContourNumVertices    (TQ3GeometryObject      mesh,
                                   TQ3MeshContour         contour,
                                   unsigned long *        numVertices);
  
  /*
   * Corner
   */
  EXTERN_API_C( TQ3Status )
  Q3Mesh_GetCornerAttributeSet    (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3MeshFace            face,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Mesh_SetCornerAttributeSet    (TQ3GeometryObject      mesh,
                                   TQ3MeshVertex          vertex,
                                   TQ3MeshFace            face,
                                   TQ3AttributeSet        attributeSet);
  
  /*
   * Public Mesh Iterators
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3MeshIterator {
      void *                          var1;
      void *                          var2;
      void *                          var3;
      struct {
          void *                          field1;
          char                            field2[4];
      }                                 var4;
  };
  typedef struct TQ3MeshIterator          TQ3MeshIterator;
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3MeshComponent )
  Q3Mesh_FirstMeshComponent       (TQ3GeometryObject      mesh,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshComponent )
  Q3Mesh_NextMeshComponent        (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_FirstComponentVertex     (TQ3MeshComponent       component,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_NextComponentVertex      (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_FirstComponentEdge       (TQ3MeshComponent       component,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_NextComponentEdge        (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_FirstMeshVertex          (TQ3GeometryObject      mesh,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_NextMeshVertex           (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_FirstMeshFace            (TQ3GeometryObject      mesh,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_NextMeshFace             (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_FirstMeshEdge            (TQ3GeometryObject      mesh,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_NextMeshEdge             (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_FirstVertexEdge          (TQ3MeshVertex          vertex,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_NextVertexEdge           (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_FirstVertexVertex        (TQ3MeshVertex          vertex,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_NextVertexVertex         (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_FirstVertexFace          (TQ3MeshVertex          vertex,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_NextVertexFace           (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_FirstFaceEdge            (TQ3MeshFace            face,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_NextFaceEdge             (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_FirstFaceVertex          (TQ3MeshFace            face,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_NextFaceVertex           (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_FirstFaceFace            (TQ3MeshFace            face,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_NextFaceFace             (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshContour )
  Q3Mesh_FirstFaceContour         (TQ3MeshFace            face,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshContour )
  Q3Mesh_NextFaceContour          (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_FirstContourEdge         (TQ3MeshContour         contour,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshEdge )
  Q3Mesh_NextContourEdge          (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_FirstContourVertex       (TQ3MeshContour         contour,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshVertex )
  Q3Mesh_NextContourVertex        (TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_FirstContourFace         (TQ3MeshContour         contour,
                                   TQ3MeshIterator *      iterator);
  
  EXTERN_API_C( TQ3MeshFace )
  Q3Mesh_NextContourFace          (TQ3MeshIterator *      iterator);
  
  define    Q3ForEachMeshComponent(m,c,i)                                       \
    for ( (c) = Q3Mesh_FirstMeshComponent((m),(i));                         \
          (c);                                                              \
          (c) = Q3Mesh_NextMeshComponent((i)) )
  
  define Q3ForEachComponentVertex(c,v,i)                                        \
    for ( (v) = Q3Mesh_FirstComponentVertex((c),(i));                       \
          (v);                                                              \
          (v) = Q3Mesh_NextComponentVertex((i)) )
          
  define Q3ForEachComponentEdge(c,e,i)                                        \
    for ( (e) = Q3Mesh_FirstComponentEdge((c),(i));                         \
          (e);                                                              \
          (e) = Q3Mesh_NextComponentEdge((i)) )
  
  define Q3ForEachMeshVertex(m,v,i)                                         \
    for ( (v) = Q3Mesh_FirstMeshVertex((m),(i));                            \
          (v);                                                              \
          (v) = Q3Mesh_NextMeshVertex((i)) )
  
  define Q3ForEachMeshFace(m,f,i)                                          \
    for ( (f) = Q3Mesh_FirstMeshFace((m),(i));                              \
          (f);                                                              \
          (f) = Q3Mesh_NextMeshFace((i)) )
  
  define Q3ForEachMeshEdge(m,e,i)                                            \
    for ( (e) = Q3Mesh_FirstMeshEdge((m),(i));                              \
          (e);                                                              \
          (e) = Q3Mesh_NextMeshEdge((i)) )
  
  define Q3ForEachVertexEdge(v,e,i)                                          \
    for ( (e) = Q3Mesh_FirstVertexEdge((v),(i));                            \
          (e);                                                              \
          (e) = Q3Mesh_NextVertexEdge((i)) )
  
  define Q3ForEachVertexVertex(v,n,i)                                       \
    for ( (n) = Q3Mesh_FirstVertexVertex((v),(i));                          \
          (n);                                                              \
          (n) = Q3Mesh_NextVertexVertex((i)) )
  
  define Q3ForEachVertexFace(v,f,i)                                          \
    for ( (f) = Q3Mesh_FirstVertexFace((v),(i));                            \
          (f);                                                              \
          (f) = Q3Mesh_NextVertexFace((i)) )
  
  define Q3ForEachFaceEdge(f,e,i)                                          \
    for ( (e) = Q3Mesh_FirstFaceEdge((f),(i));                              \
          (e);                                                              \
          (e) = Q3Mesh_NextFaceEdge((i)) )
  
  define Q3ForEachFaceVertex(f,v,i)                                          \
    for ( (v) = Q3Mesh_FirstFaceVertex((f),(i));                            \
          (v);                                                              \
          (v) = Q3Mesh_NextFaceVertex((i)) )
     
  define Q3ForEachFaceFace(f,n,i)                                           \
    for ( (n) = Q3Mesh_FirstFaceFace((f),(i));                              \
          (n);                                                              \
          (n) = Q3Mesh_NextFaceFace((i)) )
         
  define Q3ForEachFaceContour(f,h,i)                                          \
    for ( (h) = Q3Mesh_FirstFaceContour((f),(i));                           \
          (h);                                                              \
          (h) = Q3Mesh_NextFaceContour((i)) )
  
  define Q3ForEachContourEdge(h,e,i)                                          \
    for ( (e) = Q3Mesh_FirstContourEdge((h),(i));                           \
          (e);                                                              \
          (e) = Q3Mesh_NextContourEdge((i)) )
  
  define Q3ForEachContourVertex(h,v,i)                                        \
    for ( (v) = Q3Mesh_FirstContourVertex((h),(i));                         \
          (v);                                                              \
          (v) = Q3Mesh_NextContourVertex((i)) )
  
  define Q3ForEachContourFace(h,f,i)                                            \
    for ( (f) = Q3Mesh_FirstContourFace((h),(i));                           \
          (f);                                                              \
          (f) = Q3Mesh_NextContourFace((i)) )
  
  
**************************************************************************** * ** * Maximum order for NURB Curves ** * ** ***************************************************************************

  
  define kQ3NURBCurveMaxOrder    16
  
  
**************************************************************************** * ** * NURB Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3NURBCurveData {
      unsigned long                   order;
      unsigned long                   numPoints;
      TQ3RationalPoint4D *            controlPoints;
      float *                         knots;
      TQ3AttributeSet                 curveAttributeSet;
  };
  typedef struct TQ3NURBCurveData         TQ3NURBCurveData;
  
**************************************************************************** * ** * NURB Curve Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3NURBCurve_New                 (const TQ3NURBCurveData * curveData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_Submit              (const TQ3NURBCurveData * curveData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_SetData             (TQ3GeometryObject      curve,
                                   const TQ3NURBCurveData * nurbCurveData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_GetData             (TQ3GeometryObject      curve,
                                   TQ3NURBCurveData *     nurbCurveData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_EmptyData           (TQ3NURBCurveData *     nurbCurveData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_SetControlPoint     (TQ3GeometryObject      curve,
                                   unsigned long          pointIndex,
                                   const TQ3RationalPoint4D * point4D);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_GetControlPoint     (TQ3GeometryObject      curve,
                                   unsigned long          pointIndex,
                                   TQ3RationalPoint4D *   point4D);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_SetKnot             (TQ3GeometryObject      curve,
                                   unsigned long          knotIndex,
                                   float                  knotValue);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBCurve_GetKnot             (TQ3GeometryObject      curve,
                                   unsigned long          knotIndex,
                                   float *                knotValue);
  
  
**************************************************************************** * ** * Maximum NURB Patch Order ** * ** ***************************************************************************

  
  define kQ3NURBPatchMaxOrder    11
  
**************************************************************************** * ** * NURB Patch Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3NURBPatchTrimCurveData {
      unsigned long                   order;
      unsigned long                   numPoints;
      TQ3RationalPoint3D *            controlPoints;
      float *                         knots;
  };
  typedef struct TQ3NURBPatchTrimCurveData TQ3NURBPatchTrimCurveData;
  
  struct TQ3NURBPatchTrimLoopData {
      unsigned long                   numTrimCurves;
      TQ3NURBPatchTrimCurveData *     trimCurves;
  };
  typedef struct TQ3NURBPatchTrimLoopData TQ3NURBPatchTrimLoopData;
  
  struct TQ3NURBPatchData {
      unsigned long                   uOrder;
      unsigned long                   vOrder;
      unsigned long                   numRows;
      unsigned long                   numColumns;
      TQ3RationalPoint4D *            controlPoints;
      float *                         uKnots;
      float *                         vKnots;
      unsigned long                   numTrimLoops;
      TQ3NURBPatchTrimLoopData *      trimLoops;
      TQ3AttributeSet                 patchAttributeSet;
  };
  typedef struct TQ3NURBPatchData         TQ3NURBPatchData;
  
**************************************************************************** * ** * NURB Patch Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3NURBPatch_New                 (const TQ3NURBPatchData * nurbPatchData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_Submit              (const TQ3NURBPatchData * nurbPatchData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_SetData             (TQ3GeometryObject      nurbPatch,
                                   const TQ3NURBPatchData * nurbPatchData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_GetData             (TQ3GeometryObject      nurbPatch,
                                   TQ3NURBPatchData *     nurbPatchData);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_SetControlPoint     (TQ3GeometryObject      nurbPatch,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   const TQ3RationalPoint4D * point4D);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_GetControlPoint     (TQ3GeometryObject      nurbPatch,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   TQ3RationalPoint4D *   point4D);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_SetUKnot            (TQ3GeometryObject      nurbPatch,
                                   unsigned long          knotIndex,
                                   float                  knotValue);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_SetVKnot            (TQ3GeometryObject      nurbPatch,
                                   unsigned long          knotIndex,
                                   float                  knotValue);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_GetUKnot            (TQ3GeometryObject      nurbPatch,
                                   unsigned long          knotIndex,
                                   float *                knotValue);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_GetVKnot            (TQ3GeometryObject      nurbPatch,
                                   unsigned long          knotIndex,
                                   float *                knotValue);
  
  EXTERN_API_C( TQ3Status )
  Q3NURBPatch_EmptyData           (TQ3NURBPatchData *     nurbPatchData);
  
  
**************************************************************************** * ** * Pixmap Marker Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3PixmapMarkerData {
      TQ3Point3D                      position;
      long                            xOffset;
      long                            yOffset;
      TQ3StoragePixmap                pixmap;
      TQ3AttributeSet                 pixmapMarkerAttributeSet;
  };
  typedef struct TQ3PixmapMarkerData      TQ3PixmapMarkerData;
  
**************************************************************************** * ** * Pixmap Marker Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3PixmapMarker_New              (const TQ3PixmapMarkerData * pixmapMarkerData);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_Submit           (const TQ3PixmapMarkerData * pixmapMarkerData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_SetData          (TQ3GeometryObject      geometry,
                                   const TQ3PixmapMarkerData * pixmapMarkerData);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_GetData          (TQ3GeometryObject      geometry,
                                   TQ3PixmapMarkerData *  pixmapMarkerData);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_EmptyData        (TQ3PixmapMarkerData *  pixmapMarkerData);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_GetPosition      (TQ3GeometryObject      pixmapMarker,
                                   TQ3Point3D *           position);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_SetPosition      (TQ3GeometryObject      pixmapMarker,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_GetXOffset       (TQ3GeometryObject      pixmapMarker,
                                   long *                 xOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_SetXOffset       (TQ3GeometryObject      pixmapMarker,
                                   long                   xOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_GetYOffset       (TQ3GeometryObject      pixmapMarker,
                                   long *                 yOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_SetYOffset       (TQ3GeometryObject      pixmapMarker,
                                   long                   yOffset);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_GetPixmap        (TQ3GeometryObject      pixmapMarker,
                                   TQ3StoragePixmap *     pixmap);
  
  EXTERN_API_C( TQ3Status )
  Q3PixmapMarker_SetPixmap        (TQ3GeometryObject      pixmapMarker,
                                   const TQ3StoragePixmap * pixmap);
  
  
**************************************************************************** * ** * Point Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3PointData {
      TQ3Point3D                      point;
      TQ3AttributeSet                 pointAttributeSet;
  };
  typedef struct TQ3PointData             TQ3PointData;
  
**************************************************************************** * ** * Point Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Point_New                     (const TQ3PointData *   pointData);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_Submit                  (const TQ3PointData *   pointData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_GetData                 (TQ3GeometryObject      point,
                                   TQ3PointData *         pointData);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_SetData                 (TQ3GeometryObject      point,
                                   const TQ3PointData *   pointData);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_EmptyData               (TQ3PointData *         pointData);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_SetPosition             (TQ3GeometryObject      point,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3Point_GetPosition             (TQ3GeometryObject      point,
                                   TQ3Point3D *           position);
  
  
**************************************************************************** * ** * Polygon Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3PolygonData {
      unsigned long                   numVertices;
      TQ3Vertex3D *                   vertices;
      TQ3AttributeSet                 polygonAttributeSet;
  };
  typedef struct TQ3PolygonData           TQ3PolygonData;
  
**************************************************************************** * ** * Polygon Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Polygon_New                   (const TQ3PolygonData * polygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_Submit                (const TQ3PolygonData * polygonData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_SetData               (TQ3GeometryObject      polygon,
                                   const TQ3PolygonData * polygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_GetData               (TQ3GeometryObject      polygon,
                                   TQ3PolygonData *       polygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_EmptyData             (TQ3PolygonData *       polygonData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_GetVertexPosition     (TQ3GeometryObject      polygon,
                                   unsigned long          index,
                                   TQ3Point3D *           point);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_SetVertexPosition     (TQ3GeometryObject      polygon,
                                   unsigned long          index,
                                   const TQ3Point3D *     point);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_GetVertexAttributeSet (TQ3GeometryObject      polygon,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Polygon_SetVertexAttributeSet (TQ3GeometryObject      polygon,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  
**************************************************************************** * ** * Polyhedron Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  enum TQ3PolyhedronEdgeMasks {
      kQ3PolyhedronEdgeNone       = 0,
      kQ3PolyhedronEdge01         = 1 << 0,
      kQ3PolyhedronEdge12         = 1 << 1,
      kQ3PolyhedronEdge20         = 1 << 2,
      kQ3PolyhedronEdgeAll        = kQ3PolyhedronEdge01 | kQ3PolyhedronEdge12 | kQ3PolyhedronEdge20
  };
  typedef enum TQ3PolyhedronEdgeMasks TQ3PolyhedronEdgeMasks;
  
  typedef unsigned long                   TQ3PolyhedronEdge;
  
  struct TQ3PolyhedronEdgeData {
      unsigned long                   vertexIndices[2];
      unsigned long                   triangleIndices[2];
      TQ3AttributeSet                 edgeAttributeSet;
  };
  typedef struct TQ3PolyhedronEdgeData    TQ3PolyhedronEdgeData;
  
  struct TQ3PolyhedronTriangleData {
      unsigned long                   vertexIndices[3];
      TQ3PolyhedronEdge               edgeFlag;
      TQ3AttributeSet                 triangleAttributeSet;
  };
  typedef struct TQ3PolyhedronTriangleData TQ3PolyhedronTriangleData;
  
  struct TQ3PolyhedronData {
      unsigned long                   numVertices;
      TQ3Vertex3D *                   vertices;
      unsigned long                   numEdges;
      TQ3PolyhedronEdgeData *         edges;
      unsigned long                   numTriangles;
      TQ3PolyhedronTriangleData *     triangles;
      TQ3AttributeSet                 polyhedronAttributeSet;
  };
  typedef struct TQ3PolyhedronData        TQ3PolyhedronData;
  
**************************************************************************** * ** * Polyhedron Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Polyhedron_New                (const TQ3PolyhedronData * polyhedronData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_Submit             (const TQ3PolyhedronData * polyhedronData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_SetData            (TQ3GeometryObject      polyhedron,
                                   const TQ3PolyhedronData * polyhedronData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_GetData            (TQ3GeometryObject      polyhedron,
                                   TQ3PolyhedronData *    polyhedronData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_EmptyData          (TQ3PolyhedronData *    polyhedronData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_SetVertexPosition  (TQ3GeometryObject      polyhedron,
                                   unsigned long          index,
                                   const TQ3Point3D *     point);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_GetVertexPosition  (TQ3GeometryObject      polyhedron,
                                   unsigned long          index,
                                   TQ3Point3D *           point);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_SetVertexAttributeSet (TQ3GeometryObject   polyhedron,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_GetVertexAttributeSet (TQ3GeometryObject   polyhedron,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_GetTriangleData    (TQ3GeometryObject      polyhedron,
                                   unsigned long          triangleIndex,
                                   TQ3PolyhedronTriangleData * triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_SetTriangleData    (TQ3GeometryObject      polyhedron,
                                   unsigned long          triangleIndex,
                                   const TQ3PolyhedronTriangleData * triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_GetEdgeData        (TQ3GeometryObject      polyhedron,
                                   unsigned long          edgeIndex,
                                   TQ3PolyhedronEdgeData * edgeData);
  
  EXTERN_API_C( TQ3Status )
  Q3Polyhedron_SetEdgeData        (TQ3GeometryObject      polyhedron,
                                   unsigned long          edgeIndex,
                                   const TQ3PolyhedronEdgeData * edgeData);
  
  
**************************************************************************** * ** * PolyLine Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3PolyLineData {
      unsigned long                   numVertices;
      TQ3Vertex3D *                   vertices;
      TQ3AttributeSet *               segmentAttributeSet;
      TQ3AttributeSet                 polyLineAttributeSet;
  };
  typedef struct TQ3PolyLineData          TQ3PolyLineData;
  
**************************************************************************** * ** * PolyLine Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3PolyLine_New                  (const TQ3PolyLineData * polylineData);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_Submit               (const TQ3PolyLineData * polyLineData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_SetData              (TQ3GeometryObject      polyLine,
                                   const TQ3PolyLineData * polyLineData);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_GetData              (TQ3GeometryObject      polyLine,
                                   TQ3PolyLineData *      polyLineData);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_EmptyData            (TQ3PolyLineData *      polyLineData);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_GetVertexPosition    (TQ3GeometryObject      polyLine,
                                   unsigned long          index,
                                   TQ3Point3D *           position);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_SetVertexPosition    (TQ3GeometryObject      polyLine,
                                   unsigned long          index,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_GetVertexAttributeSet (TQ3GeometryObject     polyLine,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_SetVertexAttributeSet (TQ3GeometryObject     polyLine,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_GetSegmentAttributeSet (TQ3GeometryObject    polyLine,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3PolyLine_SetSegmentAttributeSet (TQ3GeometryObject    polyLine,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  
**************************************************************************** * ** * Torus Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3TorusData {
      TQ3Point3D                      origin;
      TQ3Vector3D                     orientation;
      TQ3Vector3D                     majorRadius;
      TQ3Vector3D                     minorRadius;
      float                           ratio;
      float                           uMin;
      float                           uMax;
      float                           vMin;
      float                           vMax;
      TQ3EndCap                       caps;
      TQ3AttributeSet                 interiorAttributeSet;
      TQ3AttributeSet                 torusAttributeSet;
  };
  typedef struct TQ3TorusData             TQ3TorusData;
  
**************************************************************************** * ** * Torus Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Torus_New                     (const TQ3TorusData *   torusData);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_Submit                  (const TQ3TorusData *   torusData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetData                 (TQ3GeometryObject      torus,
                                   const TQ3TorusData *   torusData);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetData                 (TQ3GeometryObject      torus,
                                   TQ3TorusData *         torusData);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetOrigin               (TQ3GeometryObject      torus,
                                   const TQ3Point3D *     origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetOrientation          (TQ3GeometryObject      torus,
                                   const TQ3Vector3D *    orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetMajorRadius          (TQ3GeometryObject      torus,
                                   const TQ3Vector3D *    majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetMinorRadius          (TQ3GeometryObject      torus,
                                   const TQ3Vector3D *    minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_SetRatio                (TQ3GeometryObject      torus,
                                   float                  ratio);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetOrigin               (TQ3GeometryObject      torus,
                                   TQ3Point3D *           origin);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetOrientation          (TQ3GeometryObject      torus,
                                   TQ3Vector3D *          orientation);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetMajorRadius          (TQ3GeometryObject      torus,
                                   TQ3Vector3D *          majorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetMinorRadius          (TQ3GeometryObject      torus,
                                   TQ3Vector3D *          minorRadius);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_GetRatio                (TQ3GeometryObject      torus,
                                   float *                ratio);
  
  EXTERN_API_C( TQ3Status )
  Q3Torus_EmptyData               (TQ3TorusData *         torusData);
  
  
**************************************************************************** * ** * Triangle Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3TriangleData {
      TQ3Vertex3D                     vertices[3];
      TQ3AttributeSet                 triangleAttributeSet;
  };
  typedef struct TQ3TriangleData          TQ3TriangleData;
  
**************************************************************************** * ** * Triangle Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3Triangle_New                  (const TQ3TriangleData * triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_Submit               (const TQ3TriangleData * triangleData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_SetData              (TQ3GeometryObject      triangle,
                                   const TQ3TriangleData * triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_GetData              (TQ3GeometryObject      triangle,
                                   TQ3TriangleData *      triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_EmptyData            (TQ3TriangleData *      triangleData);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_GetVertexPosition    (TQ3GeometryObject      triangle,
                                   unsigned long          index,
                                   TQ3Point3D *           point);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_SetVertexPosition    (TQ3GeometryObject      triangle,
                                   unsigned long          index,
                                   const TQ3Point3D *     point);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_GetVertexAttributeSet (TQ3GeometryObject     triangle,
                                   unsigned long          index,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Triangle_SetVertexAttributeSet (TQ3GeometryObject     triangle,
                                   unsigned long          index,
                                   TQ3AttributeSet        attributeSet);
  
  
**************************************************************************** * ** * TriGrid Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3TriGridData {
      unsigned long                   numRows;
      unsigned long                   numColumns;
      TQ3Vertex3D *                   vertices;
      TQ3AttributeSet *               facetAttributeSet;
      TQ3AttributeSet                 triGridAttributeSet;
  };
  typedef struct TQ3TriGridData           TQ3TriGridData;
  
**************************************************************************** * ** * TriGrid Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3TriGrid_New                   (const TQ3TriGridData * triGridData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_Submit                (const TQ3TriGridData * triGridData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_SetData               (TQ3GeometryObject      triGrid,
                                   const TQ3TriGridData * triGridData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_GetData               (TQ3GeometryObject      triGrid,
                                   TQ3TriGridData *       triGridData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_EmptyData             (TQ3TriGridData *       triGridData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_GetVertexPosition     (TQ3GeometryObject      triGrid,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   TQ3Point3D *           position);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_SetVertexPosition     (TQ3GeometryObject      triGrid,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   const TQ3Point3D *     position);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_GetVertexAttributeSet (TQ3GeometryObject      triGrid,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_SetVertexAttributeSet (TQ3GeometryObject      triGrid,
                                   unsigned long          rowIndex,
                                   unsigned long          columnIndex,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_GetFacetAttributeSet  (TQ3GeometryObject      triGrid,
                                   unsigned long          faceIndex,
                                   TQ3AttributeSet *      facetAttributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3TriGrid_SetFacetAttributeSet  (TQ3GeometryObject      triGrid,
                                   unsigned long          faceIndex,
                                   TQ3AttributeSet        facetAttributeSet);
  
  
**************************************************************************** * ** * TriMesh Data Structure Definitions ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3TriMeshTriangleData {
      unsigned long                   pointIndices[3];
  };
  typedef struct TQ3TriMeshTriangleData   TQ3TriMeshTriangleData;
  
  struct TQ3TriMeshEdgeData {
      unsigned long                   pointIndices[2];
      unsigned long                   triangleIndices[2];
  };
  typedef struct TQ3TriMeshEdgeData       TQ3TriMeshEdgeData;
  
  struct TQ3TriMeshAttributeData {
      TQ3AttributeType                attributeType;              /* The type of attribute       */
      void *                          data;                       /* Pointer to the contiguous     */
                                                                  /* attribute data.           */
      char *                          attributeUseArray;          /* This is only used with custom */
                                                                  /* attributes                */
  };
  typedef struct TQ3TriMeshAttributeData  TQ3TriMeshAttributeData;
  
  struct TQ3TriMeshData {
      TQ3AttributeSet                 triMeshAttributeSet;
  
      unsigned long                   numTriangles;
      TQ3TriMeshTriangleData *        triangles;
  
      unsigned long                   numTriangleAttributeTypes;
      TQ3TriMeshAttributeData *       triangleAttributeTypes;
  
      unsigned long                   numEdges;
      TQ3TriMeshEdgeData *            edges;
  
      unsigned long                   numEdgeAttributeTypes;
      TQ3TriMeshAttributeData *       edgeAttributeTypes;
  
      unsigned long                   numPoints;
      TQ3Point3D *                    points;
  
      unsigned long                   numVertexAttributeTypes;
      TQ3TriMeshAttributeData *       vertexAttributeTypes;
  
      TQ3BoundingBox                  bBox;
  };
  typedef struct TQ3TriMeshData           TQ3TriMeshData;
  
**************************************************************************** * ** * TriMesh Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3GeometryObject )
  Q3TriMesh_New                   (const TQ3TriMeshData * triMeshData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriMesh_Submit                (const TQ3TriMeshData * triMeshData,
                                   TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3TriMesh_SetData               (TQ3GeometryObject      triMesh,
                                   const TQ3TriMeshData * triMeshData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriMesh_GetData               (TQ3GeometryObject      triMesh,
                                   TQ3TriMeshData *       triMeshData);
  
  EXTERN_API_C( TQ3Status )
  Q3TriMesh_EmptyData             (TQ3TriMeshData *       triMeshData);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if PRAGMA_ENUM_ALWAYSINT
      #pragma enumsalwaysint reset
      #ifdef __QD3DGEOMETRY__RESTORE_TWOBYTEINTS
          #pragma fourbyteints off
      #endif
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=reset
  #elif defined(__QD3DGEOMETRY__RESTORE_PACKED_ENUMS)
      #pragma options(pack_enums)
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  endif
  
  ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  endif
  
  ifdef __cplusplus
  }
  endif
  
  endif /* __QD3DGEOMETRY__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.