You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1523 lines
56 KiB
1523 lines
56 KiB
/* |
|
File: QD3D.h |
|
|
|
Contains: Base types for Quickdraw 3D |
|
|
|
Version: Technology: Quickdraw 3D 1.6 |
|
Release: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1995-1999 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 __QD3D__ |
|
#define __QD3D__ |
|
|
|
#ifndef __CONDITIONALMACROS__ |
|
#include <ConditionalMacros.h> |
|
#endif |
|
|
|
|
|
#if TARGET_OS_MAC |
|
#ifndef __MACTYPES__ |
|
#include <MacTypes.h> |
|
#endif |
|
|
|
#endif /* TARGET_OS_MAC */ |
|
|
|
#include <stdio.h> |
|
|
|
|
|
#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 __QD3D__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 __QD3D__RESTORE_PACKED_ENUMS |
|
#pragma options(!pack_enums) |
|
#endif |
|
#endif |
|
|
|
#if TARGET_OS_MAC |
|
#define OS_MACINTOSH 1 |
|
#define OS_WIN32 0 |
|
#define OS_UNIX 0 |
|
#define OS_NEXT 0 |
|
#define WINDOW_SYSTEM_MACINTOSH 1 |
|
#define WINDOW_SYSTEM_WIN32 0 |
|
#define WINDOW_SYSTEM_X11 0 |
|
#define WINDOW_SYSTEM_NEXT 0 |
|
#endif /* TARGET_OS_MAC */ |
|
|
|
#if TARGET_OS_WIN32 |
|
#define OS_MACINTOSH 0 |
|
#define OS_WIN32 1 |
|
#define OS_UNIX 0 |
|
#define OS_NEXT 0 |
|
#define WINDOW_SYSTEM_MACINTOSH 0 |
|
#define WINDOW_SYSTEM_WIN32 1 |
|
#define WINDOW_SYSTEM_X11 0 |
|
#define WINDOW_SYSTEM_NEXT 0 |
|
#endif /* TARGET_OS_WIN32 */ |
|
|
|
#if TARGET_OS_UNIX |
|
#define OS_MACINTOSH 0 |
|
#define OS_WIN32 0 |
|
#define WINDOW_SYSTEM_MACINTOSH 0 |
|
#define WINDOW_SYSTEM_WIN32 0 |
|
#if NeXT |
|
#define OS_UNIX 0 |
|
#define OS_NEXT 1 |
|
#define WINDOW_SYSTEM_X11 0 |
|
#define WINDOW_SYSTEM_NEXT 1 |
|
#else |
|
#define OS_UNIX 1 |
|
#define OS_NEXT 0 |
|
#define WINDOW_SYSTEM_X11 1 |
|
#define WINDOW_SYSTEM_NEXT 0 |
|
#endif /* NeXT */ |
|
|
|
#endif /* TARGET_OS_UNIX */ |
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Export Control ** |
|
** ** |
|
*****************************************************************************/ |
|
#if TARGET_OS_WIN32 |
|
#if defined(WIN32_EXPORTING) /* define when building DLL */ |
|
#define QD3D_EXPORT __declspec( dllexport ) |
|
#define QD3D_CALL |
|
#define QD3D_CALLBACK |
|
#else |
|
#define QD3D_EXPORT __declspec( dllimport ) |
|
#define QD3D_CALL __cdecl |
|
#define QD3D_CALLBACK __cdecl |
|
#endif /* WIN32_EXPORTING */ |
|
#else |
|
#define QD3D_EXPORT |
|
#define QD3D_CALL |
|
#define QD3D_CALLBACK |
|
#endif /* TARGET_OS_WIN32 */ |
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** NULL definition ** |
|
** ** |
|
*****************************************************************************/ |
|
|
|
#ifndef NULL |
|
#error /* NULL is undefined? */ |
|
#endif /* NULL */ |
|
|
|
/****************************************************************************** |
|
** ** |
|
** Objects ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Everything in QuickDraw 3D is an OBJECT: a bunch of data with a type, |
|
* deletion, duplication, and i/o methods. |
|
*/ |
|
typedef long TQ3ObjectType; |
|
typedef struct OpaqueTQ3Object* TQ3Object; |
|
/* */ |
|
/* |
|
* There are four subclasses of OBJECT: |
|
* an ELEMENT, which is data that is placed in a SET |
|
* a SHAREDOBJECT, which is reference-counted data that is shared |
|
* VIEWs, which maintain state information for an image |
|
* a PICK, which used to query a VIEW |
|
*/ |
|
typedef TQ3Object TQ3ElementObject; |
|
typedef TQ3Object TQ3SharedObject; |
|
typedef TQ3Object TQ3ViewObject; |
|
typedef TQ3Object TQ3PickObject; |
|
/* |
|
* There are several types of SharedObjects: |
|
* RENDERERs, which paint to a drawContext |
|
* DRAWCONTEXTs, which are an interface to a device |
|
* SETs, which maintains "mathematical sets" of ELEMENTs |
|
* FILEs, which maintain state information for a metafile |
|
* SHAPEs, which affect the state of the View |
|
* SHAPEPARTs, which contain geometry-specific data about a picking hit |
|
* CONTROLLERSTATEs, which hold state of the output channels for a CONTROLLER |
|
* TRACKERs, which represent a position and orientation in the user interface |
|
* STRINGs, which are abstractions of text string data. |
|
* STORAGE, which is an abstraction for stream-based data storage (files, memory) |
|
* TEXTUREs, for sharing bitmap information for TEXTURESHADERS |
|
* VIEWHINTs, which specifies viewing preferences in FILEs |
|
*/ |
|
typedef TQ3SharedObject TQ3RendererObject; |
|
typedef TQ3SharedObject TQ3DrawContextObject; |
|
typedef TQ3SharedObject TQ3SetObject; |
|
typedef TQ3SharedObject TQ3FileObject; |
|
typedef TQ3SharedObject TQ3ShapeObject; |
|
typedef TQ3SharedObject TQ3ShapePartObject; |
|
typedef TQ3SharedObject TQ3ControllerStateObject; |
|
typedef TQ3SharedObject TQ3TrackerObject; |
|
typedef TQ3SharedObject TQ3StringObject; |
|
typedef TQ3SharedObject TQ3StorageObject; |
|
typedef TQ3SharedObject TQ3TextureObject; |
|
typedef TQ3SharedObject TQ3ViewHintsObject; |
|
/* |
|
* There is one types of SET: |
|
* ATTRIBUTESETs, which contain ATTRIBUTEs which are inherited |
|
*/ |
|
typedef TQ3SetObject TQ3AttributeSet; |
|
/* |
|
* There are many types of SHAPEs: |
|
* LIGHTs, which affect how the RENDERER draws 3-D cues |
|
* CAMERAs, which affects the location and orientation of the RENDERER in space |
|
* GROUPs, which may contain any number of SHARED OBJECTS |
|
* GEOMETRYs, which are representations of three-dimensional data |
|
* SHADERs, which affect how colors are drawn on a geometry |
|
* STYLEs, which affect how the RENDERER paints to the DRAWCONTEXT |
|
* TRANSFORMs, which affect the coordinate system in the VIEW |
|
* REFERENCEs, which are references to objects in FILEs |
|
* UNKNOWN, which hold unknown objects read from a metafile. |
|
*/ |
|
typedef TQ3ShapeObject TQ3GroupObject; |
|
typedef TQ3ShapeObject TQ3GeometryObject; |
|
typedef TQ3ShapeObject TQ3ShaderObject; |
|
typedef TQ3ShapeObject TQ3StyleObject; |
|
typedef TQ3ShapeObject TQ3TransformObject; |
|
typedef TQ3ShapeObject TQ3LightObject; |
|
typedef TQ3ShapeObject TQ3CameraObject; |
|
typedef TQ3ShapeObject TQ3UnknownObject; |
|
typedef TQ3ShapeObject TQ3ReferenceObject; |
|
typedef TQ3ShapeObject TQ3StateOperatorObject; |
|
/* |
|
* For now, there is only one type of SHAPEPARTs: |
|
* MESHPARTs, which describe some part of a mesh |
|
*/ |
|
typedef TQ3ShapePartObject TQ3MeshPartObject; |
|
/* |
|
* There are three types of MESHPARTs: |
|
* MESHFACEPARTs, which describe a face of a mesh |
|
* MESHEDGEPARTs, which describe a edge of a mesh |
|
* MESHVERTEXPARTs, which describe a vertex of a mesh |
|
*/ |
|
typedef TQ3MeshPartObject TQ3MeshFacePartObject; |
|
typedef TQ3MeshPartObject TQ3MeshEdgePartObject; |
|
typedef TQ3MeshPartObject TQ3MeshVertexPartObject; |
|
/* |
|
* A DISPLAY Group can be drawn to a view |
|
*/ |
|
typedef TQ3GroupObject TQ3DisplayGroupObject; |
|
/* |
|
* There are many types of SHADERs: |
|
* SURFACESHADERs, which affect how the surface of a geometry is painted |
|
* ILLUMINATIONSHADERs, which affect how lights affect the color of a surface |
|
*/ |
|
typedef TQ3ShaderObject TQ3SurfaceShaderObject; |
|
typedef TQ3ShaderObject TQ3IlluminationShaderObject; |
|
/* |
|
* A handle to an object in a group |
|
*/ |
|
typedef struct OpaqueTQ3GroupPosition* TQ3GroupPosition; |
|
/* |
|
* TQ3ObjectClassNameString is used for the class name of an object |
|
*/ |
|
enum { |
|
kQ3StringMaximumLength = 1024 |
|
}; |
|
|
|
|
|
typedef char TQ3ObjectClassNameString[kQ3StringMaximumLength]; |
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Client/Server Things ** |
|
** ** |
|
*****************************************************************************/ |
|
typedef void * TQ3ControllerRef; |
|
/****************************************************************************** |
|
** ** |
|
** Flags and Switches ** |
|
** ** |
|
*****************************************************************************/ |
|
enum TQ3Boolean { |
|
kQ3False = 0, |
|
kQ3True = 1 |
|
}; |
|
typedef enum TQ3Boolean TQ3Boolean; |
|
|
|
enum TQ3Switch { |
|
kQ3Off = 0, |
|
kQ3On = 1 |
|
}; |
|
typedef enum TQ3Switch TQ3Switch; |
|
|
|
enum TQ3Status { |
|
kQ3Failure = 0, |
|
kQ3Success = 1 |
|
}; |
|
typedef enum TQ3Status TQ3Status; |
|
|
|
enum TQ3Axis { |
|
kQ3AxisX = 0, |
|
kQ3AxisY = 1, |
|
kQ3AxisZ = 2 |
|
}; |
|
typedef enum TQ3Axis TQ3Axis; |
|
|
|
enum TQ3PixelType { |
|
kQ3PixelTypeRGB32 = 0, /* Alpha:8 (ignored), R:8, G:8, B:8 */ |
|
kQ3PixelTypeARGB32 = 1, /* Alpha:8, R:8, G:8, B:8 */ |
|
kQ3PixelTypeRGB16 = 2, /* Alpha:1 (ignored), R:5, G:5, B:5 */ |
|
kQ3PixelTypeARGB16 = 3, /* Alpha:1, R:5, G:5, B:5 */ |
|
kQ3PixelTypeRGB16_565 = 4, /* Win32 only: 16 bits/pixel, R:5, G:6, B:5 */ |
|
kQ3PixelTypeRGB24 = 5 /* Win32 only: 24 bits/pixel, R:8, G:8, B:8 */ |
|
}; |
|
typedef enum TQ3PixelType TQ3PixelType; |
|
|
|
enum TQ3Endian { |
|
kQ3EndianBig = 0, |
|
kQ3EndianLittle = 1 |
|
}; |
|
typedef enum TQ3Endian TQ3Endian; |
|
|
|
enum TQ3EndCapMasks { |
|
kQ3EndCapNone = 0, |
|
kQ3EndCapMaskTop = 1 << 0, |
|
kQ3EndCapMaskBottom = 1 << 1, |
|
kQ3EndCapMaskInterior = 1 << 2 |
|
}; |
|
typedef enum TQ3EndCapMasks TQ3EndCapMasks; |
|
|
|
typedef unsigned long TQ3EndCap; |
|
|
|
enum { |
|
kQ3ArrayIndexNULL = ~0 |
|
}; |
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Point and Vector Definitions ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Vector2D { |
|
float x; |
|
float y; |
|
}; |
|
typedef struct TQ3Vector2D TQ3Vector2D; |
|
struct TQ3Vector3D { |
|
float x; |
|
float y; |
|
float z; |
|
}; |
|
typedef struct TQ3Vector3D TQ3Vector3D; |
|
struct TQ3Point2D { |
|
float x; |
|
float y; |
|
}; |
|
typedef struct TQ3Point2D TQ3Point2D; |
|
struct TQ3Point3D { |
|
float x; |
|
float y; |
|
float z; |
|
}; |
|
typedef struct TQ3Point3D TQ3Point3D; |
|
struct TQ3RationalPoint4D { |
|
float x; |
|
float y; |
|
float z; |
|
float w; |
|
}; |
|
typedef struct TQ3RationalPoint4D TQ3RationalPoint4D; |
|
struct TQ3RationalPoint3D { |
|
float x; |
|
float y; |
|
float w; |
|
}; |
|
typedef struct TQ3RationalPoint3D TQ3RationalPoint3D; |
|
/****************************************************************************** |
|
** ** |
|
** Quaternion ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Quaternion { |
|
float w; |
|
float x; |
|
float y; |
|
float z; |
|
}; |
|
typedef struct TQ3Quaternion TQ3Quaternion; |
|
/****************************************************************************** |
|
** ** |
|
** Ray Definition ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Ray3D { |
|
TQ3Point3D origin; |
|
TQ3Vector3D direction; |
|
}; |
|
typedef struct TQ3Ray3D TQ3Ray3D; |
|
/****************************************************************************** |
|
** ** |
|
** Parameterization Data Structures ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Param2D { |
|
float u; |
|
float v; |
|
}; |
|
typedef struct TQ3Param2D TQ3Param2D; |
|
struct TQ3Param3D { |
|
float u; |
|
float v; |
|
float w; |
|
}; |
|
typedef struct TQ3Param3D TQ3Param3D; |
|
struct TQ3Tangent2D { |
|
TQ3Vector3D uTangent; |
|
TQ3Vector3D vTangent; |
|
}; |
|
typedef struct TQ3Tangent2D TQ3Tangent2D; |
|
struct TQ3Tangent3D { |
|
TQ3Vector3D uTangent; |
|
TQ3Vector3D vTangent; |
|
TQ3Vector3D wTangent; |
|
}; |
|
typedef struct TQ3Tangent3D TQ3Tangent3D; |
|
/****************************************************************************** |
|
** ** |
|
** Polar and Spherical Coordinates ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3PolarPoint { |
|
float r; |
|
float theta; |
|
}; |
|
typedef struct TQ3PolarPoint TQ3PolarPoint; |
|
struct TQ3SphericalPoint { |
|
float rho; |
|
float theta; |
|
float phi; |
|
}; |
|
typedef struct TQ3SphericalPoint TQ3SphericalPoint; |
|
/****************************************************************************** |
|
** ** |
|
** Color Definition ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3ColorRGB { |
|
float r; |
|
float g; |
|
float b; |
|
}; |
|
typedef struct TQ3ColorRGB TQ3ColorRGB; |
|
struct TQ3ColorARGB { |
|
float a; |
|
float r; |
|
float g; |
|
float b; |
|
}; |
|
typedef struct TQ3ColorARGB TQ3ColorARGB; |
|
/****************************************************************************** |
|
** ** |
|
** Vertices ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Vertex3D { |
|
TQ3Point3D point; |
|
TQ3AttributeSet attributeSet; |
|
}; |
|
typedef struct TQ3Vertex3D TQ3Vertex3D; |
|
/****************************************************************************** |
|
** ** |
|
** Matrices ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Matrix3x3 { |
|
float value[3][3]; |
|
}; |
|
typedef struct TQ3Matrix3x3 TQ3Matrix3x3; |
|
struct TQ3Matrix4x4 { |
|
float value[4][4]; |
|
}; |
|
typedef struct TQ3Matrix4x4 TQ3Matrix4x4; |
|
/****************************************************************************** |
|
** ** |
|
** Bitmap/Pixmap ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Pixmap { |
|
void * image; |
|
unsigned long width; |
|
unsigned long height; |
|
unsigned long rowBytes; |
|
unsigned long pixelSize; /* MUST be 16 or 32 to use with the Interactive Renderer on Mac OS*/ |
|
TQ3PixelType pixelType; |
|
TQ3Endian bitOrder; |
|
TQ3Endian byteOrder; |
|
}; |
|
typedef struct TQ3Pixmap TQ3Pixmap; |
|
struct TQ3StoragePixmap { |
|
TQ3StorageObject image; |
|
unsigned long width; |
|
unsigned long height; |
|
unsigned long rowBytes; |
|
unsigned long pixelSize; /* MUST be 16 or 32 to use with the Interactive Renderer on Mac OS*/ |
|
TQ3PixelType pixelType; |
|
TQ3Endian bitOrder; |
|
TQ3Endian byteOrder; |
|
}; |
|
typedef struct TQ3StoragePixmap TQ3StoragePixmap; |
|
struct TQ3Bitmap { |
|
unsigned char * image; |
|
unsigned long width; |
|
unsigned long height; |
|
unsigned long rowBytes; |
|
TQ3Endian bitOrder; |
|
}; |
|
typedef struct TQ3Bitmap TQ3Bitmap; |
|
struct TQ3MipmapImage { /* An image for use as a texture mipmap */ |
|
unsigned long width; /* Width of mipmap, must be power of 2 */ |
|
unsigned long height; /* Height of mipmap, must be power of 2 */ |
|
unsigned long rowBytes; /* Rowbytes of mipmap */ |
|
unsigned long offset; /* Offset from image base to this mipmap */ |
|
}; |
|
typedef struct TQ3MipmapImage TQ3MipmapImage; |
|
struct TQ3Mipmap { |
|
TQ3StorageObject image; /* Data containing the texture map and */ |
|
/* if (useMipmapping==kQ3True) the */ |
|
/* mipmap data */ |
|
TQ3Boolean useMipmapping; /* True if mipmapping should be used */ |
|
/* and all mipmaps have been provided */ |
|
TQ3PixelType pixelType; |
|
TQ3Endian bitOrder; |
|
TQ3Endian byteOrder; |
|
unsigned long reserved; /* leave NULL for next version */ |
|
TQ3MipmapImage mipmaps[32]; /* The actual number of mipmaps is determined from the size of the first mipmap */ |
|
}; |
|
typedef struct TQ3Mipmap TQ3Mipmap; |
|
|
|
|
|
struct TQ3CompressedPixmap { |
|
TQ3StorageObject compressedImage; /* storage obj containing compressed image data */ |
|
|
|
TQ3Endian imageDescByteOrder; /* endianness of the data in the imageDesc */ |
|
TQ3StorageObject imageDesc; /* storage obj containing image description created by Quicktime to store info about compressed image */ |
|
|
|
TQ3Boolean makeMipmaps; |
|
|
|
unsigned long width; |
|
unsigned long height; |
|
unsigned long pixelSize; |
|
TQ3PixelType pixelType; |
|
}; |
|
typedef struct TQ3CompressedPixmap TQ3CompressedPixmap; |
|
|
|
/****************************************************************************** |
|
** ** |
|
** Higher dimension quantities ** |
|
** ** |
|
*****************************************************************************/ |
|
struct TQ3Area { |
|
TQ3Point2D min; |
|
TQ3Point2D max; |
|
}; |
|
typedef struct TQ3Area TQ3Area; |
|
struct TQ3PlaneEquation { |
|
TQ3Vector3D normal; |
|
float constant; |
|
}; |
|
typedef struct TQ3PlaneEquation TQ3PlaneEquation; |
|
struct TQ3BoundingBox { |
|
TQ3Point3D min; |
|
TQ3Point3D max; |
|
TQ3Boolean isEmpty; |
|
}; |
|
typedef struct TQ3BoundingBox TQ3BoundingBox; |
|
struct TQ3BoundingSphere { |
|
TQ3Point3D origin; |
|
float radius; |
|
TQ3Boolean isEmpty; |
|
}; |
|
typedef struct TQ3BoundingSphere TQ3BoundingSphere; |
|
/* |
|
* The TQ3ComputeBounds flag passed to StartBoundingBox or StartBoundingSphere |
|
* calls in the View. It's a hint to the system as to how it should |
|
* compute the bbox of a shape: |
|
* |
|
* kQ3ComputeBoundsExact: |
|
* Vertices of shapes are transformed into world space and |
|
* the world space bounding box is computed from them. Slow! |
|
* |
|
* kQ3ComputeBoundsApproximate: |
|
* A local space bounding box is computed from a shape's |
|
* vertices. This bbox is then transformed into world space, |
|
* and its bounding box is taken as the shape's approximate |
|
* bbox. Fast but the bbox is larger than optimal. |
|
*/ |
|
enum TQ3ComputeBounds { |
|
kQ3ComputeBoundsExact = 0, |
|
kQ3ComputeBoundsApproximate = 1 |
|
}; |
|
typedef enum TQ3ComputeBounds TQ3ComputeBounds; |
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Object System Types ** |
|
** ** |
|
*****************************************************************************/ |
|
|
|
typedef struct OpaqueTQ3XObjectClass* TQ3XObjectClass; |
|
|
|
typedef unsigned long TQ3XMethodType; |
|
/* |
|
* Object methods |
|
*/ |
|
#define kQ3XMethodTypeObjectUnregister Q3_METHOD_TYPE('u','n','r','g') |
|
/* |
|
* Return true from the metahandler if this |
|
* object can be submitted in a rendering loop |
|
*/ |
|
#define kQ3XMethodTypeObjectIsDrawable Q3_METHOD_TYPE('i','s','d','r') /* return true from the metahandler if this object can be submitted in a rendering loop */ |
|
typedef CALLBACK_API_C( void , TQ3XFunctionPointer )(void); |
|
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XMetaHandler )(TQ3XMethodType methodType); |
|
/* |
|
* MetaHandler: |
|
* When you give a metahandler to QuickDraw 3D, it is called multiple |
|
* times to build method tables, and then is thrown away. You are |
|
* guaranteed that your metahandler will never be called again after a |
|
* call that was passed a metahandler returns. |
|
* |
|
* Your metahandler should contain a switch on the methodType passed to it |
|
* and should return the corresponding method as an TQ3XFunctionPointer. |
|
* |
|
* IMPORTANT: A metaHandler MUST always "return" a value. If you are |
|
* passed a methodType that you do not understand, ALWAYS return NULL. |
|
* |
|
* These types here are prototypes of how your functions should look. |
|
*/ |
|
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectUnregisterMethod )(TQ3XObjectClass objectClass); |
|
/* |
|
* See QD3DIO.h for the IO method types: |
|
* ObjectReadData, ObjectTraverse, ObjectWrite |
|
*/ |
|
|
|
/****************************************************************************** |
|
** ** |
|
** Set Types ** |
|
** ** |
|
*****************************************************************************/ |
|
typedef long TQ3ElementType; |
|
enum { |
|
kQ3ElementTypeNone = 0, |
|
kQ3ElementTypeUnknown = 32, |
|
kQ3ElementTypeSet = 33 |
|
}; |
|
|
|
|
|
/* |
|
* kQ3ElementTypeUnknown is a TQ3Object. |
|
* |
|
* Do Q3Set_Add(s, ..., &obj) or Q3Set_Get(s, ..., &obj); |
|
* |
|
* Note that the object is always referenced when copying around. |
|
* |
|
* Generally, it is an Unknown object, a Group of Unknown objects, or a |
|
* group of other "objects" which have been found in the metafile and |
|
* have no attachment method to their parent. Be prepared to handle |
|
* any or all of these cases if you actually access the set on a shape. |
|
* |
|
* kQ3ElementTypeSet is a TQ3SetObject. |
|
* |
|
* Q3Shape_GetSet(s,&o) is eqivalent to |
|
* Q3Shape_GetElement(s, kQ3ElementTypeSet, &o) |
|
* |
|
* Q3Shape_SetSet(s,o) is eqivalent to |
|
* Q3Shape_SetElement(s, kQ3ElementTypeSet, &o) |
|
* |
|
* Note that the object is always referenced when copying around. |
|
* |
|
* See the note below about the Set and Shape changes. |
|
*/ |
|
|
|
/****************************************************************************** |
|
** ** |
|
** Object System Macros ** |
|
** ** |
|
*****************************************************************************/ |
|
|
|
#define Q3_FOUR_CHARACTER_CONSTANT(a,b,c,d) \ |
|
((const unsigned long) \ |
|
((const unsigned long) (a) << 24) | \ |
|
((const unsigned long) (b) << 16) | \ |
|
((const unsigned long) (c) << 8) | \ |
|
((const unsigned long) (d))) |
|
|
|
#define Q3_OBJECT_TYPE(a,b,c,d) \ |
|
((TQ3ObjectType) Q3_FOUR_CHARACTER_CONSTANT(a,b,c,d)) |
|
|
|
#define Q3_METHOD_TYPE(a,b,c,d) \ |
|
((TQ3XMethodType) Q3_FOUR_CHARACTER_CONSTANT(a,b,c,d)) |
|
|
|
/****************************************************************************** |
|
** ** |
|
** Object Types ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Note: a call to Q3Foo_GetType will return a value kQ3FooTypeBar |
|
* e.g. Q3Shared_GetType(object) returns kQ3SharedTypeShape, etc. |
|
*/ |
|
|
|
#define kQ3ObjectTypeInvalid 0L |
|
#define kQ3ObjectTypeView ((TQ3ObjectType)FOUR_CHAR_CODE('view')) |
|
#define kQ3ObjectTypeElement ((TQ3ObjectType)FOUR_CHAR_CODE('elmn')) |
|
#define kQ3ElementTypeAttribute ((TQ3ObjectType)FOUR_CHAR_CODE('eatt')) |
|
#define kQ3ObjectTypePick ((TQ3ObjectType)FOUR_CHAR_CODE('pick')) |
|
#define kQ3PickTypeWindowPoint ((TQ3ObjectType)FOUR_CHAR_CODE('pkwp')) |
|
#define kQ3PickTypeWindowRect ((TQ3ObjectType)FOUR_CHAR_CODE('pkwr')) |
|
#define kQ3PickTypeWorldRay ((TQ3ObjectType)FOUR_CHAR_CODE('pkry')) |
|
#define kQ3ObjectTypeShared ((TQ3ObjectType)FOUR_CHAR_CODE('shrd')) |
|
#define kQ3SharedTypeRenderer ((TQ3ObjectType)FOUR_CHAR_CODE('rddr')) |
|
#define kQ3RendererTypeWireFrame ((TQ3ObjectType)FOUR_CHAR_CODE('wrfr')) |
|
#define kQ3RendererTypeGeneric ((TQ3ObjectType)FOUR_CHAR_CODE('gnrr')) |
|
#define kQ3RendererTypeInteractive ((TQ3ObjectType)FOUR_CHAR_CODE('ctwn')) |
|
#define kQ3SharedTypeShape ((TQ3ObjectType)FOUR_CHAR_CODE('shap')) |
|
|
|
|
|
#define kQ3ShapeTypeGeometry ((TQ3ObjectType)FOUR_CHAR_CODE('gmtr')) |
|
#define kQ3GeometryTypeBox ((TQ3ObjectType)FOUR_CHAR_CODE('box ')) |
|
#define kQ3GeometryTypeGeneralPolygon ((TQ3ObjectType)FOUR_CHAR_CODE('gpgn')) |
|
#define kQ3GeometryTypeLine ((TQ3ObjectType)FOUR_CHAR_CODE('line')) |
|
#define kQ3GeometryTypeMarker ((TQ3ObjectType)FOUR_CHAR_CODE('mrkr')) |
|
#define kQ3GeometryTypePixmapMarker ((TQ3ObjectType)FOUR_CHAR_CODE('mrkp')) |
|
#define kQ3GeometryTypeMesh ((TQ3ObjectType)FOUR_CHAR_CODE('mesh')) |
|
#define kQ3GeometryTypeNURBCurve ((TQ3ObjectType)FOUR_CHAR_CODE('nrbc')) |
|
#define kQ3GeometryTypeNURBPatch ((TQ3ObjectType)FOUR_CHAR_CODE('nrbp')) |
|
#define kQ3GeometryTypePoint ((TQ3ObjectType)FOUR_CHAR_CODE('pnt ')) |
|
#define kQ3GeometryTypePolygon ((TQ3ObjectType)FOUR_CHAR_CODE('plyg')) |
|
#define kQ3GeometryTypePolyLine ((TQ3ObjectType)FOUR_CHAR_CODE('plyl')) |
|
#define kQ3GeometryTypeTriangle ((TQ3ObjectType)FOUR_CHAR_CODE('trng')) |
|
#define kQ3GeometryTypeTriGrid ((TQ3ObjectType)FOUR_CHAR_CODE('trig')) |
|
#define kQ3GeometryTypeCone ((TQ3ObjectType)FOUR_CHAR_CODE('cone')) |
|
#define kQ3GeometryTypeCylinder ((TQ3ObjectType)FOUR_CHAR_CODE('cyln')) |
|
#define kQ3GeometryTypeDisk ((TQ3ObjectType)FOUR_CHAR_CODE('disk')) |
|
#define kQ3GeometryTypeEllipse ((TQ3ObjectType)FOUR_CHAR_CODE('elps')) |
|
#define kQ3GeometryTypeEllipsoid ((TQ3ObjectType)FOUR_CHAR_CODE('elpd')) |
|
#define kQ3GeometryTypePolyhedron ((TQ3ObjectType)FOUR_CHAR_CODE('plhd')) |
|
#define kQ3GeometryTypeTorus ((TQ3ObjectType)FOUR_CHAR_CODE('tors')) |
|
#define kQ3GeometryTypeTriMesh ((TQ3ObjectType)FOUR_CHAR_CODE('tmsh')) |
|
|
|
|
|
#define kQ3ShapeTypeShader ((TQ3ObjectType)FOUR_CHAR_CODE('shdr')) |
|
#define kQ3ShaderTypeSurface ((TQ3ObjectType)FOUR_CHAR_CODE('sush')) |
|
#define kQ3SurfaceShaderTypeTexture ((TQ3ObjectType)FOUR_CHAR_CODE('txsu')) |
|
#define kQ3ShaderTypeIllumination ((TQ3ObjectType)FOUR_CHAR_CODE('ilsh')) |
|
#define kQ3IlluminationTypePhong ((TQ3ObjectType)FOUR_CHAR_CODE('phil')) |
|
#define kQ3IlluminationTypeLambert ((TQ3ObjectType)FOUR_CHAR_CODE('lmil')) |
|
#define kQ3IlluminationTypeNULL ((TQ3ObjectType)FOUR_CHAR_CODE('nuil')) |
|
#define kQ3ShapeTypeStyle ((TQ3ObjectType)FOUR_CHAR_CODE('styl')) |
|
#define kQ3StyleTypeBackfacing ((TQ3ObjectType)FOUR_CHAR_CODE('bckf')) |
|
#define kQ3StyleTypeInterpolation ((TQ3ObjectType)FOUR_CHAR_CODE('intp')) |
|
#define kQ3StyleTypeFill ((TQ3ObjectType)FOUR_CHAR_CODE('fist')) |
|
#define kQ3StyleTypePickID ((TQ3ObjectType)FOUR_CHAR_CODE('pkid')) |
|
#define kQ3StyleTypeReceiveShadows ((TQ3ObjectType)FOUR_CHAR_CODE('rcsh')) |
|
#define kQ3StyleTypeHighlight ((TQ3ObjectType)FOUR_CHAR_CODE('high')) |
|
#define kQ3StyleTypeSubdivision ((TQ3ObjectType)FOUR_CHAR_CODE('sbdv')) |
|
#define kQ3StyleTypeOrientation ((TQ3ObjectType)FOUR_CHAR_CODE('ofdr')) |
|
#define kQ3StyleTypePickParts ((TQ3ObjectType)FOUR_CHAR_CODE('pkpt')) |
|
#define kQ3StyleTypeAntiAlias ((TQ3ObjectType)FOUR_CHAR_CODE('anti')) |
|
#define kQ3StyleTypeFog ((TQ3ObjectType)FOUR_CHAR_CODE('fogg')) |
|
|
|
|
|
#define kQ3ShapeTypeTransform ((TQ3ObjectType)FOUR_CHAR_CODE('xfrm')) |
|
#define kQ3TransformTypeMatrix ((TQ3ObjectType)FOUR_CHAR_CODE('mtrx')) |
|
#define kQ3TransformTypeScale ((TQ3ObjectType)FOUR_CHAR_CODE('scal')) |
|
#define kQ3TransformTypeTranslate ((TQ3ObjectType)FOUR_CHAR_CODE('trns')) |
|
#define kQ3TransformTypeRotate ((TQ3ObjectType)FOUR_CHAR_CODE('rott')) |
|
#define kQ3TransformTypeRotateAboutPoint ((TQ3ObjectType)FOUR_CHAR_CODE('rtap')) |
|
#define kQ3TransformTypeRotateAboutAxis ((TQ3ObjectType)FOUR_CHAR_CODE('rtaa')) |
|
#define kQ3TransformTypeQuaternion ((TQ3ObjectType)FOUR_CHAR_CODE('qtrn')) |
|
#define kQ3TransformTypeReset ((TQ3ObjectType)FOUR_CHAR_CODE('rset')) |
|
#define kQ3ShapeTypeLight ((TQ3ObjectType)FOUR_CHAR_CODE('lght')) |
|
#define kQ3LightTypeAmbient ((TQ3ObjectType)FOUR_CHAR_CODE('ambn')) |
|
#define kQ3LightTypeDirectional ((TQ3ObjectType)FOUR_CHAR_CODE('drct')) |
|
#define kQ3LightTypePoint ((TQ3ObjectType)FOUR_CHAR_CODE('pntl')) |
|
#define kQ3LightTypeSpot ((TQ3ObjectType)FOUR_CHAR_CODE('spot')) |
|
|
|
|
|
#define kQ3ShapeTypeCamera ((TQ3ObjectType)FOUR_CHAR_CODE('cmra')) |
|
#define kQ3CameraTypeOrthographic ((TQ3ObjectType)FOUR_CHAR_CODE('orth')) |
|
#define kQ3CameraTypeViewPlane ((TQ3ObjectType)FOUR_CHAR_CODE('vwpl')) |
|
#define kQ3CameraTypeViewAngleAspect ((TQ3ObjectType)FOUR_CHAR_CODE('vana')) |
|
#define kQ3ShapeTypeStateOperator ((TQ3ObjectType)FOUR_CHAR_CODE('stop')) |
|
#define kQ3StateOperatorTypePush ((TQ3ObjectType)FOUR_CHAR_CODE('push')) |
|
#define kQ3StateOperatorTypePop ((TQ3ObjectType)FOUR_CHAR_CODE('pop ')) |
|
#define kQ3ShapeTypeGroup ((TQ3ObjectType)FOUR_CHAR_CODE('grup')) |
|
#define kQ3GroupTypeDisplay ((TQ3ObjectType)FOUR_CHAR_CODE('dspg')) |
|
#define kQ3DisplayGroupTypeOrdered ((TQ3ObjectType)FOUR_CHAR_CODE('ordg')) |
|
#define kQ3DisplayGroupTypeIOProxy ((TQ3ObjectType)FOUR_CHAR_CODE('iopx')) |
|
#define kQ3GroupTypeLight ((TQ3ObjectType)FOUR_CHAR_CODE('lghg')) |
|
#define kQ3GroupTypeInfo ((TQ3ObjectType)FOUR_CHAR_CODE('info')) |
|
|
|
|
|
#define kQ3ShapeTypeUnknown ((TQ3ObjectType)FOUR_CHAR_CODE('unkn')) |
|
#define kQ3UnknownTypeText ((TQ3ObjectType)FOUR_CHAR_CODE('uktx')) |
|
#define kQ3UnknownTypeBinary ((TQ3ObjectType)FOUR_CHAR_CODE('ukbn')) |
|
#define kQ3ShapeTypeReference ((TQ3ObjectType)FOUR_CHAR_CODE('rfrn')) |
|
#define kQ3ReferenceTypeExternal ((TQ3ObjectType)FOUR_CHAR_CODE('rfex')) |
|
#define kQ3SharedTypeSet ((TQ3ObjectType)FOUR_CHAR_CODE('set ')) |
|
#define kQ3SetTypeAttribute ((TQ3ObjectType)FOUR_CHAR_CODE('attr')) |
|
#define kQ3SharedTypeDrawContext ((TQ3ObjectType)FOUR_CHAR_CODE('dctx')) |
|
#define kQ3DrawContextTypePixmap ((TQ3ObjectType)FOUR_CHAR_CODE('dpxp')) |
|
#define kQ3DrawContextTypeMacintosh ((TQ3ObjectType)FOUR_CHAR_CODE('dmac')) |
|
#define kQ3DrawContextTypeWin32DC ((TQ3ObjectType)FOUR_CHAR_CODE('dw32')) |
|
#define kQ3DrawContextTypeDDSurface ((TQ3ObjectType)FOUR_CHAR_CODE('ddds')) |
|
#define kQ3DrawContextTypeX11 ((TQ3ObjectType)FOUR_CHAR_CODE('dx11')) |
|
#define kQ3SharedTypeTexture ((TQ3ObjectType)FOUR_CHAR_CODE('txtr')) |
|
#define kQ3TextureTypePixmap ((TQ3ObjectType)FOUR_CHAR_CODE('txpm')) |
|
#define kQ3TextureTypeMipmap ((TQ3ObjectType)FOUR_CHAR_CODE('txmm')) |
|
#define kQ3TextureTypeCompressedPixmap ((TQ3ObjectType)FOUR_CHAR_CODE('txcp')) |
|
|
|
|
|
#define kQ3SharedTypeFile ((TQ3ObjectType)FOUR_CHAR_CODE('file')) |
|
#define kQ3SharedTypeStorage ((TQ3ObjectType)FOUR_CHAR_CODE('strg')) |
|
#define kQ3StorageTypeMemory ((TQ3ObjectType)FOUR_CHAR_CODE('mems')) |
|
#define kQ3MemoryStorageTypeHandle ((TQ3ObjectType)FOUR_CHAR_CODE('hndl')) |
|
#define kQ3StorageTypeUnix ((TQ3ObjectType)FOUR_CHAR_CODE('uxst')) |
|
#define kQ3UnixStorageTypePath ((TQ3ObjectType)FOUR_CHAR_CODE('unix')) |
|
#define kQ3StorageTypeMacintosh ((TQ3ObjectType)FOUR_CHAR_CODE('macn')) |
|
#define kQ3MacintoshStorageTypeFSSpec ((TQ3ObjectType)FOUR_CHAR_CODE('macp')) |
|
#define kQ3StorageTypeWin32 ((TQ3ObjectType)FOUR_CHAR_CODE('wist')) |
|
#define kQ3SharedTypeString ((TQ3ObjectType)FOUR_CHAR_CODE('strn')) |
|
#define kQ3StringTypeCString ((TQ3ObjectType)FOUR_CHAR_CODE('strc')) |
|
#define kQ3SharedTypeShapePart ((TQ3ObjectType)FOUR_CHAR_CODE('sprt')) |
|
#define kQ3ShapePartTypeMeshPart ((TQ3ObjectType)FOUR_CHAR_CODE('spmh')) |
|
#define kQ3MeshPartTypeMeshFacePart ((TQ3ObjectType)FOUR_CHAR_CODE('mfac')) |
|
#define kQ3MeshPartTypeMeshEdgePart ((TQ3ObjectType)FOUR_CHAR_CODE('medg')) |
|
#define kQ3MeshPartTypeMeshVertexPart ((TQ3ObjectType)FOUR_CHAR_CODE('mvtx')) |
|
#define kQ3SharedTypeControllerState ((TQ3ObjectType)FOUR_CHAR_CODE('ctst')) |
|
#define kQ3SharedTypeTracker ((TQ3ObjectType)FOUR_CHAR_CODE('trkr')) |
|
#define kQ3SharedTypeViewHints ((TQ3ObjectType)FOUR_CHAR_CODE('vwhn')) |
|
#define kQ3SharedTypeEndGroup ((TQ3ObjectType)FOUR_CHAR_CODE('endg')) |
|
|
|
/****************************************************************************** |
|
** ** |
|
** QuickDraw 3D System Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* Q3Initialize() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Initialize(void); |
|
|
|
|
|
/* |
|
* Q3Exit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Exit(void); |
|
|
|
|
|
/* |
|
* Q3IsInitialized() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3IsInitialized(void); |
|
|
|
|
|
/* |
|
* Q3GetVersion() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3GetVersion( |
|
unsigned long * majorRevision, |
|
unsigned long * minorRevision); |
|
|
|
|
|
/* |
|
* Q3GetReleaseVersion returns the release version number, |
|
* in the format of the first four bytes of a 'vers' resource |
|
* (e.g. 0x01518000 ==> 1.5.1 release). |
|
*/ |
|
/* |
|
* Q3GetReleaseVersion() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3GetReleaseVersion(unsigned long * releaseRevision); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** ObjectClass Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* New object system calls to query the object system. |
|
* |
|
* These comments to move to the stubs file before final release, they |
|
* are here for documentation for developers using early seeds. |
|
*/ |
|
/* |
|
* Given a class name as a string return the associated class type for the |
|
* class, may return kQ3Failure if the string representing the class is |
|
* invalid. |
|
*/ |
|
/* |
|
* Q3ObjectHierarchy_GetTypeFromString() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3ObjectHierarchy_GetTypeFromString( |
|
TQ3ObjectClassNameString objectClassString, |
|
TQ3ObjectType * objectClassType); |
|
|
|
|
|
/* |
|
* Given a class type as return the associated string for the class name, |
|
* may return kQ3Failure if the type representing the class is invalid. |
|
*/ |
|
/* |
|
* Q3ObjectHierarchy_GetStringFromType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3ObjectHierarchy_GetStringFromType( |
|
TQ3ObjectType objectClassType, |
|
TQ3ObjectClassNameString objectClassString); |
|
|
|
|
|
/* |
|
* Return true if the class with this type is registered, false if not |
|
*/ |
|
/* |
|
* Q3ObjectHierarchy_IsTypeRegistered() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3ObjectHierarchy_IsTypeRegistered(TQ3ObjectType objectClassType); |
|
|
|
|
|
/* |
|
* Return true if the class with this name is registered, false if not |
|
*/ |
|
/* |
|
* Q3ObjectHierarchy_IsNameRegistered() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3ObjectHierarchy_IsNameRegistered(const char * objectClassName); |
|
|
|
|
|
/* |
|
* TQ3SubClassData is used when querying the object system for |
|
* the subclasses of a particular parent type: |
|
*/ |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
struct TQ3SubClassData { |
|
unsigned long numClasses; /* the # of subclass types found for a parent class */ |
|
TQ3ObjectType * classTypes; /* an array containing the class types */ |
|
}; |
|
typedef struct TQ3SubClassData TQ3SubClassData; |
|
/* |
|
* Given a parent type and an instance of the TQ3SubClassData struct fill |
|
* it in with the number and class types of all of the subclasses immediately |
|
* below the parent in the class hierarchy. Return kQ3Success to indicate no |
|
* errors occurred, else kQ3Failure. |
|
* |
|
* NOTE: This function will allocate memory for the classTypes array. Be |
|
* sure to call Q3ObjectClass_EmptySubClassData to free this memory up. |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* Q3ObjectHierarchy_GetSubClassData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3ObjectHierarchy_GetSubClassData( |
|
TQ3ObjectType objectClassType, |
|
TQ3SubClassData * subClassData); |
|
|
|
|
|
/* |
|
* Given an instance of the TQ3SubClassData struct free all memory allocated |
|
* by the Q3ObjectClass_GetSubClassData call. |
|
* |
|
* NOTE: This call MUST be made after a call to Q3ObjectClass_GetSubClassData |
|
* to avoid memory leaks. |
|
*/ |
|
/* |
|
* Q3ObjectHierarchy_EmptySubClassData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3ObjectHierarchy_EmptySubClassData(TQ3SubClassData * subClassData); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Object Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Q3Object_Dispose() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Object_Dispose(TQ3Object object); |
|
|
|
|
|
/* |
|
* Q3Object_Duplicate() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Object ) |
|
Q3Object_Duplicate(TQ3Object object); |
|
|
|
|
|
/* |
|
* Q3Object_Submit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Object_Submit( |
|
TQ3Object object, |
|
TQ3ViewObject view); |
|
|
|
|
|
/* |
|
* Q3Object_IsDrawable() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3Object_IsDrawable(TQ3Object object); |
|
|
|
|
|
/* |
|
* Q3Object_IsWritable() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3Object_IsWritable( |
|
TQ3Object object, |
|
TQ3FileObject theFile); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Object Type Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Q3Object_GetType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3ObjectType ) |
|
Q3Object_GetType(TQ3Object object); |
|
|
|
|
|
/* |
|
* Q3Object_GetLeafType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3ObjectType ) |
|
Q3Object_GetLeafType(TQ3Object object); |
|
|
|
|
|
/* |
|
* Q3Object_IsType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3Object_IsType( |
|
TQ3Object object, |
|
TQ3ObjectType theType); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Shared Object Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Q3Shared_GetType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3ObjectType ) |
|
Q3Shared_GetType(TQ3SharedObject sharedObject); |
|
|
|
|
|
/* |
|
* Q3Shared_GetReference() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3SharedObject ) |
|
Q3Shared_GetReference(TQ3SharedObject sharedObject); |
|
|
|
|
|
/* |
|
* Q3Shared_IsReferenced |
|
* Returns kQ3True if there is more than one reference to sharedObject. |
|
* Returns kQ3False if there is ONE reference to sharedObject. |
|
* |
|
* This call is intended to allow applications and plug-in objects to delete |
|
* objects of which they hold THE ONLY REFERENCE. This is useful when |
|
* caching objects, etc. |
|
* |
|
* Although many may be tempted, DO NOT DO THIS: |
|
* while (Q3Shared_IsReferenced(foo)) { Q3Object_Dispose(foo); } |
|
* |
|
* Your application will crash and no one will buy it. Chapter 11 is |
|
* never fun (unless you short the stock). Thanks. |
|
*/ |
|
/* |
|
* Q3Shared_IsReferenced() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3Shared_IsReferenced(TQ3SharedObject sharedObject); |
|
|
|
|
|
/* |
|
* Q3Shared_GetEditIndex |
|
* Returns the "serial number" of sharedObject. Usefuly for caching |
|
* object information. Returns 0 on error. |
|
* |
|
* Hold onto this number to determine if an object has changed since you |
|
* last built your caches... To validate, do: |
|
* |
|
* if (Q3Shared_GetEditIndex(foo) == oldFooEditIndex) { |
|
* // Cache is valid |
|
* } else { |
|
* // Cache is invalid |
|
* RebuildSomeSortOfCache(foo); |
|
* oldFooEditIndex = Q3Shared_GetEditIndex(foo); |
|
* } |
|
*/ |
|
/* |
|
* Q3Shared_GetEditIndex() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( unsigned long ) |
|
Q3Shared_GetEditIndex(TQ3SharedObject sharedObject); |
|
|
|
|
|
/* |
|
* Q3Shared_Edited |
|
* Bumps the "serial number" of sharedObject to a different value. This |
|
* call is intended to be used solely from a plug-in object which is |
|
* shared. Call this whenever your private instance data changes. |
|
* |
|
* Returns kQ3Failure iff sharedObject is not a shared object, OR |
|
* QuickDraw 3D isn't initialized. |
|
*/ |
|
/* |
|
* Q3Shared_Edited() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shared_Edited(TQ3SharedObject sharedObject); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Shape Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* QuickDraw 3D 1.5 Note: |
|
* |
|
* Shapes and Sets are now (sort of) polymorphic. |
|
* |
|
* You may call Q3Shape_Foo or Q3Set_Foo on a shape or a set. |
|
* The following calls are identical, in implementation: |
|
* |
|
* Q3Shape_GetElement = Q3Set_Get |
|
* Q3Shape_AddElement = Q3Set_Add |
|
* Q3Shape_ContainsElement = Q3Set_Contains |
|
* Q3Shape_GetNextElementType = Q3Set_GetNextElementType |
|
* Q3Shape_EmptyElements = Q3Set_Empty |
|
* Q3Shape_ClearElement = Q3Set_Clear |
|
* |
|
* All of these calls accept a shape or a set as their first parameter. |
|
* |
|
* The Q3Shape_GetSet and Q3ShapeSetSet calls are implemented via a new |
|
* element type kQ3ElementTypeSet. See the note above about |
|
* kQ3ElementTypeSet; |
|
* |
|
* It is important to note that the new Q3Shape_...Element... calls do not |
|
* create a set on a shape and then add the element to it. This data is |
|
* attached directly to the shape. Therefore, it is possible for an element |
|
* to exist on a shape without a set existing on it as well. |
|
* |
|
* In your application, if you attach an element to a shape like this: |
|
* (this isn't checking for errors for simplicity) |
|
* |
|
* set = Q3Set_New(); |
|
* Q3Set_AddElement(set, kMyElemType, &data); |
|
* Q3Shape_SetSet(shape, set); |
|
* |
|
* You should retrieve it in the same manner: |
|
* |
|
* Q3Shape_GetSet(shape, &set); |
|
* if (Q3Set_Contains(set, kMyElemType) == kTrue) { |
|
* Q3Set_Get(set, kMyElemType, &data); |
|
* } |
|
* |
|
* Similarly, if you attach data to a shape with the new calls: |
|
* |
|
* Q3Shape_AddElement(shape, kMyElemType, &data); |
|
* |
|
* You should retrieve it in the same manner: |
|
* |
|
* if (Q3Shape_ContainsElement(set, kMyElemType) == kTrue) { |
|
* Q3Shape_GetElement(set, kMyElemType, &data); |
|
* } |
|
* |
|
* This really becomes an issue when dealing with version 1.0 and version 1.1 |
|
* metafiles. |
|
* |
|
* When attempting to find a particular element on a shape, you should |
|
* first check with Q3Shape_GetNextElementType or Q3Shape_GetElement, then, |
|
* Q3Shape_GetSet(s, &set) (or Q3Shape_GetElement(s, kQ3ElementTypeSet, &set)) |
|
* and then Q3Shape_GetElement(set, ...). |
|
* |
|
* In terms of implementation, Q3Shape_SetSet and Q3Shape_GetSet should only be |
|
* used for sets of information that are shared among multiple shapes. |
|
* |
|
* Q3Shape_AddElement, Q3Shape_GetElement, etc. calls should only be used |
|
* for elements that are unique for a particular shape. |
|
* |
|
*/ |
|
/* |
|
* Q3Shape_GetType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3ObjectType ) |
|
Q3Shape_GetType(TQ3ShapeObject shape); |
|
|
|
|
|
/* |
|
* Q3Shape_GetSet() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_GetSet( |
|
TQ3ShapeObject shape, |
|
TQ3SetObject * theSet); |
|
|
|
|
|
/* |
|
* Q3Shape_SetSet() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_SetSet( |
|
TQ3ShapeObject shape, |
|
TQ3SetObject theSet); |
|
|
|
|
|
/* |
|
* Q3Shape_AddElement() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_AddElement( |
|
TQ3ShapeObject shape, |
|
TQ3ElementType theType, |
|
const void * data); |
|
|
|
|
|
/* |
|
* Q3Shape_GetElement() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_GetElement( |
|
TQ3ShapeObject shape, |
|
TQ3ElementType theType, |
|
void * data); |
|
|
|
|
|
/* |
|
* Q3Shape_ContainsElement() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Boolean ) |
|
Q3Shape_ContainsElement( |
|
TQ3ShapeObject shape, |
|
TQ3ElementType theType); |
|
|
|
|
|
/* |
|
* Q3Shape_GetNextElementType() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_GetNextElementType( |
|
TQ3ShapeObject shape, |
|
TQ3ElementType * theType); |
|
|
|
|
|
/* |
|
* Q3Shape_EmptyElements() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_EmptyElements(TQ3ShapeObject shape); |
|
|
|
|
|
/* |
|
* Q3Shape_ClearElement() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Shape_ClearElement( |
|
TQ3ShapeObject shape, |
|
TQ3ElementType theType); |
|
|
|
|
|
|
|
/****************************************************************************** |
|
** ** |
|
** Color Table Routines ** |
|
** ** |
|
*****************************************************************************/ |
|
/* |
|
* Q3Bitmap_Empty() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TQ3Status ) |
|
Q3Bitmap_Empty(TQ3Bitmap * bitmap); |
|
|
|
|
|
/* |
|
* Q3Bitmap_GetImageSize() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( unsigned long ) |
|
Q3Bitmap_GetImageSize( |
|
unsigned long width, |
|
unsigned long height); |
|
|
|
|
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
|
|
#if PRAGMA_ENUM_ALWAYSINT |
|
#pragma enumsalwaysint reset |
|
#ifdef __QD3D__RESTORE_TWOBYTEINTS |
|
#pragma fourbyteints off |
|
#endif |
|
#elif PRAGMA_ENUM_OPTIONS |
|
#pragma option enum=reset |
|
#elif defined(__QD3D__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 /* __QD3D__ */ |
|
|
|
|