Browse Source

Merge branch 'master' into fix-msvc-emplace-warnings

Kim Kulling 2 years ago
parent
commit
b31c04e37c
100 changed files with 335 additions and 586 deletions
  1. 11 9
      CMakeLists.txt
  2. 7 118
      code/AssetLib/3DS/3DSHelper.h
  3. 1 3
      code/AssetLib/3MF/3MFTypes.h
  4. 1 1
      code/AssetLib/3MF/D3MFExporter.cpp
  5. 1 1
      code/AssetLib/3MF/D3MFOpcPackage.cpp
  6. 2 2
      code/AssetLib/3MF/XmlSerializer.cpp
  7. 1 5
      code/AssetLib/AMF/AMFImporter.cpp
  8. 4 6
      code/AssetLib/AMF/AMFImporter_Node.hpp
  9. 1 1
      code/AssetLib/Assbin/AssbinExporter.h
  10. 3 3
      code/AssetLib/Assbin/AssbinFileWriter.cpp
  11. 5 5
      code/AssetLib/Assjson/json_exporter.cpp
  12. 1 2
      code/AssetLib/Blender/BlenderBMesh.cpp
  13. 1 3
      code/AssetLib/Blender/BlenderDNA.h
  14. 1 2
      code/AssetLib/Blender/BlenderLoader.cpp
  15. 1 3
      code/AssetLib/Blender/BlenderModifier.h
  16. 7 18
      code/AssetLib/Blender/BlenderScene.h
  17. 3 7
      code/AssetLib/Blender/BlenderTessellator.cpp
  18. 4 10
      code/AssetLib/C4D/C4DImporter.cpp
  19. 1 10
      code/AssetLib/Collada/ColladaLoader.cpp
  20. 1 0
      code/AssetLib/Collada/ColladaParser.cpp
  21. 1 3
      code/AssetLib/DXF/DXFHelper.h
  22. 1 1
      code/AssetLib/DXF/DXFLoader.cpp
  23. 2 2
      code/AssetLib/FBX/FBXConverter.cpp
  24. 0 4
      code/AssetLib/FBX/FBXExportNode.h
  25. 2 6
      code/AssetLib/FBX/FBXImporter.cpp
  26. 48 33
      code/AssetLib/FBX/FBXMeshGeometry.h
  27. 1 1
      code/AssetLib/FBX/FBXParser.cpp
  28. 3 3
      code/AssetLib/HMP/HMPLoader.cpp
  29. 1 2
      code/AssetLib/IFC/IFCLoader.cpp
  30. 1 5
      code/AssetLib/Irr/IRRMeshLoader.cpp
  31. 1 3
      code/AssetLib/Irr/IRRShared.h
  32. 1 1
      code/AssetLib/LWO/LWOAnimation.cpp
  33. 1 1
      code/AssetLib/LWO/LWOLoader.cpp
  34. 1 1
      code/AssetLib/M3D/M3DImporter.h
  35. 1 3
      code/AssetLib/M3D/M3DWrapper.cpp
  36. 1 3
      code/AssetLib/M3D/M3DWrapper.h
  37. 1 1
      code/AssetLib/MD5/MD5Parser.h
  38. 1 1
      code/AssetLib/MDL/MDLMaterialLoader.cpp
  39. 1 1
      code/AssetLib/NFF/NFFLoader.h
  40. 5 5
      code/AssetLib/Obj/ObjFileMtlImporter.cpp
  41. 1 1
      code/AssetLib/Obj/ObjFileParser.cpp
  42. 11 11
      code/AssetLib/Obj/ObjTools.h
  43. 4 4
      code/AssetLib/Ogre/OgreImporter.h
  44. 0 1
      code/AssetLib/OpenGEX/OpenGEXImporter.cpp
  45. 4 16
      code/AssetLib/Ply/PlyParser.h
  46. 1 13
      code/AssetLib/Q3BSP/Q3BSPFileData.h
  47. 1 1
      code/AssetLib/Q3BSP/Q3BSPFileImporter.cpp
  48. 1 2
      code/AssetLib/SMD/SMDLoader.cpp
  49. 2 2
      code/AssetLib/SMD/SMDLoader.h
  50. 7 7
      code/AssetLib/Step/STEPFile.h
  51. 4 19
      code/AssetLib/X/XFileHelper.h
  52. 1 3
      code/AssetLib/X/XFileImporter.cpp
  53. 1 1
      code/AssetLib/X/XFileParser.cpp
  54. 2 10
      code/AssetLib/X3D/X3DExporter.hpp
  55. 1 1
      code/AssetLib/X3D/X3DImporter.cpp
  56. 1 1
      code/AssetLib/X3D/X3DImporter_Geometry2D.cpp
  57. 2 6
      code/AssetLib/X3D/X3DImporter_Node.hpp
  58. 1 2
      code/AssetLib/XGL/XGLLoader.cpp
  59. 10 14
      code/AssetLib/glTF/glTFAsset.h
  60. 3 3
      code/AssetLib/glTF/glTFExporter.cpp
  61. 1 1
      code/AssetLib/glTF/glTFImporter.cpp
  62. 9 19
      code/AssetLib/glTF2/glTF2Asset.h
  63. 1 1
      code/AssetLib/glTF2/glTF2Asset.inl
  64. 9 9
      code/AssetLib/glTF2/glTF2Exporter.cpp
  65. 1 5
      code/AssetLib/glTF2/glTF2Importer.cpp
  66. 1 1
      code/AssetLib/glTF2/glTF2Importer.h
  67. 1 1
      code/Common/BaseImporter.cpp
  68. 1 3
      code/Common/FileSystemFilter.h
  69. 2 2
      code/Common/Importer.cpp
  70. 1 1
      code/Common/PolyTools.h
  71. 1 1
      code/Common/RemoveComments.cpp
  72. 1 1
      code/Common/ScenePreprocessor.cpp
  73. 1 1
      code/Common/SpatialSort.cpp
  74. 1 1
      code/Common/Version.cpp
  75. 33 22
      code/PostProcessing/JoinVerticesProcess.cpp
  76. 43 50
      code/PostProcessing/LimitBoneWeightsProcess.cpp
  77. 1 1
      include/assimp/Bitmap.h
  78. 1 1
      include/assimp/DefaultIOStream.h
  79. 1 1
      include/assimp/Hash.h
  80. 1 3
      include/assimp/IOStream.hpp
  81. 1 3
      include/assimp/IOStreamBuffer.h
  82. 1 4
      include/assimp/IOSystem.hpp
  83. 1 4
      include/assimp/LineSplitter.h
  84. 1 1
      include/assimp/LogAux.h
  85. 1 2
      include/assimp/MemoryIOWrapper.h
  86. 2 2
      include/assimp/ObjMaterial.h
  87. 1 3
      include/assimp/Profiler.h
  88. 2 6
      include/assimp/ProgressHandler.hpp
  89. 2 6
      include/assimp/SceneCombiner.h
  90. 1 1
      include/assimp/SpatialSort.h
  91. 2 2
      include/assimp/XmlParser.h
  92. 2 2
      include/assimp/aabb.h
  93. 1 1
      include/assimp/ai_assert.h
  94. 3 3
      include/assimp/anim.h
  95. 1 1
      include/assimp/defs.h
  96. 3 3
      include/assimp/material.inl
  97. 1 1
      include/assimp/quaternion.inl
  98. 1 1
      include/assimp/scene.h
  99. 4 4
      include/assimp/vector3.h
  100. 4 4
      port/AndroidJNI/AndroidJNIIOSystem.cpp

+ 11 - 9
CMakeLists.txt

@@ -1,6 +1,6 @@
 # Open Asset Import Library (assimp)
 # Open Asset Import Library (assimp)
 # ----------------------------------------------------------------------
 # ----------------------------------------------------------------------
-# Copyright (c) 2006-2022, assimp team
+# Copyright (c) 2006-2023, assimp team
 #
 #
 # All rights reserved.
 # All rights reserved.
 #
 #
@@ -262,13 +262,13 @@ IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT MINGW)
   ENDIF()
   ENDIF()
   # hide all not-exported symbols
   # hide all not-exported symbols
   IF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64" )
   IF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64" )
-	SET(CMAKE_CXX_FLAGS "-mxgot -fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
-	SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
-	SET(LIBSTDC++_LIBRARIES -lstdc++)
+    SET(CMAKE_CXX_FLAGS "-mxgot -fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
+    SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
+    SET(LIBSTDC++_LIBRARIES -lstdc++)
   ELSE()
   ELSE()
-	SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
-	SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
-	SET(LIBSTDC++_LIBRARIES -lstdc++)
+    SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
+    SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
+    SET(LIBSTDC++_LIBRARIES -lstdc++)
   ENDIF()
   ENDIF()
 ELSEIF(MSVC)
 ELSEIF(MSVC)
   # enable multi-core compilation with MSVC
   # enable multi-core compilation with MSVC
@@ -277,13 +277,15 @@ ELSEIF(MSVC)
   ELSE() # msvc
   ELSE() # msvc
     ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX)
     ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX)
   ENDIF()
   ENDIF()
+  
   # disable "elements of array '' will be default initialized" warning on MSVC2013
   # disable "elements of array '' will be default initialized" warning on MSVC2013
   IF(MSVC12)
   IF(MSVC12)
     ADD_COMPILE_OPTIONS(/wd4351)	
     ADD_COMPILE_OPTIONS(/wd4351)	
   ENDIF()
   ENDIF()
-  ADD_COMPILE_OPTIONS(/wd4244) #supress warning for double to float conversion if Double precission is activated
+  # supress warning for double to float conversion if Double precission is activated
+  ADD_COMPILE_OPTIONS(/wd4244) 
   SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
   SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
-  SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
+  SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
   SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")
   SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")
 ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
 ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
   IF(NOT ASSIMP_HUNTER_ENABLED)
   IF(NOT ASSIMP_HUNTER_ENABLED)

+ 7 - 118
code/AssetLib/3DS/3DSHelper.h

@@ -322,7 +322,6 @@ struct Texture {
     //! Default constructor
     //! Default constructor
     Texture() AI_NO_EXCEPT
     Texture() AI_NO_EXCEPT
             : mTextureBlend(0.0f),
             : mTextureBlend(0.0f),
-              mMapName(),
               mOffsetU(0.0),
               mOffsetU(0.0),
               mOffsetV(0.0),
               mOffsetV(0.0),
               mScaleU(1.0),
               mScaleU(1.0),
@@ -334,51 +333,11 @@ struct Texture {
         mTextureBlend = get_qnan();
         mTextureBlend = get_qnan();
     }
     }
 
 
-    Texture(const Texture &other) :
-            mTextureBlend(other.mTextureBlend),
-            mMapName(other.mMapName),
-            mOffsetU(other.mOffsetU),
-            mOffsetV(other.mOffsetV),
-            mScaleU(other.mScaleU),
-            mScaleV(other.mScaleV),
-            mRotation(other.mRotation),
-            mMapMode(other.mMapMode),
-            bPrivate(other.bPrivate),
-            iUVSrc(other.iUVSrc) {
-        // empty
-    }
-
-    Texture(Texture &&other) AI_NO_EXCEPT : mTextureBlend(other.mTextureBlend),
-                                            mMapName(std::move(other.mMapName)),
-                                            mOffsetU(other.mOffsetU),
-                                            mOffsetV(other.mOffsetV),
-                                            mScaleU(other.mScaleU),
-                                            mScaleV(other.mScaleV),
-                                            mRotation(other.mRotation),
-                                            mMapMode(other.mMapMode),
-                                            bPrivate(other.bPrivate),
-                                            iUVSrc(other.iUVSrc) {
-        // empty
-    }
+    Texture(const Texture &other) = default;
 
 
-    Texture &operator=(Texture &&other) AI_NO_EXCEPT {
-        if (this == &other) {
-            return *this;
-        }
-
-        mTextureBlend = other.mTextureBlend;
-        mMapName = std::move(other.mMapName);
-        mOffsetU = other.mOffsetU;
-        mOffsetV = other.mOffsetV;
-        mScaleU = other.mScaleU;
-        mScaleV = other.mScaleV;
-        mRotation = other.mRotation;
-        mMapMode = other.mMapMode;
-        bPrivate = other.bPrivate;
-        iUVSrc = other.iUVSrc;
+    Texture(Texture &&other) AI_NO_EXCEPT = default;
 
 
-        return *this;
-    }
+    Texture &operator=(Texture &&other) AI_NO_EXCEPT = default;
 
 
     //! Specifies the blend factor for the texture
     //! Specifies the blend factor for the texture
     ai_real mTextureBlend;
     ai_real mTextureBlend;
@@ -436,83 +395,13 @@ struct Material {
         // empty
         // empty
     }
     }
 
 
-    Material(const Material &other) :
-            mName(other.mName),
-            mDiffuse(other.mDiffuse),
-            mSpecularExponent(other.mSpecularExponent),
-            mShininessStrength(other.mShininessStrength),
-            mSpecular(other.mSpecular),
-            mAmbient(other.mAmbient),
-            mShading(other.mShading),
-            mTransparency(other.mTransparency),
-            sTexDiffuse(other.sTexDiffuse),
-            sTexOpacity(other.sTexOpacity),
-            sTexSpecular(other.sTexSpecular),
-            sTexReflective(other.sTexReflective),
-            sTexBump(other.sTexBump),
-            sTexEmissive(other.sTexEmissive),
-            sTexShininess(other.sTexShininess),
-            mBumpHeight(other.mBumpHeight),
-            mEmissive(other.mEmissive),
-            sTexAmbient(other.sTexAmbient),
-            mTwoSided(other.mTwoSided) {
-        // empty
-    }
-
-    //! Move constructor. This is explicitly written because MSVC doesn't support defaulting it
-    Material(Material &&other) AI_NO_EXCEPT : mName(std::move(other.mName)),
-                                              mDiffuse(other.mDiffuse),
-                                              mSpecularExponent(other.mSpecularExponent),
-                                              mShininessStrength(other.mShininessStrength),
-                                              mSpecular(other.mSpecular),
-                                              mAmbient(other.mAmbient),
-                                              mShading(other.mShading),
-                                              mTransparency(other.mTransparency),
-                                              sTexDiffuse(std::move(other.sTexDiffuse)),
-                                              sTexOpacity(std::move(other.sTexOpacity)),
-                                              sTexSpecular(std::move(other.sTexSpecular)),
-                                              sTexReflective(std::move(other.sTexReflective)),
-                                              sTexBump(std::move(other.sTexBump)),
-                                              sTexEmissive(std::move(other.sTexEmissive)),
-                                              sTexShininess(std::move(other.sTexShininess)),
-                                              mBumpHeight(other.mBumpHeight),
-                                              mEmissive(other.mEmissive),
-                                              sTexAmbient(std::move(other.sTexAmbient)),
-                                              mTwoSided(other.mTwoSided) {
-        // empty
-    }
+    Material(const Material &other) = default;
 
 
-    Material &operator=(Material &&other) AI_NO_EXCEPT {
-        if (this == &other) {
-            return *this;
-        }
-
-        mName = std::move(other.mName);
-        mDiffuse = other.mDiffuse;
-        mSpecularExponent = other.mSpecularExponent;
-        mShininessStrength = other.mShininessStrength,
-        mSpecular = other.mSpecular;
-        mAmbient = other.mAmbient;
-        mShading = other.mShading;
-        mTransparency = other.mTransparency;
-        sTexDiffuse = std::move(other.sTexDiffuse);
-        sTexOpacity = std::move(other.sTexOpacity);
-        sTexSpecular = std::move(other.sTexSpecular);
-        sTexReflective = std::move(other.sTexReflective);
-        sTexBump = std::move(other.sTexBump);
-        sTexEmissive = std::move(other.sTexEmissive);
-        sTexShininess = std::move(other.sTexShininess);
-        mBumpHeight = other.mBumpHeight;
-        mEmissive = other.mEmissive;
-        sTexAmbient = std::move(other.sTexAmbient);
-        mTwoSided = other.mTwoSided;
+    Material(Material &&other) AI_NO_EXCEPT = default;
 
 
-        return *this;
-    }
+    Material &operator=(Material &&other) AI_NO_EXCEPT = default;
 
 
-    virtual ~Material() {
-        // empty
-    }
+    virtual ~Material() = default;
 
 
     //! Name of the material
     //! Name of the material
     std::string mName;
     std::string mName;

+ 1 - 3
code/AssetLib/3MF/3MFTypes.h

@@ -69,9 +69,7 @@ public:
         // empty
         // empty
     }
     }
 
 
