Kaynağa Gözat

Merge branch 'master' of https://github.com/assimp/assimp

Kim Kulling 8 yıl önce
ebeveyn
işleme
4d92c01933

+ 2 - 0
include/assimp/anim.h

@@ -477,6 +477,8 @@ struct aiAnimation {
                 for( unsigned int a = 0; a < mNumMorphMeshChannels; a++) {
                         delete mMorphMeshChannels[a];
                 }
+            
+            delete [] mMorphMeshChannels;
         }
     }
 #endif // __cplusplus

+ 2 - 7
include/assimp/vector3.h

@@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #   include <math.h>
 #endif
 
-#include "./Compiler/pushpack1.h"
 #include "defs.h"
 
 #ifdef __cplusplus
@@ -126,7 +125,7 @@ public:
     const aiVector3t SymMul(const aiVector3t& o);
 
     TReal x, y, z;
-} PACK_STRUCT;
+};
 
 
 typedef aiVector3t<ai_real> aiVector3D;
@@ -135,16 +134,12 @@ typedef aiVector3t<ai_real> aiVector3D;
 
 struct aiVector3D {
     ai_real x, y, z;
-} PACK_STRUCT;
+};
 
 #endif // __cplusplus
 
-#include "./Compiler/poppack1.h"
-
 #ifdef __cplusplus
 
-
-
 #endif // __cplusplus
 
 #endif // AI_VECTOR3D_H_INC

+ 24 - 2
include/assimp/vector3.inl

@@ -141,12 +141,34 @@ AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::operator *= (const aiMatri
 // ------------------------------------------------------------------------------------------------
 template <typename TReal>
 AI_FORCE_INLINE TReal aiVector3t<TReal>::operator[](unsigned int i) const {
-    return *(&x + i);
+//    return *(&x + i);
+    switch (i) {
+        case 0:
+            return x;
+        case 1:
+            return y;
+        case 2:
+            return z;
+        default:
+            break;
+    }
+    return x;
 }
 // ------------------------------------------------------------------------------------------------
 template <typename TReal>
 AI_FORCE_INLINE TReal& aiVector3t<TReal>::operator[](unsigned int i) {
-    return *(&x + i);
+//    return *(&x + i);
+    switch (i) {
+        case 0:
+            return x;
+        case 1:
+            return y;
+        case 2:
+            return z;
+        default:
+            break;
+    }
+    return x;
 }
 // ------------------------------------------------------------------------------------------------
 template <typename TReal>

+ 1 - 0
test/CMakeLists.txt

@@ -120,6 +120,7 @@ SET( TEST_SRCS
   unit/utTypes.cpp
   unit/utVertexTriangleAdjacency.cpp
   unit/utVersion.cpp
+  unit/utVector3.cpp
   unit/utXImporterExporter.cpp
 )
 

+ 1 - 1
test/unit/utMatrix3x3.cpp

@@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using namespace ::Assimp;
 
 class utMatrix3x3Test : public ::testing::Test {
-
+    // empty
 };
 
 TEST_F( utMatrix3x3Test, FromToMatrixTest ) {

+ 69 - 0
test/unit/utVector3.cpp

@@ -0,0 +1,69 @@
+/*-------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2017, 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 <assimp/vector3.h>
+
+using namespace ::Assimp;
+
+class utVector3 : public ::testing::Test {
+    // empty
+};
+
+TEST_F(utVector3, CreationTest) {
+    aiVector3D v0;
+    aiVector3D v1( 1.0f, 2.0f, 3.0f );
+    EXPECT_FLOAT_EQ (1.0f, v1[ 0 ] );
+    EXPECT_FLOAT_EQ( 2.0f, v1[ 1 ] );
+    EXPECT_FLOAT_EQ( 3.0f, v1[ 2 ] );
+    aiVector3D v2( 1 );
+    EXPECT_FLOAT_EQ( 1.0f, v2[ 0 ] );
+    EXPECT_FLOAT_EQ( 1.0f, v2[ 1 ] );
+    EXPECT_FLOAT_EQ( 1.0f, v2[ 2 ] );
+    aiVector3D v3( v1 );
+    EXPECT_FLOAT_EQ( v1[ 0 ], v3[ 0 ] );
+    EXPECT_FLOAT_EQ( v1[ 1 ], v3[ 1 ] );
+    EXPECT_FLOAT_EQ( v1[ 2 ], v3[ 2 ] );
+}
+
+TEST_F( utVector3, BracketOpTest ) {
+    aiVector3D v(1.0f, 2.0f, 3.0f);
+    EXPECT_FLOAT_EQ( 1.0f, v[ 0 ] );
+    EXPECT_FLOAT_EQ( 2.0f, v[ 1 ] ); 
+    EXPECT_FLOAT_EQ( 3.0f, v[ 2 ] );
+}