diff --git a/code/LWO/LWOLoader.cpp b/code/LWO/LWOLoader.cpp index 8a1d6195f..7e3db6bd0 100644 --- a/code/LWO/LWOLoader.cpp +++ b/code/LWO/LWOLoader.cpp @@ -155,12 +155,14 @@ void LWOImporter::InternReadFile(const std::string &pFile, // Allocate storage and copy the contents of the file to a memory buffer std::vector mBuffer(fileSize); file->Read(&mBuffer[0], 1, fileSize); - this->mScene = pScene; + mScene = pScene; // Determine the type of the file uint32_t fileType; const char *sz = IFF::ReadHeader(&mBuffer[0], fileType); - if (sz) throw DeadlyImportError(sz); + if (sz) { + throw DeadlyImportError(sz); + } mFileBuffer = &mBuffer[0] + 12; fileSize -= 12; @@ -194,18 +196,15 @@ void LWOImporter::InternReadFile(const std::string &pFile, mIsLWO2 = false; mIsLXOB = false; LoadLWOBFile(); - } - // New lightwave format - else if (AI_LWO_FOURCC_LWO2 == fileType) { + } else if (AI_LWO_FOURCC_LWO2 == fileType) { + // New lightwave format mIsLXOB = false; ASSIMP_LOG_INFO("LWO file format: LWO2 (>= LightWave 6)"); - } - // MODO file format - else if (AI_LWO_FOURCC_LXOB == fileType) { + } else if (AI_LWO_FOURCC_LXOB == fileType) { + // MODO file format mIsLXOB = true; ASSIMP_LOG_INFO("LWO file format: LXOB (Modo)"); } - // we don't know this format else { char szBuff[5]; szBuff[0] = (char)(fileType >> 24u); @@ -421,7 +420,7 @@ void LWOImporter::InternReadFile(const std::string &pFile, // Compute normal vectors for the mesh - we can't use our GenSmoothNormal- // Step here since it wouldn't handle smoothing groups correctly for LWO. // So we use a separate implementation. - ComputeNormals(mesh, smoothingGroups, _mSurfaces[i]); + ComputeNormals(mesh, smoothingGroups, _mSurfaces[j]); } else { ASSIMP_LOG_DEBUG("LWO2: No need to compute normals, they're already there"); } diff --git a/code/glTF/glTFImporter.cpp b/code/glTF/glTFImporter.cpp index 16addc977..90468f063 100644 --- a/code/glTF/glTFImporter.cpp +++ b/code/glTF/glTFImporter.cpp @@ -4,7 +4,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - All rights reserved. Redistribution and use of this software in source and binary forms, diff --git a/code/glTF2/glTF2Importer.cpp b/code/glTF2/glTF2Importer.cpp index 50d0d3cc7..b0d05f7a9 100644 --- a/code/glTF2/glTF2Importer.cpp +++ b/code/glTF2/glTF2Importer.cpp @@ -4,7 +4,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -96,7 +95,7 @@ glTF2Importer::glTF2Importer() : BaseImporter(), meshOffsets(), embeddedTexIdxs(), - mScene(NULL) { + mScene(nullptr) { // empty } diff --git a/include/assimp/anim.h b/include/assimp/anim.h index a7af1034f..7ef5355e6 100644 --- a/include/assimp/anim.h +++ b/include/assimp/anim.h @@ -51,11 +51,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define AI_ANIM_H_INC #ifdef __GNUC__ -# pragma GCC system_header +#pragma GCC system_header #endif -#include #include +#include #ifdef __cplusplus extern "C" { @@ -63,8 +63,7 @@ extern "C" { // --------------------------------------------------------------------------- /** A time-value pair specifying a certain 3D vector for the given time. */ -struct aiVectorKey -{ +struct aiVectorKey { /** The time of this key */ double mTime; @@ -75,34 +74,33 @@ struct aiVectorKey /// @brief The default constructor. aiVectorKey() AI_NO_EXCEPT - : mTime( 0.0 ) - , mValue() { + : mTime(0.0), + mValue() { // empty } /// @brief Construction from a given time and key value. - aiVectorKey(double time, const aiVector3D& value) - : mTime( time ) - , mValue( value ) { + aiVectorKey(double time, const aiVector3D &value) : + mTime(time), mValue(value) { // empty } typedef aiVector3D elem_type; // Comparison operators. For use with std::find(); - bool operator == (const aiVectorKey& rhs) const { + bool operator==(const aiVectorKey &rhs) const { return rhs.mValue == this->mValue; } - bool operator != (const aiVectorKey& rhs ) const { + bool operator!=(const aiVectorKey &rhs) const { return rhs.mValue != this->mValue; } // Relational operators. For use with std::sort(); - bool operator < (const aiVectorKey& rhs ) const { + bool operator<(const aiVectorKey &rhs) const { return mTime < rhs.mTime; } - bool operator > (const aiVectorKey& rhs ) const { + bool operator>(const aiVectorKey &rhs) const { return mTime > rhs.mTime; } #endif // __cplusplus @@ -111,8 +109,7 @@ struct aiVectorKey // --------------------------------------------------------------------------- /** A time-value pair specifying a rotation for the given time. * Rotations are expressed with quaternions. */ -struct aiQuatKey -{ +struct aiQuatKey { /** The time of this key */ double mTime; @@ -121,32 +118,30 @@ struct aiQuatKey #ifdef __cplusplus aiQuatKey() AI_NO_EXCEPT - : mTime( 0.0 ) - , mValue() { + : mTime(0.0), + mValue() { // empty } /** Construction from a given time and key value */ - aiQuatKey(double time, const aiQuaternion& value) - : mTime (time) - , mValue (value) - {} + aiQuatKey(double time, const aiQuaternion &value) : + mTime(time), mValue(value) {} typedef aiQuaternion elem_type; // Comparison operators. For use with std::find(); - bool operator == (const aiQuatKey& rhs ) const { + bool operator==(const aiQuatKey &rhs) const { return rhs.mValue == this->mValue; } - bool operator != (const aiQuatKey& rhs ) const { + bool operator!=(const aiQuatKey &rhs) const { return rhs.mValue != this->mValue; } // Relational operators. For use with std::sort(); - bool operator < (const aiQuatKey& rhs ) const { + bool operator<(const aiQuatKey &rhs) const { return mTime < rhs.mTime; } - bool operator > (const aiQuatKey& rhs ) const { + bool operator>(const aiQuatKey &rhs) const { return mTime > rhs.mTime; } #endif @@ -154,8 +149,7 @@ struct aiQuatKey // --------------------------------------------------------------------------- /** Binds a anim-mesh to a specific point in time. */ -struct aiMeshKey -{ +struct aiMeshKey { /** The time of this key */ double mTime; @@ -168,32 +162,29 @@ struct aiMeshKey #ifdef __cplusplus aiMeshKey() AI_NO_EXCEPT - : mTime(0.0) - , mValue(0) - { + : mTime(0.0), + mValue(0) { } /** Construction from a given time and key value */ - aiMeshKey(double time, const unsigned int value) - : mTime (time) - , mValue (value) - {} + aiMeshKey(double time, const unsigned int value) : + mTime(time), mValue(value) {} typedef unsigned int elem_type; // Comparison operators. For use with std::find(); - bool operator == (const aiMeshKey& o) const { + bool operator==(const aiMeshKey &o) const { return o.mValue == this->mValue; } - bool operator != (const aiMeshKey& o) const { + bool operator!=(const aiMeshKey &o) const { return o.mValue != this->mValue; } // Relational operators. For use with std::sort(); - bool operator < (const aiMeshKey& o) const { + bool operator<(const aiMeshKey &o) const { return mTime < o.mTime; } - bool operator > (const aiMeshKey& o) const { + bool operator>(const aiMeshKey &o) const { return mTime > o.mTime; } @@ -202,8 +193,7 @@ struct aiMeshKey // --------------------------------------------------------------------------- /** Binds a morph anim mesh to a specific point in time. */ -struct aiMeshMorphKey -{ +struct aiMeshMorphKey { /** The time of this key */ double mTime; @@ -214,20 +204,17 @@ struct aiMeshMorphKey /** The number of values and weights */ unsigned int mNumValuesAndWeights; #ifdef __cplusplus - aiMeshMorphKey() AI_NO_EXCEPT - : mTime(0.0) - , mValues(nullptr) - , mWeights(nullptr) - , mNumValuesAndWeights(0) - { + aiMeshMorphKey() AI_NO_EXCEPT + : mTime(0.0), + mValues(nullptr), + mWeights(nullptr), + mNumValuesAndWeights(0) { + } - } - - ~aiMeshMorphKey() - { + ~aiMeshMorphKey() { if (mNumValuesAndWeights && mValues && mWeights) { - delete [] mValues; - delete [] mWeights; + delete[] mValues; + delete[] mWeights; } } #endif @@ -237,25 +224,24 @@ struct aiMeshMorphKey /** Defines how an animation channel behaves outside the defined time * range. This corresponds to aiNodeAnim::mPreState and * aiNodeAnim::mPostState.*/ -enum aiAnimBehaviour -{ +enum aiAnimBehaviour { /** The value from the default node transformation is taken*/ - aiAnimBehaviour_DEFAULT = 0x0, + aiAnimBehaviour_DEFAULT = 0x0, /** The nearest key value is used without interpolation */ aiAnimBehaviour_CONSTANT = 0x1, /** The value of the nearest two keys is linearly * extrapolated for the current time value.*/ - aiAnimBehaviour_LINEAR = 0x2, + aiAnimBehaviour_LINEAR = 0x2, /** The animation is repeated. * * If the animation key go from n to m and the current * time is t, use the value at (t-n) % (|m-n|).*/ - aiAnimBehaviour_REPEAT = 0x3, + aiAnimBehaviour_REPEAT = 0x3, - /** This value is not used, it is just here to force the +/** This value is not used, it is just here to force the * the compiler to map this enum to a 32 Bit integer */ #ifndef SWIG _aiAnimBehaviour_Force32Bit = INT_MAX @@ -290,7 +276,7 @@ struct aiNodeAnim { * * If there are position keys, there will also be at least one * scaling and one rotation key.*/ - C_STRUCT aiVectorKey* mPositionKeys; + C_STRUCT aiVectorKey *mPositionKeys; /** The number of rotation keys */ unsigned int mNumRotationKeys; @@ -301,7 +287,7 @@ struct aiNodeAnim { * * If there are rotation keys, there will also be at least one * scaling and one position key. */ - C_STRUCT aiQuatKey* mRotationKeys; + C_STRUCT aiQuatKey *mRotationKeys; /** The number of scaling keys */ unsigned int mNumScalingKeys; @@ -311,7 +297,7 @@ struct aiNodeAnim { * * If there are scaling keys, there will also be at least one * position and one rotation key.*/ - C_STRUCT aiVectorKey* mScalingKeys; + C_STRUCT aiVectorKey *mScalingKeys; /** Defines how the animation behaves before the first * key is encountered. @@ -329,21 +315,21 @@ struct aiNodeAnim { #ifdef __cplusplus aiNodeAnim() AI_NO_EXCEPT - : mNumPositionKeys( 0 ) - , mPositionKeys( nullptr ) - , mNumRotationKeys( 0 ) - , mRotationKeys( nullptr ) - , mNumScalingKeys( 0 ) - , mScalingKeys( nullptr ) - , mPreState( aiAnimBehaviour_DEFAULT ) - , mPostState( aiAnimBehaviour_DEFAULT ) { - // empty + : mNumPositionKeys(0), + mPositionKeys(nullptr), + mNumRotationKeys(0), + mRotationKeys(nullptr), + mNumScalingKeys(0), + mScalingKeys(nullptr), + mPreState(aiAnimBehaviour_DEFAULT), + mPostState(aiAnimBehaviour_DEFAULT) { + // empty } ~aiNodeAnim() { - delete [] mPositionKeys; - delete [] mRotationKeys; - delete [] mScalingKeys; + delete[] mPositionKeys; + delete[] mRotationKeys; + delete[] mScalingKeys; } #endif // __cplusplus }; @@ -354,8 +340,7 @@ struct aiNodeAnim { * aiMesh::mAnimMeshes array. The purpose of aiMeshAnim is to * define keyframes linking each mesh attachment to a particular * point in time. */ -struct aiMeshAnim -{ +struct aiMeshAnim { /** Name of the mesh to be animated. An empty string is not allowed, * animated meshes need to be named (not necessarily uniquely, * the name can basically serve as wild-card to select a group @@ -366,17 +351,15 @@ struct aiMeshAnim unsigned int mNumKeys; /** Key frames of the animation. May not be NULL. */ - C_STRUCT aiMeshKey* mKeys; + C_STRUCT aiMeshKey *mKeys; #ifdef __cplusplus aiMeshAnim() AI_NO_EXCEPT - : mNumKeys() - , mKeys() - {} + : mNumKeys(), + mKeys() {} - ~aiMeshAnim() - { + ~aiMeshAnim() { delete[] mKeys; } @@ -385,8 +368,7 @@ struct aiMeshAnim // --------------------------------------------------------------------------- /** Describes a morphing animation of a given mesh. */ -struct aiMeshMorphAnim -{ +struct aiMeshMorphAnim { /** Name of the mesh to be animated. An empty string is not allowed, * animated meshes need to be named (not necessarily uniquely, * the name can basically serve as wildcard to select a group @@ -397,17 +379,15 @@ struct aiMeshMorphAnim unsigned int mNumKeys; /** Key frames of the animation. May not be NULL. */ - C_STRUCT aiMeshMorphKey* mKeys; + C_STRUCT aiMeshMorphKey *mKeys; #ifdef __cplusplus aiMeshMorphAnim() AI_NO_EXCEPT - : mNumKeys() - , mKeys() - {} + : mNumKeys(), + mKeys() {} - ~aiMeshMorphAnim() - { + ~aiMeshMorphAnim() { delete[] mKeys; } @@ -435,8 +415,7 @@ struct aiAnimation { /** The node animation channels. Each channel affects a single node. * The array is mNumChannels in size. */ - C_STRUCT aiNodeAnim** mChannels; - + C_STRUCT aiNodeAnim **mChannels; /** The number of mesh animation channels. Each channel affects * a single mesh and defines vertex-based animation. */ @@ -444,7 +423,7 @@ struct aiAnimation { /** The mesh animation channels. Each channel affects a single mesh. * The array is mNumMeshChannels in size. */ - C_STRUCT aiMeshAnim** mMeshChannels; + C_STRUCT aiMeshAnim **mMeshChannels; /** The number of mesh animation channels. Each channel affects * a single mesh and defines morphing animation. */ @@ -456,46 +435,45 @@ struct aiAnimation { #ifdef __cplusplus aiAnimation() AI_NO_EXCEPT - : mDuration(-1.) - , mTicksPerSecond(0.) - , mNumChannels(0) - , mChannels(nullptr) - , mNumMeshChannels(0) - , mMeshChannels(nullptr) - , mNumMorphMeshChannels(0) - , mMorphMeshChannels(nullptr) { + : mDuration(-1.), + mTicksPerSecond(0.), + mNumChannels(0), + mChannels(nullptr), + mNumMeshChannels(0), + mMeshChannels(nullptr), + mNumMorphMeshChannels(0), + mMorphMeshChannels(nullptr) { // empty } ~aiAnimation() { // DO NOT REMOVE THIS ADDITIONAL CHECK - if ( mNumChannels && mChannels ) { - for( unsigned int a = 0; a < mNumChannels; a++) { - delete mChannels[ a ]; + if (mNumChannels && mChannels) { + for (unsigned int a = 0; a < mNumChannels; a++) { + delete mChannels[a]; } - delete [] mChannels; + delete[] mChannels; } - if (mNumMeshChannels && mMeshChannels) { - for( unsigned int a = 0; a < mNumMeshChannels; a++) { + if (mNumMeshChannels && mMeshChannels) { + for (unsigned int a = 0; a < mNumMeshChannels; a++) { delete mMeshChannels[a]; } - delete [] mMeshChannels; + delete[] mMeshChannels; } if (mNumMorphMeshChannels && mMorphMeshChannels) { - for( unsigned int a = 0; a < mNumMorphMeshChannels; a++) { - delete mMorphMeshChannels[a]; - } - - delete [] mMorphMeshChannels; + for (unsigned int a = 0; a < mNumMorphMeshChannels; a++) { + delete mMorphMeshChannels[a]; + } + + delete[] mMorphMeshChannels; } } #endif // __cplusplus }; #ifdef __cplusplus - } /// @brief Some C++ utilities for inter- and extrapolation @@ -509,72 +487,66 @@ namespace Assimp { * types of the arguments. */ template -struct Interpolator -{ +struct Interpolator { // ------------------------------------------------------------------ /** @brief Get the result of the interpolation between a,b. * * The interpolation algorithm depends on the type of the operands. * aiQuaternion's and aiQuatKey's SLERP, the rest does a simple * linear interpolation. */ - void operator () (T& out,const T& a, const T& b, ai_real d) const { - out = a + (b-a)*d; + void operator()(T &anim_out, const T &a, const T &b, ai_real d) const { + anim_out = a + (b - a) * d; } }; // ! Interpolator //! @cond Never template <> -struct Interpolator { - void operator () (aiQuaternion& out,const aiQuaternion& a, - const aiQuaternion& b, ai_real d) const - { - aiQuaternion::Interpolate(out,a,b,d); +struct Interpolator { + void operator()(aiQuaternion &out, const aiQuaternion &a, + const aiQuaternion &b, ai_real d) const { + aiQuaternion::Interpolate(out, a, b, d); } }; // ! Interpolator template <> -struct Interpolator { - void operator () (unsigned int& out,unsigned int a, - unsigned int b, ai_real d) const - { - out = d>0.5f ? b : a; +struct Interpolator { + void operator()(unsigned int &out, unsigned int a, + unsigned int b, ai_real d) const { + out = d > 0.5f ? b : a; } }; // ! Interpolator template <> -struct Interpolator { - void operator () (aiVector3D& out,const aiVectorKey& a, - const aiVectorKey& b, ai_real d) const - { +struct Interpolator { + void operator()(aiVector3D &out, const aiVectorKey &a, + const aiVectorKey &b, ai_real d) const { Interpolator ipl; - ipl(out,a.mValue,b.mValue,d); + ipl(out, a.mValue, b.mValue, d); } }; // ! Interpolator template <> -struct Interpolator { - void operator () (aiQuaternion& out, const aiQuatKey& a, - const aiQuatKey& b, ai_real d) const - { +struct Interpolator { + void operator()(aiQuaternion &out, const aiQuatKey &a, + const aiQuatKey &b, ai_real d) const { Interpolator ipl; - ipl(out,a.mValue,b.mValue,d); + ipl(out, a.mValue, b.mValue, d); } }; // ! Interpolator template <> -struct Interpolator { - void operator () (unsigned int& out, const aiMeshKey& a, - const aiMeshKey& b, ai_real d) const - { +struct Interpolator { + void operator()(unsigned int &out, const aiMeshKey &a, + const aiMeshKey &b, ai_real d) const { Interpolator ipl; - ipl(out,a.mValue,b.mValue,d); + ipl(out, a.mValue, b.mValue, d); } }; // ! Interpolator //! @endcond -} // ! end namespace Assimp +} // namespace Assimp #endif // __cplusplus diff --git a/test/unit/ImportExport/utExporter.cpp b/test/unit/ImportExport/utExporter.cpp index 0fb03b6dc..82f78c7ce 100644 --- a/test/unit/ImportExport/utExporter.cpp +++ b/test/unit/ImportExport/utExporter.cpp @@ -50,8 +50,8 @@ using namespace Assimp; class TestProgressHandler : public ProgressHandler { public: TestProgressHandler() : - ProgressHandler(), - mPercentage (0.f) { + ProgressHandler(), + mPercentage(0.f) { // empty } @@ -60,6 +60,7 @@ public: } bool Update(float percentage = -1.f) override { + mPercentage = percentage; return true; } float mPercentage; diff --git a/test/unit/ImportExport/utNFFImportExport.cpp b/test/unit/ImportExport/utNFFImportExport.cpp index f4d4b3f6a..a555488fa 100644 --- a/test/unit/ImportExport/utNFFImportExport.cpp +++ b/test/unit/ImportExport/utNFFImportExport.cpp @@ -53,7 +53,6 @@ public: virtual bool importerTest() { Assimp::Importer importer; const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/NFF/NFF/ManyEarthsNotJustOne.nff", 0); - return true; return nullptr != scene; } }; diff --git a/test/unit/utMDCImportExport.cpp b/test/unit/utMDCImportExport.cpp index fc4d6445c..9cd30de37 100644 --- a/test/unit/utMDCImportExport.cpp +++ b/test/unit/utMDCImportExport.cpp @@ -53,7 +53,6 @@ public: virtual bool importerTest() { Assimp::Importer importer; const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/MDC/spider.mdc", 0); - return true; return nullptr != scene; } }; diff --git a/test/unit/utObjImportExport.cpp b/test/unit/utObjImportExport.cpp index 6c603bfeb..82eeb249a 100644 --- a/test/unit/utObjImportExport.cpp +++ b/test/unit/utObjImportExport.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -121,11 +119,11 @@ static const char *ObjModel_Issue1111 = class utObjImportExport : public AbstractImportExportBase { protected: - virtual void SetUp() { + void SetUp() override { m_im = new Assimp::Importer; } - virtual void TearDown() { + void TearDown() override { delete m_im; m_im = nullptr; } @@ -289,7 +287,7 @@ TEST_F(utObjImportExport, issue1923_vertex_color_Test) { } TEST_F(utObjImportExport, issue1453_segfault) { - static const char *CurObjModel = + static const char *curObjModel = "v 0.0 0.0 0.0\n" "v 0.0 0.0 1.0\n" "v 0.0 1.0 0.0\n" @@ -300,12 +298,12 @@ TEST_F(utObjImportExport, issue1453_segfault) { "v 1.0 1.0 1.0\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, relative_indices_Test) { - static const char *CurObjModel = + static const char *curObjModel = "v -0.500000 0.000000 0.400000\n" "v -0.500000 0.000000 -0.800000\n" "v -0.500000 1.000000 -0.800000\n" @@ -313,7 +311,7 @@ TEST_F(utObjImportExport, relative_indices_Test) { "f -4 -3 -2 -1\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); @@ -328,14 +326,14 @@ TEST_F(utObjImportExport, relative_indices_Test) { } TEST_F(utObjImportExport, homogeneous_coordinates_Test) { - static const char *CurObjModel = + static const char *curObjModel = "v -0.500000 0.000000 0.400000 0.50000\n" "v -0.500000 0.000000 -0.800000 1.00000\n" "v 0.500000 1.000000 -0.800000 0.5000\n" "f 1 2 3\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); @@ -351,31 +349,31 @@ TEST_F(utObjImportExport, homogeneous_coordinates_Test) { } TEST_F(utObjImportExport, homogeneous_coordinates_divide_by_zero_Test) { - static const char *CurObjModel = + static const char *curObjModel = "v -0.500000 0.000000 0.400000 0.\n" "v -0.500000 0.000000 -0.800000 1.00000\n" "v 0.500000 1.000000 -0.800000 0.5000\n" "f 1 2 3\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, 0based_array_Test) { - static const char *CurObjModel = + static const char *curObjModel = "v -0.500000 0.000000 0.400000\n" "v -0.500000 0.000000 -0.800000\n" "v -0.500000 1.000000 -0.800000\n" "f 0 1 2\nB"; Assimp::Importer myImporter; - const aiScene *scene = myImporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), 0); + const aiScene *scene = myImporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), 0); EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, invalid_normals_uvs) { - static const char *CurObjModel = + static const char *curObjModel = "v -0.500000 0.000000 0.400000\n" "v -0.500000 0.000000 -0.800000\n" "v -0.500000 1.000000 -0.800000\n" @@ -384,12 +382,12 @@ TEST_F(utObjImportExport, invalid_normals_uvs) { "f 1/1/1 1/1/1 2/2/2\nB"; Assimp::Importer myImporter; - const aiScene *scene = myImporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), 0); + const aiScene *scene = myImporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), 0); EXPECT_NE(nullptr, scene); } TEST_F(utObjImportExport, no_vt_just_vns) { - static const char *CurObjModel = + static const char *curObjModel = "v 0 0 0\n" "v 0 0 0\n" "v 0 0 0\n" @@ -417,7 +415,7 @@ TEST_F(utObjImportExport, no_vt_just_vns) { "f 10/10 11/11 12/12\n"; Assimp::Importer myImporter; - const aiScene *scene = myImporter.ReadFileFromMemory(CurObjModel, strlen(CurObjModel), 0); + const aiScene *scene = myImporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), 0); EXPECT_NE(nullptr, scene); } @@ -447,7 +445,7 @@ TEST_F(utObjImportExport, import_without_linend) { } TEST_F(utObjImportExport, import_with_line_continuations) { - static const char *ObjModel = + static const char *curObjModel = "v -0.5 -0.5 0.5\n" "v -0.5 \\\n" " -0.5 -0.5\n" @@ -457,7 +455,7 @@ TEST_F(utObjImportExport, import_with_line_continuations) { "f 1 2 3\n"; Assimp::Importer myImporter; - const aiScene *scene = myImporter.ReadFileFromMemory(ObjModel, strlen(ObjModel), 0); + const aiScene *scene = myImporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), 0); EXPECT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); @@ -479,3 +477,4 @@ TEST_F(utObjImportExport, import_with_line_continuations) { EXPECT_NEAR(vertices[2].y, 0.5f, threshold); EXPECT_NEAR(vertices[2].z, -0.5f, threshold); } + diff --git a/test/unit/utTriangulate.cpp b/test/unit/utTriangulate.cpp index 03aa6d7fb..7baf44558 100644 --- a/test/unit/utTriangulate.cpp +++ b/test/unit/utTriangulate.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -112,11 +110,11 @@ TEST_F(TriangulateProcessTest, testTriangulation) { std::vector ait(q,false); for (unsigned int i = 0, tt = q-2; i < tt; ++i,++m) { - const aiFace& curFace = pcMesh->mFaces[m]; + aiFace& curFace = pcMesh->mFaces[m]; EXPECT_EQ(3U, curFace.mNumIndices); for (unsigned int qqq = 0; qqq < curFace.mNumIndices; ++qqq) { - ait[face.mIndices[qqq]-idx] = true; + ait[curFace.mIndices[qqq] - idx] = true; } } for (std::vector::const_iterator it = ait.begin(); it != ait.end(); ++it) { @@ -139,3 +137,4 @@ TEST_F(TriangulateProcessTest, testTriangulation) { // we should have no valid normal vectors now necause we aren't a pure polygon mesh EXPECT_TRUE(pcMesh->mNormals == NULL); } + diff --git a/tools/assimp_cmd/Export.cpp b/tools/assimp_cmd/Export.cpp index 9ffae03b1..b2306dbb9 100644 --- a/tools/assimp_cmd/Export.cpp +++ b/tools/assimp_cmd/Export.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -46,129 +44,122 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "Main.h" +#include #ifndef ASSIMP_BUILD_NO_EXPORT -const char* AICMD_MSG_EXPORT_HELP_E = -"assimp export [] [-f] [common parameters]\n" -"\t -f Specify the file format. If omitted, the output format is \n" -"\t\tderived from the file extension of the given output file \n" -"\t[See the assimp_cmd docs for a full list of all common parameters] \n" -; - +const char *AICMD_MSG_EXPORT_HELP_E = + "assimp export [] [-f] [common parameters]\n" + "\t -f Specify the file format. If omitted, the output format is \n" + "\t\tderived from the file extension of the given output file \n" + "\t[See the assimp_cmd docs for a full list of all common parameters] \n"; // ----------------------------------------------------------------------------------- -size_t GetMatchingFormat(const std::string& outf,bool byext=false) -{ - for(size_t i = 0, end = globalExporter->GetExportFormatCount(); i < end; ++i) { - const aiExportFormatDesc* const e = globalExporter->GetExportFormatDescription(i); - if (outf == (byext ? e->fileExtension : e->id)) { - return i; - } - } - return SIZE_MAX; +size_t GetMatchingFormat(const std::string &outf, bool byext = false) { + for (size_t i = 0, end = globalExporter->GetExportFormatCount(); i < end; ++i) { + const aiExportFormatDesc *const e = globalExporter->GetExportFormatDescription(i); + if (outf == (byext ? e->fileExtension : e->id)) { + return i; + } + } + return SIZE_MAX; } - // ----------------------------------------------------------------------------------- -int Assimp_Export(const char* const* params, unsigned int num) -{ - const char* const invalid = "assimp export: Invalid number of arguments. See \'assimp export --help\'\n"; - if (num < 1) { - printf(invalid); - return AssimpCmdError::InvalidNumberOfArguments; - } +int Assimp_Export(const char *const *params, unsigned int num) { + const char *const invalid = "assimp export: Invalid number of arguments. See \'assimp export --help\'\n"; + if (num < 1) { + printf(invalid); + return AssimpCmdError::InvalidNumberOfArguments; + } - // --help - if (!strcmp( params[0], "-h") || !strcmp( params[0], "--help") || !strcmp( params[0], "-?") ) { - printf("%s",AICMD_MSG_EXPORT_HELP_E); - return AssimpCmdError::Success; - } + // --help + if (!strcmp(params[0], "-h") || !strcmp(params[0], "--help") || !strcmp(params[0], "-?")) { + printf("%s", AICMD_MSG_EXPORT_HELP_E); + return AssimpCmdError::Success; + } - std::string in = std::string(params[0]); - std::string out = (num > 1 ? std::string(params[1]) : "-"), outext; + std::string in = std::string(params[0]); + std::string out = (num > 1 ? std::string(params[1]) : "-"), outext; - // - const std::string::size_type s = out.find_last_of('.'); - if (s != std::string::npos) { - outext = out.substr(s+1); - out = out.substr(0,s); - } + // + const std::string::size_type s = out.find_last_of('.'); + if (s != std::string::npos) { + outext = out.substr(s + 1); + out = out.substr(0, s); + } - // get import flags - ImportData import; - ProcessStandardArguments(import,params+1,num-1); + // get import flags + ImportData import; + ProcessStandardArguments(import, params + 1, num - 1); - // process other flags - std::string outf = ""; - for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num;++i) { - if (!params[i]) { - continue; - } - if (!strncmp( params[i], "-f",2)) { - if ( strncmp( params[ i ], "-fi",3 )) - outf = std::string(params[i]+2); - } - else if ( !strncmp( params[i], "--format=",9)) { - outf = std::string(params[i]+9); - } - } + // process other flags + std::string outf = ""; + for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num; ++i) { + if (!params[i]) { + continue; + } + if (!strncmp(params[i], "-f", 2)) { + if (strncmp(params[i], "-fi", 3)) + outf = std::string(params[i] + 2); + } else if (!strncmp(params[i], "--format=", 9)) { + outf = std::string(params[i] + 9); + } + } - std::transform(outf.begin(),outf.end(),outf.begin(),::tolower); + std::transform(outf.begin(), outf.end(), outf.begin(), Assimp::ToLower); - // convert the output format to a format id - size_t outfi = GetMatchingFormat(outf); - if (outfi == SIZE_MAX) { - if (outf.length()) { - printf("assimp export: warning, format id \'%s\' is unknown\n",outf.c_str()); - } + // convert the output format to a format id + size_t outfi = GetMatchingFormat(outf); + if (outfi == SIZE_MAX) { + if (outf.length()) { + printf("assimp export: warning, format id \'%s\' is unknown\n", outf.c_str()); + } - // retry to see if we know it as file extension - outfi = GetMatchingFormat(outf,true); - if (outfi == SIZE_MAX) { - // retry to see if we know the file extension of the output file - outfi = GetMatchingFormat(outext,true); + // retry to see if we know it as file extension + outfi = GetMatchingFormat(outf, true); + if (outfi == SIZE_MAX) { + // retry to see if we know the file extension of the output file + outfi = GetMatchingFormat(outext, true); - if (outfi == SIZE_MAX) { - // still no match -> failure - printf("assimp export: no output format specified and I failed to guess it\n"); - return -23; - } - } - else { - outext = outf; - } - } - - // if no output file is specified, take the file name from input file - if (out[0] == '-') { - std::string::size_type pos = in.find_last_of('.'); + if (outfi == SIZE_MAX) { + // still no match -> failure + printf("assimp export: no output format specified and I failed to guess it\n"); + return -23; + } + } else { + outext = outf; + } + } + + // if no output file is specified, take the file name from input file + if (out[0] == '-') { + std::string::size_type pos = in.find_last_of('.'); if (pos == std::string::npos) { pos = in.length(); - } + } - out = in.substr(0,s); - } + out = in.substr(0, pos); + } - const aiExportFormatDesc* const e = globalExporter->GetExportFormatDescription(outfi); - printf("assimp export: select file format: \'%s\' (%s)\n",e->id,e->description); - - // import the model - const aiScene* scene = ImportModel(import,in); - if (!scene) { - return AssimpCmdExportError::FailedToImportModel; - } + const aiExportFormatDesc *const e = globalExporter->GetExportFormatDescription(outfi); + printf("assimp export: select file format: \'%s\' (%s)\n", e->id, e->description); - // derive the final file name - out += "."+outext; + // import the model + const aiScene *scene = ImportModel(import, in); + if (!scene) { + return AssimpCmdExportError::FailedToImportModel; + } - // and call the export routine - if(!ExportModel(scene, import, out,e->id)) { - return AssimpCmdExportError::FailedToExportModel; - } - printf("assimp export: wrote output file: %s\n",out.c_str()); - return AssimpCmdError::Success; + // derive the final file name + out += "." + outext; + + // and call the export routine + if (!ExportModel(scene, import, out, e->id)) { + return AssimpCmdExportError::FailedToExportModel; + } + printf("assimp export: wrote output file: %s\n", out.c_str()); + return AssimpCmdError::Success; } #endif // no export - diff --git a/tools/assimp_cmd/ImageExtractor.cpp b/tools/assimp_cmd/ImageExtractor.cpp index c94fb5882..fe6edba5e 100644 --- a/tools/assimp_cmd/ImageExtractor.cpp +++ b/tools/assimp_cmd/ImageExtractor.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -46,94 +44,89 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "Main.h" -#include +#include #include +#include -const char* AICMD_MSG_DUMP_HELP_E = -"assimp extract [] [-t] [-f] [-ba] [-s] [common parameters]\n" -"\t -ba Writes BMP's with alpha channel\n" -"\t -t Zero-based index of the texture to be extracted \n" -"\t -f Specify the file format if is omitted \n" -"\t[See the assimp_cmd docs for a full list of all common parameters] \n" -"\t -cfast Fast post processing preset, runs just a few important steps \n" -"\t -cdefault Default post processing: runs all recommended steps\n" -"\t -cfull Fires almost all post processing steps \n" -; +static const char *AICMD_MSG_DUMP_HELP_E = + "assimp extract [] [-t] [-f] [-ba] [-s] [common parameters]\n" + "\t -ba Writes BMP's with alpha channel\n" + "\t -t Zero-based index of the texture to be extracted \n" + "\t -f Specify the file format if is omitted \n" + "\t[See the assimp_cmd docs for a full list of all common parameters] \n" + "\t -cfast Fast post processing preset, runs just a few important steps \n" + "\t -cdefault Default post processing: runs all recommended steps\n" + "\t -cfull Fires almost all post processing steps \n"; #define AI_EXTRACT_WRITE_BMP_ALPHA 0x1 #include // ----------------------------------------------------------------------------------- // Data structure for the first header of a BMP -struct BITMAPFILEHEADER -{ - uint16_t bfType ; - uint32_t bfSize; - uint16_t bfReserved1 ; - uint16_t bfReserved2; - uint32_t bfOffBits; +struct BITMAPFILEHEADER { + uint16_t bfType; + uint32_t bfSize; + uint16_t bfReserved1; + uint16_t bfReserved2; + uint32_t bfOffBits; } PACK_STRUCT; // ----------------------------------------------------------------------------------- // Data structure for the second header of a BMP -struct BITMAPINFOHEADER -{ - int32_t biSize; - int32_t biWidth; - int32_t biHeight; - int16_t biPlanes; - int16_t biBitCount; - uint32_t biCompression; - int32_t biSizeImage; - int32_t biXPelsPerMeter; - int32_t biYPelsPerMeter; - int32_t biClrUsed; - int32_t biClrImportant; +struct BITMAPINFOHEADER { + int32_t biSize; + int32_t biWidth; + int32_t biHeight; + int16_t biPlanes; + int16_t biBitCount; + uint32_t biCompression; + int32_t biSizeImage; + int32_t biXPelsPerMeter; + int32_t biYPelsPerMeter; + int32_t biClrUsed; + int32_t biClrImportant; // pixel data follows header } PACK_STRUCT; // ----------------------------------------------------------------------------------- // Data structure for the header of a TGA -struct TGA_HEADER -{ - uint8_t identsize; // size of ID field that follows 18 byte header (0 usually) - uint8_t colourmaptype; // type of colour map 0=none, 1=has palette - uint8_t imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed +struct TGA_HEADER { + uint8_t identsize; // size of ID field that follows 18 byte header (0 usually) + uint8_t colourmaptype; // type of colour map 0=none, 1=has palette + uint8_t imagetype; // type of image 0=none,1=indexed,2=rgb,3=gray,+8=rle packed - uint16_t colourmapstart; // first colour map entry in palette - uint16_t colourmaplength; // number of colours in palette - uint8_t colourmapbits; // number of bits per palette entry 15,16,24,32 + uint16_t colourmapstart; // first colour map entry in palette + uint16_t colourmaplength; // number of colors in palette + uint8_t colourmapbits; // number of bits per palette entry 15,16,24,32 + + uint16_t xstart; // image x origin + uint16_t ystart; // image y origin + uint16_t width; // image width in pixels + uint16_t height; // image height in pixels + uint8_t bits; // image bits per pixel 8,16,24,32 + uint8_t descriptor; // image descriptor bits (vh flip bits) - uint16_t xstart; // image x origin - uint16_t ystart; // image y origin - uint16_t width; // image width in pixels - uint16_t height; // image height in pixels - uint8_t bits; // image bits per pixel 8,16,24,32 - uint8_t descriptor; // image descriptor bits (vh flip bits) - // pixel data follows header } PACK_STRUCT; - #include // ----------------------------------------------------------------------------------- // Save a texture as bitmap -int SaveAsBMP (FILE* file, const aiTexel* data, unsigned int width, unsigned int height, bool SaveAlpha = false) -{ +int SaveAsBMP(FILE *file, const aiTexel *data, unsigned int width, unsigned int height, bool SaveAlpha = false) { if (!file || !data) { return 1; } const unsigned int numc = (SaveAlpha ? 4 : 3); - unsigned char* buffer = new unsigned char[width*height*numc]; + unsigned char *buffer = new unsigned char[width * height * numc]; for (unsigned int y = 0; y < height; ++y) { for (unsigned int x = 0; x < width; ++x) { - unsigned char* s = &buffer[(y*width+x) * numc]; - const aiTexel* t = &data [ y*width+x]; + unsigned char *s = &buffer[(y * width + x) * numc]; + const aiTexel *t = &data[y * width + x]; s[0] = t->b; s[1] = t->g; s[2] = t->r; @@ -143,33 +136,33 @@ int SaveAsBMP (FILE* file, const aiTexel* data, unsigned int width, unsigned int } BITMAPFILEHEADER header; - header.bfType = 'B' | (int('M') << 8u); - header.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); - header.bfSize = header.bfOffBits+width*height*numc; + header.bfType = 'B' | (int('M') << 8u); + header.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); + header.bfSize = header.bfOffBits + width * height * numc; header.bfReserved1 = header.bfReserved2 = 0; - fwrite(&header,sizeof(BITMAPFILEHEADER),1,file); + fwrite(&header, sizeof(BITMAPFILEHEADER), 1, file); BITMAPINFOHEADER info; - info.biSize = 40; - info.biWidth = width; - info.biHeight = height; - info.biPlanes = 1; - info.biBitCount = (int16_t) numc<<3; + info.biSize = 40; + info.biWidth = width; + info.biHeight = height; + info.biPlanes = 1; + info.biBitCount = (int16_t)numc << 3; info.biCompression = 0; - info.biSizeImage = width*height*numc; + info.biSizeImage = width * height * numc; info.biXPelsPerMeter = 1; // dummy info.biYPelsPerMeter = 1; // dummy info.biClrUsed = 0; info.biClrImportant = 0; - fwrite(&info,sizeof(BITMAPINFOHEADER),1,file); + fwrite(&info, sizeof(BITMAPINFOHEADER), 1, file); - unsigned char* temp = buffer+info.biSizeImage; - const unsigned int row = width*numc; + unsigned char *temp = buffer + info.biSizeImage; + const unsigned int row = width * numc; - for (int y = 0; temp -= row,y < info.biHeight;++y) { - fwrite(temp,row,1,file); + for (int y = 0; temp -= row, y < info.biHeight; ++y) { + fwrite(temp, row, 1, file); } // delete the buffer @@ -179,25 +172,24 @@ int SaveAsBMP (FILE* file, const aiTexel* data, unsigned int width, unsigned int // ----------------------------------------------------------------------------------- // Save a texture as tga -int SaveAsTGA (FILE* file, const aiTexel* data, unsigned int width, unsigned int height) -{ +int SaveAsTGA(FILE *file, const aiTexel *data, unsigned int width, unsigned int height) { if (!file || !data) { return 1; } TGA_HEADER head; memset(&head, 0, sizeof(head)); - head.bits = 32; + head.bits = 32; head.height = (uint16_t)height; - head.width = (uint16_t)width; - head.descriptor |= (1u<<5); + head.width = (uint16_t)width; + head.descriptor |= (1u << 5); head.imagetype = 2; // actually it's RGBA - fwrite(&head,sizeof(TGA_HEADER),1,file); + fwrite(&head, sizeof(TGA_HEADER), 1, file); for (unsigned int y = 0; y < height; ++y) { for (unsigned int x = 0; x < width; ++x) { - fwrite(data + y*width+x,4,1,file); + fwrite(data + y * width + x, 4, 1, file); } } @@ -206,18 +198,15 @@ int SaveAsTGA (FILE* file, const aiTexel* data, unsigned int width, unsigned int // ----------------------------------------------------------------------------------- // Do the texture import for a given aiTexture -int DoExport(const aiTexture* tx, FILE* p, const std::string& extension, - unsigned int flags) -{ +int DoExport(const aiTexture *tx, FILE *p, const std::string &extension, + unsigned int flags) { // export the image to the appropriate decoder if (extension == "bmp") { - SaveAsBMP(p,tx->pcData,tx->mWidth,tx->mHeight, - (0 != (flags & AI_EXTRACT_WRITE_BMP_ALPHA))); - } - else if (extension == "tga") { - SaveAsTGA(p,tx->pcData,tx->mWidth,tx->mHeight); - } - else { + SaveAsBMP(p, tx->pcData, tx->mWidth, tx->mHeight, + (0 != (flags & AI_EXTRACT_WRITE_BMP_ALPHA))); + } else if (extension == "tga") { + SaveAsTGA(p, tx->pcData, tx->mWidth, tx->mHeight); + } else { printf("assimp extract: No available texture encoder found for %s\n", extension.c_str()); return AssimpCmdExtractError::NoAvailableTextureEncoderFound; } @@ -226,9 +215,8 @@ int DoExport(const aiTexture* tx, FILE* p, const std::string& extension, // ----------------------------------------------------------------------------------- // Implementation of the assimp extract utility -int Assimp_Extract (const char* const* params, unsigned int num) -{ - const char* const invalid = "assimp extract: Invalid number of arguments. See \'assimp extract --help\'\n"; +int Assimp_Extract(const char *const *params, unsigned int num) { + const char *const invalid = "assimp extract: Invalid number of arguments. See \'assimp extract --help\'\n"; // assimp extract in out [options] if (num < 1) { printf(invalid); @@ -236,46 +224,39 @@ int Assimp_Extract (const char* const* params, unsigned int num) } // --help - if (!strcmp( params[0], "-h") || !strcmp( params[0], "--help") || !strcmp( params[0], "-?") ) { - printf("%s",AICMD_MSG_DUMP_HELP_E); + if (!strcmp(params[0], "-h") || !strcmp(params[0], "--help") || !strcmp(params[0], "-?")) { + printf("%s", AICMD_MSG_DUMP_HELP_E); return AssimpCmdError::Success; } - - - std::string in = std::string(params[0]); + std::string in = std::string(params[0]); std::string out = (num > 1 ? std::string(params[1]) : "-"); // get import flags ImportData import; - ProcessStandardArguments(import,params+1,num-1); + ProcessStandardArguments(import, params + 1, num - 1); bool nosuffix = false; - unsigned int texIdx = 0xffffffff, flags = 0; + unsigned int texIdx = 0xffffffff, flags = 0; // process other flags std::string extension = "bmp"; - for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num;++i) { + for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num; ++i) { if (!params[i]) { continue; } - if (!strncmp( params[i], "-f",2)) { - extension = std::string(params[i]+2); - } - else if ( !strncmp( params[i], "--format=",9)) { - extension = std::string(params[i]+9); - } - else if ( !strcmp( params[i], "--nosuffix") || !strcmp(params[i],"-s")) { + if (!strncmp(params[i], "-f", 2)) { + extension = std::string(params[i] + 2); + } else if (!strncmp(params[i], "--format=", 9)) { + extension = std::string(params[i] + 9); + } else if (!strcmp(params[i], "--nosuffix") || !strcmp(params[i], "-s")) { nosuffix = true; - } - else if ( !strncmp( params[i], "--texture=",10)) { - texIdx = Assimp::strtoul10(params[i]+10); - } - else if ( !strncmp( params[i], "-t",2)) { - texIdx = Assimp::strtoul10(params[i]+2); - } - else if ( !strcmp( params[i], "-ba") || !strcmp( params[i], "--bmp-with-alpha")) { + } else if (!strncmp(params[i], "--texture=", 10)) { + texIdx = Assimp::strtoul10(params[i] + 10); + } else if (!strncmp(params[i], "-t", 2)) { + texIdx = Assimp::strtoul10(params[i] + 2); + } else if (!strcmp(params[i], "-ba") || !strcmp(params[i], "--bmp-with-alpha")) { flags |= AI_EXTRACT_WRITE_BMP_ALPHA; } #if 0 @@ -286,28 +267,28 @@ int Assimp_Extract (const char* const* params, unsigned int num) #endif } - std::transform(extension.begin(),extension.end(),extension.begin(),::tolower); - + std::transform(extension.begin(), extension.end(), extension.begin(), Assimp::ToLower); + if (out[0] == '-') { // take file name from input file std::string::size_type s = in.find_last_of('.'); if (s == std::string::npos) s = in.length(); - out = in.substr(0,s); + out = in.substr(0, s); } // take file extension from file name, if given std::string::size_type s = out.find_last_of('.'); if (s != std::string::npos) { - extension = out.substr(s+1,in.length()-(s+1)); - out = out.substr(0,s); + extension = out.substr(s + 1, in.length() - (s + 1)); + out = out.substr(0, s); } // import the main model - const aiScene* scene = ImportModel(import,in); + const aiScene *scene = ImportModel(import, in); if (!scene) { - printf("assimp extract: Unable to load input file %s\n",in.c_str()); + printf("assimp extract: Unable to load input file %s\n", in.c_str()); return AssimpCmdError::FailedToLoadInputFile; } @@ -317,28 +298,27 @@ int Assimp_Extract (const char* const* params, unsigned int num) // check whether the requested texture is existing if (texIdx >= scene->mNumTextures) { ::printf("assimp extract: Texture %i requested, but there are just %i textures\n", - texIdx, scene->mNumTextures); + texIdx, scene->mNumTextures); return AssimpCmdExtractError::TextureIndexIsOutOfRange; } - } - else { - ::printf("assimp extract: Exporting %i textures\n",scene->mNumTextures); + } else { + ::printf("assimp extract: Exporting %i textures\n", scene->mNumTextures); } // now write all output textures - for (unsigned int i = 0; i < scene->mNumTextures;++i) { + for (unsigned int i = 0; i < scene->mNumTextures; ++i) { if (texIdx != 0xffffffff && texIdx != i) { continue; } - const aiTexture* tex = scene->mTextures[i]; + const aiTexture *tex = scene->mTextures[i]; std::string out_cpy = out, out_ext = extension; // append suffix if necessary - always if all textures are exported if (!nosuffix || (texIdx == 0xffffffff)) { - out_cpy.append ("_img"); + out_cpy.append("_img"); char tmp[10]; - Assimp::ASSIMP_itoa10(tmp,i); + Assimp::ASSIMP_itoa10(tmp, i); out_cpy.append(std::string(tmp)); } @@ -347,32 +327,34 @@ int Assimp_Extract (const char* const* params, unsigned int num) // it to its native file format if (!tex->mHeight) { printf("assimp extract: Texture %i is compressed (%s). Writing native file format.\n", - i,tex->achFormatHint); + i, tex->achFormatHint); // modify file extension out_ext = std::string(tex->achFormatHint); } - out_cpy.append("."+out_ext); + out_cpy.append("." + out_ext); // open output file - FILE* p = ::fopen(out_cpy.c_str(),"wb"); - if (!p) { - printf("assimp extract: Unable to open output file %s\n",out_cpy.c_str()); + FILE *p = ::fopen(out_cpy.c_str(), "wb"); + if (!p) { + printf("assimp extract: Unable to open output file %s\n", out_cpy.c_str()); return AssimpCmdError::FailedToOpenOutputFile; } int m; if (!tex->mHeight) { - m = (1 != fwrite(tex->pcData,tex->mWidth,1,p)) - ? static_cast(AssimpCmdError::Success) - : static_cast(AssimpCmdExtractError::FailedToExportCompressedTexture); + m = (1 != fwrite(tex->pcData, tex->mWidth, 1, p)) ? + static_cast(AssimpCmdError::Success) : + static_cast(AssimpCmdExtractError::FailedToExportCompressedTexture); + } else { + m = DoExport(tex, p, extension, flags); } - else m = DoExport(tex,p,extension,flags); ::fclose(p); - printf("assimp extract: Wrote texture %i to %s\n",i, out_cpy.c_str()); - if (texIdx != 0xffffffff) + printf("assimp extract: Wrote texture %i to %s\n", i, out_cpy.c_str()); + if (texIdx != 0xffffffff) { return m; - } + } + return AssimpCmdError::Success; } diff --git a/tools/assimp_cmd/WriteDump.cpp b/tools/assimp_cmd/WriteDump.cpp index b1c81bbfb..a6ff6539e 100644 --- a/tools/assimp_cmd/WriteDump.cpp +++ b/tools/assimp_cmd/WriteDump.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -79,7 +77,7 @@ int Assimp_Dump(const char *const *params, unsigned int num) { return AssimpCmdError::Success; } - // assimp dump in out [options] + // asssimp dump in out [options] if (num < 1) { printf("%s", fail); return AssimpCmdError::InvalidNumberOfArguments; @@ -104,11 +102,13 @@ int Assimp_Dump(const char *const *params, unsigned int num) { // process other flags for (unsigned int i = 1; i < num; ++i) { - if (!params[i]) continue; + if (!params[i]) { + continue; + } if (!strcmp(params[i], "-b") || !strcmp(params[i], "--binary")) { binary = true; } else if (!strcmp(params[i], "-s") || !strcmp(params[i], "--short")) { - cur_shortened = true; + shortened = true; } else if (!strcmp(params[i], "-z") || !strcmp(params[i], "--compressed")) { compressed = true; } @@ -122,12 +122,12 @@ int Assimp_Dump(const char *const *params, unsigned int num) { if (cur_out[0] == '-') { // take file name from input file - std::string::size_type s = in.find_last_of('.'); - if (s == std::string::npos) { - s = in.length(); + std::string::size_type pos = in.find_last_of('.'); + if (pos == std::string::npos) { + pos = in.length(); } - cur_out = in.substr(0, s); + cur_out = in.substr(0, pos); cur_out.append((binary ? ".assbin" : ".assxml")); if (cur_shortened && binary) { cur_out.append(".regress"); @@ -155,10 +155,10 @@ int Assimp_Dump(const char *const *params, unsigned int num) { printf("%s", ("assimp dump: " + std::string(e.what())).c_str()); return AssimpCmdError::ExceptionWasRaised; } catch (...) { - printf("assimp dump: An unknown exception occured.\n"); + printf("assimp dump: An unknown exception occurred.\n"); return AssimpCmdError::ExceptionWasRaised; } - printf("assimp dump: Wrote output dump %s\n", out.c_str()); + printf("assimp dump: Wrote output dump %s\n", cur_out.c_str()); return AssimpCmdError::Success; }