![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Public Member Functions | |
TreeNodePrinter (std::ostream &stream, bool list_contents, bool list_box, const char *id_tag_name, OrientedBoxTreeTool *tool_ptr) | |
virtual ErrorCode | visit (EntityHandle node, int depth, bool &descend) |
Visit a node in the tree during a traversal. | |
virtual ErrorCode | leaf (EntityHandle) |
Process a leaf node during tree traversal. | |
Private Member Functions | |
ErrorCode | print_geometry (EntityHandle node) |
ErrorCode | print_contents (EntityHandle node) |
ErrorCode | print_counts (EntityHandle node) |
Private Attributes | |
bool | printContents |
bool | printGeometry |
bool | haveTag |
Tag | tag |
Tag | gidTag |
Tag | geomTag |
Interface * | instance |
OrientedBoxTreeTool * | tool |
std::ostream & | outputStream |
Definition at line 1474 of file OrientedBoxTreeTool.cpp.
moab::TreeNodePrinter::TreeNodePrinter | ( | std::ostream & | stream, |
bool | list_contents, | ||
bool | list_box, | ||
const char * | id_tag_name, | ||
OrientedBoxTreeTool * | tool_ptr | ||
) |
Definition at line 1504 of file OrientedBoxTreeTool.cpp.
References ErrorCode, GEOM_DIMENSION_TAG_NAME, geomTag, gidTag, moab::Interface::globalId_tag(), haveTag, instance, MB_SUCCESS, MB_TYPE_INTEGER, tag, and moab::Interface::tag_get_handle().
: printContents( list_contents ), printGeometry( list_box ), haveTag( false ), tag( 0 ), gidTag( 0 ), geomTag( 0 ),
instance( tool_ptr->get_moab_instance() ), tool( tool_ptr ), outputStream( stream )
{
ErrorCode rval;
if( id_tag_name )
{
rval = instance->tag_get_handle( id_tag_name, 1, MB_TYPE_INTEGER, tag );
if( !rval )
{
std::cerr << "Could not get tag \"" << id_tag_name << "\"\n";
stream << "Could not get tag \"" << id_tag_name << "\"\n";
}
else
{
haveTag = true;
}
}
gidTag = instance->globalId_tag();
rval = instance->tag_get_handle( GEOM_DIMENSION_TAG_NAME, 1, MB_TYPE_INTEGER, geomTag );
if( MB_SUCCESS != rval ) geomTag = 0;
}
virtual ErrorCode moab::TreeNodePrinter::leaf | ( | EntityHandle | node | ) | [inline, virtual] |
Process a leaf node during tree traversal.
Implements moab::OrientedBoxTreeTool::Op.
Definition at line 1485 of file OrientedBoxTreeTool.cpp.
References MB_SUCCESS.
{
return MB_SUCCESS;
}
ErrorCode moab::TreeNodePrinter::print_contents | ( | EntityHandle | node | ) | [private] |
Definition at line 1597 of file OrientedBoxTreeTool.cpp.
References moab::Range::begin(), moab::Range::empty(), moab::Range::end(), moab::CN::EntityTypeName(), ErrorCode, moab::Interface::get_entities_by_type(), haveTag, moab::Interface::id_from_handle(), instance, MB_SUCCESS, MBMAXTYPE, MBVERTEX, outputStream, moab::Range::size(), tag, and moab::Interface::tag_get_data().
Referenced by visit().
{
// list contents
for( EntityType type = MBVERTEX; type != MBMAXTYPE; ++type )
{
Range range;
ErrorCode rval = instance->get_entities_by_type( node, type, range );
if( MB_SUCCESS != rval ) return rval;
if( range.empty() ) continue;
outputStream << " " << CN::EntityTypeName( type ) << " ";
std::vector< int > ids( range.size() );
if( haveTag )
{
rval = instance->tag_get_data( tag, range, &ids[0] );
std::sort( ids.begin(), ids.end() );
}
else
{
Range::iterator ri = range.begin();
std::vector< int >::iterator vi = ids.begin();
while( ri != range.end() )
{
*vi = instance->id_from_handle( *ri );
++ri;
++vi;
}
}
unsigned i = 0;
for( ;; )
{
unsigned beg = i, end;
do
{
end = i++;
} while( i < ids.size() && ids[end] + 1 == ids[i] );
if( end == beg )
outputStream << ids[end];
else if( end == beg + 1 )
outputStream << ids[beg] << ", " << ids[end];
else
outputStream << ids[beg] << "-" << ids[end];
if( i == ids.size() )
{
outputStream << std::endl;
break;
}
else
outputStream << ", ";
}
}
return MB_SUCCESS;
}
ErrorCode moab::TreeNodePrinter::print_counts | ( | EntityHandle | node | ) | [private] |
Definition at line 1585 of file OrientedBoxTreeTool.cpp.
References moab::CN::EntityTypeName(), ErrorCode, moab::Interface::get_number_entities_by_type(), instance, MB_SUCCESS, MBMAXTYPE, MBVERTEX, and outputStream.
Referenced by visit().
{
for( EntityType type = MBVERTEX; type != MBMAXTYPE; ++type )
{
int count = 0;
ErrorCode rval = instance->get_number_entities_by_type( node, type, count );
if( MB_SUCCESS != rval ) return rval;
if( count > 0 ) outputStream << " " << count << " " << CN::EntityTypeName( type ) << std::endl;
}
return MB_SUCCESS;
}
ErrorCode moab::TreeNodePrinter::print_geometry | ( | EntityHandle | node | ) | [private] |
Definition at line 1570 of file OrientedBoxTreeTool.cpp.
References moab::OrientedBox::axis(), moab::OrientedBoxTreeTool::box(), moab::OrientedBox::center, moab::OrientedBox::dimensions(), ErrorCode, moab::OrientedBox::inner_radius(), length(), MB_SUCCESS, moab::OrientedBox::outer_radius(), outputStream, and tool.
Referenced by visit().
{
OrientedBox box;
ErrorCode rval = tool->box( node, box );
if( MB_SUCCESS != rval ) return rval;
CartVect length = box.dimensions();
outputStream << box.center << " Radius: " << box.inner_radius() << " - " << box.outer_radius() << std::endl
<< '+' << box.axis( 0 ) << " : " << length[0] << std::endl
<< 'x' << box.axis( 1 ) << " : " << length[1] << std::endl
<< 'x' << box.axis( 2 ) << " : " << length[2] << std::endl;
return MB_SUCCESS;
}
ErrorCode moab::TreeNodePrinter::visit | ( | EntityHandle | node, |
int | depth, | ||
bool & | descend | ||
) | [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 1533 of file OrientedBoxTreeTool.cpp.
References moab::Range::begin(), ErrorCode, geomTag, moab::Interface::get_entities_by_type_and_tag(), gidTag, moab::Interface::id_from_handle(), instance, MB_SUCCESS, MBENTITYSET, outputStream, print_contents(), print_counts(), print_geometry(), printContents, printGeometry, moab::Range::size(), and moab::Interface::tag_get_data().
{
descend = true;
EntityHandle setid = instance->id_from_handle( node );
outputStream << setid << ":" << std::endl;
Range surfs;
ErrorCode r3 = MB_SUCCESS;
if( geomTag )
{
const int two = 2;
const void* tagdata[] = { &two };
r3 = instance->get_entities_by_type_and_tag( node, MBENTITYSET, &geomTag, tagdata, 1, surfs );
if( MB_SUCCESS == r3 && surfs.size() == 1 )
{
EntityHandle surf = *surfs.begin();
int id;
if( gidTag && MB_SUCCESS == instance->tag_get_data( gidTag, &surf, 1, &id ) )
outputStream << " Surface " << id << std::endl;
else
outputStream << " Surface w/ unknown ID (" << surf << ")" << std::endl;
}
}
ErrorCode r1 = printGeometry ? print_geometry( node ) : MB_SUCCESS;
ErrorCode r2 = printContents ? print_contents( node ) : print_counts( node );
outputStream << std::endl;
if( MB_SUCCESS != r1 )
return r1;
else if( MB_SUCCESS != r2 )
return r2;
else
return r3;
}
Tag moab::TreeNodePrinter::geomTag [private] |
Definition at line 1498 of file OrientedBoxTreeTool.cpp.
Referenced by TreeNodePrinter(), and visit().
Tag moab::TreeNodePrinter::gidTag [private] |
Definition at line 1498 of file OrientedBoxTreeTool.cpp.
Referenced by TreeNodePrinter(), and visit().
bool moab::TreeNodePrinter::haveTag [private] |
Definition at line 1497 of file OrientedBoxTreeTool.cpp.
Referenced by print_contents(), and TreeNodePrinter().
Interface* moab::TreeNodePrinter::instance [private] |
Definition at line 1499 of file OrientedBoxTreeTool.cpp.
Referenced by print_contents(), print_counts(), TreeNodePrinter(), and visit().
std::ostream& moab::TreeNodePrinter::outputStream [private] |
Definition at line 1501 of file OrientedBoxTreeTool.cpp.
Referenced by print_contents(), print_counts(), print_geometry(), and visit().
bool moab::TreeNodePrinter::printContents [private] |
Definition at line 1495 of file OrientedBoxTreeTool.cpp.
Referenced by visit().
bool moab::TreeNodePrinter::printGeometry [private] |
Definition at line 1496 of file OrientedBoxTreeTool.cpp.
Referenced by visit().
Tag moab::TreeNodePrinter::tag [private] |
Definition at line 1498 of file OrientedBoxTreeTool.cpp.
Referenced by print_contents(), and TreeNodePrinter().
OrientedBoxTreeTool* moab::TreeNodePrinter::tool [private] |
Definition at line 1500 of file OrientedBoxTreeTool.cpp.
Referenced by print_geometry().