#define _CRT_SECURE_NO_WARNINGS 1
#include "orimpexppropconversion_tool.h"
#define ORTOOLPROPERTYCONVERSION__CLASS ORTOOLPROPERTYCONVERSION__CLASSNAME
#define ORTOOLPROPERTYCONVERSION__LABEL "Property Conversion"
#define ORTOOLPROPERTYCONVERSION__DESC "OR - Property Conversion"
ORTOOLPROPERTYCONVERSION__LABEL,
ORTOOLPROPERTYCONVERSION__DESC,
bool ORToolPropertyConversion::FBCreate()
{
mCurrentPhase = eCreateData;
UICreate ();
UIConfigure ();
return true;
}
void ORToolPropertyConversion::FBDestroy()
{
}
void ORToolPropertyConversion::UICreate()
{
int lW = 200;
int lS = 5;
int lH = 25;
AddRegion ("EditExportFile", "EditExportFile",
AddRegion ("EditNumberRate", "EditNumberRate",
AddRegion ("ButtonExport", "ButtonExport",
SetControl( "EditExportFile", mEditExportFile );
SetControl( "ButtonExport", mButtonExport );
}
void ORToolPropertyConversion::UIConfigure()
{
mButtonExport.Caption = "Create Data";
#ifdef KARCH_ENV_WIN
mEditExportFile.Text = "C:\\orimpexppropconversion.fbx";
#else
mEditExportFile.Text = "/usr/tmp/orimpexppropconversion.fbx";
#endif
mButtonExport.OnClick.Add (
this,(
FBCallback)&ORToolPropertyConversion::EventButtonClick );
}
{
switch(mCurrentPhase)
{
case eCreateData:
if(CreateData())
{
mButtonExport.Caption = "Export file";
mCurrentPhase = eExportData;
}
break;
case eExportData:
if(ExportFile())
{
mButtonExport.Caption = "Import file";
mCurrentPhase = eImportData;
}
break;
case eImportData:
if(ImportFile())
{
mButtonExport.Caption = "Clean Scene";
mCurrentPhase = eCleanScene;
}
break;
case eCleanScene:
if(CleanScene())
{
mButtonExport.Caption = "Create Data";
mCurrentPhase = eCreateData;
}
break;
default:
mCurrentPhase = eCreateData;
};
}
FBAnimationNode* ORToolPropertyConversion::FindAnimationNode( FBAnimationNode* pNode, const char* pName )
{
const char* lName;
for(
int i=0;
i < pNode->Nodes.GetCount();
i++)
{
lName = pNode->Nodes[
i]->Name;
if(strcmp(lName,pName)==0)
{
}
}
}
bool ORToolPropertyConversion::CreateData()
{
FBFCurve* lCurveX;
FBFCurve* lCurveY;
FBFCurve* lCurveZ;
FBAnimationNode* lNodeTranslation;
FBAnimationNode* lNodeTrans_X;
FBAnimationNode* lNodeTrans_Y;
FBAnimationNode* lNodeTrans_Z;
mHdlModelExport = new FBModelPlane("Tool Property Conversion Model");
mHdlModelExport->Show = true;
mHdlModelExport->Translation.SetAnimated(true);
lNodeTrans_X = FindAnimationNode(lNodeTranslation, "X");
lNodeTrans_Y = FindAnimationNode(lNodeTranslation, "Y");
lNodeTrans_Z = FindAnimationNode(lNodeTranslation, "Z");
FBSystem().CurrentTake->SetCurrentLayer(0);
lCurveX = (FBFCurve*) lNodeTrans_X->FCurve;
lCurveY = (FBFCurve*) lNodeTrans_Y->FCurve;
lCurveZ = (FBFCurve*) lNodeTrans_Z->FCurve;
if(!lCurveX) lCurveX = new FBFCurve;
else lCurveX->Keys.RemoveAll();
if(!lCurveY) lCurveY = new FBFCurve;
else lCurveY->Keys.RemoveAll();
if(!lCurveZ) lCurveZ = new FBFCurve;
else lCurveZ->Keys.RemoveAll();
FBTime lStart,lStop;
lStart.SetMilliSeconds(0);
lStop.SetMilliSeconds(1000);
lCurveX->KeyAdd(lStart,0);
lCurveX->KeyAdd(lStop,100);
lCurveY->KeyAdd(lStart,0);
lCurveY->KeyAdd(lStop,100);
lCurveZ->KeyAdd(lStart,0);
lCurveZ->KeyAdd(lStop,100);
FBSystem().CurrentTake->SetCurrentLayer(1);
lCurveX = (FBFCurve*) lNodeTrans_X->FCurve;
lCurveY = (FBFCurve*) lNodeTrans_Y->FCurve;
lCurveZ = (FBFCurve*) lNodeTrans_Z->FCurve;
if(!lCurveX) lCurveX = new FBFCurve;
else lCurveX->Keys.RemoveAll();
if(!lCurveY) lCurveY = new FBFCurve;
else lCurveY->Keys.RemoveAll();
if(!lCurveZ) lCurveZ = new FBFCurve;
else lCurveZ->Keys.RemoveAll();
lCurveX->KeyAdd(lStart,50);
lCurveX->KeyAdd(lStop,150);
lCurveY->KeyAdd(lStart,50);
lCurveY->KeyAdd(lStop,150);
lCurveZ->KeyAdd(lStart,50);
lCurveZ->KeyAdd(lStop,150);
return true;
}
bool ORToolPropertyConversion::ExportFile()
{
if(strlen(mEditExportFile.Text))
{
FbxManager* lSdkManager = FbxManager::Create();
FbxIOSettings* ios = FbxIOSettings::Create(lSdkManager, IOSROOT);
FbxScene* lScene = FbxScene::Create(lSdkManager, "");
FbxExporter* lExporter = FbxExporter::Create(lSdkManager, "");
if(lExporter->Initialize(mEditExportFile.Text, 1, ios))
{
FbxAnimStack* lAnimStack = FbxAnimStack::Create(lScene, FBSystem().CurrentTake->GetFullName());
FbxNode* lDummyNode = FbxNode::Create(lSdkManager, "dummy");
FbxNode* lRootNode = lScene->GetRootNode();
lRootNode->AddChild(lDummyNode);
FbxProperty lNewFBXProperty =
FBtoFBXProperty((FBProperty*)(&mHdlModelExport->Translation), FBSystem().CurrentTake, lDummyNode, lScene, lAnimStack,
true);
lExporter->Export(lScene);
lExporter->Destroy();
return true;
}
}
return false;
}
bool FileExist( const char* pFileName )
{
bool lReturn = false;
FILE* lFile = fopen( pFileName,
"r" );
{
lReturn = true;
fclose(lFile);
}
return lReturn;
}
bool ORToolPropertyConversion::ImportFile()
{
if( FileExist( mEditExportFile.Text ) )
{
mHdlModelImport = new FBModelPlane("Model for file import");
mHdlModelImport->Show = true;
FbxManager* lSdkImportManager = FbxManager::Create();
FbxIOSettings* ios = FbxIOSettings::Create(lSdkImportManager, IOSROOT);
ios->SetBoolProp(IMP_FBX_ANIMATION, true);
FbxImporter* lImporter = FbxImporter::Create(lSdkImportManager, "");
FbxScene* lSceneImport = FbxScene::Create(lSdkImportManager,"MyScene");
if(lImporter->Initialize(mEditExportFile.Text, -1, ios))
{
lImporter->Import(lSceneImport);
FbxNode* lRootNode = lSceneImport->GetRootNode();
FbxNode* lImportedDummyObject =
NULL;
for(int lModelCount = 0; lModelCount < lRootNode->GetChildCount(); lModelCount++)
{
if(strcmp(lRootNode->GetChild(lModelCount)->GetName(), "dummy") == 0)
{
lImportedDummyObject = lRootNode->GetChild(lModelCount);
break;
}
}
if(lImportedDummyObject)
{
FbxAnimStack* lAnimStack = FbxCast<FbxAnimStack>(lSceneImport->GetSrcObject<FbxAnimStack>(0));
FbxProperty lSrcProp = lImportedDummyObject->FindProperty("Lcl Translation");
if(lSrcProp.IsValid())
{
FBXtoFBProperty(&lSrcProp, lAnimStack, mHdlModelImport, FBSystem().CurrentTake,
true);
}
}
lImporter->Destroy();
}
}
return true;
}
bool ORToolPropertyConversion::CleanScene()
{
if( mHdlModelExport.Ok() )
{
mHdlModelExport->FBDelete();
}
if( mHdlModelImport.Ok() )
{
mHdlModelImport->FBDelete();
}
return true;
}