12#ifndef ROOT_TGLMarchingCubes
13#define ROOT_TGLMarchingCubes
166template<
class H,
class E>
194 fSrc = hist->GetArray();
195 fW = hist->GetNbinsX() + 2;
196 fH = hist->GetNbinsY() + 2;
197 fD = hist->GetNbinsZ() + 2;
315template<
class E,
class V>
318 const V delta = val2 - val1;
321 return (iso - val1) / delta;
324template<
class H,
class E,
class V>
331 V
x, V
y, V z, V iso)
const
425template<
class DataSource,
class ValueType>
435 using DataSourceBase_t::GetW;
436 using DataSourceBase_t::GetH;
437 using DataSourceBase_t::GetD;
438 using DataSourceBase_t::GetData;
439 using SplitterBase_t::SplitEdge;
void SetNormalEvaluator(const H *)
void SplitEdge(TCell< E > &cell, TIsoMesh< V > *mesh, UInt_t i, V x, V y, V z, V iso) const
Double_t GetData(UInt_t i, UInt_t j, UInt_t k) const
void SetDataSource(const TF3 *f)
void FetchDensities() const
void SetNormalEvaluator(const TF3 *tf3)
void 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.
void SetDataSource(const H *hist)
const ElementType_t * fSrc
void FetchDensities() const
ElementType_t GetData(UInt_t i, UInt_t j, UInt_t k) const
UInt_t AddVertex(const V *v)
void BuildMesh(const DataSource *src, const TGridGeometry< ValueType > &geom, MeshType_t *mesh, ValueType iso)
Build iso-mesh using marching cubes.
TMeshBuilder & operator=(const TMeshBuilder &rhs)
void NextStep(UInt_t depth, const SliceType_t *prevSlice, SliceType_t *curr) const
Fill slice with vertices and triangles.
TMeshBuilder(const TMeshBuilder &rhs)
TCell< ElementType_t > CellType_t
TMeshBuilder(Bool_t averagedNormals, ValueType eps=1e-7)
DataSourceBase_t::ElementType_t ElementType_t
void BuildRow(SliceType_t *slice) const
The first row (along x) in the first slice: ny == 0, nz == 0, nx : [1, W - 1].
void BuildCol(SliceType_t *slice) const
"Col" (column) consists of cubes along y axis on the first slice (nx == 0, nz == 0).
TSplitterSelector< DataSource, ValueType >::Type_t SplitterBase_t
void BuildSlice(SliceType_t *slice) const
Slice with nz == 0.
TSlice< ElementType_t > SliceType_t
TIsoMesh< ValueType > MeshType_t
TSourceAdapterSelector< DataSource >::Type_t DataSourceBase_t
void BuildNormals() const
Build averaged normals using vertices and trinagles.
void BuildFirstCube(SliceType_t *slice) const
The first cube in a grid. nx == 0, ny == 0, nz ==0.
TSlice(const TSlice &rhs)
TSlice & operator=(const TSlice &rhs)
std::vector< TCell< V > > fCells
void ResizeSlice(UInt_t w, UInt_t h)
TH3Adapter< TH3C, Char_t > Type_t
TH3Adapter< TH3D, Double_t > Type_t
TH3Adapter< TH3F, Float_t > Type_t
TH3Adapter< TH3I, Int_t > Type_t
TH3Adapter< TH3S, Short_t > Type_t
TDefaultSplitter< TH3C, Char_t, V > Type_t
TDefaultSplitter< TH3D, Double_t, V > Type_t
TDefaultSplitter< TH3F, Float_t, V > Type_t
TDefaultSplitter< TH3I, Int_t, V > Type_t
TDefaultSplitter< TH3S, Short_t, V > Type_t
TDefaultSplitter< TKDEFGT, Float_t, Float_t > Type_t
A 3-Dim function with parameters.
3-D histogram with a byte per channel (see TH1 documentation)
3-D histogram with a double per channel (see TH1 documentation)}
3-D histogram with a float per channel (see TH1 documentation)}
3-D histogram with an int per channel (see TH1 documentation)}
3-D histogram with a short per channel (see TH1 documentation)
const UChar_t eConn[12][2]
const Int_t conTbl[256][16]
V GetOffset(E val1, E val2, V iso)
const Float_t eDir[12][3]
constexpr Double_t E()
Base of natural log: