#include "utTriangulate.h" CPPUNIT_TEST_SUITE_REGISTRATION (TriangulateProcessTest); void TriangulateProcessTest :: setUp (void) { piProcess = new TriangulateProcess(); pcMesh = new aiMesh(); pcMesh->mNumFaces = 1000; pcMesh->mFaces = new aiFace[1000]; pcMesh->mPrimitiveTypes = aiPrimitiveType_POINT | aiPrimitiveType_LINE | aiPrimitiveType_LINE | aiPrimitiveType_POLYGON; for (unsigned int m = 0, t = 0, q = 4; m < 1000; ++m) { ++t; aiFace& face = pcMesh->mFaces[m]; face.mNumIndices = t; if (4 == t) { face.mNumIndices = q++; t = 0; if (10 == q)q = 4; } face.mIndices = new unsigned int[face.mNumIndices]; for (unsigned int p = 0; p < face.mNumIndices; ++p) { face.mIndices[p] = pcMesh->mNumVertices++; } } } void TriangulateProcessTest :: tearDown (void) { delete piProcess; delete pcMesh; } void TriangulateProcessTest :: testTriangulation (void) { piProcess->TriangulateMesh(pcMesh); for (unsigned int m = 0, t = 0, q = 4, max = 1000, idx = 0; m < max;++m) { ++t; aiFace& face = pcMesh->mFaces[m]; if (4 == t) { t = 0; max += q-3; std::vector ait(q,false); for (unsigned int i = 0, tt = q-2; i < tt; ++i,++m) { aiFace& face = pcMesh->mFaces[m]; CPPUNIT_ASSERT(face.mNumIndices == 3); for (unsigned int qqq = 0; qqq < face.mNumIndices; ++qqq) { ait[face.mIndices[qqq]-idx] = true; } } for (std::vector::const_iterator it = ait.begin(); it != ait.end(); ++it) { CPPUNIT_ASSERT(*it); } --m; idx+=q; if(++q == 10)q = 4; } else { CPPUNIT_ASSERT(face.mNumIndices == t); for (unsigned int i = 0; i < face.mNumIndices; ++i,++idx) { CPPUNIT_ASSERT(face.mIndices[i] == idx); } } } }