Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Public Member Functions | |
TriStats (Interface *mbi_p, OrientedBoxTreeTool *tool_p, EntityHandle root) | |
virtual ErrorCode | visit (EntityHandle, int, bool &descend) |
Visit a node in the tree during a traversal. | |
virtual ErrorCode | leaf (EntityHandle node) |
Process a leaf node during tree traversal. | |
std::string | commafy (int num) |
void | write_results (std::ostream &out) |
Public Attributes | |
unsigned | min |
unsigned | max |
unsigned | sum |
unsigned | leaves |
double | sqr |
unsigned | ten_buckets [ten_buckets_max] |
double | ten_buckets_vol [ten_buckets_max] |
Interface * | mbi |
OrientedBoxTreeTool * | tool |
double | tot_vol |
Static Public Attributes | |
static const unsigned | ten_buckets_max = 5 |
Definition at line 222 of file obb_analysis.cpp.
TriStats::TriStats | ( | Interface * | mbi_p, |
OrientedBoxTreeTool * | tool_p, | ||
EntityHandle | root | ||
) | [inline] |
Definition at line 238 of file obb_analysis.cpp.
References CHECKERR, ErrorCode, and moab::OrientedBox::volume().
: OrientedBoxTreeTool::Op(), sum( 0 ), leaves( 0 ), sqr( 0 ), mbi( mbi_p ), tool( tool_p ) { min = std::numeric_limits< unsigned >::max(); max = std::numeric_limits< unsigned >::min(); for( unsigned i = 0; i < ten_buckets_max; ++i ) { ten_buckets[i] = 0; ten_buckets_vol[i] = 0.; } OrientedBox box; ErrorCode rval = tool->box( root, box ); CHECKERR( mbi, rval ); tot_vol = box.volume(); }
std::string TriStats::commafy | ( | int | num | ) | [inline] |
Definition at line 292 of file obb_analysis.cpp.
{ std::stringstream str; str << num; std::string s = str.str(); int n = s.size(); for( int i = n - 3; i >= 1; i -= 3 ) { s.insert( i, 1, ',' ); n++; } return s; }
virtual ErrorCode TriStats::leaf | ( | EntityHandle | node | ) | [inline, virtual] |
Process a leaf node during tree traversal.
Implements moab::OrientedBoxTreeTool::Op.
Definition at line 263 of file obb_analysis.cpp.
References CHECKERR, ErrorCode, MBTRI, moab::Range::size(), moab::sum(), and moab::OrientedBox::volume().
{ Range tris; ErrorCode rval = tool->get_moab_instance()->get_entities_by_type( node, MBTRI, tris ); unsigned count = tris.size(); sum += count; sqr += ( count * count ); if( min > count ) min = count; if( max < count ) max = count; for( unsigned i = 0; i < ten_buckets_max; ++i ) { if( count > std::pow( (double)10, (int)( i + 1 ) ) ) { ten_buckets[i] += 1; OrientedBox box; rval = tool->box( node, box ); CHECKERR( mbi, rval ); ten_buckets_vol[i] += box.volume(); } } leaves++; return rval; }
virtual ErrorCode TriStats::visit | ( | EntityHandle | node, |
int | depth, | ||
bool & | descend | ||
) | [inline, virtual] |
Visit a node in the tree during a traversal.
This method is called for each node in the tree visited during a pre-order traversal.
node | The EntityHandle for the entity set for the tree node. |
depth | The current depth in the tree. |
descend | Output: if false, traversal will skip children of the current node, or if the current node is a leaf, the 'leaf' method will not be called. |
Implements moab::OrientedBoxTreeTool::Op.
Definition at line 256 of file obb_analysis.cpp.
References MB_SUCCESS.
{ descend = true; return MB_SUCCESS; }
void TriStats::write_results | ( | std::ostream & | out | ) | [inline] |
Definition at line 308 of file obb_analysis.cpp.
References moab::std_dev(), and moab::sum().
{ out << commafy( sum ) << " triangles in " << commafy( leaves ) << " leaves." << std::endl; double avg = sum / (double)leaves; double stddev = std_dev( sqr, sum, leaves ); out << "Tris per leaf: Min " << min << ", Max " << max << ", avg " << avg << ", stddev " << stddev << std::endl; for( unsigned i = 0; i < ten_buckets_max; ++i ) { if( ten_buckets[i] ) { out << "Leaves exceeding " << std::pow( (double)10, (int)( i + 1 ) ) << " triangles: " << ten_buckets[i]; double frac_total_vol = ten_buckets_vol[i] / tot_vol; double avg_ftv = frac_total_vol / ten_buckets[i]; out << " (avg " << avg_ftv * 100.0 << "% of OBB volume)" << std::endl; } } }
unsigned TriStats::leaves |
Definition at line 226 of file obb_analysis.cpp.
unsigned TriStats::max |
Definition at line 226 of file obb_analysis.cpp.
Definition at line 233 of file obb_analysis.cpp.
unsigned TriStats::min |
Definition at line 226 of file obb_analysis.cpp.
double TriStats::sqr |
Definition at line 227 of file obb_analysis.cpp.
unsigned TriStats::sum |
Definition at line 226 of file obb_analysis.cpp.
unsigned TriStats::ten_buckets[ten_buckets_max] |
Definition at line 230 of file obb_analysis.cpp.
const unsigned TriStats::ten_buckets_max = 5 [static] |
Definition at line 229 of file obb_analysis.cpp.
Definition at line 231 of file obb_analysis.cpp.
Definition at line 234 of file obb_analysis.cpp.
double TriStats::tot_vol |
Definition at line 236 of file obb_analysis.cpp.