فهرست منبع

- fbx: read NodeAttribute and Camera.

Alexander Gessler 13 سال پیش
والد
کامیت
b66dfc85e1
4فایلهای تغییر یافته به همراه169 افزوده شده و 0 حذف شده
  1. 1 0
      code/CMakeLists.txt
  2. 54 0
      code/FBXDocument.h
  3. 110 0
      code/FBXNodeAttribute.cpp
  4. 4 0
      workspaces/vc9/assimp.vcproj

+ 1 - 0
code/CMakeLists.txt

@@ -415,6 +415,7 @@ SET(FBX_SRCS
 	FBXMaterial.cpp
 	FBXModel.cpp
 	FBXAnimation.cpp
+	FBXNodeAttribute.cpp
 )
 SOURCE_GROUP( FBX FILES ${FBX_SRCS})
 

+ 54 - 0
code/FBXDocument.h

@@ -148,6 +148,60 @@ protected:
 };
 
 
+
+/** DOM class for generic FBX NoteAttribute blocks. NoteAttributes just hold a property table,
+ *  actualy members are added by deriving classes. */
+class NodeAttribute : public Object
+{
+public:
+
+	NodeAttribute(uint64_t id, const Element& element, const Document& doc, const std::string& name);
+	~NodeAttribute();
+
+public:
+
+	const PropertyTable& Props() const {
+		ai_assert(props.get());
+		return *props.get();
+	}
+
+private:
+
+	boost::shared_ptr<const PropertyTable> props;
+};
+
+
+/** DOM base class for FBX camera settings attached to a node */
+class Camera : public NodeAttribute
+{
+public:
+
+	Camera(uint64_t id, const Element& element, const Document& doc, const std::string& name);
+	~Camera();
+
+public:
+
+	int CameraID() const {
+		return cameraId;
+	}
+
+	const std::string& CameraName() const {
+		return cameraName;
+	}
+
+
+	const std::string& CameraIndexName() const {
+		return cameraIndexName;
+	}
+
+private:
+
+	int cameraId;
+	std::string cameraName;
+	std::string cameraIndexName;
+};
+
+
 /** DOM base class for FBX models (even though its semantics are more "node" than "model" */
 class Model : public Object
 {

+ 110 - 0
code/FBXNodeAttribute.cpp

@@ -0,0 +1,110 @@
+/*
+Open Asset Import Library (assimp)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2012, assimp team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, 
+with or without modification, are permitted provided that the 
+following conditions are met:
+
+* Redistributions of source code must retain the above
+  copyright notice, this list of conditions and the
+  following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the
+  following disclaimer in the documentation and/or other
+  materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+  contributors may be used to endorse or promote products
+  derived from this software without specific prior
+  written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  FBXNoteAttribute.cpp
+ *  @brief Assimp::FBX::NodeAttribute (and subclasses) implementation
+ */
+#include "AssimpPCH.h"
+
+#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
+
+#include "FBXParser.h"
+#include "FBXDocument.h"
+#include "FBXImporter.h"
+#include "FBXImportSettings.h"
+#include "FBXDocumentUtil.h"
+#include "FBXProperties.h"
+
+namespace Assimp {
+namespace FBX {
+
+	using namespace Util;
+
+// ------------------------------------------------------------------------------------------------
+NodeAttribute::NodeAttribute(uint64_t id, const Element& element, const Document& doc, const std::string& name)
+	: Object(id,element,name)
+{
+	const Scope& sc = GetRequiredScope(element);
+
+	const std::string& classname = ParseTokenAsString(GetRequiredToken(element,2));
+	props = GetPropertyTable(doc,"NodeAttribute.Fbx" + classname,element,sc);
+}
+
+
+// ------------------------------------------------------------------------------------------------
+NodeAttribute::~NodeAttribute()
+{
+
+}
+
+
+// ------------------------------------------------------------------------------------------------
+Camera::Camera(uint64_t id, const Element& element, const Document& doc, const std::string& name)
+	: NodeAttribute(id,element,doc,name)
+{
+	const Scope& sc = GetRequiredScope(element);
+	const Element* const CameraId = sc["CameraId"];
+	const Element* const CameraName = sc["CameraName"];
+	const Element* const CameraIndexName = sc["CameraIndexName"];
+
+	if(CameraId) {
+		cameraId = ParseTokenAsInt(GetRequiredToken(*CameraId,0));
+	}
+
+	if(CameraName) {
+		cameraName = GetRequiredToken(*CameraName,0).StringContents();
+	}
+
+	if(CameraIndexName) {
+		cameraIndexName = GetRequiredToken(*CameraIndexName,0).StringContents();
+	}
+}
+
+
+// ------------------------------------------------------------------------------------------------
+Camera::~Camera()
+{
+
+}
+
+}
+}
+
+#endif

+ 4 - 0
workspaces/vc9/assimp.vcproj

@@ -2107,6 +2107,10 @@
 						RelativePath="..\..\code\FBXModel.cpp"
 						>
 					</File>
+					<File
+						RelativePath="..\..\code\FBXNodeAttribute.cpp"
+						>
+					</File>
 					<File
 						RelativePath="..\..\code\FBXParser.cpp"
 						>