From 7e7555a91bb5afb92a119303c65b7bea623ceb9d Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 11 Mar 2020 00:43:44 +0100 Subject: [PATCH] fix compiler warnings in tools and test- --- code/LWO/LWOLoader.cpp | 19 +- code/glTF/glTFImporter.cpp | 1 - code/glTF2/glTF2Importer.cpp | 3 +- include/assimp/anim.h | 258 +++++------ test/unit/ImportExport/utExporter.cpp | 15 +- test/unit/ImportExport/utNFFImportExport.cpp | 1 - test/unit/SceneDiffer.cpp | 3 +- test/unit/utMDCImportExport.cpp | 1 - test/unit/utObjImportExport.cpp | 455 +++++++++---------- test/unit/utSortByPType.cpp | 2 +- test/unit/utTriangulate.cpp | 8 +- tools/assimp_cmd/Export.cpp | 197 ++++---- tools/assimp_cmd/ImageExtractor.cpp | 259 +++++------ tools/assimp_cmd/WriteDump.cpp | 180 ++++---- 14 files changed, 669 insertions(+), 733 deletions(-) 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 1ad1ec613..bdebb8da2 100644 --- a/test/unit/ImportExport/utExporter.cpp +++ b/test/unit/ImportExport/utExporter.cpp @@ -49,7 +49,9 @@ using namespace Assimp; class TestProgressHandler : public ProgressHandler { public: - TestProgressHandler() : ProgressHandler() { + TestProgressHandler() : + ProgressHandler(), + mPercentage(0.f) { // empty } @@ -58,8 +60,10 @@ public: } bool Update(float percentage = -1.f) override { + mPercentage = percentage; return true; } + float mPercentage; }; class ExporterTest : public ::testing::Test { @@ -77,12 +81,11 @@ TEST_F(ExporterTest, ExporterIdTest) { Exporter exporter; size_t exportFormatCount = exporter.GetExportFormatCount(); EXPECT_NE(0u, exportFormatCount) << "No registered exporters"; - typedef std::map ExportIdMap; + typedef std::map ExportIdMap; ExportIdMap exporterMap; - for (size_t i = 0; i < exportFormatCount; ++i) - { + for (size_t i = 0; i < exportFormatCount; ++i) { // Check that the exporter description exists and makes sense - const aiExportFormatDesc* desc = exporter.GetExportFormatDescription(i); + const aiExportFormatDesc *desc = exporter.GetExportFormatDescription(i); ASSERT_NE(nullptr, desc) << "Missing aiExportFormatDesc at index " << i; EXPECT_NE(nullptr, desc->id) << "Null exporter ID at index " << i; EXPECT_STRNE("", desc->id) << "Empty exporter ID at index " << i; @@ -97,6 +100,6 @@ TEST_F(ExporterTest, ExporterIdTest) { EXPECT_TRUE(result.second) << "Duplicate exported id: '" << key << "' " << desc->description << " *." << desc->fileExtension << " at index " << i; } - const aiExportFormatDesc* desc = exporter.GetExportFormatDescription(exportFormatCount); + const aiExportFormatDesc *desc = exporter.GetExportFormatDescription(exportFormatCount); EXPECT_EQ(nullptr, desc) << "More exporters than claimed"; } 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/SceneDiffer.cpp b/test/unit/SceneDiffer.cpp index 5a9184954..ab620b859 100644 --- a/test/unit/SceneDiffer.cpp +++ b/test/unit/SceneDiffer.cpp @@ -88,8 +88,6 @@ bool SceneDiffer::isEqual( const aiScene *expected, const aiScene *toCompare ) { } } - // ToDo! - return true; // materials if ( expected->mNumMaterials != toCompare->mNumMaterials ) { std::stringstream stream; @@ -112,6 +110,7 @@ bool SceneDiffer::isEqual( const aiScene *expected, const aiScene *toCompare ) { std::stringstream stream; stream << "Materials are not equal, index : " << i << "\n"; addDiff( stream.str() ); + return false; } } 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 ba084ceb4..1be55aa67 100644 --- a/test/unit/utObjImportExport.cpp +++ b/test/unit/utObjImportExport.cpp @@ -41,83 +41,83 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -#include "UnitTestPCH.h" -#include "SceneDiffer.h" #include "AbstractImportExportBase.h" -#include -#include -#include +#include "SceneDiffer.h" +#include "UnitTestPCH.h" #include +#include +#include +#include using namespace Assimp; -static const float VertComponents[ 24 * 3 ] = { - -0.500000, 0.500000, 0.500000, - -0.500000, 0.500000, -0.500000, +static const float VertComponents[24 * 3] = { + -0.500000, 0.500000, 0.500000, + -0.500000, 0.500000, -0.500000, -0.500000, -0.500000, -0.500000, - -0.500000, -0.500000, 0.500000, + -0.500000, -0.500000, 0.500000, -0.500000, -0.500000, -0.500000, - 0.500000, -0.500000, -0.500000, - 0.500000, -0.500000, 0.500000, - -0.500000, -0.500000, 0.500000, - -0.500000, 0.500000, -0.500000, - 0.500000, 0.500000, -0.500000, - 0.500000, -0.500000, -0.500000, + 0.500000, -0.500000, -0.500000, + 0.500000, -0.500000, 0.500000, + -0.500000, -0.500000, 0.500000, + -0.500000, 0.500000, -0.500000, + 0.500000, 0.500000, -0.500000, + 0.500000, -0.500000, -0.500000, -0.500000, -0.500000, -0.500000, - 0.500000, 0.500000, 0.500000, - 0.500000, 0.500000, -0.500000, - -0.500000, 0.500000, -0.500000, - -0.500000, 0.500000, 0.500000, - 0.500000, -0.500000, 0.500000, - 0.500000, 0.500000, 0.500000, - -0.500000, 0.500000, 0.500000, - -0.500000, -0.500000, 0.500000, - 0.500000, -0.500000, -0.500000, - 0.500000, 0.500000, -0.500000, - 0.500000, 0.500000, 0.500000f, - 0.500000, -0.500000, 0.500000f + 0.500000, 0.500000, 0.500000, + 0.500000, 0.500000, -0.500000, + -0.500000, 0.500000, -0.500000, + -0.500000, 0.500000, 0.500000, + 0.500000, -0.500000, 0.500000, + 0.500000, 0.500000, 0.500000, + -0.500000, 0.500000, 0.500000, + -0.500000, -0.500000, 0.500000, + 0.500000, -0.500000, -0.500000, + 0.500000, 0.500000, -0.500000, + 0.500000, 0.500000, 0.500000f, + 0.500000, -0.500000, 0.500000f }; static const char *ObjModel = - "o 1\n" - "\n" - "# Vertex list\n" - "\n" - "v -0.5 -0.5 0.5\n" - "v -0.5 -0.5 -0.5\n" - "v -0.5 0.5 -0.5\n" - "v -0.5 0.5 0.5\n" - "v 0.5 -0.5 0.5\n" - "v 0.5 -0.5 -0.5\n" - "v 0.5 0.5 -0.5\n" - "v 0.5 0.5 0.5\n" - "\n" - "# Point / Line / Face list\n" - "\n" - "g Box01\n" - "usemtl Default\n" - "f 4 3 2 1\n" - "f 2 6 5 1\n" - "f 3 7 6 2\n" - "f 8 7 3 4\n" - "f 5 8 4 1\n" - "f 6 7 8 5\n" - "\n" - "# End of file\n"; + "o 1\n" + "\n" + "# Vertex list\n" + "\n" + "v -0.5 -0.5 0.5\n" + "v -0.5 -0.5 -0.5\n" + "v -0.5 0.5 -0.5\n" + "v -0.5 0.5 0.5\n" + "v 0.5 -0.5 0.5\n" + "v 0.5 -0.5 -0.5\n" + "v 0.5 0.5 -0.5\n" + "v 0.5 0.5 0.5\n" + "\n" + "# Point / Line / Face list\n" + "\n" + "g Box01\n" + "usemtl Default\n" + "f 4 3 2 1\n" + "f 2 6 5 1\n" + "f 3 7 6 2\n" + "f 8 7 3 4\n" + "f 5 8 4 1\n" + "f 6 7 8 5\n" + "\n" + "# End of file\n"; static const char *ObjModel_Issue1111 = - "o 1\n" - "\n" - "# Vertex list\n" - "\n" - "v -0.5 -0.5 0.5\n" - "v -0.5 -0.5 -0.5\n" - "v -0.5 0.5 -0.5\n" - "\n" - "usemtl\n" - "f 1 2 3\n" - "\n" - "# End of file\n"; + "o 1\n" + "\n" + "# Vertex list\n" + "\n" + "v -0.5 -0.5 0.5\n" + "v -0.5 -0.5 -0.5\n" + "v -0.5 0.5 -0.5\n" + "\n" + "usemtl\n" + "f 1 2 3\n" + "\n" + "# End of file\n"; class utObjImportExport : public AbstractImportExportBase { protected: @@ -133,68 +133,68 @@ protected: aiScene *createScene() { aiScene *expScene = new aiScene; expScene->mNumMeshes = 1; - expScene->mMeshes = new aiMesh*[ 1 ]; + expScene->mMeshes = new aiMesh *[1]; aiMesh *mesh = new aiMesh; - mesh->mName.Set( "1" ); + mesh->mName.Set("1"); mesh->mNumVertices = 24; - mesh->mVertices = new aiVector3D[ 24 ]; - ::memcpy( &mesh->mVertices->x, &VertComponents[ 0 ], sizeof( float ) * 24 * 3 ); + mesh->mVertices = new aiVector3D[24]; + ::memcpy(&mesh->mVertices->x, &VertComponents[0], sizeof(float) * 24 * 3); mesh->mNumFaces = 6; - mesh->mFaces = new aiFace[ mesh->mNumFaces ]; + mesh->mFaces = new aiFace[mesh->mNumFaces]; - mesh->mFaces[ 0 ].mNumIndices = 4; - mesh->mFaces[ 0 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 0 ].mIndices[ 0 ] = 0; - mesh->mFaces[ 0 ].mIndices[ 1 ] = 1; - mesh->mFaces[ 0 ].mIndices[ 2 ] = 2; - mesh->mFaces[ 0 ].mIndices[ 3 ] = 3; + mesh->mFaces[0].mNumIndices = 4; + mesh->mFaces[0].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[0].mIndices[0] = 0; + mesh->mFaces[0].mIndices[1] = 1; + mesh->mFaces[0].mIndices[2] = 2; + mesh->mFaces[0].mIndices[3] = 3; - mesh->mFaces[ 1 ].mNumIndices = 4; - mesh->mFaces[ 1 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 1 ].mIndices[ 0 ] = 4; - mesh->mFaces[ 1 ].mIndices[ 1 ] = 5; - mesh->mFaces[ 1 ].mIndices[ 2 ] = 6; - mesh->mFaces[ 1 ].mIndices[ 3 ] = 7; + mesh->mFaces[1].mNumIndices = 4; + mesh->mFaces[1].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[1].mIndices[0] = 4; + mesh->mFaces[1].mIndices[1] = 5; + mesh->mFaces[1].mIndices[2] = 6; + mesh->mFaces[1].mIndices[3] = 7; - mesh->mFaces[ 2 ].mNumIndices = 4; - mesh->mFaces[ 2 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 2 ].mIndices[ 0 ] = 8; - mesh->mFaces[ 2 ].mIndices[ 1 ] = 9; - mesh->mFaces[ 2 ].mIndices[ 2 ] = 10; - mesh->mFaces[ 2 ].mIndices[ 3 ] = 11; + mesh->mFaces[2].mNumIndices = 4; + mesh->mFaces[2].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[2].mIndices[0] = 8; + mesh->mFaces[2].mIndices[1] = 9; + mesh->mFaces[2].mIndices[2] = 10; + mesh->mFaces[2].mIndices[3] = 11; - mesh->mFaces[ 3 ].mNumIndices = 4; - mesh->mFaces[ 3 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 3 ].mIndices[ 0 ] = 12; - mesh->mFaces[ 3 ].mIndices[ 1 ] = 13; - mesh->mFaces[ 3 ].mIndices[ 2 ] = 14; - mesh->mFaces[ 3 ].mIndices[ 3 ] = 15; + mesh->mFaces[3].mNumIndices = 4; + mesh->mFaces[3].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[3].mIndices[0] = 12; + mesh->mFaces[3].mIndices[1] = 13; + mesh->mFaces[3].mIndices[2] = 14; + mesh->mFaces[3].mIndices[3] = 15; - mesh->mFaces[ 4 ].mNumIndices = 4; - mesh->mFaces[ 4 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 4 ].mIndices[ 0 ] = 16; - mesh->mFaces[ 4 ].mIndices[ 1 ] = 17; - mesh->mFaces[ 4 ].mIndices[ 2 ] = 18; - mesh->mFaces[ 4 ].mIndices[ 3 ] = 19; + mesh->mFaces[4].mNumIndices = 4; + mesh->mFaces[4].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[4].mIndices[0] = 16; + mesh->mFaces[4].mIndices[1] = 17; + mesh->mFaces[4].mIndices[2] = 18; + mesh->mFaces[4].mIndices[3] = 19; - mesh->mFaces[ 5 ].mNumIndices = 4; - mesh->mFaces[ 5 ].mIndices = new unsigned int[ mesh->mFaces[ 0 ].mNumIndices ]; - mesh->mFaces[ 5 ].mIndices[ 0 ] = 20; - mesh->mFaces[ 5 ].mIndices[ 1 ] = 21; - mesh->mFaces[ 5 ].mIndices[ 2 ] = 22; - mesh->mFaces[ 5 ].mIndices[ 3 ] = 23; + mesh->mFaces[5].mNumIndices = 4; + mesh->mFaces[5].mIndices = new unsigned int[mesh->mFaces[0].mNumIndices]; + mesh->mFaces[5].mIndices[0] = 20; + mesh->mFaces[5].mIndices[1] = 21; + mesh->mFaces[5].mIndices[2] = 22; + mesh->mFaces[5].mIndices[3] = 23; - expScene->mMeshes[ 0 ] = mesh; + expScene->mMeshes[0] = mesh; expScene->mNumMaterials = 1; - expScene->mMaterials = new aiMaterial*[ expScene->mNumMaterials ]; + expScene->mMaterials = new aiMaterial *[expScene->mNumMaterials]; return expScene; } virtual bool importerTest() { ::Assimp::Importer importer; - const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure ); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure); return nullptr != scene; } @@ -203,11 +203,11 @@ protected: virtual bool exporterTest() { ::Assimp::Importer importer; ::Assimp::Exporter exporter; - const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure ); - EXPECT_NE( nullptr, scene ); - EXPECT_EQ( aiReturn_SUCCESS, exporter.Export( scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/spider_out.obj" ) ); - EXPECT_EQ( aiReturn_SUCCESS, exporter.Export( scene, "objnomtl", ASSIMP_TEST_MODELS_DIR "/OBJ/spider_nomtl_out.obj" ) ); - + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure); + EXPECT_NE(nullptr, scene); + EXPECT_EQ(aiReturn_SUCCESS, exporter.Export(scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/spider_out.obj")); + EXPECT_EQ(aiReturn_SUCCESS, exporter.Export(scene, "objnomtl", ASSIMP_TEST_MODELS_DIR "/OBJ/spider_nomtl_out.obj")); + return true; } @@ -218,30 +218,29 @@ protected: aiScene *m_expectedScene; }; -TEST_F( utObjImportExport, importObjFromFileTest ) { - EXPECT_TRUE( importerTest() ); +TEST_F(utObjImportExport, importObjFromFileTest) { + EXPECT_TRUE(importerTest()); } #ifndef ASSIMP_BUILD_NO_EXPORT -TEST_F( utObjImportExport, exportObjFromFileTest ) { - EXPECT_TRUE( exporterTest() ); +TEST_F(utObjImportExport, exportObjFromFileTest) { + EXPECT_TRUE(exporterTest()); } #endif // ASSIMP_BUILD_NO_EXPORT -TEST_F( utObjImportExport, obj_import_test ) { - const aiScene *scene = m_im->ReadFileFromMemory( (void*) ObjModel, strlen(ObjModel), 0 ); +TEST_F(utObjImportExport, obj_import_test) { + const aiScene *scene = m_im->ReadFileFromMemory((void *)ObjModel, strlen(ObjModel), 0); aiScene *expected = createScene(); - EXPECT_NE( nullptr, scene ); + EXPECT_NE(nullptr, scene); SceneDiffer differ; - EXPECT_TRUE( differ.isEqual( expected, scene ) ); + EXPECT_TRUE(differ.isEqual(expected, scene)); differ.showReport(); m_im->FreeScene(); - for(unsigned int i = 0; i < expected->mNumMeshes; ++i) - { + for (unsigned int i = 0; i < expected->mNumMeshes; ++i) { delete expected->mMeshes[i]; } delete[] expected->mMeshes; @@ -251,70 +250,70 @@ TEST_F( utObjImportExport, obj_import_test ) { delete expected; } -TEST_F( utObjImportExport, issue1111_no_mat_name_Test ) { - const aiScene *scene = m_im->ReadFileFromMemory( ( void* ) ObjModel_Issue1111, strlen(ObjModel_Issue1111), 0 ); - EXPECT_NE( nullptr, scene ); +TEST_F(utObjImportExport, issue1111_no_mat_name_Test) { + const aiScene *scene = m_im->ReadFileFromMemory((void *)ObjModel_Issue1111, strlen(ObjModel_Issue1111), 0); + EXPECT_NE(nullptr, scene); } -TEST_F( utObjImportExport, issue809_vertex_color_Test ) { +TEST_F(utObjImportExport, issue809_vertex_color_Test) { ::Assimp::Importer importer; - const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/OBJ/cube_with_vertexcolors.obj", aiProcess_ValidateDataStructure ); - EXPECT_NE( nullptr, scene ); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/cube_with_vertexcolors.obj", aiProcess_ValidateDataStructure); + EXPECT_NE(nullptr, scene); #ifndef ASSIMP_BUILD_NO_EXPORT ::Assimp::Exporter exporter; - EXPECT_EQ( aiReturn_SUCCESS, exporter.Export( scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/test_out.obj" ) ); + EXPECT_EQ(aiReturn_SUCCESS, exporter.Export(scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/test_out.obj")); #endif // ASSIMP_BUILD_NO_EXPORT } -TEST_F( utObjImportExport, issue1923_vertex_color_Test ) { +TEST_F(utObjImportExport, issue1923_vertex_color_Test) { ::Assimp::Importer importer; - const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/OBJ/cube_with_vertexcolors_uni.obj", aiProcess_ValidateDataStructure ); - EXPECT_NE( nullptr, scene ); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/cube_with_vertexcolors_uni.obj", aiProcess_ValidateDataStructure); + EXPECT_NE(nullptr, scene); scene = importer.GetOrphanedScene(); #ifndef ASSIMP_BUILD_NO_EXPORT ::Assimp::Exporter exporter; - const aiExportDataBlob* blob = exporter.ExportToBlob( scene, "obj"); - EXPECT_NE( nullptr, blob ); + const aiExportDataBlob *blob = exporter.ExportToBlob(scene, "obj"); + EXPECT_NE(nullptr, blob); - const aiScene *sceneReImport = importer.ReadFileFromMemory( blob->data, blob->size, aiProcess_ValidateDataStructure ); - EXPECT_NE( nullptr, scene ); + const aiScene *sceneReImport = importer.ReadFileFromMemory(blob->data, blob->size, aiProcess_ValidateDataStructure); + EXPECT_NE(nullptr, scene); SceneDiffer differ; - EXPECT_TRUE( differ.isEqual( scene, sceneReImport ) ); + EXPECT_TRUE(differ.isEqual(scene, sceneReImport)); #endif // ASSIMP_BUILD_NO_EXPORT delete scene; } -TEST_F( utObjImportExport, issue1453_segfault ) { - static const char *ObjModel = - "v 0.0 0.0 0.0\n" - "v 0.0 0.0 1.0\n" - "v 0.0 1.0 0.0\n" - "v 0.0 1.0 1.0\n" - "v 1.0 0.0 0.0\n" - "v 1.0 0.0 1.0\n" - "v 1.0 1.0 0.0\n" - "v 1.0 1.0 1.0\nB"; +TEST_F(utObjImportExport, issue1453_segfault) { + 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" + "v 0.0 1.0 1.0\n" + "v 1.0 0.0 0.0\n" + "v 1.0 0.0 1.0\n" + "v 1.0 1.0 0.0\n" + "v 1.0 1.0 1.0\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory( ObjModel, strlen(ObjModel), aiProcess_ValidateDataStructure ); - EXPECT_EQ( nullptr, scene ); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); + EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, relative_indices_Test) { - static const char *ObjModel = - "v -0.500000 0.000000 0.400000\n" - "v -0.500000 0.000000 -0.800000\n" - "v -0.500000 1.000000 -0.800000\n" - "v -0.500000 1.000000 0.400000\n" - "f -4 -3 -2 -1\nB"; + 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" + "v -0.500000 1.000000 0.400000\n" + "f -4 -3 -2 -1\nB"; Assimp::Importer myimporter; - const aiScene *scene = myimporter.ReadFileFromMemory(ObjModel, strlen(ObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); @@ -323,22 +322,20 @@ TEST_F(utObjImportExport, relative_indices_Test) { EXPECT_EQ(mesh->mNumFaces, 1U); const aiFace face = mesh->mFaces[0]; EXPECT_EQ(face.mNumIndices, 4U); - for (unsigned int i = 0; i < face.mNumIndices; ++i) - { + for (unsigned int i = 0; i < face.mNumIndices; ++i) { EXPECT_EQ(face.mIndices[i], i); } - } TEST_F(utObjImportExport, homogeneous_coordinates_Test) { - static const char *ObjModel = - "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"; + 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(ObjModel, strlen(ObjModel), aiProcess_ValidateDataStructure); + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); EXPECT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); @@ -354,84 +351,84 @@ TEST_F(utObjImportExport, homogeneous_coordinates_Test) { } TEST_F(utObjImportExport, homogeneous_coordinates_divide_by_zero_Test) { - static const char *ObjModel = - "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"; + 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(ObjModel, strlen(ObjModel), aiProcess_ValidateDataStructure); - EXPECT_EQ(nullptr, scene); + Assimp::Importer myimporter; + const aiScene *scene = myimporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), aiProcess_ValidateDataStructure); + EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, 0based_array_Test) { - static const char *ObjModel = - "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"; + 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(ObjModel, strlen(ObjModel), 0); + const aiScene *scene = myImporter.ReadFileFromMemory(curObjModel, strlen(curObjModel), 0); EXPECT_EQ(nullptr, scene); } TEST_F(utObjImportExport, invalid_normals_uvs) { - static const char *ObjModel = - "v -0.500000 0.000000 0.400000\n" - "v -0.500000 0.000000 -0.800000\n" - "v -0.500000 1.000000 -0.800000\n" - "vt 0 0\n" - "vn 0 1 0\n" - "f 1/1/1 1/1/1 2/2/2\nB"; + 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" + "vt 0 0\n" + "vn 0 1 0\n" + "f 1/1/1 1/1/1 2/2/2\nB"; 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); } TEST_F(utObjImportExport, no_vt_just_vns) { - static const char *ObjModel = - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 0 0 0\n" - "v 10 0 0\n" - "v 0 10 0\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "vn 0 0 1\n" - "f 10/10 11/11 12/12\n"; + static const char *curObjModel = + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 0 0 0\n" + "v 10 0 0\n" + "v 0 10 0\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "vn 0 0 1\n" + "f 10/10 11/11 12/12\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); } -TEST_F( utObjImportExport, mtllib_after_g ) { +TEST_F(utObjImportExport, mtllib_after_g) { ::Assimp::Importer importer; - const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/OBJ/cube_mtllib_after_g.obj", aiProcess_ValidateDataStructure ); - ASSERT_NE( nullptr, scene ); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/cube_mtllib_after_g.obj", aiProcess_ValidateDataStructure); + ASSERT_NE(nullptr, scene); EXPECT_EQ(scene->mNumMeshes, 1U); const aiMesh *mesh = scene->mMeshes[0]; - const aiMaterial* mat = scene->mMaterials[mesh->mMaterialIndex]; + const aiMaterial *mat = scene->mMaterials[mesh->mMaterialIndex]; aiString name; ASSERT_EQ(aiReturn_SUCCESS, mat->Get(AI_MATKEY_NAME, name)); EXPECT_STREQ("MyMaterial", name.C_Str()); @@ -439,7 +436,7 @@ TEST_F( utObjImportExport, mtllib_after_g ) { TEST_F(utObjImportExport, import_point_cloud) { ::Assimp::Importer importer; - const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/point_cloud.obj", 0 ); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/point_cloud.obj", 0); ASSERT_NE(nullptr, scene); } @@ -450,17 +447,17 @@ TEST_F(utObjImportExport, import_without_linend) { } TEST_F(utObjImportExport, import_with_line_continuations) { - static const char *ObjModel = - "v -0.5 -0.5 0.5\n" - "v -0.5 \\\n" - " -0.5 -0.5\n" - "v -0.5 \\\n" - " 0.5 \\\n" - " -0.5\n" - "f 1 2 3\n"; + static const char *curObjModel = + "v -0.5 -0.5 0.5\n" + "v -0.5 \\\n" + " -0.5 -0.5\n" + "v -0.5 \\\n" + " 0.5 \\\n" + " -0.5\n" + "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); diff --git a/test/unit/utSortByPType.cpp b/test/unit/utSortByPType.cpp index ac9d1368b..2bd04c0be 100644 --- a/test/unit/utSortByPType.cpp +++ b/test/unit/utSortByPType.cpp @@ -183,7 +183,7 @@ TEST_F(SortByPTypeProcessTest, SortByPTypeStep) { unsigned int idx = 0; for (unsigned int m = 0,real = 0; m< 10;++m) { for (unsigned int n = 0; n < 4;++n) { - idx = num[m][n]) + idx = num[m][n]; if (idx) { EXPECT_TRUE(real < mScene->mNumMeshes); diff --git a/test/unit/utTriangulate.cpp b/test/unit/utTriangulate.cpp index c05c8f8d2..62bf09e0d 100644 --- a/test/unit/utTriangulate.cpp +++ b/test/unit/utTriangulate.cpp @@ -112,11 +112,11 @@ TEST_F(TriangulateProcessTest, testTriangulation) { std::vector ait(q,false); for (unsigned int i = 0, tt = q-2; i < tt; ++i,++m) { - aiFace& face = pcMesh->mFaces[m]; - EXPECT_EQ(3U, face.mNumIndices); + aiFace& curFace = pcMesh->mFaces[m]; + EXPECT_EQ(3U, curFace.mNumIndices); - for (unsigned int qqq = 0; qqq < face.mNumIndices; ++qqq) { - ait[face.mIndices[qqq]-idx] = true; + for (unsigned int qqq = 0; qqq < curFace.mNumIndices; ++qqq) { + ait[curFace.mIndices[qqq] - idx] = true; } } for (std::vector::const_iterator it = ait.begin(); it != ait.end(); ++it) { diff --git a/tools/assimp_cmd/Export.cpp b/tools/assimp_cmd/Export.cpp index 65653c558..a5a04b168 100644 --- a/tools/assimp_cmd/Export.cpp +++ b/tools/assimp_cmd/Export.cpp @@ -46,129 +46,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 s = in.find_last_of('.'); - if (s == std::string::npos) { - s = in.length(); - } + 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; + } + } - out = in.substr(0,s); - } + // 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(); + } - 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; - } + out = in.substr(0, pos); + } - // derive the final file name - out += "."+outext; + const aiExportFormatDesc *const e = globalExporter->GetExportFormatDescription(outfi); + printf("assimp export: select file format: \'%s\' (%s)\n", e->id, e->description); - // 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; + // import the model + const aiScene *scene = ImportModel(import, in); + if (!scene) { + return AssimpCmdExportError::FailedToImportModel; + } + + // 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 62fa94f59..353ae6031 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 = 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,35 @@ 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 86542ed2e..5ad3b9dec 100644 --- a/tools/assimp_cmd/WriteDump.cpp +++ b/tools/assimp_cmd/WriteDump.cpp @@ -48,16 +48,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "Main.h" #include "PostProcessing/ProcessHelper.h" -const char* AICMD_MSG_DUMP_HELP = -"assimp dump [] [-b] [-s] [-z] [common parameters]\n" -"\t -b Binary output \n" -"\t -s Shortened \n" -"\t -z Compressed \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" -; +const char *AICMD_MSG_DUMP_HELP = + "assimp dump [] [-b] [-s] [-z] [common parameters]\n" + "\t -b Binary output \n" + "\t -s Shortened \n" + "\t -z Compressed \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"; #include "Common/assbin_chunks.h" #include @@ -66,107 +65,102 @@ const char* AICMD_MSG_DUMP_HELP = #include -FILE* out = NULL; +FILE *out = NULL; bool shortened = false; // ----------------------------------------------------------------------------------- -int Assimp_Dump (const char* const* params, unsigned int num) -{ - const char* fail = "assimp dump: Invalid number of arguments. " - "See \'assimp dump --help\'\r\n"; +int Assimp_Dump(const char *const *params, unsigned int num) { + const char *fail = "assimp dump: Invalid number of arguments. " + "See \'assimp dump --help\'\r\n"; - // --help - if (!strcmp( params[0], "-h") || !strcmp( params[0], "--help") || !strcmp( params[0], "-?") ) { - printf("%s",AICMD_MSG_DUMP_HELP); - return AssimpCmdError::Success; - } + // --help + if (!strcmp(params[0], "-h") || !strcmp(params[0], "--help") || !strcmp(params[0], "-?")) { + printf("%s", AICMD_MSG_DUMP_HELP); + return AssimpCmdError::Success; + } - // asssimp dump in out [options] - if (num < 1) { - printf("%s", fail); - return AssimpCmdError::InvalidNumberOfArguments; - } + // asssimp dump in out [options] + if (num < 1) { + printf("%s", fail); + return AssimpCmdError::InvalidNumberOfArguments; + } - std::string in = std::string(params[0]); - std::string out = (num > 1 ? std::string(params[1]) : std::string("-")); + std::string in = std::string(params[0]); + std::string cur_out = (num > 1 ? std::string(params[1]) : std::string("-")); - // store full command line - std::string cmd; - for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num;++i) { - if (!params[i])continue; - cmd.append(params[i]); - cmd.append(" "); - } + // store full command line + std::string cmd; + for (unsigned int i = (cur_out[0] == '-' ? 1 : 2); i < num; ++i) { + if (!params[i]) continue; + cmd.append(params[i]); + cmd.append(" "); + } - // get import flags - ImportData import; - ProcessStandardArguments(import,params+1,num-1); + // get import flags + ImportData import; + ProcessStandardArguments(import, params + 1, num - 1); - bool binary = false, shortened = false,compressed=false; - - // process other flags - for (unsigned int i = 1; i < num;++i) { - 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")) { - shortened = true; - } - else if (!strcmp( params[i], "-z") || !strcmp( params[i], "--compressed")) { - compressed = true; - } + bool binary = false, cur_shortened = false, compressed = false; + + // process other flags + for (unsigned int i = 1; i < num; ++i) { + 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")) { + shortened = true; + } else if (!strcmp(params[i], "-z") || !strcmp(params[i], "--compressed")) { + compressed = true; + } #if 0 else if (i > 2 || params[i][0] == '-') { ::printf("Unknown parameter: %s\n",params[i]); return 10; } #endif - } + } - 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(); - } + if (cur_out[0] == '-') { + // take file name from input file + std::string::size_type pos = in.find_last_of('.'); + if (pos == std::string::npos) { + pos = in.length(); + } - out = in.substr(0,s); - out.append((binary ? ".assbin" : ".assxml")); - if (shortened && binary) { - out.append(".regress"); - } - } + cur_out = in.substr(0, pos); + cur_out.append((binary ? ".assbin" : ".assxml")); + if (cur_shortened && binary) { + cur_out.append(".regress"); + } + } - // import the main model - const aiScene* scene = ImportModel(import,in); - if (!scene) { - printf("assimp dump: Unable to load input file %s\n",in.c_str()); - return AssimpCmdError::FailedToLoadInputFile; - } + // import the main model + const aiScene *scene = ImportModel(import, in); + if (!scene) { + printf("assimp dump: Unable to load input file %s\n", in.c_str()); + return AssimpCmdError::FailedToLoadInputFile; + } - try { - // Dump the main model, using the appropriate method. - std::unique_ptr pIOSystem(new DefaultIOSystem()); - if (binary) { - DumpSceneToAssbin(out.c_str(), cmd.c_str(), pIOSystem.get(), - scene, shortened, compressed); - } - else { - DumpSceneToAssxml(out.c_str(), cmd.c_str(), pIOSystem.get(), - scene, shortened); - } - } - catch (const std::exception& e) { - printf("%s", ("assimp dump: " + std::string(e.what())).c_str()); - return AssimpCmdError::ExceptionWasRaised; - } - catch (...) { - printf("assimp dump: An unknown exception occured.\n"); - return AssimpCmdError::ExceptionWasRaised; - } + try { + // Dump the main model, using the appropriate method. + std::unique_ptr pIOSystem(new DefaultIOSystem()); + if (binary) { + DumpSceneToAssbin(cur_out.c_str(), cmd.c_str(), pIOSystem.get(), + scene, shortened, compressed); + } else { + DumpSceneToAssxml(cur_out.c_str(), cmd.c_str(), pIOSystem.get(), + scene, shortened); + } + } catch (const std::exception &e) { + printf("%s", ("assimp dump: " + std::string(e.what())).c_str()); + return AssimpCmdError::ExceptionWasRaised; + } catch (...) { + printf("assimp dump: An unknown exception occurred.\n"); + return AssimpCmdError::ExceptionWasRaised; + } - printf("assimp dump: Wrote output dump %s\n",out.c_str()); - return AssimpCmdError::Success; + printf("assimp dump: Wrote output dump %s\n", cur_out.c_str()); + return AssimpCmdError::Success; } -