#include "../Common/Common.h"
#include "DisplayCommon.h"
#include "DisplayHierarchy.h"
#include "DisplayAnimation.h"
#include "DisplayMarker.h"
#include "DisplaySkeleton.h"
#include "DisplayMesh.h"
#include "DisplayNurb.h"
#include "DisplayPatch.h"
#include "DisplayLodGroup.h"
#include "DisplayCamera.h"
#include "DisplayLight.h"
#include "DisplayGlobalSettings.h"
#include "DisplayPose.h"
#include "DisplayPivotsAndLimits.h"
#include "DisplayUserProperties.h"
#include "DisplayGenericInfo.h"
void DisplayContent(FbxScene* pScene);
void DisplayContent(FbxNode* pNode);
void DisplayTarget(FbxNode* pNode);
void DisplayTransformPropagation(FbxNode* pNode);
void DisplayGeometricTransform(FbxNode* pNode);
void DisplayMetaData(FbxScene* pScene);
int main(int argc, char** argv)
{
FbxManager* lSdkManager = NULL;
FbxScene* lScene = NULL;
bool lResult;
InitializeSdkObjects(lSdkManager, lScene);
if(argc > 1)
{
FBXSDK_printf("\n\nFile: %s\n\n", argv[1]);
lResult = LoadScene(lSdkManager, lScene, argv[1]);
}
else
{
lResult = false;
FBXSDK_printf("\n\nUsage: ImportScene <FBX file name>\n\n");
}
if(lResult == false)
{
FBXSDK_printf("\n\nAn error occurred while loading the scene...");
}
else
{
DisplayMetaData(lScene);
FBXSDK_printf("\n\n---------------------\nGlobal Light Settings\n---------------------\n\n");
DisplayGlobalLightSettings(&lScene->GetGlobalSettings());
FBXSDK_printf("\n\n----------------------\nGlobal Camera Settings\n----------------------\n\n");
DisplayGlobalCameraSettings(&lScene->GetGlobalSettings());
FBXSDK_printf("\n\n--------------------\nGlobal Time Settings\n--------------------\n\n");
DisplayGlobalTimeSettings(&lScene->GetGlobalSettings());
FBXSDK_printf("\n\n---------\nHierarchy\n---------\n\n");
DisplayHierarchy(lScene);
FBXSDK_printf("\n\n------------\nNode Content\n------------\n\n");
DisplayContent(lScene);
FBXSDK_printf("\n\n----\nPose\n----\n\n");
DisplayPose(lScene);
FBXSDK_printf("\n\n---------\nAnimation\n---------\n\n");
DisplayAnimation(lScene);
FBXSDK_printf("\n\n---------\nGeneric Information\n---------\n\n");
DisplayGenericInfo(lScene);
}
DestroySdkObjects(lSdkManager);
return 0;
}
void DisplayContent(FbxScene* pScene)
{
int i;
FbxNode* lNode = pScene->GetRootNode();
if(lNode)
{
for(i = 0; i < lNode->GetChildCount(); i++)
{
DisplayContent(lNode->GetChild(i));
}
}
}
void DisplayContent(FbxNode* pNode)
{
FbxNodeAttribute::EType lAttributeType;
int i;
if(pNode->GetNodeAttribute() == NULL)
{
FBXSDK_printf("NULL Node Attribute\n\n");
}
else
{
lAttributeType = (pNode->GetNodeAttribute()->GetAttributeType());
switch (lAttributeType)
{
case FbxNodeAttribute::eMarker:
DisplayMarker(pNode);
break;
case FbxNodeAttribute::eSkeleton:
DisplaySkeleton(pNode);
break;
case FbxNodeAttribute::eMesh:
DisplayMesh(pNode);
break;
case FbxNodeAttribute::eNurbs:
DisplayNurb(pNode);
break;
case FbxNodeAttribute::ePatch:
DisplayPatch(pNode);
break;
case FbxNodeAttribute::eCamera:
DisplayCamera(pNode);
break;
case FbxNodeAttribute::eLight:
DisplayLight(pNode);
break;
case FbxNodeAttribute::eLODGroup:
DisplayLodGroup(pNode);
break;
}
}
DisplayUserProperties(pNode);
DisplayTarget(pNode);
DisplayPivotsAndLimits(pNode);
DisplayTransformPropagation(pNode);
DisplayGeometricTransform(pNode);
for(i = 0; i < pNode->GetChildCount(); i++)
{
DisplayContent(pNode->GetChild(i));
}
}
void DisplayTarget(FbxNode* pNode)
{
if(pNode->GetTarget() != NULL)
{
DisplayString(" Target Name: ", (char *) pNode->GetTarget()->GetName());
}
}
void DisplayTransformPropagation(FbxNode* pNode)
{
FBXSDK_printf(" Transformation Propagation\n");
EFbxRotationOrder lRotationOrder;
pNode->GetRotationOrder(FbxNode::eSourcePivot, lRotationOrder);
FBXSDK_printf(" Rotation Space: ");
switch (lRotationOrder)
{
case eEulerXYZ:
FBXSDK_printf("Euler XYZ\n");
break;
case eEulerXZY:
FBXSDK_printf("Euler XZY\n");
break;
case eEulerYZX:
FBXSDK_printf("Euler YZX\n");
break;
case eEulerYXZ:
FBXSDK_printf("Euler YXZ\n");
break;
case eEulerZXY:
FBXSDK_printf("Euler ZXY\n");
break;
case eEulerZYX:
FBXSDK_printf("Euler ZYX\n");
break;
case eSphericXYZ:
FBXSDK_printf("Spheric XYZ\n");
break;
}
FBXSDK_printf(" Use the Rotation Space for Limit specification only: %s\n",
pNode->GetUseRotationSpaceForLimitOnly(FbxNode::eSourcePivot) ? "Yes" : "No");
FbxTransform::EInheritType lInheritType;
pNode->GetTransformationInheritType(lInheritType);
FBXSDK_printf(" Transformation Inheritance: ");
switch (lInheritType)
{
case FbxTransform::eInheritRrSs:
FBXSDK_printf("RrSs\n");
break;
case FbxTransform::eInheritRSrs:
FBXSDK_printf("RSrs\n");
break;
case FbxTransform::eInheritRrs:
FBXSDK_printf("Rrs\n");
break;
}
}
void DisplayGeometricTransform(FbxNode* pNode)
{
FbxVector4 lTmpVector;
FBXSDK_printf(" Geometric Transformations\n");
lTmpVector = pNode->GetGeometricTranslation(FbxNode::eSourcePivot);
FBXSDK_printf(" Translation: %f %f %f\n", lTmpVector[0], lTmpVector[1], lTmpVector[2]);
lTmpVector = pNode->GetGeometricRotation(FbxNode::eSourcePivot);
FBXSDK_printf(" Rotation: %f %f %f\n", lTmpVector[0], lTmpVector[1], lTmpVector[2]);
lTmpVector = pNode->GetGeometricScaling(FbxNode::eSourcePivot);
FBXSDK_printf(" Scaling: %f %f %f\n", lTmpVector[0], lTmpVector[1], lTmpVector[2]);
}
void DisplayMetaData(FbxScene* pScene)
{
FbxDocumentInfo* sceneInfo = pScene->GetSceneInfo();
if (sceneInfo)
{
FBXSDK_printf("\n\n--------------------\nMeta-Data\n--------------------\n\n");
FBXSDK_printf(" Title: %s\n", sceneInfo->mTitle.Buffer());
FBXSDK_printf(" Subject: %s\n", sceneInfo->mSubject.Buffer());
FBXSDK_printf(" Author: %s\n", sceneInfo->mAuthor.Buffer());
FBXSDK_printf(" Keywords: %s\n", sceneInfo->mKeywords.Buffer());
FBXSDK_printf(" Revision: %s\n", sceneInfo->mRevision.Buffer());
FBXSDK_printf(" Comment: %s\n", sceneInfo->mComment.Buffer());
FbxThumbnail* thumbnail = sceneInfo->GetSceneThumbnail();
if (thumbnail)
{
FBXSDK_printf(" Thumbnail:\n");
switch (thumbnail->GetDataFormat())
{
case FbxThumbnail::eRGB_24:
FBXSDK_printf(" Format: RGB\n");
break;
case FbxThumbnail::eRGBA_32:
FBXSDK_printf(" Format: RGBA\n");
break;
}
switch (thumbnail->GetSize())
{
case FbxThumbnail::eNotSet:
FBXSDK_printf(" Size: no dimensions specified (%ld bytes)\n", thumbnail->GetSizeInBytes());
break;
case FbxThumbnail::e64x64:
FBXSDK_printf(" Size: 64 x 64 pixels (%ld bytes)\n", thumbnail->GetSizeInBytes());
break;
case FbxThumbnail::e128x128:
FBXSDK_printf(" Size: 128 x 128 pixels (%ld bytes)\n", thumbnail->GetSizeInBytes());
}
}
}
}