topical media & game development

talk show tell print

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



  /*
       File:       QD3DIO.h
   
       Contains:   QuickDraw 3D IO API
   
       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 __QD3DIO__
  define __QD3DIO__
  
  ifndef __QD3D__
  include <QD3D.h>
  endif
  
  ifndef __QD3DDRAWCONTEXT__
  include <QD3DDrawContext.h>
  endif
  
  ifndef __QD3DVIEW__
  include <QD3DView.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 __QD3DIO__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 __QD3DIO__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  endif
  
  
**************************************************************************** * ** * Basic Types ** * ** ***************************************************************************

  
  typedef unsigned char                   TQ3Uns8;
  typedef signed char                     TQ3Int8;
  typedef unsigned short                  TQ3Uns16;
  typedef signed short                    TQ3Int16;
  typedef unsigned long                   TQ3Uns32;
  typedef signed long                     TQ3Int32;
  if TARGET_RT_BIG_ENDIAN
  
  struct TQ3Uns64 {
      unsigned long                   hi;
      unsigned long                   lo;
  };
  typedef struct TQ3Uns64                 TQ3Uns64;
  
  struct TQ3Int64 {
      signed long                     hi;
      unsigned long                   lo;
  };
  typedef struct TQ3Int64                 TQ3Int64;
  else
  
  struct TQ3Uns64 {
      unsigned long                   lo;
      unsigned long                   hi;
  };
  typedef struct TQ3Uns64                 TQ3Uns64;
  
  struct TQ3Int64 {
      unsigned long                   lo;
      signed long                     hi;
  };
  typedef struct TQ3Int64                 TQ3Int64;
  endif  /* TARGET_RT_BIG_ENDIAN */
  
  typedef float                           TQ3Float32;
  typedef double                          TQ3Float64;
  typedef TQ3Uns32                        TQ3Size;
  
**************************************************************************** * ** * File Types ** * ** ***************************************************************************

  
  
  enum TQ3FileModeMasks {
      kQ3FileModeNormal           = 0,
      kQ3FileModeStream           = 1 << 0,
      kQ3FileModeDatabase         = 1 << 1,
      kQ3FileModeText             = 1 << 2
  };
  typedef enum TQ3FileModeMasks TQ3FileModeMasks;
  
  typedef unsigned long                   TQ3FileMode;
  