-    virtual ~Resource() {
-        // empty
-    }
+    virtual ~Resource() = default;
 
 
     virtual ResourceType getType() const {
     virtual ResourceType getType() const {
         return ResourceType::RT_Unknown;
         return ResourceType::RT_Unknown;

+ 1 - 1
code/AssetLib/3MF/D3MFExporter.cpp

@@ -83,7 +83,7 @@ void ExportScene3MF(const char *pFile, IOSystem *pIOSystem, const aiScene *pScen
 namespace D3MF {
 namespace D3MF {
 
 
 D3MFExporter::D3MFExporter(const char *pFile, const aiScene *pScene) :
 D3MFExporter::D3MFExporter(const char *pFile, const aiScene *pScene) :
-        mArchiveName(pFile), m_zipArchive(nullptr), mScene(pScene), mModelOutput(), mRelOutput(), mContentOutput(), mBuildItems(), mRelations() {
+        mArchiveName(pFile), m_zipArchive(nullptr), mScene(pScene) {
     // empty
     // empty
 }
 }
 
 

+ 1 - 1
code/AssetLib/3MF/D3MFOpcPackage.cpp

@@ -160,7 +160,7 @@ D3MFOpcPackage::D3MFOpcPackage(IOSystem *pIOHandler, const std::string &rFile) :
                     // deal with zip-bug
                     // deal with zip-bug
                     rootFile = rootFile.substr(1);
                     rootFile = rootFile.substr(1);
                 }
                 }
-            } 
+            }
 
 
             ASSIMP_LOG_VERBOSE_DEBUG(rootFile);
             ASSIMP_LOG_VERBOSE_DEBUG(rootFile);
 
 

+ 2 - 2
code/AssetLib/3MF/XmlSerializer.cpp

@@ -216,7 +216,7 @@ void XmlSerializer::ImportXml(aiScene *scene) {
     if (nullptr == scene) {
     if (nullptr == scene) {
         return;
         return;
     }
     }
-    
+
     scene->mRootNode = new aiNode(XmlTag::RootTag);
     scene->mRootNode = new aiNode(XmlTag::RootTag);
     XmlNode node = mXmlParser->getRootNode().child(XmlTag::model);
     XmlNode node = mXmlParser->getRootNode().child(XmlTag::model);
     if (node.empty()) {
     if (node.empty()) {
@@ -444,7 +444,7 @@ void XmlSerializer::ImportTriangles(XmlNode &node, aiMesh *mesh) {
                             }
                             }
                             mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
                             mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
                         }
                         }
-                    } 
+                    }
                 }
                 }
             }
             }
 
 

+ 1 - 5
code/AssetLib/AMF/AMFImporter.cpp

@@ -83,11 +83,7 @@ void AMFImporter::Clear() {
 
 
 AMFImporter::AMFImporter() AI_NO_EXCEPT :
 AMFImporter::AMFImporter() AI_NO_EXCEPT :
         mNodeElement_Cur(nullptr),
         mNodeElement_Cur(nullptr),
-        mXmlParser(nullptr),
-        mUnit(),
-        mVersion(),
-        mMaterial_Converted(),
-        mTexture_Converted() {
+        mXmlParser(nullptr) {
     // empty
     // empty
 }
 }
 
 

+ 4 - 6
code/AssetLib/AMF/AMFImporter_Node.hpp

@@ -88,9 +88,7 @@ public:
 	std::list<AMFNodeElementBase *> Child; ///< Child elements.
 	std::list<AMFNodeElementBase *> Child; ///< Child elements.
 
 
 public: /// Destructor, virtual..
 public: /// Destructor, virtual..
-	virtual ~AMFNodeElementBase() {
-		// empty
-	}
+	virtual ~AMFNodeElementBase() = default;
 
 
 	/// Disabled copy constructor and co.
 	/// Disabled copy constructor and co.
 	AMFNodeElementBase(const AMFNodeElementBase &pNodeElement) = delete;
 	AMFNodeElementBase(const AMFNodeElementBase &pNodeElement) = delete;
@@ -103,7 +101,7 @@ protected:
 	/// \param [in] pType - element type.
 	/// \param [in] pType - element type.
 	/// \param [in] pParent - parent element.
 	/// \param [in] pParent - parent element.
 	AMFNodeElementBase(const EType pType, AMFNodeElementBase *pParent) :
 	AMFNodeElementBase(const EType pType, AMFNodeElementBase *pParent) :
-			Type(pType), ID(), Parent(pParent), Child() {
+			Type(pType), Parent(pParent) {
 		// empty
 		// empty
 	}
 	}
 }; // class IAMFImporter_NodeElement
 }; // class IAMFImporter_NodeElement
@@ -174,7 +172,7 @@ struct AMFColor : public AMFNodeElementBase {
 	/// @brief  Constructor.
 	/// @brief  Constructor.
 	/// @param [in] pParent - pointer to parent node.
 	/// @param [in] pParent - pointer to parent node.
 	AMFColor(AMFNodeElementBase *pParent) :
 	AMFColor(AMFNodeElementBase *pParent) :
-			AMFNodeElementBase(ENET_Color, pParent), Composed(false), Color(), Profile() {
+			AMFNodeElementBase(ENET_Color, pParent), Composed(false), Color() {
 		// empty
 		// empty
 	}
 	}
 };
 };
@@ -270,7 +268,7 @@ struct AMFTexMap : public AMFNodeElementBase {
 	/// Constructor.
 	/// Constructor.
 	/// \param [in] pParent - pointer to parent node.
 	/// \param [in] pParent - pointer to parent node.
 	AMFTexMap(AMFNodeElementBase *pParent) :
 	AMFTexMap(AMFNodeElementBase *pParent) :
-			AMFNodeElementBase(ENET_TexMap, pParent), TextureCoordinate{}, TextureID_R(), TextureID_G(), TextureID_B(), TextureID_A() {
+			AMFNodeElementBase(ENET_TexMap, pParent), TextureCoordinate{} {
 		// empty
 		// empty
 	}
 	}
 };
 };

+ 1 - 1
code/AssetLib/Assbin/AssbinExporter.h

@@ -56,5 +56,5 @@ namespace Assimp {
 void ASSIMP_API ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/);
 void ASSIMP_API ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/);
 
 
 }
 }
-#endif 
+#endif
 #endif // AI_ASSBINEXPORTER_H_INC
 #endif // AI_ASSBINEXPORTER_H_INC

+ 3 - 3
code/AssetLib/Assbin/AssbinFileWriter.cpp

@@ -291,15 +291,15 @@ public:
     size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) override {
     size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) override {
         return 0;
         return 0;
     }
     }
-    
+
     aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) override {
     aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) override {
         return aiReturn_FAILURE;
         return aiReturn_FAILURE;
     }
     }
-    
+
     size_t Tell() const override {
     size_t Tell() const override {
         return cursor;
         return cursor;
     }
     }
-    
+
     void Flush() override {
     void Flush() override {
         // not implemented
         // not implemented
     }
     }

+ 5 - 5
code/AssetLib/Assjson/json_exporter.cpp

@@ -43,7 +43,7 @@ public:
         Flag_WriteSpecialFloats = 0x2,
         Flag_WriteSpecialFloats = 0x2,
         Flag_SkipWhitespaces = 0x4
         Flag_SkipWhitespaces = 0x4
     };
     };
-    
+
     JSONWriter(Assimp::IOStream &out, unsigned int flags = 0u) :
     JSONWriter(Assimp::IOStream &out, unsigned int flags = 0u) :
             out(out), indent (""), newline("\n"), space(" "), buff (), first(false), flags(flags) {
             out(out), indent (""), newline("\n"), space(" "), buff (), first(false), flags(flags) {
         // make sure that all formatting happens using the standard, C locale and not the user's current locale
         // make sure that all formatting happens using the standard, C locale and not the user's current locale
@@ -499,18 +499,18 @@ static void Write(JSONWriter &out, const aiMaterial &ai, bool is_elem = true) {
                 }
                 }
                 break;
                 break;
 
 
-            case aiPTI_String: 
+            case aiPTI_String:
                 {
                 {
                     aiString s;
                     aiString s;
                     aiGetMaterialString(&ai, prop->mKey.data, prop->mSemantic, prop->mIndex, &s);
                     aiGetMaterialString(&ai, prop->mKey.data, prop->mSemantic, prop->mIndex, &s);
                     out.SimpleValue(s);
                     out.SimpleValue(s);
-                } 
+                }
                 break;
                 break;
-            case aiPTI_Buffer: 
+            case aiPTI_Buffer:
                 {
                 {
                     // binary data is written as series of hex-encoded octets
                     // binary data is written as series of hex-encoded octets
                     out.SimpleValue(prop->mData, prop->mDataLength);
                     out.SimpleValue(prop->mData, prop->mDataLength);
-                } 
+                }
                 break;
                 break;
             default:
             default:
                 ai_assert(false);
                 ai_assert(false);

+ 1 - 2
code/AssetLib/Blender/BlenderBMesh.cpp

@@ -52,8 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 namespace Assimp {
 namespace Assimp {
 template <>
 template <>
 const char *LogFunctions<BlenderBMeshConverter>::Prefix() {
 const char *LogFunctions<BlenderBMeshConverter>::Prefix() {
-    static auto prefix = "BLEND_BMESH: ";
-    return prefix;
+    return "BLEND_BMESH: ";
 }
 }
 } // namespace Assimp
 } // namespace Assimp
 
 

+ 1 - 3
code/AssetLib/Blender/BlenderDNA.h

@@ -106,9 +106,7 @@ struct ElemBase {
         // empty
         // empty
     }
     }
 
 
-    virtual ~ElemBase() {
-        // empty
-    }
+    virtual ~ElemBase() = default;
 
 
     /** Type name of the element. The type
     /** Type name of the element. The type
      * string points is the `c_str` of the `name` attribute of the
      * string points is the `c_str` of the `name` attribute of the

+ 1 - 2
code/AssetLib/Blender/BlenderLoader.cpp

@@ -80,8 +80,7 @@ namespace Assimp {
 
 
 template <>
 template <>
 const char *LogFunctions<BlenderImporter>::Prefix() {
 const char *LogFunctions<BlenderImporter>::Prefix() {
-    static auto prefix = "BLEND: ";
-    return prefix;
+    return "BLEND: ";
 }
 }
 
 
 } // namespace Assimp
 } // namespace Assimp

+ 1 - 3
code/AssetLib/Blender/BlenderModifier.h

@@ -62,9 +62,7 @@ public:
     /**
     /**
      *  The class destructor, virtual.
      *  The class destructor, virtual.
      */
      */
-    virtual ~BlenderModifier() {
-        // empty
-    }
+    virtual ~BlenderModifier() = default;
 
 
     // --------------------
     // --------------------
     /**
     /**

+ 7 - 18
code/AssetLib/Blender/BlenderScene.h

@@ -182,7 +182,7 @@ struct MVert : ElemBase {
     int bweight;
     int bweight;
 
 
     MVert() :
     MVert() :
-            ElemBase(), flag(0), mat_nr(0), bweight(0) {}
+            flag(0), mat_nr(0), bweight(0) {}
 };
 };
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
@@ -417,7 +417,6 @@ struct CustomDataLayer : ElemBase {
     std::shared_ptr<ElemBase> data; // must be converted to real type according type member
     std::shared_ptr<ElemBase> data; // must be converted to real type according type member
 
 
     CustomDataLayer() :
     CustomDataLayer() :
-            ElemBase(),
             type(0),
             type(0),
             offset(0),
             offset(0),
             flag(0),
             flag(0),
@@ -729,7 +728,7 @@ struct Object : ElemBase {
     ListBase modifiers;
     ListBase modifiers;
 
 
     Object() :
     Object() :
-            ElemBase(), type(Type_EMPTY), parent(nullptr), track(), proxy(), proxy_from(), data() {
+            type(Type_EMPTY), parent(nullptr) {
         // empty
         // empty
     }
     }
 };
 };
@@ -741,8 +740,7 @@ struct Base : ElemBase {
     std::shared_ptr<Object> object WARN;
     std::shared_ptr<Object> object WARN;
 
 
     Base() :
     Base() :
-            ElemBase(), prev(nullptr), next(), object() {
-        // empty
+            prev(nullptr) {
         // empty
         // empty
     }
     }
 };
 };
@@ -758,10 +756,7 @@ struct Scene : ElemBase {
 
 
     ListBase base;
     ListBase base;
 
 
-    Scene() :
-            ElemBase(), camera(), world(), basact(), master_collection() {
-        // empty
-    }
+    Scene() = default;
 };
 };
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
@@ -791,10 +786,7 @@ struct Image : ElemBase {
 
 
     short gen_x, gen_y, gen_type;
     short gen_x, gen_y, gen_type;
 
 
-    Image() :
-            ElemBase() {
-        // empty
-    }
+    Image() = default;
 };
 };
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
@@ -884,7 +876,7 @@ struct Tex : ElemBase {
     //char use_nodes;
     //char use_nodes;
 
 
     Tex() :
     Tex() :
-            ElemBase(), imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS), ima() {
+            imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS) {
         // empty
         // empty
     }
     }
 };
 };
@@ -976,10 +968,7 @@ struct MTex : ElemBase {
     //float shadowfac;
     //float shadowfac;
     //float zenupfac, zendownfac, blendfac;
     //float zenupfac, zendownfac, blendfac;
 
 
-    MTex() :
-            ElemBase() {
-        // empty
-    }
+    MTex() = default;
 };
 };
 
 
 } // namespace Blender
 } // namespace Blender

+ 3 - 7
code/AssetLib/Blender/BlenderTessellator.cpp

@@ -62,8 +62,7 @@ namspace Assimp
 {
 {
     template< > const char* LogFunctions< BlenderTessellatorGL >::Prefix()
     template< > const char* LogFunctions< BlenderTessellatorGL >::Prefix()
     {
     {
-        static auto prefix = "BLEND_TESS_GL: ";
-        return prefix;
+        return "BLEND_TESS_GL: ";
     }
     }
 }
 }
 
 
@@ -81,9 +80,7 @@ BlenderTessellatorGL::BlenderTessellatorGL( BlenderBMeshConverter& converter ):
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
-BlenderTessellatorGL::~BlenderTessellatorGL( )
-{
-}
+BlenderTessellatorGL::~BlenderTessellatorGL() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 void BlenderTessellatorGL::Tessellate( const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices )
 void BlenderTessellatorGL::Tessellate( const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices )
@@ -259,8 +256,7 @@ namespace Assimp
 {
 {
     template< > const char* LogFunctions< BlenderTessellatorP2T >::Prefix()
     template< > const char* LogFunctions< BlenderTessellatorP2T >::Prefix()
     {
     {
-        static auto prefix = "BLEND_TESS_P2T: ";
-        return prefix;
+        return "BLEND_TESS_P2T: ";
     }
     }
 }
 }
 
 

+ 4 - 10
code/AssetLib/C4D/C4DImporter.cpp

@@ -86,8 +86,7 @@ void GetWriterInfo(int &id, String &appname) {
 
 
 namespace Assimp {
 namespace Assimp {
     template<> const char* LogFunctions<C4DImporter>::Prefix() {
     template<> const char* LogFunctions<C4DImporter>::Prefix() {
-        static auto prefix = "C4D: ";
-        return prefix;
+        return "C4D: ";
     }
     }
 }
 }
 
 
@@ -106,15 +105,10 @@ static const aiImporterDesc desc = {
 
 
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
-C4DImporter::C4DImporter()
-: BaseImporter() {
-    // empty
-}
+C4DImporter::C4DImporter() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
-C4DImporter::~C4DImporter() {
-    // empty
-}
+C4DImporter::~C4DImporter() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 bool C4DImporter::CanRead( const std::string& pFile, IOSystem* /*pIOHandler*/, bool /*checkSig*/) const {
 bool C4DImporter::CanRead( const std::string& pFile, IOSystem* /*pIOHandler*/, bool /*checkSig*/) const {
@@ -124,7 +118,7 @@ bool C4DImporter::CanRead( const std::string& pFile, IOSystem* /*pIOHandler*/, b
     } else if ((!extension.length() || checkSig) && pIOHandler)   {
     } else if ((!extension.length() || checkSig) && pIOHandler)   {
         // TODO
         // TODO
     }
     }
-    
+
     return false;
     return false;
 }
 }
 
 

+ 1 - 10
code/AssetLib/Collada/ColladaLoader.cpp

