Version: 9.12.0
VISCOUS_3D::_ViscousBuilder Class Reference

Builder of viscous layers. More...

Public Member Functions

 _ViscousBuilder ()
 Constructor of _ViscousBuilder. More...
 
SMESH_ComputeErrorPtr Compute (SMESH_Mesh &mesh, const TopoDS_Shape &shape)
 Does its job. More...
 
SMESH_ComputeErrorPtr CheckHypotheses (SMESH_Mesh &mesh, const TopoDS_Shape &shape)
 Check validity of hypotheses. More...
 
void RestoreListeners ()
 At study restoration, restore event listeners used to clear an inferior dim sub-mesh modified by viscous layers. More...
 
bool MakeN2NMap (_MeshOfSolid *pm)
 computes SMESH_ProxyMesh::SubMesh::_n2n More...
 

Private Member Functions

bool findSolidsWithLayers (const bool checkFaceMesh=true)
 Finds SOLIDs to compute using viscous layers. More...
 
bool setBefore (_SolidData &solidBefore, _SolidData &solidAfter)
 Set a _SolidData to be computed before another. More...
 
bool findFacesWithLayers (const bool onlyWith=false)
 
void findPeriodicFaces ()
 Find FACEs to shrink, that are equally meshed before shrink (i.e. More...
 
void getIgnoreFaces (const TopoDS_Shape &solid, const StdMeshers_ViscousLayers *hyp, const TopoDS_Shape &hypShape, set< TGeomID > &ignoreFaces)
 Finds FACEs w/o layers for a given SOLID by an hypothesis. More...
 
int makeEdgesOnShape ()
 Set up _SolidData::_edgesOnShape. More...
 
bool makeLayer (_SolidData &data)
 Create the inner surface of the viscous layer and prepare data for infation. More...
 
void setShapeData (_EdgesOnShape &eos, SMESH_subMesh *sm, _SolidData &data)
 initialize data of _EdgesOnShape More...
 
bool setEdgeData (_LayerEdge &edge, _EdgesOnShape &eos, SMESH_MesherHelper &helper, _SolidData &data)
 Set data of _LayerEdge needed for smoothing. More...
 
gp_XYZ getFaceNormal (const SMDS_MeshNode *n, const TopoDS_Face &face, SMESH_MesherHelper &helper, bool &isOK, bool shiftInside=false)
 Return normal to a FACE at a node. More...
 
bool getFaceNormalAtSingularity (const gp_XY &uv, const TopoDS_Face &face, SMESH_MesherHelper &helper, gp_Dir &normal)
 Try to get normal at a singularity of a surface basing on it's nature. More...
 
gp_XYZ getWeigthedNormal (const _LayerEdge *edge)
 Return a normal at a node weighted with angles taken by faces. More...
 
gp_XYZ getNormalByOffset (_LayerEdge *edge, std::pair< TopoDS_Face, gp_XYZ > fId2Normal[], int nbFaces, bool lastNoOffset=false)
 Return a normal at a node by getting a common point of offset planes defined by the FACE normals. More...
 
bool findNeiborsOnEdge (const _LayerEdge *edge, const SMDS_MeshNode *&n1, const SMDS_MeshNode *&n2, _EdgesOnShape &eos, _SolidData &data)
 Find 2 neighbor nodes of a node on EDGE. More...
 
void findSimplexTestEdges (_SolidData &data, vector< vector< _LayerEdge * > > &edgesByGeom)
 
void computeGeomSize (_SolidData &data)
 Find maximal _LayerEdge length (layer thickness) limited by geometry. More...
 
bool findShapesToSmooth (_SolidData &data)
 Detect shapes (and _LayerEdge's on them) to smooth. More...
 
void limitStepSizeByCurvature (_SolidData &data)
 Limit data._stepSize by evaluating curvature of shapes and fill data._convexFaces. More...
 
void limitStepSize (_SolidData &data, const SMDS_MeshElement *face, const _LayerEdge *maxCosinEdge)
 Compute inflation step size by min size of element on a convex surface. More...
 
void limitStepSize (_SolidData &data, const double minSize)
 Compute inflation step size by min size of element on a convex surface. More...
 
bool inflate (_SolidData &data)
 Increase length of _LayerEdge's to reach the required thickness of layers. More...
 
bool smoothAndCheck (_SolidData &data, const int nbSteps, double &distToIntersection)
 Improve quality of layer inner surface and check intersection. More...
 
int invalidateBadSmooth (_SolidData &data, SMESH_MesherHelper &helper, vector< _LayerEdge * > &badSmooEdges, vector< _EdgesOnShape * > &eosC1, const int infStep)
 try to fix bad simplices by removing the last inflation step of some _LayerEdge's More...
 
void makeOffsetSurface (_EdgesOnShape &eos, SMESH_MesherHelper &)
 Create an offset surface. More...
 
void putOnOffsetSurface (_EdgesOnShape &eos, int infStep, vector< _EdgesOnShape * > &eosC1, int smooStep=0, int moveAll=false)
 Put nodes of a curved FACE to its offset surface. More...
 
void findCollisionEdges (_SolidData &data, SMESH_MesherHelper &helper)
 Fill data._collisionEdges. More...
 
void findEdgesToUpdateNormalNearConvexFace (_ConvexFace &convFace, _SolidData &data, SMESH_MesherHelper &helper)
 Find _LayerEdge's located on boundary of a convex FACE whose normal will be updated at each inflation step. More...
 
void limitMaxLenByCurvature (_SolidData &data, SMESH_MesherHelper &helper)
 Limit _LayerEdge::_maxLen according to local curvature. More...
 
void limitMaxLenByCurvature (_LayerEdge *e1, _LayerEdge *e2, _EdgesOnShape &eos1, _EdgesOnShape &eos2, const bool isSmoothable)
 Limit _LayerEdge::_maxLen according to local curvature. More...
 
bool updateNormals (_SolidData &data, SMESH_MesherHelper &helper, int stepNb, double stepSize)
 Modify normals of _LayerEdge's on EDGE's to avoid intersection with _LayerEdge's on neighbor EDGE's. More...
 
bool updateNormalsOfConvexFaces (_SolidData &data, SMESH_MesherHelper &helper, int stepNb)
 Modify normals of _LayerEdge's on _ConvexFace's. More...
 
void updateNormalsOfC1Vertices (_SolidData &data)
 Modify normals of _LayerEdge's on C1 VERTEXes. More...
 
bool updateNormalsOfSmoothed (_SolidData &data, SMESH_MesherHelper &helper, const int nbSteps, const double stepSize)
 Modify normals of _LayerEdge's on FACE to reflex smoothing. More...
 
bool isNewNormalOk (_SolidData &data, _LayerEdge &edge, const gp_XYZ &newNormal)
 Check if a new normal is OK. More...
 
bool refine (_SolidData &data)
 Create layers of prisms. More...
 
bool shrink (_SolidData &data)
 Shrink 2D mesh on faces to let space for inflated layers. More...
 
bool prepareEdgeToShrink (_LayerEdge &edge, _EdgesOnShape &eos, SMESH_MesherHelper &helper, const SMESHDS_SubMesh *faceSubMesh)
 Computes 2d shrink direction and finds nodes limiting shrinking. More...
 
void restoreNoShrink (_LayerEdge &edge) const
 Restore position of a sole node of a _LayerEdge based on _noShrinkShapes. More...
 
void fixBadFaces (const TopoDS_Face &F, SMESH_MesherHelper &helper, const bool is2D, const int step, set< const SMDS_MeshNode * > *involvedNodes=NULL)
 Try to fix triangles with high aspect ratio by swapping diagonals. More...
 
bool addBoundaryElements (_SolidData &data)
 Creates 2D and 1D elements on boundaries of new prisms. More...
 
bool error (const string &text, int solidID=-1)
 Stores error description and returns false. More...
 
SMESHDS_MeshgetMeshDS () const
 
void makeGroupOfLE ()
 DEBUG. More...
 

Private Attributes

SMESH_Mesh_mesh
 
SMESH_ComputeErrorPtr _error
 
vector< _SolidData_sdVec
 
TopTools_IndexedMapOfShape _solids
 
TopTools_MapOfShape _shrunkFaces
 
std::unique_ptr< Periodicity_periodicity
 
int _tmpFaceID
 
PyDump_pyDump
 

Detailed Description

Builder of viscous layers.

Constructor & Destructor Documentation

◆ _ViscousBuilder()

_ViscousBuilder::_ViscousBuilder ( )

Constructor of _ViscousBuilder.

References COMPERR_OK, and SMESH_ComputeError::New().

Member Function Documentation

◆ addBoundaryElements()

◆ CheckHypotheses()

SMESH_ComputeErrorPtr _ViscousBuilder::CheckHypotheses ( SMESH_Mesh mesh,
const TopoDS_Shape &  shape 
)

Check validity of hypotheses.

Referenced by StdMeshers_ViscousLayers::CheckHypothesis().

◆ Compute()

SMESH_ComputeErrorPtr _ViscousBuilder::Compute ( SMESH_Mesh mesh,
const TopoDS_Shape &  shape 
)

Does its job.

References VISCOUS_3D::PyDump::Finish().

Referenced by StdMeshers_ViscousLayers::Compute().

◆ computeGeomSize()

◆ error()

bool _ViscousBuilder::error ( const string &  text,
int  solidID = -1 
)
private

◆ findCollisionEdges()

◆ findEdgesToUpdateNormalNearConvexFace()

◆ findFacesWithLayers()

bool _ViscousBuilder::findFacesWithLayers ( const bool  onlyWith = false)
private

◆ findNeiborsOnEdge()

◆ findPeriodicFaces()

void _ViscousBuilder::findPeriodicFaces ( )
private

Find FACEs to shrink, that are equally meshed before shrink (i.e.

periodic) and should remain equal after shrink

References VISCOUS_3D::PeriodicFaces::_shriFace, VISCOUS_3D::_SolidData::_shrinkShape2Shape, and VISCOUS_3D::ShrinkFace::IsPeriodic().

◆ findShapesToSmooth()

◆ findSimplexTestEdges()

void VISCOUS_3D::_ViscousBuilder::findSimplexTestEdges ( _SolidData data,
vector< vector< _LayerEdge * > > &  edgesByGeom 
)
private

◆ findSolidsWithLayers()

◆ fixBadFaces()

◆ getFaceNormal()

gp_XYZ _ViscousBuilder::getFaceNormal ( const SMDS_MeshNode node,
const TopoDS_Face &  face,
SMESH_MesherHelper helper,
bool &  isOK,
bool  shiftInside = false 
)
private

◆ getFaceNormalAtSingularity()

bool _ViscousBuilder::getFaceNormalAtSingularity ( const gp_XY &  uv,
const TopoDS_Face &  face,
SMESH_MesherHelper helper,
gp_Dir &  normal 
)
private

Try to get normal at a singularity of a surface basing on it's nature.

References MESHCUT::d, VISCOUS_3D::getRovolutionAxis(), and Handle().

◆ getIgnoreFaces()

void _ViscousBuilder::getIgnoreFaces ( const TopoDS_Shape &  solid,
const StdMeshers_ViscousLayers hyp,
const TopoDS_Shape &  hypShape,
set< TGeomID > &  ignoreFaces 
)
private

Finds FACEs w/o layers for a given SOLID by an hypothesis.

References Face, StdMeshers_ViscousLayers::GetBndShapes(), StdMeshers_ViscousLayers::IsToIgnoreShapes(), and SMESH_MesherHelper::NbAncestors().

◆ getMeshDS()

SMESHDS_Mesh* VISCOUS_3D::_ViscousBuilder::getMeshDS ( ) const
private

◆ getNormalByOffset()

gp_XYZ _ViscousBuilder::getNormalByOffset ( _LayerEdge edge,
std::pair< TopoDS_Face, gp_XYZ >  fId2Normal[],
int  nbFaces,
bool  lastNoOffset = false 
)
private

◆ getWeigthedNormal()

gp_XYZ _ViscousBuilder::getWeigthedNormal ( const _LayerEdge edge)
private

Return a normal at a node weighted with angles taken by faces.

References VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_LayerEdge::_simplices, and SMESH_TNodeXYZ::Set().

◆ inflate()

◆ invalidateBadSmooth()

◆ isNewNormalOk()

bool _ViscousBuilder::isNewNormalOk ( _SolidData data,
_LayerEdge edge,
const gp_XYZ &  newNormal 
)
private

◆ limitMaxLenByCurvature() [1/2]

◆ limitMaxLenByCurvature() [2/2]

◆ limitStepSize() [1/2]

void _ViscousBuilder::limitStepSize ( _SolidData data,
const double  minSize 
)
private

Compute inflation step size by min size of element on a convex surface.

References VISCOUS_3D::_SolidData::_stepSize, VISCOUS_3D::_SolidData::_stepSizeCoeff, VISCOUS_3D::_SolidData::_stepSizeNodes, and SMESH_TNodeXYZ::Distance().

◆ limitStepSize() [2/2]

◆ limitStepSizeByCurvature()

◆ makeEdgesOnShape()

◆ makeGroupOfLE()

◆ makeLayer()

bool _ViscousBuilder::makeLayer ( _SolidData data)
private

Create the inner surface of the viscous layer and prepare data for infation.

References VISCOUS_3D::_LayerEdge::_2neibors, VISCOUS_3D::_LayerEdge::_cosin, VISCOUS_3D::_2NearEdges::_edges, VISCOUS_3D::_EdgesOnShape::_edges, VISCOUS_3D::_SolidData::_edgesOnShape, VISCOUS_3D::_SolidData::_epsilon, VISCOUS_3D::_SolidData::_ignoreFaceIds, VISCOUS_3D::_SolidData::_index, VISCOUS_3D::_LayerEdge::_lenFactor, VISCOUS_3D::_SolidData::_n2eMap, VISCOUS_3D::_LayerEdge::_neibors, VISCOUS_3D::_Simplex::_nNext, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_LayerEdge::_normal, VISCOUS_3D::_SolidData::_noShrinkShapes, VISCOUS_3D::_Simplex::_nPrev, VISCOUS_3D::_LayerEdge::_pos, VISCOUS_3D::_SolidData::_proxyMesh, VISCOUS_3D::_SolidData::_s2neMap, VISCOUS_3D::_EdgesOnShape::_shape, VISCOUS_3D::_SolidData::_shrinkShape2Shape, VISCOUS_3D::_LayerEdge::_simplices, VISCOUS_3D::_SolidData::_solid, VISCOUS_3D::_SolidData::_stepSize, VISCOUS_3D::_SolidData::_stepSizeNodes, VISCOUS_3D::_EdgesOnShape::_sWOL, SMESH_ProxyMesh::SubMesh::AddElement(), SMESH_MesherHelper::AddNode(), SMDS_MeshElement::begin_nodes(), VISCOUS_3D::_LayerEdge::Block(), SMESH_MesherHelper::CheckNodeUV(), VISCOUS_3D::_LayerEdge::Copy(), debugMsg, dumpFunction, dumpFunctionEnd, dumpMove, Edge, SMDS_MeshElement::end_nodes(), Face, SMESHDS_SubMesh::GetElements(), VISCOUS_3D::_MeshOfSolid::getFaceSubM(), SMESH_subMesh::GetId(), SMDS_MeshElement::GetNode(), SMESHDS_SubMesh::GetNodes(), SMESH_MesherHelper::GetNodeUV(), SMESH_MesherHelper::GetPeriodicIndex(), SMDS_MeshNode::GetPosition(), SMDS_MeshElement::getshapeId(), SMDS_MeshElement::GetShapeID(), SMESH_subMesh::GetSubMeshDS(), SMESH_MesherHelper::IsDegenShape(), VISCOUS_3D::_LayerEdge::IsOnEdge(), SMESH_MesherHelper::IthVertex(), SMESH_MesherHelper::MaxTolerance(), SMDS_MeshElement::NbCornerNodes(), VISCOUS_3D::_LayerEdge::SetDataByNeighbors(), SMESH_MesherHelper::SetElementsOnShape(), SMESH_MesherHelper::SetSubShape(), VISCOUS_3D::_EdgesOnShape::ShapeType(), VISCOUS_3D::_EdgesOnShape::size(), SMDS_TOP_FACE, SMDSAbs_Face, VISCOUS_3D::_2NearEdges::srcNode(), VISCOUS_3D::_EdgesOnShape::SWOLType(), VISCOUS_3D::theMinSmoothCosin, SMESH_MesherHelper::ToFixNodeParameters(), and SMESH_Algo::VertexNode().

◆ MakeN2NMap()

◆ makeOffsetSurface()

◆ prepareEdgeToShrink()

◆ putOnOffsetSurface()

◆ refine()

bool _ViscousBuilder::refine ( _SolidData data)
private

Create layers of prisms.

References VISCOUS_3D::_EdgesOnShape::_edges, VISCOUS_3D::_SolidData::_edgesOnShape, VISCOUS_3D::_EdgesOnShape::_eosC1, VISCOUS_3D::_EdgesOnShape::_hyp, VISCOUS_3D::_SolidData::_ignoreFaceIds, VISCOUS_3D::_SolidData::_index, VISCOUS_3D::_EdgesOnShape::_isRegularSWOL, VISCOUS_3D::_LayerEdge::_len, VISCOUS_3D::_SolidData::_n2eMap, SMESH_TNodeXYZ::_node, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_LayerEdge::_normal, VISCOUS_3D::_LayerEdge::_pos, VISCOUS_3D::_SolidData::_reversedFaceIds, VISCOUS_3D::_SolidData::_s2neMap, VISCOUS_3D::_EdgesOnShape::_shape, VISCOUS_3D::_EdgesOnShape::_shapeID, VISCOUS_3D::_SolidData::_solid, VISCOUS_3D::_EdgesOnShape::_sWOL, VISCOUS_3D::_EdgesOnShape::_toSmooth, SMDS_MeshGroup::Add(), SMESH_MesherHelper::AddNode(), SMESH_MesherHelper::AddVolume(), COMPERR_WARNING, StdMeshers_ViscousLayers::CreateGroup(), Edge, Face, VISCOUS_3D::AverageHyp::Get1stLayerThickness(), VISCOUS_3D::_SolidData::GetConvexFace(), SMESHDS_SubMesh::GetElements(), VISCOUS_3D::AverageHyp::GetGroupName(), VISCOUS_3D::_SolidData::GetHelper(), SMESH_MesherHelper::GetMesh(), SMESH_MesherHelper::GetNodeU(), SMESH_MesherHelper::GetNodeUV(), VISCOUS_3D::AverageHyp::GetNumberLayers(), SMDS_MeshNode::GetPosition(), VISCOUS_3D::_SolidData::GetShapeEdges(), VISCOUS_3D::_LayerEdge::GetSmoothedPos(), VISCOUS_3D::AverageHyp::GetStretchFactor(), SMESH_MesherHelper::GetSubShapeID(), Handle(), SMESH_MesherHelper::HasDegeneratedEdges(), SMESH::if(), VISCOUS_3D::_LayerEdge::Is(), SMESH_BadInputElements::myBadElements, SMDS_MeshElement::NbCornerNodes(), SMDS_MeshElement::nodeIterator(), SMESH_MesherHelper::SetElementsOnShape(), VISCOUS_3D::_EdgesOnShape::ShapeType(), SMDSAbs_Volume, VISCOUS_3D::_LayerEdge::SmoothPos(), VISCOUS_3D::_EdgesOnShape::SWOLType(), SMESH_MesherHelper::WrapIndex(), SMDS_MeshNode::X(), and SMESH::XY.

◆ RestoreListeners()

void _ViscousBuilder::RestoreListeners ( )

At study restoration, restore event listeners used to clear an inferior dim sub-mesh modified by viscous layers.

◆ restoreNoShrink()

void _ViscousBuilder::restoreNoShrink ( _LayerEdge edge) const
private

◆ setBefore()

bool _ViscousBuilder::setBefore ( _SolidData solidBefore,
_SolidData solidAfter 
)
private

Set a _SolidData to be computed before another.

References VISCOUS_3D::_SolidData::_before, and VISCOUS_3D::_SolidData::_solid.

◆ setEdgeData()

bool _ViscousBuilder::setEdgeData ( _LayerEdge edge,
_EdgesOnShape eos,
SMESH_MesherHelper helper,
_SolidData data 
)
private

◆ setShapeData()

◆ shrink()

bool _ViscousBuilder::shrink ( _SolidData data)
private

Shrink 2D mesh on faces to let space for inflated layers.

!!

References VISCOUS_3D::_EdgesOnShape::_edges, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_SolidData::_noShrinkShapes, VISCOUS_3D::_LayerEdge::_pos, VISCOUS_3D::_SolidData::_proxyMesh, VISCOUS_3D::_EdgesOnShape::_shape, VISCOUS_3D::_SolidData::_shrinkShape2Shape, VISCOUS_3D::_LayerEdge::_simplices, VISCOUS_3D::_SolidData::_solid, VISCOUS_3D::_EdgesOnShape::_sWOL, VISCOUS_3D::_Shrinker1D::AddEdge(), SMESH_ProxyMesh::SubMesh::AddElement(), SMESHDS_SubMesh::AddElement(), SMESHDS_Mesh::ChangeElementNodes(), SMESH_subMesh::CHECK_COMPUTE_STATE, SMESHDS_SubMesh::Clear(), VISCOUS_3D::_Shrinker1D::Compute(), SMESH_subMesh::COMPUTE_OK, SMESH_subMesh::COMPUTE_SUBMESH, SMESH_subMesh::ComputeStateEngine(), SMESHDS_SubMesh::Contains(), debugMsg, dumpChangeNodes, dumpFunction, dumpFunctionEnd, dumpMove, Edge, Face, VISCOUS_3D::_Shrinker1D::GeomEdge(), SMESH_subMesh::GetAlgo(), SMESH_subMesh::GetComputeState(), SMESH_subMesh::getDependsOnIterator(), SMESH_ProxyMesh::SubMesh::GetElements(), SMESHDS_SubMesh::GetElements(), VISCOUS_3D::_MeshOfSolid::getFaceSubM(), SMESH_subMesh::GetId(), SMDS_MeshNode::GetInverseElementIterator(), SMESH_MesherHelper::GetMeshDS(), SMDS_MeshElement::GetNode(), SMESHDS_SubMesh::GetNodes(), SMESH_MesherHelper::GetNodeU(), SMESH_MesherHelper::GetNodeUV(), SMDS_MeshNode::GetPosition(), VISCOUS_3D::_SolidData::GetShapeEdges(), SMESH_Algo::GetSortedNodesOnEdge(), SMESH_subMesh::GetSubMeshDS(), SMESH_subMesh::GetSubShape(), Handle(), VISCOUS_3D::_LayerEdge::Is(), VISCOUS_3D::isConcave(), SMDS_MeshElement::isMarked(), SMESH_MesherHelper::IsSeamShape(), SMESH_MesherHelper::IthVertex(), VISCOUS_3D::PeriodicFaces::MoveNodes(), SMESH_ProxyMesh::SubMesh::NbElements(), SMESHDS_SubMesh::NbElements(), SMESHDS_SubMesh::NbNodes(), SMDS_MeshElement::NbNodes(), SMDS_MeshElement::nodeIterator(), VISCOUS_3D::_Shrinker1D::RestoreParams(), SMESH_subMesh::SetAllowedSubShapes(), SMDS_MeshElement::setIsMarked(), StdMeshers_ViscousLayers2D::SetProxyMeshOfEdge(), SMESH_MesherHelper::SetSubShape(), SMDS_MeshNode::setXYZ(), VISCOUS_3D::_EdgesOnShape::ShapeType(), VISCOUS_3D::_EdgesOnShape::size(), SMDSAbs_Face, VISCOUS_3D::_SolidData::SortOnEdge(), VISCOUS_3D::_Shrinker1D::SrcNode(), VISCOUS_3D::_EdgesOnShape::SWOLType(), VISCOUS_3D::_Shrinker1D::TgtNode(), VISCOUS_3D::ToClearSubWithMain(), SMESH_MesherHelper::ToFixNodeParameters(), and VISCOUS_3D::U_TGT.

◆ smoothAndCheck()

bool _ViscousBuilder::smoothAndCheck ( _SolidData data,
const int  nbSteps,
double &  distToIntersection 
)
private

Improve quality of layer inner surface and check intersection.

References VISCOUS_3D::_SolidData::_concaveFaces, VISCOUS_3D::_EdgesOnShape::_edges, VISCOUS_3D::_EdgesOnShape::_edgeSmoother, VISCOUS_3D::_SolidData::_edgesOnShape, VISCOUS_3D::_EdgesOnShape::_eosC1, VISCOUS_3D::_SolidData::_epsilon, VISCOUS_3D::_EdgesOnShape::_hyp, VISCOUS_3D::_SolidData::_index, VISCOUS_3D::_SolidData::_n2eMap, VISCOUS_3D::_SolidData::_nbShapesToSmooth, VISCOUS_3D::_LayerEdge::_neibors, SMESH_TNodeXYZ::_node, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_LayerEdge::_pos, VISCOUS_3D::_SolidData::_proxyMesh, VISCOUS_3D::_EdgesOnShape::_shape, VISCOUS_3D::_EdgesOnShape::_shapeID, VISCOUS_3D::_LayerEdge::_simplices, VISCOUS_3D::_SolidData::_solid, VISCOUS_3D::_EdgesOnShape::_sWOL, VISCOUS_3D::_EdgesOnShape::_toSmooth, SMDS_MeshElement::begin_nodes(), VISCOUS_3D::_LayerEdge::CheckNeiborsOnBoundary(), debugMsg, dumpCmd, dumpFunction, dumpFunctionEnd, Face, SMESH_MeshAlgos::FaceNormal(), VISCOUS_3D::_SolidData::GetConvexFace(), SMESH_MeshAlgos::GetElementSearcher(), SMESH_ProxyMesh::GetFaces(), SMDS_MeshElement::GetID(), SMESHDS_Hypothesis::GetID(), SMDS_MeshElement::GetNodeIndex(), SMDS_MeshElement::getshapeId(), VISCOUS_3D::AverageHyp::GetTotalThickness(), Handle(), SMESH::if(), VISCOUS_3D::_LayerEdge::Is(), SMESH_MesherHelper::IsSubShape(), SMDS_MeshElement::nodesIterator(), VISCOUS_3D::_Smoother1D::Perform(), VISCOUS_3D::_LayerEdge::PrevCheckPos(), SMESH_MesherHelper::SetSubShape(), VISCOUS_3D::_EdgesOnShape::ShapeType(), VISCOUS_3D::_LayerEdge::Smooth(), VISCOUS_3D::_EdgesOnShape::SWOLType(), VISCOUS_3D::theThickToIntersection, VISCOUS_3D::AverageHyp::ToSmooth(), and VISCOUS_3D::_LayerEdge::Unset().

◆ updateNormals()

bool _ViscousBuilder::updateNormals ( _SolidData data,
SMESH_MesherHelper helper,
int  stepNb,
double  stepSize 
)
private

Modify normals of _LayerEdge's on EDGE's to avoid intersection with _LayerEdge's on neighbor EDGE's.

References VISCOUS_3D::_LayerEdge::_2neibors, VISCOUS_3D::_SolidData::_collisionEdges, VISCOUS_3D::_LayerEdge::_cosin, VISCOUS_3D::_CollisionEdges::_edge, VISCOUS_3D::_2NearEdges::_edges, VISCOUS_3D::_EdgesOnShape::_hyp, VISCOUS_3D::_SolidData::_index, VISCOUS_3D::_CollisionEdges::_intEdges, VISCOUS_3D::_LayerEdge::_len, VISCOUS_3D::_LayerEdge::_lenFactor, VISCOUS_3D::_LayerEdge::_maxLen, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_LayerEdge::_normal, VISCOUS_3D::_EdgesOnShape::_sWOL, VISCOUS_3D::_SolidData::AddShapesToSmooth(), dumpFunction, dumpFunctionEnd, Edge, VISCOUS_3D::AverageHyp::Get1stLayerThickness(), SMESH_MesherHelper::GetAncestors(), VISCOUS_3D::_TmpMeshFaceOnEdge::GetDir(), VISCOUS_3D::getEdgeDir(), VISCOUS_3D::_SolidData::GetShapeEdges(), SMESH_MesherHelper::GetSubShapeByNode(), VISCOUS_3D::_LayerEdge::InvalidateStep(), VISCOUS_3D::_LayerEdge::Is(), VISCOUS_3D::_LayerEdge::IsOnEdge(), VISCOUS_3D::_LayerEdge::LastSegment(), VISCOUS_3D::_CollisionEdges::nSrc(), VISCOUS_3D::_CollisionEdges::nTgt(), VISCOUS_3D::_LayerEdge::SegTriaInter(), VISCOUS_3D::_LayerEdge::Set(), VISCOUS_3D::_LayerEdge::SetCosin(), VISCOUS_3D::_LayerEdge::SetDataByNeighbors(), VISCOUS_3D::_LayerEdge::SetMaxLen(), VISCOUS_3D::_LayerEdge::SetNewLength(), VISCOUS_3D::_LayerEdge::SetNormal(), SMDSAbs_Face, VISCOUS_3D::_2NearEdges::srcNode(), VISCOUS_3D::theMinSmoothCosin, and VISCOUS_3D::_SolidData::UnmarkEdges().

◆ updateNormalsOfC1Vertices()

◆ updateNormalsOfConvexFaces()

bool _ViscousBuilder::updateNormalsOfConvexFaces ( _SolidData data,
SMESH_MesherHelper helper,
int  stepNb 
)
private

Modify normals of _LayerEdge's on _ConvexFace's.

References VISCOUS_3D::_CentralCurveOnEdge::_adjFace, VISCOUS_3D::_SolidData::_convexFaces, VISCOUS_3D::_LayerEdge::_cosin, VISCOUS_3D::_CentralCurveOnEdge::_curvaCenters, VISCOUS_3D::_CentralCurveOnEdge::_edge, VISCOUS_3D::_EdgesOnShape::_edges, VISCOUS_3D::_ConvexFace::_face, VISCOUS_3D::_SolidData::_index, VISCOUS_3D::_CentralCurveOnEdge::_isDegenerated, VISCOUS_3D::_CentralCurveOnEdge::_ledges, VISCOUS_3D::_LayerEdge::_len, VISCOUS_3D::_LayerEdge::_neibors, VISCOUS_3D::_LayerEdge::_nodes, VISCOUS_3D::_CentralCurveOnEdge::_normals, VISCOUS_3D::_ConvexFace::_normalsFixed, VISCOUS_3D::_ConvexFace::_normalsFixedOnBorders, VISCOUS_3D::_EdgesOnShape::_shape, VISCOUS_3D::_ConvexFace::_subIdToEOS, VISCOUS_3D::_EdgesOnShape::_sWOL, VISCOUS_3D::_EdgesOnShape::_toSmooth, VISCOUS_3D::_SolidData::AddShapesToSmooth(), VISCOUS_3D::_ConvexFace::CheckPrisms(), SMESH_MesherHelper::Count(), debugMsg, dumpFunction, dumpFunctionEnd, Edge, VISCOUS_3D::_ConvexFace::GetCenterOfCurvature(), VISCOUS_3D::getFaceDir(), SMESH_MesherHelper::GetMeshDS(), VISCOUS_3D::_SolidData::GetShapeEdges(), VISCOUS_3D::_LayerEdge::InvalidateStep(), SMESH_MesherHelper::IthVertex(), VISCOUS_3D::_LayerEdge::Set(), VISCOUS_3D::_LayerEdge::SetCosin(), VISCOUS_3D::_LayerEdge::SetNewLength(), VISCOUS_3D::_LayerEdge::SetNormal(), VISCOUS_3D::_CentralCurveOnEdge::SetShapes(), VISCOUS_3D::_LayerEdge::SetSmooLen(), SMESH_MesherHelper::SetSubShape(), SMESHDS_Mesh::ShapeToIndex(), VISCOUS_3D::_EdgesOnShape::ShapeType(), VISCOUS_3D::_SolidData::SortOnEdge(), and VISCOUS_3D::theMinSmoothCosin.

◆ updateNormalsOfSmoothed()

Field Documentation

◆ _error

SMESH_ComputeErrorPtr VISCOUS_3D::_ViscousBuilder::_error
private

◆ _mesh

SMESH_Mesh* VISCOUS_3D::_ViscousBuilder::_mesh
private

◆ _periodicity

std::unique_ptr<Periodicity> VISCOUS_3D::_ViscousBuilder::_periodicity
private

◆ _pyDump

PyDump* VISCOUS_3D::_ViscousBuilder::_pyDump
private

◆ _sdVec

vector< _SolidData > VISCOUS_3D::_ViscousBuilder::_sdVec
private

◆ _shrunkFaces

TopTools_MapOfShape VISCOUS_3D::_ViscousBuilder::_shrunkFaces
private

◆ _solids

TopTools_IndexedMapOfShape VISCOUS_3D::_ViscousBuilder::_solids
private

◆ _tmpFaceID

int VISCOUS_3D::_ViscousBuilder::_tmpFaceID
private