ROOT logo
#include <algorithm>
#include <cmath>

#include "TError.h"
#include "TF3.h"

#include "TGLMarchingCubes.h"

/*
Implementation of "marching cubes" algortihm for GL module. Used by 
TF3GLPainter and TGLIsoPainter. 
Good and clear algorithm explanation can be found here: 
http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/
*/

namespace Rgl {
namespace Mc {

namespace {

/*
Some routines, values and tables for marching cube method.
*/
extern const UInt_t  eInt[256];
extern const Float_t vOff[8][3];
extern const UChar_t eConn[12][2];
extern const Float_t eDir[12][3];
extern const Int_t   conTbl[256][16];

enum ECubeBitMasks {
   k0  = 0x1,
   k1  = 0x2,
   k2  = 0x4,
   k3  = 0x8,
   k4  = 0x10,
   k5  = 0x20,
   k6  = 0x40,
   k7  = 0x80,
   k8  = 0x100,
   k9  = 0x200,
   k10 = 0x400,
   k11 = 0x800,
   //
   k1_5            = k1 | k5,
   k2_6            = k2 | k6,
   k3_7            = k3 | k7,
   k4_5_6_7        = k4 | k5 | k6 | k7,
   k5_6            = k5 | k6,
   k0_1_2_3_7_8_11 = k0 | k1 | k2 | k3 | k7 | k8 | k11,
   k6_7            = k6 | k7
};

//_________________________________________________________________
template<class E, class V>
V GetOffset(E val1, E val2, V iso)
{
   const V delta = val2 - val1;
   if (!delta)
      return 0.5f;
   return (iso - val1) / delta;
}

//______________________________________________________________________
template<class E, class V>
void ConnectTriangles(TCell<E> &cell, TIsoMesh<V> *mesh, V eps)
{
   UInt_t t[3];
   for (UInt_t i = 0; i < 5; ++i) {
      if (conTbl[cell.fType][3 * i] < 0)
         break;
      for (Int_t j = 2; j >= 0; --j)
         t[j] = cell.fIds[conTbl[cell.fType][3 * i + j]];

      const V *v0 = &mesh->fVerts[t[0] * 3];
      const V *v1 = &mesh->fVerts[t[1] * 3];
      const V *v2 = &mesh->fVerts[t[2] * 3];

      if (std::abs(v0[0] - v1[0]) < eps && 
          std::abs(v0[1] - v1[1]) < eps &&
          std::abs(v0[2] - v1[2]) < eps)
         continue;

      if (std::abs(v2[0] - v1[0]) < eps && 
          std::abs(v2[1] - v1[1]) < eps &&
          std::abs(v2[2] - v1[2]) < eps)
         continue;

      if (std::abs(v0[0] - v2[0]) < eps && 
          std::abs(v0[1] - v2[1]) < eps &&
          std::abs(v0[2] - v2[2]) < eps)
         continue;

      mesh->AddTriangle(t);
   }
}

}//unnamed namespace.

/*
TF3Adapter.
*/
//______________________________________________________________________
void TF3Adapter::SetDataSource(const TF3 *f3)
{
   fTF3 = f3;
   fW = f3->GetXaxis()->GetNbins();//f3->GetNpx();
   fH = f3->GetYaxis()->GetNbins();//f3->GetNpy();
   fD = f3->GetZaxis()->GetNbins();//f3->GetNpz();
}

//______________________________________________________________________
Double_t TF3Adapter::GetData(UInt_t i, UInt_t j, UInt_t k)const
{
   return fTF3->Eval(fMinX + i * fStepX, 
                     fMinY + j * fStepY, 
                     fMinZ + k * fStepZ);
}

/*
TH3 split edge implementation.
"this->" is used with type-dependant names
in templates.
*/
//______________________________________________________________________
template<class H, class E, typename V>
void TH3EdgeSplitter<H, E, V>::SplitEdge(TCell<E> & cell, TIsoMesh<V> * mesh, UInt_t i, 
                                         V x, V y, V z, V iso)const
{
   V v[3];
   const V offset = GetOffset(cell.fVals[eConn[i][0]], 
                              cell.fVals[eConn[i][1]], 
                              iso);
   v[0] = x + (vOff[eConn[i][0]][0] + offset * eDir[i][0]) * this->fStepX;
   v[1] = y + (vOff[eConn[i][0]][1] + offset * eDir[i][1]) * this->fStepY;
   v[2] = z + (vOff[eConn[i][0]][2] + offset * eDir[i][2]) * this->fStepZ;
   cell.fIds[i] = mesh->AddVertex(v);
}

/*
TF3 split edge implementation.
*/
//______________________________________________________________________
void TF3EdgeSplitter::SplitEdge(TCell<Double_t> & cell, TIsoMesh<Double_t> * mesh, UInt_t i,
                                Double_t x, Double_t y, Double_t z, Double_t iso)const
{
   //Split the edge and find normal in a new vertex.
   Double_t v[3];
   const Double_t ofst = GetOffset(cell.fVals[eConn[i][0]], cell.fVals[eConn[i][1]], iso);
   v[0] = x + (vOff[eConn[i][0]][0] + ofst * eDir[i][0]) * fStepX;
   v[1] = y + (vOff[eConn[i][0]][1] + ofst * eDir[i][1]) * fStepY;
   v[2] = z + (vOff[eConn[i][0]][2] + ofst * eDir[i][2]) * fStepZ;
   cell.fIds[i] = mesh->AddVertex(v);
   //Find normals.
   Double_t n[3];
   n[0] = fTF3->Eval(v[0] - 0.1 * fStepX, v[1], v[2]) -
          fTF3->Eval(v[0] + 0.1 * fStepX, v[1], v[2]);
   n[1] = fTF3->Eval(v[0], v[1] - 0.1 * fStepY, v[2]) -
          fTF3->Eval(v[0], v[1] + 0.1 * fStepY, v[2]);
   n[2] = fTF3->Eval(v[0], v[1], v[2] - 0.1 * fStepZ) -
          fTF3->Eval(v[0], v[1], v[2] + 0.1 * fStepZ);

   const Double_t len = std::sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
   if (len > 1e-7) {
      n[0] /= len;
      n[1] /= len;
      n[2] /= len;
   }

   mesh->AddNormal(n);
}
/*
TMeshBuilder's implementation.
"this->" is used with type-dependant names
in templates.
*/
//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildMesh(const D *s, const TGridGeometry<V> &g,
                                   MeshType_t *m, V iso)
{
   //Build iso-mesh using marching cubes.
   static_cast<TGridGeometry<V> &>(*this) = g;

   this->SetDataSource(s);

   if (GetW() < 2 || GetH() < 2 || GetD() < 2) {
      Error("TMeshBuilder::BuildMesh", 
            "Bad grid size, one of dimensions is less than 2");
      return;
   }

   fSlices[0].ResizeSlice(GetW() - 1, GetH() - 1);
   fSlices[1].ResizeSlice(GetW() - 1, GetH() - 1);

   this->SetNormalEvaluator(s);

   fMesh = m;
   fIso  = iso;

   SliceType_t *slice1 = fSlices;
   SliceType_t *slice2 = fSlices + 1;

   NextStep(0, 0, slice1);

   for (UInt_t i = 1, e = GetD(); i < e - 1; ++i) {
      NextStep(i, slice1, slice2);
      std::swap(slice1, slice2);
   }

   if(fAvgNormals)
      BuildNormals();
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::NextStep(UInt_t depth, const SliceType_t *prevSlice, 
                                  SliceType_t *curr)const
{
   //Fill slice with vertices and triangles.

   if (!prevSlice) {
      //The first slice in mc grid.
      BuildFirstCube(curr);
      BuildRow(curr);
      BuildCol(curr);
      BuildSlice(curr);
   } else {
      BuildFirstCube(depth, prevSlice, curr);
      BuildRow(depth, prevSlice, curr);
      BuildCol(depth, prevSlice, curr);
      BuildSlice(depth, prevSlice, curr);
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildFirstCube(SliceType_t *s)const
{
   //The first cube in a grid. nx == 0, ny == 0, nz ==0.
   CellType_t & cell = s->fCells[0];
   cell.fVals[0] = GetData(0, 0, 0);
   cell.fVals[1] = GetData(1, 0, 0);
   cell.fVals[2] = GetData(1, 1, 0);
   cell.fVals[3] = GetData(0, 1, 0);
   cell.fVals[4] = GetData(0, 0, 1);
   cell.fVals[5] = GetData(1, 0, 1);
   cell.fVals[6] = GetData(1, 1, 1);
   cell.fVals[7] = GetData(0, 1, 1);

   cell.fType = 0;
   for (UInt_t i = 0; i < 8; ++i) {
      if (cell.fVals[i] <= fIso)
         cell.fType |= 1 << i;
   }

   for (UInt_t i = 0, edges = eInt[cell.fType]; i < 12; ++i) {
      if (edges & (1 << i))
         SplitEdge(cell, fMesh, i, this->fMinX, this->fMinY, this->fMinZ, fIso);
   }

   ConnectTriangles(cell, fMesh, fEpsilon);
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildRow(SliceType_t *s)const
{
   //The first row (along x) in the first slice:
   //ny == 0, nz == 0, nx : [1, W - 1].
   //Each cube has previous cube.
   //Values 0, 3, 4, 7 are taken from the previous cube.
   //Edges 3, 7, 8, 11 are taken from the previous cube.
   for (UInt_t i = 1, e = GetW() - 1; i < e; ++i) {
      const CellType_t &prev = s->fCells[i - 1];
      CellType_t &cell = s->fCells[i];
      cell.fType = 0;

      cell.fVals[0] = prev.fVals[1], cell.fVals[4] = prev.fVals[5];
      cell.fVals[7] = prev.fVals[6], cell.fVals[3] = prev.fVals[2];
      cell.fType |= (prev.fType & k1_5) >> 1;
      cell.fType |= (prev.fType & k2_6) << 1;

      if ((cell.fVals[1] = GetData(i + 1, 0, 0)) <= fIso)
         cell.fType |= k1;
      if ((cell.fVals[2] = GetData(i + 1, 1, 0)) <= fIso)
         cell.fType |= k2;
      if ((cell.fVals[5] = GetData(i + 1, 0, 1)) <= fIso)
         cell.fType |= k5;
      if ((cell.fVals[6] = GetData(i + 1, 1, 1)) <= fIso)
         cell.fType |= k6;

      const UInt_t edges = eInt[cell.fType];
      if (!edges)
         continue;
      //1. Take edges 3, 7, 8, 11 from the previous cube.
      if (edges & k3)
         cell.fIds[3]  = prev.fIds[1];
      if (edges & k7)
         cell.fIds[7]  = prev.fIds[5];
      if (edges & k8)
         cell.fIds[8]  = prev.fIds[9];
      if (edges & k11)
         cell.fIds[11] = prev.fIds[10];
      //2. Intersect edges 0, 1, 2, 4, 5, 6, 9, 10.
      const V x = this->fMinX + i * this->fStepX;
      if (edges & k0)
         SplitEdge(cell, fMesh, 0, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k1)
         SplitEdge(cell, fMesh, 1, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k2)
         SplitEdge(cell, fMesh, 2, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k4)
         SplitEdge(cell, fMesh, 4, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k5)
         SplitEdge(cell, fMesh, 5, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k6)
         SplitEdge(cell, fMesh, 6, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k9)
         SplitEdge(cell, fMesh, 9, x, this->fMinY, this->fMinZ, fIso);
      if (edges & k10)
         SplitEdge(cell, fMesh, 10, x, this->fMinY, this->fMinZ, fIso);
      //3. Connect new triangles.
      ConnectTriangles(cell, fMesh, fEpsilon);
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildCol(SliceType_t *s)const
{
   //"Col" (column) consists of cubes along y axis
   //on the first slice (nx == 0, nz == 0).
   //Each cube has a previous cube and shares values:
   //0, 1, 4, 5 (in prev.: 3, 2, 7, 6); and edges:
   //0, 4, 8, 9 (in prev.: 2, 6, 10, 11).
   const UInt_t w = GetW();
   const UInt_t h = GetH();

   for (UInt_t i = 1; i < h - 1; ++i) {
      const CellType_t &prev = s->fCells[(i - 1) * (w - 1)];
      CellType_t &cell = s->fCells[i * (w - 1)];
      cell.fType = 0;
      //Take values 0, 1, 4, 5 from the prev. cube.
      cell.fVals[0] = prev.fVals[3], cell.fVals[1] = prev.fVals[2];
      cell.fVals[4] = prev.fVals[7], cell.fVals[5] = prev.fVals[6];
      cell.fType |= (prev.fType & k2_6) >> 1;
      cell.fType |= (prev.fType & k3_7) >> 3;
      //Calculate values 2, 3, 6, 7.
      if((cell.fVals[2] = GetData(1, i + 1, 0)) <= fIso)
         cell.fType |= k2;
      if((cell.fVals[3] = GetData(0, i + 1, 0)) <= fIso)
         cell.fType |= k3;
      if((cell.fVals[6] = GetData(1, i + 1, 1)) <= fIso)
         cell.fType |= k6;
      if((cell.fVals[7] = GetData(0, i + 1, 1)) <= fIso)
         cell.fType |= k7;

      const UInt_t edges = eInt[cell.fType];
      if(!edges)
         continue;
      //Take edges from the previous cube.
      if (edges & k0)
         cell.fIds[0] = prev.fIds[2];
      if (edges & k4)
         cell.fIds[4] = prev.fIds[6];
      if (edges & k9)
         cell.fIds[9] = prev.fIds[10];
      if (edges & k8)
         cell.fIds[8] = prev.fIds[11];
      //Find the remaining edges.
      const V y = this->fMinY + i * this->fStepY;

      if (edges & k1)
         SplitEdge(cell, fMesh, 1, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k2)
         SplitEdge(cell, fMesh, 2, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k3)
         SplitEdge(cell, fMesh, 3, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k5)
         SplitEdge(cell, fMesh, 5, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k6)
         SplitEdge(cell, fMesh, 6, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k7)
         SplitEdge(cell, fMesh, 7, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k10)
         SplitEdge(cell, fMesh, 10, this->fMinX, y, this->fMinZ, fIso);
      if (edges & k11)
         SplitEdge(cell, fMesh, 11, this->fMinX, y, this->fMinZ, fIso);

      ConnectTriangles(cell, fMesh, fEpsilon);
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildSlice(SliceType_t *s)const
{
   //Slice with nz == 0.
   //nx : [1, W - 1], ny : [1, H - 1].
   //nx increased inside inner loop, ny - enclosing loop.
   //Each cube has two neighbours: ny - 1 => "left",
   //nx - 1 => "right".
   const UInt_t w = GetW();
   const UInt_t h = GetH();

   for (UInt_t i = 1; i < h - 1; ++i) {
      const V y = this->fMinY + i * this->fStepY;

      for (UInt_t j = 1; j < w - 1; ++j) {
         const CellType_t &left  = s->fCells[(i - 1) * (w - 1) + j];
         const CellType_t &right = s->fCells[i * (w - 1) + j - 1];
         CellType_t &cell = s->fCells[i * (w - 1) + j];
         cell.fType = 0;
         //Take values 0, 1, 4, 5 from left cube.
         cell.fVals[1] = left.fVals[2];
         cell.fVals[0] = left.fVals[3];
         cell.fVals[5] = left.fVals[6];
         cell.fVals[4] = left.fVals[7];
         cell.fType |= (left.fType & k2_6) >> 1;
         cell.fType |= (left.fType & k3_7) >> 3;
         //3, 7 from right cube.
         cell.fVals[3] = right.fVals[2];
         cell.fVals[7] = right.fVals[6];
         cell.fType |= (right.fType & k2_6) << 1;
         //Calculate values 2, 6.
         if((cell.fVals[2] = GetData(j + 1, i + 1, 0)) <= fIso)
            cell.fType |= k2;
         if((cell.fVals[6] = GetData(j + 1, i + 1, 1)) <= fIso)
            cell.fType |= k6;

         const UInt_t edges = eInt[cell.fType];
         if(!edges)
            continue;
         //Take edges 0, 4, 8, 9 from the "left" cube.
         //In left cube their indices are 2, 6, 11, 10.
         if(edges & k0)
            cell.fIds[0] = left.fIds[2];
         if(edges & k4)
            cell.fIds[4] = left.fIds[6];
         if(edges & k8)
            cell.fIds[8] = left.fIds[11];
         if(edges & k9)
            cell.fIds[9] = left.fIds[10];
         //Take edges 3, 7, 11 from the "right" cube.
         //Their "right" indices are 1, 5, 10.
         if(edges & k3)
            cell.fIds[3]  = right.fIds[1];
         if(edges & k7)
            cell.fIds[7]  = right.fIds[5];
         if(edges & k11)
            cell.fIds[11] = right.fIds[10];
         //Calculate the remaining intersections: edges
         //1, 2, 5, 6, 10.
         const V x = this->fMinX + j * this->fStepX;
         if (edges & k1)
            SplitEdge(cell, fMesh, 1, x, y, this->fMinZ, fIso);
         if (edges & k2)
            SplitEdge(cell, fMesh, 2, x, y, this->fMinZ, fIso);
         if (edges & k5)
            SplitEdge(cell, fMesh, 5, x, y, this->fMinZ, fIso);
         if (edges & k6)
            SplitEdge(cell, fMesh, 6, x, y, this->fMinZ, fIso);
         if (edges & k10)
            SplitEdge(cell, fMesh, 10, x, y, this->fMinZ, fIso);

         ConnectTriangles(cell, fMesh, fEpsilon);
      }
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildFirstCube(UInt_t depth, const SliceType_t *prevSlice,
                                        SliceType_t *slice)const
{
   //The first cube in a slice with nz == depth.
   //Neighbour is the first cube in the previous slice.
   //Four values and four edges come from the previous cube.
   const CellType_t &prevCell = prevSlice->fCells[0];
   CellType_t &cell = slice->fCells[0];
   cell.fType = 0;
   //Values 0, 1, 2, 3 are 4, 5, 6, 7
   //in the previous cube.
   cell.fVals[0] = prevCell.fVals[4];
   cell.fVals[1] = prevCell.fVals[5];
   cell.fVals[2] = prevCell.fVals[6];
   cell.fVals[3] = prevCell.fVals[7];
   cell.fType |= (prevCell.fType & k4_5_6_7) >> 4;
   //Calculate 4, 5, 6, 7.
   if((cell.fVals[4] = GetData(0, 0, depth + 1)) <= fIso)
      cell.fType |= k4;
   if((cell.fVals[5] = GetData(1, 0, depth + 1)) <= fIso)
      cell.fType |= k5;
   if((cell.fVals[6] = GetData(1, 1, depth + 1)) <= fIso)
      cell.fType |= k6;
   if((cell.fVals[7] = GetData(0, 1, depth + 1)) <= fIso)
      cell.fType |= k7;

   const UInt_t edges = eInt[cell.fType];
   if(!edges)
      return;

   //Edges 0, 1, 2, 3 taken from the prev. cube -
   //they have indices 4, 5, 6, 7 there.
   if(edges & k0)
      cell.fIds[0] = prevCell.fIds[4];
   if(edges & k1)
      cell.fIds[1] = prevCell.fIds[5];
   if(edges & k2)
      cell.fIds[2] = prevCell.fIds[6];
   if(edges & k3)
      cell.fIds[3] = prevCell.fIds[7];

   const V z = this->fMinZ + depth * this->fStepZ;

   if(edges & k4)
      SplitEdge(cell, fMesh, 4,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k5)
      SplitEdge(cell, fMesh, 5,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k6)
      SplitEdge(cell, fMesh, 6,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k7)
      SplitEdge(cell, fMesh, 7,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k8)
      SplitEdge(cell, fMesh, 8,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k9)
      SplitEdge(cell, fMesh, 9,  this->fMinX, this->fMinY, z, fIso);
   if(edges & k10)
      SplitEdge(cell, fMesh, 10, this->fMinX, this->fMinY, z, fIso);
   if(edges & k11)
      SplitEdge(cell, fMesh, 11, this->fMinX, this->fMinY, z, fIso);

   ConnectTriangles(cell, fMesh, fEpsilon);
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildRow(UInt_t depth, const SliceType_t *prevSlice,
                                  SliceType_t *slice)const
{
   //Row with ny == 0 and nz == depth, nx : [1, W - 1].
   //Two neighbours: one from previous slice (called bottom cube here),
   //the second is the previous cube in a row.
   const V z = this->fMinZ + depth * this->fStepZ;
   const UInt_t w = GetW();

   for (UInt_t i = 1; i < w - 1; ++i) {
      const CellType_t &prevCell = slice->fCells[i - 1];
      const CellType_t &bottCell = prevSlice->fCells[i];
      CellType_t &cell = slice->fCells[i];
      cell.fType = 0;
      //Value 0 is not required,
      //only bit number 0 in fType is interesting.
      //3, 4, 7 come from the previous box (2, 5, 6)
      cell.fVals[3] = prevCell.fVals[2];
      cell.fVals[4] = prevCell.fVals[5];
      cell.fVals[7] = prevCell.fVals[6];
      cell.fType |= (prevCell.fType & k1_5) >> 1;
      cell.fType |= (prevCell.fType & k2_6) << 1;
      //1, 2 can be taken from the bottom cube (5, 6).
      cell.fVals[1] = bottCell.fVals[5];
      cell.fVals[2] = bottCell.fVals[6];
      cell.fType |= (bottCell.fType & k5_6) >> 4;
      //5, 6 must be calculated.
      if((cell.fVals[5] = GetData(i + 1, 0, depth + 1)) <= fIso)
         cell.fType |= k5;
      if((cell.fVals[6] = GetData(i + 1, 1, depth + 1)) <= fIso)
         cell.fType |= k6;

      UInt_t edges = eInt[cell.fType];

      if(!edges)
         continue;
      //Take edges 3, 7, 8, 11 from the previous cube (1, 5, 9, 10).
      if(edges & k3)
         cell.fIds[3] = prevCell.fIds[1];
      if(edges & k7)
         cell.fIds[7] = prevCell.fIds[5];
      if(edges & k8)
         cell.fIds[8] = prevCell.fIds[9];
      if(edges & k11)
         cell.fIds[11] = prevCell.fIds[10];
      //Take edges 0, 1, 2 from the bottom cube (4, 5, 6).
      if(edges & k0)
         cell.fIds[0] = bottCell.fIds[4];
      if(edges & k1)
         cell.fIds[1] = bottCell.fIds[5];
      if(edges & k2)
         cell.fIds[2] = bottCell.fIds[6];

      edges &= ~k0_1_2_3_7_8_11;

      if (edges) {
         const V x = this->fMinX + i * this->fStepX;

         if(edges & k4)
            SplitEdge(cell, fMesh, 4,  x, this->fMinY, z, fIso);
         if(edges & k5)
            SplitEdge(cell, fMesh, 5,  x, this->fMinY, z, fIso);
         if(edges & k6)
            SplitEdge(cell, fMesh, 6,  x, this->fMinY, z, fIso);
         if(edges & k9)
            SplitEdge(cell, fMesh, 9,  x, this->fMinY, z, fIso);
         if(edges & k10)
            SplitEdge(cell, fMesh, 10, x, this->fMinY, z, fIso);
      }

      ConnectTriangles(cell, fMesh, fEpsilon);
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildCol(UInt_t depth, const SliceType_t *prevSlice,
                                  SliceType_t *slice)const
{
   //nz == depth, nx == 0, ny : [1, H - 1].
   //Two neighbours - from previous slice ("bottom" cube)
   //and previous cube in a column.
   const V z = this->fMinZ + depth * this->fStepZ;
   const UInt_t w = GetW();
   const UInt_t h = GetH();

   for (UInt_t i = 1; i < h - 1; ++i) {
      const CellType_t &left = slice->fCells[(i - 1) * (w - 1)];
      const CellType_t &bott = prevSlice->fCells[i * (w - 1)];
      CellType_t &cell = slice->fCells[i * (w - 1)];
      cell.fType = 0;
      //Value 0 is not required, only bit.
      //Take 1, 4, 5 from left cube.
      cell.fVals[1] = left.fVals[2];
      cell.fVals[4] = left.fVals[7];
      cell.fVals[5] = left.fVals[6];
      cell.fType |= (left.fType & k2_6) >> 1;
      cell.fType |= (left.fType & k3_7) >> 3;
      //2, 3 from bottom.
      cell.fVals[2] = bott.fVals[6];
      cell.fVals[3] = bott.fVals[7];
      cell.fType |= (bott.fType & k6_7) >> 4;
      //Calculate 6, 7.
      if((cell.fVals[6] = GetData(1, i + 1, depth + 1)) <= fIso)
         cell.fType |= k6;
      if((cell.fVals[7] = GetData(0, i + 1, depth + 1)) <= fIso)
         cell.fType |= k7;

      const UInt_t edges = eInt[cell.fType];
      if(!edges)
         continue;

      if(edges & k0)
         cell.fIds[0] = left.fIds[2];
      if(edges & k4)
         cell.fIds[4] = left.fIds[6];
      if(edges & k8)
         cell.fIds[8] = left.fIds[11];
      if(edges & k9)
         cell.fIds[9] = left.fIds[10];

      if(edges & k1)
         cell.fIds[1] = bott.fIds[5];
      if(edges & k2)
         cell.fIds[2] = bott.fIds[6];
      if(edges & k3)
         cell.fIds[3] = bott.fIds[7];

      const V y = this->fMinY + i * this->fStepY;
      
      if(edges & k5)
         SplitEdge(cell, fMesh, 5,  this->fMinX, y, z, fIso);
      if(edges & k6)
         SplitEdge(cell, fMesh, 6,  this->fMinX, y, z, fIso);
      if(edges & k7)
         SplitEdge(cell, fMesh, 7,  this->fMinX, y, z, fIso);
      if(edges & k10)
         SplitEdge(cell, fMesh, 10, this->fMinX, y, z, fIso);
      if(edges & k11)
         SplitEdge(cell, fMesh, 11, this->fMinX, y, z, fIso);

      ConnectTriangles(cell, fMesh, fEpsilon);
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildSlice(UInt_t depth, const SliceType_t *prevSlice,
                                    SliceType_t *slice)const
{
   //nz == depth, nx : [1, W - 1], ny : [1, H - 1].
   //Each cube has 3 neighbours, "bottom" cube from
   //the previous slice, "left" and "right" from the
   //current slice.
   const V z = this->fMinZ + depth * this->fStepZ;
   const UInt_t h = GetH();
   const UInt_t w = GetW();

   for (UInt_t i = 1; i < h - 1; ++i) {
      const V y = this->fMinY + i * this->fStepY;
      for (UInt_t j = 1; j < w - 1; ++j) {
         const CellType_t &left = slice->fCells[(i - 1) * (w - 1) + j];
         const CellType_t &right = slice->fCells[i * (w - 1) + j - 1];
         const CellType_t &bott = prevSlice->fCells[i * (w - 1) + j];
         CellType_t &cell = slice->fCells[i * (w - 1) + j];
         cell.fType = 0;

         cell.fVals[1] = left.fVals[2];
         cell.fVals[4] = left.fVals[7];
         cell.fVals[5] = left.fVals[6];
         cell.fType |= (left.fType & k2_6) >> 1;
         cell.fType |= (left.fType & k3_7) >> 3;

         cell.fVals[2] = bott.fVals[6];
         cell.fVals[3] = bott.fVals[7];
         cell.fType |= (bott.fType & k6_7) >> 4;

         cell.fVals[7] = right.fVals[6];
         cell.fType |= (right.fType & k6) << 1;

         if ((cell.fVals[6] = GetData(j + 1, i + 1, depth + 1)) <= fIso)
            cell.fType |= k6;

         const UInt_t edges = eInt[cell.fType];
         if (!edges)
            continue;

         if(edges & k0)
            cell.fIds[0] = left.fIds[2];
         if(edges & k4)
            cell.fIds[4] = left.fIds[6];
         if(edges & k8)
            cell.fIds[8] = left.fIds[11];
         if(edges & k9)
            cell.fIds[9] = left.fIds[10];

         if(edges & k3)
            cell.fIds[3] = right.fIds[1];
         if(edges & k7)
            cell.fIds[7] = right.fIds[5];
         if(edges & k11)
            cell.fIds[11] = right.fIds[10];

         if(edges & k1)
            cell.fIds[1] = bott.fIds[5];
         if(edges & k2)
            cell.fIds[2] = bott.fIds[6];

         const V x = this->fMinX + j * this->fStepX;
         if(edges & k5)
            SplitEdge(cell, fMesh, 5,  x, y, z, fIso);
         if(edges & k6)
            SplitEdge(cell, fMesh, 6,  x, y, z, fIso);
         if(edges & k10)
            SplitEdge(cell, fMesh, 10, x, y, z, fIso);

         ConnectTriangles(cell, fMesh, fEpsilon);
      }
   }
}

//______________________________________________________________________
template<class D, class V>
void TMeshBuilder<D, V>::BuildNormals()const
{
   //Build averaged normals using vertices and
   //trinagles.
   typedef std::vector<UInt_t>::size_type size_type;
   const UInt_t *t;
   V *p1, *p2, *p3;
   V v1[3], v2[3], n[3];
   
   fMesh->fNorms.assign(fMesh->fVerts.size(), V());

   for (size_type i = 0, e = fMesh->fTris.size() / 3; i < e; ++i) {
      t  = &fMesh->fTris[i * 3];
      p1 = &fMesh->fVerts[t[0] * 3];
      p2 = &fMesh->fVerts[t[1] * 3];
      p3 = &fMesh->fVerts[t[2] * 3];
      v1[0] = p2[0] - p1[0];
      v1[1] = p2[1] - p1[1];
      v1[2] = p2[2] - p1[2];
      v2[0] = p3[0] - p1[0];
      v2[1] = p3[1] - p1[1];
      v2[2] = p3[2] - p1[2];
      n[0] = v1[1] * v2[2] - v1[2] * v2[1];
      n[1] = v1[2] * v2[0] - v1[0] * v2[2];
      n[2] = v1[0] * v2[1] - v1[1] * v2[0];

      const V len = std::sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);

      if (len < fEpsilon)//degenerated triangle
         continue;

      n[0] /= len;
      n[1] /= len;
      n[2] /= len;
      UInt_t ind = t[0] * 3;
      fMesh->fNorms[ind]     += n[0];
      fMesh->fNorms[ind + 1] += n[1];
      fMesh->fNorms[ind + 2] += n[2];
      ind = t[1] * 3;
      fMesh->fNorms[ind]     += n[0];
      fMesh->fNorms[ind + 1] += n[1];
      fMesh->fNorms[ind + 2] += n[2];
      ind = t[2] * 3;
      fMesh->fNorms[ind]     += n[0];
      fMesh->fNorms[ind + 1] += n[1];
      fMesh->fNorms[ind + 2] += n[2];
   }

   for (size_type i = 0, e = fMesh->fNorms.size() / 3; i < e; ++i) {
      V * nn = &fMesh->fNorms[i * 3];
      const V len = std::sqrt(nn[0] * nn[0] + nn[1] * nn[1] + nn[2] * nn[2]);
      if (len < fEpsilon)
         continue;
      fMesh->fNorms[i * 3]     /= len;
      fMesh->fNorms[i * 3 + 1] /= len;
      fMesh->fNorms[i * 3 + 2] /= len;
   }
}


namespace {

/////////////////////////////////////////////////////////////////////////
//****************************TABLES***********************************//
/////////////////////////////////////////////////////////////////////////

const UInt_t eInt[256] = 
{
   0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 
   0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,
   0x190, 0x099, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 
   0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,
   0x230, 0x339, 0x033, 0x13a, 0x636, 0x73f, 0x435, 0x53c, 
   0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,
   0x3a0, 0x2a9, 0x1a3, 0x0aa, 0x7a6, 0x6af, 0x5a5, 0x4ac, 
   0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,
   0x460, 0x569, 0x663, 0x76a, 0x066, 0x16f, 0x265, 0x36c, 
   0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,
   0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0x0ff, 0x3f5, 0x2fc, 
   0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,
   0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x055, 0x15c, 
   0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,
   0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0x0cc, 
   0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,
   0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 
   0x0cc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,
   0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 
   0x15c, 0x055, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,
   0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 
   0x2fc, 0x3f5, 0x0ff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,
   0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 
   0x36c, 0x265, 0x16f, 0x066, 0x76a, 0x663, 0x569, 0x460,
   0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 
   0x4ac, 0x5a5, 0x6af, 0x7a6, 0x0aa, 0x1a3, 0x2a9, 0x3a0,
   0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 
   0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x033, 0x339, 0x230,
   0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 
   0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x099, 0x190,
   0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 
   0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000
};

const Float_t vOff[8][3] =
{
   {0.f, 0.f, 0.f}, {1.f, 0.f, 0.f}, {1.f, 1.f, 0.f},
   {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}, {1.f, 0.f, 1.f},
   {1.f, 1.f, 1.f}, {0.f, 1.f, 1.f}
};

const UChar_t eConn[12][2] =
{
   {0, 1}, {1, 2}, {2, 3}, {3, 0},
   {4, 5}, {5, 6}, {6, 7}, {7, 4},
   {0, 4}, {1, 5}, {2, 6}, {3, 7}
};
   
const Float_t eDir[12][3] =
{
   { 1.f,  0.f, 0.f}, {0.f,  1.f, 0.f}, {-1.f, 0.f, 0.f},
   { 0.f, -1.f, 0.f}, {1.f,  0.f, 0.f}, { 0.f, 1.f, 0.f},
   {-1.f,  0.f, 0.f}, {0.f, -1.f, 0.f}, { 0.f, 0.f, 1.f},
   { 0.f,  0.f, 1.f}, {0.f,  0.f, 1.f}, { 0.f, 0.f, 1.f}
};

const Int_t conTbl[256][16] = 
{
   {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1},
   {3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1},
   {3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1},
   {3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1},
   {9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1},
   {9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},
   {2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1},
   {8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1},
   {9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},
   {4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1},
   {3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1},
   {1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1},
   {4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1},
   {4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1},
   {9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},
   {5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1},
   {2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1},
   {9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},
   {0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},
   {2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1},
   {10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1},
   {4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1},
   {5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1},
   {5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1},
   {9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1},
   {0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1},
   {1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1},
   {10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1},
   {8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1},
   {2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1},
   {7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1},
   {9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1},
   {2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1},
   {11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1},
   {9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1},
   {5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1},
   {11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1},
   {11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},
   {1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1},
   {9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1},
   {5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1},
   {2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},
   {0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},
   {5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1},
   {6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1},
   {3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1},
   {6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1},
   {5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1},
   {1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},
   {10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1},
   {6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1},
   {8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1},
   {7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1},
   {3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},
   {5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1},
   {0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1},
   {9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1},
   {8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1},
   {5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1},
   {0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1},
   {6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1},
   {10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1},
   {10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1},
   {8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1},
   {1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1},
   {3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1},
   {0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1},
   {10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1},
   {3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1},
   {6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1},
   {9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1},
   {8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1},
   {3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1},
   {6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1},
   {0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1},
   {10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1},
   {10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1},
   {2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1},
   {7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1},
   {7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1},
   {2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1},
   {1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1},
   {11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1},
   {8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1},
   {0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1},
   {7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},
   {10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},
   {2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},
   {6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1},
   {7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1},
   {2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1},
   {1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1},
   {10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1},
   {10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1},
   {0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1},
   {7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1},
   {6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1},
   {8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1},
   {9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1},
   {6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1},
   {4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1},
   {10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1},
   {8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1},
   {0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1},
   {1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1},
   {8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1},
   {10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1},
   {4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1},
   {10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},
   {5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},
   {11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1},
   {9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},
   {6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1},
   {7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1},
   {3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1},
   {7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1},
   {9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1},
   {3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1},
   {6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1},
   {9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1},
   {1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1},
   {4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1},
   {7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1},
   {6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1},
   {3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1},
   {0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1},
   {6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1},
   {0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1},
   {11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1},
   {6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1},
   {5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1},
   {9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1},
   {1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1},
   {1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1},
   {10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1},
   {0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1},
   {5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1},
   {10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1},
   {11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1},
   {9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1},
   {7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1},
   {2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1},
   {8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1},
   {9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1},
   {9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1},
   {1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1},
   {9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1},
   {9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1},
   {5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1},
   {0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1},
   {10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1},
   {2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1},
   {0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1},
   {0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1},
   {9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1},
   {5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1},
   {3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1},
   {5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1},
   {8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1},
   {0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1},
   {9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1},
   {0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1},
   {1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1},
   {3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1},
   {4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1},
   {9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1},
   {11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1},
   {11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1},
   {2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1},
   {9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1},
   {3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1},
   {1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1},
   {4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1},
   {4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1},
   {0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1},
   {3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1},
   {3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1},
   {0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1},
   {9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1},
   {1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
   {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
};

}//unnamed namespace


template class TMeshBuilder<TH3C, Float_t>;
template class TMeshBuilder<TH3S, Float_t>;
template class TMeshBuilder<TH3I, Float_t>;
template class TMeshBuilder<TH3F, Float_t>;
template class TMeshBuilder<TH3D, Float_t>;
template class TMeshBuilder<TF3, Double_t>;

}//namespace Mc
}//namespace Rgl
 TGLMarchingCubes.cxx:1
 TGLMarchingCubes.cxx:2
 TGLMarchingCubes.cxx:3
 TGLMarchingCubes.cxx:4
 TGLMarchingCubes.cxx:5
 TGLMarchingCubes.cxx:6
 TGLMarchingCubes.cxx:7
 TGLMarchingCubes.cxx:8
 TGLMarchingCubes.cxx:9
 TGLMarchingCubes.cxx:10
 TGLMarchingCubes.cxx:11
 TGLMarchingCubes.cxx:12
 TGLMarchingCubes.cxx:13
 TGLMarchingCubes.cxx:14
 TGLMarchingCubes.cxx:15
 TGLMarchingCubes.cxx:16
 TGLMarchingCubes.cxx:17
 TGLMarchingCubes.cxx:18
 TGLMarchingCubes.cxx:19
 TGLMarchingCubes.cxx:20
 TGLMarchingCubes.cxx:21
 TGLMarchingCubes.cxx:22
 TGLMarchingCubes.cxx:23
 TGLMarchingCubes.cxx:24
 TGLMarchingCubes.cxx:25
 TGLMarchingCubes.cxx:26
 TGLMarchingCubes.cxx:27
 TGLMarchingCubes.cxx:28
 TGLMarchingCubes.cxx:29
 TGLMarchingCubes.cxx:30
 TGLMarchingCubes.cxx:31
 TGLMarchingCubes.cxx:32
 TGLMarchingCubes.cxx:33
 TGLMarchingCubes.cxx:34
 TGLMarchingCubes.cxx:35
 TGLMarchingCubes.cxx:36
 TGLMarchingCubes.cxx:37
 TGLMarchingCubes.cxx:38
 TGLMarchingCubes.cxx:39
 TGLMarchingCubes.cxx:40
 TGLMarchingCubes.cxx:41
 TGLMarchingCubes.cxx:42
 TGLMarchingCubes.cxx:43
 TGLMarchingCubes.cxx:44
 TGLMarchingCubes.cxx:45
 TGLMarchingCubes.cxx:46
 TGLMarchingCubes.cxx:47
 TGLMarchingCubes.cxx:48
 TGLMarchingCubes.cxx:49
 TGLMarchingCubes.cxx:50
 TGLMarchingCubes.cxx:51
 TGLMarchingCubes.cxx:52
 TGLMarchingCubes.cxx:53
 TGLMarchingCubes.cxx:54
 TGLMarchingCubes.cxx:55
 TGLMarchingCubes.cxx:56
 TGLMarchingCubes.cxx:57
 TGLMarchingCubes.cxx:58
 TGLMarchingCubes.cxx:59
 TGLMarchingCubes.cxx:60
 TGLMarchingCubes.cxx:61
 TGLMarchingCubes.cxx:62
 TGLMarchingCubes.cxx:63
 TGLMarchingCubes.cxx:64
 TGLMarchingCubes.cxx:65
 TGLMarchingCubes.cxx:66
 TGLMarchingCubes.cxx:67
 TGLMarchingCubes.cxx:68
 TGLMarchingCubes.cxx:69
 TGLMarchingCubes.cxx:70
 TGLMarchingCubes.cxx:71
 TGLMarchingCubes.cxx:72
 TGLMarchingCubes.cxx:73
 TGLMarchingCubes.cxx:74
 TGLMarchingCubes.cxx:75
 TGLMarchingCubes.cxx:76
 TGLMarchingCubes.cxx:77
 TGLMarchingCubes.cxx:78
 TGLMarchingCubes.cxx:79
 TGLMarchingCubes.cxx:80
 TGLMarchingCubes.cxx:81
 TGLMarchingCubes.cxx:82
 TGLMarchingCubes.cxx:83
 TGLMarchingCubes.cxx:84
 TGLMarchingCubes.cxx:85
 TGLMarchingCubes.cxx:86
 TGLMarchingCubes.cxx:87
 TGLMarchingCubes.cxx:88
 TGLMarchingCubes.cxx:89
 TGLMarchingCubes.cxx:90
 TGLMarchingCubes.cxx:91
 TGLMarchingCubes.cxx:92
 TGLMarchingCubes.cxx:93
 TGLMarchingCubes.cxx:94
 TGLMarchingCubes.cxx:95
 TGLMarchingCubes.cxx:96
 TGLMarchingCubes.cxx:97
 TGLMarchingCubes.cxx:98
 TGLMarchingCubes.cxx:99
 TGLMarchingCubes.cxx:100
 TGLMarchingCubes.cxx:101
 TGLMarchingCubes.cxx:102
 TGLMarchingCubes.cxx:103
 TGLMarchingCubes.cxx:104
 TGLMarchingCubes.cxx:105
 TGLMarchingCubes.cxx:106
 TGLMarchingCubes.cxx:107
 TGLMarchingCubes.cxx:108
 TGLMarchingCubes.cxx:109
 TGLMarchingCubes.cxx:110
 TGLMarchingCubes.cxx:111
 TGLMarchingCubes.cxx:112
 TGLMarchingCubes.cxx:113
 TGLMarchingCubes.cxx:114
 TGLMarchingCubes.cxx:115
 TGLMarchingCubes.cxx:116
 TGLMarchingCubes.cxx:117
 TGLMarchingCubes.cxx:118
 TGLMarchingCubes.cxx:119
 TGLMarchingCubes.cxx:120
 TGLMarchingCubes.cxx:121
 TGLMarchingCubes.cxx:122
 TGLMarchingCubes.cxx:123
 TGLMarchingCubes.cxx:124
 TGLMarchingCubes.cxx:125
 TGLMarchingCubes.cxx:126
 TGLMarchingCubes.cxx:127
 TGLMarchingCubes.cxx:128
 TGLMarchingCubes.cxx:129
 TGLMarchingCubes.cxx:130
 TGLMarchingCubes.cxx:131
 TGLMarchingCubes.cxx:132
 TGLMarchingCubes.cxx:133
 TGLMarchingCubes.cxx:134
 TGLMarchingCubes.cxx:135
 TGLMarchingCubes.cxx:136
 TGLMarchingCubes.cxx:137
 TGLMarchingCubes.cxx:138
 TGLMarchingCubes.cxx:139
 TGLMarchingCubes.cxx:140
 TGLMarchingCubes.cxx:141
 TGLMarchingCubes.cxx:142
 TGLMarchingCubes.cxx:143
 TGLMarchingCubes.cxx:144
 TGLMarchingCubes.cxx:145
 TGLMarchingCubes.cxx:146
 TGLMarchingCubes.cxx:147
 TGLMarchingCubes.cxx:148
 TGLMarchingCubes.cxx:149
 TGLMarchingCubes.cxx:150
 TGLMarchingCubes.cxx:151
 TGLMarchingCubes.cxx:152
 TGLMarchingCubes.cxx:153
 TGLMarchingCubes.cxx:154
 TGLMarchingCubes.cxx:155
 TGLMarchingCubes.cxx:156
 TGLMarchingCubes.cxx:157
 TGLMarchingCubes.cxx:158
 TGLMarchingCubes.cxx:159
 TGLMarchingCubes.cxx:160
 TGLMarchingCubes.cxx:161
 TGLMarchingCubes.cxx:162
 TGLMarchingCubes.cxx:163
 TGLMarchingCubes.cxx:164
 TGLMarchingCubes.cxx:165
 TGLMarchingCubes.cxx:166
 TGLMarchingCubes.cxx:167
 TGLMarchingCubes.cxx:168
 TGLMarchingCubes.cxx:169
 TGLMarchingCubes.cxx:170
 TGLMarchingCubes.cxx:171
 TGLMarchingCubes.cxx:172
 TGLMarchingCubes.cxx:173
 TGLMarchingCubes.cxx:174
 TGLMarchingCubes.cxx:175
 TGLMarchingCubes.cxx:176
 TGLMarchingCubes.cxx:177
 TGLMarchingCubes.cxx:178
 TGLMarchingCubes.cxx:179
 TGLMarchingCubes.cxx:180
 TGLMarchingCubes.cxx:181
 TGLMarchingCubes.cxx:182
 TGLMarchingCubes.cxx:183
 TGLMarchingCubes.cxx:184
 TGLMarchingCubes.cxx:185
 TGLMarchingCubes.cxx:186
 TGLMarchingCubes.cxx:187
 TGLMarchingCubes.cxx:188
 TGLMarchingCubes.cxx:189
 TGLMarchingCubes.cxx:190
 TGLMarchingCubes.cxx:191
 TGLMarchingCubes.cxx:192
 TGLMarchingCubes.cxx:193
 TGLMarchingCubes.cxx:194
 TGLMarchingCubes.cxx:195
 TGLMarchingCubes.cxx:196
 TGLMarchingCubes.cxx:197
 TGLMarchingCubes.cxx:198
 TGLMarchingCubes.cxx:199
 TGLMarchingCubes.cxx:200
 TGLMarchingCubes.cxx:201
 TGLMarchingCubes.cxx:202
 TGLMarchingCubes.cxx:203
 TGLMarchingCubes.cxx:204
 TGLMarchingCubes.cxx:205
 TGLMarchingCubes.cxx:206
 TGLMarchingCubes.cxx:207
 TGLMarchingCubes.cxx:208
 TGLMarchingCubes.cxx:209
 TGLMarchingCubes.cxx:210
 TGLMarchingCubes.cxx:211
 TGLMarchingCubes.cxx:212
 TGLMarchingCubes.cxx:213
 TGLMarchingCubes.cxx:214
 TGLMarchingCubes.cxx:215
 TGLMarchingCubes.cxx:216
 TGLMarchingCubes.cxx:217
 TGLMarchingCubes.cxx:218
 TGLMarchingCubes.cxx:219
 TGLMarchingCubes.cxx:220
 TGLMarchingCubes.cxx:221
 TGLMarchingCubes.cxx:222
 TGLMarchingCubes.cxx:223
 TGLMarchingCubes.cxx:224
 TGLMarchingCubes.cxx:225
 TGLMarchingCubes.cxx:226
 TGLMarchingCubes.cxx:227
 TGLMarchingCubes.cxx:228
 TGLMarchingCubes.cxx:229
 TGLMarchingCubes.cxx:230
 TGLMarchingCubes.cxx:231
 TGLMarchingCubes.cxx:232
 TGLMarchingCubes.cxx:233
 TGLMarchingCubes.cxx:234
 TGLMarchingCubes.cxx:235
 TGLMarchingCubes.cxx:236
 TGLMarchingCubes.cxx:237
 TGLMarchingCubes.cxx:238
 TGLMarchingCubes.cxx:239
 TGLMarchingCubes.cxx:240
 TGLMarchingCubes.cxx:241
 TGLMarchingCubes.cxx:242
 TGLMarchingCubes.cxx:243
 TGLMarchingCubes.cxx:244
 TGLMarchingCubes.cxx:245
 TGLMarchingCubes.cxx:246
 TGLMarchingCubes.cxx:247
 TGLMarchingCubes.cxx:248
 TGLMarchingCubes.cxx:249
 TGLMarchingCubes.cxx:250
 TGLMarchingCubes.cxx:251
 TGLMarchingCubes.cxx:252
 TGLMarchingCubes.cxx:253
 TGLMarchingCubes.cxx:254
 TGLMarchingCubes.cxx:255
 TGLMarchingCubes.cxx:256
 TGLMarchingCubes.cxx:257
 TGLMarchingCubes.cxx:258
 TGLMarchingCubes.cxx:259
 TGLMarchingCubes.cxx:260
 TGLMarchingCubes.cxx:261
 TGLMarchingCubes.cxx:262
 TGLMarchingCubes.cxx:263
 TGLMarchingCubes.cxx:264
 TGLMarchingCubes.cxx:265
 TGLMarchingCubes.cxx:266
 TGLMarchingCubes.cxx:267
 TGLMarchingCubes.cxx:268
 TGLMarchingCubes.cxx:269
 TGLMarchingCubes.cxx:270
 TGLMarchingCubes.cxx:271
 TGLMarchingCubes.cxx:272
 TGLMarchingCubes.cxx:273
 TGLMarchingCubes.cxx:274
 TGLMarchingCubes.cxx:275
 TGLMarchingCubes.cxx:276
 TGLMarchingCubes.cxx:277
 TGLMarchingCubes.cxx:278
 TGLMarchingCubes.cxx:279
 TGLMarchingCubes.cxx:280
 TGLMarchingCubes.cxx:281
 TGLMarchingCubes.cxx:282
 TGLMarchingCubes.cxx:283
 TGLMarchingCubes.cxx:284
 TGLMarchingCubes.cxx:285
 TGLMarchingCubes.cxx:286
 TGLMarchingCubes.cxx:287
 TGLMarchingCubes.cxx:288
 TGLMarchingCubes.cxx:289
 TGLMarchingCubes.cxx:290
 TGLMarchingCubes.cxx:291
 TGLMarchingCubes.cxx:292
 TGLMarchingCubes.cxx:293
 TGLMarchingCubes.cxx:294
 TGLMarchingCubes.cxx:295
 TGLMarchingCubes.cxx:296
 TGLMarchingCubes.cxx:297
 TGLMarchingCubes.cxx:298
 TGLMarchingCubes.cxx:299
 TGLMarchingCubes.cxx:300
 TGLMarchingCubes.cxx:301
 TGLMarchingCubes.cxx:302
 TGLMarchingCubes.cxx:303
 TGLMarchingCubes.cxx:304
 TGLMarchingCubes.cxx:305
 TGLMarchingCubes.cxx:306
 TGLMarchingCubes.cxx:307
 TGLMarchingCubes.cxx:308
 TGLMarchingCubes.cxx:309
 TGLMarchingCubes.cxx:310
 TGLMarchingCubes.cxx:311
 TGLMarchingCubes.cxx:312
 TGLMarchingCubes.cxx:313
 TGLMarchingCubes.cxx:314
 TGLMarchingCubes.cxx:315
 TGLMarchingCubes.cxx:316
 TGLMarchingCubes.cxx:317
 TGLMarchingCubes.cxx:318
 TGLMarchingCubes.cxx:319
 TGLMarchingCubes.cxx:320
 TGLMarchingCubes.cxx:321
 TGLMarchingCubes.cxx:322
 TGLMarchingCubes.cxx:323
 TGLMarchingCubes.cxx:324
 TGLMarchingCubes.cxx:325
 TGLMarchingCubes.cxx:326
 TGLMarchingCubes.cxx:327
 TGLMarchingCubes.cxx:328
 TGLMarchingCubes.cxx:329
 TGLMarchingCubes.cxx:330
 TGLMarchingCubes.cxx:331
 TGLMarchingCubes.cxx:332
 TGLMarchingCubes.cxx:333
 TGLMarchingCubes.cxx:334
 TGLMarchingCubes.cxx:335
 TGLMarchingCubes.cxx:336
 TGLMarchingCubes.cxx:337
 TGLMarchingCubes.cxx:338
 TGLMarchingCubes.cxx:339
 TGLMarchingCubes.cxx:340
 TGLMarchingCubes.cxx:341
 TGLMarchingCubes.cxx:342
 TGLMarchingCubes.cxx:343
 TGLMarchingCubes.cxx:344
 TGLMarchingCubes.cxx:345
 TGLMarchingCubes.cxx:346
 TGLMarchingCubes.cxx:347
 TGLMarchingCubes.cxx:348
 TGLMarchingCubes.cxx:349
 TGLMarchingCubes.cxx:350
 TGLMarchingCubes.cxx:351
 TGLMarchingCubes.cxx:352
 TGLMarchingCubes.cxx:353
 TGLMarchingCubes.cxx:354
 TGLMarchingCubes.cxx:355
 TGLMarchingCubes.cxx:356
 TGLMarchingCubes.cxx:357
 TGLMarchingCubes.cxx:358
 TGLMarchingCubes.cxx:359
 TGLMarchingCubes.cxx:360
 TGLMarchingCubes.cxx:361
 TGLMarchingCubes.cxx:362
 TGLMarchingCubes.cxx:363
 TGLMarchingCubes.cxx:364
 TGLMarchingCubes.cxx:365
 TGLMarchingCubes.cxx:366
 TGLMarchingCubes.cxx:367
 TGLMarchingCubes.cxx:368
 TGLMarchingCubes.cxx:369
 TGLMarchingCubes.cxx:370
 TGLMarchingCubes.cxx:371
 TGLMarchingCubes.cxx:372
 TGLMarchingCubes.cxx:373
 TGLMarchingCubes.cxx:374
 TGLMarchingCubes.cxx:375
 TGLMarchingCubes.cxx:376
 TGLMarchingCubes.cxx:377
 TGLMarchingCubes.cxx:378
 TGLMarchingCubes.cxx:379
 TGLMarchingCubes.cxx:380
 TGLMarchingCubes.cxx:381
 TGLMarchingCubes.cxx:382
 TGLMarchingCubes.cxx:383
 TGLMarchingCubes.cxx:384
 TGLMarchingCubes.cxx:385
 TGLMarchingCubes.cxx:386
 TGLMarchingCubes.cxx:387
 TGLMarchingCubes.cxx:388
 TGLMarchingCubes.cxx:389
 TGLMarchingCubes.cxx:390
 TGLMarchingCubes.cxx:391
 TGLMarchingCubes.cxx:392
 TGLMarchingCubes.cxx:393
 TGLMarchingCubes.cxx:394
 TGLMarchingCubes.cxx:395
 TGLMarchingCubes.cxx:396
 TGLMarchingCubes.cxx:397
 TGLMarchingCubes.cxx:398
 TGLMarchingCubes.cxx:399
 TGLMarchingCubes.cxx:400
 TGLMarchingCubes.cxx:401
 TGLMarchingCubes.cxx:402
 TGLMarchingCubes.cxx:403
 TGLMarchingCubes.cxx:404
 TGLMarchingCubes.cxx:405
 TGLMarchingCubes.cxx:406
 TGLMarchingCubes.cxx:407
 TGLMarchingCubes.cxx:408
 TGLMarchingCubes.cxx:409
 TGLMarchingCubes.cxx:410
 TGLMarchingCubes.cxx:411
 TGLMarchingCubes.cxx:412
 TGLMarchingCubes.cxx:413
 TGLMarchingCubes.cxx:414
 TGLMarchingCubes.cxx:415
 TGLMarchingCubes.cxx:416
 TGLMarchingCubes.cxx:417
 TGLMarchingCubes.cxx:418
 TGLMarchingCubes.cxx:419
 TGLMarchingCubes.cxx:420
 TGLMarchingCubes.cxx:421
 TGLMarchingCubes.cxx:422
 TGLMarchingCubes.cxx:423
 TGLMarchingCubes.cxx:424
 TGLMarchingCubes.cxx:425
 TGLMarchingCubes.cxx:426
 TGLMarchingCubes.cxx:427
 TGLMarchingCubes.cxx:428
 TGLMarchingCubes.cxx:429
 TGLMarchingCubes.cxx:430
 TGLMarchingCubes.cxx:431
 TGLMarchingCubes.cxx:432
 TGLMarchingCubes.cxx:433
 TGLMarchingCubes.cxx:434
 TGLMarchingCubes.cxx:435
 TGLMarchingCubes.cxx:436
 TGLMarchingCubes.cxx:437
 TGLMarchingCubes.cxx:438
 TGLMarchingCubes.cxx:439
 TGLMarchingCubes.cxx:440
 TGLMarchingCubes.cxx:441
 TGLMarchingCubes.cxx:442
 TGLMarchingCubes.cxx:443
 TGLMarchingCubes.cxx:444
 TGLMarchingCubes.cxx:445
 TGLMarchingCubes.cxx:446
 TGLMarchingCubes.cxx:447
 TGLMarchingCubes.cxx:448
 TGLMarchingCubes.cxx:449
 TGLMarchingCubes.cxx:450
 TGLMarchingCubes.cxx:451
 TGLMarchingCubes.cxx:452
 TGLMarchingCubes.cxx:453
 TGLMarchingCubes.cxx:454
 TGLMarchingCubes.cxx:455
 TGLMarchingCubes.cxx:456
 TGLMarchingCubes.cxx:457
 TGLMarchingCubes.cxx:458
 TGLMarchingCubes.cxx:459
 TGLMarchingCubes.cxx:460
 TGLMarchingCubes.cxx:461
 TGLMarchingCubes.cxx:462
 TGLMarchingCubes.cxx:463
 TGLMarchingCubes.cxx:464
 TGLMarchingCubes.cxx:465
 TGLMarchingCubes.cxx:466
 TGLMarchingCubes.cxx:467
 TGLMarchingCubes.cxx:468
 TGLMarchingCubes.cxx:469
 TGLMarchingCubes.cxx:470
 TGLMarchingCubes.cxx:471
 TGLMarchingCubes.cxx:472
 TGLMarchingCubes.cxx:473
 TGLMarchingCubes.cxx:474
 TGLMarchingCubes.cxx:475
 TGLMarchingCubes.cxx:476
 TGLMarchingCubes.cxx:477
 TGLMarchingCubes.cxx:478
 TGLMarchingCubes.cxx:479
 TGLMarchingCubes.cxx:480
 TGLMarchingCubes.cxx:481
 TGLMarchingCubes.cxx:482
 TGLMarchingCubes.cxx:483
 TGLMarchingCubes.cxx:484
 TGLMarchingCubes.cxx:485
 TGLMarchingCubes.cxx:486
 TGLMarchingCubes.cxx:487
 TGLMarchingCubes.cxx:488
 TGLMarchingCubes.cxx:489
 TGLMarchingCubes.cxx:490
 TGLMarchingCubes.cxx:491
 TGLMarchingCubes.cxx:492
 TGLMarchingCubes.cxx:493
 TGLMarchingCubes.cxx:494
 TGLMarchingCubes.cxx:495
 TGLMarchingCubes.cxx:496
 TGLMarchingCubes.cxx:497
 TGLMarchingCubes.cxx:498
 TGLMarchingCubes.cxx:499
 TGLMarchingCubes.cxx:500
 TGLMarchingCubes.cxx:501
 TGLMarchingCubes.cxx:502
 TGLMarchingCubes.cxx:503
 TGLMarchingCubes.cxx:504
 TGLMarchingCubes.cxx:505
 TGLMarchingCubes.cxx:506
 TGLMarchingCubes.cxx:507
 TGLMarchingCubes.cxx:508
 TGLMarchingCubes.cxx:509
 TGLMarchingCubes.cxx:510
 TGLMarchingCubes.cxx:511
 TGLMarchingCubes.cxx:512
 TGLMarchingCubes.cxx:513
 TGLMarchingCubes.cxx:514
 TGLMarchingCubes.cxx:515
 TGLMarchingCubes.cxx:516
 TGLMarchingCubes.cxx:517
 TGLMarchingCubes.cxx:518
 TGLMarchingCubes.cxx:519
 TGLMarchingCubes.cxx:520
 TGLMarchingCubes.cxx:521
 TGLMarchingCubes.cxx:522
 TGLMarchingCubes.cxx:523
 TGLMarchingCubes.cxx:524
 TGLMarchingCubes.cxx:525
 TGLMarchingCubes.cxx:526
 TGLMarchingCubes.cxx:527
 TGLMarchingCubes.cxx:528
 TGLMarchingCubes.cxx:529
 TGLMarchingCubes.cxx:530
 TGLMarchingCubes.cxx:531
 TGLMarchingCubes.cxx:532
 TGLMarchingCubes.cxx:533
 TGLMarchingCubes.cxx:534
 TGLMarchingCubes.cxx:535
 TGLMarchingCubes.cxx:536
 TGLMarchingCubes.cxx:537
 TGLMarchingCubes.cxx:538
 TGLMarchingCubes.cxx:539
 TGLMarchingCubes.cxx:540
 TGLMarchingCubes.cxx:541
 TGLMarchingCubes.cxx:542
 TGLMarchingCubes.cxx:543
 TGLMarchingCubes.cxx:544
 TGLMarchingCubes.cxx:545
 TGLMarchingCubes.cxx:546
 TGLMarchingCubes.cxx:547
 TGLMarchingCubes.cxx:548
 TGLMarchingCubes.cxx:549
 TGLMarchingCubes.cxx:550
 TGLMarchingCubes.cxx:551
 TGLMarchingCubes.cxx:552
 TGLMarchingCubes.cxx:553
 TGLMarchingCubes.cxx:554
 TGLMarchingCubes.cxx:555
 TGLMarchingCubes.cxx:556
 TGLMarchingCubes.cxx:557
 TGLMarchingCubes.cxx:558
 TGLMarchingCubes.cxx:559
 TGLMarchingCubes.cxx:560
 TGLMarchingCubes.cxx:561
 TGLMarchingCubes.cxx:562
 TGLMarchingCubes.cxx:563
 TGLMarchingCubes.cxx:564
 TGLMarchingCubes.cxx:565
 TGLMarchingCubes.cxx:566
 TGLMarchingCubes.cxx:567
 TGLMarchingCubes.cxx:568
 TGLMarchingCubes.cxx:569
 TGLMarchingCubes.cxx:570
 TGLMarchingCubes.cxx:571
 TGLMarchingCubes.cxx:572
 TGLMarchingCubes.cxx:573
 TGLMarchingCubes.cxx:574
 TGLMarchingCubes.cxx:575
 TGLMarchingCubes.cxx:576
 TGLMarchingCubes.cxx:577
 TGLMarchingCubes.cxx:578
 TGLMarchingCubes.cxx:579
 TGLMarchingCubes.cxx:580
 TGLMarchingCubes.cxx:581
 TGLMarchingCubes.cxx:582
 TGLMarchingCubes.cxx:583
 TGLMarchingCubes.cxx:584
 TGLMarchingCubes.cxx:585
 TGLMarchingCubes.cxx:586
 TGLMarchingCubes.cxx:587
 TGLMarchingCubes.cxx:588
 TGLMarchingCubes.cxx:589
 TGLMarchingCubes.cxx:590
 TGLMarchingCubes.cxx:591
 TGLMarchingCubes.cxx:592
 TGLMarchingCubes.cxx:593
 TGLMarchingCubes.cxx:594
 TGLMarchingCubes.cxx:595
 TGLMarchingCubes.cxx:596
 TGLMarchingCubes.cxx:597
 TGLMarchingCubes.cxx:598
 TGLMarchingCubes.cxx:599
 TGLMarchingCubes.cxx:600
 TGLMarchingCubes.cxx:601
 TGLMarchingCubes.cxx:602
 TGLMarchingCubes.cxx:603
 TGLMarchingCubes.cxx:604
 TGLMarchingCubes.cxx:605
 TGLMarchingCubes.cxx:606
 TGLMarchingCubes.cxx:607
 TGLMarchingCubes.cxx:608
 TGLMarchingCubes.cxx:609
 TGLMarchingCubes.cxx:610
 TGLMarchingCubes.cxx:611
 TGLMarchingCubes.cxx:612
 TGLMarchingCubes.cxx:613
 TGLMarchingCubes.cxx:614
 TGLMarchingCubes.cxx:615
 TGLMarchingCubes.cxx:616
 TGLMarchingCubes.cxx:617
 TGLMarchingCubes.cxx:618
 TGLMarchingCubes.cxx:619
 TGLMarchingCubes.cxx:620
 TGLMarchingCubes.cxx:621
 TGLMarchingCubes.cxx:622
 TGLMarchingCubes.cxx:623
 TGLMarchingCubes.cxx:624
 TGLMarchingCubes.cxx:625
 TGLMarchingCubes.cxx:626
 TGLMarchingCubes.cxx:627
 TGLMarchingCubes.cxx:628
 TGLMarchingCubes.cxx:629
 TGLMarchingCubes.cxx:630
 TGLMarchingCubes.cxx:631
 TGLMarchingCubes.cxx:632
 TGLMarchingCubes.cxx:633
 TGLMarchingCubes.cxx:634
 TGLMarchingCubes.cxx:635
 TGLMarchingCubes.cxx:636
 TGLMarchingCubes.cxx:637
 TGLMarchingCubes.cxx:638
 TGLMarchingCubes.cxx:639
 TGLMarchingCubes.cxx:640
 TGLMarchingCubes.cxx:641
 TGLMarchingCubes.cxx:642
 TGLMarchingCubes.cxx:643
 TGLMarchingCubes.cxx:644
 TGLMarchingCubes.cxx:645
 TGLMarchingCubes.cxx:646
 TGLMarchingCubes.cxx:647
 TGLMarchingCubes.cxx:648
 TGLMarchingCubes.cxx:649
 TGLMarchingCubes.cxx:650
 TGLMarchingCubes.cxx:651
 TGLMarchingCubes.cxx:652
 TGLMarchingCubes.cxx:653
 TGLMarchingCubes.cxx:654
 TGLMarchingCubes.cxx:655
 TGLMarchingCubes.cxx:656
 TGLMarchingCubes.cxx:657
 TGLMarchingCubes.cxx:658
 TGLMarchingCubes.cxx:659
 TGLMarchingCubes.cxx:660
 TGLMarchingCubes.cxx:661
 TGLMarchingCubes.cxx:662
 TGLMarchingCubes.cxx:663
 TGLMarchingCubes.cxx:664
 TGLMarchingCubes.cxx:665
 TGLMarchingCubes.cxx:666
 TGLMarchingCubes.cxx:667
 TGLMarchingCubes.cxx:668
 TGLMarchingCubes.cxx:669
 TGLMarchingCubes.cxx:670
 TGLMarchingCubes.cxx:671
 TGLMarchingCubes.cxx:672
 TGLMarchingCubes.cxx:673
 TGLMarchingCubes.cxx:674
 TGLMarchingCubes.cxx:675
 TGLMarchingCubes.cxx:676
 TGLMarchingCubes.cxx:677
 TGLMarchingCubes.cxx:678
 TGLMarchingCubes.cxx:679
 TGLMarchingCubes.cxx:680
 TGLMarchingCubes.cxx:681
 TGLMarchingCubes.cxx:682
 TGLMarchingCubes.cxx:683
 TGLMarchingCubes.cxx:684
 TGLMarchingCubes.cxx:685
 TGLMarchingCubes.cxx:686
 TGLMarchingCubes.cxx:687
 TGLMarchingCubes.cxx:688
 TGLMarchingCubes.cxx:689
 TGLMarchingCubes.cxx:690
 TGLMarchingCubes.cxx:691
 TGLMarchingCubes.cxx:692
 TGLMarchingCubes.cxx:693
 TGLMarchingCubes.cxx:694
 TGLMarchingCubes.cxx:695
 TGLMarchingCubes.cxx:696
 TGLMarchingCubes.cxx:697
 TGLMarchingCubes.cxx:698
 TGLMarchingCubes.cxx:699
 TGLMarchingCubes.cxx:700
 TGLMarchingCubes.cxx:701
 TGLMarchingCubes.cxx:702
 TGLMarchingCubes.cxx:703
 TGLMarchingCubes.cxx:704
 TGLMarchingCubes.cxx:705
 TGLMarchingCubes.cxx:706
 TGLMarchingCubes.cxx:707
 TGLMarchingCubes.cxx:708
 TGLMarchingCubes.cxx:709
 TGLMarchingCubes.cxx:710
 TGLMarchingCubes.cxx:711
 TGLMarchingCubes.cxx:712
 TGLMarchingCubes.cxx:713
 TGLMarchingCubes.cxx:714
 TGLMarchingCubes.cxx:715
 TGLMarchingCubes.cxx:716
 TGLMarchingCubes.cxx:717
 TGLMarchingCubes.cxx:718
 TGLMarchingCubes.cxx:719
 TGLMarchingCubes.cxx:720
 TGLMarchingCubes.cxx:721
 TGLMarchingCubes.cxx:722
 TGLMarchingCubes.cxx:723
 TGLMarchingCubes.cxx:724
 TGLMarchingCubes.cxx:725
 TGLMarchingCubes.cxx:726
 TGLMarchingCubes.cxx:727
 TGLMarchingCubes.cxx:728
 TGLMarchingCubes.cxx:729
 TGLMarchingCubes.cxx:730
 TGLMarchingCubes.cxx:731
 TGLMarchingCubes.cxx:732
 TGLMarchingCubes.cxx:733
 TGLMarchingCubes.cxx:734
 TGLMarchingCubes.cxx:735
 TGLMarchingCubes.cxx:736
 TGLMarchingCubes.cxx:737
 TGLMarchingCubes.cxx:738
 TGLMarchingCubes.cxx:739
 TGLMarchingCubes.cxx:740
 TGLMarchingCubes.cxx:741
 TGLMarchingCubes.cxx:742
 TGLMarchingCubes.cxx:743
 TGLMarchingCubes.cxx:744
 TGLMarchingCubes.cxx:745
 TGLMarchingCubes.cxx:746
 TGLMarchingCubes.cxx:747
 TGLMarchingCubes.cxx:748
 TGLMarchingCubes.cxx:749
 TGLMarchingCubes.cxx:750
 TGLMarchingCubes.cxx:751
 TGLMarchingCubes.cxx:752
 TGLMarchingCubes.cxx:753
 TGLMarchingCubes.cxx:754
 TGLMarchingCubes.cxx:755
 TGLMarchingCubes.cxx:756
 TGLMarchingCubes.cxx:757
 TGLMarchingCubes.cxx:758
 TGLMarchingCubes.cxx:759
 TGLMarchingCubes.cxx:760
 TGLMarchingCubes.cxx:761
 TGLMarchingCubes.cxx:762
 TGLMarchingCubes.cxx:763
 TGLMarchingCubes.cxx:764
 TGLMarchingCubes.cxx:765
 TGLMarchingCubes.cxx:766
 TGLMarchingCubes.cxx:767
 TGLMarchingCubes.cxx:768
 TGLMarchingCubes.cxx:769
 TGLMarchingCubes.cxx:770
 TGLMarchingCubes.cxx:771
 TGLMarchingCubes.cxx:772
 TGLMarchingCubes.cxx:773
 TGLMarchingCubes.cxx:774
 TGLMarchingCubes.cxx:775
 TGLMarchingCubes.cxx:776
 TGLMarchingCubes.cxx:777
 TGLMarchingCubes.cxx:778
 TGLMarchingCubes.cxx:779
 TGLMarchingCubes.cxx:780
 TGLMarchingCubes.cxx:781
 TGLMarchingCubes.cxx:782
 TGLMarchingCubes.cxx:783
 TGLMarchingCubes.cxx:784
 TGLMarchingCubes.cxx:785
 TGLMarchingCubes.cxx:786
 TGLMarchingCubes.cxx:787
 TGLMarchingCubes.cxx:788
 TGLMarchingCubes.cxx:789
 TGLMarchingCubes.cxx:790
 TGLMarchingCubes.cxx:791
 TGLMarchingCubes.cxx:792
 TGLMarchingCubes.cxx:793
 TGLMarchingCubes.cxx:794
 TGLMarchingCubes.cxx:795
 TGLMarchingCubes.cxx:796
 TGLMarchingCubes.cxx:797
 TGLMarchingCubes.cxx:798
 TGLMarchingCubes.cxx:799
 TGLMarchingCubes.cxx:800
 TGLMarchingCubes.cxx:801
 TGLMarchingCubes.cxx:802
 TGLMarchingCubes.cxx:803
 TGLMarchingCubes.cxx:804
 TGLMarchingCubes.cxx:805
 TGLMarchingCubes.cxx:806
 TGLMarchingCubes.cxx:807
 TGLMarchingCubes.cxx:808
 TGLMarchingCubes.cxx:809
 TGLMarchingCubes.cxx:810
 TGLMarchingCubes.cxx:811
 TGLMarchingCubes.cxx:812
 TGLMarchingCubes.cxx:813
 TGLMarchingCubes.cxx:814
 TGLMarchingCubes.cxx:815
 TGLMarchingCubes.cxx:816
 TGLMarchingCubes.cxx:817
 TGLMarchingCubes.cxx:818
 TGLMarchingCubes.cxx:819
 TGLMarchingCubes.cxx:820
 TGLMarchingCubes.cxx:821
 TGLMarchingCubes.cxx:822
 TGLMarchingCubes.cxx:823
 TGLMarchingCubes.cxx:824
 TGLMarchingCubes.cxx:825
 TGLMarchingCubes.cxx:826
 TGLMarchingCubes.cxx:827
 TGLMarchingCubes.cxx:828
 TGLMarchingCubes.cxx:829
 TGLMarchingCubes.cxx:830
 TGLMarchingCubes.cxx:831
 TGLMarchingCubes.cxx:832
 TGLMarchingCubes.cxx:833
 TGLMarchingCubes.cxx:834
 TGLMarchingCubes.cxx:835
 TGLMarchingCubes.cxx:836
 TGLMarchingCubes.cxx:837
 TGLMarchingCubes.cxx:838
 TGLMarchingCubes.cxx:839
 TGLMarchingCubes.cxx:840
 TGLMarchingCubes.cxx:841
 TGLMarchingCubes.cxx:842
 TGLMarchingCubes.cxx:843
 TGLMarchingCubes.cxx:844
 TGLMarchingCubes.cxx:845
 TGLMarchingCubes.cxx:846
 TGLMarchingCubes.cxx:847
 TGLMarchingCubes.cxx:848
 TGLMarchingCubes.cxx:849
 TGLMarchingCubes.cxx:850
 TGLMarchingCubes.cxx:851
 TGLMarchingCubes.cxx:852
 TGLMarchingCubes.cxx:853
 TGLMarchingCubes.cxx:854
 TGLMarchingCubes.cxx:855
 TGLMarchingCubes.cxx:856
 TGLMarchingCubes.cxx:857
 TGLMarchingCubes.cxx:858
 TGLMarchingCubes.cxx:859
 TGLMarchingCubes.cxx:860
 TGLMarchingCubes.cxx:861
 TGLMarchingCubes.cxx:862
 TGLMarchingCubes.cxx:863
 TGLMarchingCubes.cxx:864
 TGLMarchingCubes.cxx:865
 TGLMarchingCubes.cxx:866
 TGLMarchingCubes.cxx:867
 TGLMarchingCubes.cxx:868
 TGLMarchingCubes.cxx:869
 TGLMarchingCubes.cxx:870
 TGLMarchingCubes.cxx:871
 TGLMarchingCubes.cxx:872
 TGLMarchingCubes.cxx:873
 TGLMarchingCubes.cxx:874
 TGLMarchingCubes.cxx:875
 TGLMarchingCubes.cxx:876
 TGLMarchingCubes.cxx:877
 TGLMarchingCubes.cxx:878
 TGLMarchingCubes.cxx:879
 TGLMarchingCubes.cxx:880
 TGLMarchingCubes.cxx:881
 TGLMarchingCubes.cxx:882
 TGLMarchingCubes.cxx:883
 TGLMarchingCubes.cxx:884
 TGLMarchingCubes.cxx:885
 TGLMarchingCubes.cxx:886
 TGLMarchingCubes.cxx:887
 TGLMarchingCubes.cxx:888
 TGLMarchingCubes.cxx:889
 TGLMarchingCubes.cxx:890
 TGLMarchingCubes.cxx:891
 TGLMarchingCubes.cxx:892
 TGLMarchingCubes.cxx:893
 TGLMarchingCubes.cxx:894
 TGLMarchingCubes.cxx:895
 TGLMarchingCubes.cxx:896
 TGLMarchingCubes.cxx:897
 TGLMarchingCubes.cxx:898
 TGLMarchingCubes.cxx:899
 TGLMarchingCubes.cxx:900
 TGLMarchingCubes.cxx:901
 TGLMarchingCubes.cxx:902
 TGLMarchingCubes.cxx:903
 TGLMarchingCubes.cxx:904
 TGLMarchingCubes.cxx:905
 TGLMarchingCubes.cxx:906
 TGLMarchingCubes.cxx:907
 TGLMarchingCubes.cxx:908
 TGLMarchingCubes.cxx:909
 TGLMarchingCubes.cxx:910
 TGLMarchingCubes.cxx:911
 TGLMarchingCubes.cxx:912
 TGLMarchingCubes.cxx:913
 TGLMarchingCubes.cxx:914
 TGLMarchingCubes.cxx:915
 TGLMarchingCubes.cxx:916
 TGLMarchingCubes.cxx:917
 TGLMarchingCubes.cxx:918
 TGLMarchingCubes.cxx:919
 TGLMarchingCubes.cxx:920
 TGLMarchingCubes.cxx:921
 TGLMarchingCubes.cxx:922
 TGLMarchingCubes.cxx:923
 TGLMarchingCubes.cxx:924
 TGLMarchingCubes.cxx:925
 TGLMarchingCubes.cxx:926
 TGLMarchingCubes.cxx:927
 TGLMarchingCubes.cxx:928
 TGLMarchingCubes.cxx:929
 TGLMarchingCubes.cxx:930
 TGLMarchingCubes.cxx:931
 TGLMarchingCubes.cxx:932
 TGLMarchingCubes.cxx:933
 TGLMarchingCubes.cxx:934
 TGLMarchingCubes.cxx:935
 TGLMarchingCubes.cxx:936
 TGLMarchingCubes.cxx:937
 TGLMarchingCubes.cxx:938
 TGLMarchingCubes.cxx:939
 TGLMarchingCubes.cxx:940
 TGLMarchingCubes.cxx:941
 TGLMarchingCubes.cxx:942
 TGLMarchingCubes.cxx:943
 TGLMarchingCubes.cxx:944
 TGLMarchingCubes.cxx:945
 TGLMarchingCubes.cxx:946
 TGLMarchingCubes.cxx:947
 TGLMarchingCubes.cxx:948
 TGLMarchingCubes.cxx:949
 TGLMarchingCubes.cxx:950
 TGLMarchingCubes.cxx:951
 TGLMarchingCubes.cxx:952
 TGLMarchingCubes.cxx:953
 TGLMarchingCubes.cxx:954
 TGLMarchingCubes.cxx:955
 TGLMarchingCubes.cxx:956
 TGLMarchingCubes.cxx:957
 TGLMarchingCubes.cxx:958
 TGLMarchingCubes.cxx:959
 TGLMarchingCubes.cxx:960
 TGLMarchingCubes.cxx:961
 TGLMarchingCubes.cxx:962
 TGLMarchingCubes.cxx:963
 TGLMarchingCubes.cxx:964
 TGLMarchingCubes.cxx:965
 TGLMarchingCubes.cxx:966
 TGLMarchingCubes.cxx:967
 TGLMarchingCubes.cxx:968
 TGLMarchingCubes.cxx:969
 TGLMarchingCubes.cxx:970
 TGLMarchingCubes.cxx:971
 TGLMarchingCubes.cxx:972
 TGLMarchingCubes.cxx:973
 TGLMarchingCubes.cxx:974
 TGLMarchingCubes.cxx:975
 TGLMarchingCubes.cxx:976
 TGLMarchingCubes.cxx:977
 TGLMarchingCubes.cxx:978
 TGLMarchingCubes.cxx:979
 TGLMarchingCubes.cxx:980
 TGLMarchingCubes.cxx:981
 TGLMarchingCubes.cxx:982
 TGLMarchingCubes.cxx:983
 TGLMarchingCubes.cxx:984
 TGLMarchingCubes.cxx:985
 TGLMarchingCubes.cxx:986
 TGLMarchingCubes.cxx:987
 TGLMarchingCubes.cxx:988
 TGLMarchingCubes.cxx:989
 TGLMarchingCubes.cxx:990
 TGLMarchingCubes.cxx:991
 TGLMarchingCubes.cxx:992
 TGLMarchingCubes.cxx:993
 TGLMarchingCubes.cxx:994
 TGLMarchingCubes.cxx:995
 TGLMarchingCubes.cxx:996
 TGLMarchingCubes.cxx:997
 TGLMarchingCubes.cxx:998
 TGLMarchingCubes.cxx:999
 TGLMarchingCubes.cxx:1000
 TGLMarchingCubes.cxx:1001
 TGLMarchingCubes.cxx:1002
 TGLMarchingCubes.cxx:1003
 TGLMarchingCubes.cxx:1004
 TGLMarchingCubes.cxx:1005
 TGLMarchingCubes.cxx:1006
 TGLMarchingCubes.cxx:1007
 TGLMarchingCubes.cxx:1008
 TGLMarchingCubes.cxx:1009
 TGLMarchingCubes.cxx:1010
 TGLMarchingCubes.cxx:1011
 TGLMarchingCubes.cxx:1012
 TGLMarchingCubes.cxx:1013
 TGLMarchingCubes.cxx:1014
 TGLMarchingCubes.cxx:1015
 TGLMarchingCubes.cxx:1016
 TGLMarchingCubes.cxx:1017
 TGLMarchingCubes.cxx:1018
 TGLMarchingCubes.cxx:1019
 TGLMarchingCubes.cxx:1020
 TGLMarchingCubes.cxx:1021
 TGLMarchingCubes.cxx:1022
 TGLMarchingCubes.cxx:1023
 TGLMarchingCubes.cxx:1024
 TGLMarchingCubes.cxx:1025
 TGLMarchingCubes.cxx:1026
 TGLMarchingCubes.cxx:1027
 TGLMarchingCubes.cxx:1028
 TGLMarchingCubes.cxx:1029
 TGLMarchingCubes.cxx:1030
 TGLMarchingCubes.cxx:1031
 TGLMarchingCubes.cxx:1032
 TGLMarchingCubes.cxx:1033
 TGLMarchingCubes.cxx:1034
 TGLMarchingCubes.cxx:1035
 TGLMarchingCubes.cxx:1036
 TGLMarchingCubes.cxx:1037
 TGLMarchingCubes.cxx:1038
 TGLMarchingCubes.cxx:1039
 TGLMarchingCubes.cxx:1040
 TGLMarchingCubes.cxx:1041
 TGLMarchingCubes.cxx:1042
 TGLMarchingCubes.cxx:1043
 TGLMarchingCubes.cxx:1044
 TGLMarchingCubes.cxx:1045
 TGLMarchingCubes.cxx:1046
 TGLMarchingCubes.cxx:1047
 TGLMarchingCubes.cxx:1048
 TGLMarchingCubes.cxx:1049
 TGLMarchingCubes.cxx:1050
 TGLMarchingCubes.cxx:1051
 TGLMarchingCubes.cxx:1052
 TGLMarchingCubes.cxx:1053
 TGLMarchingCubes.cxx:1054
 TGLMarchingCubes.cxx:1055
 TGLMarchingCubes.cxx:1056
 TGLMarchingCubes.cxx:1057
 TGLMarchingCubes.cxx:1058
 TGLMarchingCubes.cxx:1059
 TGLMarchingCubes.cxx:1060
 TGLMarchingCubes.cxx:1061
 TGLMarchingCubes.cxx:1062
 TGLMarchingCubes.cxx:1063
 TGLMarchingCubes.cxx:1064
 TGLMarchingCubes.cxx:1065
 TGLMarchingCubes.cxx:1066
 TGLMarchingCubes.cxx:1067
 TGLMarchingCubes.cxx:1068
 TGLMarchingCubes.cxx:1069
 TGLMarchingCubes.cxx:1070
 TGLMarchingCubes.cxx:1071
 TGLMarchingCubes.cxx:1072
 TGLMarchingCubes.cxx:1073
 TGLMarchingCubes.cxx:1074
 TGLMarchingCubes.cxx:1075
 TGLMarchingCubes.cxx:1076
 TGLMarchingCubes.cxx:1077
 TGLMarchingCubes.cxx:1078
 TGLMarchingCubes.cxx:1079
 TGLMarchingCubes.cxx:1080
 TGLMarchingCubes.cxx:1081
 TGLMarchingCubes.cxx:1082
 TGLMarchingCubes.cxx:1083
 TGLMarchingCubes.cxx:1084
 TGLMarchingCubes.cxx:1085
 TGLMarchingCubes.cxx:1086
 TGLMarchingCubes.cxx:1087
 TGLMarchingCubes.cxx:1088
 TGLMarchingCubes.cxx:1089
 TGLMarchingCubes.cxx:1090
 TGLMarchingCubes.cxx:1091
 TGLMarchingCubes.cxx:1092
 TGLMarchingCubes.cxx:1093
 TGLMarchingCubes.cxx:1094
 TGLMarchingCubes.cxx:1095
 TGLMarchingCubes.cxx:1096
 TGLMarchingCubes.cxx:1097
 TGLMarchingCubes.cxx:1098
 TGLMarchingCubes.cxx:1099
 TGLMarchingCubes.cxx:1100
 TGLMarchingCubes.cxx:1101
 TGLMarchingCubes.cxx:1102
 TGLMarchingCubes.cxx:1103
 TGLMarchingCubes.cxx:1104
 TGLMarchingCubes.cxx:1105
 TGLMarchingCubes.cxx:1106
 TGLMarchingCubes.cxx:1107
 TGLMarchingCubes.cxx:1108
 TGLMarchingCubes.cxx:1109
 TGLMarchingCubes.cxx:1110
 TGLMarchingCubes.cxx:1111
 TGLMarchingCubes.cxx:1112
 TGLMarchingCubes.cxx:1113
 TGLMarchingCubes.cxx:1114
 TGLMarchingCubes.cxx:1115
 TGLMarchingCubes.cxx:1116
 TGLMarchingCubes.cxx:1117
 TGLMarchingCubes.cxx:1118
 TGLMarchingCubes.cxx:1119
 TGLMarchingCubes.cxx:1120
 TGLMarchingCubes.cxx:1121
 TGLMarchingCubes.cxx:1122
 TGLMarchingCubes.cxx:1123
 TGLMarchingCubes.cxx:1124
 TGLMarchingCubes.cxx:1125
 TGLMarchingCubes.cxx:1126
 TGLMarchingCubes.cxx:1127
 TGLMarchingCubes.cxx:1128
 TGLMarchingCubes.cxx:1129
 TGLMarchingCubes.cxx:1130
 TGLMarchingCubes.cxx:1131
 TGLMarchingCubes.cxx:1132
 TGLMarchingCubes.cxx:1133
 TGLMarchingCubes.cxx:1134
 TGLMarchingCubes.cxx:1135
 TGLMarchingCubes.cxx:1136
 TGLMarchingCubes.cxx:1137
 TGLMarchingCubes.cxx:1138
 TGLMarchingCubes.cxx:1139
 TGLMarchingCubes.cxx:1140
 TGLMarchingCubes.cxx:1141
 TGLMarchingCubes.cxx:1142
 TGLMarchingCubes.cxx:1143
 TGLMarchingCubes.cxx:1144
 TGLMarchingCubes.cxx:1145
 TGLMarchingCubes.cxx:1146
 TGLMarchingCubes.cxx:1147
 TGLMarchingCubes.cxx:1148
 TGLMarchingCubes.cxx:1149
 TGLMarchingCubes.cxx:1150
 TGLMarchingCubes.cxx:1151
 TGLMarchingCubes.cxx:1152
 TGLMarchingCubes.cxx:1153
 TGLMarchingCubes.cxx:1154
 TGLMarchingCubes.cxx:1155
 TGLMarchingCubes.cxx:1156