Merge pull request #2813 from umlaeute/python-fixes

Python fixes: ctypes declarations and cosmetics
pull/2839/head^2
Kim Kulling 2019-12-19 14:25:51 +01:00 committed by GitHub
commit 9f196f7d02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 138 additions and 135 deletions

View File

@ -1,4 +1,4 @@
#-*- coding: UTF-8 -*- #-*- coding: utf-8 -*-
from ctypes import POINTER, c_void_p, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte, c_size_t, c_uint32 from ctypes import POINTER, c_void_p, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte, c_size_t, c_uint32
@ -6,7 +6,7 @@ from ctypes import POINTER, c_void_p, c_uint, c_char, c_float, Structure, c_char
class Vector2D(Structure): class Vector2D(Structure):
""" """
See 'vector2.h' for details. See 'vector2.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -16,7 +16,7 @@ class Vector2D(Structure):
class Matrix3x3(Structure): class Matrix3x3(Structure):
""" """
See 'matrix3x3.h' for details. See 'matrix3x3.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -28,7 +28,7 @@ class Matrix3x3(Structure):
class Texel(Structure): class Texel(Structure):
""" """
See 'texture.h' for details. See 'texture.h' for details.
""" """
_fields_ = [ _fields_ = [
("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte), ("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte),
@ -37,7 +37,7 @@ class Texel(Structure):
class Color4D(Structure): class Color4D(Structure):
""" """
See 'color4.h' for details. See 'color4.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -48,7 +48,7 @@ class Color4D(Structure):
class Plane(Structure): class Plane(Structure):
""" """
See 'types.h' for details. See 'types.h' for details.
""" """
_fields_ = [ _fields_ = [
# Plane equation # Plane equation
@ -58,7 +58,7 @@ class Plane(Structure):
class Color3D(Structure): class Color3D(Structure):
""" """
See 'types.h' for details. See 'types.h' for details.
""" """
_fields_ = [ _fields_ = [
# Red, green and blue color values # Red, green and blue color values
@ -68,7 +68,7 @@ class Color3D(Structure):
class String(Structure): class String(Structure):
""" """
See 'types.h' for details. See 'types.h' for details.
""" """
MAXLEN = 1024 MAXLEN = 1024
@ -76,8 +76,8 @@ class String(Structure):
# Binary length of the string excluding the terminal 0. This is NOT the # Binary length of the string excluding the terminal 0. This is NOT the
# logical length of strings containing UTF-8 multibyte sequences! It's # logical length of strings containing UTF-8 multibyte sequences! It's
# the number of bytes from the beginning of the string to its end. # the number of bytes from the beginning of the string to its end.
("length", c_size_t), ("length", c_uint32),
# String buffer. Size limit is MAXLEN # String buffer. Size limit is MAXLEN
("data", c_char*MAXLEN), ("data", c_char*MAXLEN),
] ]
@ -85,7 +85,7 @@ class String(Structure):
class MaterialPropertyString(Structure): class MaterialPropertyString(Structure):
""" """
See 'MaterialSystem.cpp' for details. See 'MaterialSystem.cpp' for details.
The size of length is truncated to 4 bytes on 64-bit platforms when used as a 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). material property (see MaterialSystem.cpp aiMaterial::AddProperty() for details).
""" """
@ -97,7 +97,7 @@ class MaterialPropertyString(Structure):
# logical length of strings containing UTF-8 multibyte sequences! It's # logical length of strings containing UTF-8 multibyte sequences! It's
# the number of bytes from the beginning of the string to its end. # the number of bytes from the beginning of the string to its end.
("length", c_uint32), ("length", c_uint32),
# String buffer. Size limit is MAXLEN # String buffer. Size limit is MAXLEN
("data", c_char*MAXLEN), ("data", c_char*MAXLEN),
] ]
@ -105,30 +105,30 @@ class MaterialPropertyString(Structure):
class MemoryInfo(Structure): class MemoryInfo(Structure):
""" """
See 'types.h' for details. See 'types.h' for details.
""" """
_fields_ = [ _fields_ = [
# Storage allocated for texture data # Storage allocated for texture data
("textures", c_uint), ("textures", c_uint),
# Storage allocated for material data # Storage allocated for material data
("materials", c_uint), ("materials", c_uint),
# Storage allocated for mesh data # Storage allocated for mesh data
("meshes", c_uint), ("meshes", c_uint),
# Storage allocated for node data # Storage allocated for node data
("nodes", c_uint), ("nodes", c_uint),
# Storage allocated for animation data # Storage allocated for animation data
("animations", c_uint), ("animations", c_uint),
# Storage allocated for camera data # Storage allocated for camera data
("cameras", c_uint), ("cameras", c_uint),
# Storage allocated for light data # Storage allocated for light data
("lights", c_uint), ("lights", c_uint),
# Total storage allocated for the full import. # Total storage allocated for the full import.
("total", c_uint), ("total", c_uint),
] ]
@ -136,7 +136,7 @@ class MemoryInfo(Structure):
class Quaternion(Structure): class Quaternion(Structure):
""" """
See 'quaternion.h' for details. See 'quaternion.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -147,14 +147,14 @@ class Quaternion(Structure):
class Face(Structure): class Face(Structure):
""" """
See 'mesh.h' for details. See 'mesh.h' for details.
""" """
_fields_ = [ _fields_ = [
# Number of indices defining this face. # Number of indices defining this face.
# The maximum value for this member is # The maximum value for this member is
#AI_MAX_FACE_INDICES. #AI_MAX_FACE_INDICES.
("mNumIndices", c_uint), ("mNumIndices", c_uint),
# Pointer to the indices array. Size of the array is given in numIndices. # Pointer to the indices array. Size of the array is given in numIndices.
("mIndices", POINTER(c_uint)), ("mIndices", POINTER(c_uint)),
] ]
@ -162,12 +162,12 @@ class Face(Structure):
class VertexWeight(Structure): class VertexWeight(Structure):
""" """
See 'mesh.h' for details. See 'mesh.h' for details.
""" """
_fields_ = [ _fields_ = [
# Index of the vertex which is influenced by the bone. # Index of the vertex which is influenced by the bone.
("mVertexId", c_uint), ("mVertexId", c_uint),
# The strength of the influence in the range (0...1). # The strength of the influence in the range (0...1).
# The influence from all bones at one vertex amounts to 1. # The influence from all bones at one vertex amounts to 1.
("mWeight", c_float), ("mWeight", c_float),
@ -176,7 +176,7 @@ class VertexWeight(Structure):
class Matrix4x4(Structure): class Matrix4x4(Structure):
""" """
See 'matrix4x4.h' for details. See 'matrix4x4.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -189,7 +189,7 @@ class Matrix4x4(Structure):
class Vector3D(Structure): class Vector3D(Structure):
""" """
See 'vector3.h' for details. See 'vector3.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -199,12 +199,12 @@ class Vector3D(Structure):
class MeshKey(Structure): class MeshKey(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The time of this key # The time of this key
("mTime", c_double), ("mTime", c_double),
# Index into the aiMesh::mAnimMeshes array of the # Index into the aiMesh::mAnimMeshes array of the
# mesh corresponding to the # mesh corresponding to the
#aiMeshAnim hosting this #aiMeshAnim hosting this
@ -252,7 +252,7 @@ class Metadata(Structure):
class Node(Structure): class Node(Structure):
""" """
See 'scene.h' for details. See 'scene.h' for details.
""" """
Node._fields_ = [ Node._fields_ = [
@ -270,22 +270,22 @@ Node._fields_ = [
# this text. You should be able to handle stuff like whitespace, tabs, # this text. You should be able to handle stuff like whitespace, tabs,
# linefeeds, quotation marks, ampersands, ... . # linefeeds, quotation marks, ampersands, ... .
("mName", String), ("mName", String),
# The transformation relative to the node's parent. # The transformation relative to the node's parent.
("mTransformation", Matrix4x4), ("mTransformation", Matrix4x4),
# Parent node. NULL if this node is the root node. # Parent node. NULL if this node is the root node.
("mParent", POINTER(Node)), ("mParent", POINTER(Node)),
# The number of child nodes of this node. # The number of child nodes of this node.
("mNumChildren", c_uint), ("mNumChildren", c_uint),
# The child nodes of this node. NULL if mNumChildren is 0. # The child nodes of this node. NULL if mNumChildren is 0.
("mChildren", POINTER(POINTER(Node))), ("mChildren", POINTER(POINTER(Node))),
# The number of meshes of this node. # The number of meshes of this node.
("mNumMeshes", c_uint), ("mNumMeshes", c_uint),
# The meshes of this node. Each entry is an index into the mesh # The meshes of this node. Each entry is an index into the mesh
("mMeshes", POINTER(c_uint)), ("mMeshes", POINTER(c_uint)),
@ -297,7 +297,7 @@ Node._fields_ = [
class Light(Structure): class Light(Structure):
""" """
See 'light.h' for details. See 'light.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -306,22 +306,22 @@ class Light(Structure):
# This node specifies the position of the light in the scene # This node specifies the position of the light in the scene
# hierarchy and can be animated. # hierarchy and can be animated.
("mName", String), ("mName", String),
# The type of the light source. # The type of the light source.
# aiLightSource_UNDEFINED is not a valid value for this member. # aiLightSource_UNDEFINED is not a valid value for this member.
("mType", c_uint), ("mType", c_uint),
# Position of the light source in space. Relative to the # Position of the light source in space. Relative to the
# transformation of the node corresponding to the light. # transformation of the node corresponding to the light.
# The position is undefined for directional lights. # The position is undefined for directional lights.
("mPosition", Vector3D), ("mPosition", Vector3D),
# Direction of the light source in space. Relative to the # Direction of the light source in space. Relative to the
# transformation of the node corresponding to the light. # transformation of the node corresponding to the light.
# The direction is undefined for point lights. The vector # The direction is undefined for point lights. The vector
# may be normalized, but it needn't. # may be normalized, but it needn't.
("mDirection", Vector3D), ("mDirection", Vector3D),
# Up direction of the light source in space. Relative to the # Up direction of the light source in space. Relative to the
# transformation of the node corresponding to the light. # transformation of the node corresponding to the light.
# #
@ -340,7 +340,7 @@ class Light(Structure):
# This member corresponds to the att0 variable in the equation. # This member corresponds to the att0 variable in the equation.
# Naturally undefined for directional lights. # Naturally undefined for directional lights.
("mAttenuationConstant", c_float), ("mAttenuationConstant", c_float),
# Linear light attenuation factor. # Linear light attenuation factor.
# The intensity of the light source at a given distance 'd' from # The intensity of the light source at a given distance 'd' from
# the light's position is # the light's position is
@ -352,7 +352,7 @@ class Light(Structure):
# This member corresponds to the att1 variable in the equation. # This member corresponds to the att1 variable in the equation.
# Naturally undefined for directional lights. # Naturally undefined for directional lights.
("mAttenuationLinear", c_float), ("mAttenuationLinear", c_float),
# Quadratic light attenuation factor. # Quadratic light attenuation factor.
# The intensity of the light source at a given distance 'd' from # The intensity of the light source at a given distance 'd' from
# the light's position is # the light's position is
@ -364,19 +364,19 @@ class Light(Structure):
# This member corresponds to the att2 variable in the equation. # This member corresponds to the att2 variable in the equation.
# Naturally undefined for directional lights. # Naturally undefined for directional lights.
("mAttenuationQuadratic", c_float), ("mAttenuationQuadratic", c_float),
# Diffuse color of the light source # Diffuse color of the light source
# The diffuse light color is multiplied with the diffuse # The diffuse light color is multiplied with the diffuse
# material color to obtain the final color that contributes # material color to obtain the final color that contributes
# to the diffuse shading term. # to the diffuse shading term.
("mColorDiffuse", Color3D), ("mColorDiffuse", Color3D),
# Specular color of the light source # Specular color of the light source
# The specular light color is multiplied with the specular # The specular light color is multiplied with the specular
# material color to obtain the final color that contributes # material color to obtain the final color that contributes
# to the specular shading term. # to the specular shading term.
("mColorSpecular", Color3D), ("mColorSpecular", Color3D),
# Ambient color of the light source # Ambient color of the light source
# The ambient light color is multiplied with the ambient # The ambient light color is multiplied with the ambient
# material color to obtain the final color that contributes # material color to obtain the final color that contributes
@ -384,13 +384,13 @@ class Light(Structure):
# this value it, is just a remaining of the fixed-function pipeline # this value it, is just a remaining of the fixed-function pipeline
# that is still supported by quite many file formats. # that is still supported by quite many file formats.
("mColorAmbient", Color3D), ("mColorAmbient", Color3D),
# Inner angle of a spot light's light cone. # Inner angle of a spot light's light cone.
# The spot light has maximum influence on objects inside this # The spot light has maximum influence on objects inside this
# angle. The angle is given in radians. It is 2PI for point # angle. The angle is given in radians. It is 2PI for point
# lights and undefined for directional lights. # lights and undefined for directional lights.
("mAngleInnerCone", c_float), ("mAngleInnerCone", c_float),
# Outer angle of a spot light's light cone. # Outer angle of a spot light's light cone.
# The spot light does not affect objects outside this angle. # The spot light does not affect objects outside this angle.
# The angle is given in radians. It is 2PI for point lights and # The angle is given in radians. It is 2PI for point lights and
@ -408,7 +408,7 @@ class Light(Structure):
class Texture(Structure): class Texture(Structure):
""" """
See 'texture.h' for details. See 'texture.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -417,15 +417,15 @@ class Texture(Structure):
# like JPEG. In this case mWidth specifies the size of the # like JPEG. In this case mWidth specifies the size of the
# memory area pcData is pointing to, in bytes. # memory area pcData is pointing to, in bytes.
("mWidth", c_uint), ("mWidth", c_uint),
# Height of the texture, in pixels # Height of the texture, in pixels
# If this value is zero, pcData points to an compressed texture # If this value is zero, pcData points to an compressed texture
# in any format (e.g. JPEG). # in any format (e.g. JPEG).
("mHeight", c_uint), ("mHeight", c_uint),
# A hint from the loader to make it easier for applications # A hint from the loader to make it easier for applications
# to determine the type of embedded textures. # to determine the type of embedded textures.
# #
# If mHeight != 0 this member is show how data is packed. Hint will consist of # 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 # 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 # color channel). For simple parsing by the viewer it's better to not omit
@ -443,7 +443,7 @@ class Texture(Structure):
# E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case. # E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.
# The fourth character will always be '\\0'. # The fourth character will always be '\\0'.
("achFormatHint", c_char*9), ("achFormatHint", c_char*9),
# Data of the texture. # Data of the texture.
# Points to an array of mWidth # Points to an array of mWidth
# mHeight aiTexel's. # mHeight aiTexel's.
@ -462,7 +462,7 @@ class Texture(Structure):
class Ray(Structure): class Ray(Structure):
""" """
See 'types.h' for details. See 'types.h' for details.
""" """
_fields_ = [ _fields_ = [
# Position and direction of the ray # Position and direction of the ray
@ -472,17 +472,17 @@ class Ray(Structure):
class UVTransform(Structure): class UVTransform(Structure):
""" """
See 'material.h' for details. See 'material.h' for details.
""" """
_fields_ = [ _fields_ = [
# Translation on the u and v axes. # Translation on the u and v axes.
# The default value is (0|0). # The default value is (0|0).
("mTranslation", Vector2D), ("mTranslation", Vector2D),
# Scaling on the u and v axes. # Scaling on the u and v axes.
# The default value is (1|1). # The default value is (1|1).
("mScaling", Vector2D), ("mScaling", Vector2D),
# Rotation - in counter-clockwise direction. # Rotation - in counter-clockwise direction.
# The rotation angle is specified in radians. The # The rotation angle is specified in radians. The
# rotation center is 0.5f|0.5f. The default value # rotation center is 0.5f|0.5f. The default value
@ -493,34 +493,34 @@ class UVTransform(Structure):
class MaterialProperty(Structure): class MaterialProperty(Structure):
""" """
See 'material.h' for details. See 'material.h' for details.
""" """
_fields_ = [ _fields_ = [
# Specifies the name of the property (key) # Specifies the name of the property (key)
# Keys are generally case insensitive. # Keys are generally case insensitive.
("mKey", String), ("mKey", String),
# Textures: Specifies their exact usage semantic. # Textures: Specifies their exact usage semantic.
# For non-texture properties, this member is always 0 # For non-texture properties, this member is always 0
# (or, better-said, # (or, better-said,
#aiTextureType_NONE). #aiTextureType_NONE).
("mSemantic", c_uint), ("mSemantic", c_uint),
# Textures: Specifies the index of the texture. # Textures: Specifies the index of the texture.
# For non-texture properties, this member is always 0. # For non-texture properties, this member is always 0.
("mIndex", c_uint), ("mIndex", c_uint),
# Size of the buffer mData is pointing to, in bytes. # Size of the buffer mData is pointing to, in bytes.
# This value may not be 0. # This value may not be 0.
("mDataLength", c_uint), ("mDataLength", c_uint),
# Type information for the property. # Type information for the property.
# Defines the data layout inside the data buffer. This is used # Defines the data layout inside the data buffer. This is used
# by the library internally to perform debug checks and to # by the library internally to perform debug checks and to
# utilize proper type conversions. # utilize proper type conversions.
# (It's probably a hacky solution, but it works.) # (It's probably a hacky solution, but it works.)
("mType", c_uint), ("mType", c_uint),
# Binary buffer to hold the property's value. # Binary buffer to hold the property's value.
# The size of the buffer is always mDataLength. # The size of the buffer is always mDataLength.
("mData", POINTER(c_char)), ("mData", POINTER(c_char)),
@ -529,15 +529,15 @@ class MaterialProperty(Structure):
class Material(Structure): class Material(Structure):
""" """
See 'material.h' for details. See 'material.h' for details.
""" """
_fields_ = [ _fields_ = [
# List of all material properties loaded. # List of all material properties loaded.
("mProperties", POINTER(POINTER(MaterialProperty))), ("mProperties", POINTER(POINTER(MaterialProperty))),
# Number of properties in the data base # Number of properties in the data base
("mNumProperties", c_uint), ("mNumProperties", c_uint),
# Storage allocated # Storage allocated
("mNumAllocated", c_uint), ("mNumAllocated", c_uint),
] ]
@ -545,20 +545,20 @@ class Material(Structure):
class Bone(Structure): class Bone(Structure):
""" """
See 'mesh.h' for details. See 'mesh.h' for details.
""" """
_fields_ = [ _fields_ = [
# The name of the bone. # The name of the bone.
("mName", String), ("mName", String),
# The number of vertices affected by this bone # The number of vertices affected by this bone
# The maximum value for this member is # The maximum value for this member is
#AI_MAX_BONE_WEIGHTS. #AI_MAX_BONE_WEIGHTS.
("mNumWeights", c_uint), ("mNumWeights", c_uint),
# The vertices affected by this bone # The vertices affected by this bone
("mWeights", POINTER(VertexWeight)), ("mWeights", POINTER(VertexWeight)),
# Matrix that transforms from mesh space to bone space in bind pose # Matrix that transforms from mesh space to bone space in bind pose
("mOffsetMatrix", Matrix4x4), ("mOffsetMatrix", Matrix4x4),
] ]
@ -567,12 +567,15 @@ class Bone(Structure):
class AnimMesh(Structure): class AnimMesh(Structure):
""" """
See 'mesh.h' for details. See 'mesh.h' for details.
""" """
AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8 AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
AI_MAX_NUMBER_OF_COLOR_SETS = 0x8 AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
_fields_ = [ _fields_ = [
# Anim Mesh name
("mName", String),
# Replacement for aiMesh::mVertices. If this array is non-NULL, # Replacement for aiMesh::mVertices. If this array is non-NULL,
# it *must* contain mNumVertices entries. The corresponding # it *must* contain mNumVertices entries. The corresponding
# array in the host mesh must be non-NULL as well - animation # array in the host mesh must be non-NULL as well - animation
@ -613,7 +616,7 @@ class AnimMesh(Structure):
class Mesh(Structure): class Mesh(Structure):
""" """
See 'mesh.h' for details. See 'mesh.h' for details.
""" """
AI_MAX_FACE_INDICES = 0x7fff AI_MAX_FACE_INDICES = 0x7fff
AI_MAX_BONE_WEIGHTS = 0x7fffffff AI_MAX_BONE_WEIGHTS = 0x7fffffff
@ -628,24 +631,24 @@ class Mesh(Structure):
# The "SortByPrimitiveType"-Step can be used to make sure the # The "SortByPrimitiveType"-Step can be used to make sure the
# output meshes consist of one primitive type each. # output meshes consist of one primitive type each.
("mPrimitiveTypes", c_uint), ("mPrimitiveTypes", c_uint),
# The number of vertices in this mesh. # The number of vertices in this mesh.
# This is also the size of all of the per-vertex data arrays. # This is also the size of all of the per-vertex data arrays.
# The maximum value for this member is # The maximum value for this member is
#AI_MAX_VERTICES. #AI_MAX_VERTICES.
("mNumVertices", c_uint), ("mNumVertices", c_uint),
# The number of primitives (triangles, polygons, lines) in this mesh. # The number of primitives (triangles, polygons, lines) in this mesh.
# This is also the size of the mFaces array. # This is also the size of the mFaces array.
# The maximum value for this member is # The maximum value for this member is
#AI_MAX_FACES. #AI_MAX_FACES.
("mNumFaces", c_uint), ("mNumFaces", c_uint),
# Vertex positions. # Vertex positions.
# This array is always present in a mesh. The array is # This array is always present in a mesh. The array is
# mNumVertices in size. # mNumVertices in size.
("mVertices", POINTER(Vector3D)), ("mVertices", POINTER(Vector3D)),
# Vertex normals. # Vertex normals.
# The array contains normalized vectors, NULL if not present. # The array contains normalized vectors, NULL if not present.
# The array is mNumVertices in size. Normals are undefined for # The array is mNumVertices in size. Normals are undefined for
@ -666,7 +669,7 @@ class Mesh(Structure):
# However, this needn't apply for normals that have been taken # However, this needn't apply for normals that have been taken
# directly from the model file. # directly from the model file.
("mNormals", POINTER(Vector3D)), ("mNormals", POINTER(Vector3D)),
# Vertex tangents. # Vertex tangents.
# The tangent of a vertex points in the direction of the positive # The tangent of a vertex points in the direction of the positive
# X texture axis. The array contains normalized vectors, NULL if # X texture axis. The array contains normalized vectors, NULL if
@ -681,7 +684,7 @@ class Mesh(Structure):
# contains bitangents (the bitangent is just the cross product of # contains bitangents (the bitangent is just the cross product of
# tangent and normal vectors). # tangent and normal vectors).
("mTangents", POINTER(Vector3D)), ("mTangents", POINTER(Vector3D)),
# Vertex bitangents. # Vertex bitangents.
# The bitangent of a vertex points in the direction of the positive # The bitangent of a vertex points in the direction of the positive
# Y texture axis. The array contains normalized vectors, NULL if not # Y texture axis. The array contains normalized vectors, NULL if not
@ -689,19 +692,19 @@ class Mesh(Structure):
# @note If the mesh contains tangents, it automatically also contains # @note If the mesh contains tangents, it automatically also contains
# bitangents. # bitangents.
("mBitangents", POINTER(Vector3D)), ("mBitangents", POINTER(Vector3D)),
# Vertex color sets. # Vertex color sets.
# A mesh may contain 0 to # A mesh may contain 0 to
#AI_MAX_NUMBER_OF_COLOR_SETS vertex #AI_MAX_NUMBER_OF_COLOR_SETS vertex
# colors per vertex. NULL if not present. Each array is # colors per vertex. NULL if not present. Each array is
# mNumVertices in size if present. # mNumVertices in size if present.
("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS), ("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS),
# Vertex texture coords, also known as UV channels. # Vertex texture coords, also known as UV channels.
# A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per # A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per
# vertex. NULL if not present. The array is mNumVertices in size. # vertex. NULL if not present. The array is mNumVertices in size.
("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS), ("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS),
# Specifies the number of components for a given UV channel. # Specifies the number of components for a given UV channel.
# Up to three channels are supported (UVW, for accessing volume # Up to three channels are supported (UVW, for accessing volume
# or cube maps). If the value is 2 for a given channel n, the # or cube maps). If the value is 2 for a given channel n, the
@ -709,7 +712,7 @@ class Mesh(Structure):
# If the value is 1 for a given channel, p.y is set to 0.0f, too. # If the value is 1 for a given channel, p.y is set to 0.0f, too.
# @note 4D coords are not supported # @note 4D coords are not supported
("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS), ("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS),
# The faces the mesh is constructed from. # The faces the mesh is constructed from.
# Each face refers to a number of vertices by their indices. # Each face refers to a number of vertices by their indices.
# This array is always present in a mesh, its size is given # This array is always present in a mesh, its size is given
@ -717,22 +720,22 @@ class Mesh(Structure):
#AI_SCENE_FLAGS_NON_VERBOSE_FORMAT #AI_SCENE_FLAGS_NON_VERBOSE_FORMAT
# is NOT set each face references an unique set of vertices. # is NOT set each face references an unique set of vertices.
("mFaces", POINTER(Face)), ("mFaces", POINTER(Face)),
# The number of bones this mesh contains. # The number of bones this mesh contains.
# Can be 0, in which case the mBones array is NULL. # Can be 0, in which case the mBones array is NULL.
("mNumBones", c_uint), ("mNumBones", c_uint),
# The bones of this mesh. # The bones of this mesh.
# A bone consists of a name by which it can be found in the # A bone consists of a name by which it can be found in the
# frame hierarchy and a set of vertex weights. # frame hierarchy and a set of vertex weights.
("mBones", POINTER(POINTER(Bone))), ("mBones", POINTER(POINTER(Bone))),
# The material used by this mesh. # The material used by this mesh.
# A mesh does use only a single material. If an imported model uses # A mesh does use only a single material. If an imported model uses
# multiple materials, the import splits up the mesh. Use this value # multiple materials, the import splits up the mesh. Use this value
# as index into the scene's material list. # as index into the scene's material list.
("mMaterialIndex", c_uint), ("mMaterialIndex", c_uint),
# Name of the mesh. Meshes can be named, but this is not a # Name of the mesh. Meshes can be named, but this is not a
# requirement and leaving this field empty is totally fine. # requirement and leaving this field empty is totally fine.
# There are mainly three uses for mesh names: # There are mainly three uses for mesh names:
@ -744,15 +747,15 @@ class Mesh(Structure):
# partitioning. # partitioning.
# - Vertex animations refer to meshes by their names. # - Vertex animations refer to meshes by their names.
("mName", String), ("mName", String),
# The number of attachment meshes. Note! Currently only works with Collada loader. # The number of attachment meshes. Note! Currently only works with Collada loader.
("mNumAnimMeshes", c_uint), ("mNumAnimMeshes", c_uint),
# Attachment meshes for this mesh, for vertex-based animation. # Attachment meshes for this mesh, for vertex-based animation.
# Attachment meshes carry replacement data for some of the # Attachment meshes carry replacement data for some of the
# mesh'es vertex components (usually positions, normals). # mesh'es vertex components (usually positions, normals).
# Note! Currently only works with Collada loader. # Note! Currently only works with Collada loader.
("mAnimMesh", POINTER(POINTER(AnimMesh))), ("mAnimMeshes", POINTER(POINTER(AnimMesh))),
# Method of morphing when animeshes are specified. # Method of morphing when animeshes are specified.
("mMethod", c_uint), ("mMethod", c_uint),
@ -762,7 +765,7 @@ class Mesh(Structure):
class Camera(Structure): class Camera(Structure):
""" """
See 'camera.h' for details. See 'camera.h' for details.
""" """
_fields_ = [ _fields_ = [
@ -771,12 +774,12 @@ class Camera(Structure):
# This node specifies the position of the camera in the scene # This node specifies the position of the camera in the scene
# hierarchy and can be animated. # hierarchy and can be animated.
("mName", String), ("mName", String),
# Position of the camera relative to the coordinate space # Position of the camera relative to the coordinate space
# defined by the corresponding node. # defined by the corresponding node.
# The default value is 0|0|0. # The default value is 0|0|0.
("mPosition", Vector3D), ("mPosition", Vector3D),
# 'Up' - vector of the camera coordinate system relative to # 'Up' - vector of the camera coordinate system relative to
# the coordinate space defined by the corresponding node. # the coordinate space defined by the corresponding node.
# The 'right' vector of the camera coordinate system is # The 'right' vector of the camera coordinate system is
@ -784,25 +787,25 @@ class Camera(Structure):
# The default value is 0|1|0. The vector # The default value is 0|1|0. The vector
# may be normalized, but it needn't. # may be normalized, but it needn't.
("mUp", Vector3D), ("mUp", Vector3D),
# 'LookAt' - vector of the camera coordinate system relative to # 'LookAt' - vector of the camera coordinate system relative to
# the coordinate space defined by the corresponding node. # the coordinate space defined by the corresponding node.
# This is the viewing direction of the user. # This is the viewing direction of the user.
# The default value is 0|0|1. The vector # The default value is 0|0|1. The vector
# may be normalized, but it needn't. # may be normalized, but it needn't.
("mLookAt", Vector3D), ("mLookAt", Vector3D),
# Half horizontal field of view angle, in radians. # Half horizontal field of view angle, in radians.
# The field of view angle is the angle between the center # The field of view angle is the angle between the center
# line of the screen and the left or right border. # line of the screen and the left or right border.
# The default value is 1/4PI. # The default value is 1/4PI.
("mHorizontalFOV", c_float), ("mHorizontalFOV", c_float),
# Distance of the near clipping plane from the camera. # Distance of the near clipping plane from the camera.
# The value may not be 0.f (for arithmetic reasons to prevent # The value may not be 0.f (for arithmetic reasons to prevent
# a division through zero). The default value is 0.1f. # a division through zero). The default value is 0.1f.
("mClipPlaneNear", c_float), ("mClipPlaneNear", c_float),
# Distance of the far clipping plane from the camera. # Distance of the far clipping plane from the camera.
# The far clipping plane must, of course, be further away than the # The far clipping plane must, of course, be further away than the
# near clipping plane. The default value is 1000.f. The ratio # near clipping plane. The default value is 1000.f. The ratio
@ -810,7 +813,7 @@ class Camera(Structure):
# large (between 1000-10000 should be ok) to avoid floating-point # large (between 1000-10000 should be ok) to avoid floating-point
# inaccuracies which could lead to z-fighting. # inaccuracies which could lead to z-fighting.
("mClipPlaneFar", c_float), ("mClipPlaneFar", c_float),
# Screen aspect ratio. # Screen aspect ratio.
# This is the ration between the width and the height of the # This is the ration between the width and the height of the
# screen. Typical values are 4/3, 1/2 or 1/1. This value is # screen. Typical values are 4/3, 1/2 or 1/1. This value is
@ -822,12 +825,12 @@ class Camera(Structure):
class VectorKey(Structure): class VectorKey(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The time of this key # The time of this key
("mTime", c_double), ("mTime", c_double),
# The value of this key # The value of this key
("mValue", Vector3D), ("mValue", Vector3D),
] ]
@ -835,12 +838,12 @@ class VectorKey(Structure):
class QuatKey(Structure): class QuatKey(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The time of this key # The time of this key
("mTime", c_double), ("mTime", c_double),
# The value of this key # The value of this key
("mValue", Quaternion), ("mValue", Quaternion),
] ]
@ -848,7 +851,7 @@ class QuatKey(Structure):
class MeshMorphKey(Structure): class MeshMorphKey(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The time of this key # The time of this key
@ -866,47 +869,47 @@ class MeshMorphKey(Structure):
class NodeAnim(Structure): class NodeAnim(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The name of the node affected by this animation. The node # The name of the node affected by this animation. The node
# must exist and it must be unique. # must exist and it must be unique.
("mNodeName", String), ("mNodeName", String),
# The number of position keys # The number of position keys
("mNumPositionKeys", c_uint), ("mNumPositionKeys", c_uint),
# The position keys of this animation channel. Positions are # The position keys of this animation channel. Positions are
# specified as 3D vector. The array is mNumPositionKeys in size. # specified as 3D vector. The array is mNumPositionKeys in size.
# If there are position keys, there will also be at least one # If there are position keys, there will also be at least one
# scaling and one rotation key. # scaling and one rotation key.
("mPositionKeys", POINTER(VectorKey)), ("mPositionKeys", POINTER(VectorKey)),
# The number of rotation keys # The number of rotation keys
("mNumRotationKeys", c_uint), ("mNumRotationKeys", c_uint),
# The rotation keys of this animation channel. Rotations are # The rotation keys of this animation channel. Rotations are
# given as quaternions, which are 4D vectors. The array is # given as quaternions, which are 4D vectors. The array is
# mNumRotationKeys in size. # mNumRotationKeys in size.
# If there are rotation keys, there will also be at least one # If there are rotation keys, there will also be at least one
# scaling and one position key. # scaling and one position key.
("mRotationKeys", POINTER(QuatKey)), ("mRotationKeys", POINTER(QuatKey)),
# The number of scaling keys # The number of scaling keys
("mNumScalingKeys", c_uint), ("mNumScalingKeys", c_uint),
# The scaling keys of this animation channel. Scalings are # The scaling keys of this animation channel. Scalings are
# specified as 3D vector. The array is mNumScalingKeys in size. # specified as 3D vector. The array is mNumScalingKeys in size.
# If there are scaling keys, there will also be at least one # If there are scaling keys, there will also be at least one
# position and one rotation key. # position and one rotation key.
("mScalingKeys", POINTER(VectorKey)), ("mScalingKeys", POINTER(VectorKey)),
# Defines how the animation behaves before the first # Defines how the animation behaves before the first
# key is encountered. # key is encountered.
# The default value is aiAnimBehaviour_DEFAULT (the original # The default value is aiAnimBehaviour_DEFAULT (the original
# transformation matrix of the affected node is used). # transformation matrix of the affected node is used).
("mPreState", c_uint), ("mPreState", c_uint),
# Defines how the animation behaves after the last # Defines how the animation behaves after the last
# key was processed. # key was processed.
# The default value is aiAnimBehaviour_DEFAULT (the original # The default value is aiAnimBehaviour_DEFAULT (the original
@ -917,7 +920,7 @@ class NodeAnim(Structure):
class MeshAnim(Structure): class MeshAnim(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# Name of the mesh to be animated. An empty string is not allowed, # Name of the mesh to be animated. An empty string is not allowed,
@ -936,7 +939,7 @@ class MeshAnim(Structure):
class MeshMorphAnim(Structure): class MeshMorphAnim(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# Name of the mesh to be animated. An empty string is not allowed, # Name of the mesh to be animated. An empty string is not allowed,
@ -956,32 +959,32 @@ class MeshMorphAnim(Structure):
class Animation(Structure): class Animation(Structure):
""" """
See 'anim.h' for details. See 'anim.h' for details.
""" """
_fields_ = [ _fields_ = [
# The name of the animation. If the modeling package this data was # The name of the animation. If the modeling package this data was
# exported from does support only a single animation channel, this # exported from does support only a single animation channel, this
# name is usually empty (length is zero). # name is usually empty (length is zero).
("mName", String), ("mName", String),
# Duration of the animation in ticks. # Duration of the animation in ticks.
("mDuration", c_double), ("mDuration", c_double),
# Ticks per second. 0 if not specified in the imported file # Ticks per second. 0 if not specified in the imported file
("mTicksPerSecond", c_double), ("mTicksPerSecond", c_double),
# The number of bone animation channels. Each channel affects # The number of bone animation channels. Each channel affects
# a single node. # a single node.
("mNumChannels", c_uint), ("mNumChannels", c_uint),
# The node animation channels. Each channel affects a single node. # The node animation channels. Each channel affects a single node.
# The array is mNumChannels in size. # The array is mNumChannels in size.
("mChannels", POINTER(POINTER(NodeAnim))), ("mChannels", POINTER(POINTER(NodeAnim))),
# The number of mesh animation channels. Each channel affects # The number of mesh animation channels. Each channel affects
# a single mesh and defines vertex-based animation. # a single mesh and defines vertex-based animation.
("mNumMeshChannels", c_uint), ("mNumMeshChannels", c_uint),
# The mesh animation channels. Each channel affects a single mesh. # The mesh animation channels. Each channel affects a single mesh.
# The array is mNumMeshChannels in size. # The array is mNumMeshChannels in size.
("mMeshChannels", POINTER(POINTER(MeshAnim))), ("mMeshChannels", POINTER(POINTER(MeshAnim))),
@ -991,7 +994,7 @@ class Animation(Structure):
("mNumMorphMeshChannels", c_uint), ("mNumMorphMeshChannels", c_uint),
# The morph mesh animation channels. Each channel affects a single mesh. # The morph mesh animation channels. Each channel affects a single mesh.
# The array is mNumMorphMeshChannels in size. # The array is mNumMorphMeshChannels in size.
("mMorphMeshChannels", POINTER(POINTER(MeshMorphAnim))), ("mMorphMeshChannels", POINTER(POINTER(MeshMorphAnim))),
] ]
@ -1032,7 +1035,7 @@ ExportDataBlob._fields_ = [
class Scene(Structure): class Scene(Structure):
""" """
See 'aiScene.h' for details. See 'aiScene.h' for details.
""" """
AI_SCENE_FLAGS_INCOMPLETE = 0x1 AI_SCENE_FLAGS_INCOMPLETE = 0x1
AI_SCENE_FLAGS_VALIDATED = 0x2 AI_SCENE_FLAGS_VALIDATED = 0x2
@ -1047,64 +1050,64 @@ class Scene(Structure):
# want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE # want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE
# bit set. # bit set.
("mFlags", c_uint), ("mFlags", c_uint),
# The root node of the hierarchy. # The root node of the hierarchy.
# There will always be at least the root node if the import # There will always be at least the root node if the import
# was successful (and no special flags have been set). # was successful (and no special flags have been set).
# Presence of further nodes depends on the format and content # Presence of further nodes depends on the format and content
# of the imported file. # of the imported file.
("mRootNode", POINTER(Node)), ("mRootNode", POINTER(Node)),
# The number of meshes in the scene. # The number of meshes in the scene.
("mNumMeshes", c_uint), ("mNumMeshes", c_uint),
# The array of meshes. # The array of meshes.
# Use the indices given in the aiNode structure to access # Use the indices given in the aiNode structure to access
# this array. The array is mNumMeshes in size. If the # this array. The array is mNumMeshes in size. If the
# AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
# be at least ONE material. # be at least ONE material.
("mMeshes", POINTER(POINTER(Mesh))), ("mMeshes", POINTER(POINTER(Mesh))),
# The number of materials in the scene. # The number of materials in the scene.
("mNumMaterials", c_uint), ("mNumMaterials", c_uint),
# The array of materials. # The array of materials.
# Use the index given in each aiMesh structure to access this # Use the index given in each aiMesh structure to access this
# array. The array is mNumMaterials in size. If the # array. The array is mNumMaterials in size. If the
# AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
# be at least ONE material. # be at least ONE material.
("mMaterials", POINTER(POINTER(Material))), ("mMaterials", POINTER(POINTER(Material))),
# The number of animations in the scene. # The number of animations in the scene.
("mNumAnimations", c_uint), ("mNumAnimations", c_uint),
# The array of animations. # The array of animations.
# All animations imported from the given file are listed here. # All animations imported from the given file are listed here.
# The array is mNumAnimations in size. # The array is mNumAnimations in size.
("mAnimations", POINTER(POINTER(Animation))), ("mAnimations", POINTER(POINTER(Animation))),
# The number of textures embedded into the file # The number of textures embedded into the file
("mNumTextures", c_uint), ("mNumTextures", c_uint),
# The array of embedded textures. # The array of embedded textures.
# Not many file formats embed their textures into the file. # Not many file formats embed their textures into the file.
# An example is Quake's MDL format (which is also used by # An example is Quake's MDL format (which is also used by
# some GameStudio versions) # some GameStudio versions)
("mTextures", POINTER(POINTER(Texture))), ("mTextures", POINTER(POINTER(Texture))),
# The number of light sources in the scene. Light sources # The number of light sources in the scene. Light sources
# are fully optional, in most cases this attribute will be 0 # are fully optional, in most cases this attribute will be 0
("mNumLights", c_uint), ("mNumLights", c_uint),
# The array of light sources. # The array of light sources.
# All light sources imported from the given file are # All light sources imported from the given file are
# listed here. The array is mNumLights in size. # listed here. The array is mNumLights in size.
("mLights", POINTER(POINTER(Light))), ("mLights", POINTER(POINTER(Light))),
# The number of cameras in the scene. Cameras # The number of cameras in the scene. Cameras
# are fully optional, in most cases this attribute will be 0 # are fully optional, in most cases this attribute will be 0
("mNumCameras", c_uint), ("mNumCameras", c_uint),
# The array of cameras. # The array of cameras.
# All cameras imported from the given file are listed here. # All cameras imported from the given file are listed here.
# The array is mNumCameras in size. The first camera in the # The array is mNumCameras in size. The first camera in the