utTriangulate.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "utTriangulate.h"
  2. CPPUNIT_TEST_SUITE_REGISTRATION (TriangulateProcessTest);
  3. void TriangulateProcessTest :: setUp (void)
  4. {
  5. piProcess = new TriangulateProcess();
  6. pcMesh = new aiMesh();
  7. pcMesh->mNumFaces = 1000;
  8. pcMesh->mFaces = new aiFace[1000];
  9. pcMesh->mPrimitiveTypes = aiPrimitiveType_POINT | aiPrimitiveType_LINE |
  10. aiPrimitiveType_LINE | aiPrimitiveType_POLYGON;
  11. for (unsigned int m = 0, t = 0, q = 4; m < 1000; ++m)
  12. {
  13. ++t;
  14. aiFace& face = pcMesh->mFaces[m];
  15. face.mNumIndices = t;
  16. if (4 == t)
  17. {
  18. face.mNumIndices = q++;
  19. t = 0;
  20. if (10 == q)q = 4;
  21. }
  22. face.mIndices = new unsigned int[face.mNumIndices];
  23. for (unsigned int p = 0; p < face.mNumIndices; ++p)
  24. {
  25. face.mIndices[p] = pcMesh->mNumVertices++;
  26. }
  27. }
  28. }
  29. void TriangulateProcessTest :: tearDown (void)
  30. {
  31. delete piProcess;
  32. delete pcMesh;
  33. }
  34. void TriangulateProcessTest :: testTriangulation (void)
  35. {
  36. piProcess->TriangulateMesh(pcMesh);
  37. for (unsigned int m = 0, t = 0, q = 4, max = 1000, idx = 0; m < max;++m)
  38. {
  39. ++t;
  40. aiFace& face = pcMesh->mFaces[m];
  41. if (4 == t)
  42. {
  43. t = 0;
  44. max += q-3;
  45. std::vector<bool> ait(q,false);
  46. for (unsigned int i = 0, tt = q-2; i < tt; ++i,++m)
  47. {
  48. aiFace& face = pcMesh->mFaces[m];
  49. CPPUNIT_ASSERT(face.mNumIndices == 3);
  50. for (unsigned int qqq = 0; qqq < face.mNumIndices; ++qqq)
  51. {
  52. ait[face.mIndices[qqq]-idx] = true;
  53. }
  54. }
  55. for (std::vector<bool>::const_iterator it = ait.begin(); it != ait.end(); ++it)
  56. {
  57. CPPUNIT_ASSERT(*it);
  58. }
  59. --m;
  60. idx+=q;
  61. if(++q == 10)q = 4;
  62. }
  63. else
  64. {
  65. CPPUNIT_ASSERT(face.mNumIndices == t);
  66. for (unsigned int i = 0; i < face.mNumIndices; ++i,++idx)
  67. {
  68. CPPUNIT_ASSERT(face.mIndices[i] == idx);
  69. }
  70. }
  71. }
  72. }