Version: 9.16.0
StdMeshers::Cartesian3D::Hexahedron Class Reference

Class representing topology of the hexahedron and creating a mesh volume basing on analysis of hexahedron intersection with geometry. More...

#include <StdMeshers_Cartesian_3D_Hexahedron.hxx>

Data Structures

struct  _Face
 
struct  _Link
 
struct  _Node
 < node either at a hexahedron corner or at intersection More...
 
struct  _OrientedLink
 
struct  _SplitIterator
 set to _hexLinks splits on one side of INTERNAL FACEs More...
 
struct  _volumeDef
 

Public Member Functions

 Hexahedron (StdMeshers::Cartesian3D::Grid *grid)
 Creates topology of the hexahedron. More...
 
int MakeElements (SMESH_MesherHelper &helper, const TEdge2faceIDsMap &edge2faceIDsMap, const int numOfThreads=1)
 Create elements in the mesh. More...
 
void computeElements (const Solid *solid=0, int solidIndex=-1)
 Compute mesh volumes resulted from intersection of the Hexahedron. More...
 

Private Types

enum  IsInternalFlag { IS_NOT_INTERNAL , IS_INTERNAL , IS_CUT_BY_INTERNAL_FACE }
 
typedef std::pair< StdMeshers::Cartesian3D::TGeomID, int > TFaceOfLink
 
typedef boost::container::flat_map< StdMeshers::Cartesian3D::TGeomID, size_tTID2Nb
 

Private Member Functions

 Hexahedron (const Hexahedron &other, size_t i, size_t j, size_t k, int cellID)
 Copy constructor. More...
 
void init (size_t i, size_t j, size_t k, const Solid *solid=0)
 Initializes its data by given grid cell nodes and intersections. More...
 
void init (size_t i)
 Initializes its data by given grid cell (countered from zero) More...
 
void clearNodesLinkedToNull (const Solid *solid, SMESH_MesherHelper &helper)
 Clear nodes linked to null by not splitted links. More...
 
bool isSplittedLink (const Solid *solid, SMESH_MesherHelper &helper, const Hexahedron::_Link &linkIn) const
 Returns true if the link will be split on the Hexaedron initialization. More...
 
void setIJK (size_t i)
 Initializes IJK by Hexahedron index. More...
 
void defineHexahedralFaces (const Solid *solid, const IsInternalFlag intFlag)
 Compute mesh volumes resulted from intersection of the Hexahedron. More...
 
bool compute (const Solid *solid, const IsInternalFlag intFlag)
 Compute mesh volumes resulted from intersection of the Hexahedron. More...
 
size_t getSolids (StdMeshers::Cartesian3D::TGeomID ids[])
 Return IDs of SOLIDs interfering with this Hexahedron. More...
 
bool isCutByInternalFace (IsInternalFlag &maxFlag)
 Count cuts by INTERNAL FACEs and set _Node::_isInternalFlags. More...
 
void addEdges (SMESH_MesherHelper &helper, std::vector< Hexahedron * > &intersectedHex, const TEdge2faceIDsMap &edge2faceIDsMap)
 Implements geom edges into the mesh. More...
 
gp_Pnt findIntPoint (double u1, double proj1, double u2, double proj2, double proj, BRepAdaptor_Curve &curve, const gp_XYZ &axis, const gp_XYZ &origin)
 Finds intersection of a curve with a plane. More...
 
int getEntity (const StdMeshers::Cartesian3D::E_IntersectPoint *ip, int *facets, int &sub)
 Returns indices of a hexahedron sub-entities holding a point. More...
 
bool addIntersection (const StdMeshers::Cartesian3D::E_IntersectPoint *ip, std::vector< Hexahedron * > &hexes, int ijk[], int dIJK[])
 Adds intersection with an EDGE. More...
 
bool isQuadOnFace (const size_t iQuad)
 Check if a hexahedron facet lies on a FACE Also return true if the facet does not interfere with any FACE. More...
 
bool findChain (_Node *n1, _Node *n2, _Face &quad, std::vector< _Node * > &chainNodes)
 Finds nodes at a path from one node to another via intersections with EDGEs. More...
 
