1 #ifndef POINTSHELL_OBJECT_DATA_H
2 #define POINTSHELL_OBJECT_DATA_H
18 #include <osg/BoundingBox>
19 #include <osg/PolygonMode>
20 #include <osg/StateSet>
22 #include <osg/ShapeDrawable>
23 #include <osg/Material>
24 #include <osg/Geometry>
27 #define FACE(x) ((FaceBase*)getFace(x))
28 #define VERTEX(x) ((VertexBase*)getVertex(x))
30 namespace APSpacePartitioning {
32 template <
class _NodeType>
57 vector<pair<osg::Vec3f,osg::Vec3f>> out;
67 vector<pair<osg::Vec3f,float>> out;
70 out.push_back(make_pair(child->
pos,child->
radius));
131 int getCollisions(
int id){getNodeWithIDFromTree( treeCollisions.getRoot(), id);}
242 float cR = pow(log(c+1)*1.4,0.5);
244 float red = min(cR/0.5f,1.0f);
245 float green = min((1-cR)/0.5f,1.0);
247 color.set(red,green,blue,1.0);
299 return (pow(voxel2->
x - voxel1->
x, 2) + pow(voxel2->
y - voxel1->
y, 2) + pow(voxel2->
z - voxel1->
z, 2));
324 template <
class _NodeType>
330 template <
class _NodeType>
332 destroyPointShells();
337 template <
class _NodeType>
343 destroyPointShell(
Simple);
354 treeSimple.AddNode(NULL, node);
356 for (
unsigned long dw = 0; dw < getVertexCount(); dw++) {
361 treeSimple.AddNode(treeSimple.GetRoot(),
node);
367 for (
int s = 0; s < (int)getVertexCount();s++){
369 for (
int e = 0;e < (int)getVertexCount();e++){
371 if (maxDist < (v1-v2).length2()){
372 maxDist = (v1-v2).length2();
373 maxDistVect.set((v1-v2).x(),(v1-v2).y(),(v1-v2).z());
377 maxDist = sqrt(maxDist);
385 template <
class _NodeType>
387 treeSimple.Clear(
true);
389 treeSingleLevel.Clear(
true);
390 treeMultiLevel.Clear(
true);
395 template <
class _NodeType>
398 treeSimple.Clear(
true);
399 }
else if (type == LOD_Hierarchy){
401 }
else if (type == ByVoxels_SingleLevel) {
402 treeSingleLevel.Clear(
true);
403 }
else if (type == ByVoxels_MultiLevel) {
404 treeMultiLevel.Clear(
true);
411 template <
class _NodeType>
417 if (!bfile->
readInt(&i) || (i != 1))
429 if (!loadNodeFromFileRec(t->
GetRoot(), bfile,t))
436 template <
class _NodeType>
439 if (!node->loadDataFromFile(bfile))
450 if (!(t->
AddNode(node, child)))
453 if (!loadNodeFromFileRec(child, bfile,t))
462 template <
class _NodeType>
470 if (!saveNodeToFileRec(t->
GetRoot(), bfile))
478 template <
class _NodeType>
480 if (!node->saveDataToFile(bfile))
483 _NodeType *child = node->lpChild;
486 saveNodeToFileRec(child, bfile);
487 child = child->lpNext;