diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index 1fd762e40..6257771e6 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -59,7 +59,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include - using namespace Assimp; using namespace Assimp::Collada; using namespace Assimp::Formatter; diff --git a/code/ColladaParser.h b/code/ColladaParser.h index 645ef0dc2..5aa724063 100644 --- a/code/ColladaParser.h +++ b/code/ColladaParser.h @@ -268,8 +268,7 @@ namespace Assimp Collada::InputType GetTypeForSemantic( const std::string& pSemantic); /** Finds the item in the given library by its reference, throws if not found */ - template const Type& ResolveLibraryReference( - const std::map& pLibrary, const std::string& pURL) const; + template const Type& ResolveLibraryReference( const std::map& pLibrary, const std::string& pURL) const; protected: /** Filename, for a verbose error message */ diff --git a/include/assimp/anim.h b/include/assimp/anim.h index 6380b4650..f2ace4416 100644 --- a/include/assimp/anim.h +++ b/include/assimp/anim.h @@ -39,16 +39,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file anim.h - * @brief Defines the data structures in which the imported animations - * are returned. - */ +/** + * @file anim.h + * @brief Defines the data structures in which the imported animations + * are returned. + */ #pragma once #ifndef AI_ANIM_H_INC #define AI_ANIM_H_INC -#include "types.h" -#include "quaternion.h" +#include +#include #ifdef __cplusplus extern "C" { @@ -66,16 +67,20 @@ struct aiVectorKey #ifdef __cplusplus - //! Default constructor - aiVectorKey(){} + /// @brief The default constructor. + aiVectorKey() + : mTime( 0.0 ) + , mValue() { + // empty + } + + /// @brief Construction from a given time and key value. - //! Construction from a given time and key value aiVectorKey(double time, const aiVector3D& value) : mTime (time) , mValue (value) {} - typedef aiVector3D elem_type; // Comparison operators. For use with std::find(); @@ -93,7 +98,7 @@ struct aiVectorKey bool operator > (const aiVectorKey& o) const { return mTime > o.mTime; } -#endif +#endif // __cplusplus }; // --------------------------------------------------------------------------- @@ -108,7 +113,10 @@ struct aiQuatKey C_STRUCT aiQuaternion mValue; #ifdef __cplusplus - aiQuatKey(){ + aiQuatKey() + : mTime( 0.0 ) + , mValue() { + // empty } /** Construction from a given time and key value */ @@ -145,7 +153,7 @@ struct aiMeshKey double mTime; /** Index into the aiMesh::mAnimMeshes array of the - * mesh coresponding to the #aiMeshAnim hosting this + * mesh corresponding to the #aiMeshAnim hosting this * key frame. The referenced anim mesh is evaluated * according to the rules defined in the docs for #aiAnimMesh.*/ unsigned int mValue; @@ -204,8 +212,6 @@ enum aiAnimBehaviour * time is t, use the value at (t-n) % (|m-n|).*/ aiAnimBehaviour_REPEAT = 0x3, - - /** 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 @@ -228,8 +234,7 @@ enum aiAnimBehaviour * Duplicate keys don't pass the validation step. Most likely there * will be no negative time values, but they are not forbidden also ( so * implementations need to cope with them! ) */ -struct aiNodeAnim -{ +struct aiNodeAnim { /** The name of the node affected by this animation. The node * must exist and it must be unique.*/ C_STRUCT aiString mNodeName; @@ -280,17 +285,17 @@ struct aiNodeAnim C_ENUM aiAnimBehaviour mPostState; #ifdef __cplusplus - aiNodeAnim() - { - mNumPositionKeys = 0; mPositionKeys = NULL; - mNumRotationKeys = 0; mRotationKeys = NULL; - mNumScalingKeys = 0; mScalingKeys = NULL; - + aiNodeAnim() + : mNumPositionKeys( 0 ) + , mPositionKeys( NULL ) + , mNumRotationKeys( 0 ) + , mRotationKeys( NULL ) + , mNumScalingKeys( 0 ) + , mScalingKeys( NULL ) { mPreState = mPostState = aiAnimBehaviour_DEFAULT; } - ~aiNodeAnim() - { + ~aiNodeAnim() { delete [] mPositionKeys; delete [] mRotationKeys; delete [] mScalingKeys; @@ -308,7 +313,7 @@ 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 wildcard to select a group + * the name can basically serve as wild-card to select a group * of meshes with similar animation setup)*/ C_STRUCT aiString mName; @@ -334,10 +339,9 @@ struct aiMeshAnim }; // --------------------------------------------------------------------------- -/** An animation consists of keyframe data for a number of nodes. For +/** An animation consists of key-frame data for a number of nodes. For * each node affected by the animation a separate series of data is given.*/ -struct aiAnimation -{ +struct aiAnimation { /** The name of the animation. If the modeling package this data was * exported from does support only a single animation channel, this * name is usually empty (length is zero). */ @@ -385,14 +389,14 @@ struct aiAnimation delete mChannels[a]; } - delete [] mChannels; + delete [] mChannels; } if (mNumMeshChannels && mMeshChannels) { for( unsigned int a = 0; a < mNumMeshChannels; a++) { delete mMeshChannels[a]; } - delete [] mMeshChannels; + delete [] mMeshChannels; } } #endif // __cplusplus @@ -401,15 +405,16 @@ struct aiAnimation #ifdef __cplusplus } - -// some C++ utilities for inter- and extrapolation +/// @brief Some C++ utilities for inter- and extrapolation namespace Assimp { // --------------------------------------------------------------------------- -/** @brief CPP-API: Utility class to simplify interpolations of various data types. - * - * The type of interpolation is chosen automatically depending on the - * types of the arguments. */ +/** + * @brief CPP-API: Utility class to simplify interpolations of various data types. + * + * The type of interpolation is chosen automatically depending on the + * types of the arguments. + */ template struct Interpolator { @@ -445,7 +450,7 @@ struct Interpolator { }; // ! Interpolator template <> -struct Interpolator { +struct Interpolator { void operator () (aiVector3D& out,const aiVectorKey& a, const aiVectorKey& b, ai_real d) const { @@ -455,7 +460,7 @@ struct Interpolator { }; // ! Interpolator template <> -struct Interpolator { +struct Interpolator { void operator () (aiQuaternion& out, const aiQuatKey& a, const aiQuatKey& b, ai_real d) const { @@ -465,7 +470,7 @@ struct Interpolator { }; // ! Interpolator template <> -struct Interpolator { +struct Interpolator { void operator () (unsigned int& out, const aiMeshKey& a, const aiMeshKey& b, ai_real d) const { @@ -475,9 +480,9 @@ struct Interpolator { }; // ! Interpolator //! @endcond + } // ! end namespace Assimp - - #endif // __cplusplus + #endif // AI_ANIM_H_INC diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5a76016fd..c97480ccd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -56,6 +56,7 @@ SOURCE_GROUP( unit FILES SET( TEST_SRCS unit/TestIOSystem.h + unit/utAnim.cpp unit/AssimpAPITest.cpp unit/utBatchLoader.cpp unit/utBlenderIntermediate.cpp diff --git a/test/unit/utAnim.cpp b/test/unit/utAnim.cpp new file mode 100644 index 000000000..f2db2c251 --- /dev/null +++ b/test/unit/utAnim.cpp @@ -0,0 +1,75 @@ +/* +--------------------------------------------------------------------------- +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 utAnim : public ::testing::Test { + // empty +}; + +TEST_F( utAnim, aiVectorKeyCreationTest ) { + aiVectorKey defaultConstTest; + EXPECT_DOUBLE_EQ( 0.0, defaultConstTest.mTime ); + + aiVector3D v( 1, 2, 3 ); + aiVectorKey constrWithValuesTest( 1, v ); + EXPECT_DOUBLE_EQ( 1.0, constrWithValuesTest.mTime ); + EXPECT_EQ( v, constrWithValuesTest.mValue ); + + EXPECT_NE( defaultConstTest, constrWithValuesTest ); + EXPECT_TRUE( defaultConstTest != constrWithValuesTest ); + defaultConstTest.mTime = 1; + constrWithValuesTest.mTime = 2; + EXPECT_TRUE( defaultConstTest < constrWithValuesTest ); +} + +TEST_F( utAnim, aiQuatKeyTest ) { + aiQuatKey defaultConstrTest; + EXPECT_DOUBLE_EQ( 0.0, defaultConstrTest.mTime ); + + aiQuaternion q; + aiQuatKey constrWithValuesTest( 1.0, q ); + EXPECT_DOUBLE_EQ( 1.0, constrWithValuesTest.mTime ); + EXPECT_EQ( q, constrWithValuesTest.mValue ); +} \ No newline at end of file