#include "ortoolskeleton_tool.h"
#define ORTOOLSKELETON__CLASS ORTOOLSKELETON__CLASSNAME
#define ORTOOLSKELETON__LABEL "Skeleton"
#define ORTOOLSKELETON__DESC "OR - Skeleton Tool Description"
ORTOOLSKELETON__LABEL,
ORTOOLSKELETON__DESC,
bool ORToolSkeleton::FBCreate()
{
StartSize[0] = 160;
StartSize[1] = 95;
UICreate ();
UIConfigure ();
UIReset ();
OnShow.Add(
this, (
FBCallback) &ORToolSkeleton::EventToolShow );
OnIdle.Add(
this, (
FBCallback) &ORToolSkeleton::EventToolIdle );
return true;
}
void ORToolSkeleton::FBDestroy()
{
OnShow.Remove(
this, (
FBCallback) &ORToolSkeleton::EventToolShow );
OnIdle.Remove(
this, (
FBCallback) &ORToolSkeleton::EventToolIdle );
}
void ORToolSkeleton::UICreate()
{
int lS = 4;
int lW = 100;
int lH = 18;
AddRegion( "LabelDirections", "LabelDirections",
AddRegion( "ButtonCreateSkeleton", "ButtonCreateSkeleton",
SetControl( "LabelDirections", mLabelDirections );
SetControl( "ButtonCreateSkeleton", mButtonCreateSkeleton );
}
void ORToolSkeleton::UIConfigure()
{
mLabelDirections.Caption = "Create a human skeleton\n"
"by clicking on the button.";
mButtonCreateSkeleton.Caption = "Create Skeleton";
mButtonCreateSkeleton.OnClick.Add (
this, (
FBCallback) &ORToolSkeleton::EventButtonCreateSkeletonClick );
}
void ORToolSkeleton::UIReset()
{
}
void ORToolSkeleton::UIRefresh()
{
}
int Count = 0;
double DataArray[13][4] =
{ +000.0,+097.2,-007.3, 3,
+009.6,-003.6,+007.3, 1,
+000.0,-042.7,-000.4, 0,
-009.6,-003.6,+007.3, 1,
+000.0,-042.7,-000.4, 0,
+000.0,+010.8,+002.0, 1,
+000.0,+014.0,+001.3, 3,
+008.9,+021.2,+002.9, 1,
+009.8,+000.8,+000.6, 0,
-008.9,+021.2,+002.9, 1,
-009.8,+000.8,+000.6, 0,
+000.0,+029.5,+003.3, 1,
+000.0,+009.3,+002.7, 0
};
const char* DataNames[13] =
{ "Hips",
"LHips",
"LKnee",
"RHip",
"RKnee",
"Waist",
"Chest",
"LCollar",
"LShoulder",
"RCollar",
"RShoulder",
"Neck",
"Head"
};
void CopyKeyData( FBAnimationNode* Node, double Data)
{
static FBSystem sSystem;
FBFCurve* lCurve = Node->FCurve;
if( !lCurve )
{
lCurve = new FBFCurve;
}
else
{
lCurve->Keys.RemoveAll();
}
FBTime lTime = sSystem.LocalTime;
lCurve->KeyAdd(lTime, Data);
Node->FCurve = lCurve;
}
void CreateHierarchy( FBModelSkeleton* Parent, FBActor* Actor)
{
FBModelSkeleton* lNode = new FBModelSkeleton( DataNames[Count] );
lNode->Show = true;
{
Parent->Children.Add(lNode);
}
lNode->Translation.SetAnimated(true);
FBAnimationNode* lAnimNode = lNode->AnimationNode;
FBAnimationNode* lTransNode = lAnimNode->Nodes.Find("Lcl Translation");
FBAnimationNode* lTempNode = lTransNode->Nodes.Find("X");
CopyKeyData(lTempNode, DataArray[Count][0]);
int test = ((FBFCurve*)(lTempNode->FCurve))->Keys.GetCount();
lTempNode = lTransNode->Nodes.Find("Y");
CopyKeyData(lTempNode, DataArray[Count][1]);
test = ((FBFCurve*)(lTempNode->FCurve))->Keys.GetCount();
lTempNode = lTransNode->Nodes.Find("Z");
CopyKeyData(lTempNode, DataArray[Count][2]);
test = ((FBFCurve*)(lTempNode->FCurve))->Keys.GetCount();
int lChildCount = DataArray[Count][3];
for(int lIter = 0;lIter < lChildCount; lIter++)
{
Count+=1;
CreateHierarchy( lNode, Actor );
}
}
void ORToolSkeleton::EventButtonCreateSkeletonClick(
HISender pSender,
HKEvent pEvent )
{
FBActor* lActor = new FBActor( "SDK Actor" );
CreateHierarchy(
NULL,lActor );
}
{
FBEventShow lEvent( pEvent );
if( lEvent.Shown )
{
UIReset();
}
else
{
}
}
{
UIRefresh();
}