From b2ffa9dd1b887f6efbfab568fed2f0b96cff13aa Mon Sep 17 00:00:00 2001 From: sueastside Date: Mon, 27 Apr 2009 15:43:01 +0000 Subject: [PATCH] Added ASSIMP_API to aiCreateQuaternionFromMatrix and aiDecomposeMatrix. Added aiDecomposeMatrix to PyAssimp. git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@410 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- code/Assimp.cpp | 4 ++-- include/assimp.h | 4 ++-- port/PyAssimp/pyassimp/pyassimp.py | 24 ++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/code/Assimp.cpp b/code/Assimp.cpp index 8a61a903e..676903d10 100644 --- a/code/Assimp.cpp +++ b/code/Assimp.cpp @@ -368,13 +368,13 @@ ASSIMP_API void aiSetImportPropertyString(const char* szName, } // ------------------------------------------------------------------------------------------------ -void aiCreateQuaternionFromMatrix(aiQuaternion* quat,const aiMatrix3x3* mat) +ASSIMP_API void aiCreateQuaternionFromMatrix(aiQuaternion* quat,const aiMatrix3x3* mat) { *quat = aiQuaternion(*mat); } // ------------------------------------------------------------------------------------------------ -void aiDecomposeMatrix(const aiMatrix4x4* mat, aiVector3D* scaling, +ASSIMP_API void aiDecomposeMatrix(const aiMatrix4x4* mat, aiVector3D* scaling, aiQuaternion* rotation,aiVector3D* position) { mat->Decompose(*scaling,*rotation,*position); diff --git a/include/assimp.h b/include/assimp.h index faf76ccfe..49d8315e1 100644 --- a/include/assimp.h +++ b/include/assimp.h @@ -181,12 +181,12 @@ ASSIMP_API void aiSetImportPropertyString(const char* szName, // --------------------------------------------------------------------------- /** @see aiQuaternion(const aiMatrix3x3& pRotMatrix) */ -void aiCreateQuaternionFromMatrix(C_STRUCT aiQuaternion* quat,const C_STRUCT aiMatrix3x3* mat); +ASSIMP_API void aiCreateQuaternionFromMatrix(C_STRUCT aiQuaternion* quat,const C_STRUCT aiMatrix3x3* mat); // --------------------------------------------------------------------------- /** @see aiMatrix4x4::Decompose (aiVector3D&, aiQuaternion&, aiVector3D&) const; */ -void aiDecomposeMatrix(const C_STRUCT aiMatrix4x4* mat, +ASSIMP_API void aiDecomposeMatrix(const C_STRUCT aiMatrix4x4* mat, C_STRUCT aiVector3D* scaling, C_STRUCT aiQuaternion* rotation, C_STRUCT aiVector3D* position); diff --git a/port/PyAssimp/pyassimp/pyassimp.py b/port/PyAssimp/pyassimp/pyassimp.py index b7033b69b..d950a531e 100644 --- a/port/PyAssimp/pyassimp/pyassimp.py +++ b/port/PyAssimp/pyassimp/pyassimp.py @@ -96,6 +96,10 @@ class aiTuple: return self._GetData(c) def __getitem__(self, index): + if isinstance(index, slice): + indices = index.indices(len(self)) + return [self.__getitem__(i) for i in range(*indices)] + if index < 0 or index >= self._GetSize(): raise IndexError("aiTuple index out of range") return self._GetData(index) @@ -103,6 +107,9 @@ class aiTuple: def __iter__(self): return self + def __len__(self): + return int(self._GetSize()) + def __str__(self): return str([x for x in self]) @@ -218,7 +225,7 @@ def aiGetMaterialString(material, key): byref(out)) if (r != AI_SUCCESS): - raise AssimpError("aiGetMaterialFloatArray failed!") + raise AssimpError("aiGetMaterialString failed!") return str(out.data) @@ -248,4 +255,17 @@ def GetMaterialProperties(material): result[key] = value - return result \ No newline at end of file + return result + + +def aiDecomposeMatrix(matrix): + if not isinstance(matrix, structs.Matrix4x4): + raise AssimpError("aiDecomposeMatrix failed: Not a aiMatrix4x4!") + + scaling = structs.Vector3D() + rotation = structs.Quaternion() + position = structs.Vector3D() + + from ctypes import byref, pointer + _assimp_lib.dll.aiDecomposeMatrix(pointer(matrix), byref(scaling), byref(rotation), byref(position)) + return scaling._init(), rotation._init(), position._init() \ No newline at end of file