![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <DataSetConverter.h>
Public Member Functions | |
DataSetConverter (const smoab::Interface &interface, const smoab::Tag *tag) | |
void | readMaterialIds (bool add) |
bool | readMaterialIds () const |
void | readProperties (bool readProps) |
bool | readProperties () const |
template<typename VTKGridType > | |
bool | fill (const smoab::Range &entities, VTKGridType *grid) const |
template<typename VTKGridType > | |
bool | fill (const smoab::EntityHandle &entity, VTKGridType *grid, const int materialId=0) const |
Private Member Functions | |
void | readProperties (smoab::Range const &entities, vtkFieldData *field) const |
void | readDenseTags (std::vector< moab::Tag > &tags, smoab::Range const &entities, vtkFieldData *field) const |
Private Attributes | |
const smoab::Interface & | Interface |
moab::Interface * | Moab |
const smoab::Tag * | Tag |
bool | ReadMaterialIds |
bool | ReadProperties |
std::string | MaterialName |
Definition at line 20 of file DataSetConverter.h.
smoab::DataSetConverter::DataSetConverter | ( | const smoab::Interface & | interface, |
const smoab::Tag * | tag | ||
) | [inline] |
Definition at line 30 of file DataSetConverter.h.
: Interface( interface ), Moab( interface.Moab ), Tag( tag ), ReadMaterialIds( false ), ReadProperties( false )
{
}
bool smoab::DataSetConverter::fill | ( | const smoab::Range & | entities, |
VTKGridType * | grid | ||
) | const [inline] |
Definition at line 59 of file DataSetConverter.h.
References moab::Range::begin(), dim, moab::Range::end(), smoab::detail::ReadSparseTag::fill(), smoab::detail::LoadGeometry::fill(), smoab::Interface::findEntitiesWithDimension(), smoab::Interface::findHighestDimensionEntities(), smoab::getAllCells(), smoab::Tag::isComparable(), smoab::Tag::name(), readMaterialIds(), Tag, and smoab::Tag::value().
Referenced by vtkMoabReader::CreateSubBlocks().
{
//create a helper datastructure which can determines all the unique point ids
//and converts moab connecitvity info to vtk connectivity
//get all the cells for each parent entity and create
// an entity set of those items
int dim = this->Tag->value();
typedef smoab::Range::const_iterator iterator;
smoab::CellSets entitySets;
for( iterator i = entities.begin(); i != entities.end(); ++i )
{
smoab::Range entitiesCells;
if( this->Tag->isComparable() )
{
//if we are comparable only find the cells that match our tags dimension
entitiesCells = this->Interface.findEntitiesWithDimension( *i, dim, true );
}
else
{
entitiesCells = this->Interface.findHighestDimensionEntities( *i, true );
}
smoab::CellSet set( *i, entitiesCells );
entitySets.push_back( set );
}
moab::Range cells = smoab::getAllCells( entitySets );
//convert the datastructure from a list of cells to a vtk data set
detail::LoadGeometry loadGeom( cells, dim, this->Interface );
loadGeom.fill( grid );
if( this->readMaterialIds() )
{
detail::ReadSparseTag materialTagReading( entitySets, cells, this->Interface );
smoab::MaterialTag mtag;
vtkNew< vtkIntArray > materials;
materials->SetName( mtag.name() );
materialTagReading.fill( materials.GetPointer(), &mtag );
grid->GetCellData()->AddArray( materials.GetPointer() );
}
//by default we always try to load the default tag
detail::ReadSparseTag sTagReading( entitySets, cells, this->Interface );
vtkNew< vtkIntArray > sparseTagData;
sparseTagData->SetName( this->Tag->name() );
sTagReading.fill( sparseTagData.GetPointer(), this->Tag );
grid->GetCellData()->AddArray( sparseTagData.GetPointer() );
return true;
}
bool smoab::DataSetConverter::fill | ( | const smoab::EntityHandle & | entity, |
VTKGridType * | grid, | ||
const int | materialId = 0 |
||
) | const [inline] |
Definition at line 119 of file DataSetConverter.h.
References dim, smoab::detail::ReadSparseTag::fill(), smoab::detail::LoadGeometry::fill(), smoab::Interface::findEntitiesWithDimension(), smoab::Interface::findHighestDimensionEntities(), smoab::Tag::isComparable(), smoab::detail::LoadGeometry::moabPoints(), smoab::Tag::name(), readMaterialIds(), readProperties(), Tag, and smoab::Tag::value().
{
//create a helper datastructure which can determines all the unique point ids
//and converts moab connecitvity info to vtk connectivity
smoab::Range cells;
int dim = this->Tag->value();
if( this->Tag->isComparable() )
{
//if we are comparable only find the cells that match our tags dimension
cells = this->Interface.findEntitiesWithDimension( entity, dim, true );
}
else
{
//load subentities
cells = this->Interface.findHighestDimensionEntities( entity, true );
}
//convert the datastructure from a list of cells to a vtk data set
detail::LoadGeometry loadGeom( cells, dim, this->Interface );
loadGeom.fill( grid );
const smoab::Range& points = loadGeom.moabPoints();
if( this->readProperties() )
{
this->readProperties( cells, grid->GetCellData() );
this->readProperties( points, grid->GetPointData() );
}
smoab::CellSets cellSets;
smoab::CellSet set( entity, cells );
cellSets.push_back( set );
if( this->readMaterialIds() )
{
smoab::MaterialTag mtag;
detail::ReadSparseTag materialTagReading( cellSets, cells, this->Interface );
vtkNew< vtkIntArray > materials;
materials->SetName( mtag.name() );
materialTagReading.fill( materials.GetPointer(), &mtag );
grid->GetCellData()->AddArray( materials.GetPointer() );
}
//by default we always try to load the default tag
detail::ReadSparseTag sTagReading( cellSets, cells, this->Interface );
vtkNew< vtkIntArray > sparseTagData;
sparseTagData->SetName( this->Tag->name() );
sTagReading.fill( sparseTagData.GetPointer(), this->Tag );
grid->GetCellData()->AddArray( sparseTagData.GetPointer() );
return true;
}
void smoab::DataSetConverter::readDenseTags | ( | std::vector< moab::Tag > & | tags, |
smoab::Range const & | entities, | ||
vtkFieldData * | field | ||
) | const [inline, private] |
Definition at line 193 of file DataSetConverter.h.
References MB_TAG_DENSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, Moab, size, moab::Range::size(), moab::Interface::tag_get_data(), moab::Interface::tag_get_data_type(), moab::Interface::tag_get_length(), moab::Interface::tag_get_name(), moab::Interface::tag_get_type(), and TagType.
Referenced by readProperties().
{
typedef std::vector< moab::Tag >::const_iterator iterator;
for( iterator i = tags.begin(); i != tags.end(); ++i )
{
moab::TagType tagType;
moab::DataType tagDataType;
this->Moab->tag_get_type( *i, tagType );
this->Moab->tag_get_data_type( *i, tagDataType );
//make sure it is only dense
if( tagType != moab::MB_TAG_DENSE )
{
continue;
}
//and only integer and double
if( tagDataType != moab::MB_TYPE_DOUBLE && tagDataType != moab::MB_TYPE_INTEGER )
{
//unsupported type, skip to next tag
continue;
}
//read the name of the tag
std::string name;
name.reserve( 32 );
this->Moab->tag_get_name( *i, name );
//read the number of components of the tag
int numComps = 1;
this->Moab->tag_get_length( *i, numComps );
//read the data if it is one of the two types we support
int size = entities.size();
if( tagDataType == moab::MB_TYPE_DOUBLE )
{
vtkNew< vtkDoubleArray > array;
array->SetName( name.c_str() );
array->SetNumberOfComponents( numComps );
array->SetNumberOfTuples( size );
//read directly into the double array
this->Moab->tag_get_data( *i, entities, array->GetVoidPointer( 0 ) );
field->AddArray( array.GetPointer() );
}
else if( tagDataType == moab::MB_TYPE_INTEGER )
{
vtkNew< vtkIntArray > array;
array->SetName( name.c_str() );
array->SetNumberOfComponents( numComps );
array->SetNumberOfTuples( size );
//read directly into the double array
this->Moab->tag_get_data( *i, entities, array->GetVoidPointer( 0 ) );
field->AddArray( array.GetPointer() );
}
else
{
}
}
}
void smoab::DataSetConverter::readMaterialIds | ( | bool | add | ) | [inline] |
Definition at line 35 of file DataSetConverter.h.
References ReadMaterialIds.
Referenced by vtkMoabReader::CreateSubBlocks().
{
this->ReadMaterialIds = add;
}
bool smoab::DataSetConverter::readMaterialIds | ( | ) | const [inline] |
Definition at line 39 of file DataSetConverter.h.
References ReadMaterialIds.
Referenced by fill().
{
return this->ReadMaterialIds;
}
void smoab::DataSetConverter::readProperties | ( | bool | readProps | ) | [inline] |
Definition at line 44 of file DataSetConverter.h.
References ReadProperties.
Referenced by vtkMoabReader::CreateSubBlocks().
{
this->ReadProperties = readProps;
}
bool smoab::DataSetConverter::readProperties | ( | ) | const [inline] |
Definition at line 48 of file DataSetConverter.h.
References ReadProperties.
Referenced by fill().
{
return this->ReadProperties;
}
void smoab::DataSetConverter::readProperties | ( | smoab::Range const & | entities, |
vtkFieldData * | field | ||
) | const [inline, private] |
Definition at line 176 of file DataSetConverter.h.
References moab::Range::empty(), moab::Range::front(), Moab, readDenseTags(), and moab::Interface::tag_get_tags_on_entity().
{
if( entities.empty() )
{
return;
}
//so we get all the tags and parse out the sparse and dense tags
//that we support
typedef std::vector< moab::Tag >::const_iterator iterator;
std::vector< moab::Tag > tags;
this->Moab->tag_get_tags_on_entity( entities.front(), tags );
this->readDenseTags( tags, entities, field );
}
const smoab::Interface& smoab::DataSetConverter::Interface [private] |
Definition at line 22 of file DataSetConverter.h.
std::string smoab::DataSetConverter::MaterialName [private] |
Definition at line 27 of file DataSetConverter.h.
moab::Interface* smoab::DataSetConverter::Moab [private] |
Definition at line 23 of file DataSetConverter.h.
Referenced by readDenseTags(), and readProperties().
bool smoab::DataSetConverter::ReadMaterialIds [private] |
Definition at line 25 of file DataSetConverter.h.
Referenced by readMaterialIds().
bool smoab::DataSetConverter::ReadProperties [private] |
Definition at line 26 of file DataSetConverter.h.
Referenced by readProperties().
const smoab::Tag* smoab::DataSetConverter::Tag [private] |
Definition at line 24 of file DataSetConverter.h.
Referenced by fill().