![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <ReadOBJ.hpp>
Public Member Functions | |
ErrorCode | load_file (const char *file_name, const EntityHandle *file_set, const FileOptions &opts, const SubsetList *subset_list=0, const Tag *file_id_tag=0) |
Load mesh from a file. | |
ErrorCode | read_tag_values (const char *file_name, const char *tag_name, const FileOptions &opts, std::vector< int > &tag_values_out, const SubsetList *subset_list=0) |
Read tag values from a file. | |
ReadOBJ (Interface *impl=NULL) | |
Constructor. | |
virtual | ~ReadOBJ () |
Destructor. | |
Static Public Member Functions | |
static ReaderIface * | factory (Interface *) |
factory method | |
Private Member Functions | |
keyword_type | get_keyword (std::vector< std::string > tokens) |
template<typename T > | |
std::string | match (const std::string &token, std::map< std::string, T > &tokenList) |
void | tokenize (const std::string &str, std::vector< std::string > &tokens, const char *delimiters) |
ErrorCode | create_new_object (std::string object_name, int object_id, EntityHandle &curr_obj_meshset) |
ErrorCode | create_new_group (std::string object_name, int curr_object, EntityHandle &object_meshset) |
ErrorCode | create_new_vertex (std::vector< std::string > v_tokens, EntityHandle &vertex_eh) |
ErrorCode | create_new_face (std::vector< std::string > f_tokens, const std::vector< EntityHandle > &vertex_list, EntityHandle &face_eh) |
ErrorCode | split_quad (std::vector< std::string > f_tokens, std::vector< EntityHandle > &vertex_list, Range &face_eh) |
ErrorCode | create_tri_faces (std::vector< EntityHandle > quad_vert_eh, Range &face_eh) |
Private Attributes | |
ReadUtilIface * | readMeshIface |
Interface * | MBI |
interface instance | |
GeomTopoTool * | myGeomTool |
Tag | geom_tag |
Tag | id_tag |
Tag | name_tag |
Tag | category_tag |
Tag | faceting_tol_tag |
Tag | geometry_resabs_tag |
Tag | obj_name_tag |
Static Private Attributes | |
static const char * | delimiters = " " |
Definition at line 119 of file ReadOBJ.hpp.
moab::ReadOBJ::ReadOBJ | ( | Interface * | impl = NULL | ) |
Constructor.
Definition at line 63 of file ReadOBJ.cpp.
References category_tag, CATEGORY_TAG_NAME, CATEGORY_TAG_SIZE, ErrorCode, faceting_tol_tag, GEOM_DIMENSION_TAG_NAME, geom_tag, geometry_resabs_tag, moab::Interface::globalId_tag(), id_tag, MB_CHK_ERR_RET, MB_TAG_CREAT, MB_TAG_SPARSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, MBI, myGeomTool, name_tag, NAME_TAG_NAME, NAME_TAG_SIZE, obj_name_tag, moab::Interface::query_interface(), readMeshIface, and moab::Interface::tag_get_handle().
Referenced by factory().
: MBI( impl ), geom_tag( 0 ), id_tag( 0 ), name_tag( 0 ), category_tag( 0 ), faceting_tol_tag( 0 ),
geometry_resabs_tag( 0 ), obj_name_tag( 0 )
{
assert( NULL != impl );
MBI->query_interface( readMeshIface );
myGeomTool = new GeomTopoTool( impl );
assert( NULL != readMeshIface );
// Get all handles
int negone = -1;
ErrorCode rval;
rval = MBI->tag_get_handle( GEOM_DIMENSION_TAG_NAME, 1, MB_TYPE_INTEGER, geom_tag, MB_TAG_SPARSE | MB_TAG_CREAT,
&negone );MB_CHK_ERR_RET( rval );
id_tag = MBI->globalId_tag();
rval = MBI->tag_get_handle( NAME_TAG_NAME, NAME_TAG_SIZE, MB_TYPE_OPAQUE, name_tag, MB_TAG_SPARSE | MB_TAG_CREAT );MB_CHK_ERR_RET( rval );
rval = MBI->tag_get_handle( CATEGORY_TAG_NAME, CATEGORY_TAG_SIZE, MB_TYPE_OPAQUE, category_tag,
MB_TAG_SPARSE | MB_TAG_CREAT );MB_CHK_ERR_RET( rval );
rval = MBI->tag_get_handle( "OBJECT_NAME", 32, MB_TYPE_OPAQUE, obj_name_tag, MB_TAG_SPARSE | MB_TAG_CREAT );MB_CHK_ERR_RET( rval );
rval = MBI->tag_get_handle( "FACETING_TOL", 1, MB_TYPE_DOUBLE, faceting_tol_tag, MB_TAG_SPARSE | MB_TAG_CREAT );MB_CHK_ERR_RET( rval );
rval =
MBI->tag_get_handle( "GEOMETRY_RESABS", 1, MB_TYPE_DOUBLE, geometry_resabs_tag, MB_TAG_SPARSE | MB_TAG_CREAT );MB_CHK_ERR_RET( rval );
}
moab::ReadOBJ::~ReadOBJ | ( | ) | [virtual] |
Destructor.
Definition at line 94 of file ReadOBJ.cpp.
References MBI, myGeomTool, readMeshIface, and moab::Interface::release_interface().
{
if( readMeshIface )
{
MBI->release_interface( readMeshIface );
readMeshIface = 0;
}
delete myGeomTool;
}
ErrorCode moab::ReadOBJ::create_new_face | ( | std::vector< std::string > | f_tokens, |
const std::vector< EntityHandle > & | vertex_list, | ||
EntityHandle & | face_eh | ||
) | [private] |
Definition at line 458 of file ReadOBJ.cpp.
References face::conn, moab::Interface::create_element(), ErrorCode, MB_CHK_SET_ERR, MBI, and MBTRI.
Referenced by load_file().
{
face next_face;
ErrorCode rval;
for( int i = 1; i < 4; i++ )
{
int vertex_id = atoi( f_tokens[i].c_str() );
// Some faces contain format 'vertex/texture'
// Remove the '/texture' and add the vertex to the list
std::size_t slash = f_tokens[i].find( '/' );
if( slash != std::string::npos )
{
std::string face = f_tokens[i].substr( 0, slash );
vertex_id = atoi( face.c_str() );
}
next_face.conn[i - 1] = vertex_list[vertex_id - 1];
}
rval = MBI->create_element( MBTRI, next_face.conn, 3, face_eh );MB_CHK_SET_ERR( rval, "Unable to create new face." );
return rval;
}
ErrorCode moab::ReadOBJ::create_new_group | ( | std::string | object_name, |
int | curr_object, | ||
EntityHandle & | object_meshset | ||
) | [private] |
Definition at line 420 of file ReadOBJ.cpp.
References moab::Interface::create_meshset(), ErrorCode, id_tag, MB_CHK_SET_ERR, MBI, MESHSET_SET, name_tag, and moab::Interface::tag_set_data().
Referenced by load_file().
{
ErrorCode rval;
// Create meshset to store group
rval = MBI->create_meshset( MESHSET_SET, group_meshset );MB_CHK_SET_ERR( rval, "Failed to generate group mesh set." );
// Set meshset tags
rval = MBI->tag_set_data( name_tag, &group_meshset, 1, group_name.c_str() );MB_CHK_SET_ERR( rval, "Failed to set mesh set name tag." );
rval = MBI->tag_set_data( id_tag, &group_meshset, 1, &( curr_group ) );MB_CHK_SET_ERR( rval, "Failed to set mesh set ID tag." );
return rval;
}
ErrorCode moab::ReadOBJ::create_new_object | ( | std::string | object_name, |
int | object_id, | ||
EntityHandle & | curr_obj_meshset | ||
) | [private] |
Definition at line 369 of file ReadOBJ.cpp.
References moab::Interface::add_parent_child(), category_tag, moab::Interface::create_meshset(), dim, ErrorCode, moab::geom_category, moab::geom_name, geom_tag, id_tag, MB_CHK_SET_ERR, MBI, MESHSET_SET, myGeomTool, name_tag, obj_name_tag, moab::GeomTopoTool::set_sense(), and moab::Interface::tag_set_data().
Referenced by load_file().
{
ErrorCode rval;
// Create meshset to store object
// This is also referred to as the surface meshset
rval = MBI->create_meshset( MESHSET_SET, object_meshset );MB_CHK_SET_ERR( rval, "Failed to generate object mesh set." );
// Set surface meshset tags
rval = MBI->tag_set_data( name_tag, &object_meshset, 1, object_name.c_str() );MB_CHK_SET_ERR( rval, "Failed to set mesh set name tag." );
rval = MBI->tag_set_data( id_tag, &object_meshset, 1, &( curr_object ) );MB_CHK_SET_ERR( rval, "Failed to set mesh set ID tag." );
int dim = 2;
rval = MBI->tag_set_data( geom_tag, &object_meshset, 1, &( dim ) );MB_CHK_SET_ERR( rval, "Failed to set mesh set dim tag." );
rval = MBI->tag_set_data( category_tag, &object_meshset, 1, geom_category[2] );MB_CHK_SET_ERR( rval, "Failed to set mesh set category tag." );
/* Create volume entity set corresponding to surface
The volume meshset will have one child--
the meshset of the surface that bounds the object.
*/
EntityHandle vol_meshset;
rval = MBI->create_meshset( MESHSET_SET, vol_meshset );MB_CHK_SET_ERR( rval, "Failed to create volume mesh set." );
rval = MBI->add_parent_child( vol_meshset, object_meshset );MB_CHK_SET_ERR( rval, "Failed to add object mesh set as child of volume mesh set." );
/* Set volume meshset tags
The volume meshset is tagged with the same name as the surface meshset
for each object because of the direct relation between these entities.
*/
rval = MBI->tag_set_data( obj_name_tag, &vol_meshset, 1, object_name.c_str() );MB_CHK_SET_ERR( rval, "Failed to set mesh set name tag." );
rval = MBI->tag_set_data( id_tag, &vol_meshset, 1, &( curr_object ) );MB_CHK_SET_ERR( rval, "Failed to set mesh set ID tag." );
dim = 3;
rval = MBI->tag_set_data( geom_tag, &vol_meshset, 1, &( dim ) );MB_CHK_SET_ERR( rval, "Failed to set mesh set dim tag." );
rval = MBI->tag_set_data( name_tag, &vol_meshset, 1, geom_name[3] );MB_CHK_SET_ERR( rval, "Failed to set mesh set name tag." );
rval = MBI->tag_set_data( category_tag, &vol_meshset, 1, geom_category[3] );MB_CHK_SET_ERR( rval, "Failed to set mesh set category tag." );
rval = myGeomTool->set_sense( object_meshset, vol_meshset, SENSE_FORWARD );MB_CHK_SET_ERR( rval, "Failed to set surface sense." );
return rval;
}
ErrorCode moab::ReadOBJ::create_new_vertex | ( | std::vector< std::string > | v_tokens, |
EntityHandle & | vertex_eh | ||
) | [private] |
Definition at line 440 of file ReadOBJ.cpp.
References vertex::coord, moab::Interface::create_vertex(), ErrorCode, MB_CHK_SET_ERR, and MBI.
Referenced by load_file().
{
ErrorCode rval;
vertex next_vertex;
for( int i = 1; i < 4; i++ )
next_vertex.coord[i - 1] = atof( v_tokens[i].c_str() );
rval = MBI->create_vertex( next_vertex.coord, vertex_eh );MB_CHK_SET_ERR( rval, "Unbale to create vertex." );
return rval;
}
ErrorCode moab::ReadOBJ::create_tri_faces | ( | std::vector< EntityHandle > | quad_vert_eh, |
Range & | face_eh | ||
) | [private] |
Definition at line 514 of file ReadOBJ.cpp.
References moab::Interface::create_element(), ErrorCode, moab::Range::insert(), MBI, and MBTRI.
Referenced by split_quad().
{
ErrorCode rval;
EntityHandle connectivity[3];
EntityHandle new_face;
connectivity[0] = quad_vert_eh[0];
connectivity[1] = quad_vert_eh[1];
connectivity[2] = quad_vert_eh[2];
rval = MBI->create_element( MBTRI, connectivity, 3, new_face );
face_eh.insert( new_face );
connectivity[0] = quad_vert_eh[2];
connectivity[1] = quad_vert_eh[3];
connectivity[2] = quad_vert_eh[0];
rval = MBI->create_element( MBTRI, connectivity, 3, new_face );
face_eh.insert( new_face );
return rval;
}
ReaderIface * moab::ReadOBJ::factory | ( | Interface * | iface | ) | [static] |
factory method
Definition at line 41 of file ReadOBJ.cpp.
References ReadOBJ().
Referenced by moab::ReaderWriterSet::ReaderWriterSet().
{
return new ReadOBJ( iface );
}
keyword_type moab::ReadOBJ::get_keyword | ( | std::vector< std::string > | tokens | ) | [private] |
Definition at line 297 of file ReadOBJ.cpp.
References moab::face_start, moab::group_start, match(), moab::object_start, moab::valid_unsupported, and moab::vertex_start.
Referenced by load_file().
{
std::map< std::string, keyword_type > keywords;
// currently supported
keywords["o"] = object_start;
keywords["g"] = group_start;
keywords["f"] = face_start;
keywords["v"] = vertex_start;
// not currently supported, will be ignored
keywords["vn"] = valid_unsupported;
keywords["vt"] = valid_unsupported;
keywords["vp"] = valid_unsupported;
keywords["s"] = valid_unsupported;
keywords["mtllib"] = valid_unsupported;
keywords["usemtl"] = valid_unsupported;
keywords["#"] = valid_unsupported;
keywords["cstype"] = valid_unsupported;
keywords["deg"] = valid_unsupported;
keywords["bmat"] = valid_unsupported;
keywords["step"] = valid_unsupported;
keywords["p"] = valid_unsupported;
keywords["l"] = valid_unsupported;
keywords["curv"] = valid_unsupported;
keywords["curv2"] = valid_unsupported;
keywords["surf"] = valid_unsupported;
keywords["parm"] = valid_unsupported;
keywords["trim"] = valid_unsupported;
keywords["hole"] = valid_unsupported;
keywords["scrv"] = valid_unsupported;
keywords["sp"] = valid_unsupported;
keywords["end"] = valid_unsupported;
keywords["mg"] = valid_unsupported;
keywords["bevel"] = valid_unsupported;
keywords["c_interp"] = valid_unsupported;
keywords["d_interp"] = valid_unsupported;
keywords["lod"] = valid_unsupported;
keywords["shadow_obj"] = valid_unsupported;
keywords["trace_obj"] = valid_unsupported;
keywords["ctech"] = valid_unsupported;
keywords["stech"] = valid_unsupported;
return keywords[match( tokens[0], keywords )];
}
ErrorCode moab::ReadOBJ::load_file | ( | const char * | file_name, |
const EntityHandle * | file_set, | ||
const FileOptions & | opts, | ||
const SubsetList * | subset_list = 0 , |
||
const Tag * | file_id_tag = 0 |
||
) | [virtual] |
Load mesh from a file.
Method all readers must provide to import a mesh.
file_name | The file to read. |
file_set | Optional pointer to entity set representing file. If this is not NULL, reader may optionally tag the pointed-to set with format-specific meta-data. |
subset_list | An optional struct pointer specifying the tags identifying entity sets to be read. |
file_id_tag | If specified, reader should store for each entity it reads, a unique integer ID for this tag. |
Implements moab::ReaderIface.
Definition at line 115 of file ReadOBJ.cpp.
References moab::Interface::add_entities(), moab::Interface::create_meshset(), create_new_face(), create_new_group(), create_new_object(), create_new_vertex(), delimiters, ErrorCode, moab::face_start, get_keyword(), moab::group_start, input_file, MB_CHK_ERR, MB_CHK_SET_ERR, MB_FILE_DOES_NOT_EXIST, MB_SET_ERR, MB_SUCCESS, MB_UNSUPPORTED_OPERATION, MBI, MESHSET_SET, moab::object_start, split_quad(), tokenize(), moab::valid_unsupported, and moab::vertex_start.
{
ErrorCode rval;
int ignored = 0; // Number of lines not beginning with o, v, or f
std::string line; // The current line being read
EntityHandle vert_meshset;
EntityHandle curr_meshset; // Current object meshset
std::string object_name;
std::vector< EntityHandle > vertex_list;
int object_id = 0, group_id = 0; // ID number for each volume/surface
int num_groups;
// At this time, there is no support for reading a subset of the file
if( subset_list )
{
MB_SET_ERR( MB_UNSUPPORTED_OPERATION, "Reading subset of files not supported for OBJ." );
}
std::ifstream input_file( filename ); // Filestream for OBJ file
// Check that the file can be read
if( !input_file.good() )
{
std::cout << "Problems reading file = " << filename << std::endl;
return MB_FILE_DOES_NOT_EXIST;
}
// If the file can be read
if( input_file.is_open() )
{
// create meshset for global vertices
rval = MBI->create_meshset( MESHSET_SET, vert_meshset );MB_CHK_SET_ERR( rval, "Failed to create global vert meshset." );
while( std::getline( input_file, line ) )
{
// Skip blank lines in file
if( line.length() == 0 ) continue;
// Tokenize the line
std::vector< std::string > tokens;
tokenize( line, tokens, delimiters );
// Each group and object line must have a name, token size is at least 2
// Each vertex and face line should have token size of at least 4
if( tokens.size() < 2 ) continue;
switch( get_keyword( tokens ) )
{
// Object line
case object_start: {
object_id++;
object_name = tokens[1]; // Get name of object
// Create new meshset for object
rval = create_new_object( object_name, object_id, curr_meshset );MB_CHK_ERR( rval );
break;
}
// Group line
case group_start: {
group_id++;
num_groups = tokens.size() - 1;
std::string group_name = "Group";
for( int i = 0; i < num_groups; i++ )
{
group_name = group_name + '_' + tokens[i + 1];
}
// Create new meshset for group
rval = create_new_group( group_name, group_id, curr_meshset );MB_CHK_ERR( rval );
break;
}
// Vertex line
case vertex_start: {
// Read vertex and return EH
EntityHandle new_vertex_eh;
rval = create_new_vertex( tokens, new_vertex_eh );MB_CHK_ERR( rval );
// Add new vertex EH to list
vertex_list.push_back( new_vertex_eh );
// Add new vertex EH to the meshset
MBI->add_entities( vert_meshset, &new_vertex_eh, 1 );MB_CHK_SET_ERR( rval, "Failed to add vertex to global meshset." );
break;
}
// Face line
case face_start: {
// Faces in .obj file can have 2, 3, or 4 vertices. If the face has
// 3 vertices, the EH will be immediately added to the meshset.
// If 4, face is split into triangles. Anything else is ignored.
EntityHandle new_face_eh;
if( tokens.size() == 4 )
{
rval = create_new_face( tokens, vertex_list, new_face_eh );MB_CHK_ERR( rval );
if( rval == MB_SUCCESS )
{
// Add new face EH to the meshset
MBI->add_entities( curr_meshset, &new_face_eh, 1 );
}
}
else if( tokens.size() == 5 )
{
// Split_quad fxn will create 2 new triangles from 1 quad
Range new_faces_eh;
rval = split_quad( tokens, vertex_list, new_faces_eh );MB_CHK_ERR( rval );
// Add new faces created by split quad to meshset
if( rval == MB_SUCCESS )
{
MBI->add_entities( curr_meshset, new_faces_eh );
}
}
else
{
std::cout << "Neither tri nor a quad: " << line << std::endl;
}
break;
}
case valid_unsupported: {
// First token is not recognized as a supported character
++ignored;
break;
}
default: {
MB_SET_ERR( MB_FAILURE, "Invalid/unrecognized line" );
}
}
}
}
// If no object lines are read (those beginning w/ 'o'), file is not obj type
if( object_id == 0 && group_id == 0 )
{
MB_SET_ERR( MB_FAILURE, "This is not an obj file. " );
}
std::cout << "There were " << ignored << " ignored lines in this file." << std::endl;
input_file.close();
return MB_SUCCESS;
}
std::string moab::ReadOBJ::match | ( | const std::string & | token, |
std::map< std::string, T > & | tokenList | ||
) | [private] |
Definition at line 344 of file ReadOBJ.cpp.
References OBJ_UNDEFINED.
Referenced by get_keyword().
{
// Initialize with no match and obj_undefined as return string
std::string best_match = OBJ_UNDEFINED;
// Search the map
for( typename std::map< std::string, T >::iterator thisToken = tokenList.begin(); thisToken != tokenList.end();
++thisToken )
{
// If a perfect match break the loop (assume keyword list is unambiguous)
if( token == ( *thisToken ).first )
{
best_match = token;
break;
}
}
// Possible return values: OBJ_UNDEFINED, keyword from list
return best_match;
}
ErrorCode moab::ReadOBJ::read_tag_values | ( | const char * | file_name, |
const char * | tag_name, | ||
const FileOptions & | opts, | ||
std::vector< int > & | tag_values_out, | ||
const SubsetList * | subset_list = 0 |
||
) | [virtual] |
Read tag values from a file.
Read the list if all integer tag values from the file for a tag that is a single integer value per entity.
file_name | The file to read. |
tag_name | The tag for which to read values |
tag_values_out | Output: The list of tag values. |
subset_list | An array of tag name and value sets specifying the subset of the file to read. If multiple tags are specified, the sets that match all tags (intersection) should be read. |
subset_list_length | The length of the 'subset_list' array. |
Implements moab::ReaderIface.
Definition at line 105 of file ReadOBJ.cpp.
References MB_NOT_IMPLEMENTED.
{
return MB_NOT_IMPLEMENTED;
}
ErrorCode moab::ReadOBJ::split_quad | ( | std::vector< std::string > | f_tokens, |
std::vector< EntityHandle > & | vertex_list, | ||
Range & | face_eh | ||
) | [private] |
Definition at line 487 of file ReadOBJ.cpp.
References create_tri_faces(), ErrorCode, and MB_CHK_SET_ERR.
Referenced by load_file().
{
ErrorCode rval;
std::vector< EntityHandle > quad_vert_eh;
// Loop over quad connectivity getting vertex EHs
for( int i = 1; i < 5; i++ )
{
int vertex_id = atoi( f_tokens[i].c_str() );
std::size_t slash = f_tokens[i].find( '/' );
if( slash != std::string::npos )
{
std::string face = f_tokens[i].substr( 0, slash );
vertex_id = atoi( face.c_str() );
}
quad_vert_eh.push_back( vertex_list[vertex_id - 1] );
}
// Create new tri faces
rval = create_tri_faces( quad_vert_eh, face_eh );MB_CHK_SET_ERR( rval, "Failed to create triangles when splitting quad." );
return rval;
}
void moab::ReadOBJ::tokenize | ( | const std::string & | str, |
std::vector< std::string > & | tokens, | ||
const char * | delimiters | ||
) | [private] |
Definition at line 275 of file ReadOBJ.cpp.
Referenced by load_file().
{
tokens.clear();
std::string::size_type next_token_end, next_token_start = str.find_first_not_of( delimiters2, 0 );
while( std::string::npos != next_token_start )
{
next_token_end = str.find_first_of( delimiters2, next_token_start );
if( std::string::npos == next_token_end )
{
tokens.push_back( str.substr( next_token_start ) );
next_token_start = std::string::npos;
}
else
{
tokens.push_back( str.substr( next_token_start, next_token_end - next_token_start ) );
next_token_start = str.find_first_not_of( delimiters2, next_token_end );
}
}
}
Tag moab::ReadOBJ::category_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by create_new_object(), and ReadOBJ().
const char * moab::ReadOBJ::delimiters = " " [static, private] |
Definition at line 167 of file ReadOBJ.hpp.
Referenced by load_file().
Tag moab::ReadOBJ::faceting_tol_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by ReadOBJ().
Tag moab::ReadOBJ::geom_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by create_new_object(), and ReadOBJ().
Tag moab::ReadOBJ::geometry_resabs_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by ReadOBJ().
Tag moab::ReadOBJ::id_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by create_new_group(), create_new_object(), and ReadOBJ().
Interface* moab::ReadOBJ::MBI [private] |
interface instance
Definition at line 148 of file ReadOBJ.hpp.
Referenced by create_new_face(), create_new_group(), create_new_object(), create_new_vertex(), create_tri_faces(), load_file(), ReadOBJ(), and ~ReadOBJ().
GeomTopoTool* moab::ReadOBJ::myGeomTool [private] |
Definition at line 150 of file ReadOBJ.hpp.
Referenced by create_new_object(), ReadOBJ(), and ~ReadOBJ().
Tag moab::ReadOBJ::name_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by create_new_group(), create_new_object(), and ReadOBJ().
Tag moab::ReadOBJ::obj_name_tag [private] |
Definition at line 152 of file ReadOBJ.hpp.
Referenced by create_new_object(), and ReadOBJ().
ReadUtilIface* moab::ReadOBJ::readMeshIface [private] |
Definition at line 145 of file ReadOBJ.hpp.
Referenced by ReadOBJ(), and ~ReadOBJ().