From d4223d1fce2e9edd8d4c1be1fa48f70042b71876 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 6 Nov 2016 19:36:37 +0100 Subject: [PATCH] closes https://github.com/assimp/assimp/issues/105://github.com/assimp/assimp/issues/1057 --- code/SceneCombiner.cpp | 2 +- include/assimp/metadata.h | 10 +----- include/assimp/types.h | 15 ++++---- test/CMakeLists.txt | 1 + test/unit/utTypes.cpp | 74 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 test/unit/utTypes.cpp diff --git a/code/SceneCombiner.cpp b/code/SceneCombiner.cpp index e167a3600..e19741a9d 100644 --- a/code/SceneCombiner.cpp +++ b/code/SceneCombiner.cpp @@ -740,7 +740,7 @@ void SceneCombiner::MergeBones(aiMesh* out,std::vector::const_iterator aiVertexWeight* avw = pc->mWeights = new aiVertexWeight[pc->mNumWeights]; // And copy the final weights - adjust the vertex IDs by the - // face index offset of the coresponding mesh. + // face index offset of the corresponding mesh. for (std::vector< BoneSrcIndex >::const_iterator wmit = (*it).pSrcBones.begin(); wmit != wend; ++wmit) { aiBone* pip = (*wmit).first; for (unsigned int mp = 0; mp < pip->mNumWeights;++mp,++avw) { diff --git a/include/assimp/metadata.h b/include/assimp/metadata.h index 068bbbe5e..da9d4578e 100644 --- a/include/assimp/metadata.h +++ b/include/assimp/metadata.h @@ -92,14 +92,10 @@ struct aiMetadataEntry void* mData; }; - - #ifdef __cplusplus #include - - // ------------------------------------------------------------------------------- /** * Helper functions to get the aiType enum entry for a type @@ -113,11 +109,7 @@ inline aiMetadataType GetAiType( double ) { return AI_DOUBLE; } inline aiMetadataType GetAiType( aiString ) { return AI_AISTRING; } inline aiMetadataType GetAiType( aiVector3D ) { return AI_AIVECTOR3D; } - - -#endif - - +#endif // __cplusplus // ------------------------------------------------------------------------------- /** diff --git a/include/assimp/types.h b/include/assimp/types.h index 0b48453c6..56e7c2437 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -176,11 +176,7 @@ struct aiColor3D /** Component-wise comparison */ // TODO: add epsilon? bool operator < (const aiColor3D& other) const { - return r < other.r || ( - r == other.r && (g < other.g || - (g == other.g && b < other.b) - ) - ); + return r < other.r || ( r == other.r && (g < other.g || (g == other.g && b < other.b ) ) ); } /** Component-wise addition */ @@ -210,7 +206,14 @@ struct aiColor3D /** Access a specific color component */ ai_real& operator[](unsigned int i) { - return *(&r + i); + if ( 0 == i ) { + return r; + } else if ( 1 == i ) { + return g; + } else if ( 2 == i ) { + return b; + } + return r; } /** Check whether a color is black */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c23ad806f..f2584753d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -92,6 +92,7 @@ SET( TEST_SRCS unit/utTargetAnimation.cpp unit/utTextureTransform.cpp unit/utTriangulate.cpp + unit/utTypes.cpp unit/utVertexTriangleAdjacency.cpp unit/utVersion.cpp ) diff --git a/test/unit/utTypes.cpp b/test/unit/utTypes.cpp new file mode 100644 index 000000000..47c39f989 --- /dev/null +++ b/test/unit/utTypes.cpp @@ -0,0 +1,74 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2016, assimp team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ +#include "UnitTestPCH.h" + +#include + +using namespace Assimp; +class utTypes : public ::testing::Test { + // empty +}; + +TEST_F( utTypes, Color3dCpmpareOpTest ) { + aiColor3D col1( 1, 2, 3 ); + aiColor3D col2( 4, 5, 6 ); + aiColor3D col3( col1 ); + + EXPECT_FALSE( col1 == col2 ); + EXPECT_FALSE( col2 == col3 ); + EXPECT_TRUE( col1 == col3 ); + + EXPECT_TRUE( col1 != col2 ); + EXPECT_TRUE( col2 != col3 ); + EXPECT_FALSE( col1 != col3 ); +} + +TEST_F( utTypes, Color3dIndexOpTest ) { + aiColor3D col( 1, 2, 3 ); + const ai_real r = col[ 0 ]; + EXPECT_FLOAT_EQ( 1, r ); + + const ai_real g = col[ 1 ]; + EXPECT_FLOAT_EQ( 2, g ); + + const ai_real b = col[ 2 ]; + EXPECT_FLOAT_EQ( 3, b ); +}