24#ifndef _SMESH_Cartesian_3D_HEXAHEDRON_HXX_
25#define _SMESH_Cartesian_3D_HEXAHEDRON_HXX_
28#include <boost/container/flat_map.hpp>
56 _dInd{ {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
57 _nbCells{ grid->_coords[0].size() - 1,
58 grid->_coords[1].size() - 1,
59 grid->_coords[2].size() - 1 },
62 const int iDirOther[3][2] = {{ 1,2 },{ 0,2 },{ 0,1 }};
63 _dInd[1][ iDirOther[iDir][0] ] = -1;
64 _dInd[2][ iDirOther[iDir][1] ] = -1;
65 _dInd[3][ iDirOther[iDir][0] ] = -1; _dInd[3][ iDirOther[iDir][1] ] = -1;
67 void Init(
int i,
int j,
int k,
int link12 = 0 )
70 _i = i - _dInd[iL][0];
71 _j = j - _dInd[iL][1];
72 _k = k - _dInd[iL][2];
74 bool GetCell(
int iL,
int& i,
int& j,
int& k,
int& cellIndex,
int& linkIndex )
76 i = _i + _dInd[iL][0];
77 j = _j + _dInd[iL][1];
78 k = _k + _dInd[iL][2];
79 if ( i < 0 || i >= (
int)_nbCells[0] ||
80 j < 0 || j >= (
int)_nbCells[1] ||
81 k < 0 || k >= (
int)_nbCells[2] )
83 cellIndex = _grid->CellIndex( i,j,k );
84 linkIndex = iL + _iDir * 4;
99 enum IsInternalFlag { IS_NOT_INTERNAL, IS_INTERNAL, IS_CUT_BY_INTERNAL_FACE };
110 :_node(n), _boundaryCornerNode(0), _intPoint(ip), _usedInFace(0), _isInternalFlags(0) {}
112 {
return ( _intPoint && _intPoint->
_node ) ? _intPoint->
_node : _node; }
114 {
return _node ? _node : _boundaryCornerNode; }
119 const std::vector< StdMeshers::Cartesian3D::TGeomID >&
faces()
const {
return _intPoint->
_faceIDs; }
125 return polygon ? ( _usedInFace == polygon ) :
bool( _usedInFace );
130 return _intPoint ? _intPoint->
HasCommonFace( other, avoidFace ) : 0;
134 return _intPoint ? _intPoint->
IsOnFace( faceID ) :
false;
139 return _intPoint && other ? _intPoint->
GetCommonFaces( other, common ) : 0;
148 return gp_Pnt( 1e100, 0, 0 );
154 return eip->_shapeID;
165 os <<
"Node at hexahedron corner: ";
170 os <<
"Node at intersection point: ";
174 os <<
"mesh node is null\n";
183 static const std::size_t nodesNum = 2;
187 std::vector< const StdMeshers::Cartesian3D::F_IntersectPoint* >
_fIntPoints;
190 _Link(): _nodes{ 0, 0 }, _faces{ 0, 0 } {}
198 for (std::size_t i = 0; i < nodesNum; ++i)
203 os <<
"link node with index " << i <<
" is null\n";
206 os <<
"_fIntPoints: " << link.
_fIntPoints.size() <<
'\n';
207 os <<
"_fIntNodes: " << link.
_fIntNodes.size() <<
'\n';
208 os <<
"_splits: " << link.
_splits.size() <<
'\n';
228 operator bool()
const {
return _link; }
232 (
const std::set<StdMeshers::Cartesian3D::TGeomID>& usedIDs )
const
234 std::vector< StdMeshers::Cartesian3D::TGeomID > faces;
239 for (
size_t i = 0; i < ip0->
_faceIDs.size(); ++i )
241 !usedIDs.count( ip0->
_faceIDs[i] ) )
242 faces.push_back( ip0->
_faceIDs[i] );
268 if ( !_link->
_faces[0] )
return;
270 if ( _link->
_faces[1] == f ) {
273 else if ( _link->
_faces[0] == f ) {
285 os <<
"Oriented " << *link.
_link;
287 os <<
"Oriented link is null\n";
305 _linkID( iLink ), _nodes{ split._nodes[0], split._nodes[1] },
306 _iCheckIteration( 0 ), _isUsed( false )
308 bool IsCheckedOrUsed(
bool used )
const {
return used ? _isUsed : _iCheckIteration > 0; }
318 _hexLinks( hexLinks ), _iterationNb(0), _nbChecked(0), _nbUsed(0)
320 _freeNodes.reserve( 12 );
321 _splits.reserve( 24 );
322 for (
int iL = 0; iL < 12; ++iL )
323 for (
size_t iS = 0; iS < _hexLinks[ iL ].
_splits.size(); ++iS )
324 _splits.emplace_back( _hexLinks[ iL ].
_splits[ iS ], iL );
327 bool More()
const {
return _nbUsed < _splits.size(); }
343 return _polyLinks.empty() ? false :
344 ( &_polyLinks[0] <= ol.
_link && ol.
_link <= &_polyLinks.back() );
348 if ( faceToFindEqual && faceToFindEqual !=
this ) {
349 for (
size_t iL = 0; iL < faceToFindEqual->_polyLinks.size(); ++iL )
350 if ( faceToFindEqual->_polyLinks[iL]._nodes[0] == n1 &&
351 faceToFindEqual->_polyLinks[iL]._nodes[1] == n0 )
361 _polyLinks.push_back( l );
367 os <<
"Face " << face.
_name <<
'\n';
369 os <<
"Links on GridLines: \n";
370 for (
const auto& link : face.
_links)
375 os <<
"Links added to close a polygonal face: \n";
381 os <<
"Nodes at intersection with EDGEs: \n";
407 {
return ( _intPoint && _intPoint->
_node ) ? _intPoint->
_node : _node; }
417 os <<
"Node at hexahedron corner: ";
422 os <<
"Node at intersection point: ";
426 os <<
"mesh node is null\n";
439 std::vector< SMESH_Block::TShapeID >
_names;
444 _next(0), _solidID( other._solidID ), _size( other._size ), _volume( other._volume )
446 _names.swap( other.
_names ); }
448 size_t size()
const {
return 1 + ( _next ? _next->
size() : 0 ); }
450 {
return index == 0 ? this : ( _next ? _next->
at(index-1) : _next ); }
453 { _nodes.assign( nodes, nodes + nb ); }
456 {
if ( _next ) { _next->
SetNext( vd ); }
else { _next = vd; }}
458 bool IsEmpty()
const {
return (( _nodes.empty() ) &&
459 ( !_next || _next->
IsEmpty() )); }
463 std::vector<std::set<std::pair<int, int>>> getPolygonsEdges()
const;
464 std::vector<std::set<std::pair<int, int>>> findOpenEdges()
const;
465 int getStartNodeIndex(
const int polygon)
const;
466 std::map<int, std::vector<int>> findOverlappingPolygons()
const;
467 bool divideOverlappingPolygons();
468 bool fixOpenEdgesPolygons();
469 bool capOpenEdgesPolygons(
const std::vector<std::set<std::pair<int, int>>>& edgesByPolygon);
470 bool removeOpenEdgesPolygons(
const std::vector<std::set<std::pair<int, int>>>& edgesByPolygon);
486 if ( first > second ) std::swap( first, second );
500 os <<
"first: " << link.first;
503 os <<
"second: " << link.second;
505 os <<
"_loopIndex: " << link.
_loopIndex <<
'\n';
513 static const std::size_t HEX_NODES_NUM = 8;
514 static const std::size_t HEX_LINKS_NUM = 12;
515 static const std::size_t HEX_QUADS_NUM = 6;
524 std::vector< const StdMeshers::Cartesian3D::E_IntersectPoint* >
_eIntPoints;
536 double _sideLength[3];
547 const int numOfThreads = 1 );
548 void computeElements(
const Solid* solid = 0,
int solidIndex = -1 );
552 void init(
size_t i,
size_t j,
size_t k,
const Solid* solid=0 );
553 void init(
size_t i );
556 void setIJK(
size_t i );
563 std::vector< Hexahedron* >& intersectedHex,
565 gp_Pnt findIntPoint(
double u1,
double proj1,
double u2,
double proj2,
566 double proj, BRepAdaptor_Curve& curve,
567 const gp_XYZ& axis,
const gp_XYZ& origin );
570 std::vector< Hexahedron* >& hexes,
571 int ijk[],
int dIJK[] );
572 bool isQuadOnFace(
const size_t iQuad );
573 bool findChain(
_Node* n1,
_Node* n2,
_Face& quad, std::vector<_Node*>& chainNodes );
574 bool closePolygon(
_Face* polygon, std::vector<_Node*>& chainNodes )
const;
575 bool findChainOnEdge(
const std::vector< _OrientedLink >& splits,
578 const std::set< StdMeshers::Cartesian3D::TGeomID > & concaveFaces,
581 std::vector<_Node*>& chn);
582 typedef std::pair< StdMeshers::Cartesian3D::TGeomID, int >
TFaceOfLink;
583 static TFaceOfLink findStartLink(
const std::vector< _OrientedLink* >& freeLinks,
584 std::set< StdMeshers::Cartesian3D::TGeomID >& usedFaceIDs);
585 size_t findCoplanarPolygon
586 (
const _Face& thePolygon,
587 const size_t nbQuadPolygons,
588 std::vector< _OrientedLink* >& freeLinks,
591 std::set< StdMeshers::Cartesian3D::TGeomID >& usedFaceIDs,
596 const std::vector< const SMDS_MeshElement* > & boundaryVolumes );
599 void getVolumes( std::vector< const SMDS_MeshElement* > & volumes );
600 void getBoundaryElems( std::vector< const SMDS_MeshElement* > & boundaryVolumes );
601 void removeExcessSideDivision(
const std::vector< Hexahedron* >& allHexa);
602 void removeExcessNodes(std::vector< Hexahedron* >& allHexa);
603 void preventVolumesOverlapping();
605 void cutByExtendedInternal( std::vector< Hexahedron* >& hexes,
606 const TColStd_MapOfInteger& intEdgeIDs );
607 gp_Pnt mostDistantInternalPnt(
int hexIndex,
const gp_Pnt& p1,
const gp_Pnt& p2 );
609 void sortVertexNodes(std::vector<_Node*>& nodes,
612 bool isInHole()
const;
613 bool hasStrangeEdge()
const;
614 bool checkPolyhedronSize(
bool isCutByInternalFace,
double & volSize )
const;
615 int checkPolyhedronValidity(
_volumeDef* volDef, std::vector<std::vector<int>>& splitQuantities,
616 std::vector<std::vector<const SMDS_MeshNode*>>& splitNodes );
619 const std::vector<const SMDS_MeshNode*>& nodes,
620 const std::vector<int>& quantities );
625 bool debugDumpLink(
_Link* link );
630 for (
size_t i = 0; i < nodes.size(); ++i )
631 if ( nodes[i]->EdgeIntPnt() == ip ||
632 nodes[i]->Point().SquareDistance( ip->
_point ) <= tol2 )
636 bool isCorner(
const _Node* node )
const {
return ( node >= &_hexNodes[0] &&
637 node - &_hexNodes[0] < 8 ); }
638 bool hasEdgesAround(
const ConcaveFace* cf )
const;
640 bool isOutParam(
const double uvw[3])
const;
642 typedef boost::container::flat_map< StdMeshers::Cartesian3D::TGeomID, size_t >
TID2Nb;
645 TID2Nb::value_type s0(
id, 0 );
646 TID2Nb::iterator id2nb = id2nbMap.insert( s0 ).first;
#define STDMESHERS_EXPORT
Definition: SMESH_StdMeshers.hxx:38
SMESH_TNodeXYZ SMESH_NodeXYZ
Definition: SMESH_TypeDefs.hxx:240
void reverse(vector< T > &vec)
reverse order of vector elements
Definition: StdMeshers_FaceSide.cxx:941
Base class for elements.
Definition: SMDS_MeshElement.hxx:56
Definition: SMDS_MeshNode.hxx:36
virtual void Print(std::ostream &OS) const override
Print self.
Definition: SMDS_MeshNode.cxx:68
Definition: SMESH_Block.hxx:63
TShapeID
Definition: SMESH_Block.hxx:65
It helps meshers to add elements and provides other utilities.
Definition: SMESH_MesherHelper.hxx:84
Definition: StdMeshers_Cartesian_3D_Grid.hxx:414
ObjectPool< E_IntersectPoint > _edgeIntPool
Definition: StdMeshers_Cartesian_3D_Grid.hxx:430
Class representing topology of the hexahedron and creating a mesh volume basing on analysis of hexahe...
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:95
static void insertAndIncrement(StdMeshers::Cartesian3D::TGeomID id, TID2Nb &id2nbMap)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:643
std::vector< _Node > _intNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:527
size_t _i
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:539
bool isImplementEdges() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:639
std::vector< const StdMeshers::Cartesian3D::E_IntersectPoint * > _eIntPoints
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:524
std::vector< _Face > _polygons
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:521
IsInternalFlag
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:99
_Node * findEqualNode(std::vector< _Node * > &nodes, const StdMeshers::Cartesian3D::E_IntersectPoint *ip, const double tol2)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:626
bool _hasTooSmall
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:540
bool isCorner(const _Node *node) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:636
int _nbBndNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:537
int _origNodeInd
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:538
std::vector< _Node * > _vIntNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:530
int _cellID
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:541
StdMeshers::Cartesian3D::Grid * _grid
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:535
std::pair< StdMeshers::Cartesian3D::TGeomID, int > TFaceOfLink
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:582
boost::container::flat_map< StdMeshers::Cartesian3D::TGeomID, size_t > TID2Nb
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:642
_volumeDef _volumeDefs
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:533
void getVolumes(std::vector< const SMDS_MeshElement * > &volumes)
Container of IDs of SOLID sub-shapes.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:167
@ Node
Selection of mesh nodes.
Definition: libSMESH_Swig.h:52
ENUM Add(ENUM v, int delta)
Return incremented enum value.
Definition: SMESH_TypeDefs.hxx:140
int TGeomID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:123
std::map< TGeomID, std::vector< TGeomID > > TEdge2faceIDsMap
Definition: StdMeshers_Cartesian_3D_Grid.hxx:127
StdMeshers: interfaces to standard hypotheses and algorithms.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:120
Common data of any intersection between a Grid and a shape.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:284
const SMDS_MeshNode * _node
Definition: StdMeshers_Cartesian_3D_Grid.hxx:289
size_t GetCommonFaces(const B_IntersectPoint *other, TGeomID *commonFaces) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:194
std::vector< TGeomID > _faceIDs
Definition: StdMeshers_Cartesian_3D_Grid.hxx:290
TGeomID HasCommonFace(const B_IntersectPoint *other, TGeomID avoidFace=-1) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:181
bool IsOnFace(TGeomID faceID) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:210
Return cells sharing a link.
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:47
int _i
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:51
CellsAroundLink(StdMeshers::Cartesian3D::Grid *grid, int iDir)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:54
int _j
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:51
void Init(int i, int j, int k, int link12=0)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:67
StdMeshers::Cartesian3D::Grid * _grid
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:52
int _dInd[4][3]
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:49
size_t _nbCells[3]
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:50
bool GetCell(int iL, int &i, int &j, int &k, int &cellIndex, int &linkIndex)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:74
int _k
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:51
int _iDir
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:48
Sub-entities of a FACE neighboring its concave VERTEX.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:149
Data of intersection between GridPlanes and a TopoDS_EDGE.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:321
gp_Pnt _point
Definition: StdMeshers_Cartesian_3D_Grid.hxx:322
Data of intersection between a GridLine and a TopoDS_Face.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:305
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:333
friend std::ostream & operator<<(std::ostream &os, const _Face &face)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:365
_Face()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:339
void AddPolyLink(_Node *n0, _Node *n1, _Face *faceToFindEqual=0)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:346
SMESH_Block::TShapeID _name
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:334
bool IsPolyLink(const _OrientedLink &ol)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:341
std::vector< _OrientedLink > _links
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:335
std::vector< _Link > _polyLinks
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:336
std::vector< _Node * > _eIntNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:337
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:182
std::vector< _Link > _splits
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:189
_Face * _faces[nodesNum]
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:186
friend std::ostream & operator<<(std::ostream &os, const _Link &link)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:194
_Link()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:190
_Node * _nodes[nodesNum]
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:185
std::vector< _Node * > _fIntNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:188
std::vector< const StdMeshers::Cartesian3D::F_IntersectPoint * > _fIntPoints
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:187
< node either at a hexahedron corner or at intersection
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:102
StdMeshers::Cartesian3D::TGeomID face(size_t i) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:120
const SMDS_MeshNode * Node() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:111
_Node(const SMDS_MeshNode *n=0, const StdMeshers::Cartesian3D::B_IntersectPoint *ip=0)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:109
friend std::ostream & operator<<(std::ostream &os, const _Node &node)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:161
const _Face * _usedInFace
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:106
bool IsOnFace(StdMeshers::Cartesian3D::TGeomID faceID) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:132
const StdMeshers::Cartesian3D::E_IntersectPoint * EdgeIntPnt() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:115
StdMeshers::Cartesian3D::TGeomID ShapeID() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:150
gp_Pnt Point() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:141
size_t GetCommonFaces(const StdMeshers::Cartesian3D::B_IntersectPoint *other, StdMeshers::Cartesian3D::TGeomID *common) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:136
bool IsUsedInFace(const _Face *polygon=0)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:123
const SMDS_MeshNode * _boundaryCornerNode
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:104
void SetInternal(IsInternalFlag intFlag)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:121
const StdMeshers::Cartesian3D::B_IntersectPoint * _intPoint
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:105
bool IsCutByInternal() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:122
const StdMeshers::Cartesian3D::F_IntersectPoint * FaceIntPnt() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:117
const std::vector< StdMeshers::Cartesian3D::TGeomID > & faces() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:119
const SMDS_MeshNode * _node
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:103
char _isInternalFlags
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:107
const SMDS_MeshNode * BoundaryNode() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:113
StdMeshers::Cartesian3D::TGeomID IsLinked(const StdMeshers::Cartesian3D::B_IntersectPoint *other, StdMeshers::Cartesian3D::TGeomID avoidFace=-1) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:127
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:216
void RemoveFace(const _Face *f)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:266
void AddFace(_Face *f)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:256
_Node * FirstNode() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:226
bool HasEdgeNodes() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:247
_OrientedLink ResultLink(int i) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:222
size_t NbResultLinks() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:221
_Link * _link
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:217
_Node * LastNode() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:227
friend std::ostream & operator<<(std::ostream &os, const _OrientedLink &link)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:282
void Reverse()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:220
_OrientedLink(_Link *link=0, bool reverse=false)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:219
std::vector< StdMeshers::Cartesian3D::TGeomID > GetNotUsedFaces(const std::set< StdMeshers::Cartesian3D::TGeomID > &usedIDs) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:232
bool _reverse
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:218
int NbFaces() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:252
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:297
int _iCheckIteration
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:300
bool IsCheckedOrUsed(bool used) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:308
_Link * _checkedSplit
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:301
_Split(_Link &split, int iLink)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:304
bool _isUsed
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:302
int _linkID
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:298
set to _hexLinks splits on one side of INTERNAL FACEs
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:295
std::vector< _Split > _splits
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:311
size_t _nbUsed
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:314
bool More() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:327
_Link * _hexLinks
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:310
std::vector< _Node * > _freeNodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:315
_SplitIterator(_Link *hexLinks)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:317
int _iterationNb
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:312
size_t _nbChecked
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:313
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:473
_nodeDef _node1
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:474
_linkDef * _next
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:475
_linkDef()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:478
_linkDef * _prev
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:475
friend std::ostream & operator<<(std::ostream &os, const _linkDef &link)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:494
void init(const _nodeDef &n1, const _nodeDef &n2, size_t iLoop)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:480
size_t _loopIndex
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:476
void setNext(_linkDef *next)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:488
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:400
bool operator==(const _nodeDef &other) const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:411
_ptr Ptr() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:410
const StdMeshers::Cartesian3D::B_IntersectPoint * _intPoint
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:402
_nodeDef()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:404
_nodeDef(_Node *n)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:405
friend std::ostream & operator<<(std::ostream &os, const _nodeDef &node)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:413
const StdMeshers::Cartesian3D::E_IntersectPoint * EdgeIntPnt() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:408
const SMDS_MeshNode * _node
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:401
const SMDS_MeshNode * Node() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:406
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:396
~_volumeDef()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:442
std::vector< _nodeDef > _nodes
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:432
StdMeshers::Cartesian3D::TGeomID _solidID
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:435
void SetNext(_volumeDef *vd)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:455
bool IsPolyhedron() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:460
std::vector< SMESH_Block::TShapeID > _names
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:439
_volumeDef(_volumeDef &other)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:443
void * _ptr
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:397
void Set(_Node **nodes, int nb)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:452
double _size
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:436
_volumeDef * at(int index)
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:449
bool IsEmpty() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:458
_volumeDef()
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:441
const SMDS_MeshElement * _volume
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:437
std::vector< int > _quantities
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:433
std::vector< const SMDS_MeshElement * > _brotherVolume
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:438
size_t size() const
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:448
_volumeDef * _next
Definition: StdMeshers_Cartesian_3D_Hexahedron.hxx:434