#include "MyOwnReader.h"
#include <fbxfilesdk/fbxfilesdk_nsuse.h>
MyOwnReader::MyOwnReader(KFbxSdkManager &pFbxSdkManager, int pID):
KFbxReader(pFbxSdkManager, pID),
mFilePointer(NULL),
mManager(&pFbxSdkManager)
{
}
MyOwnReader::~MyOwnReader()
{
FileClose();
}
void MyOwnReader::GetVersion(int& pMajor, int& pMinor, int& pRevision) const
{
pMajor = 1;
pMinor = 0;
pRevision=0;
}
bool MyOwnReader::FileOpen(char* pFileName)
{
if(mFilePointer != NULL)
FileClose();
mFilePointer = fopen(pFileName, "r");
if(mFilePointer == NULL)
return false;
return true;
}
bool MyOwnReader::FileClose()
{
if(mFilePointer!=NULL)
fclose(mFilePointer);
return true;
}
bool MyOwnReader::IsFileOpen()
{
if(mFilePointer != NULL)
return true;
return false;
}
bool MyOwnReader::GetReadOptions(bool pParseFileAsNeeded)
{
return true;
}
bool MyOwnReader::Read(KFbxDocument* pDocument)
{
if (!pDocument)
{
GetError().SetLastErrorID(eINVALID_DOCUMENT_HANDLE);
return false;
}
KFbxScene* lScene = KFbxCast<KFbxScene>(pDocument);
bool lIsAScene = (lScene != NULL);
bool lResult = false;
if(lIsAScene)
{
KFbxNode* lRootNode = lScene->GetRootNode();
KFbxNodeAttribute * lRootNodeAttribute = KFbxNull::Create(lScene,"");
lRootNode->SetNodeAttribute(lRootNodeAttribute);
int lSize;
char* lBuffer = NULL;
if(mFilePointer != NULL)
{
fseek (mFilePointer , 0 , SEEK_END);
lSize = ftell (mFilePointer);
rewind (mFilePointer);
lBuffer = (char*) malloc (sizeof(char)*lSize + 1);
size_t lRead = fread(lBuffer, 1, lSize, mFilePointer);
lBuffer[lRead]='\0';
KString lString(lBuffer);
KString lSubString, lChildName, lParentName;
KFbxNode* lChildNode;
KFbxNode* lParentNode;
KFbxNodeAttribute* lChildAttribute;
int lEndTokenCount = lString.GetTokenCount("\n");
for (int i = 0; i < lEndTokenCount; i++)
{
lSubString = lString.GetToken(i, "\n");
KString lNodeString;
lChildName = lSubString.GetToken(0, "\"");
lParentName = lSubString.GetToken(2, "\"");
if(lParentName == "RootNode")
{
lChildNode = KFbxNode::Create(lScene,lChildName.Buffer());
lChildAttribute = KFbxNull::Create(mManager,"");
lChildNode->SetNodeAttribute(lChildAttribute);
lRootNode->AddChild(lChildNode);
}
else
{
lChildNode = KFbxNode::Create(lScene,lChildName.Buffer());
lChildAttribute = KFbxNull::Create(lScene,"");
lChildNode->SetNodeAttribute(lChildAttribute);
lParentNode = lRootNode->FindChild(lParentName.Buffer());
lParentNode->AddChild(lChildNode);
}
}
free(lBuffer);
}
lResult = true;
}
return lResult;
}