ViennaLS
Loading...
Searching...
No Matches
viennals::ToSurfaceMesh< T, D > Class Template Reference

Extract an explicit Mesh<> instance from an lsDomain. The interface is then described by explicit surface elements: Lines in 2D, Triangles in 3D. More...

#include <lsToSurfaceMesh.hpp>

Classes

struct  I3
struct  I3Hash

Public Member Functions

 ToSurfaceMesh (double mnd=0.05, double eps=1e-12)
 ToSurfaceMesh (const SmartPointer< lsDomainType > passedLevelSet, SmartPointer< Mesh< T > > passedMesh, double mnd=0.05, double eps=1e-12)
void setLevelSet (SmartPointer< lsDomainType > passedlsDomain)
void setMesh (SmartPointer< Mesh< T > > passedMesh)
void setUpdatePointData (bool update)
void setSharpCorners (bool check)
virtual void apply ()

Protected Types

using lsDomainType = viennals::Domain<T, D>
using hrleDomainType = typename lsDomainType::DomainType
using hrleIndex = viennahrle::Index<D>
using ConstSparseIterator = viennahrle::ConstSparseIterator<hrleDomainType>

Protected Member Functions

void scaleMesh ()
Vec3D< TcomputeNodePosition (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int edge)
unsigned getNode (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int edge, std::map< hrleIndex, unsigned > *nodes, std::vector< unsigned > *newDataSourceIds)
void stitchToNeighbor (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int axis, bool isHighFace, unsigned faceNodeId, std::map< hrleIndex, unsigned > *nodes, ConstSparseIterator &valueIt)
bool generateCanonicalSharpCorner2D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int transform, Vec3D< T > &cornerPos) const
bool generateSharpCorner2D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int countNeg, int countPos, int negMask, int posMask, std::map< hrleIndex, unsigned > *nodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt)
bool generateSharpL3D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int countNeg, int countPos, int negMask, int posMask, std::map< hrleIndex, unsigned > *nodes, std::map< hrleIndex, unsigned > *faceNodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt)
bool generateCanonicalSharpEdge3D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int transform, int axis, bool inverted, std::map< hrleIndex, unsigned > *nodes, std::map< hrleIndex, unsigned > *faceNodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt)
bool generateSharpEdge3D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int countNeg, int countPos, int negMask, int posMask, std::map< hrleIndex, unsigned > *nodes, std::map< hrleIndex, unsigned > *faceNodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt)
bool generateCanonicalSharpCorner3D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int transform, bool inverted, std::map< hrleIndex, unsigned > *nodes, std::map< hrleIndex, unsigned > *faceNodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt, Vec3D< T > &cornerPos)
bool generateSharpCorner3D (viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, int countNeg, int countPos, int negMask, int posMask, std::map< hrleIndex, unsigned > *nodes, std::map< hrleIndex, unsigned > &cornerNodes, std::map< hrleIndex, unsigned > *faceNodes, std::vector< unsigned > *newDataSourceIds, ConstSparseIterator &valueIt)
T getInterp (int p_a, int p_b, const viennahrle::ConstSparseCellIterator< hrleDomainType > &cellIt, bool inverted) const
void insertElement (const std::array< unsigned, D > &nodeNumbers)
unsigned insertNode (Vec3D< T > const &pos)

Static Protected Member Functions

static bool triangleMisformed (const std::array< unsigned, D > &nodeNumbers) noexcept
static Vec3D< TcalculateNormal (const Vec3D< T > &nodeA, const Vec3D< T > &nodeB, const Vec3D< T > &nodeC) noexcept

Protected Attributes

std::vector< SmartPointer< lsDomainType > > levelSets
SmartPointer< Mesh< T > > mesh = nullptr
const T epsilon
const double minNodeDistanceFactor
bool updatePointData = true
bool generateSharpCorners = false
std::unordered_map< I3, unsigned, I3HashnodeIdByBin
std::unordered_set< I3, I3HashuniqueElements
std::vector< Vec3D< T > > currentNormals
std::vector< TcurrentMaterials
double currentGridDelta
T currentMaterialId = 0
SmartPointer< lsDomainTypecurrentLevelSet = nullptr
PointData< T >::VectorDataType * normalVectorData = nullptr
std::vector< std::pair< unsigned, Vec3D< T > > > matSharpCornerNodes

Static Protected Attributes

static constexpr unsigned int corner0 [12]
static constexpr unsigned int corner1 [12]
static constexpr unsigned int direction [12]

