Browse Source

Merge pull request #3369 from assimp/issue_3364

Fix incorrect index
Kim Kulling 5 years ago
parent
commit
9fc00cbf74
3 changed files with 62 additions and 5 deletions
  1. 1 1
      code/Common/StandardShapes.cpp
  2. 4 4
      test/CMakeLists.txt
  3. 57 0
      test/unit/Common/utStandardShapes.cpp

+ 1 - 1
code/Common/StandardShapes.cpp

@@ -139,7 +139,7 @@ aiMesh *StandardShapes::MakeMesh(const std::vector<aiVector3D> &positions,
         aiFace &f = out->mFaces[i];
         f.mNumIndices = numIndices;
         f.mIndices = new unsigned int[numIndices];
-        for (unsigned int j = 0; i < numIndices; ++i, ++a) {
+        for (unsigned int j = 0; j < numIndices; ++j, ++a) {
             f.mIndices[j] = a;
         }
     }

+ 4 - 4
test/CMakeLists.txt

@@ -2,8 +2,7 @@
 # ----------------------------------------------------------------------
 #
 # Copyright (c) 2006-2020, assimp team
-
-
+#
 # All rights reserved.
 #
 # Redistribution and use of this software in source and binary forms,
@@ -40,8 +39,8 @@
 cmake_minimum_required( VERSION 3.0 )
 
 INCLUDE_DIRECTORIES(
-	${Assimp_SOURCE_DIR}/contrib/gtest/include
-	${Assimp_SOURCE_DIR}/contrib/gtest/
+    ${Assimp_SOURCE_DIR}/contrib/gtest/include
+    ${Assimp_SOURCE_DIR}/contrib/gtest/
     ${Assimp_SOURCE_DIR}/test/unit
     ${Assimp_SOURCE_DIR}/include
     ${Assimp_SOURCE_DIR}/code
@@ -84,6 +83,7 @@ SET( COMMON
   unit/utProfiler.cpp
   unit/utSharedPPData.cpp
   unit/utStringUtils.cpp
+  unit/Common/utStandardShapes.cpp
   unit/Common/uiScene.cpp
   unit/Common/utLineSplitter.cpp
   unit/Common/utSpatialSort.cpp

+ 57 - 0
test/unit/Common/utStandardShapes.cpp

@@ -0,0 +1,57 @@
+/*
+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,
+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/mesh.h>
+#include <assimp/StandardShapes.h>
+
+using namespace Assimp;
+
+class utStandardShapes : public ::testing::Test {
+    // empty
+};
+
+TEST_F( utStandardShapes, testMakeMesh ) {
+    // Make sphere positions
+    std::vector<aiVector3D> positions;
+    Assimp::StandardShapes::MakeSphere(1, positions);
+
+    // Make mesh
+    const auto numIndicesPerPrimitive = 3;
+    aiMesh *aiMeshPtr = Assimp::StandardShapes::MakeMesh(positions, numIndicesPerPrimitive);
+
+    // The mNumIndices member of the second face is now incorrect
+    const auto& face = aiMeshPtr->mFaces[0];
+    EXPECT_EQ(face.mNumIndices, numIndicesPerPrimitive); 
+    delete aiMeshPtr;
+}
+