bool closePolygon (_Face *polygon, std::vector< _Node * > &chainNodes) const
 Try to heal a polygon whose ends are not connected. More...
 
bool findChainOnEdge (const std::vector< _OrientedLink > &splits, const _OrientedLink &prevSplit, const _OrientedLink &avoidSplit, const std::set< StdMeshers::Cartesian3D::TGeomID > &concaveFaces, size_t &iS, _Face &quad, std::vector< _Node * > &chn)
 Finds nodes on the same EDGE as the first node of avoidSplit. More...
 
size_t findCoplanarPolygon (const _Face &thePolygon, const size_t nbQuadPolygons, std::vector< _OrientedLink * > &freeLinks, int &nbFreeLinks, const E_IntersectPoint &ipTmp, std::set< StdMeshers::Cartesian3D::TGeomID > &usedFaceIDs, std::map< StdMeshers::Cartesian3D::TGeomID, std::vector< const B_IntersectPoint * > > &tmpAddedFace, const StdMeshers::Cartesian3D::TGeomID &curFace)
 find coplanar polygon, if any, and set it to be re-created next More...
 
int addVolumes (SMESH_MesherHelper &helper)
 Adds computed elements to the mesh. More...
 
void addFaces (SMESH_MesherHelper &helper, const std::vector< const SMDS_MeshElement * > &boundaryVolumes)
 Create mesh faces at free facets. More...
 
void addSegments (SMESH_MesherHelper &helper, const TEdge2faceIDsMap &edge2faceIDsMap)
 Create mesh segments. More...
 
void getVolumes (std::vector< const SMDS_MeshElement * > &volumes)
 
void getBoundaryElems (std::vector< const SMDS_MeshElement * > &boundaryVolumes)
 Return created volumes and volumes that can have free facet because of skipped small volume. More...
 
void removeExcessSideDivision (const std::vector< Hexahedron * > &allHexa)
 Remove edges and nodes dividing a hexa side in the case if an adjacent volume also sharing the dividing edge is missing due to its small side. More...
 
void removeExcessNodes (std::vector< Hexahedron * > &allHexa)
 Remove nodes splitting Cartesian cell edges in the case if a node is used in every cells only by two polygons sharing the edge Issue #19887. More...
 