Detailed Description

template<class T, int D>
class viennals::ToSurfaceMesh< T, D >

Extract an explicit Mesh<> instance from an lsDomain. The interface is then described by explicit surface elements: Lines in 2D, Triangles in 3D.

Member Typedef Documentation

◆ ConstSparseIterator

template<class T, int D>
using viennals::ToSurfaceMesh< T, D >::ConstSparseIterator = viennahrle::ConstSparseIterator<hrleDomainType>
protected

◆ hrleDomainType

template<class T, int D>
using viennals::ToSurfaceMesh< T, D >::hrleDomainType = typename lsDomainType::DomainType
protected

◆ hrleIndex

template<class T, int D>
using viennals::ToSurfaceMesh< T, D >::hrleIndex = viennahrle::Index<D>
protected

◆ lsDomainType

template<class T, int D>
using viennals::ToSurfaceMesh< T, D >::lsDomainType = viennals::Domain<T, D>
protected

Constructor & Destructor Documentation

◆ ToSurfaceMesh() [1/2]

template<class T, int D>
viennals::ToSurfaceMesh< T, D >::ToSurfaceMesh ( double mnd = 0.05,
double eps = 1e-12 )
inlineexplicit

◆ ToSurfaceMesh() [2/2]

template<class T, int D>
viennals::ToSurfaceMesh< T, D >::ToSurfaceMesh ( const SmartPointer< lsDomainType > passedLevelSet,
SmartPointer< Mesh< T > > passedMesh,
double mnd = 0.05,
double eps = 1e-12 )
inline

Member Function Documentation

◆ apply()

template<class T, int D>
virtual void viennals::ToSurfaceMesh< T, D >::apply ( )
inlinevirtual

◆ calculateNormal()

template<class T, int D>
Vec3D< T > viennals::ToSurfaceMesh< T, D >::calculateNormal ( const Vec3D< T > & nodeA,
const Vec3D< T > & nodeB,
const Vec3D< T > & nodeC )
inlinestaticprotectednoexcept

◆ computeNodePosition()

template<class T, int D>
Vec3D< T > viennals::ToSurfaceMesh< T, D >::computeNodePosition ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int edge )
inlineprotected

◆ generateCanonicalSharpCorner2D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateCanonicalSharpCorner2D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int transform,
Vec3D< T > & cornerPos ) const
inlineprotected

◆ generateCanonicalSharpCorner3D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateCanonicalSharpCorner3D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int transform,
bool inverted,
std::map< hrleIndex, unsigned > * nodes,
std::map< hrleIndex, unsigned > * faceNodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt,
Vec3D< T > & cornerPos )
inlineprotected

◆ generateCanonicalSharpEdge3D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateCanonicalSharpEdge3D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int transform,
int axis,
bool inverted,
std::map< hrleIndex, unsigned > * nodes,
std::map< hrleIndex, unsigned > * faceNodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt )
inlineprotected

◆ generateSharpCorner2D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateSharpCorner2D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int countNeg,
int countPos,
int negMask,
int posMask,
std::map< hrleIndex, unsigned > * nodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt )
inlineprotected

◆ generateSharpCorner3D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateSharpCorner3D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int countNeg,
int countPos,
int negMask,
int posMask,
std::map< hrleIndex, unsigned > * nodes,
std::map< hrleIndex, unsigned > & cornerNodes,
std::map< hrleIndex, unsigned > * faceNodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt )
inlineprotected

◆ generateSharpEdge3D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateSharpEdge3D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int countNeg,
int countPos,
int negMask,
int posMask,
std::map< hrleIndex, unsigned > * nodes,
std::map< hrleIndex, unsigned > * faceNodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt )
inlineprotected

◆ generateSharpL3D()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateSharpL3D ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int countNeg,
int countPos,
int negMask,
int posMask,
std::map< hrleIndex, unsigned > * nodes,
std::map< hrleIndex, unsigned > * faceNodes,
std::vector< unsigned > * newDataSourceIds,
ConstSparseIterator & valueIt )
inlineprotected

◆ getInterp()

template<class T, int D>
T viennals::ToSurfaceMesh< T, D >::getInterp ( int p_a,
int p_b,
const viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
bool inverted ) const
inlineprotected

◆ getNode()

template<class T, int D>
unsigned viennals::ToSurfaceMesh< T, D >::getNode ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int edge,
std::map< hrleIndex, unsigned > * nodes,
std::vector< unsigned > * newDataSourceIds )
inlineprotected

