1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
template<class TETRA_MESH_TYPE>
class TetraStats
{
typedef typename TETRA_MESH_TYPE::TetraType TetraType;
TETRA_MESH_TYPE * Tetra;
TetraType* T;
public:
double volume;
double ratio;
TetraStats(){T=0;}
~TetraStats(){}
static double ComputeVolume(TETRA_MESH_TYPE *tm)
{
double total=0.f;
TETRA_MESH_TYPE::TetraIterator ti;
for (ti=tm->tetra.begin();ti<tm->tetra.end();ti++)
{
if (!ti->IsD())
total+=ti->ComputeVolume();
}
return total;
}
static double ComputeRatioMedia(TETRA_MESH_TYPE *tm)
{
double total=0.f;
TETRA_MESH_TYPE::TetraIterator ti;
int i=0;
for (ti=tm->tetra.begin();ti<tm->tetra.end();ti++)
{
if (!ti->IsD())
{
total+=ti->AspectRatio();
i++;
}
}
return (total/i);
}
void SetTetraMesh(TETRA_MESH_TYPE* T)
{
Tetra=T;
}
void Update()
{
ratio=ComputeRatioMedia(Tetra);
volume=ComputeVolume(Tetra);
}
void SetTetraInfo(TetraType *Te)
{
if (T!=0)
T->ClearS();
T=Te;
}
void ClearTetraInfo(TetraType *Te)
{
T=0;
}
TetraType * TCurrent()
{
return T;
}
};
|