void preventVolumesOverlapping ()
 [Issue #19913] Modify _hexLinks._splits to prevent creating overlapping volumes More...
 
StdMeshers::Cartesian3D::TGeomID getAnyFace () const
 Return any FACE interfering with this Hexahedron. More...
 
void cutByExtendedInternal (std::vector< Hexahedron * > &hexes, const TColStd_MapOfInteger &intEdgeIDs)
 Fully cut hexes that are partially cut by INTERNAL FACE. More...
 
gp_Pnt mostDistantInternalPnt (int hexIndex, const gp_Pnt &p1, const gp_Pnt &p2)
 Return intersection point on INTERNAL FACE most distant from given ones. More...
 
bool isOutPoint (_Link &link, int iP, SMESH_MesherHelper &helper, const Solid *solid) const
 Checks transition at the ginen intersection node of a link. More...
 
void sortVertexNodes (std::vector< _Node * > &nodes, _Node *curNode, StdMeshers::Cartesian3D::TGeomID face)
 Sort nodes on a FACE. More...
 
bool isInHole () const
 Return true if the element is in a hole. More...
 
bool hasStrangeEdge () const
 Check if a polyherdon has an edge lying on EDGE shared by strange FACE that will be meshed by other algo. More...
 
bool checkPolyhedronSize (bool isCutByInternalFace, double &volSize) const
 Return true if a polyhedron passes _sizeThreshold criterion. More...
 
int checkPolyhedronValidity (_volumeDef *volDef, std::vector< std::vector< int > > &splitQuantities, std::vector< std::vector< const SMDS_MeshNode * > > &splitNodes)
 Check that all faces in polyhedron are connected so a unique volume is defined. More...
 
const SMDS_MeshElementaddPolyhedronToMesh (_volumeDef *volDef, SMESH_MesherHelper &helper, const std::vector< const SMDS_MeshNode * > &nodes, const std::vector< int > &quantities)
 add original or separated polyhedrons to the mesh More...
 
bool addHexa ()
 Tries to create a hexahedron. More...
 
bool addTetra ()
 Tries to create a tetrahedron. More...
 
bool addPenta ()
 Tries to create a pentahedron. More...
 
bool addPyra ()
 Tries to create a pyramid. More...
 
bool debugDumpLink (_Link *link)
 Dump a link and return false. More...
 
_NodefindEqualNode (std::vector< _Node * > &nodes, const StdMeshers::Cartesian3D::E_IntersectPoint *ip, const double tol2)
 
bool isCorner (const _Node *node) const
 
bool hasEdgesAround (const ConcaveFace *cf) const
 Return true if there are _eIntPoints at EDGEs forming a concave corner. More...
 
bool isImplementEdges () const
 
bool isOutParam (const double uvw[3]) const
 Classify a point by grid parameters. More...
 

Static Private Member Functions

static TFaceOfLink findStartLink (const std::vector< _OrientedLink * > &freeLinks, std::set< StdMeshers::Cartesian3D::TGeomID > &usedFaceIDs)
 get a remaining link to start from, one lying on minimal nb of FACEs More...
 
static void insertAndIncrement (StdMeshers::Cartesian3D::TGeomID id, TID2Nb &id2nbMap)
 

Private Attributes

_Node _hexNodes [HEX_NODES_NUM]
 
_Link _hexLinks [HEX_LINKS_NUM]
 
_Face _hexQuads [HEX_QUADS_NUM]
 
std::vector< _Face_polygons
 
std::vector< const StdMeshers::Cartesian3D::E_IntersectPoint * > _eIntPoints
 
std::vector< _Node_intNodes
 
std::vector< _Node * > _vIntNodes
 
_volumeDef _volumeDefs
 
StdMeshers::Cartesian3D::Grid_grid
 
double _sideLength [3]
 
int _nbCornerNodes
 
int _nbFaceIntNodes
 
int _nbBndNodes
 
int _origNodeInd
 
size_t _i
 
size_t _j
 
size_t _k
 
bool _hasTooSmall
 
int _cellID
 

Static Private Attributes

static const std::size_t HEX_NODES_NUM = 8
 
static const std::size_t HEX_LINKS_NUM = 12
 
static const std::size_t HEX_QUADS_NUM = 6
 

Detailed Description

Class representing topology of the hexahedron and creating a mesh volume basing on analysis of hexahedron intersection with geometry.

Member Typedef Documentation

◆ TFaceOfLink

◆ TID2Nb

Member Enumeration Documentation

◆ IsInternalFlag

Enumerator
IS_NOT_INTERNAL 
IS_INTERNAL 
IS_CUT_BY_INTERNAL_FACE 

Constructor & Destructor Documentation

◆ Hexahedron() [1/2]

◆ Hexahedron() [2/2]

Member Function Documentation

◆ addEdges()

◆ addFaces()

void Hexahedron::addFaces ( SMESH_MesherHelper helper,
const std::vector< const SMDS_MeshElement * > &  boundaryVolumes 
)
private

Create mesh faces at free facets.

References StdMeshers::Cartesian3D::Grid::_geometry, _grid, StdMeshers::Cartesian3D::Geometry::_mainShape, StdMeshers::Cartesian3D::Geometry::_soleSolid, StdMeshers::Cartesian3D::Grid::_toCreateFaces, StdMeshers::Cartesian3D::Grid::_toUseQuanta, StdMeshers::Cartesian3D::Grid::_toUseThresholdForInternalFaces, SMDS_VolumeTool::Element(), findCommonFace(), SMDS_Mesh::FindElement(), SMESHDS_SubMesh::GetElements(), SMDS_VolumeTool::GetFaceNodes(), SMESH_MesherHelper::GetMesh(), SMESH_MesherHelper::GetMeshDS(), StdMeshers::Cartesian3D::Grid::GetOneOfSolids(), SMDS_MeshElement::GetShapeID(), StdMeshers::Cartesian3D::Solid::HasInternalFaces(), StdMeshers::Cartesian3D::Grid::IsBoundaryFace(), SMDS_VolumeTool::IsFreeFace(), SMDS_VolumeTool::IsFreeFaceCheckAllNodes(), StdMeshers::Cartesian3D::Grid::IsInternal(), SMDS_MeshElement::isMarked(), StdMeshers::Cartesian3D::Geometry::IsOneSolid(), StdMeshers::Cartesian3D::Solid::IsOutsideOriented(), SMDS_VolumeTool::IsPoly(), StdMeshers::Cartesian3D::Grid::IsShared(), StdMeshers::Cartesian3D::Grid::IsSolid(), SMESHDS_Mesh::MeshElements(), SMESH_MeshEditor::ElemFeatures::myNodes, SMDS_VolumeTool::NbFaceNodes(), SMDS_VolumeTool::NbFaces(), SMESH::SMESH_MeshEditor::Reorient(), SMESH::SMESH_MeshEditor::Reorient2D(), reverse(), SMDS_VolumeTool::Set(), SMDS_VolumeTool::SetExternalNormal(), SMESHDS_Mesh::SetMeshElementOnShape(), SMESH_MeshEditor::ElemFeatures::SetPoly(), StdMeshers::Cartesian3D::Grid::Shape(), SMDSAbs_Face, splitPolygon(), and SMESHDS_Mesh::UnSetMeshElementOnShape().

Referenced by MakeElements().

◆ addHexa()

◆ addIntersection()

bool Hexahedron::addIntersection ( const StdMeshers::Cartesian3D::E_IntersectPoint ip,
std::vector< Hexahedron * > &  hexes,
int  ijk[],
int  dIJK[] 
)
private

◆ addPenta()

◆ addPolyhedronToMesh()

const SMDS_MeshElement * Hexahedron::addPolyhedronToMesh ( _volumeDef volDef,
SMESH_MesherHelper helper,
const std::vector< const SMDS_MeshNode * > &  nodes,
const std::vector< int > &  quantities 
)
private

◆ addPyra()

◆ addSegments()

◆ addTetra()

◆ addVolumes()

◆ checkPolyhedronSize()

◆ checkPolyhedronValidity()

int Hexahedron::checkPolyhedronValidity ( _volumeDef volDef,
std::vector< std::vector< int > > &  splitQuantities,
std::vector< std::vector< const SMDS_MeshNode * > > &  splitNodes 
)
private

Check that all faces in polyhedron are connected so a unique volume is defined.

We test that it is possible to go from any node to all nodes in the polyhedron. The set of nodes that can be visit within then defines a unique element. In case more than one polyhedron is detected. The function return the set of quantities and nodes defining separates elements. Reference to issue #bos[38521][EDF] Generate polyhedron with separate volume.

References StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_nodes, and StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_quantities.

Referenced by addVolumes().

◆ clearNodesLinkedToNull()

void Hexahedron::clearNodesLinkedToNull ( const Solid solid,
SMESH_MesherHelper helper 
)
private

Clear nodes linked to null by not splitted links.

Exclude from computation all nodes those linked to null without any splits in links. This prevents building non-planar faces in cases when the source geometry surface coincident with an intermediate grid plane.

References _hexLinks, StdMeshers::Cartesian3D::Hexahedron::_Node::_node, StdMeshers::Cartesian3D::Hexahedron::_Link::_nodes, StdMeshers::Cartesian3D::Hexahedron::_Link::clear(), HEX_LINKS_NUM, and isSplittedLink().

◆ closePolygon()

bool Hexahedron::closePolygon ( _Face polygon,
std::vector< _Node * > &  chainNodes 
) const
private

Try to heal a polygon whose ends are not connected.

References StdMeshers::Cartesian3D::Hexahedron::_Face::_links, and StdMeshers::Cartesian3D::Hexahedron::_Node::IsLinked().

Referenced by defineHexahedralFaces().

◆ compute()

bool Hexahedron::compute ( const Solid solid,
const IsInternalFlag  intFlag 
)
private

Compute mesh volumes resulted from intersection of the Hexahedron.

References StdMeshers::Cartesian3D::Grid::_axes, StdMeshers::Cartesian3D::Grid::_coords, _eIntPoints, StdMeshers::Cartesian3D::B_IntersectPoint::_faceIDs, _grid, _hasTooSmall, _hexNodes, _i, _intNodes, StdMeshers::Cartesian3D::Hexahedron::_Node::_intPoint, _j, _k, StdMeshers::Cartesian3D::Hexahedron::_Face::_links, StdMeshers::Cartesian3D::Hexahedron::_Face::_name, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_names, _nbFaceIntNodes, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_nodes, _polygons, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_quantities, _sideLength, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_size, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_solidID, StdMeshers::Cartesian3D::Grid::_toAddEdges, StdMeshers::Cartesian3D::Grid::_tol, _vIntNodes, _volumeDefs, addHexa(), addPenta(), StdMeshers::Cartesian3D::Hexahedron::_Face::AddPolyLink(), addPyra(), addTetra(), checkPolyhedronSize(), StdMeshers::Cartesian3D::Grid::ComputeUVW(), defineHexahedralFaces(), findCoplanarPolygon(), findEqualNode(), findStartLink(), StdMeshers::Cartesian3D::Hexahedron::_OrientedLink::FirstNode(), StdMeshers::Cartesian3D::Solid::ID(), SMESH_Block::ID_F0yz, SMESH_Block::ID_F1yz, SMESH_Block::ID_Fx0z, SMESH_Block::ID_Fx1z, SMESH_Block::ID_Fxy0, SMESH_Block::ID_Fxy1, SMESH_Block::ID_NONE, IS_CUT_BY_INTERNAL_FACE, StdMeshers::Cartesian3D::Grid::IsToRemoveExcessEntities(), StdMeshers::Cartesian3D::Hexahedron::_OrientedLink::LastNode(), StdMeshers::Cartesian3D::Hexahedron::_Node::Node(), preventVolumesOverlapping(), StdMeshers::Cartesian3D::Grid::PseudoIntExtFaceID(), reverse(), and sortVertexNodes().

Referenced by computeElements().

◆ computeElements()

◆ cutByExtendedInternal()

◆ debugDumpLink()

bool Hexahedron::debugDumpLink ( Hexahedron::_Link link)
private

◆ defineHexahedralFaces()

◆ findChain()

bool Hexahedron::findChain ( _Node n1,
_Node n2,
_Face quad,
std::vector< _Node * > &  chainNodes 
)
private

◆ findChainOnEdge()

bool Hexahedron::findChainOnEdge ( const std::vector< _OrientedLink > &  splits,
const _OrientedLink prevSplit,
const _OrientedLink avoidSplit,
const std::set< StdMeshers::Cartesian3D::TGeomID > &  concaveFaces,
size_t &  iS,
_Face quad,
std::vector< _Node * > &  chn 
)
private

◆ findCoplanarPolygon()

size_t Hexahedron::findCoplanarPolygon ( const _Face thePolygon,
const size_t  nbQuadPolygons,
std::vector< _OrientedLink * > &  freeLinks,
int &  nbFreeLinks,
const E_IntersectPoint ipTmp,
std::set< StdMeshers::Cartesian3D::TGeomID > &  usedFaceIDs,
std::map< StdMeshers::Cartesian3D::TGeomID, std::vector< const B_IntersectPoint * > > &  tmpAddedFace,
const StdMeshers::Cartesian3D::TGeomID curFace 
)
private

◆ findEqualNode()

_Node * StdMeshers::Cartesian3D::Hexahedron::findEqualNode ( std::vector< _Node * > &  nodes,
const StdMeshers::Cartesian3D::E_IntersectPoint ip,
const double  tol2 
)
private

◆ findIntPoint()

gp_Pnt Hexahedron::findIntPoint ( double  u1,
double  proj1,
double  u2,
double  proj2,
double  proj,
BRepAdaptor_Curve &  curve,
const gp_XYZ &  axis,
const gp_XYZ &  origin 
)
private

Finds intersection of a curve with a plane.

Parameters
[in]u1- parameter of one curve point
[in]proj1- projection of the curve point to the plane normal
[in]u2- parameter of another curve point
[in]proj2- projection of the other curve point to the plane normal
[in]proj- projection of a point where the curve intersects the plane
[in]curve- the curve
[in]axis- the plane normal
[in]origin- the plane origin
Returns
gp_Pnt - the found intersection point

References _grid, StdMeshers::Cartesian3D::Grid::_tol, and findIntPoint().

Referenced by addEdges(), and findIntPoint().

◆ findStartLink()

Hexahedron::TFaceOfLink Hexahedron::findStartLink ( const std::vector< _OrientedLink * > &  freeLinks,
std::set< StdMeshers::Cartesian3D::TGeomID > &  usedFaceIDs 
)
staticprivate

◆ getAnyFace()

TGeomID Hexahedron::getAnyFace ( ) const
private

◆ getBoundaryElems()

◆ getEntity()

int Hexahedron::getEntity ( const StdMeshers::Cartesian3D::E_IntersectPoint ip,
int *  facets,
int &  sub 
)
private

◆ getSolids()

◆ getVolumes()

void StdMeshers::Cartesian3D::Hexahedron::getVolumes ( std::vector< const SMDS_MeshElement * > &  volumes)
private

◆ hasEdgesAround()

◆ hasStrangeEdge()

bool Hexahedron::hasStrangeEdge ( ) const
private

Check if a polyherdon has an edge lying on EDGE shared by strange FACE that will be meshed by other algo.

References _eIntPoints, _grid, StdMeshers::Cartesian3D::Grid::_helper, SMESH_MesherHelper::GetAncestors(), SMESH_MesherHelper::GetMesh(), StdMeshers::Cartesian3D::Grid::IsStrangeEdge(), and StdMeshers::Cartesian3D::Grid::Shape().

Referenced by checkPolyhedronSize().

◆ init() [1/2]

void Hexahedron::init ( size_t  i)
private

Initializes its data by given grid cell (countered from zero)

References _i, _j, _k, init(), and setIJK().

◆ init() [2/2]

void Hexahedron::init ( size_t  i,
size_t  j,
size_t  k,
const Solid solid = 0 
)
private

Initializes its data by given grid cell nodes and intersections.

References StdMeshers::Cartesian3D::Grid::_allBorderNodes, StdMeshers::Cartesian3D::Hexahedron::_Node::_boundaryCornerNode, StdMeshers::Cartesian3D::Grid::_coords, StdMeshers::Cartesian3D::Hexahedron::_Face::_eIntNodes, _eIntPoints, StdMeshers::Cartesian3D::B_IntersectPoint::_faceIDs, StdMeshers::Cartesian3D::Hexahedron::_Link::_fIntNodes, StdMeshers::Cartesian3D::Hexahedron::_Link::_fIntPoints, StdMeshers::Cartesian3D::Grid::_geometry, _grid, StdMeshers::Cartesian3D::Grid::_gridIntP, StdMeshers::Cartesian3D::Grid::_helper, _hexLinks, _hexNodes, _hexQuads, _i, _intNodes, StdMeshers::Cartesian3D::Hexahedron::_Node::_intPoint, StdMeshers::Cartesian3D::Hexahedron::_Node::_isInternalFlags, _j, _k, _nbBndNodes, _nbCornerNodes, _nbFaceIntNodes, StdMeshers::Cartesian3D::Hexahedron::_Node::_node, StdMeshers::Cartesian3D::Grid::_nodes, StdMeshers::Cartesian3D::Hexahedron::_Link::_nodes, StdMeshers::Cartesian3D::Grid::_nodeShift, _origNodeInd, _sideLength, StdMeshers::Cartesian3D::Hexahedron::_Link::_splits, StdMeshers::Cartesian3D::Grid::_tol, _vIntNodes, StdMeshers::Cartesian3D::B_IntersectPoint::Add(), StdMeshers::Cartesian3D::Hexahedron::_Node::Add(), StdMeshers::Cartesian3D::Solid::Contains(), StdMeshers::Cartesian3D::Solid::ContainsAny(), findEqualNode(), getEntity(), SMESH_MesherHelper::GetMesh(), SMDS_MeshElement::GetShapeID(), StdMeshers::Cartesian3D::Grid::GetSolid(), SMESH_Block::ID_FirstE, SMESH_Block::ID_FirstF, SMESH_Block::ID_FirstV, StdMeshers::Cartesian3D::Grid::IsCorrectTransition(), StdMeshers::Cartesian3D::Grid::IsInternal(), StdMeshers::Cartesian3D::Geometry::IsOneSolid(), isOutPoint(), StdMeshers::Cartesian3D::Hexahedron::_Node::Node(), StdMeshers::Cartesian3D::Grid::NodeIndex(), StdMeshers::Cartesian3D::Grid::ShapeType(), StdMeshers::Cartesian3D::Trans_IN, and StdMeshers::Cartesian3D::Trans_OUT.

Referenced by computeElements(), init(), and MakeElements().

◆ insertAndIncrement()

static void StdMeshers::Cartesian3D::Hexahedron::insertAndIncrement ( StdMeshers::Cartesian3D::TGeomID  id,
TID2Nb id2nbMap 
)
staticprivate

◆ isCorner()

bool StdMeshers::Cartesian3D::Hexahedron::isCorner ( const _Node node) const
private

Referenced by findChainOnEdge().

◆ isCutByInternalFace()

◆ isImplementEdges()

bool StdMeshers::Cartesian3D::Hexahedron::isImplementEdges ( ) const
private

◆ isInHole()

◆ isOutParam()

bool Hexahedron::isOutParam ( const double  uvw[3]) const
private

Classify a point by grid parameters.

References StdMeshers::Cartesian3D::Grid::_coords, _grid, _i, _j, _k, and StdMeshers::Cartesian3D::Grid::_tol.

Referenced by addIntersection(), and sortVertexNodes().

◆ isOutPoint()

◆ isQuadOnFace()

bool Hexahedron::isQuadOnFace ( const size_t  iQuad)
private

Check if a hexahedron facet lies on a FACE Also return true if the facet does not interfere with any FACE.

References _hexQuads, and StdMeshers::Cartesian3D::Hexahedron::_Face::_links.

Referenced by defineHexahedralFaces().

◆ isSplittedLink()

◆ MakeElements()

int Hexahedron::MakeElements ( SMESH_MesherHelper helper,
const TEdge2faceIDsMap edge2faceIDsMap,
const int  numOfThreads = 1 
)

Create elements in the mesh.

References _eIntPoints, StdMeshers::Cartesian3D::Hexahedron::_Link::_fIntPoints, StdMeshers::Cartesian3D::Grid::_geometry, _grid, _hexLinks, _hexNodes, _i, StdMeshers::Cartesian3D::GridLine::_intPoints, _j, _k, StdMeshers::Cartesian3D::Grid::_lines, _nbBndNodes, StdMeshers::Cartesian3D::CellsAroundLink::_nbCells, _nbCornerNodes, _nbFaceIntNodes, StdMeshers::Cartesian3D::Geometry::_shape2NbNodes, StdMeshers::Cartesian3D::Grid::_toCreateFaces, StdMeshers::Cartesian3D::Grid::_tol, addEdges(), addFaces(), addSegments(), SMESHDS_Mesh::AddVolume(), SMESH::SMESH_MeshEditor::FindCoincidentNodes(), StdMeshers::Cartesian3D::CellsAroundLink::GetCell(), StdMeshers::Cartesian3D::Grid::GetLineIndexer(), SMESH_MesherHelper::GetMesh(), SMESH_MesherHelper::GetMeshDS(), SMDS_MeshElement::GetShapeID(), getSolids(), Hexahedron(), StdMeshers::Cartesian3D::LineIndexer::I(), StdMeshers::Cartesian3D::CellsAroundLink::Init(), init(), isInHole(), StdMeshers::Cartesian3D::Grid::IsToRemoveExcessEntities(), StdMeshers::Cartesian3D::LineIndexer::J(), StdMeshers::Cartesian3D::LineIndexer::K(), StdMeshers::Cartesian3D::LineIndexer::LineIndex(), SMESH::SMESH_MeshEditor::MergeNodes(), SMESHDS_Mesh::MeshElements(), StdMeshers::Cartesian3D::LineIndexer::More(), Node, StdMeshers::Cartesian3D::Hexahedron::_Node::Node(), StdMeshers::Cartesian3D::parallel_for(), StdMeshers::Cartesian3D::LineIndexer::SetIndexOnLine(), SMDS_MeshElement::setIsMarked(), and SMESHDS_Mesh::SetMeshElementOnShape().

Referenced by StdMeshers_Cartesian_3D::Compute(), testNRTJ4(), testNRTM1(), and testShape().

◆ mostDistantInternalPnt()

◆ preventVolumesOverlapping()

◆ removeExcessNodes()

◆ removeExcessSideDivision()

void Hexahedron::removeExcessSideDivision ( const std::vector< Hexahedron * > &  allHexa)
private

Remove edges and nodes dividing a hexa side in the case if an adjacent volume also sharing the dividing edge is missing due to its small side.

Issue #19887.

References _grid, _hexQuads, _i, _j, _k, StdMeshers::Cartesian3D::Hexahedron::_Face::_name, StdMeshers::Cartesian3D::Hexahedron::_volumeDef::_next, _volumeDefs, StdMeshers::Cartesian3D::Grid::CellIndex(), and StdMeshers::Cartesian3D::Hexahedron::_volumeDef::IsPolyhedron().

◆ setIJK()

void Hexahedron::setIJK ( size_t  i)
private

Initializes IJK by Hexahedron index.

References StdMeshers::Cartesian3D::Grid::_coords, _grid, _i, _j, and _k.

Referenced by init(), and mostDistantInternalPnt().

◆ sortVertexNodes()

Field Documentation

◆ _cellID

int StdMeshers::Cartesian3D::Hexahedron::_cellID
private

Referenced by addPolyhedronToMesh(), and Hexahedron().

◆ _eIntPoints

◆ _grid

◆ _hasTooSmall

bool StdMeshers::Cartesian3D::Hexahedron::_hasTooSmall
private

Referenced by compute(), and getBoundaryElems().

◆ _hexLinks

◆ _hexNodes

◆ _hexQuads

_Face StdMeshers::Cartesian3D::Hexahedron::_hexQuads[HEX_QUADS_NUM]
private

◆ _i

◆ _intNodes

std::vector< _Node > StdMeshers::Cartesian3D::Hexahedron::_intNodes
private

◆ _j

◆ _k

◆ _nbBndNodes

int StdMeshers::Cartesian3D::Hexahedron::_nbBndNodes
private

Referenced by computeElements(), init(), and MakeElements().

◆ _nbCornerNodes

int StdMeshers::Cartesian3D::Hexahedron::_nbCornerNodes
private

Referenced by computeElements(), init(), and MakeElements().

◆ _nbFaceIntNodes

int StdMeshers::Cartesian3D::Hexahedron::_nbFaceIntNodes
private

◆ _origNodeInd

int StdMeshers::Cartesian3D::Hexahedron::_origNodeInd
private

◆ _polygons

std::vector< _Face > StdMeshers::Cartesian3D::Hexahedron::_polygons
private

◆ _sideLength

double StdMeshers::Cartesian3D::Hexahedron::_sideLength[3]
private

◆ _vIntNodes

std::vector< _Node* > StdMeshers::Cartesian3D::Hexahedron::_vIntNodes
private

Referenced by compute(), init(), and isInHole().

◆ _volumeDefs

◆ HEX_LINKS_NUM

const std::size_t StdMeshers::Cartesian3D::Hexahedron::HEX_LINKS_NUM = 12
staticprivate

Referenced by clearNodesLinkedToNull().

◆ HEX_NODES_NUM

const std::size_t StdMeshers::Cartesian3D::Hexahedron::HEX_NODES_NUM = 8
staticprivate

◆ HEX_QUADS_NUM

const std::size_t StdMeshers::Cartesian3D::Hexahedron::HEX_QUADS_NUM = 6
staticprivate