◆ insertElement()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::insertElement ( const std::array< unsigned, D > & nodeNumbers)
inlineprotected

◆ insertNode()

template<class T, int D>
unsigned viennals::ToSurfaceMesh< T, D >::insertNode ( Vec3D< T > const & pos)
inlineprotected

◆ scaleMesh()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::scaleMesh ( )
inlineprotected

◆ setLevelSet()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::setLevelSet ( SmartPointer< lsDomainType > passedlsDomain)
inline

◆ setMesh()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::setMesh ( SmartPointer< Mesh< T > > passedMesh)
inline

◆ setSharpCorners()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::setSharpCorners ( bool check)
inline

◆ setUpdatePointData()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::setUpdatePointData ( bool update)
inline

◆ stitchToNeighbor()

template<class T, int D>
void viennals::ToSurfaceMesh< T, D >::stitchToNeighbor ( viennahrle::ConstSparseCellIterator< hrleDomainType > & cellIt,
int axis,
bool isHighFace,
unsigned faceNodeId,
std::map< hrleIndex, unsigned > * nodes,
ConstSparseIterator & valueIt )
inlineprotected

◆ triangleMisformed()

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::triangleMisformed ( const std::array< unsigned, D > & nodeNumbers)
inlinestaticprotectednoexcept

Member Data Documentation

◆ corner0

template<class T, int D>
unsigned int viennals::ToSurfaceMesh< T, D >::corner0[12]
staticconstexprprotected
Initial value:
= {0, 1, 2, 0, 4, 5,
6, 4, 0, 1, 3, 2}

◆ corner1

template<class T, int D>
unsigned int viennals::ToSurfaceMesh< T, D >::corner1[12]
staticconstexprprotected
Initial value:
= {1, 3, 3, 2, 5, 7,
7, 6, 4, 5, 7, 6}

◆ currentGridDelta

template<class T, int D>
double viennals::ToSurfaceMesh< T, D >::currentGridDelta
protected

◆ currentLevelSet

template<class T, int D>
SmartPointer<lsDomainType> viennals::ToSurfaceMesh< T, D >::currentLevelSet = nullptr
protected

◆ currentMaterialId

template<class T, int D>
T viennals::ToSurfaceMesh< T, D >::currentMaterialId = 0
protected

◆ currentMaterials

template<class T, int D>
std::vector<T> viennals::ToSurfaceMesh< T, D >::currentMaterials
protected

◆ currentNormals

template<class T, int D>
std::vector<Vec3D<T> > viennals::ToSurfaceMesh< T, D >::currentNormals
protected

◆ direction

template<class T, int D>
unsigned int viennals::ToSurfaceMesh< T, D >::direction[12]
staticconstexprprotected
Initial value:
= {0, 1, 0, 1, 0, 1,
0, 1, 2, 2, 2, 2}

◆ epsilon

template<class T, int D>
const T viennals::ToSurfaceMesh< T, D >::epsilon
protected

◆ generateSharpCorners

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::generateSharpCorners = false
protected

◆ levelSets

template<class T, int D>
std::vector<SmartPointer<lsDomainType> > viennals::ToSurfaceMesh< T, D >::levelSets
protected

◆ matSharpCornerNodes

template<class T, int D>
std::vector<std::pair<unsigned, Vec3D<T> > > viennals::ToSurfaceMesh< T, D >::matSharpCornerNodes
protected

◆ mesh

template<class T, int D>
SmartPointer<Mesh<T> > viennals::ToSurfaceMesh< T, D >::mesh = nullptr
protected

◆ minNodeDistanceFactor

template<class T, int D>
const double viennals::ToSurfaceMesh< T, D >::minNodeDistanceFactor
protected

◆ nodeIdByBin

template<class T, int D>
std::unordered_map<I3, unsigned, I3Hash> viennals::ToSurfaceMesh< T, D >::nodeIdByBin
protected

◆ normalVectorData

template<class T, int D>
PointData<T>::VectorDataType* viennals::ToSurfaceMesh< T, D >::normalVectorData = nullptr
protected

◆ uniqueElements

template<class T, int D>
std::unordered_set<I3, I3Hash> viennals::ToSurfaceMesh< T, D >::uniqueElements
protected

◆ updatePointData

template<class T, int D>
bool viennals::ToSurfaceMesh< T, D >::updatePointData = true
protected

The documentation for this class was generated from the following file: