#ifndef __ORDEVICE_OPTICAL_DEVICE_H__
#define __ORDEVICE_OPTICAL_DEVICE_H__
#include "ordeviceopticalhybrid_hardware.h"
#define ORDEVICEOPTICALHYBRIDTEMPLATE_CLASSNAME ORDeviceOpticalHybrid_Template
#define ORDEVICEOPTICALHYBRIDTEMPLATE_CLASSSTR "ORDeviceOpticalHybrid_Template"
class DataChannel
{
public:
DataChannel()
{
}
~DataChannel()
{
}
public:
FBAnimationNode* mTAnimNode;
FBAnimationNode* mRAnimNode;
FBModelTemplate* mModelTemplate;
};
class ORDeviceOpticalHybrid_Template : public FBDeviceOptical
{
public:
virtual bool FBCreate() override;
virtual void FBDestroy() override;
virtual bool DeviceOperation ( kDeviceOperations pOperation ) override;
virtual bool AnimationNodeNotify( FBAnimationNode* pAnimationNode, FBEvaluateInfo* pEvaluateInfo) override;
virtual void DeviceOpticalEvalAllMarkers(FBDeviceNotifyInfo &pDeviceNotifyInfo) override;
virtual void DeviceTransportNotify( kTransportMode pMode, FBTime pTime, FBTime pSystem ) override;
virtual void RecordingDoneAnimation( FBAnimationNode* pAnimationNode) override;
void DeviceRecordFrame (FBTime &pTime,FBDeviceNotifyInfo &pDeviceNotifyInfo);
virtual bool FbxStore ( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
override;
virtual bool FbxRetrieve( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
override;
bool Init ();
bool Start ();
bool Stop ();
bool Reset ();
bool Done ();
void SetNetworkUse(bool pUse) { mHardware.SetNetworkUse( pUse ); }
bool GetNetworkUse() { return mHardware.GetNetworkUse(); }
void SetNetworkAddress (const char *pIPAddress){ mHardware.SetNetworkAddress(pIPAddress); }
const char* GetNetworkAddress () { return mHardware.GetNetworkAddress(); }
void SetNetworkPort (int pPort) { mHardware.SetNetworkPort(pPort); }
int GetNetworkPort () { return mHardware.GetNetworkPort(); }
int GetMarkerCount () { return mHardware.GetMarkerCount(); }
const char* GetMarkerName (int pMarkerIndex) { return mHardware.GetMarkerName(pMarkerIndex); }
double GetDataX (int pMarker) { return mHardware.GetDataX(pMarker); }
double GetDataY (int pMarker) { return mHardware.GetDataY(pMarker); }
double GetDataZ (int pMarker) { return mHardware.GetDataZ(pMarker); }
double GetDataO (int pMarker) { return mHardware.GetDataO(pMarker); }
void RigidBodySetup ();
void DefineHierarchy ();
void Bind();
void UnBind();
int GetChannelCount() { return mHardware.GetChannelCount(); }
int GetChannelParent(int pMarkerIndex) { return mHardware.GetChannelParent(pMarkerIndex);}
const char *GetChannelName(int pMarkerIndex){ return mHardware.GetChannelName(pMarkerIndex); }
virtual bool ModelTemplateUnBindNotify( int pIndex, FBModelTemplate* pModelTemplate );
bool ReadyForCharacterize ();
ORDeviceOpticalHybrid_Template_Hardware mHardware;
FBModelTemplate* mRootTemplate;
private:
DataChannel mChannels[ChannelCount];
bool mHierarchyIsDefined;
FBPlayerControl mPlayerControl;
FBSystem mSystem;
FBApplication mApplication;
bool mHasAnimationToTranspose;
bool mPlotting;
void ProcessGlobalToLocal();
void SetupLocalGlobal(bool pGlobal);
};
#endif