**************************************************************************** * ** * Method Types ** * ** ***************************************************************************

  
  /*
   *  IO Methods
   *
   *  The IO system treats all objects as groups of typed information.
   *  When you register your element or attribute, the "elementType" is the 
   *  binary type of your object, the "elementName" the ascii type.
   *  
   *  All objects in the metafile are made up of a "root" or parent object which
   *  defines the instantiated object type. You may define the format of your 
   *  data any way you wish as long as you use the primitives types above and the
   *  routines below.
   *
   *  Root Objects are often appended with additional child objects, called 
   *  subobjects. You may append your object with other QuickDraw 3D objects.
   *  
   *  Writing is straightforward: an object traverses itself any other objects 
   *  that make it up, then writes its own data. Writing uses two methods: 
   *  TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
   *
   *  The TQ3XObjectTraverseMethod method should:
   *  + First, Determine if the data should be written 
   *      - if you don't want to write out your object after examining your
   *          data, return kQ3Success in your Traverse method without calling
   *          any other submit calls.
   *  + Next, calculate the size of your object on disk
   *  + Gather whatever state from the view you need to preserve
   *      - you may access the view state NOW, as the state of the
   *          view duing your TQ3XObjectWriteMethod will not be valid. You may
   *          pass a temporary buffer to your write method.
   *  + Submit your view write data using Q3View_SubmitWriteData
   *      - note that you MUST call this before any other "_Submit" call.
   *      - you may pass in a "deleteMethod" for your data. This method
   *          will be called whether or not your write method succeeds or fails.
   *  + Submit your subobjects to the view
   *  
   *  The TQ3XObjectWriteMethod method should:
   *  + Write your data format to the file using the primitives routines below.
   *      - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
   *          method will be called upon exit of your write method.
   *
   *  Reading is less straightforward because your root object and
   *  any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
   *  is an implicit state contained in the file while reading, which you must 
   *  be aware of. When you first enter the read method, you must physically 
   *  read in your data format using the primitives routines until
   *  
   *  Q3File_IsEndOfData(file) == kQ3True
   *  
   *  Generally, your data format should be self-descriptive such that you do not
   *  need to call Q3File_IsEndOfData to determine if you are done reading. 
   *  However, this call is useful for determining zero-sized object or 
   *  determining the end of an object's data.
   *  
   *  Once you have read in all the data, you may collect subobjects. A metafile
   *  object ONLY has subobjects if it is in a container. The call
   *  
   *  Q3File_IsEndOfContainer(file)
   *  
   *  returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
   *  exist.
   *  
   *  At this point, you may use
   *  
   *  Q3File_GetNextObjectType
   *  Q3File_IsNextObjectOfType
   *  Q3File_ReadObject
   *  Q3File_SkipObject
   *  
   *  to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
   *  is kQ3True.
   * 
   */
  
  /*
   * IO Methods
   */
  enum {
      kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'),   /* version */
      kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'),      /* byte count */
      kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'),  /* byte count */
      kQ3XMethodTypeObjectWrite   = FOUR_CHAR_CODE('writ'),       /* Dump info to file */
      kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'),      /* Read info from file into buffer or, attach read data to parent */
      kQ3XMethodTypeObjectRead    = FOUR_CHAR_CODE('read'),
      kQ3XMethodTypeObjectAttach  = FOUR_CHAR_CODE('attc')
  };
  
  /*
   *  TQ3XObjectTraverseMethod
   *
   *  For "elements" (meaning "attributes, too), you will be passed NULL for 
   *  object. Sorry, custom objects will be available in the next major revision.
   *
   *  The "data" is a pointer to your internal element data.
   *
   *  The view is the current traversal view.
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  /*
   *  TQ3XObjectTraverseDataMethod
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  /*
   *  TQ3XObjectWriteMethod
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  /*
   *  Custom object writing 
   */
  typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3XView_SubmitWriteData         (TQ3ViewObject          view,
                                   TQ3Size                size,
                                   void *                 data,
                                   TQ3XDataDeleteMethod   deleteData);
  
  EXTERN_API_C( TQ3Status )
  Q3XView_SubmitSubObjectData     (TQ3ViewObject          view,
                                   TQ3XObjectClass        objectClass,
                                   unsigned long          size,
                                   void *                 data,
                                   TQ3XDataDeleteMethod   deleteData);
  
  /*
   *  TQ3XObjectReadMethod
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
  /*
   *  TQ3XObjectReadDataMethod
   *
   *  For "elements" (meaning "attributes", too), you must allocate stack space 
   *  and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
   *
   *  Otherwise, parentObject is whatever object your element is a subobject of...
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  /*
   *  TQ3XObjectAttachMethod
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);
  
  
**************************************************************************** * ** * Versioning ** * ** ***************************************************************************

  
  
  define Q3FileVersion(majorVersion, minorVersion)  (TQ3FileVersion) \
   ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  
  typedef unsigned long                   TQ3FileVersion;
  define kQ3FileVersionCurrent   Q3FileVersion(1,6)
  
  
**************************************************************************** * ** * File Routines ** * ** ***************************************************************************

  
  /*
   * Creation and accessors
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3FileObject )
  Q3File_New                      (void);
  
  EXTERN_API_C( TQ3Status )
  Q3File_GetStorage               (TQ3FileObject          theFile,
                                   TQ3StorageObject *     storage);
  
  EXTERN_API_C( TQ3Status )
  Q3File_SetStorage               (TQ3FileObject          theFile,
                                   TQ3StorageObject       storage);
  
  /*
   * Opening, and accessing "open" state, closing/cancelling
   */
  EXTERN_API_C( TQ3Status )
  Q3File_OpenRead                 (TQ3FileObject          theFile,
                                   TQ3FileMode *          mode);
  
  EXTERN_API_C( TQ3Status )
  Q3File_OpenWrite                (TQ3FileObject          theFile,
                                   TQ3FileMode            mode);
  
  EXTERN_API_C( TQ3Status )
  Q3File_IsOpen                   (TQ3FileObject          theFile,
                                   TQ3Boolean *           isOpen);
  
  EXTERN_API_C( TQ3Status )
  Q3File_GetMode                  (TQ3FileObject          theFile,
                                   TQ3FileMode *          mode);
  
  EXTERN_API_C( TQ3Status )
  Q3File_GetVersion               (TQ3FileObject          theFile,
                                   TQ3FileVersion *       version);
  
  EXTERN_API_C( TQ3Status )
  Q3File_Close                    (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3File_Cancel                   (TQ3FileObject          theFile);
  
  /*
   * Writing (Application)
   */
  EXTERN_API_C( TQ3Status )
  Q3View_StartWriting             (TQ3ViewObject          view,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3ViewStatus )
  Q3View_EndWriting               (TQ3ViewObject          view);
  
  /*
   * Reading (Application)
   */
  EXTERN_API_C( TQ3ObjectType )
  Q3File_GetNextObjectType        (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Boolean )
  Q3File_IsNextObjectOfType       (TQ3FileObject          theFile,
                                   TQ3ObjectType          ofType);
  
  EXTERN_API_C( TQ3Object )
  Q3File_ReadObject               (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3File_SkipObject               (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Boolean )
  Q3File_IsEndOfData              (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Boolean )
  Q3File_IsEndOfContainer         (TQ3FileObject          theFile,
                                   TQ3Object              rootObject);
  
  EXTERN_API_C( TQ3Boolean )
  Q3File_IsEndOfFile              (TQ3FileObject          theFile);
  
  /*    
   *  External file references
   */
  EXTERN_API_C( TQ3Status )
  Q3File_MarkAsExternalReference  (TQ3FileObject          theFile,
                                   TQ3SharedObject        sharedObject);
  
  EXTERN_API_C( TQ3GroupObject )
  Q3File_GetExternalReferences    (TQ3FileObject          theFile);
  
  /*    
   *  Tracking editing in read-in objects with custom elements
   */
  EXTERN_API_C( TQ3Status )
  Q3Shared_ClearEditTracking      (TQ3SharedObject        sharedObject);
  
  EXTERN_API_C( TQ3Boolean )
  Q3Shared_GetEditTrackingState   (TQ3SharedObject        sharedObject);
  
  /*    
   *  Reading objects inside a group one-by-one
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  enum TQ3FileReadGroupStateMasks {
      kQ3FileReadWholeGroup       = 0,
      kQ3FileReadObjectsInGroup   = 1 << 0,
      kQ3FileCurrentlyInsideGroup = 1 << 1
  };
  typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;
  
  typedef unsigned long                   TQ3FileReadGroupState;
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3File_SetReadInGroup           (TQ3FileObject          theFile,
                                   TQ3FileReadGroupState  readGroupState);
  
  EXTERN_API_C( TQ3Status )
  Q3File_GetReadInGroup           (TQ3FileObject          theFile,
                                   TQ3FileReadGroupState * readGroupState);
  
  /*
   * Idling
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3File_SetIdleMethod            (TQ3FileObject          theFile,
                                   TQ3FileIdleMethod      idle,
                                   const void *           idleData);
  
  
**************************************************************************** * ** * Primitives Routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3NewLine_Write                 (TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns8_Read                     (TQ3Uns8 *              data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns8_Write                    (TQ3Uns8                data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns16_Read                    (TQ3Uns16 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns16_Write                   (TQ3Uns16               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns32_Read                    (TQ3Uns32 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns32_Write                   (TQ3Uns32               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int8_Read                     (TQ3Int8 *              data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int8_Write                    (TQ3Int8                data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int16_Read                    (TQ3Int16 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int16_Write                   (TQ3Int16               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int32_Read                    (TQ3Int32 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int32_Write                   (TQ3Int32               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns64_Read                    (TQ3Uns64 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Uns64_Write                   (TQ3Uns64               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int64_Read                    (TQ3Int64 *             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Int64_Write                   (TQ3Int64               data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Float32_Read                  (TQ3Float32 *           data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Float32_Write                 (TQ3Float32             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Float64_Read                  (TQ3Float64 *           data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Float64_Write                 (TQ3Float64             data,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Size )
  Q3Size_Pad                      (TQ3Size                size);
  
  /*
   * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
   */
  EXTERN_API_C( TQ3Status )
  Q3String_Read                   (char *                 data,
                                   unsigned long *        length,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3String_Write                  (const char *           data,
                                   TQ3FileObject          theFile);
  
  /* 
   * This call will read Q3Size_Pad(size) bytes,
   *  but only place size bytes into data.
   */
  EXTERN_API_C( TQ3Status )
  Q3RawData_Read                  (unsigned char *        data,
                                   unsigned long          size,
                                   TQ3FileObject          theFile);
  
  /* 
   * This call will write Q3Size_Pad(size) bytes,
   *  adding 0's to pad to the nearest 4 byte boundary.
   */
  EXTERN_API_C( TQ3Status )
  Q3RawData_Write                 (const unsigned char *  data,
                                   unsigned long          size,
                                   TQ3FileObject          theFile);
  
  
**************************************************************************** * ** * Convenient Primitives Routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3Point2D_Read                  (TQ3Point2D *           point2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Point2D_Write                 (const TQ3Point2D *     point2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Point3D_Read                  (TQ3Point3D *           point3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Point3D_Write                 (const TQ3Point3D *     point3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3RationalPoint3D_Read          (TQ3RationalPoint3D *   point3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3RationalPoint3D_Write         (const TQ3RationalPoint3D * point3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3RationalPoint4D_Read          (TQ3RationalPoint4D *   point4D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3RationalPoint4D_Write         (const TQ3RationalPoint4D * point4D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Vector2D_Read                 (TQ3Vector2D *          vector2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Vector2D_Write                (const TQ3Vector2D *    vector2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Vector3D_Read                 (TQ3Vector3D *          vector3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Vector3D_Write                (const TQ3Vector3D *    vector3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Matrix4x4_Read                (TQ3Matrix4x4 *         matrix4x4,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Matrix4x4_Write               (const TQ3Matrix4x4 *   matrix4x4,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Tangent2D_Read                (TQ3Tangent2D *         tangent2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Tangent2D_Write               (const TQ3Tangent2D *   tangent2D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Tangent3D_Read                (TQ3Tangent3D *         tangent3D,
                                   TQ3FileObject          theFile);
  
  EXTERN_API_C( TQ3Status )
  Q3Tangent3D_Write               (const TQ3Tangent3D *   tangent3D,
                                   TQ3FileObject          theFile);
  
  /*  This call affects only text Files - it is a no-op in binary files */
  EXTERN_API_C( TQ3Status )
  Q3Comment_Write                 (char *                 comment,
                                   TQ3FileObject          theFile);
  
  
**************************************************************************** * ** * Unknown Object ** * ** * Unknown objects are generated when reading files which contain ** * custom data which has not been registered in the current ** * instantiation of QuickDraw 3D. ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3ObjectType )
  Q3Unknown_GetType               (TQ3UnknownObject       unknownObject);
  
  EXTERN_API_C( TQ3Status )
  Q3Unknown_GetDirtyState         (TQ3UnknownObject       unknownObject,
                                   TQ3Boolean *           isDirty);
  
  EXTERN_API_C( TQ3Status )
  Q3Unknown_SetDirtyState         (TQ3UnknownObject       unknownObject,
                                   TQ3Boolean             isDirty);
  
  
**************************************************************************** * ** * Unknown Text Routines ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3UnknownTextData {
      char *                          objectName;                 /* '\0' terminated */
      char *                          contents;                   /* '\0' terminated */
  };
  typedef struct TQ3UnknownTextData       TQ3UnknownTextData;
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3UnknownText_GetData           (TQ3UnknownObject       unknownObject,
                                   TQ3UnknownTextData *   unknownTextData);
  
  EXTERN_API_C( TQ3Status )
  Q3UnknownText_EmptyData         (TQ3UnknownTextData *   unknownTextData);
  
  
**************************************************************************** * ** * Unknown Binary Routines ** * ** ***************************************************************************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3UnknownBinaryData {
      TQ3ObjectType                   objectType;
      unsigned long                   size;
      TQ3Endian                       byteOrder;
      char *                          contents;
  };
  typedef struct TQ3UnknownBinaryData     TQ3UnknownBinaryData;
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3UnknownBinary_GetData         (TQ3UnknownObject       unknownObject,
                                   TQ3UnknownBinaryData * unknownBinaryData);
  
  EXTERN_API_C( TQ3Status )
  Q3UnknownBinary_EmptyData       (TQ3UnknownBinaryData * unknownBinaryData);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3UnknownBinary_GetTypeString   (TQ3UnknownObject       unknownObject,
                                   char **                typeString);
  
  EXTERN_API_C( TQ3Status )
  Q3UnknownBinary_EmptyTypeString (char **                typeString);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  
**************************************************************************** * ** * ViewHints routines ** * ** * ViewHints are an object in a metafile to give you some hints on how ** * to render a scene. You may create a view with any of the objects ** * retrieved from it, or you can just throw it away. ** * ** * To write a view hints to a file, create a view hints object from a ** * view and write the view hints. ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3ViewHintsObject )
  Q3ViewHints_New                 (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetRenderer         (TQ3ViewHintsObject     viewHints,
                                   TQ3RendererObject      renderer);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetRenderer         (TQ3ViewHintsObject     viewHints,
                                   TQ3RendererObject *    renderer);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetCamera           (TQ3ViewHintsObject     viewHints,
                                   TQ3CameraObject        camera);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetCamera           (TQ3ViewHintsObject     viewHints,
                                   TQ3CameraObject *      camera);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetLightGroup       (TQ3ViewHintsObject     viewHints,
                                   TQ3GroupObject         lightGroup);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetLightGroup       (TQ3ViewHintsObject     viewHints,
                                   TQ3GroupObject *       lightGroup);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetAttributeSet     (TQ3ViewHintsObject     viewHints,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetAttributeSet     (TQ3ViewHintsObject     viewHints,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetDimensionsState  (TQ3ViewHintsObject     viewHints,
                                   TQ3Boolean             isValid);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetDimensionsState  (TQ3ViewHintsObject     viewHints,
                                   TQ3Boolean *           isValid);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetDimensions       (TQ3ViewHintsObject     viewHints,
                                   unsigned long          width,
                                   unsigned long          height);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetDimensions       (TQ3ViewHintsObject     viewHints,
                                   unsigned long *        width,
                                   unsigned long *        height);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetMaskState        (TQ3ViewHintsObject     viewHints,
                                   TQ3Boolean             isValid);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetMaskState        (TQ3ViewHintsObject     viewHints,
                                   TQ3Boolean *           isValid);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetMask             (TQ3ViewHintsObject     viewHints,
                                   const TQ3Bitmap *      mask);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetMask             (TQ3ViewHintsObject     viewHints,
                                   TQ3Bitmap *            mask);
  
  /* Call Q3Bitmap_Empty when done with the mask  */
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetClearImageMethod (TQ3ViewHintsObject     viewHints,
                                   TQ3DrawContextClearImageMethod  clearMethod);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetClearImageMethod (TQ3ViewHintsObject     viewHints,
                                   TQ3DrawContextClearImageMethod * clearMethod);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_SetClearImageColor  (TQ3ViewHintsObject     viewHints,
                                   const TQ3ColorARGB *   color);
  
  EXTERN_API_C( TQ3Status )
  Q3ViewHints_GetClearImageColor  (TQ3ViewHintsObject     viewHints,
                                   TQ3ColorARGB *         color);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if PRAGMA_ENUM_ALWAYSINT
      #pragma enumsalwaysint reset
      #ifdef __QD3DIO__RESTORE_TWOBYTEINTS
          #pragma fourbyteints off
      #endif
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=reset
  #elif defined(__QD3DIO__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 /* __QD3DIO__ */
  
  


(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.