From 97dc0ce15d038feb47a2f054cb53745c869e07c8 Mon Sep 17 00:00:00 2001 From: Dylan Kenneally Date: Thu, 21 Nov 2019 12:04:53 +1100 Subject: [PATCH 1/9] Added CMake option to set the compiler warning to max (-Wall /W4). Off by default --- Build.md | 1 + CMakeLists.txt | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Build.md b/Build.md index 2db47798d..4b7513313 100644 --- a/Build.md +++ b/Build.md @@ -77,6 +77,7 @@ The cmake-build-environment provides options to configure the build. The followi - **ASSIMP_BUILD_SAMPLES ( default OFF )**: If the official samples are built as well (needs Glut). - **ASSIMP_BUILD_TESTS ( default ON )**: If the test suite for Assimp is built in addition to the library. - **ASSIMP_COVERALLS ( default OFF )**: Enable this to measure test coverage. +- **ASSIMP_ERROR_MAX( default OFF)**: Enable all warnings. - **ASSIMP_WERROR( default OFF )**: Treat warnings as errors. - **ASSIMP_ASAN ( default OFF )**: Enable AddressSanitizer. - **ASSIMP_UBSAN ( default OFF )**: Enable Undefined Behavior sanitizer. diff --git a/CMakeLists.txt b/CMakeLists.txt index 693d6f16a..f69d2c9a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,6 +100,10 @@ OPTION ( ASSIMP_COVERALLS "Enable this to measure test coverage." OFF ) +OPTION ( ASSIMP_ERROR_MAX + "Enable all warnings." + OFF +) OPTION ( ASSIMP_WERROR "Treat warnings as errors." OFF @@ -294,6 +298,16 @@ IF (ASSIMP_COVERALLS) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") ENDIF() +IF (ASSIMP_ERROR_MAX) + MESSAGE(STATUS "Turning on all warnings") + IF (MSVC) + ADD_COMPILE_OPTIONS(/W4) # NB: there is a /Wall option, pedantic mode + ELSE() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + ENDIF() +ENDIF() + IF (ASSIMP_WERROR) MESSAGE(STATUS "Treating warnings as errors") IF (MSVC) From 71cac7ab8dca879958bc09b9efb62510feb2de3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Sat, 7 Dec 2019 22:04:04 +0100 Subject: [PATCH 2/9] lower-case PEP263 encoding declaration so emacs likes it... --- port/PyAssimp/pyassimp/structs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/PyAssimp/pyassimp/structs.py b/port/PyAssimp/pyassimp/structs.py index d478b861b..bd90586ff 100644 --- a/port/PyAssimp/pyassimp/structs.py +++ b/port/PyAssimp/pyassimp/structs.py @@ -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 298a89b4eedcd8b18a178bc399f3262220122841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Sat, 7 Dec 2019 22:06:14 +0100 Subject: [PATCH 3/9] remove trailing whitespace --- port/PyAssimp/pyassimp/structs.py | 264 +++++++++++++++--------------- 1 file changed, 132 insertions(+), 132 deletions(-) diff --git a/port/PyAssimp/pyassimp/structs.py b/port/PyAssimp/pyassimp/structs.py index bd90586ff..b93aae68c 100644 --- a/port/PyAssimp/pyassimp/structs.py +++ b/port/PyAssimp/pyassimp/structs.py @@ -6,7 +6,7 @@ from ctypes import POINTER, c_void_p, c_uint, c_char, c_float, Structure, c_char class Vector2D(Structure): """ See 'vector2.h' for details. - """ + """ _fields_ = [ @@ -16,7 +16,7 @@ class Vector2D(Structure): class Matrix3x3(Structure): """ See 'matrix3x3.h' for details. - """ + """ _fields_ = [ @@ -28,7 +28,7 @@ class Matrix3x3(Structure): class Texel(Structure): """ See 'texture.h' for details. - """ + """ _fields_ = [ ("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte), @@ -37,7 +37,7 @@ class Texel(Structure): class Color4D(Structure): """ See 'color4.h' for details. - """ + """ _fields_ = [ @@ -48,7 +48,7 @@ class Color4D(Structure): class Plane(Structure): """ See 'types.h' for details. - """ + """ _fields_ = [ # Plane equation @@ -58,7 +58,7 @@ class Plane(Structure): class Color3D(Structure): """ See 'types.h' for details. - """ + """ _fields_ = [ # Red, green and blue color values @@ -68,7 +68,7 @@ class Color3D(Structure): class String(Structure): """ See 'types.h' for details. - """ + """ MAXLEN = 1024 @@ -77,7 +77,7 @@ class String(Structure): # logical length of strings containing UTF-8 multibyte sequences! It's # the number of bytes from the beginning of the string to its end. ("length", c_size_t), - + # String buffer. Size limit is MAXLEN ("data", c_char*MAXLEN), ] @@ -85,7 +85,7 @@ class String(Structure): class MaterialPropertyString(Structure): """ 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). """ @@ -97,7 +97,7 @@ class MaterialPropertyString(Structure): # logical length of strings containing UTF-8 multibyte sequences! It's # the number of bytes from the beginning of the string to its end. ("length", c_uint32), - + # String buffer. Size limit is MAXLEN ("data", c_char*MAXLEN), ] @@ -105,30 +105,30 @@ class MaterialPropertyString(Structure): class MemoryInfo(Structure): """ See 'types.h' for details. - """ + """ _fields_ = [ # Storage allocated for texture data ("textures", c_uint), - + # Storage allocated for material data ("materials", c_uint), - + # Storage allocated for mesh data ("meshes", c_uint), - + # Storage allocated for node data ("nodes", c_uint), - + # Storage allocated for animation data ("animations", c_uint), - + # Storage allocated for camera data ("cameras", c_uint), - + # Storage allocated for light data ("lights", c_uint), - + # Total storage allocated for the full import. ("total", c_uint), ] @@ -136,7 +136,7 @@ class MemoryInfo(Structure): class Quaternion(Structure): """ See 'quaternion.h' for details. - """ + """ _fields_ = [ @@ -147,14 +147,14 @@ class Quaternion(Structure): class Face(Structure): """ See 'mesh.h' for details. - """ + """ _fields_ = [ # Number of indices defining this face. # The maximum value for this member is #AI_MAX_FACE_INDICES. ("mNumIndices", c_uint), - + # Pointer to the indices array. Size of the array is given in numIndices. ("mIndices", POINTER(c_uint)), ] @@ -162,12 +162,12 @@ class Face(Structure): class VertexWeight(Structure): """ See 'mesh.h' for details. - """ + """ _fields_ = [ # Index of the vertex which is influenced by the bone. ("mVertexId", c_uint), - + # The strength of the influence in the range (0...1). # The influence from all bones at one vertex amounts to 1. ("mWeight", c_float), @@ -176,7 +176,7 @@ class VertexWeight(Structure): class Matrix4x4(Structure): """ See 'matrix4x4.h' for details. - """ + """ _fields_ = [ @@ -189,7 +189,7 @@ class Matrix4x4(Structure): class Vector3D(Structure): """ See 'vector3.h' for details. - """ + """ _fields_ = [ @@ -199,12 +199,12 @@ class Vector3D(Structure): class MeshKey(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The time of this key ("mTime", c_double), - + # Index into the aiMesh::mAnimMeshes array of the # mesh corresponding to the #aiMeshAnim hosting this @@ -252,7 +252,7 @@ class Metadata(Structure): class Node(Structure): """ See 'scene.h' for details. - """ + """ Node._fields_ = [ @@ -270,22 +270,22 @@ Node._fields_ = [ # this text. You should be able to handle stuff like whitespace, tabs, # linefeeds, quotation marks, ampersands, ... . ("mName", String), - + # The transformation relative to the node's parent. ("mTransformation", Matrix4x4), - + # Parent node. NULL if this node is the root node. ("mParent", POINTER(Node)), - + # The number of child nodes of this node. ("mNumChildren", c_uint), - + # The child nodes of this node. NULL if mNumChildren is 0. ("mChildren", POINTER(POINTER(Node))), - + # The number of meshes of this node. ("mNumMeshes", c_uint), - + # The meshes of this node. Each entry is an index into the mesh ("mMeshes", POINTER(c_uint)), @@ -297,7 +297,7 @@ Node._fields_ = [ class Light(Structure): """ See 'light.h' for details. - """ + """ _fields_ = [ @@ -306,22 +306,22 @@ class Light(Structure): # This node specifies the position of the light in the scene # hierarchy and can be animated. ("mName", String), - + # The type of the light source. # aiLightSource_UNDEFINED is not a valid value for this member. ("mType", c_uint), - + # Position of the light source in space. Relative to the # transformation of the node corresponding to the light. # The position is undefined for directional lights. ("mPosition", Vector3D), - + # 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. ("mDirection", Vector3D), - + # Up direction of the light source in space. Relative to the # 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. # Naturally undefined for directional lights. ("mAttenuationConstant", c_float), - + # Linear light attenuation factor. # The intensity of the light source at a given distance 'd' from # the light's position is @@ -352,7 +352,7 @@ class Light(Structure): # This member corresponds to the att1 variable in the equation. # Naturally undefined for directional lights. ("mAttenuationLinear", c_float), - + # Quadratic light attenuation factor. # The intensity of the light source at a given distance 'd' from # the light's position is @@ -364,19 +364,19 @@ class Light(Structure): # This member corresponds to the att2 variable in the equation. # Naturally undefined for directional lights. ("mAttenuationQuadratic", c_float), - + # Diffuse color of the light source # The diffuse light color is multiplied with the diffuse # material color to obtain the final color that contributes # to the diffuse shading term. ("mColorDiffuse", Color3D), - + # Specular color of the light source # The specular light color is multiplied with the specular # material color to obtain the final color that contributes # to the specular shading term. ("mColorSpecular", Color3D), - + # Ambient color of the light source # The ambient light color is multiplied with the ambient # 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 # that is still supported by quite many file formats. ("mColorAmbient", Color3D), - + # Inner angle of a spot light's light cone. # The spot light has maximum influence on objects inside this # angle. The angle is given in radians. It is 2PI for point # lights and undefined for directional lights. ("mAngleInnerCone", c_float), - + # Outer angle of a spot light's light cone. # The spot light does not affect objects outside this angle. # The angle is given in radians. It is 2PI for point lights and @@ -408,7 +408,7 @@ class Light(Structure): class Texture(Structure): """ See 'texture.h' for details. - """ + """ _fields_ = [ @@ -417,15 +417,15 @@ class Texture(Structure): # like JPEG. In this case mWidth specifies the size of the # memory area pcData is pointing to, in bytes. ("mWidth", c_uint), - + # Height of the texture, in pixels # If this value is zero, pcData points to an compressed texture # in any format (e.g. JPEG). ("mHeight", c_uint), - + # A hint from the loader to make it easier for applications # 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 @@ -443,7 +443,7 @@ class Texture(Structure): # E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case. # The fourth character will always be '\\0'. ("achFormatHint", c_char*9), - + # Data of the texture. # Points to an array of mWidth # mHeight aiTexel's. @@ -462,7 +462,7 @@ class Texture(Structure): class Ray(Structure): """ See 'types.h' for details. - """ + """ _fields_ = [ # Position and direction of the ray @@ -472,17 +472,17 @@ class Ray(Structure): class UVTransform(Structure): """ See 'material.h' for details. - """ + """ _fields_ = [ # Translation on the u and v axes. # The default value is (0|0). ("mTranslation", Vector2D), - + # Scaling on the u and v axes. # The default value is (1|1). ("mScaling", Vector2D), - + # Rotation - in counter-clockwise direction. # The rotation angle is specified in radians. The # rotation center is 0.5f|0.5f. The default value @@ -493,34 +493,34 @@ class UVTransform(Structure): class MaterialProperty(Structure): """ See 'material.h' for details. - """ + """ _fields_ = [ # Specifies the name of the property (key) # Keys are generally case insensitive. ("mKey", String), - + # Textures: Specifies their exact usage semantic. # For non-texture properties, this member is always 0 # (or, better-said, #aiTextureType_NONE). ("mSemantic", c_uint), - + # Textures: Specifies the index of the texture. # For non-texture properties, this member is always 0. ("mIndex", c_uint), - + # Size of the buffer mData is pointing to, in bytes. # This value may not be 0. ("mDataLength", c_uint), - + # Type information for the property. # Defines the data layout inside the data buffer. This is used # by the library internally to perform debug checks and to # utilize proper type conversions. # (It's probably a hacky solution, but it works.) ("mType", c_uint), - + # Binary buffer to hold the property's value. # The size of the buffer is always mDataLength. ("mData", POINTER(c_char)), @@ -529,15 +529,15 @@ class MaterialProperty(Structure): class Material(Structure): """ See 'material.h' for details. - """ + """ _fields_ = [ # List of all material properties loaded. ("mProperties", POINTER(POINTER(MaterialProperty))), - + # Number of properties in the data base ("mNumProperties", c_uint), - + # Storage allocated ("mNumAllocated", c_uint), ] @@ -545,20 +545,20 @@ class Material(Structure): class Bone(Structure): """ See 'mesh.h' for details. - """ + """ _fields_ = [ # The name of the bone. ("mName", String), - + # The number of vertices affected by this bone # The maximum value for this member is #AI_MAX_BONE_WEIGHTS. ("mNumWeights", c_uint), - + # The vertices affected by this bone ("mWeights", POINTER(VertexWeight)), - + # Matrix that transforms from mesh space to bone space in bind pose ("mOffsetMatrix", Matrix4x4), ] @@ -567,7 +567,7 @@ class Bone(Structure): class AnimMesh(Structure): """ See 'mesh.h' for details. - """ + """ AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8 AI_MAX_NUMBER_OF_COLOR_SETS = 0x8 @@ -613,7 +613,7 @@ class AnimMesh(Structure): class Mesh(Structure): """ See 'mesh.h' for details. - """ + """ AI_MAX_FACE_INDICES = 0x7fff AI_MAX_BONE_WEIGHTS = 0x7fffffff @@ -628,24 +628,24 @@ class Mesh(Structure): # The "SortByPrimitiveType"-Step can be used to make sure the # output meshes consist of one primitive type each. ("mPrimitiveTypes", c_uint), - + # The number of vertices in this mesh. # This is also the size of all of the per-vertex data arrays. # The maximum value for this member is #AI_MAX_VERTICES. ("mNumVertices", c_uint), - + # The number of primitives (triangles, polygons, lines) in this mesh. # This is also the size of the mFaces array. # The maximum value for this member is #AI_MAX_FACES. ("mNumFaces", c_uint), - + # Vertex positions. # This array is always present in a mesh. The array is # mNumVertices in size. ("mVertices", POINTER(Vector3D)), - + # Vertex normals. # The array contains normalized vectors, NULL if not present. # The array is mNumVertices in size. Normals are undefined for @@ -666,7 +666,7 @@ class Mesh(Structure): # However, this needn't apply for normals that have been taken # directly from the model file. ("mNormals", POINTER(Vector3D)), - + # Vertex tangents. # The tangent of a vertex points in the direction of the positive # X texture axis. The array contains normalized vectors, NULL if @@ -681,7 +681,7 @@ class Mesh(Structure): # contains bitangents (the bitangent is just the cross product of # tangent and normal vectors). ("mTangents", POINTER(Vector3D)), - + # Vertex bitangents. # The bitangent of a vertex points in the direction of the positive # Y texture axis. The array contains normalized vectors, NULL if not @@ -689,19 +689,19 @@ class Mesh(Structure): # @note If the mesh contains tangents, it automatically also contains # bitangents. ("mBitangents", POINTER(Vector3D)), - + # Vertex color sets. # A mesh may contain 0 to #AI_MAX_NUMBER_OF_COLOR_SETS vertex # colors per vertex. NULL if not present. Each array is # mNumVertices in size if present. ("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS), - + # Vertex texture coords, also known as UV channels. # A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per # vertex. NULL if not present. The array is mNumVertices in size. ("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS), - + # Specifies the number of components for a given UV channel. # Up to three channels are supported (UVW, for accessing volume # or cube maps). If the value is 2 for a given channel n, the @@ -709,7 +709,7 @@ class Mesh(Structure): # If the value is 1 for a given channel, p.y is set to 0.0f, too. # @note 4D coords are not supported ("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS), - + # The faces the mesh is constructed from. # Each face refers to a number of vertices by their indices. # This array is always present in a mesh, its size is given @@ -717,22 +717,22 @@ class Mesh(Structure): #AI_SCENE_FLAGS_NON_VERBOSE_FORMAT # is NOT set each face references an unique set of vertices. ("mFaces", POINTER(Face)), - + # The number of bones this mesh contains. # Can be 0, in which case the mBones array is NULL. ("mNumBones", c_uint), - + # The bones of this mesh. # A bone consists of a name by which it can be found in the # frame hierarchy and a set of vertex weights. ("mBones", POINTER(POINTER(Bone))), - + # The material used by this mesh. # A mesh does use only a single material. If an imported model uses # multiple materials, the import splits up the mesh. Use this value # as index into the scene's material list. ("mMaterialIndex", c_uint), - + # Name of the mesh. Meshes can be named, but this is not a # requirement and leaving this field empty is totally fine. # There are mainly three uses for mesh names: @@ -744,10 +744,10 @@ class Mesh(Structure): # partitioning. # - Vertex animations refer to meshes by their names. ("mName", String), - + # The number of attachment meshes. Note! Currently only works with Collada loader. ("mNumAnimMeshes", c_uint), - + # 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). @@ -762,7 +762,7 @@ class Mesh(Structure): class Camera(Structure): """ See 'camera.h' for details. - """ + """ _fields_ = [ @@ -771,12 +771,12 @@ class Camera(Structure): # This node specifies the position of the camera in the scene # hierarchy and can be animated. ("mName", String), - + # Position of the camera relative to the coordinate space # defined by the corresponding node. # The default value is 0|0|0. ("mPosition", Vector3D), - + # 'Up' - vector of the camera coordinate system relative to # the coordinate space defined by the corresponding node. # The 'right' vector of the camera coordinate system is @@ -784,25 +784,25 @@ class Camera(Structure): # The default value is 0|1|0. The vector # may be normalized, but it needn't. ("mUp", Vector3D), - + # 'LookAt' - vector of the camera coordinate system relative to # the coordinate space defined by the corresponding node. # This is the viewing direction of the user. # The default value is 0|0|1. The vector # may be normalized, but it needn't. ("mLookAt", Vector3D), - + # Half horizontal field of view angle, in radians. # The field of view angle is the angle between the center # line of the screen and the left or right border. # The default value is 1/4PI. ("mHorizontalFOV", c_float), - + # Distance of the near clipping plane from the camera. # The value may not be 0.f (for arithmetic reasons to prevent # a division through zero). The default value is 0.1f. ("mClipPlaneNear", c_float), - + # Distance of the far clipping plane from the camera. # The far clipping plane must, of course, be further away than the # near clipping plane. The default value is 1000.f. The ratio @@ -810,7 +810,7 @@ class Camera(Structure): # large (between 1000-10000 should be ok) to avoid floating-point # inaccuracies which could lead to z-fighting. ("mClipPlaneFar", c_float), - + # Screen aspect ratio. # 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 @@ -822,12 +822,12 @@ class Camera(Structure): class VectorKey(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The time of this key ("mTime", c_double), - + # The value of this key ("mValue", Vector3D), ] @@ -835,12 +835,12 @@ class VectorKey(Structure): class QuatKey(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The time of this key ("mTime", c_double), - + # The value of this key ("mValue", Quaternion), ] @@ -848,7 +848,7 @@ class QuatKey(Structure): class MeshMorphKey(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The time of this key @@ -866,47 +866,47 @@ class MeshMorphKey(Structure): class NodeAnim(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The name of the node affected by this animation. The node # must exist and it must be unique. ("mNodeName", String), - + # The number of position keys ("mNumPositionKeys", c_uint), - + # The position keys of this animation channel. Positions are # specified as 3D vector. The array is mNumPositionKeys in size. # If there are position keys, there will also be at least one # scaling and one rotation key. ("mPositionKeys", POINTER(VectorKey)), - + # The number of rotation keys ("mNumRotationKeys", c_uint), - + # The rotation keys of this animation channel. Rotations are # given as quaternions, which are 4D vectors. The array is # mNumRotationKeys in size. # If there are rotation keys, there will also be at least one # scaling and one position key. ("mRotationKeys", POINTER(QuatKey)), - + # The number of scaling keys ("mNumScalingKeys", c_uint), - + # The scaling keys of this animation channel. Scalings are # specified as 3D vector. The array is mNumScalingKeys in size. # If there are scaling keys, there will also be at least one # position and one rotation key. ("mScalingKeys", POINTER(VectorKey)), - + # Defines how the animation behaves before the first # key is encountered. # The default value is aiAnimBehaviour_DEFAULT (the original # transformation matrix of the affected node is used). ("mPreState", c_uint), - + # Defines how the animation behaves after the last # key was processed. # The default value is aiAnimBehaviour_DEFAULT (the original @@ -917,7 +917,7 @@ class NodeAnim(Structure): class MeshAnim(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # Name of the mesh to be animated. An empty string is not allowed, @@ -936,7 +936,7 @@ class MeshAnim(Structure): class MeshMorphAnim(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # Name of the mesh to be animated. An empty string is not allowed, @@ -956,32 +956,32 @@ class MeshMorphAnim(Structure): class Animation(Structure): """ See 'anim.h' for details. - """ + """ _fields_ = [ # The name of the animation. If the modeling package this data was # exported from does support only a single animation channel, this # name is usually empty (length is zero). ("mName", String), - + # Duration of the animation in ticks. ("mDuration", c_double), - + # Ticks per second. 0 if not specified in the imported file ("mTicksPerSecond", c_double), - + # The number of bone animation channels. Each channel affects # a single node. ("mNumChannels", c_uint), - + # The node animation channels. Each channel affects a single node. # The array is mNumChannels in size. ("mChannels", POINTER(POINTER(NodeAnim))), - + # The number of mesh animation channels. Each channel affects # a single mesh and defines vertex-based animation. ("mNumMeshChannels", c_uint), - + # The mesh animation channels. Each channel affects a single mesh. # The array is mNumMeshChannels in size. ("mMeshChannels", POINTER(POINTER(MeshAnim))), @@ -991,7 +991,7 @@ class Animation(Structure): ("mNumMorphMeshChannels", c_uint), # 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))), ] @@ -1032,7 +1032,7 @@ ExportDataBlob._fields_ = [ class Scene(Structure): """ See 'aiScene.h' for details. - """ + """ AI_SCENE_FLAGS_INCOMPLETE = 0x1 AI_SCENE_FLAGS_VALIDATED = 0x2 @@ -1047,64 +1047,64 @@ class Scene(Structure): # want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE # bit set. ("mFlags", c_uint), - + # The root node of the hierarchy. # There will always be at least the root node if the import # was successful (and no special flags have been set). # Presence of further nodes depends on the format and content # of the imported file. ("mRootNode", POINTER(Node)), - + # The number of meshes in the scene. ("mNumMeshes", c_uint), - + # The array of meshes. # Use the indices given in the aiNode structure to access # this array. The array is mNumMeshes in size. If the # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always # be at least ONE material. ("mMeshes", POINTER(POINTER(Mesh))), - + # The number of materials in the scene. ("mNumMaterials", c_uint), - + # The array of materials. # Use the index given in each aiMesh structure to access this # array. The array is mNumMaterials in size. If the # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always # be at least ONE material. ("mMaterials", POINTER(POINTER(Material))), - + # The number of animations in the scene. ("mNumAnimations", c_uint), - + # The array of animations. # All animations imported from the given file are listed here. # The array is mNumAnimations in size. ("mAnimations", POINTER(POINTER(Animation))), - + # The number of textures embedded into the file ("mNumTextures", c_uint), - + # The array of embedded textures. # Not many file formats embed their textures into the file. # An example is Quake's MDL format (which is also used by # some GameStudio versions) ("mTextures", POINTER(POINTER(Texture))), - + # The number of light sources in the scene. Light sources # are fully optional, in most cases this attribute will be 0 ("mNumLights", c_uint), - + # The array of light sources. # All light sources imported from the given file are # listed here. The array is mNumLights in size. ("mLights", POINTER(POINTER(Light))), - + # The number of cameras in the scene. Cameras # are fully optional, in most cases this attribute will be 0 ("mNumCameras", c_uint), - + # The array of cameras. # All cameras imported from the given file are listed here. # The array is mNumCameras in size. The first camera in the From d24adbd32c2b9aeb1a40c1bb99c19e9a8e84ad71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Sat, 7 Dec 2019 22:09:03 +0100 Subject: [PATCH 4/9] aiString.length is really of type "ai_uint32" which corresponds to "c_uint32" and not to "c_size_t" (which is different on 64bit systems and 32bit systems!) Closes: https://github.com/assimp/assimp/issues/2788 --- port/PyAssimp/pyassimp/structs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/PyAssimp/pyassimp/structs.py b/port/PyAssimp/pyassimp/structs.py index b93aae68c..b506bc036 100644 --- a/port/PyAssimp/pyassimp/structs.py +++ b/port/PyAssimp/pyassimp/structs.py @@ -76,7 +76,7 @@ class String(Structure): # Binary length of the string excluding the terminal 0. This is NOT the # logical length of strings containing UTF-8 multibyte sequences! It's # 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 ("data", c_char*MAXLEN), From 630f013a5e70834f6e02cf1489b633c8b2325734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Sat, 7 Dec 2019 22:10:26 +0100 Subject: [PATCH 5/9] fix field name "Mesh.mAnimMesh" -> "Mesh.mAnimMeshes" to match the name in mesh.h: aiMesh.mAnimMeshes --- port/PyAssimp/pyassimp/structs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/PyAssimp/pyassimp/structs.py b/port/PyAssimp/pyassimp/structs.py index b506bc036..0ac498a44 100644 --- a/port/PyAssimp/pyassimp/structs.py +++ b/port/PyAssimp/pyassimp/structs.py @@ -752,7 +752,7 @@ class Mesh(Structure): # 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))), + ("mAnimMeshes", POINTER(POINTER(AnimMesh))), # Method of morphing when animeshes are specified. ("mMethod", c_uint), From 4a8b7800ff402aec168f4c6a8ee37683e1ebe036 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Mon, 9 Dec 2019 11:23:57 +0000 Subject: [PATCH 6/9] Update M3D ASCII exporter ident and extension Changed to match existing Assimp style. Set extension as per: https://gitlab.com/bztsrc/model3d/blob/master/docs/a3d_format.md --- code/Common/Exporter.cpp | 4 ++-- code/M3D/M3DExporter.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 25a78114f..784c803b0 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -103,7 +103,7 @@ void ExportSceneFBX(const char*, IOSystem*, const aiScene*, const ExportProperti void ExportSceneFBXA(const char*, IOSystem*, const aiScene*, const ExportProperties*); void ExportScene3MF( const char*, IOSystem*, const aiScene*, const ExportProperties* ); void ExportSceneM3D(const char*, IOSystem*, const aiScene*, const ExportProperties*); -void ExportSceneA3D(const char*, IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneM3DA(const char*, IOSystem*, const aiScene*, const ExportProperties*); void ExportAssimp2Json(const char* , IOSystem*, const aiScene* , const Assimp::ExportProperties*); @@ -177,7 +177,7 @@ static void setupExporterArray(std::vector &exporte #ifndef ASSIMP_BUILD_NO_M3D_EXPORTER exporters.push_back(Exporter::ExportFormatEntry("m3d", "Model 3D (binary)", "m3d", &ExportSceneM3D, 0)); - exporters.push_back(Exporter::ExportFormatEntry("a3d", "Model 3D (ascii)", "m3d", &ExportSceneA3D, 0)); + exporters.push_back(Exporter::ExportFormatEntry("m3da", "Model 3D (ascii)", "a3d", &ExportSceneM3DA, 0)); #endif #ifndef ASSIMP_BUILD_NO_3MF_EXPORTER diff --git a/code/M3D/M3DExporter.cpp b/code/M3D/M3DExporter.cpp index 0e84f6d4f..1fe6e7f76 100644 --- a/code/M3D/M3DExporter.cpp +++ b/code/M3D/M3DExporter.cpp @@ -268,7 +268,7 @@ void ExportSceneM3D( // --------------------------------------------------------------------- // Worker function for exporting a scene to ASCII A3D. // Prototyped and registered in Exporter.cpp -void ExportSceneA3D( +void ExportSceneM3DA( const char *pFile, IOSystem *pIOSystem, const aiScene *pScene, From 660f3571d8cc0dfb4ea573723938c16ca2c5506f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 9 Dec 2019 17:23:52 +0100 Subject: [PATCH 7/9] added AnimMesh.mName member Closes: https://github.com/assimp/assimp/issues/2822 --- port/PyAssimp/pyassimp/structs.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/port/PyAssimp/pyassimp/structs.py b/port/PyAssimp/pyassimp/structs.py index 0ac498a44..809afae54 100644 --- a/port/PyAssimp/pyassimp/structs.py +++ b/port/PyAssimp/pyassimp/structs.py @@ -573,6 +573,9 @@ class AnimMesh(Structure): AI_MAX_NUMBER_OF_COLOR_SETS = 0x8 _fields_ = [ + # Anim Mesh name + ("mName", String), + # 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 From 03a17f87facd5f0a0fbff7f28c35f44251263977 Mon Sep 17 00:00:00 2001 From: Alexey Panteleev Date: Tue, 17 Dec 2019 17:51:23 -0800 Subject: [PATCH 8/9] Made the CMake config more submodule friendly. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48493915e..23b6f6d61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -257,7 +257,7 @@ ELSEIF(MSVC) IF(MSVC12) ADD_COMPILE_OPTIONS(/wd4351) ENDIF() - SET(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MDd /Zi /Od") + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od") ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) IF(NOT HUNTER_ENABLED) SET(CMAKE_CXX_FLAGS "-fPIC -std=c++11 ${CMAKE_CXX_FLAGS}") From 3b7e2bc3fae142a845f1c42e694167402add4bdc Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 18 Dec 2019 16:13:23 +0000 Subject: [PATCH 9/9] Fix typos --- code/glTF/glTFAsset.h | 2 +- code/glTF2/glTF2Asset.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/glTF/glTFAsset.h b/code/glTF/glTFAsset.h index e7dd9c438..38b0951da 100644 --- a/code/glTF/glTFAsset.h +++ b/code/glTF/glTFAsset.h @@ -749,7 +749,7 @@ namespace glTF /// \fn void Read(Value& pJSON_Object, Asset& pAsset_Root) /// Get mesh data from JSON-object and place them to root asset. /// \param [in] pJSON_Object - reference to pJSON-object from which data are read. - /// \param [out] pAsset_Root - reference to root assed where data will be stored. + /// \param [out] pAsset_Root - reference to root asset where data will be stored. void Read(Value& pJSON_Object, Asset& pAsset_Root); #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC diff --git a/code/glTF2/glTF2Asset.h b/code/glTF2/glTF2Asset.h index 1fcb348bb..ee8818b56 100644 --- a/code/glTF2/glTF2Asset.h +++ b/code/glTF2/glTF2Asset.h @@ -783,7 +783,7 @@ namespace glTF2 /// \fn void Read(Value& pJSON_Object, Asset& pAsset_Root) /// Get mesh data from JSON-object and place them to root asset. /// \param [in] pJSON_Object - reference to pJSON-object from which data are read. - /// \param [out] pAsset_Root - reference to root assed where data will be stored. + /// \param [out] pAsset_Root - reference to root asset where data will be stored. void Read(Value& pJSON_Object, Asset& pAsset_Root); };