diff options
Diffstat (limited to 'common/quicktime_win32/QD3D.h')
| -rw-r--r-- | common/quicktime_win32/QD3D.h | 1523 |
1 files changed, 1523 insertions, 0 deletions
diff --git a/common/quicktime_win32/QD3D.h b/common/quicktime_win32/QD3D.h new file mode 100644 index 0000000..60ad835 --- /dev/null +++ b/common/quicktime_win32/QD3D.h @@ -0,0 +1,1523 @@ +/* + 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__ */ + |