mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
1524 lines
56 KiB
C
1524 lines
56 KiB
C
/*
|
|
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__ */
|
|
|