Helios++
Helios software for LiDAR simulations
ScenePartSplitTest.h
1 #pragma once
2 
3 #include "BaseTest.h"
4 #include <ScenePart.h>
5 #include <Triangle.h>
6 
7 #include <vector>
8 
9 using std::vector;
10 
11 namespace HeliosTests{
12 
19 public:
20  // *** CONSTRUCTOR *** //
21  // ********************* //
25  ScenePartSplitTest() : BaseTest("Scene part split test"){}
26 
27  // *** R U N *** //
28  // *************** //
32  bool run() override;
33 };
34 
35 
37  // Build primitives
38  vector<Primitive *> prims;
39  for(size_t i = 0 ; i < 32 ; ++i){
40  Vertex v0, v1, v2;
41  v0.pos = glm::dvec3(-1.0, -1.0, 0.0);
42  v1.pos = glm::dvec3(0.0, 0.0, ((double)i)/32.0);
43  v2.pos = glm::dvec3(1.0, 1.0, 0.0);
44  Triangle *tr = new Triangle(v0, v1, v2);
45  prims.push_back(tr);
46  }
47 
48  // Build scene part
49  std::shared_ptr<ScenePart> sp = std::make_shared<ScenePart>();
50  for(size_t i = 0 ; i < 32 ; ++i) {
51  sp->mPrimitives.push_back(prims[i]);
52  prims[i]->part = sp;
53  if (i > 0 && (i % 4) == 0) sp->subpartLimit.push_back(i);
54  }
55  sp->subpartLimit.push_back(32);
56  sp->mId = "0";
57 
58  // Split scene part
59  sp->splitSubparts();
60 
61  // Validate scene part splits
62  for(int i = 0 ; i < 32 ; ++i){
63  int partIdx = std::atoi(prims[i]->part->mId.c_str());
64  if(partIdx != (i/4)){ // On test failed
65  for(Primitive * prim : prims) delete prim;
66  return false;
67  }
68  }
69 
70  // Delete primitives
71  for(Primitive * prim : prims) delete prim;
72 
73  return true;
74 };
75 }
BaseTest class.
Definition: BaseTest.h:20
Scene part split test.
Definition: ScenePartSplitTest.h:18
ScenePartSplitTest()
Scene part split test constructor.
Definition: ScenePartSplitTest.h:25
bool run() override
Definition: ScenePartSplitTest.h:36
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:24
Class representing triangle primitive.
Definition: Triangle.h:13
Class representing a vertex.
Definition: Vertex.h:14
glm::dvec3 pos
Vertex 3D position.
Definition: Vertex.h:39