/* File: QD3DGroup.h Contains: Q3Group methods Version: Technology: Quickdraw 3D 1.6 Release: QuickTime 7.3 Copyright: (c) 2007 (c) 1995-1998 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 __QD3DGROUP__ #define __QD3DGROUP__ #ifndef __QD3D__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=power #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif #if PRAGMA_ENUM_ALWAYSINT #if defined(__fourbyteints__) && !__fourbyteints__ #define __QD3DGROUP__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 __QD3DGROUP__RESTORE_PACKED_ENUMS #pragma options(!pack_enums) #endif #endif /****************************************************************************** ** ** ** Group Typedefs ** ** ** *****************************************************************************/ /* * These flags affect how a group is traversed * They apply to when a group is "drawn", "picked", "bounded", "written" */ enum TQ3DisplayGroupStateMasks { kQ3DisplayGroupStateNone = 0, kQ3DisplayGroupStateMaskIsDrawn = 1 << 0, kQ3DisplayGroupStateMaskIsInline = 1 << 1, kQ3DisplayGroupStateMaskUseBoundingBox = 1 << 2, kQ3DisplayGroupStateMaskUseBoundingSphere = 1 << 3, kQ3DisplayGroupStateMaskIsPicked = 1 << 4, kQ3DisplayGroupStateMaskIsWritten = 1 << 5 }; typedef enum TQ3DisplayGroupStateMasks TQ3DisplayGroupStateMasks; typedef unsigned long TQ3DisplayGroupState; /****************************************************************************** ** ** ** Group Routines (apply to all groups) ** ** ** *****************************************************************************/ /* May contain any shared object */ #if CALL_NOT_IN_CARBON /* * Q3Group_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3Group_New(void); /* * Q3Group_GetType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3ObjectType ) Q3Group_GetType(TQ3GroupObject group); /* * Q3Group_AddObject() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupPosition ) Q3Group_AddObject( TQ3GroupObject group, TQ3Object object); /* * Q3Group_AddObjectBefore() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupPosition ) Q3Group_AddObjectBefore( TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object); /* * Q3Group_AddObjectAfter() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupPosition ) Q3Group_AddObjectAfter( TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object); /* * Q3Group_GetPositionObject() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetPositionObject( TQ3GroupObject group, TQ3GroupPosition position, TQ3Object * object); /* * Q3Group_SetPositionObject() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_SetPositionObject( TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object); /* * Q3Group_RemovePosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Object ) Q3Group_RemovePosition( TQ3GroupObject group, TQ3GroupPosition position); /* * Q3Group_GetFirstPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetFirstPosition( TQ3GroupObject group, TQ3GroupPosition * position); /* * Q3Group_GetLastPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetLastPosition( TQ3GroupObject group, TQ3GroupPosition * position); /* * Q3Group_GetNextPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetNextPosition( TQ3GroupObject group, TQ3GroupPosition * position); /* * Q3Group_GetPreviousPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetPreviousPosition( TQ3GroupObject group, TQ3GroupPosition * position); /* * Q3Group_CountObjects() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_CountObjects( TQ3GroupObject group, unsigned long * nObjects); /* * Q3Group_EmptyObjects() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_EmptyObjects(TQ3GroupObject group); /* * Typed Access */ /* * Q3Group_GetFirstPositionOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetFirstPositionOfType( TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition * position); /* * Q3Group_GetLastPositionOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetLastPositionOfType( TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition * position); /* * Q3Group_GetNextPositionOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetNextPositionOfType( TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition * position); /* * Q3Group_GetPreviousPositionOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetPreviousPositionOfType( TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition * position); /* * Q3Group_CountObjectsOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_CountObjectsOfType( TQ3GroupObject group, TQ3ObjectType isType, unsigned long * nObjects); /* * Q3Group_EmptyObjectsOfType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_EmptyObjectsOfType( TQ3GroupObject group, TQ3ObjectType isType); /* * Determine position of objects in a group */ /* * Q3Group_GetFirstObjectPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetFirstObjectPosition( TQ3GroupObject group, TQ3Object object, TQ3GroupPosition * position); /* * Q3Group_GetLastObjectPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetLastObjectPosition( TQ3GroupObject group, TQ3Object object, TQ3GroupPosition * position); /* * Q3Group_GetNextObjectPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetNextObjectPosition( TQ3GroupObject group, TQ3Object object, TQ3GroupPosition * position); /* * Q3Group_GetPreviousObjectPosition() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Group_GetPreviousObjectPosition( TQ3GroupObject group, TQ3Object object, TQ3GroupPosition * position); /****************************************************************************** ** ** ** Group Subclasses ** ** ** *****************************************************************************/ /* Must contain only lights */ /* * Q3LightGroup_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3LightGroup_New(void); /* Must contain only strings */ /* * Q3InfoGroup_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3InfoGroup_New(void); /****************************************************************************** ** ** ** Display Group Routines ** ** ** *****************************************************************************/ /* May contain only drawables */ /* * Q3DisplayGroup_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3DisplayGroup_New(void); /* * Q3DisplayGroup_GetType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3ObjectType ) Q3DisplayGroup_GetType(TQ3GroupObject group); /* * Q3DisplayGroup_GetState() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_GetState( TQ3GroupObject group, TQ3DisplayGroupState * state); /* * Q3DisplayGroup_SetState() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_SetState( TQ3GroupObject group, TQ3DisplayGroupState state); /* * Q3DisplayGroup_Submit() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_Submit( TQ3GroupObject group, TQ3ViewObject view); /* * Q3DisplayGroup_SetAndUseBoundingBox() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_SetAndUseBoundingBox( TQ3GroupObject group, TQ3BoundingBox * bBox); /* * Q3DisplayGroup_GetBoundingBox() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_GetBoundingBox( TQ3GroupObject group, TQ3BoundingBox * bBox); /* * Q3DisplayGroup_RemoveBoundingBox() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_RemoveBoundingBox(TQ3GroupObject group); /* * Q3DisplayGroup_CalcAndUseBoundingBox() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3DisplayGroup_CalcAndUseBoundingBox( TQ3GroupObject group, TQ3ComputeBounds computeBounds, TQ3ViewObject view); /****************************************************************************** ** ** ** Ordered Display Group ** ** ** ** Ordered display groups keep objects in order by the type of object: ** ** ** ** 1 kQ3ShapeTypeTransform ** ** 2 kQ3ShapeTypeStyle ** ** 3 kQ3SetTypeAttribute ** ** 4 kQ3ShapeTypeShader ** ** 5 kQ3ShapeTypeCamera ** ** 6 kQ3ShapeTypeLight ** ** 7 kQ3ShapeTypeGeometry ** ** 8 kQ3ShapeTypeGroup ** ** 9 kQ3ShapeTypeUnknown ** ** ** ** Within a type, you are responsible for keeping things in order. ** ** ** ** You may access and/or manipulate the group using the above types ** ** (fast), or you may use any parent or leaf class types (slower). ** ** ** ** Additional types will be added as functionality grows. ** ** ** ** The group calls which access by type are much faster for ordered ** ** display group for the types above. ** ** ** ** N.B. Lights and Cameras in groups are a no-op when drawn and will ** ** post an error with the debug libraries. ** ** ** *****************************************************************************/ /* * Q3OrderedDisplayGroup_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3OrderedDisplayGroup_New(void); /****************************************************************************** ** ** ** IO Proxy Display Group ** ** ** ** IO Proxy display groups are used to place more than one ** ** representation of an object in a metafile. For example, if you know ** ** another program does not understand NURBPatches but does understand ** ** Meshes, you may place a mesh and a NURB Patch in an IO Proxy Group, ** ** and the reading program will select the desired representation. ** ** ** ** Objects in an IO Proxy Display Group are placed in their preferencial** ** order, with the FIRST object being the MOST preferred, the LAST ** ** object the least preferred. ** ** ** ** The behavior of an IO Proxy Display Group is that when drawn/picked/ ** ** bounded, the first object in the group that is not "Unknown" is used,** ** and the other objects ignored. ** ** ** *****************************************************************************/ /* * Q3IOProxyDisplayGroup_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3GroupObject ) Q3IOProxyDisplayGroup_New(void); /****************************************************************************** ** ** ** Group Extension Definitions ** ** ** *****************************************************************************/ /* * Searching methods - OPTIONAL */ #endif /* CALL_NOT_IN_CARBON */ enum { kQ3XMethodType_GroupAcceptObject = FOUR_CHAR_CODE('gaco') }; typedef CALLBACK_API_C( TQ3Boolean , TQ3XGroupAcceptObjectMethod )(TQ3GroupObject group, TQ3Object object); enum { kQ3XMethodType_GroupAddObject = FOUR_CHAR_CODE('gado') }; typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectMethod )(TQ3GroupObject group, TQ3Object object); enum { kQ3XMethodType_GroupAddObjectBefore = FOUR_CHAR_CODE('gaob') }; typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectBeforeMethod )(TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object); enum { kQ3XMethodType_GroupAddObjectAfter = FOUR_CHAR_CODE('gaoa') }; typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectAfterMethod )(TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object); enum { kQ3XMethodType_GroupSetPositionObject = FOUR_CHAR_CODE('gspo') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupSetPositionObjectMethod )(TQ3GroupObject group, TQ3GroupPosition gPos, TQ3Object obj); enum { kQ3XMethodType_GroupRemovePosition = FOUR_CHAR_CODE('grmp') }; typedef CALLBACK_API_C( TQ3Object , TQ3XGroupRemovePositionMethod )(TQ3GroupObject group, TQ3GroupPosition position); /* * Searching methods - OPTIONAL - default uses above methods */ enum { kQ3XMethodType_GroupGetFirstPositionOfType = FOUR_CHAR_CODE('gfrt') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetFirstPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetLastPositionOfType = FOUR_CHAR_CODE('glst') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetLastPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetNextPositionOfType = FOUR_CHAR_CODE('gnxt') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetNextPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetPrevPositionOfType = FOUR_CHAR_CODE('gpvt') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetPrevPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupCountObjectsOfType = FOUR_CHAR_CODE('gcnt') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupCountObjectsOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, unsigned long *nObjects); enum { kQ3XMethodType_GroupEmptyObjectsOfType = FOUR_CHAR_CODE('geot') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEmptyObjectsOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType); enum { kQ3XMethodType_GroupGetFirstObjectPosition = FOUR_CHAR_CODE('gfop') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetFirstObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetLastObjectPosition = FOUR_CHAR_CODE('glop') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetLastObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetNextObjectPosition = FOUR_CHAR_CODE('gnop') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetNextObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos); enum { kQ3XMethodType_GroupGetPrevObjectPosition = FOUR_CHAR_CODE('gpop') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetPrevObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos); /* * Group Position Methods */ enum { kQ3XMethodType_GroupPositionSize = FOUR_CHAR_CODE('ggpz') }; typedef unsigned long TQ3XMethodTypeGroupPositionSize; enum { kQ3XMethodType_GroupPositionNew = FOUR_CHAR_CODE('ggpn') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupPositionNewMethod )(void *gPos, TQ3Object object, const void *initData); enum { kQ3XMethodType_GroupPositionCopy = FOUR_CHAR_CODE('ggpc') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupPositionCopyMethod )(void *srcGPos, void *dstGPos); enum { kQ3XMethodType_GroupPositionDelete = FOUR_CHAR_CODE('ggpd') }; typedef CALLBACK_API_C( void , TQ3XGroupPositionDeleteMethod )(void * gPos); /* * View Drawing Helpers * * TQ3XGroupStartIterateMethod * * Pass back *object = NULL to NOT call EndIterate iterate * Pass back *object != NULL to draw object * (other side will pass it to EndIterate for deletion!) * * *iterator is uninitialized, use for iteration state. Caller should * ignore it. * * TQ3XGroupEndIterateMethod * * *object is previous object, dispose it or play with it. * Pass back NULL when last iteration has occurred * *iterator is previous value, use for iteration state Caller should * ignore it. */ enum { kQ3XMethodType_GroupStartIterate = FOUR_CHAR_CODE('gstd') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupStartIterateMethod )(TQ3GroupObject group, TQ3GroupPosition *iterator, TQ3Object *object, TQ3ViewObject view); enum { kQ3XMethodType_GroupEndIterate = FOUR_CHAR_CODE('gitd') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEndIterateMethod )(TQ3GroupObject group, TQ3GroupPosition *iterator, TQ3Object *object, TQ3ViewObject view); /* * IO Helpers * * TQ3XGroupEndReadMethod * Called when a group has been completely read. Group should perform * validation and clean up any reading caches. */ enum { kQ3XMethodType_GroupEndRead = FOUR_CHAR_CODE('gerd') }; typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEndReadMethod )(TQ3GroupObject group); #if CALL_NOT_IN_CARBON /* * Q3XGroup_GetPositionPrivate() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void * ) Q3XGroup_GetPositionPrivate( TQ3GroupObject group, TQ3GroupPosition position); #endif /* CALL_NOT_IN_CARBON */ #if PRAGMA_ENUM_ALWAYSINT #pragma enumsalwaysint reset #ifdef __QD3DGROUP__RESTORE_TWOBYTEINTS #pragma fourbyteints off #endif #elif PRAGMA_ENUM_OPTIONS #pragma option enum=reset #elif defined(__QD3DGROUP__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 /* __QD3DGROUP__ */