浏览代码

- fbx: refactor code for fetching property templates.

Alexander Gessler 13 年之前
父节点
当前提交
97b69364ad
共有 3 个文件被更改,包括 38 次插入21 次删除
  1. 29 0
      code/FBXDocument.cpp
  2. 8 0
      code/FBXDocumentUtil.h
  3. 1 21
      code/FBXMaterial.cpp

+ 29 - 0
code/FBXDocument.cpp

@@ -327,6 +327,35 @@ void ReadVectorDataArray(std::vector<unsigned int>& out, const Element& el)
 		out.push_back(static_cast<unsigned int>(ival));
 	}
 }
+
+
+// ------------------------------------------------------------------------------------------------
+// fetch a property table and the corresponding property template 
+boost::shared_ptr<const PropertyTable> GetPropertyTable(const Document& doc, 
+	const std::string& templateName, 
+	const Element &element, 
+	const Scope& sc)
+{
+	const Element* const Properties70 = sc["Properties70"];
+	boost::shared_ptr<const PropertyTable> templateProps = boost::shared_ptr<const PropertyTable>(NULL);
+	if(templateName.length()) {
+		PropertyTemplateMap::const_iterator it = doc.Templates().find(templateName); 
+		if(it != doc.Templates().end()) {
+			templateProps = (*it).second;
+		}
+	}
+
+	if(!Properties70) {
+		DOMWarning("material property table (Properties70) not found",&element);
+		if(templateProps) {
+			return templateProps;
+		}
+		else {
+			return boost::make_shared<const PropertyTable>();
+		}
+	}
+	return boost::make_shared<const PropertyTable>(*Properties70,templateProps);
+}
 } // !Util
 
 using namespace Util;

+ 8 - 0
code/FBXDocumentUtil.h

@@ -91,6 +91,14 @@ void ReadVectorDataArray(std::vector<int>& out, const Element& el);
 // read an array of uints
 void ReadVectorDataArray(std::vector<unsigned int>& out, const Element& el);
 
+
+
+// fetch a property table and the corresponding property template 
+boost::shared_ptr<const PropertyTable> GetPropertyTable(const Document& doc, 
+	const std::string& templateName, 
+	const Element &element, 
+	const Scope& sc);
+
 } //!Util
 } //!FBX
 } //!Assimp

+ 1 - 21
code/FBXMaterial.cpp

@@ -65,7 +65,6 @@ Material::Material(const Element& element, const Document& doc, const std::strin
 	
 	const Element* const ShadingModel = sc["ShadingModel"];
 	const Element* const MultiLayer = sc["MultiLayer"];
-	const Element* const Properties70 = sc["Properties70"];
 
 	if(MultiLayer) {
 		multilayer = !!ParseTokenAsInt(GetRequiredToken(*MultiLayer,0));
@@ -92,26 +91,7 @@ Material::Material(const Element& element, const Document& doc, const std::strin
 		DOMWarning("shading mode not recognized: " + shading,&element);
 	}
 
-	boost::shared_ptr<const PropertyTable> templateProps = boost::shared_ptr<const PropertyTable>(NULL);
-	if(templateName.length()) {
-		PropertyTemplateMap::const_iterator it = doc.Templates().find(templateName); 
-		if(it != doc.Templates().end()) {
-			templateProps = (*it).second;
-		}
-	}
-
-	if(!Properties70) {
-		DOMWarning("material property table (Properties70) not found",&element);
-		if(templateProps) {
-			props = templateProps;
-		}
-		else {
-			props = boost::make_shared<const PropertyTable>();
-		}
-	}
-	else {
-		props = boost::make_shared<const PropertyTable>(*Properties70,templateProps);
-	}
+	props = GetPropertyTable(doc,templateName,element,sc);
 }