Selaa lähdekoodia

Updated to be in sync with assimp header files

Vincent Fazio 7 vuotta sitten
vanhempi
commit
0adc032f69
1 muutettua tiedostoa jossa 196 lisäystä ja 50 poistoa
  1. 196 50
      port/PyAssimp/pyassimp/structs.py

+ 196 - 50
port/PyAssimp/pyassimp/structs.py

@@ -5,7 +5,7 @@ from ctypes import POINTER, c_void_p, c_int, c_uint, c_char, c_float, Structure,
 
 class Vector2D(Structure):
     """
-    See 'aiVector2D.h' for details.
+    See 'vector2.h' for details.
     """ 
 
 
@@ -15,7 +15,7 @@ class Vector2D(Structure):
 
 class Matrix3x3(Structure):
     """
-    See 'aiMatrix3x3.h' for details.
+    See 'matrix3x3.h' for details.
     """ 
 
 
@@ -27,7 +27,7 @@ class Matrix3x3(Structure):
 
 class Texel(Structure):
     """
-    See 'aiTexture.h' for details.
+    See 'texture.h' for details.
     """ 
 
     _fields_ = [
@@ -36,7 +36,7 @@ class Texel(Structure):
 
 class Color4D(Structure):
     """
-    See 'aiColor4D.h' for details.
+    See 'color4.h' for details.
     """ 
 
 
@@ -47,7 +47,7 @@ class Color4D(Structure):
 
 class Plane(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'types.h' for details.
     """ 
 
     _fields_ = [
@@ -57,7 +57,7 @@ class Plane(Structure):
 
 class Color3D(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'types.h' for details.
     """ 
 
     _fields_ = [
@@ -67,7 +67,7 @@ class Color3D(Structure):
 
 class String(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'types.h' for details.
     """ 
 
     MAXLEN = 1024
@@ -84,7 +84,7 @@ class String(Structure):
 
 class MaterialPropertyString(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'MaterialSystem.cpp' for details.
     
     The size of length is truncated to 4 bytes on 64-bit platforms when used as a
     material property (see MaterialSystem.cpp aiMaterial::AddProperty() for details).
@@ -104,7 +104,7 @@ class MaterialPropertyString(Structure):
 
 class MemoryInfo(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'types.h' for details.
     """ 
 
     _fields_ = [
@@ -135,7 +135,7 @@ class MemoryInfo(Structure):
 
 class Quaternion(Structure):
     """
-    See 'aiQuaternion.h' for details.
+    See 'quaternion.h' for details.
     """ 
 
 
@@ -146,7 +146,7 @@ class Quaternion(Structure):
 
 class Face(Structure):
     """
-    See 'aiMesh.h' for details.
+    See 'mesh.h' for details.
     """ 
 
     _fields_ = [
@@ -161,7 +161,7 @@ class Face(Structure):
 
 class VertexWeight(Structure):
     """
-    See 'aiMesh.h' for details.
+    See 'mesh.h' for details.
     """ 
 
     _fields_ = [
@@ -175,7 +175,7 @@ class VertexWeight(Structure):
 
 class Matrix4x4(Structure):
     """
-    See 'aiMatrix4x4.h' for details.
+    See 'matrix4x4.h' for details.
     """ 
 
 
@@ -188,7 +188,7 @@ class Matrix4x4(Structure):
 
 class Vector3D(Structure):
     """
-    See 'aiVector3D.h' for details.
+    See 'vector3.h' for details.
     """ 
 
 
@@ -198,7 +198,7 @@ class Vector3D(Structure):
 
 class MeshKey(Structure):
     """
-    See 'aiAnim.h' for details.
+    See 'anim.h' for details.
     """ 
 
     _fields_ = [
@@ -251,7 +251,7 @@ class Metadata(Structure):
 
 class Node(Structure):
     """
-    See 'aiScene.h' for details.
+    See 'scene.h' for details.
     """ 
 
 
@@ -296,7 +296,7 @@ Node._fields_ = [
 
 class Light(Structure):
     """
-    See 'aiLight.h' for details.
+    See 'light.h' for details.
     """ 
 
 
@@ -322,6 +322,13 @@ class Light(Structure):
             #  may be normalized, but it needn't.
             ("mDirection", Vector3D),
             
+            # Up direction of the light source in space. Relative to the
+            #  transformation of the node corresponding to the light.
+            #
+            # The direction is undefined for point lights. The vector
+            #  may be normalized, but it needn't.
+            ("mUp", Vector3D),
+
             # Constant light attenuation factor.
             #  The intensity of the light source at a given distance 'd' from
             #  the light's position is
@@ -393,11 +400,14 @@ class Light(Structure):
             #  interpolation between the inner and the outer cone of the
             #  spot light.
             ("mAngleOuterCone", c_float),
+
+            # Size of area light source.
+            ("mSize", Vector2D),
         ]
 
 class Texture(Structure):
     """
-    See 'aiTexture.h' for details.
+    See 'texture.h' for details.
     """ 
 
 
@@ -414,16 +424,25 @@ class Texture(Structure):
             ("mHeight", c_uint),
             
             # A hint from the loader to make it easier for applications
-            #  to determine the type of embedded compressed textures.
-            # If mHeight != 0 this member is undefined. Otherwise it
-            # is set set to '\\0\\0\\0\\0' if the loader has no additional
+            # to determine the type of embedded textures.
+            # 
+            # If mHeight != 0 this member is show how data is packed. Hint will consist of
+            # two parts: channel order and channel bitness (count of the bits for every
+            # color channel). For simple parsing by the viewer it's better to not omit
+            # absent color channel and just use 0 for bitness. For example:
+            # 1. Image contain RGBA and 8 bit per channel, achFormatHint == "rgba8888";
+            # 2. Image contain ARGB and 8 bit per channel, achFormatHint == "argb8888";
+            # 3. Image contain RGB and 5 bit for R and B channels and 6 bit for G channel,
+            #    achFormatHint == "rgba5650";
+            # 4. One color image with B channel and 1 bit for it, achFormatHint == "rgba0010";
+            # If mHeight == 0 then achFormatHint is set set to '\\0\\0\\0\\0' if the loader has no additional
             # information about the texture file format used OR the
             # file extension of the format without a trailing dot. If there
             # are multiple file extensions for a format, the shortest
             # extension is chosen (JPEG maps to 'jpg', not to 'jpeg').
             # E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'.  All characters are lower-case.
             # The fourth character will always be '\\0'.
-            ("achFormatHint", c_char*4),
+            ("achFormatHint", c_char*9),
             
             # Data of the texture.
             # Points to an array of mWidth
@@ -434,11 +453,15 @@ class Texture(Structure):
             # buffer of size mWidth containing the compressed texture
             # data. Good luck, have fun!
             ("pcData", POINTER(Texel)),
+
+            # Texture original filename
+            # Used to get the texture reference
+            ("mFilename", String),
         ]
 
 class Ray(Structure):
     """
-    See 'aiTypes.h' for details.
+    See 'types.h' for details.
     """ 
 
     _fields_ = [
@@ -448,7 +471,7 @@ class Ray(Structure):
 
 class UVTransform(Structure):
     """
-    See 'aiMaterial.h' for details.
+    See 'material.h' for details.
     """ 
 
     _fields_ = [
@@ -469,7 +492,7 @@ class UVTransform(Structure):
 
 class MaterialProperty(Structure):
     """
-    See 'aiMaterial.h' for details.
+    See 'material.h' for details.
     """ 
 
     _fields_ = [
@@ -505,7 +528,7 @@ class MaterialProperty(Structure):
 
 class Material(Structure):
     """
-    See 'aiMaterial.h' for details.
+    See 'material.h' for details.
     """ 
 
     _fields_ = [
@@ -521,7 +544,7 @@ class Material(Structure):
 
 class Bone(Structure):
     """
-    See 'aiMesh.h' for details.
+    See 'mesh.h' for details.
     """ 
 
     _fields_ = [
@@ -540,20 +563,66 @@ class Bone(Structure):
             ("mOffsetMatrix", Matrix4x4),
         ]
 
-class Mesh(Structure):
+
+class AnimMesh(Structure):
     """
-    See 'aiMesh.h' for details.
+    See 'mesh.h' for details.
     """ 
 
-    AI_MAX_FACE_INDICES = 0x7fff
-    AI_MAX_BONE_WEIGHTS = 0x7fffffff
-    AI_MAX_VERTICES = 0x7fffffff
-    AI_MAX_FACES = 0x7fffffff
-    AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
-    AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
+    AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
+    AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
 
     _fields_ = [
-            # Bitwise combination of the members of the
+            # Replacement for aiMesh::mVertices. If this array is non-NULL,
+            # it *must* contain mNumVertices entries. The corresponding
+            # array in the host mesh must be non-NULL as well - animation
+            # meshes may neither add or nor remove vertex components (if
+            # a replacement array is NULL and the corresponding source
+            # array is not, the source data is taken instead)
+            ("mVertices", POINTER(Vector3D)),
+
+            # Replacement for aiMesh::mNormals.
+            ("mNormals", POINTER(Vector3D)),
+
+            # Replacement for aiMesh::mTangents.
+            ("mTangents", POINTER(Vector3D)),
+
+            # Replacement for aiMesh::mBitangents.
+            ("mBitangents", POINTER(Vector3D)),
+
+            # Replacement for aiMesh::mColors
+            ("mColors", POINTER(Color4D) * AI_MAX_NUMBER_OF_COLOR_SETS),
+
+            # Replacement for aiMesh::mTextureCoords
+            ("mTextureCoords", POINTER(Vector3D) * AI_MAX_NUMBER_OF_TEXTURECOORDS),
+
+            # The number of vertices in the aiAnimMesh, and thus the length of all
+            # the member arrays.
+            #
+            # This has always the same value as the mNumVertices property in the
+            # corresponding aiMesh. It is duplicated here merely to make the length
+            # of the member arrays accessible even if the aiMesh is not known, e.g.
+            # from language bindings.
+            ("mNumVertices", c_uint),
+
+            # Weight of the AnimMesh.
+            ("mWeight", c_float),
+        ]
+
+
+class Mesh(Structure):
+    """
+    See 'mesh.h' for details.
+    """ 
+
+    AI_MAX_FACE_INDICES = 0x7fff
+    AI_MAX_BONE_WEIGHTS = 0x7fffffff
+    AI_MAX_VERTICES = 0x7fffffff
+    AI_MAX_FACES = 0x7fffffff
+    AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
+    AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
+
+    _fields_ = [ # Bitwise combination of the members of the
             #aiPrimitiveType enum.
             # This specifies which types of primitives are present in the mesh.
             # The "SortByPrimitiveType"-Step can be used to make sure the
@@ -676,17 +745,23 @@ class Mesh(Structure):
             #   - Vertex animations refer to meshes by their names.
             ("mName", String),
             
-            # NOT CURRENTLY IN USE. The number of attachment meshes
+            # The number of attachment meshes. Note! Currently only works with Collada loader.
             ("mNumAnimMeshes", c_uint),
             
-            # NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.
-            #  Attachment meshes carry replacement data for some of the
-            #  mesh'es vertex components (usually positions, normals).
+            # Attachment meshes for this mesh, for vertex-based animation.
+            # Attachment meshes carry replacement data for some of the
+            # mesh'es vertex components (usually positions, normals).
+            # Note! Currently only works with Collada loader.
+            ("mAnimMesh", POINTER(POINTER(AnimMesh))),
+
+            # Method of morphing when animeshes are specified.
+            ("mMethod", c_uint),
+
         ]
 
 class Camera(Structure):
     """
-    See 'aiCamera.h' for details.
+    See 'camera.h' for details.
     """ 
 
 
@@ -746,7 +821,7 @@ class Camera(Structure):
 
 class VectorKey(Structure):
     """
-    See 'aiAnim.h' for details.
+    See 'anim.h' for details.
     """ 
 
     _fields_ = [
@@ -759,7 +834,7 @@ class VectorKey(Structure):
 
 class QuatKey(Structure):
     """
-    See 'aiAnim.h' for details.
+    See 'anim.h' for details.
     """ 
 
     _fields_ = [
@@ -770,9 +845,27 @@ class QuatKey(Structure):
             ("mValue", Quaternion),
         ]
 
+class MeshMorphKey(Structure):
+    """
+    See 'anim.h' for details.
+    """ 
+
+    _fields_ = [
+            # The time of this key
+            ("mTime", c_double),
+
+            # The values and weights at the time of this key
+            ("mValues", POINTER(c_uint)),
+            ("mWeights", POINTER(c_double)),
+
+            # The number of values and weights
+            ("mNumValuesAndWeights", c_uint),
+
+        ]
+
 class NodeAnim(Structure):
     """
-    See 'aiAnim.h' for details.
+    See 'anim.h' for details.
     """ 
 
     _fields_ = [
@@ -821,9 +914,48 @@ class NodeAnim(Structure):
             ("mPostState", c_uint),
         ]
 
+class MeshAnim(Structure):
+    """
+    See 'anim.h' for details.
+    """ 
+
+    _fields_ = [
+            # Name of the mesh to be animated. An empty string is not allowed,
+            #  animated meshes need to be named (not necessarily uniquely,
+            #  the name can basically serve as wild-card to select a group
+            #  of meshes with similar animation setup)
+            ("mName", String),
+
+            # Size of the #mKeys array. Must be 1, at least.
+            ("mNumKeys", c_uint),
+
+            # Key frames of the animation. May not be NULL.
+            ("mKeys", POINTER(MeshKey)),
+        ]
+
+class MeshMorphAnim(Structure):
+    """
+    See 'anim.h' for details.
+    """     
+
+    _fields_ = [
+            # Name of the mesh to be animated. An empty string is not allowed,
+            # animated meshes need to be named (not necessarily uniquely,
+            # the name can basically serve as wildcard to select a group
+            # of meshes with similar animation setup)
+            ("mName", String),
+
+            # Size of the #mKeys array. Must be 1, at least.
+            ("mNumKeys", c_uint),
+
+            # Key frames of the animation. May not be NULL.
+            ("mKeys", POINTER(MeshMorphKey)),
+        ]
+
+
 class Animation(Structure):
     """
-    See 'aiAnim.h' for details.
+    See 'anim.h' for details.
     """ 
 
     _fields_ = [
@@ -852,6 +984,16 @@ class Animation(Structure):
             
             # The mesh animation channels. Each channel affects a single mesh.
             #  The array is mNumMeshChannels in size.
+            ("mMeshChannels", POINTER(POINTER(MeshAnim))),
+
+            # The number of mesh animation channels. Each channel affects
+            # a single mesh and defines morphing animation.
+            ("mNumMorphMeshChannels", c_uint),
+
+            # The morph mesh animation channels. Each channel affects a single mesh.
+            # The array is mNumMorphMeshChannels in size. 
+            ("mMorphMeshChannels", POINTER(POINTER(MeshMorphAnim))),
+
         ]
 
 class Scene(Structure):
@@ -859,11 +1001,12 @@ class Scene(Structure):
     See 'aiScene.h' for details.
     """ 
 
-    AI_SCENE_FLAGS_INCOMPLETE = 0x1
-    AI_SCENE_FLAGS_VALIDATED = 0x2
-    AI_SCENE_FLAGS_VALIDATION_WARNING =  	0x4
-    AI_SCENE_FLAGS_NON_VERBOSE_FORMAT =  	0x8
-    AI_SCENE_FLAGS_TERRAIN = 0x10
+    AI_SCENE_FLAGS_INCOMPLETE = 0x1
+    AI_SCENE_FLAGS_VALIDATED = 0x2
+    AI_SCENE_FLAGS_VALIDATION_WARNING =  	0x4
+    AI_SCENE_FLAGS_NON_VERBOSE_FORMAT =  	0x8
+    AI_SCENE_FLAGS_TERRAIN = 0x10
+    AI_SCENE_FLAGS_ALLOW_SHARED = 0x20
 
     _fields_ = [
             # Any combination of the AI_SCENE_FLAGS_XXX flags. By default
@@ -940,6 +1083,9 @@ class Scene(Structure):
             # unit-conversions, versions, vendors or other model-specific data. This
             # can be used to store format-specific metadata as well.
             ("mMetadata", POINTER(Metadata)),
+
+            # Internal data, do not touch
+            ("mPrivate", c_char_p),
         ]
 
 assimp_structs_as_tuple = (Matrix4x4,