00001 00002 template<class TETRA_MESH_TYPE> 00003 class TetraStats 00004 { 00005 typedef typename TETRA_MESH_TYPE::TetraType TetraType; 00006 00007 TETRA_MESH_TYPE * Tetra; 00008 TetraType* T; 00009 00010 public: 00011 double volume; 00012 double ratio; 00013 00014 TetraStats(){T=0;} 00015 00016 ~TetraStats(){} 00017 00018 static double ComputeVolume(TETRA_MESH_TYPE *tm) 00019 { 00020 00021 double total=0.f; 00022 TETRA_MESH_TYPE::TetraIterator ti; 00023 for (ti=tm->tetra.begin();ti<tm->tetra.end();ti++) 00024 { 00025 if (!ti->IsD()) 00026 total+=ti->ComputeVolume(); 00027 } 00028 return total; 00029 } 00030 00031 static double ComputeRatioMedia(TETRA_MESH_TYPE *tm) 00032 { 00033 double total=0.f; 00034 TETRA_MESH_TYPE::TetraIterator ti; 00035 int i=0; 00036 for (ti=tm->tetra.begin();ti<tm->tetra.end();ti++) 00037 { 00038 if (!ti->IsD()) 00039 { 00040 total+=ti->AspectRatio(); 00041 i++; 00042 } 00043 } 00044 return (total/i); 00045 } 00046 00047 void SetTetraMesh(TETRA_MESH_TYPE* T) 00048 { 00049 Tetra=T; 00050 } 00051 00052 void Update() 00053 { 00054 ratio=ComputeRatioMedia(Tetra); 00055 volume=ComputeVolume(Tetra); 00056 } 00057 00058 void SetTetraInfo(TetraType *Te) 00059 { 00060 if (T!=0) 00061 T->ClearS(); 00062 T=Te; 00063 } 00064 00065 void ClearTetraInfo(TetraType *Te) 00066 { 00067 T=0; 00068 } 00069 00070 TetraType * TCurrent() 00071 { 00072 return T; 00073 } 00074 };