// Octree Program -- dataarray.h
// Lynn Jones, Virginia Tech, lwjones@vt.edu
#ifndef D_ARRAY
#define D_ARRAY
#include <stdio.h>
#include "constants.h"
#include "octreeNode.h"
class DataArray {
public:
ushort data[xVal][yVal][zVal];
//只要输入mesh,来填充data即可实现由mesh转到cell,同时,可以控制xval。。。来实现non-uniform的octree,从而实现resizing
DataArray(){}
~DataArray(){}
void ReadData() {
for (int i=0; i<zVal; i++)
for (int j=0; j<yVal; j++)
for (int k=0; k<xVal; k++) {
cin >> data[k][j][i];
ushort test=100;
setbit(test,1);
cout<<test;
}
}
void WriteData() {
for (int i=0; i<xVal; i++)
for (int j=0; j<yVal; j++)
for (int k=0; k<zVal; k++)
cout << (short)data[i][j][k];
}
OctreeNode* BuildTree
(int fromX =0, int fromY =0, int fromZ =0, int length = xVal)
/*
Octree subdivides in this order:
1---5
/| /|
0---4 |
| 3-|-7
|/ |/
2---6
*/
{
OctreeNode *parent;
if (length == 1) {
parent = new OctreeNode(LEAF);
parent->value = data[fromX][fromY][fromZ];
return parent;
}
//else
parent = new OctreeNode(INTERNAL);
parent->children[0] = BuildTree(fromX, fromY, fromZ, length/2);
parent->children[1] = BuildTree(fromX, fromY, fromZ+length/2, length/2);
parent->children[2] = BuildTree(fromX, fromY+length/2,fromZ, length/2);
parent->children[3] = BuildTree(fromX, fromY+length/2, fromZ+length/2, length/2);
parent->children[4] = BuildTree(fromX+length/2, fromY, fromZ, length/2);
parent->children[5] = BuildTree(fromX+length/2, fromY, fromZ+length/2, length/2);
parent->children[6] = BuildTree(fromX+length/2, fromY+length/2, fromZ, length/2);
parent->children[7] = BuildTree(fromX+length/2, fromY+length/2, fromZ+length/2, length/2);
parent->value = parent->AverageChildren();
return parent;
}
//遍历得到每个点的value及index来进行drawcube
void TraversalTree(OctreeNode *parent){
if (parent->children)
{
}
}
};
#endif
// Octtree Program -- octreenode.h
// Lynn Jones, Virginia Tech, lwjones@vt.edu
//#ifndef OCTNODE