

#include <d4grid.h>
#include <d4tessdraw.h>


void d4grid::add
(
  uintc i,
  uintc k,
  uintc m
)
{
  unsigned int t = 6*(i+k*dimX+m*dimX*dimY);

//
//  NOTE:
//
//  Grid not connected up.
//  <TODO> Connect up so can transverse grid. 
//

  uintc n00=0;    
  uintc n01=0;   
  uintc n02=t+2;
  uintc n03=0;   

  uintc n10=t+2;
  uintc n11=0;   
  uintc n12=t+4;
  uintc n13=0;   

  uintc n20=t+3;
  uintc n21=t+1;
  uintc n22=t+0;
  uintc n23=0;   

  uintc n30=0;
  uintc n31=t+4;
  uintc n32=0;
  uintc n33=t+2;

  uintc n40=t+5;
  uintc n41=t+3;
  uintc n42=t+1;
  uintc n43=0;

  uintc n50=0;
  uintc n51=0;
  uintc n52=t+4;
  uintc n53=0;

  uintc dx=1;
  uintc dy=dimX+1;
  uintc dz=(dimX+1)*(dimY+1);

  uintc w=i*dx+k*dy+m*dz;

  uintc p0=w;
  uintc p1=w+dx;
  uintc p2=w+dx   +dz;
  uintc p3=w      +dz;
  uintc p4=w   +dy;
  uintc p5=w+dx+dy;
  uintc p6=w+dx+dy+dz;
  uintc p7=w   +dy+dz;

                                       // Triangle
  viadd(p1,p3,p2,p6,n00,n01,n02,n03);  // 0
  viadd(p5,p1,p6,p7,n10,n11,n12,n13);  // 1
  viadd(p6,p3,p7,p1,n20,n21,n22,n23);  // 2

  viadd(p7,p3,p1,p0,n30,n31,n32,n33);  // 3 
  viadd(p1,p5,p0,p7,n40,n41,n42,n43);  // 4
  viadd(p0,p5,p4,p7,n50,n51,n52,n53);  // 5
}


d4grid::d4grid
(
  uintc _dimX,
  uintc _dimY,
  uintc _dimZ,
  realc x0,
  realc x1,
  realc y0,
  realc y1,
  realc z0,
  realc z1
)
  : d4tess(6*(_dimX+1)*(_dimY+1)*(_dimZ+1)),
  dimX(_dimX), dimY(_dimY), dimZ(_dimZ)
{
  realc dx = 1.0/dimX;
  realc dy = 1.0/dimY;
  realc dz = 1.0/dimZ;

  realc xlen=x1-x0;
  realc ylen=y1-y0;
  realc zlen=z1-z0;

  unsigned int i,k,m;

  for (m=0; m<(dimZ+1); ++m)
    for (k=0; k<(dimY+1); ++k)
      for (i=0; i<(dimX+1); ++i)
      {
        pt.push_back( point4<real>(x0+i*dx*xlen,y0+k*dy*ylen,z0+m*dz*zlen,0.0) );
        //ptadd(x0+i*dx*xlen,y0+k*dy*ylen,z0+m*dz*zlen); 
        //add(i,k,m);
      }


  for (m=0; m<dimZ; ++m)
    for (k=0; k<dimY; ++k)
      for (i=0; i<dimX; ++i)
        add(i,k,m);


}






void d4grid::draw(realc cut) const
{

//  d4tessdraw tetd(*this);

cout << "Recode - code was broken." << endl;
assert(false);

//  tetd.draw(cut);

//  uintc visz = vi.size();
//  for (unsigned int i=0; i<visz; ++i)
//    tetd.draw(i,cut);
}







