header/dpg.h

/******************************************************************************
 **                                                                          **
 **     Module:     dpg.h                                                    **
 **                                                                          **
 **                                                                          **
 **                                                                          **
 **                                                                          **
 **                                                                          **
 **     Copyright (C) 1995-1996 Apple Computer, Inc.  All rights reserved.   **
 **                                                                          **
 **                                                                          **
 *****************************************************************************/
 
#ifndef DistanceProxyGroup_sys_h
#define DistanceProxyGroup_sys_h
 
#if PRAGMA_ONCE
    #pragma once
#endif
 
#include "QD3D.h"
#include "QD3DGroup.h"
#include "DPGGroup.h"
 
/******************************************************************************
 **                                                                          **
 **                 Distance Proxy Display Groups                            **
 **                                                                          **
 *****************************************************************************/
 
typedef struct TQ3DistanceData {
    float               distance;
    TQ3GroupPosition    position;
} TQ3DistanceData;
 
typedef struct TQ3DistanceIOData {
    float               distance;
    unsigned long       index;
} TQ3DistanceIOData;
 
typedef struct TQ3DistanceProxyDisplayGroupPrivate {
    TQ3Point3D              refPt;
    TQ3DPGFlag              flag;
    float                   d;
    TQ3GroupPosition        position;
    
    TQ3DistanceData         *distTbl;
    unsigned long           distTblCnt;
 
    TQ3DistanceIOData       *distIOTbl;
    unsigned long           distIOTblCnt;
} TQ3DistanceProxyDisplayGroupPrivate;
 
 
typedef struct TQ3DPGPositionPrivate {
    TQ3Boolean  flag;
    float       distance;
} TQ3DPGPositionPrivate;
 
extern void *EiGroup_GetPositionPrivate(
    TQ3XObjectClass         objectClass,
    TQ3GroupObject          group,
    TQ3GroupPosition        gPos);
 
extern TQ3XObjectClass EgDistanceProxyDisplayGroupClass;
 
 
#define DPG_GETPRIVATE(x)\
     (TQ3DistanceProxyDisplayGroupPrivate *)Q3XObjectClass_GetPrivate(EgDistanceProxyDisplayGroupClass, (x))
 
#define DPG_POSITION_GETPRIVATE(group, pos)\
     (TQ3DPGPositionPrivate *)Q3XGroup_GetPositionPrivate( (group), (pos))
 
 
#ifdef __cplusplus
extern "C" {
#endif /*  __cplusplus  */
 
 
TQ3Status exDistanceProxyGroup_Register( 
    void);
 
TQ3GroupObject exDistanceProxyGroup_New(
    TQ3Point3D      *position,
    unsigned long   flags);
 
TQ3GroupPosition exDistanceProxyGroup_AddObjectDistance(
    TQ3GroupObject      group,
    TQ3Object           object,
    float               distance);
 
TQ3Status exDistanceProxyGroup_SetFlag(
    TQ3GroupObject      group,
    TQ3DPGFlag          flag);
 
TQ3Status exDistanceProxyGroup_GetFlag(
    TQ3GroupObject      group,
    TQ3DPGFlag          *flag);
 
TQ3Status exDistanceProxyGroup_SetReferencePoint(
    TQ3GroupObject      group,
    TQ3Point3D          *refPt);
 
TQ3Status exDistanceProxyGroup_GetReferencePoint(
    TQ3GroupObject      group,
    TQ3Point3D          *refPt);
 
TQ3Boolean exDistanceProxyGroup_SetDistanceAtPosition(
    TQ3GroupObject      group,
    TQ3GroupPosition    position,
    float               distance);
 
TQ3Boolean exDistanceProxyGroup_GetDistanceAtPosition(
    TQ3GroupObject      group,
    TQ3GroupPosition    position,
    float               *distance);
 
#ifdef __cplusplus
}
#endif /*  __cplusplus  */
 
#endif