#include "SDK_Utility.h"
#ifdef IOS_REF
#undef IOS_REF
#define IOS_REF (*(pSdkManager->GetIOSettings()))
#endif
KFbxSdkManager* gSdkManager = NULL;
KFbxScene* gScene = NULL;
bool LoadFBXScene(
const char *pFbxFilePath
)
{
if( LoadScene(gSdkManager, gScene, pFbxFilePath ) == false ) return false;
return true;
}
void InitializeSdkManagerAndScene()
{
gSdkManager = KFbxSdkManager::Create();
KFbxIOSettings * ios = KFbxIOSettings::Create(gSdkManager, IOSROOT );
gSdkManager->SetIOSettings(ios);
gScene = KFbxScene::Create(gSdkManager,"");
}
void DestroySdkObjects(
KFbxSdkManager* pSdkManager
)
{
if (pSdkManager) pSdkManager->Destroy();
}
const char *GetReaderOFNFilters()
{
int nbReaders = gSdkManager->GetIOPluginRegistry()->GetReaderFormatCount();;
KString s;
int i = 0;
for(i=0; i < nbReaders; i++)
{
s += gSdkManager->GetIOPluginRegistry()->GetReaderFormatDescription(i);
s += "|*.";
s += gSdkManager->GetIOPluginRegistry()->GetReaderFormatExtension(i);
s += "|";
}
int nbChar = int(strlen(s.Buffer())) + 1;
char *filter = new char[ nbChar ];
memset(filter, 0, nbChar);
strcpy(filter, s.Buffer());
for(i=0; i < int(strlen(s.Buffer())); i++)
{
if(filter[i] == '|')
{
filter[i] = 0;
}
}
return filter;
}
bool LoadScene(
KFbxSdkManager *pSdkManager,
KFbxScene *pScene,
const char *pFbxFilePath
)
{
bool lStatus;
KFbxImporter* lImporter = KFbxImporter::Create(pSdkManager,"");
bool lImportStatus = lImporter->Initialize(pFbxFilePath, -1, pSdkManager->GetIOSettings() );
if( !lImportStatus )
{
lImporter->Destroy();
return false;
}
if (lImporter->IsFBX())
{
IOS_REF.SetBoolProp(IMP_FBX_MATERIAL, true);
IOS_REF.SetBoolProp(IMP_FBX_TEXTURE, true);
IOS_REF.SetBoolProp(IMP_FBX_LINK, true);
IOS_REF.SetBoolProp(IMP_FBX_SHAPE, true);
IOS_REF.SetBoolProp(IMP_FBX_GOBO, true);
IOS_REF.SetBoolProp(IMP_FBX_ANIMATION, true);
IOS_REF.SetBoolProp(IMP_FBX_GLOBAL_SETTINGS, true);
}
lStatus = lImporter->Import(pScene);
lImporter->Destroy();
return lStatus;
}
const KFbxNode* GetRootNode()
{
return gScene->GetRootNode();
}
const char * GetRootNodeName()
{
return GetRootNode()->GetName();
}
KString GetNodeNameAndAttributeTypeName(const KFbxNode* pNode)
{
KString s = pNode->GetName();
KFbxNodeAttribute::EAttributeType lAttributeType;
if(pNode->GetNodeAttribute() == NULL)
{
s += " (No node attribute type)";
}
else
{
lAttributeType = (pNode->GetNodeAttribute()->GetAttributeType());
switch (lAttributeType)
{
case KFbxNodeAttribute::eMARKER: s += " (Marker)"; break;
case KFbxNodeAttribute::eSKELETON: s += " (Skeleton)"; break;
case KFbxNodeAttribute::eMESH: s += " (Mesh)"; break;
case KFbxNodeAttribute::eCAMERA: s += " (Camera)"; break;
case KFbxNodeAttribute::eLIGHT: s += " (Light)"; break;
case KFbxNodeAttribute::eBOUNDARY: s += " (Boundary)"; break;
case KFbxNodeAttribute::eOPTICAL_MARKER: s += " (Optical marker)"; break;
case KFbxNodeAttribute::eOPTICAL_REFERENCE: s += " (Optical reference)"; break;
case KFbxNodeAttribute::eCAMERA_SWITCHER: s += " (Camera switcher)"; break;
case KFbxNodeAttribute::eNULL: s += " (Null)"; break;
case KFbxNodeAttribute::ePATCH: s += " (Patch)"; break;
case KFbxNodeAttribute::eNURB: s += " (NURB)"; break;
case KFbxNodeAttribute::eNURBS_SURFACE: s += " (Nurbs surface)"; break;
case KFbxNodeAttribute::eNURBS_CURVE: s += " (NURBS curve)"; break;
case KFbxNodeAttribute::eTRIM_NURBS_SURFACE: s += " (Trim nurbs surface)"; break;
case KFbxNodeAttribute::eUNIDENTIFIED: s += " (Unidentified)"; break;
}
}
return s;
}
KString GetDefaultTranslationInfo(
const KFbxNode* pNode
)
{
KFbxVector4 v4;
v4 = ((KFbxNode*)pNode)->LclTranslation.Get();
return KString("Translation (X,Y,Z): ") + KString(v4.GetAt(0)) + ", " + KString(v4.GetAt(1)) + ", " + KString(v4.GetAt(2));
}
KString GetNodeVisibility(
const KFbxNode* pNode
)
{
return KString("Visibility: ") + (pNode->GetVisibility() ? "Yes":"No");
}