tools/toolfcurveevent/ortool_fcurveevent_tool.cxx

tools/toolfcurveevent/ortool_fcurveevent_tool.cxx
// ===========================================================================
// Copyright 2017 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk license
// agreement provided at the time of installation or download, or which
// otherwise accompanies this software in either electronic or hard copy form.
// ===========================================================================
//--- Class declaration
#include "ortool_fcurveevent_tool.h"
//--- Registration defines
#define ORTOOLTEMPLATE__CLASS ORTOOLTEMPLATE__CLASSNAME
#define ORTOOLTEMPLATE__LABEL "FCurveEvent"
#define ORTOOLTEMPLATE__DESC "FBSDK - Tool FCurve Event Description"
//--- Implementation and registration
FBToolImplementation( ORTOOLTEMPLATE__CLASS );
FBRegisterTool ( ORTOOLTEMPLATE__CLASS,
ORTOOLTEMPLATE__LABEL,
ORTOOLTEMPLATE__DESC,
FB_DEFAULT_SDK_ICON ); // Icon filename (default=Open Reality icon)
#define VAR_NOT_USED(X) (void)X;
/************************************************
* Constructor.
************************************************/
bool ORTool_FCurveEvent::FBCreate()
{
// Tool options
StartSize[0] = 160;
StartSize[1] = 95;
int lB = 10;
//int lS = 4;
int lW = 150;
int lH = 18;
// Configure layout
AddRegion( "Label", "Label",
lB, kFBAttachLeft, "", 1.0 ,
lB, kFBAttachTop, "", 1.0,
lW, kFBAttachNone, "", 1.0,
lH, kFBAttachNone, "", 1.0 );
SetControl( "Label", mLabel );
mLabel.Caption = "FCurve event tracked\n";
//register to the fcurve event callback
FBFCurveEventManager::TheOne().OnFCurveEvent.Add(this, (FBCallback) &ORTool_FCurveEvent::EventFCurveChanged);
FBFCurveEventManager::TheOne().OnPropertyEvent.Add(this, (FBCallback) &ORTool_FCurveEvent::EventPropertyChanged);
mCube = new FBModelCube("Cube");
mCube->Show = true;
//track those properties
FBFCurveEventManager::TheOne().RegisterProperty((FBPropertyAnimatable*)&mCube->Translation);
FBFCurveEventManager::TheOne().RegisterProperty((FBPropertyAnimatable*)&mCube->Visibility);
FBPropertyAnimatable* lProp = (FBPropertyAnimatable*)mCube->PropertyCreate("CustomProp", FBPropertyType::kFBPT_int, NULL, true, true);
FBFCurveEventManager::TheOne().RegisterProperty(lProp);
mCube2 = new FBModelCube("Cube2");
mCube2->Show = true;
FBFCurveEventManager::TheOne().RegisterProperty((FBPropertyAnimatable*)&mCube2->Translation);
FBFCurveEventManager::TheOne().RegisterProperty((FBPropertyAnimatable*)&mCube2->Visibility);
return true;
}
/************************************************
* Destruction function.
************************************************/
void ORTool_FCurveEvent::FBDestroy()
{
// Remove tool callbacks
FBFCurveEventManager::TheOne().OnFCurveEvent.Remove( this, (FBCallback) &ORTool_FCurveEvent::EventFCurveChanged);
FBFCurveEventManager::TheOne().OnPropertyEvent.Remove( this, (FBCallback) &ORTool_FCurveEvent::EventFCurveChanged);
//There is no need to call "FBFCurveEventManager::TheOne().RegisterProperty" for each property, internally, Mobu will stop tracking those
//properties if the objects are destroyed. You can use the FBFCurveEventManager::TheOne().UnregisterProperty if you want to stop
//tracking a property on an active object.
}
void ORTool_FCurveEvent::EventPropertyChanged( HISender pSender, HKEvent pEvent )
{
FBPropertyStateEvent lEvent(pEvent);
FBComponent* lComponent = lEvent.GetParentComponent();
FBTrace("New Property Event\n");
if(lEvent.GetProperty())
FBTrace("lProperty Name = %s\n", lEvent.GetProperty()->GetName());
if(lComponent)
FBTrace("lComponent = %s\n", FBComponentGetName(lComponent));
FBTrace("Event Type:\n");
FBPropertyStateEventType lType = lEvent.EventType;
{
FBTrace("kFBPropertyStateEventTypeUnknownOperation\n");
}
{
FBTrace("kFBPropertyStateEventTypeAttached\n");
}
{
FBTrace("kFBPropertyStateEventTypeDetached\n");
}
{
FBTrace("kFBPropertyStateEventTypeDestroyed\n");
}
{
FBTrace("kFBPropertyStateEventTypeMassOperation\n");
}
FBTrace("End of New Property Event\n\n");
}
void ORTool_FCurveEvent::EventFCurveChanged( HISender pSender, HKEvent pEvent )
{
FBFCurveEvent lEvent(pEvent);
FBProperty* lProperty = lEvent.GetParentProperty();
FBComponent* lComponent = lEvent.GetParentComponent();
FBFCurve* lCurve = lEvent.Curve;
VAR_NOT_USED( lCurve );
int lStart = lEvent.KeyIndexStart;
int lStop = lEvent.KeyIndexStop;
FBTrace("New Curve Event\n");
if(lComponent)
FBTrace("lComponent = %s\n", FBComponentGetName(lComponent));
if(lProperty)
FBTrace("lProperty Name = %s\n", lProperty->GetName());
const char* lCurveName = lEvent.CurveName;
FBTrace("Curve Name = %s\n", lCurveName);
int lIndex = lEvent.CurveIndex;
FBTrace("Curve Index = %d\n", lIndex);
FBTrace("First Key = %d\n", lStart);
FBTrace("Last Key = %d\n", lStop);
FBTrace("Event Type:\n");
FBFCurveEventType lType = lEvent.EventType;
{
FBTrace("kFBFCurveEventTypeUnknownOperation\n");
}
{
FBTrace("kFBFCurveEventTypeKeyAdded\n");
}
{
FBTrace("kFBFCurveEventTypeKeyRemoved\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTimeChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyValueChanged\n");
}
{
FBTrace("kFBFCurveEventTypeDerivativedChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTensionChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyContinuityChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyBiasChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyInterpolationChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTangentChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTangentBreakChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTangentClampModeChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyTangentConstantChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyVelocityChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyWeightChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyPreExtrapolationChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyPostExtrapolationChanged\n");
}
{
FBTrace("kFBFCurveEventTypeKeyMassOperation\n");
}
FBTrace("End of New Key Event\n\n");
}