2
0
Эх сурвалжийг харах

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

sueastside 16 жил өмнө
parent
commit
b2ffa9dd1b

+ 2 - 2
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);

+ 2 - 2
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);

+ 22 - 2
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
+    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()