1#include "BoundingBoxToEdgeSet.h"
5 IMPLEMENT_TCLASS(BoundingBoxToEdgeSet, TDataType)
7 template<typename TDataType>
8 BoundingBoxToEdgeSet<TDataType>::BoundingBoxToEdgeSet()
13 template<typename Coord, typename AABB>
14 __global__ void BBSS_SetupEdgeSet(
15 DArray<Coord> vertices,
16 DArray<TopologyModule::Edge> edges,
19 int tId = threadIdx.x + (blockIdx.x * blockDim.x);
20 if (tId >= aabbs.size()) return;
22 auto aabb = aabbs[tId];
27 int id1 = 8 * tId + 1;
28 int id2 = 8 * tId + 2;
29 int id3 = 8 * tId + 3;
30 int id4 = 8 * tId + 4;
31 int id5 = 8 * tId + 5;
32 int id6 = 8 * tId + 6;
33 int id7 = 8 * tId + 7;
36 vertices[id1] = Coord(v0.x, v0.y, v1.z);
37 vertices[id2] = Coord(v1.x, v0.y, v1.z);
38 vertices[id3] = Coord(v1.x, v0.y, v0.z);
39 vertices[id4] = Coord(v0.x, v1.y, v0.z);
40 vertices[id5] = Coord(v0.x, v1.y, v1.z);
41 vertices[id6] = Coord(v1.x, v1.y, v1.z);
42 vertices[id7] = Coord(v1.x, v1.y, v0.z);
44 edges[12 * tId] = TopologyModule::Edge(id0, id1);
45 edges[12 * tId + 1] = TopologyModule::Edge(id1, id2);
46 edges[12 * tId + 2] = TopologyModule::Edge(id2, id3);
47 edges[12 * tId + 3] = TopologyModule::Edge(id3, id0);
48 edges[12 * tId + 4] = TopologyModule::Edge(id0, id4);
49 edges[12 * tId + 5] = TopologyModule::Edge(id1, id5);
50 edges[12 * tId + 6] = TopologyModule::Edge(id2, id6);
51 edges[12 * tId + 7] = TopologyModule::Edge(id3, id7);
52 edges[12 * tId + 8] = TopologyModule::Edge(id4, id5);
53 edges[12 * tId + 9] = TopologyModule::Edge(id5, id6);
54 edges[12 * tId + 10] = TopologyModule::Edge(id6, id7);
55 edges[12 * tId + 11] = TopologyModule::Edge(id7, id4);
58 template<typename TDataType>
59 bool BoundingBoxToEdgeSet<TDataType>::apply()
61 if (this->outEdgeSet()->isEmpty())
62 this->outEdgeSet()->allocate();
64 auto& aabbs = this->inAABB()->getData();
65 auto outSet = this->outEdgeSet()->getDataPtr();
67 auto& vertices = outSet->getPoints();
68 auto& edges = outSet->getEdges();
70 uint num = aabbs.size();
71 vertices.resize(8 * num);
72 edges.resize(12 * num);
83 DEFINE_CLASS(BoundingBoxToEdgeSet);