MOAB: Mesh Oriented datABase
(version 5.2.1)
|
#include <ExtractShell.h>
Public Member Functions | |
ExtractShell (const smoab::CellSets volCells, const smoab::Interface &interface) | |
bool | findSkins (smoab::CellSets &surfaceCellSets) |
Private Attributes | |
const smoab::Interface & | Interface |
smoab::CellSets | VCells |
Definition at line 11 of file ExtractShell.h.
smoab::ExtractShell::ExtractShell | ( | const smoab::CellSets | volCells, |
const smoab::Interface & | interface | ||
) | [inline] |
Definition at line 17 of file ExtractShell.h.
bool smoab::ExtractShell::findSkins | ( | smoab::CellSets & | surfaceCellSets | ) |
Definition at line 29 of file ExtractShell.h.
References moab::Range::begin(), smoab::Interface::createAdjacencies(), moab::Range::end(), smoab::detail::UsageTable::incrementUsage(), moab::Range::insert(), smoab::detail::UsageTable::multipleUsage(), smoab::Interface::remove(), smoab::Interface::sideElements(), smoab::detail::UsageTable::singleUsage(), and VCells.
{ typedef smoab::Range::const_iterator Iterator; typedef smoab::CellSets::const_iterator SetIterator; smoab::Range cellsToRemove; for(SetIterator set = this->VCells.begin(); set != this->VCells.end(); ++set) { const smoab::Range &cells = set->cells(); this->Interface.createAdjacencies(set->cells(),2); //we create the usage table for each iteration so that we only //get the shell of each cell set. If we used the table between //sets we would get the shell of the combined sets smoab::detail::UsageTable table; for(Iterator i = cells.begin(); i != cells.end(); ++i) { std::vector<smoab::EntityHandle> faceCells = this->Interface.sideElements(*i,2); //the usage id allows you to label cells when going into the table //so that you can extract multiple shells where each is based on //a single region id. std::vector<int> regionId(1,faceCells.size()); table.incrementUsage(faceCells,regionId); } smoab::Range surfaceCells = table.singleUsage(); //create a new cell set that smoab::CellSet surfaceSet(set->entity(),surfaceCells); surfaceCellSets.push_back(surfaceSet); smoab::Range subsetToRemove = table.multipleUsage(); cellsToRemove.insert(subsetToRemove.begin(),subsetToRemove.end()); } //we will remove all cells that have multiple usages from the moab database //I really don't care if they already existed or not. this->Interface.remove(cellsToRemove); return true; }
const smoab::Interface& smoab::ExtractShell::Interface [private] |
Definition at line 13 of file ExtractShell.h.
smoab::CellSets smoab::ExtractShell::VCells [private] |
Definition at line 14 of file ExtractShell.h.
Referenced by findSkins().