#include "ortoolpath3d_tool.h"
#define ORTOOLPATH3D__CLASS ORTOOLPATH3D__CLASSNAME
#define ORTOOLPATH3D__LABEL "Path3D"
#define ORTOOLPATH3D__DESC "FBSDK - Path3D Description"
ORTOOLPATH3D__LABEL,
ORTOOLPATH3D__DESC,
#include <math.h>
bool ORToolPath3D::FBCreate()
{
StartSize[0] = 160;
StartSize[1] = 95;
int lB = 10;
int lW = 100;
int lH = 18;
AddRegion( "ButtonTest", "ButtonTest",
SetControl( "ButtonTest", mButtonTest );
mButtonTest.OnClick.Add(
this, (
FBCallback) &ORToolPath3D::EventButtonTestClick );
mButtonTest.Caption = "Create scene";
OnShow.Add (
this, (
FBCallback) &ORToolPath3D::EventToolShow );
OnIdle.Add (
this, (
FBCallback) &ORToolPath3D::EventToolIdle );
OnResize.Add(
this, (
FBCallback) &ORToolPath3D::EventToolResize );
OnPaint.Add (
this, (
FBCallback) &ORToolPath3D::EventToolPaint );
OnInput.Add (
this, (
FBCallback) &ORToolPath3D::EventToolInput );
mState=0;
return true;
}
void ORToolPath3D::FBDestroy()
{
OnShow.Remove (
this, (
FBCallback) &ORToolPath3D::EventToolShow );
OnIdle.Remove (
this, (
FBCallback) &ORToolPath3D::EventToolIdle );
OnPaint.Remove (
this, (
FBCallback) &ORToolPath3D::EventToolPaint );
OnInput.Remove (
this, (
FBCallback) &ORToolPath3D::EventToolInput );
OnResize.Remove (
this, (
FBCallback) &ORToolPath3D::EventToolResize);
}
bool ORToolPath3D::IsSetupValid()
{
return mHdlSet.Ok() && mHdlPath.Ok() && mHdlCube.Ok() && mHdlCube1.Ok() && mHdlConstraint.Ok();
}
void ORToolPath3D::ClearSetup()
{
if( mHdlSet.Ok() )
{
mHdlSet->FBDelete();
}
if( mHdlPath.Ok() )
{
mHdlPath->FBDelete();
}
if( mHdlCube.Ok() )
{
mHdlCube->FBDelete();
}
if( mHdlCube1.Ok() )
{
mHdlCube1->FBDelete();
}
if( mHdlConstraint.Ok() )
{
mHdlConstraint->FBDelete();
}
mButtonTest.Caption = "Create scene";
mState = 0;
}
void ORToolPath3D::EventButtonTestClick(
HISender pSender,
HKEvent pEvent )
{
bool lSceneIsValid = true;
switch( mState )
{
case 0:
{
mHdlSet = new FBSet("Set from SDK");
mHdlPath = new FBModelPath3D("3D Path from SDK");
for( x = -300; x <= 300; x += 10 )
{
v4d[1] = 20 * sin(15 * x);
v4d[2] = 20 * cos(15 * x);
mHdlPath->PathKeyEndAdd(v4d);
}
mHdlPath->PathKeyRemove(0);
mHdlPath->PathKeyRemove(0);
mHdlCube = new FBModelCube("Cube from SDK");
mHdlCube1 = new FBModelCube("Cube 1 from SDK");
v3d[0] = v3d[1] = v3d[2] = 10.0f;
mHdlCube->Scaling = v3d;
mHdlCube1->Scaling = v3d;
mHdlConstraint = FBConstraintManager::TheOne().TypeCreateConstraint("Path");
if( !mHdlConstraint.Ok() )
FBMessageBox(
"Error",
"Unable to create 3D Path constraint! Object will not be constrained.",
"Ok");
else
{
mHdlConstraint->ReferenceAdd(0, mHdlCube);
mHdlConstraint->ReferenceAdd(1, mHdlPath);
}
mButtonTest.Caption = "Make visible";
lSceneIsValid = IsSetupValid();
}
break;
case 1:
{
lSceneIsValid = IsSetupValid();
if(lSceneIsValid)
{
mHdlSet->Items.Add(mHdlCube);
mHdlSet->Items.Add(mHdlCube1);
mHdlPath->Show = true;
mHdlCube->Show = true;
mHdlCube1->Show = true;
mHdlConstraint->Active = true;
v3d = mHdlCube->Translation;
v3d[1] += 50;
mHdlCube1->Translation = v3d;
mHdlCube1->Parent = mHdlCube;
mHdlConstraint->PropertyList.Find("FollowPath")->SetInt(1);
mButtonTest.Caption = "Remove model";
}
}
break;
case 2:
{
lSceneIsValid = IsSetupValid();
if(lSceneIsValid)
{
mHdlPath->Show = false;
mHdlCube->Show = false;
mHdlCube1->Show = false;
mHdlConstraint->Active = false;
mButtonTest.Caption = "Delete model";
}
}
break;
case 3:
{
lSceneIsValid = false;
}
break;
}
if(lSceneIsValid)
{
mState=(mState+1) % 4;
}
else
{
ClearSetup();
}
}
{
}
{
FBEventShow lEvent( pEvent );
if( lEvent.Shown )
{
}
else
{
}
}
{
}
{
}
{
}
bool ORToolPath3D::FbxStore ( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldWriteBegin( "ORToolPath3DSection" );
{
pFbxObject->FieldWriteC( mButtonTest.Caption );
}
pFbxObject->FieldWriteEnd();
return true;
}
bool ORToolPath3D::FbxRetrieve( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
{
pFbxObject->FieldReadBegin( "ORToolPath3DSection" );
{
mButtonTest.Caption = pFbxObject->FieldReadC();
}
pFbxObject->FieldReadEnd();
return true;
}