- fbx: read first set of header properties (format version, timestamp etc).

pull/14/head
Alexander Gessler 2012-07-06 22:46:19 +02:00
parent e4aee83c5b
commit 1a9790ae9a
2 changed files with 58 additions and 0 deletions

View File

@ -468,6 +468,12 @@ Document::Document(const Parser& parser, const ImportSettings& settings)
: parser(parser)
, settings(settings)
{
// cannot use array default initialization syntax because vc8 fails on it
for (unsigned int i = 0; i < 7; ++i) {
creationTimeStamp[i] = 0;
}
ReadHeader();
ReadPropertyTemplates();
// this order is important, connections need parsed objects to check
@ -487,6 +493,38 @@ Document::~Document()
}
// ------------------------------------------------------------------------------------------------
void Document::ReadHeader()
{
// read ID objects from "Objects" section
const Scope& sc = parser.GetRootScope();
const Element* const ehead = sc["FBXHeaderExtension"];
if(!ehead || !ehead->Compound()) {
DOMError("no FBXHeaderExtension dictionary found");
}
const Scope& shead = *ehead->Compound();
fbxVersion = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(shead,"FBXVersion",ehead),0));
const Element* const ecreator = shead["Creator"];
if(ecreator) {
creator = ParseTokenAsString(GetRequiredToken(*ecreator,0));
}
const Element* const etimestamp = shead["CreationTimeStamp"];
if(etimestamp && etimestamp->Compound()) {
const Scope& stimestamp = *etimestamp->Compound();
creationTimeStamp[0] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Year"),0));
creationTimeStamp[1] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Month"),0));
creationTimeStamp[2] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Day"),0));
creationTimeStamp[3] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Hour"),0));
creationTimeStamp[4] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Minute"),0));
creationTimeStamp[5] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Second"),0));
creationTimeStamp[6] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Millisecond"),0));
}
}
// ------------------------------------------------------------------------------------------------
void Document::ReadObjects()
{

View File

@ -477,6 +477,20 @@ public:
LazyObject* GetObject(uint64_t id) const;
unsigned int FBXVersion() const {
return fbxVersion;
}
const std::string& Creator() const {
return creator;
}
// elements (in this order): Uear, Month, Day, Hour, Second, Millisecond
const unsigned int* CreationTimeStamp() const {
return creationTimeStamp;
}
const PropertyTemplateMap& Templates() const {
return templates;
}
@ -502,6 +516,7 @@ public:
private:
void ReadHeader();
void ReadObjects();
void ReadPropertyTemplates();
void ReadConnections();
@ -516,6 +531,11 @@ private:
PropertyTemplateMap templates;
ConnectionMap src_connections;
ConnectionMap dest_connections;
unsigned int fbxVersion;
std::string creator;
unsigned int creationTimeStamp[7];
};
}