@@ -92,15 +92,6 @@ inline void AddNodeMetaData(aiNode *node, const std::string &key, const T &value
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by Importer
 // Constructor to be privately used by Importer
 ColladaLoader::ColladaLoader() :
 ColladaLoader::ColladaLoader() :
-        mFileName(),
-        mMeshIndexByID(),
-        mMaterialIndexByName(),
-        mMeshes(),
-        newMats(),
-        mCameras(),
-        mLights(),
-        mTextures(),
-        mAnims(),
         noSkeletonMesh(false),
         noSkeletonMesh(false),
         removeEmptyBones(false),
         removeEmptyBones(false),
         ignoreUpDirection(false),
         ignoreUpDirection(false),
@@ -1523,7 +1514,7 @@ void ColladaLoader::AddTexture(aiMaterial &mat,
         map = -1;
         map = -1;
         for (std::string::const_iterator it = sampler.mUVChannel.begin(); it != sampler.mUVChannel.end(); ++it) {
         for (std::string::const_iterator it = sampler.mUVChannel.begin(); it != sampler.mUVChannel.end(); ++it) {
             if (IsNumeric(*it)) {
             if (IsNumeric(*it)) {
-                map = strtoul10(&(*it));        
+                map = strtoul10(&(*it));
                 break;
                 break;
             }
             }
         }
         }

+ 1 - 0
code/AssetLib/Collada/ColladaParser.cpp

@@ -762,6 +762,7 @@ void ColladaParser::ReadControllerWeights(XmlNode &node, Collada::Controller &pC
                 if (text == nullptr) {
                 if (text == nullptr) {
                     throw DeadlyImportError("Out of data while reading <vertex_weights>");
                     throw DeadlyImportError("Out of data while reading <vertex_weights>");
                 }
                 }
+                SkipSpacesAndLineEnd(&text);
                 it->first = strtoul10(text, &text);
                 it->first = strtoul10(text, &text);
                 SkipSpacesAndLineEnd(&text);
                 SkipSpacesAndLineEnd(&text);
                 if (*text == 0) {
                 if (*text == 0) {

+ 1 - 3
code/AssetLib/DXF/DXFHelper.h

@@ -65,7 +65,6 @@ public:
     LineReader(StreamReaderLE& reader)
     LineReader(StreamReaderLE& reader)
     : splitter(reader,false,true)
     : splitter(reader,false,true)
     , groupcode( 0 )
     , groupcode( 0 )
-    , value()
     , end() {
     , end() {
         // empty
         // empty
     }
     }
@@ -186,8 +185,7 @@ struct InsertBlock {
     InsertBlock()
     InsertBlock()
     : pos()
     : pos()
     , scale(1.f,1.f,1.f)
     , scale(1.f,1.f,1.f)
-    , angle()
-    , name() {
+    , angle() {
         // empty
         // empty
     }
     }
 
 

+ 1 - 1
code/AssetLib/DXF/DXFLoader.cpp

@@ -371,7 +371,7 @@ void DXFImporter::ExpandBlockReferences(DXF::Block& bl,const DXF::BlockMap& bloc
                 ASSIMP_LOG_ERROR("DXF: PolyLine instance is nullptr, skipping.");
                 ASSIMP_LOG_ERROR("DXF: PolyLine instance is nullptr, skipping.");
                 continue;
                 continue;
             }
             }
-            
+
             std::shared_ptr<DXF::PolyLine> pl_out = std::shared_ptr<DXF::PolyLine>(new DXF::PolyLine(*pl_in));
             std::shared_ptr<DXF::PolyLine> pl_out = std::shared_ptr<DXF::PolyLine>(new DXF::PolyLine(*pl_in));
 
 
             if (bl_src.base.Length() || insert.scale.x!=1.f || insert.scale.y!=1.f || insert.scale.z!=1.f || insert.angle || insert.pos.Length()) {
             if (bl_src.base.Length() || insert.scale.x!=1.f || insert.scale.y!=1.f || insert.scale.z!=1.f || insert.angle || insert.pos.Length()) {

+ 2 - 2
code/AssetLib/FBX/FBXConverter.cpp

@@ -1563,7 +1563,7 @@ void FBXConverter::ConvertWeights(aiMesh *out, const MeshGeometry &geo, const ai
         out->mBones = nullptr;
         out->mBones = nullptr;
         out->mNumBones = 0;
         out->mNumBones = 0;
         return;
         return;
-    } 
+    }
 
 
     out->mBones = new aiBone *[bones.size()]();
     out->mBones = new aiBone *[bones.size()]();
     out->mNumBones = static_cast<unsigned int>(bones.size());
     out->mNumBones = static_cast<unsigned int>(bones.size());
@@ -3228,7 +3228,7 @@ aiNodeAnim* FBXConverter::GenerateSimpleNodeAnim(const std::string& name,
     }
     }
 
 
     bool ok = false;
     bool ok = false;
-    
+
     const auto zero_epsilon = ai_epsilon;
     const auto zero_epsilon = ai_epsilon;
 
 
     const aiVector3D& preRotation = PropertyGet<aiVector3D>(props, "PreRotation", ok);
     const aiVector3D& preRotation = PropertyGet<aiVector3D>(props, "PreRotation", ok);

+ 0 - 4
code/AssetLib/FBX/FBXExportNode.h

@@ -77,8 +77,6 @@ public: // constructors
     /// The class constructor with the name.
     /// The class constructor with the name.
     Node(const std::string& n)
     Node(const std::string& n)
     : name(n)
     : name(n)
-    , properties()
-    , children()
     , force_has_children( false ) {
     , force_has_children( false ) {
         // empty
         // empty
     }
     }
@@ -87,8 +85,6 @@ public: // constructors
     template <typename... More>
     template <typename... More>
     Node(const std::string& n, More&&... more)
     Node(const std::string& n, More&&... more)
     : name(n)
     : name(n)
-    , properties()
-    , children()
     , force_has_children(false) {
     , force_has_children(false) {
         AddProperties(std::forward<More>(more)...);
         AddProperties(std::forward<More>(more)...);
     }
     }

+ 2 - 6
code/AssetLib/FBX/FBXImporter.cpp

@@ -62,8 +62,7 @@ namespace Assimp {
 
 
 template <>
 template <>
 const char *LogFunctions<FBXImporter>::Prefix() {
 const char *LogFunctions<FBXImporter>::Prefix() {
-	static auto prefix = "FBX: ";
-	return prefix;
+	return "FBX: ";
 }
 }
 
 
 } // namespace Assimp
 } // namespace Assimp
@@ -90,10 +89,7 @@ static const aiImporterDesc desc = {
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by #Importer
 // Constructor to be privately used by #Importer
-FBXImporter::FBXImporter() :
-        mSettings() {
-    // empty
-}
+FBXImporter::FBXImporter() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Returns whether the class can handle the format of the given file.
 // Returns whether the class can handle the format of the given file.

+ 48 - 33
code/AssetLib/FBX/FBXMeshGeometry.h

@@ -2,8 +2,7 @@
 Open Asset Import Library (assimp)
 Open Asset Import Library (assimp)
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 
 
-Copyright (c) 2006-2022, assimp team
-
+Copyright (c) 2006-2023, assimp team
 
 
 All rights reserved.
 All rights reserved.
 
 
@@ -53,22 +52,26 @@ namespace Assimp {
 namespace FBX {
 namespace FBX {
 
 
 /**
 /**
- *  DOM base class for all kinds of FBX geometry
+ *  @brief DOM base class for all kinds of FBX geometry
  */
  */
 class Geometry : public Object {
 class Geometry : public Object {
 public:
 public:
     /// @brief The class constructor with all parameters.
     /// @brief The class constructor with all parameters.
     /// @param id       The id.
     /// @param id       The id.
-    /// @param element  
-    /// @param name 
-    /// @param doc 
+    /// @param element  The element instance
+    /// @param name     The name instance
+    /// @param doc      The document instance
     Geometry( uint64_t id, const Element& element, const std::string& name, const Document& doc );
     Geometry( uint64_t id, const Element& element, const std::string& name, const Document& doc );
+    
+    /// @brief The class destructor, default.
     virtual ~Geometry() = default;
     virtual ~Geometry() = default;
 
 
-    /// Get the Skin attached to this geometry or nullptr
+    /// @brief Get the Skin attached to this geometry or nullptr.
+    /// @return The deformer skip instance as a pointer, nullptr if none.
     const Skin* DeformerSkin() const;
     const Skin* DeformerSkin() const;
 
 
-    /// Get the BlendShape attached to this geometry or nullptr
+    /// @brief Get the BlendShape attached to this geometry or nullptr
+    /// @return The blendshape arrays.
     const std::vector<const BlendShape*>& GetBlendShapes() const;
     const std::vector<const BlendShape*>& GetBlendShapes() const;
 
 
 private:
 private:
@@ -78,59 +81,71 @@ private:
 
 
 typedef std::vector<int> MatIndexArray;
 typedef std::vector<int> MatIndexArray;
 
 
-
 /**
 /**
- *  DOM class for FBX geometry of type "Mesh"
+ *  @brief DOM class for FBX geometry of type "Mesh"
  */
  */
 class MeshGeometry : public Geometry {
 class MeshGeometry : public Geometry {
 public:
 public:
-    /** The class constructor */
+    /// @brief The class constructor
+    /// @param id       The id.
+    /// @param element  The element instance
+    /// @param name     The name instance
+    /// @param doc      The document instance
     MeshGeometry( uint64_t id, const Element& element, const std::string& name, const Document& doc );
     MeshGeometry( uint64_t id, const Element& element, const std::string& name, const Document& doc );
 
 
-    /** The class destructor */
+    /// @brief The class destructor, default.
     virtual ~MeshGeometry() = default;
     virtual ~MeshGeometry() = default;
 
 
-    /** Get a list of all vertex points, non-unique*/
+    /// brief Get a vector of all vertex points, non-unique.
+    /// @return The vertices vector.
     const std::vector<aiVector3D>& GetVertices() const;
     const std::vector<aiVector3D>& GetVertices() const;
 
 
-    /** Get a list of all vertex normals or an empty array if
-    *  no normals are specified. */
+    /// @brief Get a vector of all vertex normals or an empty array if no normals are specified.
+    /// @return The normal vector.
     const std::vector<aiVector3D>& GetNormals() const;
     const std::vector<aiVector3D>& GetNormals() const;
 
 
-    /** Get a list of all vertex tangents or an empty array
-    *  if no tangents are specified */
+    /// @brief Get a vector of all vertex tangents or an empty array if no tangents are specified.
+    /// @return The vertex tangents vector.
     const std::vector<aiVector3D>& GetTangents() const;
     const std::vector<aiVector3D>& GetTangents() const;
 
 
-    /** Get a list of all vertex bi-normals or an empty array
-    *  if no bi-normals are specified */
+    /// @brief Get a vector of all vertex bi-normals or an empty array if no bi-normals are specified.
+    /// @return The binomal vector.
     const std::vector<aiVector3D>& GetBinormals() const;
     const std::vector<aiVector3D>& GetBinormals() const;
 
 
-    /** Return list of faces - each entry denotes a face and specifies
-    *  how many vertices it has. Vertices are taken from the
-    *  vertex data arrays in sequential order. */
+    /// @brief Return list of faces - each entry denotes a face and specifies how many vertices it has. 
+    ///        Vertices are taken from the vertex data arrays in sequential order.
+    /// @return The face indices vector.
     const std::vector<unsigned int>& GetFaceIndexCounts() const;
     const std::vector<unsigned int>& GetFaceIndexCounts() const;
 
 
-    /** Get a UV coordinate slot, returns an empty array if
-    *  the requested slot does not exist. */
+    /// @brief Get a UV coordinate slot, returns an empty array if the requested slot does not exist.
+    /// @param index    The requested texture coordinate slot.
+    /// @return The texture coordinates.
     const std::vector<aiVector2D>& GetTextureCoords( unsigned int index ) const;
     const std::vector<aiVector2D>& GetTextureCoords( unsigned int index ) const;
 
 
-    /** Get a UV coordinate slot, returns an empty array if
-    *  the requested slot does not exist. */
+    /// @brief Get a UV coordinate slot, returns an empty array if the requested slot does not exist.
+    /// @param index    The requested texture coordinate slot.
+    /// @return The texture coordinate channel name.
     std::string GetTextureCoordChannelName( unsigned int index ) const;
     std::string GetTextureCoordChannelName( unsigned int index ) const;
 
 
-    /** Get a vertex color coordinate slot, returns an empty array if
-    *  the requested slot does not exist. */
+    /// @brief Get a vertex color coordinate slot, returns an empty array if the requested slot does not exist.
+    /// @param index    The requested texture coordinate slot.
+    /// @return The vertex color vector.
     const std::vector<aiColor4D>& GetVertexColors( unsigned int index ) const;
     const std::vector<aiColor4D>& GetVertexColors( unsigned int index ) const;
 
 
-    /** Get per-face-vertex material assignments */
+    /// @brief Get per-face-vertex material assignments.
+    /// @return The Material indices Array.
     const MatIndexArray& GetMaterialIndices() const;
     const MatIndexArray& GetMaterialIndices() const;
 
 
-    /** Convert from a fbx file vertex index (for example from a #Cluster weight) or nullptr
-    * if the vertex index is not valid. */
+    /// @brief Convert from a fbx file vertex index (for example from a #Cluster weight) or nullptr if the vertex index is not valid.
+    /// @param in_index   The requested input index.
+    /// @param count      The number of indices.
+    /// @return The indices.
     const unsigned int* ToOutputVertexIndex( unsigned int in_index, unsigned int& count ) const;
     const unsigned int* ToOutputVertexIndex( unsigned int in_index, unsigned int& count ) const;
 
 
-    /** Determine the face to which a particular output vertex index belongs.
-    *  This mapping is always unique. */
+    /// @brief Determine the face to which a particular output vertex index belongs.
+    ///        This mapping is always unique.
+    /// @param in_index   The requested input index.
+    /// @return The face-to-vertex index.
     unsigned int FaceForVertexIndex( unsigned int in_index ) const;
     unsigned int FaceForVertexIndex( unsigned int in_index ) const;
 
 
 private:
 private:

+ 1 - 1
code/AssetLib/FBX/FBXParser.cpp

@@ -187,7 +187,7 @@ Scope::Scope(Parser& parser,bool topLevel)
         if (str.empty()) {
         if (str.empty()) {
             ParseError("unexpected content: empty string.");
             ParseError("unexpected content: empty string.");
         }
         }
-        
+
         elements.insert(ElementMap::value_type(str,new_Element(*n,parser)));
         elements.insert(ElementMap::value_type(str,new_Element(*n,parser)));
 
 
         // Element() should stop at the next Key token (or right after a Close token)
         // Element() should stop at the next Key token (or right after a Close token)

+ 3 - 3
code/AssetLib/HMP/HMPLoader.cpp

@@ -327,7 +327,7 @@ void HMPImporter::CreateMaterial(const unsigned char *szCurrent,
         ReadFirstSkin(pcHeader->numskins, szCurrent, &szCurrent);
         ReadFirstSkin(pcHeader->numskins, szCurrent, &szCurrent);
         *szCurrentOut = szCurrent;
         *szCurrentOut = szCurrent;
         return;
         return;
-    } 
+    }
 
 
     // generate a default material
     // generate a default material
     const int iMode = (int)aiShadingMode_Gouraud;
     const int iMode = (int)aiShadingMode_Gouraud;
@@ -484,11 +484,11 @@ void HMPImporter::GenerateTextureCoords(const unsigned int width, const unsigned
     if (uv == nullptr) {
     if (uv == nullptr) {
         return;
         return;
     }
     }
-    
+
     if (height == 0.0f || width == 0.0) {
     if (height == 0.0f || width == 0.0) {
         return;
         return;
     }
     }
-    
+
     const float fY = (1.0f / height) + (1.0f / height) / height;
     const float fY = (1.0f / height) + (1.0f / height) / height;
     const float fX = (1.0f / width) + (1.0f / width) / width;
     const float fX = (1.0f / width) + (1.0f / width) / width;
 
 

+ 1 - 2
code/AssetLib/IFC/IFCLoader.cpp

@@ -73,8 +73,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 namespace Assimp {
 namespace Assimp {
 template <>
 template <>
 const char *LogFunctions<IFCImporter>::Prefix() {
 const char *LogFunctions<IFCImporter>::Prefix() {
-    static auto prefix = "IFC: ";
-    return prefix;
+    return "IFC: ";
 }
 }
 } // namespace Assimp
 } // namespace Assimp
 
 

+ 1 - 5
code/AssetLib/Irr/IRRMeshLoader.cpp

@@ -71,11 +71,7 @@ static const aiImporterDesc desc = {
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by Importer
 // Constructor to be privately used by Importer
-IRRMeshImporter::IRRMeshImporter() :
-        BaseImporter(),
-        IrrlichtBase() {
-    // empty
-}
+IRRMeshImporter::IRRMeshImporter() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Destructor, private as well
 // Destructor, private as well

+ 1 - 3
code/AssetLib/Irr/IRRShared.h

@@ -63,9 +63,7 @@ protected:
         // empty
         // empty
     }
     }
 
 
-    ~IrrlichtBase() {
-        // empty
-    }
+    ~IrrlichtBase() = default;
 
 
     /** @brief Data structure for a simple name-value property
     /** @brief Data structure for a simple name-value property
      */
      */

+ 1 - 1
code/AssetLib/LWO/LWOAnimation.cpp

@@ -165,7 +165,7 @@ void AnimResolver::UpdateAnimRangeSetup() {
         if (delta == 0.0) {
         if (delta == 0.0) {
             continue;
             continue;
         }
         }
-        
+
         const size_t old_size = (*it).keys.size();
         const size_t old_size = (*it).keys.size();
         const float value_delta = (*it).keys.back().value - (*it).keys.front().value;
         const float value_delta = (*it).keys.back().value - (*it).keys.front().value;
 
 

+ 1 - 1
code/AssetLib/LWO/LWOLoader.cpp

@@ -215,7 +215,7 @@ void LWOImporter::InternReadFile(const std::string &pFile,
         } else {
         } else {
             mIsLWO2 = true;
             mIsLWO2 = true;
         }
         }
-        
+
         LoadLWO2File();
         LoadLWO2File();
 
 
         // The newer lightwave format allows the user to configure the
         // The newer lightwave format allows the user to configure the

+ 1 - 1
code/AssetLib/M3D/M3DImporter.h

@@ -65,7 +65,7 @@ class M3DImporter : public BaseImporter {
 public:
 public:
 	/// \brief  Default constructor
 	/// \brief  Default constructor
 	M3DImporter();
 	M3DImporter();
-    ~M3DImporter() override {}
+    ~M3DImporter() override = default;
 
 
 	/// \brief  Returns whether the class can handle the format of the given file.
 	/// \brief  Returns whether the class can handle the format of the given file.
 	/// \remark See BaseImporter::CanRead() for details.
 	/// \remark See BaseImporter::CanRead() for details.

+ 1 - 3
code/AssetLib/M3D/M3DWrapper.cpp

@@ -39,8 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 */
 */
-#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER
-#if !(ASSIMP_BUILD_NO_EXPORT || ASSIMP_BUILD_NO_M3D_EXPORTER)
+#if !defined ASSIMP_BUILD_NO_M3D_IMPORTER || !(defined ASSIMP_BUILD_NO_EXPORT || defined ASSIMP_BUILD_NO_M3D_EXPORTER)
 
 
 #include "M3DWrapper.h"
 #include "M3DWrapper.h"
 
 
@@ -149,4 +148,3 @@ void M3DWrapper::ClearSave() {
 } // namespace Assimp
 } // namespace Assimp
 
 
 #endif
 #endif
-#endif

+ 1 - 3
code/AssetLib/M3D/M3DWrapper.h

@@ -47,8 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef AI_M3DWRAPPER_H_INC
 #ifndef AI_M3DWRAPPER_H_INC
 #define AI_M3DWRAPPER_H_INC
 #define AI_M3DWRAPPER_H_INC
 
 
-#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER
-#if !(ASSIMP_BUILD_NO_EXPORT || ASSIMP_BUILD_NO_M3D_EXPORTER)  
+#if !defined ASSIMP_BUILD_NO_M3D_IMPORTER || !(defined ASSIMP_BUILD_NO_EXPORT || defined ASSIMP_BUILD_NO_M3D_EXPORTER)
 
 
 #include <memory>
 #include <memory>
 #include <vector>
 #include <vector>
@@ -126,7 +125,6 @@ inline m3d_t *M3DWrapper::M3D() const {
 
 
 } // namespace Assimp
 } // namespace Assimp
 
 
-#endif
 #endif // ASSIMP_BUILD_NO_M3D_IMPORTER
 #endif // ASSIMP_BUILD_NO_M3D_IMPORTER
 
 
 #endif // AI_M3DWRAPPER_H_INC
 #endif // AI_M3DWRAPPER_H_INC

+ 1 - 1
code/AssetLib/MD5/MD5Parser.h

@@ -394,7 +394,7 @@ private:
 
 
     bool SkipLine(const char* in, const char** out);
     bool SkipLine(const char* in, const char** out);
     bool SkipLine( );
     bool SkipLine( );
-    bool SkipSpacesAndLineEnd( const char* in, const char** out);    
+    bool SkipSpacesAndLineEnd( const char* in, const char** out);
     bool SkipSpacesAndLineEnd();
     bool SkipSpacesAndLineEnd();
     bool SkipSpaces();
     bool SkipSpaces();
 
 

+ 1 - 1
code/AssetLib/MDL/MDLMaterialLoader.cpp

@@ -470,7 +470,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7(
             ASSIMP_LOG_ERROR("Found a reference to an embedded DDS texture, but texture width is zero, aborting import.");
             ASSIMP_LOG_ERROR("Found a reference to an embedded DDS texture, but texture width is zero, aborting import.");
             return;
             return;
         }
         }
-        
+
         pcNew.reset(new aiTexture);
         pcNew.reset(new aiTexture);
         pcNew->mHeight = 0;
         pcNew->mHeight = 0;
         pcNew->mWidth = iWidth;
         pcNew->mWidth = iWidth;

+ 1 - 1
code/AssetLib/NFF/NFFLoader.h

@@ -107,7 +107,7 @@ private:
 
 
         aiColor3D color, diffuse, specular, ambient, emissive;
         aiColor3D color, diffuse, specular, ambient, emissive;
         ai_real refracti;
         ai_real refracti;
-        std::string texFile;        
+        std::string texFile;
         bool twoSided; // For NFF2
         bool twoSided; // For NFF2
         bool shaded;
         bool shaded;
         ai_real opacity, shininess;
         ai_real opacity, shininess;

+ 5 - 5
code/AssetLib/Obj/ObjFileMtlImporter.cpp

@@ -514,16 +514,16 @@ void ObjFileMtlImporter::getTextureOption(bool &clamp, int &clampIndex, aiString
             DataArrayIt it = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
             DataArrayIt it = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
             getFloat(it, m_DataItEnd, m_pModel->mCurrentMaterial->bump_multiplier);
             getFloat(it, m_DataItEnd, m_pModel->mCurrentMaterial->bump_multiplier);
             skipToken = 2;
             skipToken = 2;
-        } else if (!ASSIMP_strincmp(pPtr, BlendUOption, static_cast<unsigned int>(strlen(BlendUOption))) || 
+        } else if (!ASSIMP_strincmp(pPtr, BlendUOption, static_cast<unsigned int>(strlen(BlendUOption))) ||
                 !ASSIMP_strincmp(pPtr, BlendVOption, static_cast<unsigned int>(strlen(BlendVOption))) ||
                 !ASSIMP_strincmp(pPtr, BlendVOption, static_cast<unsigned int>(strlen(BlendVOption))) ||
-                !ASSIMP_strincmp(pPtr, BoostOption, static_cast<unsigned int>(strlen(BoostOption))) || 
-                !ASSIMP_strincmp(pPtr, ResolutionOption, static_cast<unsigned int>(strlen(ResolutionOption))) || 
+                !ASSIMP_strincmp(pPtr, BoostOption, static_cast<unsigned int>(strlen(BoostOption))) ||
+                !ASSIMP_strincmp(pPtr, ResolutionOption, static_cast<unsigned int>(strlen(ResolutionOption))) ||
                 !ASSIMP_strincmp(pPtr, ChannelOption, static_cast<unsigned int>(strlen(ChannelOption)))) {
                 !ASSIMP_strincmp(pPtr, ChannelOption, static_cast<unsigned int>(strlen(ChannelOption)))) {
             skipToken = 2;
             skipToken = 2;
         } else if (!ASSIMP_strincmp(pPtr, ModifyMapOption, static_cast<unsigned int>(strlen(ModifyMapOption)))) {
         } else if (!ASSIMP_strincmp(pPtr, ModifyMapOption, static_cast<unsigned int>(strlen(ModifyMapOption)))) {
             skipToken = 3;
             skipToken = 3;
-        } else if (!ASSIMP_strincmp(pPtr, OffsetOption, static_cast<unsigned int>(strlen(OffsetOption))) || 
-                !ASSIMP_strincmp(pPtr, ScaleOption, static_cast<unsigned int>(strlen(ScaleOption))) || 
+        } else if (!ASSIMP_strincmp(pPtr, OffsetOption, static_cast<unsigned int>(strlen(OffsetOption))) ||
+                !ASSIMP_strincmp(pPtr, ScaleOption, static_cast<unsigned int>(strlen(ScaleOption))) ||
                 !ASSIMP_strincmp(pPtr, TurbulenceOption, static_cast<unsigned int>(strlen(TurbulenceOption)))) {
                 !ASSIMP_strincmp(pPtr, TurbulenceOption, static_cast<unsigned int>(strlen(TurbulenceOption)))) {
             skipToken = 4;
             skipToken = 4;
         }
         }

+ 1 - 1
code/AssetLib/Obj/ObjFileParser.cpp

@@ -458,7 +458,7 @@ void ObjFileParser::getFace(aiPrimitiveType type) {
             //OBJ USES 1 Base ARRAYS!!!!
             //OBJ USES 1 Base ARRAYS!!!!
             const char *token = &(*m_DataIt);
             const char *token = &(*m_DataIt);
             const int iVal = ::atoi(token);
             const int iVal = ::atoi(token);
-            
+
             // increment iStep position based off of the sign and # of digits
             // increment iStep position based off of the sign and # of digits
             int tmp = iVal;
             int tmp = iVal;
             if (iVal < 0) {
             if (iVal < 0) {

+ 11 - 11
code/AssetLib/Obj/ObjTools.h

@@ -51,7 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 namespace Assimp {
 namespace Assimp {
 
 
-/** 
+/**
  *  @brief  Returns true, if the last entry of the buffer is reached.
  *  @brief  Returns true, if the last entry of the buffer is reached.
  *  @param[in] it   Iterator of current position.
  *  @param[in] it   Iterator of current position.
  *  @param[in] end  Iterator with end of buffer.
  *  @param[in] end  Iterator with end of buffer.
@@ -67,7 +67,7 @@ inline bool isEndOfBuffer(char_t it, char_t end) {
     return (it == end);
     return (it == end);
 }
 }
 
 
-/** 
+/**
  *  @brief  Returns next word separated by a space
  *  @brief  Returns next word separated by a space
  *  @param[in] pBuffer  Pointer to data buffer
  *  @param[in] pBuffer  Pointer to data buffer
  *  @param[in] pEnd     Pointer to end of buffer
  *  @param[in] pEnd     Pointer to end of buffer
@@ -85,7 +85,7 @@ inline Char_T getNextWord(Char_T pBuffer, Char_T pEnd) {
     return pBuffer;
     return pBuffer;
 }
 }
 
 
-/** 
+/**
  *  @brief  Returns pointer a next token
  *  @brief  Returns pointer a next token
  *  @param[in] pBuffer  Pointer to data buffer
  *  @param[in] pBuffer  Pointer to data buffer
  *  @param[in] pEnd     Pointer to end of buffer
  *  @param[in] pEnd     Pointer to end of buffer
@@ -102,7 +102,7 @@ inline Char_T getNextToken(Char_T pBuffer, Char_T pEnd) {
     return getNextWord(pBuffer, pEnd);
     return getNextWord(pBuffer, pEnd);
 }
 }
 
 
-/** 
+/**
  *  @brief  Skips a line
  *  @brief  Skips a line
  *  @param[in]  it      Iterator set to current position
  *  @param[in]  it      Iterator set to current position
  *  @param[in]  end     Iterator set to end of scratch buffer for readout
  *  @param[in]  end     Iterator set to end of scratch buffer for readout
@@ -131,7 +131,7 @@ inline char_t skipLine(char_t it, char_t end, unsigned int &uiLine) {
     return it;
     return it;
 }
 }
 
 
-/** 
+/**
  *  @brief  Get a name from the current line. Preserve space in the middle,
  *  @brief  Get a name from the current line. Preserve space in the middle,
  *          but trim it at the end.
  *          but trim it at the end.
  *  @param[in]  it      set to current position
  *  @param[in]  it      set to current position
@@ -162,13 +162,13 @@ inline char_t getName(char_t it, char_t end, std::string &name) {
     std::string strName(pStart, &(*it));
     std::string strName(pStart, &(*it));
     if (!strName.empty()) {
     if (!strName.empty()) {
         name = strName;
         name = strName;
-    } 
-    
+    }
+
 
 
     return it;
     return it;
 }
 }
 
 
-/** 
+/**
  *  @brief  Get a name from the current line. Do not preserve space
  *  @brief  Get a name from the current line. Do not preserve space
  *    in the middle, but trim it at the end.
  *    in the middle, but trim it at the end.
  *  @param  it      set to current position
  *  @param  it      set to current position
@@ -202,11 +202,11 @@ inline char_t getNameNoSpace(char_t it, char_t end, std::string &name) {
     if (!strName.empty()) {
     if (!strName.empty()) {
         name = strName;
         name = strName;
     }
     }
-        
+
     return it;
     return it;
 }
 }
 
 
-/** 
+/**
  *  @brief  Get next word from given line
  *  @brief  Get next word from given line
  *  @param[in] it      set to current position
  *  @param[in] it      set to current position
  *  @param[in] end     set to end of scratch buffer for readout
  *  @param[in] end     set to end of scratch buffer for readout
@@ -230,7 +230,7 @@ inline char_t CopyNextWord(char_t it, char_t end, char *pBuffer, size_t length)
     return it;
     return it;
 }
 }
 
 
-/** 
+/**
  *  @brief  Get next float from given line
  *  @brief  Get next float from given line
  *  @param[in]  it      set to current position
  *  @param[in]  it      set to current position
  *  @param[in]  end     set to end of scratch buffer for readout
  *  @param[in]  end     set to end of scratch buffer for readout

+ 4 - 4
code/AssetLib/Ogre/OgreImporter.h

@@ -60,17 +60,17 @@ namespace Ogre {
 class OgreImporter : public BaseImporter {
 class OgreImporter : public BaseImporter {
 public:
 public:
     /// BaseImporter override.
     /// BaseImporter override.
-    virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
+    bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
 
 
 protected:
 protected:
     /// BaseImporter override.
     /// BaseImporter override.
-    virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
+    void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
 
 
     /// BaseImporter override.
     /// BaseImporter override.
-    virtual const aiImporterDesc *GetInfo() const override;
+    const aiImporterDesc *GetInfo() const override;
 
 
     /// BaseImporter override.
     /// BaseImporter override.
-    virtual void SetupProperties(const Importer *pImp) override;
+    void SetupProperties(const Importer *pImp) override;
 
 
 private:
 private:
     /// Read materials referenced by the @c mesh to @c pScene.
     /// Read materials referenced by the @c mesh to @c pScene.

+ 0 - 1
code/AssetLib/OpenGEX/OpenGEXImporter.cpp

@@ -261,7 +261,6 @@ OpenGEXImporter::RefInfo::RefInfo(aiNode *node, Type type, std::vector<std::stri
 OpenGEXImporter::OpenGEXImporter() :
 OpenGEXImporter::OpenGEXImporter() :
         m_root(nullptr),
         m_root(nullptr),
         m_nodeChildMap(),
         m_nodeChildMap(),
-        m_meshCache(),
         m_mesh2refMap(),
         m_mesh2refMap(),
         m_material2refMap(),
         m_material2refMap(),
         m_ctx(nullptr),
         m_ctx(nullptr),

+ 4 - 16
code/AssetLib/Ply/PlyParser.h

@@ -296,9 +296,7 @@ class PropertyInstance
 public:
 public:
 
 
     //! Default constructor
     //! Default constructor
-    PropertyInstance() AI_NO_EXCEPT {
-        // empty
-    }
+    PropertyInstance() AI_NO_EXCEPT = default;
 
 
     union ValueUnion
     union ValueUnion
     {
     {
@@ -359,10 +357,7 @@ public:
 class ElementInstance {
 class ElementInstance {
 public:
 public:
     //! Default constructor
     //! Default constructor
-    ElementInstance()  AI_NO_EXCEPT
-    : alProperties() {
-        // empty
-    }
+    ElementInstance() AI_NO_EXCEPT = default;
 
 
     //! List of all parsed properties
     //! List of all parsed properties
     std::vector< PropertyInstance > alProperties;
     std::vector< PropertyInstance > alProperties;
@@ -386,10 +381,7 @@ class ElementInstanceList
 public:
 public:
 
 
     //! Default constructor
     //! Default constructor
-    ElementInstanceList() AI_NO_EXCEPT
-    : alInstances() {
-        // empty
-    }
+    ElementInstanceList() AI_NO_EXCEPT = default;
 
 
     //! List of all element instances
     //! List of all element instances
     std::vector< ElementInstance > alInstances;
     std::vector< ElementInstance > alInstances;
@@ -413,11 +405,7 @@ class DOM
 public:
 public:
 
 
     //! Default constructor
     //! Default constructor
-    DOM() AI_NO_EXCEPT
-    : alElements()
-    , alElementData() {
-
-    }
+    DOM() AI_NO_EXCEPT = default;
 
 
 
 
     //! Contains all elements of the file format
     //! Contains all elements of the file format

+ 1 - 13
code/AssetLib/Q3BSP/Q3BSPFileData.h

@@ -169,19 +169,7 @@ struct Q3BSPModel {
     std::vector<char> m_EntityData;
     std::vector<char> m_EntityData;
     std::string m_ModelName;
     std::string m_ModelName;
 
 
-    Q3BSPModel() :
-        m_Data(),
-        m_Lumps(),
-        m_Vertices(),
-        m_Faces(),
-        m_Indices(),
-        m_Textures(),
-        m_Lightmaps(),
-        m_EntityData(),
-        m_ModelName()
-    {
-        // empty
-    }
+    Q3BSPModel() = default;
 
 
     ~Q3BSPModel() {
     ~Q3BSPModel() {
         for ( unsigned int i=0; i<m_Lumps.size(); i++ ) {
         for ( unsigned int i=0; i<m_Lumps.size(); i++ ) {

+ 1 - 1
code/AssetLib/Q3BSP/Q3BSPFileImporter.cpp

@@ -139,7 +139,7 @@ static void normalizePathName(const std::string &rPath, std::string &normalizedP
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 //  Constructor.
 //  Constructor.
 Q3BSPFileImporter::Q3BSPFileImporter() :
 Q3BSPFileImporter::Q3BSPFileImporter() :
-        m_pCurrentMesh(nullptr), m_pCurrentFace(nullptr), m_MaterialLookupMap(), mTextures() {
+        m_pCurrentMesh(nullptr), m_pCurrentFace(nullptr) {
     // empty
     // empty
 }
 }
 
 

+ 1 - 2
code/AssetLib/SMD/SMDLoader.cpp

@@ -83,12 +83,11 @@ static const aiImporterDesc desc = {
 // Constructor to be privately used by Importer
 // Constructor to be privately used by Importer
 SMDImporter::SMDImporter() :
 SMDImporter::SMDImporter() :
         configFrameID(), 
         configFrameID(), 
-        mBuffer(), 
         pScene( nullptr ), 
         pScene( nullptr ), 
         iFileSize( 0 ), 
         iFileSize( 0 ), 
         iSmallestFrame( INT_MAX ),
         iSmallestFrame( INT_MAX ),
         dLengthOfAnim( 0.0 ),
         dLengthOfAnim( 0.0 ),
-        bHasUVs(false ), 
+        bHasUVs(false ),
         iLineNumber((unsigned int)-1)  {
         iLineNumber((unsigned int)-1)  {
     // empty
     // empty
 }
 }

+ 2 - 2
code/AssetLib/SMD/SMDLoader.h

@@ -87,10 +87,10 @@ struct Vertex {
 */
 */
 struct Face {
 struct Face {
     Face() AI_NO_EXCEPT :
     Face() AI_NO_EXCEPT :
-            iTexture(0x0), avVertices{} {
+            iTexture(0x0) {
         // empty
         // empty
     }
     }
-    
+
     //! Texture index for the face
     //! Texture index for the face
     unsigned int iTexture;
     unsigned int iTexture;
 
 

+ 7 - 7
code/AssetLib/Step/STEPFile.h

@@ -121,7 +121,7 @@ namespace STEP {
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 /** Exception class used by the STEP loading & parsing code. It is typically
 /** Exception class used by the STEP loading & parsing code. It is typically
- *  coupled with a line number. 
+ *  coupled with a line number.
  */
  */
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 struct SyntaxError : DeadlyImportError {
 struct SyntaxError : DeadlyImportError {
@@ -230,7 +230,7 @@ private:
 };
 };
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
-/** Shared implementation for some of the primitive data type, i.e. int, float 
+/** Shared implementation for some of the primitive data type, i.e. int, float
  */
  */
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 template <typename T>
 template <typename T>
@@ -278,7 +278,7 @@ public:
 typedef ENUMERATION BOOLEAN;
 typedef ENUMERATION BOOLEAN;
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
-/** This is just a reference to an entity/object somewhere else 
+/** This is just a reference to an entity/object somewhere else
  */
  */
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 class ENTITY : public PrimitiveDataType<uint64_t> {
 class ENTITY : public PrimitiveDataType<uint64_t> {
@@ -302,7 +302,7 @@ public:
     }
     }
 
 
 public:
 public:
-    /** @see DaraType::Parse 
+    /** @see DaraType::Parse
      */
      */
     static std::shared_ptr<const EXPRESS::LIST> Parse(const char *&inout,
     static std::shared_ptr<const EXPRESS::LIST> Parse(const char *&inout,
             uint64_t line = SyntaxError::LINE_NOT_SPECIFIED,
             uint64_t line = SyntaxError::LINE_NOT_SPECIFIED,
@@ -322,7 +322,7 @@ public:
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 /* Not exactly a full EXPRESS schema but rather a list of conversion functions
 /* Not exactly a full EXPRESS schema but rather a list of conversion functions
  * to extract valid C++ objects out of a STEP file. Those conversion functions
  * to extract valid C++ objects out of a STEP file. Those conversion functions
- * may, however, perform further schema validations. 
+ * may, however, perform further schema validations.
  */
  */
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 class ConversionSchema {
 class ConversionSchema {
@@ -384,7 +384,7 @@ struct HeaderInfo {
 };
 };
 
 
 // ------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------
-/** Base class for all concrete object instances 
+/** Base class for all concrete object instances
  */
  */
 // ------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------
 class Object {
 class Object {
@@ -511,7 +511,7 @@ private:
 
 
 // ------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------
 /** A LazyObject is created when needed. Before this happens, we just keep
 /** A LazyObject is created when needed. Before this happens, we just keep
- *  the text line that contains the object definition. 
+ *  the text line that contains the object definition.
  */
  */
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 class LazyObject {
 class LazyObject {

+ 4 - 19
code/AssetLib/X/XFileHelper.h

@@ -67,7 +67,6 @@ struct TexEntry {
     bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag
     bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag
 
 
     TexEntry() AI_NO_EXCEPT :
     TexEntry() AI_NO_EXCEPT :
-            mName(),
             mIsNormalMap(false) {
             mIsNormalMap(false) {
         // empty
         // empty
     }
     }
@@ -128,17 +127,8 @@ struct Mesh {
 
 
     explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT
     explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT
             : mName(pName),
             : mName(pName),
-              mPositions(),
-              mPosFaces(),
-              mNormals(),
-              mNormFaces(),
               mNumTextures(0),
               mNumTextures(0),
-              mTexCoords{},
-              mNumColorSets(0),
-              mColors{},
-              mFaceMaterials(),
-              mMaterials(),
-              mBones() {
+              mNumColorSets(0) {
         // empty
         // empty
     }
     }
 };
 };
@@ -152,15 +142,12 @@ struct Node {
     std::vector<Mesh *> mMeshes;
     std::vector<Mesh *> mMeshes;
 
 
     Node() AI_NO_EXCEPT
     Node() AI_NO_EXCEPT
-            : mName(),
-              mTrafoMatrix(),
-              mParent(nullptr),
-              mChildren(),
-              mMeshes() {
+            : mTrafoMatrix(),
+              mParent(nullptr) {
         // empty
         // empty
     }
     }
     explicit Node(Node *pParent) :
     explicit Node(Node *pParent) :
-            mName(), mTrafoMatrix(), mParent(pParent), mChildren(), mMeshes() {
+            mTrafoMatrix(), mParent(pParent) {
         // empty
         // empty
     }
     }
 
 
@@ -211,8 +198,6 @@ struct Scene {
 
 
     Scene() AI_NO_EXCEPT
     Scene() AI_NO_EXCEPT
             : mRootNode(nullptr),
             : mRootNode(nullptr),
-              mGlobalMeshes(),
-              mGlobalMaterials(),
               mAnimTicksPerSecond(0) {
               mAnimTicksPerSecond(0) {
         // empty
         // empty
     }
     }

+ 1 - 3
code/AssetLib/X/XFileImporter.cpp

@@ -75,9 +75,7 @@ static const aiImporterDesc desc = {
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by Importer
 // Constructor to be privately used by Importer
-XFileImporter::XFileImporter() : mBuffer() {
-    // empty
-}
+XFileImporter::XFileImporter() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Returns whether the class can handle the format of the given file.
 // Returns whether the class can handle the format of the given file.

+ 1 - 1
code/AssetLib/X/XFileParser.cpp

@@ -183,7 +183,7 @@ XFileParser::XFileParser(const std::vector<char> &pBuffer) :
             P1 += ofs;
             P1 += ofs;
             est_out += MSZIP_BLOCK; // one decompressed block is 327861 in size
             est_out += MSZIP_BLOCK; // one decompressed block is 327861 in size
         }
         }
-        
+
         // Allocate storage and terminating zero and do the actual uncompressing
         // Allocate storage and terminating zero and do the actual uncompressing
         Compression compression;
         Compression compression;
         uncompressed.resize(est_out + 1);
         uncompressed.resize(est_out + 1);

+ 2 - 10
code/AssetLib/X3D/X3DExporter.hpp

@@ -52,22 +52,14 @@ class X3DExporter {
     struct SAttribute {
     struct SAttribute {
         const std::string Name;
         const std::string Name;
         const std::string Value;
         const std::string Value;
-        SAttribute() :
-                Name(),
-                Value() {
-            // empty
-        }
+        SAttribute() = default;
         SAttribute(const std::string &name, const std::string &value) :
         SAttribute(const std::string &name, const std::string &value) :
                 Name(name),
                 Name(name),
                 Value(value) {
                 Value(value) {
             // empty
             // empty
         }
         }
 
 
-        SAttribute(SAttribute &&rhs) AI_NO_EXCEPT :
-                Name(rhs.Name),
-                Value(rhs.Value) {
-            // empty
-        }
+        SAttribute(SAttribute &&rhs) AI_NO_EXCEPT = default;
     };
     };
 
 
     /***********************************************/
     /***********************************************/

+ 1 - 1
code/AssetLib/X3D/X3DImporter.cpp

@@ -471,7 +471,7 @@ void X3DImporter::ParseHelper_Node_Enter(X3DNodeElementBase *pNode) {
 
 
     mNodeElementCur->Children.push_back(pNode); // add new element to current element child list.
     mNodeElementCur->Children.push_back(pNode); // add new element to current element child list.
     mNodeElementCur = pNode; // switch current element to new one.
     mNodeElementCur = pNode; // switch current element to new one.
-}    
+}
 
 
 void X3DImporter::ParseHelper_Node_Exit() {
 void X3DImporter::ParseHelper_Node_Exit() {
     // check if we can walk up.
     // check if we can walk up.

+ 1 - 1
code/AssetLib/X3D/X3DImporter_Geometry2D.cpp

@@ -263,7 +263,7 @@ void X3DImporter::readDisk2D(XmlNode &node) {
             //
             //
             if (tlist_i.size() < 2) {
             if (tlist_i.size() < 2) {
                 // tlist_i and tlist_o has equal size.
                 // tlist_i and tlist_o has equal size.
-                throw DeadlyImportError("Disk2D. Not enough points for creating quad list."); 
+                throw DeadlyImportError("Disk2D. Not enough points for creating quad list.");
             }
             }
 
 
             // add all quads except last
             // add all quads except last

+ 2 - 6
code/AssetLib/X3D/X3DImporter_Node.hpp

@@ -108,9 +108,7 @@ struct X3DNodeElementBase {
     std::list<X3DNodeElementBase *> Children;
     std::list<X3DNodeElementBase *> Children;
     X3DElemType Type;
     X3DElemType Type;
 
 
-    virtual ~X3DNodeElementBase() {
-        // empty
-    }
+    virtual ~X3DNodeElementBase() = default;
 
 
 protected:
 protected:
     X3DNodeElementBase(X3DElemType type, X3DNodeElementBase *pParent) :
     X3DNodeElementBase(X3DElemType type, X3DNodeElementBase *pParent) :
@@ -367,9 +365,7 @@ struct X3DNodeElementMeta : X3DNodeElementBase {
     std::string Name; ///< Name of metadata object.
     std::string Name; ///< Name of metadata object.
     std::string Reference;
     std::string Reference;
 
 
-    virtual ~X3DNodeElementMeta() {
-        // empty
-    }
+    virtual ~X3DNodeElementMeta() = default;
 
 
 protected:
 protected:
     X3DNodeElementMeta(X3DElemType type, X3DNodeElementBase *parent) :
     X3DNodeElementMeta(X3DElemType type, X3DNodeElementBase *parent) :

+ 1 - 2
code/AssetLib/XGL/XGLLoader.cpp

@@ -65,8 +65,7 @@ namespace Assimp { // this has to be in here because LogFunctions is in ::Assimp
 
 
 template <>
 template <>
 const char *LogFunctions<XGLImporter>::Prefix() {
 const char *LogFunctions<XGLImporter>::Prefix() {
-    static auto prefix = "XGL: ";
-	return prefix;
+	return "XGL: ";
 }
 }
 
 
 } // namespace Assimp
 } // namespace Assimp

+ 10 - 14
code/AssetLib/glTF/glTFAsset.h

@@ -260,7 +260,7 @@ public:
         VEC4,
         VEC4,
         MAT2,
         MAT2,
         MAT3,
         MAT3,
-        MAT4 
+        MAT4
     };
     };
 
 
     inline static Value FromString(const char *str) {
     inline static Value FromString(const char *str) {
@@ -288,8 +288,8 @@ private:
     };
     };
 
 
     template <int N>
     template <int N>
-    struct data { 
-        static const Info infos[NUM_VALUES]; 
+    struct data {
+        static const Info infos[NUM_VALUES];
     };
     };
 };
 };
 
 
@@ -297,11 +297,11 @@ private:
 template <int N>
 template <int N>
 const AttribType::Info AttribType::data<N>::infos[AttribType::NUM_VALUES] = {
 const AttribType::Info AttribType::data<N>::infos[AttribType::NUM_VALUES] = {
     { "SCALAR", 1 },
     { "SCALAR", 1 },
-    { "VEC2", 2 }, 
-    { "VEC3", 3 }, 
-    { "VEC4", 4 }, 
-    { "MAT2", 4 }, 
-    { "MAT3", 9 }, 
+    { "VEC2", 2 },
+    { "VEC3", 3 },
+    { "VEC4", 4 },
+    { "MAT2", 4 },
+    { "MAT3", 9 },
     { "MAT4", 16 }
     { "MAT4", 16 }
 };
 };
 
 
@@ -629,9 +629,7 @@ struct Mesh : public Object {
         SExtension(const EType pType) :
         SExtension(const EType pType) :
                 Type(pType) {}
                 Type(pType) {}
 
 
-        virtual ~SExtension() {
-            // empty
-        }
+        virtual ~SExtension() = default;
     };
     };
 
 
 #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC
 #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC
@@ -657,9 +655,7 @@ struct Mesh : public Object {
             // empty
             // empty
         }
         }
 
 
-        virtual ~SCompression_Open3DGC() {
-            // empty
-        }
+        virtual ~SCompression_Open3DGC() = default;
     };
     };
 #endif
 #endif
 
 

+ 3 - 3
code/AssetLib/glTF/glTFExporter.cpp

@@ -322,7 +322,7 @@ void glTFExporter::GetTexSampler(const aiMaterial* mat, glTF::TexProperty& prop)
     prop.texture->sampler->minFilter = SamplerMinFilter_Linear;
     prop.texture->sampler->minFilter = SamplerMinFilter_Linear;
 }
 }
 
 
-void glTFExporter::GetMatColorOrTex(const aiMaterial* mat, glTF::TexProperty& prop, 
+void glTFExporter::GetMatColorOrTex(const aiMaterial* mat, glTF::TexProperty& prop,
         const char* propName, int type, int idx, aiTextureType tt) {
         const char* propName, int type, int idx, aiTextureType tt) {
     aiString tex;
     aiString tex;
     aiColor4D col;
     aiColor4D col;
@@ -370,9 +370,9 @@ void glTFExporter::GetMatColorOrTex(const aiMaterial* mat, glTF::TexProperty& pr
     }
     }
 
 
     if (mat->Get(propName, type, idx, col) == AI_SUCCESS) {
     if (mat->Get(propName, type, idx, col) == AI_SUCCESS) {
-        prop.color[0] = col.r; 
+        prop.color[0] = col.r;
         prop.color[1] = col.g;
         prop.color[1] = col.g;
-        prop.color[2] = col.b; 
+        prop.color[2] = col.b;
         prop.color[3] = col.a;
         prop.color[3] = col.a;
     }
     }
 }
 }

+ 1 - 1
code/AssetLib/glTF/glTFImporter.cpp

@@ -80,7 +80,7 @@ static const aiImporterDesc desc = {
 };
 };
 
 
 glTFImporter::glTFImporter() :
 glTFImporter::glTFImporter() :
-        BaseImporter(), meshOffsets(), embeddedTexIdxs(), mScene(nullptr) {
+        mScene(nullptr) {
     // empty
     // empty
 }
 }
 
 

+ 9 - 19
code/AssetLib/glTF2/glTF2Asset.h

@@ -365,16 +365,7 @@ struct CustomExtension {
 
 
     ~CustomExtension() = default;
     ~CustomExtension() = default;
 
 
-    CustomExtension(const CustomExtension &other) :
-            name(other.name),
-            mStringValue(other.mStringValue),
-            mDoubleValue(other.mDoubleValue),
-            mUint64Value(other.mUint64Value),
-            mInt64Value(other.mInt64Value),
-            mBoolValue(other.mBoolValue),
-            mValues(other.mValues) {
-        // empty
-    }
+    CustomExtension(const CustomExtension &other) = default;
 
 
     CustomExtension& operator=(const CustomExtension&) = default;
     CustomExtension& operator=(const CustomExtension&) = default;
 };
 };
@@ -1086,8 +1077,7 @@ struct AssetMetadata {
 
 
     void Read(Document &doc);
     void Read(Document &doc);
 
 
-    AssetMetadata() :
-            version() {}
+    AssetMetadata() = default;
 };
 };
 
 
 //
 //
@@ -1123,13 +1113,13 @@ public:
         bool KHR_texture_basisu;
         bool KHR_texture_basisu;
 
 
         Extensions() :
         Extensions() :
-                KHR_materials_pbrSpecularGlossiness(false), 
-                KHR_materials_unlit(false), 
-                KHR_lights_punctual(false), 
-                KHR_texture_transform(false), 
-                KHR_materials_sheen(false), 
-                KHR_materials_clearcoat(false), 
-                KHR_materials_transmission(false), 
+                KHR_materials_pbrSpecularGlossiness(false),
+                KHR_materials_unlit(false),
+                KHR_lights_punctual(false),
+                KHR_texture_transform(false),
+                KHR_materials_sheen(false),
+                KHR_materials_clearcoat(false),
+                KHR_materials_transmission(false),
                 KHR_materials_volume(false),
                 KHR_materials_volume(false),
                 KHR_materials_ior(false),
                 KHR_materials_ior(false),
                 KHR_materials_emissive_strength(false),
                 KHR_materials_emissive_strength(false),

+ 1 - 1
code/AssetLib/glTF2/glTF2Asset.inl

@@ -1903,7 +1903,7 @@ inline void Asset::Load(const std::string &pFile, bool isBinary)
     std::vector<char> sceneData;
     std::vector<char> sceneData;
     rapidjson::Document doc = ReadDocument(*stream, isBinary, sceneData);
     rapidjson::Document doc = ReadDocument(*stream, isBinary, sceneData);
 
 
-    // If a schemaDocumentProvider is available, see if the glTF schema is present. 
+    // If a schemaDocumentProvider is available, see if the glTF schema is present.
     // If so, use it to validate the document.
     // If so, use it to validate the document.
     if (mSchemaDocumentProvider) {
     if (mSchemaDocumentProvider) {
         if (const rapidjson::SchemaDocument *gltfSchema = mSchemaDocumentProvider->GetRemoteDocument("glTF.schema.json", 16)) {
         if (const rapidjson::SchemaDocument *gltfSchema = mSchemaDocumentProvider->GetRemoteDocument("glTF.schema.json", 16)) {

+ 9 - 9
code/AssetLib/glTF2/glTF2Exporter.cpp

@@ -516,7 +516,7 @@ void glTF2Exporter::GetMatTex(const aiMaterial &mat, Ref<Texture> &texture, unsi
     if (mat.GetTextureCount(tt) == 0) {
     if (mat.GetTextureCount(tt) == 0) {
         return;
         return;
     }
     }
-        
+
     aiString tex;
     aiString tex;
 
 
     // Read texcoord (UV map index)
     // Read texcoord (UV map index)
@@ -855,13 +855,13 @@ void glTF2Exporter::ExportMaterials() {
                     mAsset->extensionsUsed.KHR_materials_transmission = true;
                     mAsset->extensionsUsed.KHR_materials_transmission = true;
                     m->materialTransmission = Nullable<MaterialTransmission>(transmission);
                     m->materialTransmission = Nullable<MaterialTransmission>(transmission);
                 }
                 }
-                
+
                 MaterialVolume volume;
                 MaterialVolume volume;
                 if (GetMatVolume(mat, volume)) {
                 if (GetMatVolume(mat, volume)) {
                     mAsset->extensionsUsed.KHR_materials_volume = true;
                     mAsset->extensionsUsed.KHR_materials_volume = true;
                     m->materialVolume = Nullable<MaterialVolume>(volume);
                     m->materialVolume = Nullable<MaterialVolume>(volume);
                 }
                 }
-                                
+
                 MaterialIOR ior;
                 MaterialIOR ior;
                 if (GetMatIOR(mat, ior)) {
                 if (GetMatIOR(mat, ior)) {
                     mAsset->extensionsUsed.KHR_materials_ior = true;
                     mAsset->extensionsUsed.KHR_materials_ior = true;
@@ -921,7 +921,7 @@ Ref<Node> FindSkeletonRootJoint(Ref<Skin> &skinRef) {
     return parentNodeRef;
     return parentNodeRef;
 }
 }
 
 
-void ExportSkin(Asset &mAsset, const aiMesh *aimesh, Ref<Mesh> &meshRef, Ref<Buffer> &bufferRef, Ref<Skin> &skinRef, 
+void ExportSkin(Asset &mAsset, const aiMesh *aimesh, Ref<Mesh> &meshRef, Ref<Buffer> &bufferRef, Ref<Skin> &skinRef,
         std::vector<aiMatrix4x4> &inverseBindMatricesData) {
         std::vector<aiMatrix4x4> &inverseBindMatricesData) {
     if (aimesh->mNumBones < 1) {
     if (aimesh->mNumBones < 1) {
         return;
         return;
@@ -985,14 +985,14 @@ void ExportSkin(Asset &mAsset, const aiMesh *aimesh, Ref<Mesh> &meshRef, Ref<Buf
                 vertexJointData[vertexId][jointsPerVertex[vertexId]] = static_cast<float>(jointNamesIndex);
                 vertexJointData[vertexId][jointsPerVertex[vertexId]] = static_cast<float>(jointNamesIndex);
                 vertexWeightData[vertexId][jointsPerVertex[vertexId]] = vertWeight;
                 vertexWeightData[vertexId][jointsPerVertex[vertexId]] = vertWeight;
 
 
-                jointsPerVertex[vertexId] += 1;   
+                jointsPerVertex[vertexId] += 1;
             }
             }
         }
         }
 
 
     } // End: for-loop mNumMeshes
     } // End: for-loop mNumMeshes
 
 
     Mesh::Primitive &p = meshRef->primitives.back();
     Mesh::Primitive &p = meshRef->primitives.back();
-    Ref<Accessor> vertexJointAccessor = ExportData(mAsset, skinRef->id, bufferRef, aimesh->mNumVertices, 
+    Ref<Accessor> vertexJointAccessor = ExportData(mAsset, skinRef->id, bufferRef, aimesh->mNumVertices,
         vertexJointData, AttribType::VEC4, AttribType::VEC4, ComponentType_FLOAT);
         vertexJointData, AttribType::VEC4, AttribType::VEC4, ComponentType_FLOAT);
     if (vertexJointAccessor) {
     if (vertexJointAccessor) {
         size_t offset = vertexJointAccessor->bufferView->byteOffset;
         size_t offset = vertexJointAccessor->bufferView->byteOffset;
@@ -1090,7 +1090,7 @@ void glTF2Exporter::ExportMeshes() {
             }
             }
         }
         }
 
 
-        Ref<Accessor> n = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mNormals, AttribType::VEC3, 
+        Ref<Accessor> n = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mNormals, AttribType::VEC3,
             AttribType::VEC3, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER);
             AttribType::VEC3, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER);
         if (n) {
         if (n) {
             p.attributes.normal.push_back(n);
             p.attributes.normal.push_back(n);
@@ -1112,7 +1112,7 @@ void glTF2Exporter::ExportMeshes() {
             if (aim->mNumUVComponents[i] > 0) {
             if (aim->mNumUVComponents[i] > 0) {
                 AttribType::Value type = (aim->mNumUVComponents[i] == 2) ? AttribType::VEC2 : AttribType::VEC3;
                 AttribType::Value type = (aim->mNumUVComponents[i] == 2) ? AttribType::VEC2 : AttribType::VEC3;
 
 
-                Ref<Accessor> tc = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mTextureCoords[i], 
+                Ref<Accessor> tc = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mTextureCoords[i],
                     AttribType::VEC3, type, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER);
                     AttribType::VEC3, type, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER);
                 if (tc) {
                 if (tc) {
                     p.attributes.texcoord.push_back(tc);
                     p.attributes.texcoord.push_back(tc);
@@ -1140,7 +1140,7 @@ void glTF2Exporter::ExportMeshes() {
                 }
                 }
             }
             }
 
 
-            p.indices = ExportData(*mAsset, meshId, b, indices.size(), &indices[0], AttribType::SCALAR, AttribType::SCALAR, 
+            p.indices = ExportData(*mAsset, meshId, b, indices.size(), &indices[0], AttribType::SCALAR, AttribType::SCALAR,
                 ComponentType_UNSIGNED_INT, BufferViewTarget_ELEMENT_ARRAY_BUFFER);
                 ComponentType_UNSIGNED_INT, BufferViewTarget_ELEMENT_ARRAY_BUFFER);
         }
         }
 
 

+ 1 - 5
code/AssetLib/glTF2/glTF2Importer.cpp

@@ -96,9 +96,6 @@ static const aiImporterDesc desc = {
 };
 };
 
 
 glTF2Importer::glTF2Importer() :
 glTF2Importer::glTF2Importer() :
-        BaseImporter(),
-        meshOffsets(),
-        mEmbeddedTexIdxs(),
         mScene(nullptr) {
         mScene(nullptr) {
     // empty
     // empty
 }
 }
@@ -185,7 +182,6 @@ static void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset
             const ai_real rsin(sin(-transform.mRotation));
             const ai_real rsin(sin(-transform.mRotation));
             transform.mTranslation.x = (static_cast<ai_real>(0.5) * transform.mScaling.x) * (-rcos + rsin + 1) + prop.TextureTransformExt_t.offset[0];
             transform.mTranslation.x = (static_cast<ai_real>(0.5) * transform.mScaling.x) * (-rcos + rsin + 1) + prop.TextureTransformExt_t.offset[0];
             transform.mTranslation.y = ((static_cast<ai_real>(0.5) * transform.mScaling.y) * (rsin + rcos - 1)) + 1 - transform.mScaling.y - prop.TextureTransformExt_t.offset[1];
             transform.mTranslation.y = ((static_cast<ai_real>(0.5) * transform.mScaling.y) * (rsin + rcos - 1)) + 1 - transform.mScaling.y - prop.TextureTransformExt_t.offset[1];
-            ;
 
 
             mat->AddProperty(&transform, 1, _AI_MATKEY_UVTRANSFORM_BASE, texType, texSlot);
             mat->AddProperty(&transform, 1, _AI_MATKEY_UVTRANSFORM_BASE, texType, texSlot);
         }
         }
@@ -853,7 +849,7 @@ void glTF2Importer::ImportCameras(glTF2::Asset &r) {
 
 
         if (cam.type == Camera::Perspective) {
         if (cam.type == Camera::Perspective) {
             aicam->mAspect = cam.cameraProperties.perspective.aspectRatio;
             aicam->mAspect = cam.cameraProperties.perspective.aspectRatio;
-            aicam->mHorizontalFOV = cam.cameraProperties.perspective.yfov * ((aicam->mAspect == 0.f) ? 1.f : aicam->mAspect);
+            aicam->mHorizontalFOV = 2.0f * std::atan(std::tan(cam.cameraProperties.perspective.yfov * 0.5f) * ((aicam->mAspect == 0.f) ? 1.f : aicam->mAspect));
             aicam->mClipPlaneFar = cam.cameraProperties.perspective.zfar;
             aicam->mClipPlaneFar = cam.cameraProperties.perspective.zfar;
             aicam->mClipPlaneNear = cam.cameraProperties.perspective.znear;
             aicam->mClipPlaneNear = cam.cameraProperties.perspective.znear;
         } else {
         } else {

+ 1 - 1
code/AssetLib/glTF2/glTF2Importer.h

@@ -65,7 +65,7 @@ public:
 protected:
 protected:
     const aiImporterDesc *GetInfo() const override;
     const aiImporterDesc *GetInfo() const override;
     void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
     void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
-    virtual void SetupProperties(const Importer *pImp) override;
+    void SetupProperties(const Importer *pImp) override;
 
 
 private:
 private:
     void ImportEmbeddedTextures(glTF2::Asset &a);
     void ImportEmbeddedTextures(glTF2::Asset &a);

+ 1 - 1
code/Common/BaseImporter.cpp

@@ -247,7 +247,7 @@ void BaseImporter::GetExtensionList(std::set<std::string> &extensions) {
     }
     }
 
 
     if (ext2 && !ASSIMP_stricmp(ext_real, ext2)) {
     if (ext2 && !ASSIMP_stricmp(ext_real, ext2)) {
-        return true;        
+        return true;
     }
     }
 
 
     return false;
     return false;

+ 1 - 3
code/Common/FileSystemFilter.h

@@ -93,9 +93,7 @@ public:
     }
     }
 
 
     /** Destructor. */
     /** Destructor. */
-    ~FileSystemFilter() {
-        // empty
-    }
+    ~FileSystemFilter() = default;
 
 
     // -------------------------------------------------------------------
     // -------------------------------------------------------------------
     /** Tests for the existence of a file at the given path. */
     /** Tests for the existence of a file at the given path. */

+ 2 - 2
code/Common/Importer.cpp

@@ -1118,7 +1118,7 @@ bool Importer::SetPropertyMatrix(const char* szName, const aiMatrix4x4& value) {
 // Set a configuration property
 // Set a configuration property
 bool Importer::SetPropertyPointer(const char* szName, void* value) {
 bool Importer::SetPropertyPointer(const char* szName, void* value) {
     ai_assert(nullptr != pimpl);
     ai_assert(nullptr != pimpl);
-    
+
     bool existing;
     bool existing;
     ASSIMP_BEGIN_EXCEPTION_REGION();
     ASSIMP_BEGIN_EXCEPTION_REGION();
         existing = SetGenericProperty<void*>(pimpl->mPointerProperties, szName,value);
         existing = SetGenericProperty<void*>(pimpl->mPointerProperties, szName,value);
@@ -1162,7 +1162,7 @@ aiMatrix4x4 Importer::GetPropertyMatrix(const char* szName, const aiMatrix4x4& i
 // Get a configuration property
 // Get a configuration property
 void* Importer::GetPropertyPointer(const char* szName, void* iErrorReturn /*= nullptr*/) const {
 void* Importer::GetPropertyPointer(const char* szName, void* iErrorReturn /*= nullptr*/) const {
     ai_assert(nullptr != pimpl);
     ai_assert(nullptr != pimpl);
-    
+
     return GetGenericProperty<void*>(pimpl->mPointerProperties,szName,iErrorReturn);
     return GetGenericProperty<void*>(pimpl->mPointerProperties,szName,iErrorReturn);
 }
 }
 
 

+ 1 - 1
code/Common/PolyTools.h

@@ -88,7 +88,7 @@ inline bool PointInTriangle2D(const T& p0, const T& p1,const T& p2, const T& pp)
     if (denom == 0.0) {
     if (denom == 0.0) {
         return false;
         return false;
     }
     }
-    
+
     const double invDenom = 1.0 / denom;
     const double invDenom = 1.0 / denom;
     dot11 = (dot11 * dot02 - dot01 * dot12) * invDenom;
     dot11 = (dot11 * dot02 - dot01 * dot12) * invDenom;
     dot00 = (dot00 * dot12 - dot01 * dot02) * invDenom;
     dot00 = (dot00 * dot12 - dot01 * dot02) * invDenom;

+ 1 - 1
code/Common/RemoveComments.cpp

@@ -39,7 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 */
 */
 
 
-/** 
+/**
  *  @file  RemoveComments.cpp
  *  @file  RemoveComments.cpp
  *  @brief Defines the CommentRemover utility class
  *  @brief Defines the CommentRemover utility class
  */
  */

+ 1 - 1
code/Common/ScenePreprocessor.cpp

@@ -106,7 +106,7 @@ void ScenePreprocessor::ProcessMesh(aiMesh *mesh) {
         if (!mesh->mTextureCoords[i]) {
         if (!mesh->mTextureCoords[i]) {
             mesh->mNumUVComponents[i] = 0;
             mesh->mNumUVComponents[i] = 0;
             continue;
             continue;
-        } 
+        }
 
 
         if (!mesh->mNumUVComponents[i]) {
         if (!mesh->mNumUVComponents[i]) {
             mesh->mNumUVComponents[i] = 2;
             mesh->mNumUVComponents[i] = 2;

+ 1 - 1
code/Common/SpatialSort.cpp

@@ -94,7 +94,7 @@ ai_real SpatialSort::CalculateDistance(const aiVector3D &pPosition) const {
 void SpatialSort::Finalize() {
 void SpatialSort::Finalize() {
     const ai_real scale = 1.0f / mPositions.size();
     const ai_real scale = 1.0f / mPositions.size();
     for (unsigned int i = 0; i < mPositions.size(); i++) {
     for (unsigned int i = 0; i < mPositions.size(); i++) {
-        mCentroid += scale * mPositions[i].mPosition; 
+        mCentroid += scale * mPositions[i].mPosition;
     }
     }
     for (unsigned int i = 0; i < mPositions.size(); i++) {
     for (unsigned int i = 0; i < mPositions.size(); i++) {
         mPositions[i].mDistance = CalculateDistance(mPositions[i].mPosition);
         mPositions[i].mDistance = CalculateDistance(mPositions[i].mPosition);

+ 1 - 1
code/Common/Version.cpp

@@ -185,6 +185,6 @@ ASSIMP_API aiScene::~aiScene() {
     aiMetadata::Dealloc(mMetaData);
     aiMetadata::Dealloc(mMetaData);
 
 
     delete[] mSkeletons;
     delete[] mSkeletons;
-    
+
     delete static_cast<Assimp::ScenePrivateData *>(mPrivate);
     delete static_cast<Assimp::ScenePrivateData *>(mPrivate);
 }
 }

+ 33 - 22
code/PostProcessing/JoinVerticesProcess.cpp

@@ -95,7 +95,7 @@ void JoinVerticesProcess::Execute( aiScene* pScene) {
             ASSIMP_LOG_DEBUG("JoinVerticesProcess finished ");
             ASSIMP_LOG_DEBUG("JoinVerticesProcess finished ");
             return;
             return;
         }
         }
-        
+
         // Show statistics
         // Show statistics
         ASSIMP_LOG_INFO("JoinVerticesProcess finished | Verts in: ", iNumOldVertices,
         ASSIMP_LOG_INFO("JoinVerticesProcess finished | Verts in: ", iNumOldVertices,
             " out: ", iNumVertices, " | ~",
             " out: ", iNumVertices, " | ~",
@@ -105,7 +105,11 @@ void JoinVerticesProcess::Execute( aiScene* pScene) {
 
 
 namespace {
 namespace {
 
 
-bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
+bool areVerticesEqual(
+    const Vertex &lhs,
+    const Vertex &rhs,
+    unsigned numUVChannels,
+    unsigned numColorChannels) {
     // A little helper to find locally close vertices faster.
     // A little helper to find locally close vertices faster.
     // Try to reuse the lookup table from the last step.
     // Try to reuse the lookup table from the last step.
     const static float epsilon = 1e-5f;
     const static float epsilon = 1e-5f;
@@ -124,10 +128,6 @@ bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
         return false;
         return false;
     }
     }
 
 
-    if ((lhs.texcoords[0] - rhs.texcoords[0]).SquareLength() > squareEpsilon) {
-        return false;
-    }
-
     if ((lhs.tangent - rhs.tangent).SquareLength() > squareEpsilon) {
     if ((lhs.tangent - rhs.tangent).SquareLength() > squareEpsilon) {
         return false;
         return false;
     }
     }
@@ -136,19 +136,18 @@ bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
         return false;
         return false;
     }
     }
 
 
-    // Usually we won't have vertex colors or multiple UVs, so we can skip from here
-    // Actually this increases runtime performance slightly, at least if branch
-    // prediction is on our side.
-    if (complex) {
-        for (int i = 0; i < 8; i++) {
-            if (i > 0 && (lhs.texcoords[i] - rhs.texcoords[i]).SquareLength() > squareEpsilon) {
-                return false;
-            }
-            if (GetColorDifference(lhs.colors[i], rhs.colors[i]) > squareEpsilon) {
-                return false;
-            }
+    for (unsigned i = 0; i < numUVChannels; i++) {
+        if ((lhs.texcoords[i] - rhs.texcoords[i]).SquareLength() > squareEpsilon) {
+            return false;
         }
         }
     }
     }
+
+    for (unsigned i = 0; i < numColorChannels; i++) {
+        if (GetColorDifference(lhs.colors[i], rhs.colors[i]) > squareEpsilon) {
+            return false;
+        }
+    }
+
     return true;
     return true;
 }
 }
 
 
@@ -235,15 +234,22 @@ struct std::hash<Vertex> {
     std::size_t operator()(Vertex const& v) const noexcept {
     std::size_t operator()(Vertex const& v) const noexcept {
         size_t seed = 0;
         size_t seed = 0;
         hash_combine(seed, v.position.x ,v.position.y,v.position.z);
         hash_combine(seed, v.position.x ,v.position.y,v.position.z);
-        return seed; 
+        return seed;
     }
     }
 };
 };
 //template specialization for std::equal_to for Vertex
 //template specialization for std::equal_to for Vertex
 template<>
 template<>
 struct std::equal_to<Vertex> {
 struct std::equal_to<Vertex> {
+    equal_to(unsigned numUVChannels, unsigned numColorChannels) :
+            mNumUVChannels(numUVChannels),
+            mNumColorChannels(numColorChannels) {}
     bool operator()(const Vertex &lhs, const Vertex &rhs) const {
     bool operator()(const Vertex &lhs, const Vertex &rhs) const {
-        return areVerticesEqual(lhs, rhs, false);
+        return areVerticesEqual(lhs, rhs, mNumUVChannels, mNumColorChannels);
     }
     }
+
+private:
+    unsigned mNumUVChannels;
+    unsigned mNumColorChannels;
 };
 };
 // now start the JoinVerticesProcess
 // now start the JoinVerticesProcess
 int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
 int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
@@ -316,8 +322,13 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
             uniqueAnimatedVertices[animMeshIndex].reserve(pMesh->mNumVertices);
             uniqueAnimatedVertices[animMeshIndex].reserve(pMesh->mNumVertices);
         }
         }
     }
     }
-    // a map that maps a vertix to its new index
-    std::unordered_map<Vertex,int> vertex2Index;
+    // a map that maps a vertex to its new index
+    const auto numBuckets = pMesh->mNumVertices;
+    const auto hasher = std::hash<Vertex>();
+    const auto comparator = std::equal_to<Vertex>(
+            pMesh->GetNumUVChannels(),
+            pMesh->GetNumColorChannels());
+    std::unordered_map<Vertex, int> vertex2Index(numBuckets, hasher, comparator);
     // we can not end up with more vertices than we started with
     // we can not end up with more vertices than we started with
     vertex2Index.reserve(pMesh->mNumVertices);
     vertex2Index.reserve(pMesh->mNumVertices);
     // Now check each vertex if it brings something new to the table
     // Now check each vertex if it brings something new to the table
@@ -399,7 +410,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
                     }
                     }
                     if (weightAlreadyExists) {
                     if (weightAlreadyExists) {
                         continue;
                         continue;
-                    }                    
+                    }
                     aiVertexWeight nw;
                     aiVertexWeight nw;
                     nw.mVertexId = replaceIndex[ ow.mVertexId ];
                     nw.mVertexId = replaceIndex[ ow.mVertexId ];
                     nw.mWeight = ow.mWeight;
                     nw.mWeight = ow.mWeight;

+ 43 - 50
code/PostProcessing/LimitBoneWeightsProcess.cpp

@@ -2,8 +2,7 @@
 Open Asset Import Library (assimp)
 Open Asset Import Library (assimp)
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 
 
-Copyright (c) 2006-2022, assimp team
-
+Copyright (c) 2006-2023, assimp team
 
 
 All rights reserved.
 All rights reserved.
 
 
@@ -36,13 +35,7 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-----------------------------------------------------------------------
-*/
-
-/** Implementation of the LimitBoneWeightsProcess post processing step */
-
-
+---------------------------------------------------------------------- */
 #include "LimitBoneWeightsProcess.h"
 #include "LimitBoneWeightsProcess.h"
 #include <assimp/SmallVector.h>
 #include <assimp/SmallVector.h>
 #include <assimp/StringUtils.h>
 #include <assimp/StringUtils.h>
@@ -51,14 +44,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <assimp/scene.h>
 #include <assimp/scene.h>
 #include <stdio.h>
 #include <stdio.h>
 
 
-using namespace Assimp;
+namespace Assimp {
+
+// Make sure this value is set.
+#ifndef AI_LMW_MAX_WEIGHTS
+#   define AI_LMW_MAX_WEIGHTS 16
+#endif
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by Importer
 // Constructor to be privately used by Importer
-LimitBoneWeightsProcess::LimitBoneWeightsProcess()
-{
-    mMaxWeights = AI_LMW_MAX_WEIGHTS;
-}
+LimitBoneWeightsProcess::LimitBoneWeightsProcess() : mMaxWeights(AI_LMW_MAX_WEIGHTS) {}
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Destructor, private as well
 // Destructor, private as well
@@ -66,15 +61,15 @@ LimitBoneWeightsProcess::~LimitBoneWeightsProcess() = default;
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Returns whether the processing step is present in the given flag field.
 // Returns whether the processing step is present in the given flag field.
-bool LimitBoneWeightsProcess::IsActive( unsigned int pFlags) const
-{
+bool LimitBoneWeightsProcess::IsActive( unsigned int pFlags) const {
     return (pFlags & aiProcess_LimitBoneWeights) != 0;
     return (pFlags & aiProcess_LimitBoneWeights) != 0;
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Executes the post processing step on the given imported data.
 // Executes the post processing step on the given imported data.
-void LimitBoneWeightsProcess::Execute( aiScene* pScene)
-{
+void LimitBoneWeightsProcess::Execute( aiScene* pScene) {
+    ai_assert(pScene != nullptr);
+              
     ASSIMP_LOG_DEBUG("LimitBoneWeightsProcess begin");
     ASSIMP_LOG_DEBUG("LimitBoneWeightsProcess begin");
 
 
     for (unsigned int m = 0; m < pScene->mNumMeshes; ++m) {
     for (unsigned int m = 0; m < pScene->mNumMeshes; ++m) {
@@ -86,16 +81,30 @@ void LimitBoneWeightsProcess::Execute( aiScene* pScene)
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Executes the post processing step on the given imported data.
 // Executes the post processing step on the given imported data.
-void LimitBoneWeightsProcess::SetupProperties(const Importer* pImp)
-{
-    // get the current value of the property
+void LimitBoneWeightsProcess::SetupProperties(const Importer* pImp) {
     this->mMaxWeights = pImp->GetPropertyInteger(AI_CONFIG_PP_LBW_MAX_WEIGHTS,AI_LMW_MAX_WEIGHTS);
     this->mMaxWeights = pImp->GetPropertyInteger(AI_CONFIG_PP_LBW_MAX_WEIGHTS,AI_LMW_MAX_WEIGHTS);
 }
 }
 
 
+// ------------------------------------------------------------------------------------------------
+static unsigned int removeEmptyBones(aiMesh *pMesh) {
+    ai_assert(pMesh != nullptr);
+    
+    unsigned int writeBone = 0;
+    for (unsigned int readBone = 0; readBone< pMesh->mNumBones; ++readBone) {
+        aiBone* bone = pMesh->mBones[readBone];
+        if (bone->mNumWeights > 0) {
+            pMesh->mBones[writeBone++] = bone;
+        } else {
+            delete bone;
+        }
+    }
+    
+    return writeBone;
+}
+
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 // Unites identical vertices in the given mesh
 // Unites identical vertices in the given mesh
-void LimitBoneWeightsProcess::ProcessMesh(aiMesh* pMesh)
-{
+void LimitBoneWeightsProcess::ProcessMesh(aiMesh* pMesh) {
     if (!pMesh->HasBones())
     if (!pMesh->HasBones())
         return;
         return;
 
 
@@ -105,11 +114,9 @@ void LimitBoneWeightsProcess::ProcessMesh(aiMesh* pMesh)
     WeightsPerVertex vertexWeights(pMesh->mNumVertices);
     WeightsPerVertex vertexWeights(pMesh->mNumVertices);
     size_t maxVertexWeights = 0;
     size_t maxVertexWeights = 0;
 
 
-    for (unsigned int b = 0; b < pMesh->mNumBones; ++b)
-    {
+    for (unsigned int b = 0; b < pMesh->mNumBones; ++b) {
         const aiBone* bone = pMesh->mBones[b];
         const aiBone* bone = pMesh->mBones[b];
-        for (unsigned int w = 0; w < bone->mNumWeights; ++w)
-        {
+        for (unsigned int w = 0; w < bone->mNumWeights; ++w) {
             const aiVertexWeight& vw = bone->mWeights[w];
             const aiVertexWeight& vw = bone->mWeights[w];
 
 
             if (vertexWeights.size() <= vw.mVertexId)
             if (vertexWeights.size() <= vw.mVertexId)
@@ -126,8 +133,7 @@ void LimitBoneWeightsProcess::ProcessMesh(aiMesh* pMesh)
     unsigned int removed = 0, old_bones = pMesh->mNumBones;
     unsigned int removed = 0, old_bones = pMesh->mNumBones;
 
 
     // now cut the weight count if it exceeds the maximum
     // now cut the weight count if it exceeds the maximum
-    for (WeightsPerVertex::iterator vit = vertexWeights.begin(); vit != vertexWeights.end(); ++vit)
-    {
+    for (WeightsPerVertex::iterator vit = vertexWeights.begin(); vit != vertexWeights.end(); ++vit) {
         if (vit->size() <= mMaxWeights)
         if (vit->size() <= mMaxWeights)
             continue;
             continue;
 
 
@@ -154,40 +160,27 @@ void LimitBoneWeightsProcess::ProcessMesh(aiMesh* pMesh)
     }
     }
 
 
     // clear weight count for all bone
     // clear weight count for all bone
-    for (unsigned int a = 0; a < pMesh->mNumBones; ++a)
-    {
+    for (unsigned int a = 0; a < pMesh->mNumBones; ++a) {
         pMesh->mBones[a]->mNumWeights = 0;
         pMesh->mBones[a]->mNumWeights = 0;
     }
     }
 
 
     // rebuild the vertex weight array for all bones
     // rebuild the vertex weight array for all bones
-    for (unsigned int a = 0; a < vertexWeights.size(); ++a)
-    {
+    for (unsigned int a = 0; a < vertexWeights.size(); ++a) {
         const VertexWeightArray& vw = vertexWeights[a];
         const VertexWeightArray& vw = vertexWeights[a];
-        for (const Weight* it = vw.begin(); it != vw.end(); ++it)
-        {
+        for (const Weight* it = vw.begin(); it != vw.end(); ++it) {
             aiBone* bone = pMesh->mBones[it->mBone];
             aiBone* bone = pMesh->mBones[it->mBone];
             bone->mWeights[bone->mNumWeights++] = aiVertexWeight(a, it->mWeight);
             bone->mWeights[bone->mNumWeights++] = aiVertexWeight(a, it->mWeight);
         }
         }
     }
     }
 
 
     // remove empty bones
     // remove empty bones
-    unsigned int writeBone = 0;
-
-    for (unsigned int readBone = 0; readBone< pMesh->mNumBones; ++readBone)
-    {
-        aiBone* bone = pMesh->mBones[readBone];
-        if (bone->mNumWeights > 0)
-        {
-            pMesh->mBones[writeBone++] = bone;
-        }
-        else
-        {
-            delete bone;
-        }
-    }
-    pMesh->mNumBones = writeBone;
+#ifdef AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES 
+    pMesh->mNumBones = removeEmptyBones(pMesh);
+#endif // AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES 
 
 
     if (!DefaultLogger::isNullLogger()) {
     if (!DefaultLogger::isNullLogger()) {
         ASSIMP_LOG_INFO("Removed ", removed, " weights. Input bones: ", old_bones, ". Output bones: ", pMesh->mNumBones);
         ASSIMP_LOG_INFO("Removed ", removed, " weights. Input bones: ", old_bones, ". Output bones: ", pMesh->mNumBones);
     }
     }
 }
 }
+
+} // namespace Assimp

+ 1 - 1
include/assimp/Bitmap.h

@@ -63,7 +63,7 @@ namespace Assimp {
 class IOStream;
 class IOStream;
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
-/** 
+/**
  *  This class is used to store and write bitmap information.
  *  This class is used to store and write bitmap information.
  */
  */
 class ASSIMP_API Bitmap {
 class ASSIMP_API Bitmap {

+ 1 - 1
include/assimp/DefaultIOStream.h

@@ -74,7 +74,7 @@ class ASSIMP_API DefaultIOStream : public IOStream {
 #endif // __ANDROID__
 #endif // __ANDROID__
 
 
 protected:
 protected:
-    /// @brief 
+    /// @brief
     DefaultIOStream() AI_NO_EXCEPT;
     DefaultIOStream() AI_NO_EXCEPT;
 
 
     /// @brief The class constructor with the file name and the stream.
     /// @brief The class constructor with the file name and the stream.

+ 1 - 1
include/assimp/Hash.h

@@ -77,7 +77,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 inline uint32_t SuperFastHash (const char * data, uint32_t len = 0, uint32_t hash = 0) {
 inline uint32_t SuperFastHash (const char * data, uint32_t len = 0, uint32_t hash = 0) {
     uint32_t tmp;
     uint32_t tmp;
     int rem;
     int rem;
-    
+
     if (data == NULL) return 0;
     if (data == NULL) return 0;
     if (len == 0)len = (uint32_t)::strlen(data);
     if (len == 0)len = (uint32_t)::strlen(data);
 
 

+ 1 - 3
include/assimp/IOStream.hpp

@@ -128,9 +128,7 @@ public:
 
 
 // ----------------------------------------------------------------------------------
 // ----------------------------------------------------------------------------------
 AI_FORCE_INLINE
 AI_FORCE_INLINE
-IOStream::IOStream() AI_NO_EXCEPT {
-    // empty
-}
+IOStream::IOStream() AI_NO_EXCEPT = default;
 
 
 // ----------------------------------------------------------------------------------
 // ----------------------------------------------------------------------------------
 AI_FORCE_INLINE
 AI_FORCE_INLINE

+ 1 - 3
include/assimp/IOStreamBuffer.h

@@ -141,9 +141,7 @@ AI_FORCE_INLINE IOStreamBuffer<T>::IOStreamBuffer(size_t cache) :
 }
 }
 
 
 template <class T>
 template <class T>
-AI_FORCE_INLINE IOStreamBuffer<T>::~IOStreamBuffer() {
-    // empty
-}
+AI_FORCE_INLINE IOStreamBuffer<T>::~IOStreamBuffer() = default;
 
 
 template <class T>
 template <class T>
 AI_FORCE_INLINE bool IOStreamBuffer<T>::open(IOStream *stream) {
 AI_FORCE_INLINE bool IOStreamBuffer<T>::open(IOStream *stream) {

+ 1 - 4
include/assimp/IOSystem.hpp

@@ -237,10 +237,7 @@ private:
 };
 };
 
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-AI_FORCE_INLINE IOSystem::IOSystem() AI_NO_EXCEPT :
-        m_pathStack() {
-    // empty
-}
+AI_FORCE_INLINE IOSystem::IOSystem() AI_NO_EXCEPT = default;
 
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 AI_FORCE_INLINE IOSystem::~IOSystem() = default;
 AI_FORCE_INLINE IOSystem::~IOSystem() = default;

+ 1 - 4
include/assimp/LineSplitter.h

@@ -145,7 +145,6 @@ private:
 
 
 AI_FORCE_INLINE LineSplitter::LineSplitter(StreamReaderLE& stream, bool skip_empty_lines, bool trim ) :
 AI_FORCE_INLINE LineSplitter::LineSplitter(StreamReaderLE& stream, bool skip_empty_lines, bool trim ) :
         mIdx(0),
         mIdx(0),
-        mCur(),
         mStream(stream),
         mStream(stream),
         mSwallow(),
         mSwallow(),
         mSkip_empty_lines(skip_empty_lines),
         mSkip_empty_lines(skip_empty_lines),
@@ -155,9 +154,7 @@ AI_FORCE_INLINE LineSplitter::LineSplitter(StreamReaderLE& stream, bool skip_emp
     mIdx = 0;
     mIdx = 0;
 }
 }
 
 
-AI_FORCE_INLINE LineSplitter::~LineSplitter() {
-    // empty
-}
+AI_FORCE_INLINE LineSplitter::~LineSplitter() = default;
 
 
 AI_FORCE_INLINE LineSplitter& LineSplitter::operator++() {
 AI_FORCE_INLINE LineSplitter& LineSplitter::operator++() {
     if (mSwallow) {
     if (mSwallow) {

+ 1 - 1
include/assimp/LogAux.h

@@ -57,7 +57,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 namespace Assimp {
 namespace Assimp {
 
 
 /// @brief Logger class, which will extend the class by log-functions.
 /// @brief Logger class, which will extend the class by log-functions.
-/// @tparam TDeriving 
+/// @tparam TDeriving
 template<class TDeriving>
 template<class TDeriving>
 class LogFunctions {
 class LogFunctions {
 public:
 public:

+ 1 - 2
include/assimp/MemoryIOWrapper.h

@@ -162,8 +162,7 @@ public:
     }
     }
 
 
     /** Destructor. */
     /** Destructor. */
-    ~MemoryIOSystem() {
-    }
+    ~MemoryIOSystem() = default;
 
 
     // -------------------------------------------------------------------
     // -------------------------------------------------------------------
     /** Tests for the existence of a file at the given path. */
     /** Tests for the existence of a file at the given path. */

+ 2 - 2
include/assimp/ObjMaterial.h

@@ -41,7 +41,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 /** @file OBJMATERIAL.h
 /** @file OBJMATERIAL.h
  *  @brief Obj-specific material macros
  *  @brief Obj-specific material macros
- *  
+ *
  */
  */
 
 
 #ifndef AI_OBJMATERIAL_H_INC
 #ifndef AI_OBJMATERIAL_H_INC
@@ -64,7 +64,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 // Pure key names for all obj texture-related properties
 // Pure key names for all obj texture-related properties
 //! @cond MATS_DOC_FULL
 //! @cond MATS_DOC_FULL
 
 
-// support for bump -bm 
+// support for bump -bm
 #define _AI_MATKEY_OBJ_BUMPMULT_BASE "$tex.bumpmult"
 #define _AI_MATKEY_OBJ_BUMPMULT_BASE "$tex.bumpmult"
 //! @endcond
 //! @endcond
 
 

+ 1 - 3
include/assimp/Profiler.h

@@ -68,9 +68,7 @@ using namespace Formatter;
  */
  */
 class Profiler {
 class Profiler {
 public:
 public:
-    Profiler() {
-        // empty
-    }
+    Profiler() = default;
 
 
 
 
     /** Start a named timer */
     /** Start a named timer */

+ 2 - 6
include/assimp/ProgressHandler.hpp

@@ -67,15 +67,11 @@ class ASSIMP_API ProgressHandler
 {
 {
 protected:
 protected:
     /// @brief  Default constructor
     /// @brief  Default constructor
-    ProgressHandler () AI_NO_EXCEPT {
-        // empty
-    }
+    ProgressHandler () AI_NO_EXCEPT = default;
 
 
 public:
 public:
     /// @brief  Virtual destructor.
     /// @brief  Virtual destructor.
-    virtual ~ProgressHandler () {
-        // empty
-    }
+    virtual ~ProgressHandler () = default;
 
 
     // -------------------------------------------------------------------
     // -------------------------------------------------------------------
     /** @brief Progress callback.
     /** @brief Progress callback.

+ 2 - 6
include/assimp/SceneCombiner.h

@@ -191,13 +191,9 @@ struct SceneHelper {
  */
  */
 class ASSIMP_API SceneCombiner {
 class ASSIMP_API SceneCombiner {
     // class cannot be instanced
     // class cannot be instanced
-    SceneCombiner() {
-        // empty
-    }
+    SceneCombiner() = delete;
 
 
-    ~SceneCombiner() {
-        // empty
-    }
+    ~SceneCombiner() = delete;
 
 
 public:
 public:
     // -------------------------------------------------------------------
     // -------------------------------------------------------------------

+ 1 - 1
include/assimp/SpatialSort.h

@@ -162,7 +162,7 @@ protected:
         unsigned int mIndex; ///< The vertex referred by this entry
         unsigned int mIndex; ///< The vertex referred by this entry
         aiVector3D mPosition; ///< Position
         aiVector3D mPosition; ///< Position
         /// Distance of this vertex to the sorting plane. This is set by Finalize.
         /// Distance of this vertex to the sorting plane. This is set by Finalize.
-        ai_real mDistance; 
+        ai_real mDistance;
 
 
         Entry() AI_NO_EXCEPT
         Entry() AI_NO_EXCEPT
                 : mIndex(std::numeric_limits<unsigned int>::max()),
                 : mIndex(std::numeric_limits<unsigned int>::max()),

+ 2 - 2
include/assimp/XmlParser.h

@@ -58,8 +58,8 @@ namespace Assimp {
 struct find_node_by_name_predicate {
 struct find_node_by_name_predicate {
     /// @brief The default constructor.
     /// @brief The default constructor.
     find_node_by_name_predicate() = default;
     find_node_by_name_predicate() = default;
-    
-    
+
+
     std::string mName; ///< The name to find.
     std::string mName; ///< The name to find.
     find_node_by_name_predicate(const std::string &name) :
     find_node_by_name_predicate(const std::string &name) :
             mName(name) {
             mName(name) {

+ 2 - 2
include/assimp/aabb.h

@@ -50,8 +50,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <assimp/vector3.h>
 #include <assimp/vector3.h>
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
-/** 
- *  An axis-aligned bounding box.  
+/**
+ *  An axis-aligned bounding box.
  */
  */
 struct aiAABB {
 struct aiAABB {
     C_STRUCT aiVector3D mMin;
     C_STRUCT aiVector3D mMin;

+ 1 - 1
include/assimp/ai_assert.h

@@ -55,7 +55,7 @@ namespace Assimp {
 
 
 /// @brief Assert violation behavior can be customized: see AssertHandler.h.
 /// @brief Assert violation behavior can be customized: see AssertHandler.h.
 /// @param failedExpression     The expression to validate.
 /// @param failedExpression     The expression to validate.
-/// @param file                 The file location    
+/// @param file                 The file location
 /// @param line                 The line number
 /// @param line                 The line number
 ASSIMP_API void aiAssertViolation(const char* failedExpression, const char* file, int line);
 ASSIMP_API void aiAssertViolation(const char* failedExpression, const char* file, int line);
 
 

+ 3 - 3
include/assimp/anim.h

@@ -98,7 +98,7 @@ struct aiVectorKey {
     bool operator<(const aiVectorKey &rhs) const {
     bool operator<(const aiVectorKey &rhs) const {
         return mTime < rhs.mTime;
         return mTime < rhs.mTime;
     }
     }
-    
+
     bool operator>(const aiVectorKey &rhs) const {
     bool operator>(const aiVectorKey &rhs) const {
         return mTime > rhs.mTime;
         return mTime > rhs.mTime;
     }
     }
@@ -132,7 +132,7 @@ struct aiQuatKey {
     bool operator==(const aiQuatKey &rhs) const {
     bool operator==(const aiQuatKey &rhs) const {
         return rhs.mValue == this->mValue;
         return rhs.mValue == this->mValue;
     }
     }
-    
+
     bool operator!=(const aiQuatKey &rhs) const {
     bool operator!=(const aiQuatKey &rhs) const {
         return rhs.mValue != this->mValue;
         return rhs.mValue != this->mValue;
     }
     }
@@ -141,7 +141,7 @@ struct aiQuatKey {
     bool operator<(const aiQuatKey &rhs) const {
     bool operator<(const aiQuatKey &rhs) const {
         return mTime < rhs.mTime;
         return mTime < rhs.mTime;
     }
     }
-    
+
     bool operator>(const aiQuatKey &rhs) const {
     bool operator>(const aiQuatKey &rhs) const {
         return mTime > rhs.mTime;
         return mTime > rhs.mTime;
     }
     }

+ 1 - 1
include/assimp/defs.h

@@ -190,7 +190,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 /* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
 /* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
- * in doxydocs. 
+ * in doxydocs.
  */
  */
 #define C_STRUCT
 #define C_STRUCT
 #define C_ENUM
 #define C_ENUM

+ 3 - 3
include/assimp/material.inl

@@ -100,7 +100,7 @@ AI_FORCE_INLINE aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
 // std::min has in some cases a conflict with a defined min
 // std::min has in some cases a conflict with a defined min
 #ifdef min
 #ifdef min
 #   undef min
 #   undef min
-#endif 
+#endif
         iNum = static_cast<unsigned int>(std::min(static_cast<size_t>(iNum),prop->mDataLength / sizeof(Type)));
         iNum = static_cast<unsigned int>(std::min(static_cast<size_t>(iNum),prop->mDataLength / sizeof(Type)));
         std::memcpy(pOut,prop->mData,iNum * sizeof(Type));
         std::memcpy(pOut,prop->mData,iNum * sizeof(Type));
         if (pMax) {
         if (pMax) {
@@ -227,8 +227,8 @@ AI_FORCE_INLINE aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 template<class TYPE>
 template<class TYPE>
-aiReturn aiMaterial::AddProperty (const TYPE* pInput, 
-        const unsigned int pNumValues, const char* pKey, unsigned int type, 
+aiReturn aiMaterial::AddProperty (const TYPE* pInput,
+        const unsigned int pNumValues, const char* pKey, unsigned int type,
         unsigned int index) {
         unsigned int index) {
     return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(TYPE),
     return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(TYPE),
         pKey,type,index,aiPTI_Buffer);
         pKey,type,index,aiPTI_Buffer);

+ 1 - 1
include/assimp/quaternion.inl

@@ -237,7 +237,7 @@ inline void aiQuaterniont<TReal>::Interpolate( aiQuaterniont& pOut, const aiQuat
 
 
     // Calculate coefficients
     // Calculate coefficients
     TReal sclp, sclq;
     TReal sclp, sclq;
-    
+
     if ((static_cast<TReal>(1.0) - cosom) > ai_epsilon) // 0.0001 -> some epsillon
     if ((static_cast<TReal>(1.0) - cosom) > ai_epsilon) // 0.0001 -> some epsillon
     {
     {
         // Standard case (slerp)
         // Standard case (slerp)

+ 1 - 1
include/assimp/scene.h

@@ -450,7 +450,7 @@ struct aiScene
 };
 };
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
-} 
+}
 #endif //! extern "C"
 #endif //! extern "C"
 
 
 #endif // AI_SCENE_H_INC
 #endif // AI_SCENE_H_INC

+ 4 - 4
include/assimp/vector3.h

@@ -70,17 +70,17 @@ class aiVector3t {
 public:
 public:
     /// @brief  The default class constructor.
     /// @brief  The default class constructor.
     aiVector3t() AI_NO_EXCEPT : x(), y(), z() {}
     aiVector3t() AI_NO_EXCEPT : x(), y(), z() {}
-    
+
     /// @brief  The class constructor with the components.
     /// @brief  The class constructor with the components.
     /// @param  _x  The x-component for the vector.
     /// @param  _x  The x-component for the vector.
     /// @param  _y  The y-component for the vector.
     /// @param  _y  The y-component for the vector.
     /// @param  _z  The z-component for the vector.
     /// @param  _z  The z-component for the vector.
     aiVector3t(TReal _x, TReal _y, TReal _z) : x(_x), y(_y), z(_z) {}
     aiVector3t(TReal _x, TReal _y, TReal _z) : x(_x), y(_y), z(_z) {}
-    
+
     /// @brief  The class constructor with a default value.
     /// @brief  The class constructor with a default value.
     /// @param  _xyz  The value for x, y and z.
     /// @param  _xyz  The value for x, y and z.
     explicit aiVector3t (TReal _xyz ) : x(_xyz), y(_xyz), z(_xyz) {}
     explicit aiVector3t (TReal _xyz ) : x(_xyz), y(_xyz), z(_xyz) {}
-    
+
     /// @brief  The copy constructor.
     /// @brief  The copy constructor.
     /// @param  o The instance to copy from.
     /// @param  o The instance to copy from.
     aiVector3t( const aiVector3t& o ) = default;
     aiVector3t( const aiVector3t& o ) = default;
@@ -113,7 +113,7 @@ public:
     bool operator!= (const aiVector3t& other) const;
     bool operator!= (const aiVector3t& other) const;
     bool operator < (const aiVector3t& other) const;
     bool operator < (const aiVector3t& other) const;
 
 
-    /// @brief  
+    /// @brief
     bool Equal(const aiVector3t &other, TReal epsilon = ai_epsilon) const;
     bool Equal(const aiVector3t &other, TReal epsilon = ai_epsilon) const;
 
 
     template <typename TOther>
     template <typename TOther>

+ 4 - 4
port/AndroidJNI/AndroidJNIIOSystem.cpp

@@ -84,7 +84,7 @@ AndroidJNIIOSystem::~AndroidJNIIOSystem() {
 bool AndroidJNIIOSystem::Exists( const char* pFile) const {
 bool AndroidJNIIOSystem::Exists( const char* pFile) const {
     AAsset* asset = AAssetManager_open(mApkAssetManager, pFile, AASSET_MODE_UNKNOWN);
     AAsset* asset = AAssetManager_open(mApkAssetManager, pFile, AASSET_MODE_UNKNOWN);
     FILE* file = ::fopen( (mApkWorkspacePath + getOsSeparator() + std::string(pFile)).c_str(), "rb");
     FILE* file = ::fopen( (mApkWorkspacePath + getOsSeparator() + std::string(pFile)).c_str(), "rb");
-	
+
     if (!asset && !file) {
     if (!asset && !file) {
         __android_log_print(ANDROID_LOG_ERROR, "Assimp", "Asset manager can not find: %s", pFile);
         __android_log_print(ANDROID_LOG_ERROR, "Assimp", "Asset manager can not find: %s", pFile);
         return false;
         return false;
@@ -94,7 +94,7 @@ bool AndroidJNIIOSystem::Exists( const char* pFile) const {
     if (file) {
     if (file) {
         ::fclose( file);
         ::fclose( file);
     }
     }
-    
+
     return true;
     return true;
 }
 }
 
 
@@ -140,7 +140,7 @@ bool AndroidJNIIOSystem::AndroidExtractAsset(std::string name) {
         __android_log_print(ANDROID_LOG_DEFAULT, "Assimp", "Asset already extracted");
         __android_log_print(ANDROID_LOG_DEFAULT, "Assimp", "Asset already extracted");
         return true;
         return true;
     }
     }
-	
+
     // Open file
     // Open file
     AAsset* asset = AAssetManager_open(mApkAssetManager, name.c_str(),
     AAsset* asset = AAssetManager_open(mApkAssetManager, name.c_str(),
 			AASSET_MODE_UNKNOWN);
 			AASSET_MODE_UNKNOWN);
@@ -182,7 +182,7 @@ bool AndroidJNIIOSystem::AndroidExtractAsset(std::string name) {
         __android_log_print(ANDROID_LOG_ERROR, "assimp", "Asset not found: %s", name.c_str());
         __android_log_print(ANDROID_LOG_ERROR, "assimp", "Asset not found: %s", name.c_str());
         return false;
         return false;
     }
     }
-	
+
     return true;
     return true;
 }
 }
 
 

Some files were not shown because too many files changed in this diff