Version: 9.16.0
SMESH_MeshEditor Class Reference

Editor of a mesh. More...

#include <SMESH_MeshEditor.hxx>

Data Structures

struct  ElemFeatures
 < Features of element to create More...
 
class  ExtrusParam
 Generator of nodes for extrusion functionality. More...
 

Public Types

enum  SplitVolumToTetraFlags {
  HEXA_TO_5 = 1 , HEXA_TO_6 , HEXA_TO_24 , HEXA_TO_2_PRISMS ,
  HEXA_TO_4_PRISMS
}
 
enum  SmoothMethod { LAPLACIAN = 0 , CENTROIDAL }
 
enum  ExtrusionFlags {
  EXTRUSION_FLAG_BOUNDARY = 0x01 , EXTRUSION_FLAG_SEW = 0x02 , EXTRUSION_FLAG_GROUPS = 0x04 , EXTRUSION_FLAG_BY_AVG_NORMAL = 0x08 ,
  EXTRUSION_FLAG_USE_INPUT_ELEMS_ONLY = 0x10 , EXTRUSION_FLAG_SCALE_LINEAR_VARIATION = 0x20 , EXTRUSION_FLAG_ANGLE_LINEAR_VARIATION = 0x40
}
 Flags of extrusion. More...
 
enum  Extrusion_Error {
  EXTR_OK , EXTR_NO_ELEMENTS , EXTR_PATH_NOT_EDGE , EXTR_BAD_PATH_SHAPE ,
  EXTR_BAD_STARTING_NODE , EXTR_BAD_ANGLES_NUMBER , EXTR_CANT_GET_TANGENT
}
 
enum  Sew_Error {
  SEW_OK , SEW_BORDER1_NOT_FOUND , SEW_BORDER2_NOT_FOUND , SEW_BOTH_BORDERS_NOT_FOUND ,
  SEW_BAD_SIDE_NODES , SEW_VOLUMES_TO_SPLIT , SEW_DIFF_NB_OF_ELEMENTS , SEW_TOPO_DIFF_SETS_OF_ELEMENTS ,
  SEW_BAD_SIDE1_NODES , SEW_BAD_SIDE2_NODES , SEW_INTERNAL_ERROR
}
 
enum  Bnd_Dimension { BND_2DFROM3D , BND_1DFROM3D , BND_1DFROM2D }
 
typedef std::map< const SMDS_MeshElement *, int, TIDCompareTFacetOfElem
 2nd arg of SplitVolumes() More...
 
typedef TIDTypeCompare TElemSort
 
typedef std::map< const SMDS_MeshElement *, std::list< const SMDS_MeshElement * >, TElemSortTTElemOfElemListMap
 
typedef std::map< const SMDS_MeshNode *, std::list< const SMDS_MeshNode * > > TNodeOfNodeListMap
 
typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr
 
typedef std::vector< TNodeOfNodeListMapItrTVecOfNnlmiMap
 
typedef std::map< const SMDS_MeshElement *, TVecOfNnlmiMap, TElemSortTElemOfVecOfNnlmiMap
 
typedef std::unique_ptr< std::list< int > > PGroupIDs
 
typedef std::list< std::list< const SMDS_MeshNode * > > TListOfListOfNodes
 
typedef std::list< std::list< smIdType > > TListOfListOfElementsID
 

Public Member Functions

 SMESH_MeshEditor (SMESH_Mesh *theMesh)
 
SMESH_MeshGetMesh ()
 
SMESHDS_MeshGetMeshDS ()
 Return mesh DS. More...
 
const SMESH_SequenceOfElemPtrGetLastCreatedNodes () const
 
const SMESH_SequenceOfElemPtrGetLastCreatedElems () const
 
void ClearLastCreated ()
 Clears myLastCreatedNodes and myLastCreatedElems. More...
 
SMESH_ComputeErrorPtrGetError ()
 
SMDS_MeshElementAddElement (const std::vector< const SMDS_MeshNode * > &nodes, const ElemFeatures &features)
 Add element. More...
 
SMDS_MeshElementAddElement (const std::vector< smIdType > &nodeIDs, const ElemFeatures &features)
 Add element. More...
 
void RemoveNodeWithReconnection (const SMDS_MeshNode *node)
 Remove a node and fill a hole appeared by changing surrounding faces. More...
 
smIdType Remove (const std::list< smIdType > &theElemIDs, const bool isNodes)
 
void Create0DElementsOnAllNodes (const TIDSortedElemSet &elements, TIDSortedElemSet &all0DElems, const bool duplicateElements)
 Create 0D elements on all nodes of the given object. More...
 
bool InverseDiag (const SMDS_MeshElement *theTria1, const SMDS_MeshElement *theTria2)
 
bool InverseDiag (const SMDS_MeshNode *theNode1, const SMDS_MeshNode *theNode2)
 
bool DeleteDiag (const SMDS_MeshNode *theNode1, const SMDS_MeshNode *theNode2)
 
void SplitEdge (const SMDS_MeshNode *theNode1, const SMDS_MeshNode *theNode2, double thePosition)
 
void SplitFace (const SMDS_MeshElement *theFace, double theX, double theY, double theZ)
 
bool Reorient (const SMDS_MeshElement *theElement)
 
int Reorient2D (TIDSortedElemSet &theFaces, const gp_Vec &theDirection, TIDSortedElemSet &theRefFaces, bool theAllowNonManifold)
 Reorient faces. More...
 
int Reorient2DBy3D (TIDSortedElemSet &theFaces, TIDSortedElemSet &theVolumes, const bool theOutsideNormal)
 Reorient faces basing on orientation of adjacent volumes. More...
 
bool TriToQuad (TIDSortedElemSet &theElems, SMESH::Controls::NumericalFunctorPtr theCriterion, const double theMaxAngle)
 Fuse neighbour triangles into quadrangles. More...
 
bool QuadToTri (TIDSortedElemSet &theElems, SMESH::Controls::NumericalFunctorPtr theCriterion)
 Split quadrangles into triangles. More...
 
bool QuadToTri (TIDSortedElemSet &theElems, const bool the13Diag)
 Split quadrangles into triangles. More...
 
void QuadTo4Tri (TIDSortedElemSet &theElems)
 Split each of given quadrangles into 4 triangles. More...
 
int BestSplit (const SMDS_MeshElement *theQuad, SMESH::Controls::NumericalFunctorPtr theCriterion)
 Find better diagonal for splitting. More...
 
void SplitVolumes (const TFacetOfElem &theElems, const int theMethodFlags, const bool avoidOverConstrainedVolumes=false)
 Split volumic elements into tetrahedra or prisms. More...
 
void GetHexaFacetsToSplit (TIDSortedElemSet &theHexas, const gp_Ax1 &theFacetNormal, TFacetOfElem &theFacets)
 For hexahedra that will be split into prisms, finds facets to split into triangles. More...
 
void SplitBiQuadraticIntoLinear (TIDSortedElemSet &theElems)
 Split bi-quadratic elements into linear ones without creation of additional nodes. More...
 
bool isVariantOverConstrained (SMDS_VolumeTool &vol, const int *connVariants)
 Return true if one of the tetras included in the variant will be an overconstrained tetra. More...
 
void Smooth (TIDSortedElemSet &theElements, std::set< const SMDS_MeshNode * > &theFixedNodes, const SmoothMethod theSmoothMethod, const int theNbIterations, double theTgtAspectRatio=1.0, const bool the2D=true)
 
PGroupIDs RotationSweep (TIDSortedElemSet theElements[2], const gp_Ax1 &theAxis, const double theAngle, const int theNbSteps, const double theToler, const bool theMakeGroups, const bool theMakeWalls=true)
 
PGroupIDs ExtrusionSweep (TIDSortedElemSet theElems[2], const gp_Vec &theStep, const int theNbSteps, TTElemOfElemListMap &newElemsMap, const int theFlags, const double theTolerance=1.e-6)
 Generate new elements by extrusion of theElements It is a method used in .idl file. More...
 
PGroupIDs ExtrusionSweep (TIDSortedElemSet theElems[2], ExtrusParam &theParams, TTElemOfElemListMap &newElemsMap)
 Generate new elements by extrusion of theElements. More...
 
Extrusion_Error ExtrusionAlongTrack (TIDSortedElemSet theElements[2], SMESH_Mesh *theTrackMesh, SMDS_ElemIteratorPtr theTrackIterator, const SMDS_MeshNode *theNodeStart, std::list< double > &theAngles, const bool theAngleVariation, std::list< double > &theScales, const bool theScaleVariation, const gp_Pnt *theRefPoint, const bool theMakeGroups)
 
PGroupIDs Transform (TIDSortedElemSet &theElements, const gp_Trsf &theTrsf, const bool theCopy, const bool theMakeGroups, SMESH_Mesh *theTargetMesh=0)
 Move or copy theElements applying theTrsf to their nodes. More...
 
PGroupIDs Offset (TIDSortedElemSet &theElements, const double theValue, SMESH_Mesh *theTgtMesh, const bool theMakeGroups, const bool theCopyElements, const bool theFixSelfIntersection)
 Make an offset mesh from a source 2D mesh. More...
 
void FindCoincidentNodes (TIDSortedNodeSet &theNodes, const double theTolerance, TListOfListOfNodes &theGroupsOfNodes, bool theSeparateCornersAndMedium)
 Return list of group of nodes close to each other within theTolerance. More...
 
void MergeNodes (TListOfListOfNodes &theNodeGroups, const bool theAvoidMakingHoles=false)
 
void FindEqualElements (TIDSortedElemSet &theElements, TListOfListOfElementsID &theGroupsOfElementsID)
 
void MergeElements (TListOfListOfElementsID &theGroupsOfElementsID)
 
void MergeEqualElements ()
 
int SimplifyFace (const std::vector< const SMDS_MeshNode * > &faceNodes, std::vector< const SMDS_MeshNode * > &poly_nodes, std::vector< int > &quantities) const
 
Sew_Error SewFreeBorder (const SMDS_MeshNode *theBorderFirstNode, const SMDS_MeshNode *theBorderSecondNode, const SMDS_MeshNode *theBorderLastNode, const SMDS_MeshNode *theSide2FirstNode, const SMDS_MeshNode *theSide2SecondNode, const SMDS_MeshNode *theSide2ThirdNode=0, const bool theSide2IsFreeBorder=true, const bool toCreatePolygons=false, const bool toCreatePolyedrs=false)
 
Sew_Error SewSideElements (TIDSortedElemSet &theSide1, TIDSortedElemSet &theSide2, const SMDS_MeshNode *theFirstNode1ToMerge, const SMDS_MeshNode *theFirstNode2ToMerge, const SMDS_MeshNode *theSecondNode1ToMerge, const SMDS_MeshNode *theSecondNode2ToMerge)
 
void InsertNodesIntoLink (const SMDS_MeshElement *theFace, const SMDS_MeshNode *theBetweenNode1, const SMDS_MeshNode *theBetweenNode2, std::list< const SMDS_MeshNode * > &theNodesToInsert, const bool toCreatePoly=false)
 
void UpdateVolumes (const SMDS_MeshNode *theBetweenNode1, const SMDS_MeshNode *theBetweenNode2, std::list< const SMDS_MeshNode * > &theNodesToInsert)
 
void ConvertToQuadratic (const bool theForce3d, const bool theToBiQuad)
 
void ConvertToQuadratic (const bool theForce3d, TIDSortedElemSet &theElements, const bool theToBiQuad)
 Makes given elements quadratic. More...
 
bool ConvertFromQuadratic ()
 
void ConvertFromQuadratic (TIDSortedElemSet &theElements)
 Makes given elements linear. More...
 
int FindShape (const SMDS_MeshElement *theElem)
 
void DoubleElements (const TIDSortedElemSet &theElements)
 Create elements equal (on same nodes) to given ones. More...
 
bool DoubleNodes (const std::list< int > &theListOfNodes, const std::list< int > &theListOfModifiedElems)
 Creates a hole in a mesh by doubling the nodes of some particular elements. More...
 
bool DoubleNodes (const TIDSortedElemSet &theElems, const TIDSortedElemSet &theNodesNot, const TIDSortedElemSet &theAffectedElems)
 Creates a hole in a mesh by doubling the nodes of some particular elements. More...
 
bool AffectedElemGroupsInRegion (const TIDSortedElemSet &theElems, const TIDSortedElemSet &theNodesNot, const TopoDS_Shape &theShape, TIDSortedElemSet &theAffectedElems)
 Identify the elements that will be affected by node duplication (actual duplication is not performed). More...
 
bool DoubleNodesInRegion (const TIDSortedElemSet &theElems, const TIDSortedElemSet &theNodesNot, const TopoDS_Shape &theShape)
 Creates a hole in a mesh by doubling the nodes of some particular elements. More...
 
double OrientedAngle (const gp_Pnt &p0, const gp_Pnt &p1, const gp_Pnt &g1, const gp_Pnt &g2)
 compute an oriented angle between two planes defined by four points. More...
 
bool DoubleNodesOnGroupBoundaries (const std::vector< TIDSortedElemSet > &theElems, bool createJointElems, bool onAllBoundaries)
 Double nodes on shared faces between groups of volumes and create flat elements on demand. More...
 
bool CreateFlatElementsOnFacesGroups (const std::vector< TIDSortedElemSet > &theElems)
 Double nodes on some external faces and create flat elements. More...
 
void CreateHoleSkin (double radius, const TopoDS_Shape &theShape, SMESH_NodeSearcher *theNodeSearcher, const char *groupName, std::vector< double > &nodesCoords, std::vector< std::vector< int > > &listOfListOfNodes)
 identify all the elements around a geom shape, get the faces delimiting the hole Build groups of volume to remove, groups of faces to replace on the skin of the object, groups of faces to remove inside the object, (idem edges). More...
 
bool Make2DMeshFrom3D ()
 Generated skin mesh (containing 2D cells) from 3D mesh The created 2D mesh elements based on nodes of free faces of boundary volumes. More...
 
int MakeBoundaryMesh (const TIDSortedElemSet &elements, Bnd_Dimension dimension, SMESH_Group *group=0, SMESH_Mesh *targetMesh=0, bool toCopyElements=false, bool toCopyExistingBondary=false, bool toAddExistingBondary=false, bool aroundElements=false, bool toCreateAllElements=false)
 Creates missing boundary elements. More...
 

Static Public Member Functions

static bool CheckFreeBorderNodes (const SMDS_MeshNode *theNode1, const SMDS_MeshNode *theNode2, const SMDS_MeshNode *theNode3=0)
 
static bool FindFreeBorder (const SMDS_MeshNode *theFirstNode, const SMDS_MeshNode *theSecondNode, const SMDS_MeshNode *theLastNode, std::list< const SMDS_MeshNode * > &theNodes, std::list< const SMDS_MeshElement * > &theFaces)
 
static void AddToSameGroups (const SMDS_MeshElement *elemToAdd, const SMDS_MeshElement *elemInGroups, SMESHDS_Mesh *aMesh)
 
static void RemoveElemFromGroups (const SMDS_MeshElement *element, SMESHDS_Mesh *aMesh)
 
static void ReplaceElemInGroups (const SMDS_MeshElement *elemToRm, const SMDS_MeshElement *elemToAdd, SMESHDS_Mesh *aMesh)
 Replace elemToRm by elemToAdd in the all groups. More...
 
static void ReplaceElemInGroups (const SMDS_MeshElement *elemToRm, const std::vector< const SMDS_MeshElement * > &elemToAdd, SMESHDS_Mesh *aMesh)
 Replace elemToRm by elemToAdd in the all groups. More...
 
static void GetLinkedNodes (const SMDS_MeshNode *node, TIDSortedElemSet &linkedNodes, SMDSAbs_ElementType type=SMDSAbs_All)
 Return nodes linked to the given one in elements of the type. More...
 
static Sew_Error FindMatchingNodes (std::set< const SMDS_MeshElement * > &theSide1, std::set< const SMDS_MeshElement * > &theSide2, const SMDS_MeshNode *theFirstNode1, const SMDS_MeshNode *theFirstNode2, const SMDS_MeshNode *theSecondNode1, const SMDS_MeshNode *theSecondNode2, TNodeNodeMap &theNodeReplaceMap)
 Find corresponding nodes in two sets of faces. More...
 
static bool IsMedium (const SMDS_MeshNode *node, const SMDSAbs_ElementType typeToCheck=SMDSAbs_All)
 Returns true if given node is medium. More...
 

Private Member Functions

smIdType convertElemToQuadratic (SMESHDS_SubMesh *theSm, SMESH_MesherHelper &theHelper, const bool theForce3d)
 Convert elements contained in a submesh to quadratic. More...
 
smIdType removeQuadElem (SMESHDS_SubMesh *theSm, SMDS_ElemIteratorPtr theItr, const int theShapeID)
 Convert quadratic elements to linear ones and remove quadratic nodes. More...
 
PGroupIDs generateGroups (const SMESH_SequenceOfElemPtr &nodeGens, const SMESH_SequenceOfElemPtr &elemGens, const std::string &postfix, SMESH_Mesh *targetMesh=0, const bool topPresent=true)
 Create groups of elements made during transformation. More...
 
void sweepElement (const SMDS_MeshElement *elem, const std::vector< TNodeOfNodeListMapItr > &newNodesItVec, std::list< const SMDS_MeshElement * > &newElems, const size_t nbSteps, SMESH_SequenceOfElemPtr &srcElements)
 Create elements by sweeping an element. More...
 
bool applyMerge (const SMDS_MeshElement *elems, std::vector< ElemFeatures > &newElemDefs, TNodeNodeMap &nodeNodeMap, const bool avoidMakingHoles)
 Computes new connectivity of an element after merging nodes. More...
 
void makeWalls (TNodeOfNodeListMap &mapNewNodes, TTElemOfElemListMap &newElemsMap, TElemOfVecOfNnlmiMap &elemNewNodesMap, TIDSortedElemSet &elemSet, const int nbSteps, SMESH_SequenceOfElemPtr &srcElements)
 Create 1D and 2D elements around swept elements. More...
 
bool doubleNodes (SMESHDS_Mesh *theMeshDS, const TIDSortedElemSet &theElems, const TIDSortedElemSet &theNodesNot, TNodeNodeMap &theNodeNodeMap, const bool theIsDoubleElem)
 Creates a hole in a mesh by doubling the nodes of some particular elements. More...
 
void copyPosition (const SMDS_MeshNode *from, const SMDS_MeshNode *to)
 Copy node position and set to node on the same geometry. More...
 

Static Private Member Functions

static void linearAngleVariation (const int NbSteps, std::list< double > &theAngles)
 
static void linearScaleVariation (const int NbSteps, std::list< double > &theScales)
 

Private Attributes

SMESH_MeshmyMesh
 
SMESH_SequenceOfElemPtr myLastCreatedNodes
 
SMESH_SequenceOfElemPtr myLastCreatedElems
 
SMESH_ComputeErrorPtr myError
 

Detailed Description

Editor of a mesh.

Member Typedef Documentation

◆ PGroupIDs

typedef std::unique_ptr< std::list< int > > SMESH_MeshEditor::PGroupIDs

◆ TElemOfVecOfNnlmiMap

◆ TElemSort

◆ TFacetOfElem

2nd arg of SplitVolumes()

◆ TListOfListOfElementsID

typedef std::list< std::list< smIdType > > SMESH_MeshEditor::TListOfListOfElementsID

◆ TListOfListOfNodes

typedef std::list< std::list< const SMDS_MeshNode* > > SMESH_MeshEditor::TListOfListOfNodes

◆ TNodeOfNodeListMap

typedef std::map<const SMDS_MeshNode*, std::list<const SMDS_MeshNode*> > SMESH_MeshEditor::TNodeOfNodeListMap

◆ TNodeOfNodeListMapItr

typedef TNodeOfNodeListMap::iterator SMESH_MeshEditor::TNodeOfNodeListMapItr

◆ TTElemOfElemListMap

typedef std::map< const SMDS_MeshElement*, std::list<const SMDS_MeshElement*>, TElemSort > SMESH_MeshEditor::TTElemOfElemListMap

◆ TVecOfNnlmiMap

Member Enumeration Documentation

◆ Bnd_Dimension

Enumerator
BND_2DFROM3D 
BND_1DFROM3D 
BND_1DFROM2D 

◆ Extrusion_Error

Enumerator
EXTR_OK 
EXTR_NO_ELEMENTS 
EXTR_PATH_NOT_EDGE 
EXTR_BAD_PATH_SHAPE 
EXTR_BAD_STARTING_NODE 
EXTR_BAD_ANGLES_NUMBER 
EXTR_CANT_GET_TANGENT 

◆ ExtrusionFlags

Flags of extrusion.

BOUNDARY: create or not boundary for result of extrusion SEW: try to use existing nodes or create new nodes in any case GROUPS: to create groups BY_AVG_NORMAL: step size is measured along average normal to elements, else step size is measured along average normal of any element USE_INPUT_ELEMS_ONLY: to use only input elements to compute extrusion direction for ExtrusionByNormal() SCALE_LINEAR_VARIATION: to make linear variation of scale factors ANGLE_LINEAR_VARIATION: to make linear variation of angles

Enumerator
EXTRUSION_FLAG_BOUNDARY 
EXTRUSION_FLAG_SEW 
EXTRUSION_FLAG_GROUPS 
EXTRUSION_FLAG_BY_AVG_NORMAL 
EXTRUSION_FLAG_USE_INPUT_ELEMS_ONLY 
EXTRUSION_FLAG_SCALE_LINEAR_VARIATION 
EXTRUSION_FLAG_ANGLE_LINEAR_VARIATION 

◆ Sew_Error

Enumerator
SEW_OK 
SEW_BORDER1_NOT_FOUND 
SEW_BORDER2_NOT_FOUND 
SEW_BOTH_BORDERS_NOT_FOUND 
SEW_BAD_SIDE_NODES 
SEW_VOLUMES_TO_SPLIT 
SEW_DIFF_NB_OF_ELEMENTS 
SEW_TOPO_DIFF_SETS_OF_ELEMENTS 
SEW_BAD_SIDE1_NODES 
SEW_BAD_SIDE2_NODES 
SEW_INTERNAL_ERROR 

◆ SmoothMethod

Enumerator
LAPLACIAN 
CENTROIDAL 

◆ SplitVolumToTetraFlags

Enumerator
HEXA_TO_5 
HEXA_TO_6 
HEXA_TO_24 
HEXA_TO_2_PRISMS 
HEXA_TO_4_PRISMS 

Constructor & Destructor Documentation

◆ SMESH_MeshEditor()

SMESH_MeshEditor::SMESH_MeshEditor ( SMESH_Mesh theMesh)

Member Function Documentation

◆ AddElement() [1/2]

SMDS_MeshElement * SMESH_MeshEditor::AddElement ( const std::vector< const SMDS_MeshNode * > &  nodes,
const ElemFeatures features 
)

◆ AddElement() [2/2]

SMDS_MeshElement * SMESH_MeshEditor::AddElement ( const std::vector< smIdType > &  nodeIDs,
const ElemFeatures features 
)

Add element.

References AddElement(), DriverMED::FindNode(), and GetMeshDS().

◆ AddToSameGroups()

◆ AffectedElemGroupsInRegion()

bool SMESH_MeshEditor::AffectedElemGroupsInRegion ( const TIDSortedElemSet theElems,
const TIDSortedElemSet theNodesNot,
const TopoDS_Shape &  theShape,
TIDSortedElemSet theAffectedElems 
)

Identify the elements that will be affected by node duplication (actual duplication is not performed).

This method is the first step of DoubleNodeElemGroupsInRegion.

Parameters
theElems- list of groups of elements (edges or faces) to be replicated
theNodesNot- list of groups of nodes not to replicate
theShape- shape to detect affected elements (element which geometric center located on or inside shape). If the shape is null, detection is done on faces orientations (select elements with a gravity center on the side given by faces normals). This mode (null shape) is faster, but works only when theElems are faces, with coherents orientations. The replicated nodes should be associated to affected elements.
Returns
true
See also
DoubleNodeElemGroupsInRegion()

References cast2Node, Face, SMDS_MeshNode::GetInverseElementIterator(), and SMDS_MeshElement::nodesIterator().

Referenced by SMESH_MeshEditor_i::AffectedElemGroupsInRegion().

◆ applyMerge()

bool SMESH_MeshEditor::applyMerge ( const SMDS_MeshElement elems,
std::vector< ElemFeatures > &  newElemDefs,
TNodeNodeMap nodeNodeMap,
const bool  avoidMakingHoles 
)
private

◆ BestSplit()

int SMESH_MeshEditor::BestSplit ( const SMDS_MeshElement theQuad,
SMESH::Controls::NumericalFunctorPtr  theCriterion 
)

Find better diagonal for splitting.

Parameters
theQuad- The face to find better splitting of.
theCriterion- Is used to choose a diagonal for splitting.
Returns
int - 1 for 1-3 diagonal, 2 for 2-4, -1 - for errors.

References ClearLastCreated(), getBadRate(), SMDS_MeshElement::GetType(), SMDS_MeshElement::IsQuadratic(), SMDS_MeshElement::NbNodes(), SMDS_MeshElement::nodesIterator(), and SMDSAbs_Face.

Referenced by SMESH_MeshEditor_i::BestSplit().

◆ CheckFreeBorderNodes()

bool SMESH_MeshEditor::CheckFreeBorderNodes ( const SMDS_MeshNode theNode1,
const SMDS_MeshNode theNode2,
const SMDS_MeshNode theNode3 = 0 
)
static

References FindFreeBorder().

◆ ClearLastCreated()

◆ convertElemToQuadratic()

◆ ConvertFromQuadratic() [1/2]

◆ ConvertFromQuadratic() [2/2]

◆ ConvertToQuadratic() [1/2]

void SMESH_MeshEditor::ConvertToQuadratic ( const bool  theForce3d,
const bool  theToBiQuad 
)

References SMESH_MesherHelper::AddEdge(), SMESH_MesherHelper::AddFace(), SMESH_MesherHelper::AddPolygonalFace(), SMESH_MesherHelper::AddPolyhedralVolume(), SMESH_MesherHelper::AddTLinks(), SMESH_MesherHelper::AddVolume(), SMDS_MeshElement::begin_nodes(), convertElemToQuadratic(), SMDS_Mesh::edgesIterator(), SMDS_MeshElement::end_nodes(), SMDS_Mesh::facesIterator(), SMESH_MesherHelper::FixQuadraticElements(), SMDS_MeshCell::GetEntityType(), SMDS_MeshElement::GetID(), GetMeshDS(), SMDS_MeshCell::GetNode(), SMESH_Mesh::GetShapeToMesh(), SMESH_Mesh::GetSubMeshContaining(), SMESH_subMesh::GetSubMeshDS(), SMESH_subMesh::GetSubShape(), SMESH_Mesh::HasShapeToMesh(), SMDS_MeshCell::IsQuadratic(), myError, myMesh, SMDS_Mesh::NbEdges(), SMDS_Mesh::NbFaces(), SMDS_Mesh::NbVolumes(), SMESHDS_Mesh::RemoveFreeElement(), SMESHDS_Mesh::RemoveFreeNode(), ReplaceElemInGroups(), SMESH_MesherHelper::SetElementsOnShape(), SMESH_MesherHelper::SetIsBiQuadratic(), SMESH_MesherHelper::SetIsQuadratic(), SMESH_MesherHelper::SetSubShape(), SMDSEntity_BiQuad_Penta, SMDSEntity_BiQuad_Quadrangle, SMDSEntity_BiQuad_Triangle, SMDSEntity_Hexa, SMDSEntity_Hexagonal_Prism, SMDSEntity_Penta, SMDSEntity_Polyhedra, SMDSEntity_Pyramid, SMDSEntity_Quad_Hexa, SMDSEntity_Quad_Penta, SMDSEntity_Quad_Quadrangle, SMDSEntity_Quad_Triangle, SMDSEntity_Quadrangle, SMDSEntity_Tetra, SMDSEntity_Triangle, SMDSEntity_TriQuad_Hexa, SMESH_MesherHelper::ToFixNodeParameters(), and SMDS_Mesh::volumesIterator().

Referenced by StdMeshers_Projection_2D::Compute(), and SMESH_MeshEditor_i::convertToQuadratic().

◆ ConvertToQuadratic() [2/2]

void SMESH_MeshEditor::ConvertToQuadratic ( const bool  theForce3d,
TIDSortedElemSet theElements,
const bool  theToBiQuad 
)

◆ copyPosition()

◆ Create0DElementsOnAllNodes()

void SMESH_MeshEditor::Create0DElementsOnAllNodes ( const TIDSortedElemSet elements,
TIDSortedElemSet all0DElems,
const bool  duplicateElements 
)

Create 0D elements on all nodes of the given object.

Parameters
elements- Elements on whose nodes to create 0D elements; if empty, the all mesh is treated
all0DElems- returns all 0D elements found or created on nodes of elements
duplicateElements- to add one more 0D element to a node or not

References cast2Node, SMDS_Mesh::elementsIterator(), SMESHUtils::elemSetIterator(), SMDS_MeshNode::GetInverseElementIterator(), GetMeshDS(), myLastCreatedElems, SMDS_MeshElement::nodesIterator(), SMDSAbs_0DElement, and SMDSAbs_Node.

Referenced by SMESH_MeshEditor_i::Create0DElementsOnAllNodes().

◆ CreateFlatElementsOnFacesGroups()

bool SMESH_MeshEditor::CreateFlatElementsOnFacesGroups ( const std::vector< TIDSortedElemSet > &  theElems)

Double nodes on some external faces and create flat elements.

Flat elements are mainly used by some types of mechanic calculations.

Each group of the list must be constituted of faces. Triangles are transformed in prisms, and quadrangles in hexahedrons.

Parameters
theElems- list of groups of faces, where a group of faces is a set of SMDS_MeshElements sorted by Id.
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References SMESHDS_Group::Add(), SMESH_Mesh::AddGroup(), SMESHDS_Mesh::AddNode(), SMESHDS_Mesh::AddVolume(), copyPosition(), SMDS_Mesh::DownCast(), SMDS_MeshElement::GetID(), SMESH_Mesh::GetMeshDS(), SMDS_MeshCell::GetVtkType(), SMDS_MeshElement::IsMediumNode(), SMDS_MeshCell::IsQuadratic(), myMesh, SMDS_MeshCell::nodeIterator(), SMDSAbs_Volume, SMDS_MeshNode::X(), SMDS_MeshNode::Y(), and SMDS_MeshNode::Z().

Referenced by SMESH_MeshEditor_i::CreateFlatElementsOnFacesGroups().

◆ CreateHoleSkin()

void SMESH_MeshEditor::CreateHoleSkin ( double  radius,
const TopoDS_Shape &  theShape,
SMESH_NodeSearcher theNodeSearcher,
const char *  groupName,
std::vector< double > &  nodesCoords,
std::vector< std::vector< int > > &  listOfListOfNodes 
)

◆ DeleteDiag()

◆ DoubleElements()

◆ DoubleNodes() [1/2]

bool SMESH_MeshEditor::DoubleNodes ( const std::list< int > &  theListOfNodes,
const std::list< int > &  theListOfModifiedElems 
)

Creates a hole in a mesh by doubling the nodes of some particular elements.

Parameters
theNodes- identifiers of nodes to be doubled
theModifiedElems- identifiers of elements to be updated by the new (doubled) nodes. If list of element identifiers is empty then nodes are doubled but they not assigned to elements
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References SMESHDS_Mesh::AddNode(), SMDS_MeshElement::begin_nodes(), SMESHDS_Mesh::ChangeElementNodes(), ClearLastCreated(), copyPosition(), SMDS_MeshElement::end_nodes(), SMDS_Mesh::FindElement(), SMDS_Mesh::FindNode(), GetMeshDS(), myLastCreatedNodes, SMDS_MeshNode::X(), SMDS_MeshNode::Y(), and SMDS_MeshNode::Z().

Referenced by SMESH_MeshEditor_i::DoubleNodeElem(), SMESH_MeshEditor_i::DoubleNodeElemGroup(), SMESH_MeshEditor_i::DoubleNodeElemGroup2New(), SMESH_MeshEditor_i::DoubleNodeElemGroups(), SMESH_MeshEditor_i::DoubleNodeElemGroups2New(), SMESH_MeshEditor_i::DoubleNodeGroups(), SMESH_MeshEditor_i::DoubleNodes(), and DoubleNodesInRegion().

◆ DoubleNodes() [2/2]

bool SMESH_MeshEditor::DoubleNodes ( const TIDSortedElemSet theElems,
const TIDSortedElemSet theNodesNot,
const TIDSortedElemSet theAffectedElems 
)

Creates a hole in a mesh by doubling the nodes of some particular elements.

Parameters
theElems- the list of elements (edges or faces) to be replicated The nodes for duplication could be found from these elements
theNodesNot- list of nodes to NOT replicate
theAffectedElems- the list of elements (cells and edges) to which the replicated nodes should be associated to.
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References ClearLastCreated(), doubleNodes(), and GetMeshDS().

◆ doubleNodes()

bool SMESH_MeshEditor::doubleNodes ( SMESHDS_Mesh theMeshDS,
const TIDSortedElemSet theElems,
const TIDSortedElemSet theNodesNot,
TNodeNodeMap theNodeNodeMap,
const bool  theIsDoubleElem 
)
private

Creates a hole in a mesh by doubling the nodes of some particular elements.

Parameters
theMeshDS- mesh instance
theElems- the elements replicated or modified (nodes should be changed)
theNodesNot- nodes to NOT replicate
theNodeNodeMap- relation of old node to new created node
theIsDoubleElem- flag os to replicate element or modify
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References AddElement(), SMESHDS_Mesh::AddNode(), SMESHDS_Mesh::ChangeElementNodes(), SMESHDS_Mesh::ChangePolyhedronNodes(), copyPosition(), SMDS_MeshElement::GetEntityType(), SMDS_MeshVolume::GetQuantities(), SMESH_MeshEditor::ElemFeatures::Init(), MESSAGE, myLastCreatedNodes, SMDS_MeshElement::NbNodes(), SMDS_MeshElement::nodesIterator(), SMDSEntity_Polyhedra, SMDS_MeshNode::X(), SMDS_MeshNode::Y(), and SMDS_MeshNode::Z().

Referenced by DoubleNodes().

◆ DoubleNodesInRegion()

bool SMESH_MeshEditor::DoubleNodesInRegion ( const TIDSortedElemSet theElems,
const TIDSortedElemSet theNodesNot,
const TopoDS_Shape &  theShape 
)

Creates a hole in a mesh by doubling the nodes of some particular elements.

Parameters
theElems- group of of elements (edges or faces) to be replicated
theNodesNot- group of nodes not to replicate
theShape- shape to detect affected elements (element which geometric center located on or inside shape). The replicated nodes should be associated to affected elements.
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References SMESHUtils::Deleter< TOBJ >::_obj, cast2Node, DoubleNodes(), Face, SMDS_MeshNode::GetInverseElementIterator(), and SMDS_MeshElement::nodesIterator().

Referenced by SMESH_MeshEditor_i::DoubleNodeElemGroupInRegion(), SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(), and SMESH_MeshEditor_i::DoubleNodeElemInRegion().

◆ DoubleNodesOnGroupBoundaries()

bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries ( const std::vector< TIDSortedElemSet > &  theElems,
bool  createJointElems,
bool  onAllBoundaries 
)

Double nodes on shared faces between groups of volumes and create flat elements on demand.

The list of groups must contain at least two groups. The groups have to be disjoint: no common element into two different groups. The nodes of the internal faces at the boundaries of the groups are doubled. Optionally, the internal faces are replaced by flat elements. Triangles are transformed into prisms, and quadrangles into hexahedrons. The flat elements are stored in groups of volumes. These groups are named according to the position of the group in the list: the group j_n_p is the group of the flat elements that are built between the group #n and the group #p in the list. If there is no shared faces between the group #n and the group #p in the list, the group j_n_p is not created. All the flat elements are gathered into the group named "joints3D" (or "joints2D" in 2D situation). The flat element of the multiple junctions between the simple junction are stored in a group named "jointsMultiples".

Parameters
theElems- list of groups of volumes, where a group of volume is a set of SMDS_MeshElements sorted by Id.
createJointElems- if TRUE, create the elements
onAllBoundaries- if TRUE, the nodes and elements are also created on the boundary between theDomains and the rest mesh
Returns
TRUE if operation has been completed successfully, FALSE otherwise

References SMESHDS_Group::Add(), SMDS_Mesh::AddFaceFromVtkIds(), SMESH_Mesh::AddGroup(), SMESHDS_Mesh::AddNode(), SMDS_Mesh::AddVolumeFromVtkIds(), SMESHDS_Mesh::BuildDownWardConnectivity(), DownIdType::cellId, SMDS_UnstructuredGrid::CellIdToDownId(), DownIdType::cellType, CHRONO, CHRONOSTOP, SMESHDS_Mesh::CleanDownWardConnectivity(), copyPosition(), SMDS_UnstructuredGrid::DeleteLinks(), SMDS_UnstructuredGrid::extrudeVolumeFromFace(), SMDS_Mesh::FindElement(), SMDS_Mesh::FindNodeVtk(), SMDS_Mesh::FromVtkToSmds(), SMDS_UnstructuredGrid::getDownArray(), SMDS_Downward::getDownCells(), SMDS_Downward::getDownTypes(), SMDS_Mesh::GetGrid(), SMDS_MeshElement::GetID(), SMDS_UnstructuredGrid::GetLinks(), SMESH_Mesh::GetMeshDS(), GetMeshDS(), SMDS_UnstructuredGrid::GetNeighbors(), SMDS_UnstructuredGrid::GetNodeIds(), SMDS_Downward::getNodes(), SMDS_Downward::getNumberOfDownCells(), SMDS_Downward::getNumberOfUpCells(), SMDS_UnstructuredGrid::GetParentVolumes(), SMDS_MeshCell::GetType(), SMDS_Downward::getUpCells(), SMDS_Downward::getUpTypes(), SMDS_Downward::getVtkCellId(), SMDS_MeshElement::GetVtkID(), MESSAGE, SMESHDS_Mesh::ModifyCellNodes(), myMesh, NBMAXNEIGHBORS, OrientedAngle(), SMESH_Mesh::RemoveGroup(), SMDSAbs_Face, and SMDSAbs_Volume.

Referenced by SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries().

◆ ExtrusionAlongTrack()

◆ ExtrusionSweep() [1/2]

SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::ExtrusionSweep ( TIDSortedElemSet  theElems[2],
const gp_Vec &  theStep,
const int  theNbSteps,
TTElemOfElemListMap newElemsMap,
const int  theFlags,
const double  theTolerance = 1.e-6 
)

Generate new elements by extrusion of theElements It is a method used in .idl file.

All functionality is implemented in the next method (see below) which is used in the current method.

Parameters
theElems- list of elements for extrusion
newElemsMapreturns history of extrusion
theFlagsset flags for performing extrusion (see description of enum ExtrusionFlags for additional information)
theTolerance- uses for comparing locations of nodes if flag EXTRUSION_FLAG_SEW is set

References ExtrusionSweep().

Referenced by SMESH_MeshEditor_i::AdvancedExtrusion(), ExtrusionAlongTrack(), SMESH_MeshEditor_i::ExtrusionByNormal(), ExtrusionSweep(), and SMESH_MeshEditor_i::ExtrusionSweepObjects().

◆ ExtrusionSweep() [2/2]

SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::ExtrusionSweep ( TIDSortedElemSet  theElems[2],
ExtrusParam theParams,
TTElemOfElemListMap newElemsMap 
)

◆ FindCoincidentNodes()

void SMESH_MeshEditor::FindCoincidentNodes ( TIDSortedNodeSet theNodes,
const double  theTolerance,
TListOfListOfNodes theGroupsOfNodes,
bool  theSeparateCornersAndMedium 
)

Return list of group of nodes close to each other within theTolerance.

** Search among theNodes or in the whole mesh if theNodes is empty using

  • an Octree algorithm
    Parameters
    [in,out]theNodes- the nodes to treat
    [in]theTolerance- the tolerance
    [out]theGroupsOfNodes- the result groups of coincident nodes
    [in]theSeparateCornersAndMedium- if true, in quadratic mesh puts corner and medium nodes in separate groups

References ClearLastCreated(), SMESH_OctreeNode::FindCoincidentNodes(), GetMeshDS(), SMESH_MesherHelper::IsMedium(), myMesh, SMESH_Mesh::NbEdges(), SMESH_Mesh::NbFaces(), SMESH_Mesh::NbVolumes(), SMDS_Mesh::nodesIterator(), and ORDER_QUADRATIC.

Referenced by SMESH_Gen_i::ConcatenateCommon(), SMESH_MeshEditor_i::findCoincidentNodes(), and StdMeshers_Cartesian_VL::ViscousBuilder::MakeViscousLayers().

◆ FindEqualElements()

◆ FindFreeBorder()

bool SMESH_MeshEditor::FindFreeBorder ( const SMDS_MeshNode theFirstNode,
const SMDS_MeshNode theSecondNode,
const SMDS_MeshNode theLastNode,
std::list< const SMDS_MeshNode * > &  theNodes,
std::list< const SMDS_MeshElement * > &  theFaces 
)
static

◆ FindMatchingNodes()

SMESH_MeshEditor::Sew_Error SMESH_MeshEditor::FindMatchingNodes ( std::set< const SMDS_MeshElement * > &  theSide1,
std::set< const SMDS_MeshElement * > &  theSide2,
const SMDS_MeshNode theFirstNode1,
const SMDS_MeshNode theFirstNode2,
const SMDS_MeshNode theSecondNode1,
const SMDS_MeshNode theSecondNode2,
TNodeNodeMap nReplaceMap 
)
static

Find corresponding nodes in two sets of faces.

Parameters
theSide1- first face set
theSide2- second first face
theFirstNode1- a boundary node of set 1
theFirstNode2- a node of set 2 corresponding to theFirstNode1
theSecondNode1- a boundary node of set 1 linked with theFirstNode1
theSecondNode2- a node of set 2 corresponding to theSecondNode1
nReplaceMap- output map of corresponding nodes
Returns
Sew_Error - is a success or not
Parameters
theSide1- first face set
theSide2- second first face
theFirstNode1- a boundary node of set 1
theFirstNode2- a node of set 2 corresponding to theFirstNode1
theSecondNode1- a boundary node of set 1 linked with theFirstNode1
theSecondNode2- a node of set 2 corresponding to theSecondNode1
nReplaceMap- output map of corresponding nodes
Returns
bool - is a success or not

References SMDS_MeshElement::GetID(), SMDS_MeshNode::GetInverseElementIterator(), SMDS_MeshElement::GetNode(), SMDS_MeshElement::GetNodeIndex(), SMDS_MeshElement::IsQuadratic(), MESSAGE, SMDS_MeshElement::NbNodes(), reverse(), SEW_BAD_SIDE1_NODES, SEW_BAD_SIDE2_NODES, SEW_OK, SEW_TOPO_DIFF_SETS_OF_ELEMENTS, and SMDSAbs_Face.

Referenced by StdMeshers_ProjectionUtils::FindMatchingNodesOnFaces(), and VISCOUS_3D::ShrinkFace::IsPeriodic().

◆ FindShape()

◆ generateGroups()

SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::generateGroups ( const SMESH_SequenceOfElemPtr nodeGens,
const SMESH_SequenceOfElemPtr elemGens,
const std::string &  postfix,
SMESH_Mesh targetMesh = 0,
const bool  topPresent = true 
)
private

Create groups of elements made during transformation.

Parameters
nodeGens- nodes making corresponding myLastCreatedNodes
elemGens- elements making corresponding myLastCreatedElems
postfix- to append to names of new groups
targetMesh- mesh to create groups in
topPresent- is there "top" elements that are created by sweeping
nodeGens- nodes making corresponding myLastCreatedNodes
elemGens- elements making corresponding myLastCreatedElems
postfix- to push_back to names of new groups
targetMesh- mesh to create groups in
topPresent- is there are "top" elements that are created by sweeping

References SMDS_MeshGroup::Add(), SMESH_Mesh::AddGroup(), SMESHDS_GroupBase::Contains(), SMESHDS_Group::GetElements(), SMESH_Group::GetGroupDS(), SMESH_Mesh::GetGroupIds(), SMESH_Mesh::GetGroups(), SMESHDS_GroupBase::GetID(), GetMesh(), SMESH_Mesh::GetMeshDS(), SMESH_Group::GetName(), SMESHDS_GroupBase::GetStoreName(), SMESHDS_GroupBase::GetType(), SMDS_MeshElement::GetType(), SMESHDS_Group::IsEmpty(), SMESHDS_GroupBase::IsEmpty(), MESSAGE, myLastCreatedElems, myLastCreatedNodes, SMESHDS_Mesh::RemoveGroup(), SMESHDS_GroupBase::SetStoreName(), SMESHDS_Group::SetType(), and SMDSAbs_NbElementTypes.

Referenced by ExtrusionSweep(), Offset(), RotationSweep(), and Transform().

◆ GetError()

◆ GetHexaFacetsToSplit()

void SMESH_MeshEditor::GetHexaFacetsToSplit ( TIDSortedElemSet theHexas,
const gp_Ax1 &  theFacetNormal,
TFacetOfElem theFacets 
)

◆ GetLastCreatedElems()

◆ GetLastCreatedNodes()

const SMESH_SequenceOfElemPtr & SMESH_MeshEditor::GetLastCreatedNodes ( ) const

◆ GetLinkedNodes()

void SMESH_MeshEditor::GetLinkedNodes ( const SMDS_MeshNode theNode,
TIDSortedElemSet linkedNodes,
SMDSAbs_ElementType  type = SMDSAbs_All 
)
static

◆ GetMesh()

◆ GetMeshDS()

◆ InsertNodesIntoLink()

◆ InverseDiag() [1/2]

◆ InverseDiag() [2/2]

◆ IsMedium()

bool SMESH_MeshEditor::IsMedium ( const SMDS_MeshNode node,
const SMDSAbs_ElementType  typeToCheck = SMDSAbs_All 
)
static

Returns true if given node is medium.

Parameters
n- node to check
typeToCheck- type of elements containing the node to ask about node status
Returns
bool - check result

References SMDS_MeshNode::GetInverseElementIterator(), and SMDS_MeshElement::IsMediumNode().

Referenced by StdMeshers_FaceSide::GetEdgeNodes(), SMESH_MesherHelper::IsMedium(), SMESH_Pattern::Load(), and Smooth().

◆ isVariantOverConstrained()

bool SMESH_MeshEditor::isVariantOverConstrained ( SMDS_VolumeTool vol,
const int *  connVariants 
)

Return true if one of the tetras included in the variant will be an overconstrained tetra.

◆ linearAngleVariation()

void SMESH_MeshEditor::linearAngleVariation ( const int  NbSteps,
std::list< double > &  theAngles 
)
staticprivate

◆ linearScaleVariation()

void SMESH_MeshEditor::linearScaleVariation ( const int  NbSteps,
std::list< double > &  theScales 
)
staticprivate

◆ Make2DMeshFrom3D()

bool SMESH_MeshEditor::Make2DMeshFrom3D ( )

Generated skin mesh (containing 2D cells) from 3D mesh The created 2D mesh elements based on nodes of free faces of boundary volumes.

Generates skin mesh (containing 2D cells) from 3D mesh The created 2D mesh elements based on nodes of free faces of boundary volumes.

Returns
TRUE if operation has been completed successfully, FALSE otherwise

References AddElement(), SMDS_Mesh::FindElement(), SMDS_VolumeTool::GetFaceNodes(), GetMeshDS(), SMDS_VolumeTool::IsFreeFace(), SMDS_MeshCell::IsQuadratic(), SMDS_VolumeTool::NbFaceNodes(), SMDS_VolumeTool::NbFaces(), SMDS_VolumeTool::SetExternalNormal(), SMESH_MeshEditor::ElemFeatures::SetPoly(), SMESH_MeshEditor::ElemFeatures::SetQuad(), SMDSAbs_Face, and SMDS_Mesh::volumesIterator().

Referenced by SMESH_MeshEditor_i::Make2DMeshFrom3D().

◆ MakeBoundaryMesh()

int SMESH_MeshEditor::MakeBoundaryMesh ( const TIDSortedElemSet elements,
Bnd_Dimension  dimension,
SMESH_Group group = 0,
SMESH_Mesh targetMesh = 0,
bool  toCopyElements = false,
bool  toCopyExistingBoundary = false,
bool  toAddExistingBondary = false,
bool  aroundElements = false,
bool  toCreateAllElements = false 
)

Creates missing boundary elements.

Parameters
elements- elements whose boundary is to be checked
dimension- defines type of boundary elements to create
group- a group to store created boundary elements in
targetMesh- a mesh to store created boundary elements in
toCopyElements- if true, the checked elements will be copied into the targetMesh
toCopyExistingBoundary- if true, not only new but also pre-existing boundary elements will be copied into the targetMesh
toAddExistingBondary- if true, not only new but also pre-existing boundary elements will be added into the new group
aroundElements- if true, elements will be created on boundary of given elements else, on boundary of the whole mesh.
Returns
nb of added boundary elements

References AddElement(), SMESH_MesherHelper::AddNode(), BND_1DFROM2D, BND_2DFROM3D, SMDS_Mesh::elementsIterator(), SMESHUtils::elemSetIterator(), SMDS_Mesh::FindEdge(), SMDS_Mesh::FindElement(), SMESH_MeshAlgos::FindFaceInSet(), SMDS_VolumeTool::GetCenterNodeIndex(), SMDS_VolumeTool::GetFaceBaryCenter(), SMDS_VolumeTool::GetFaceNodes(), SMESH_Group::GetGroupDS(), SMESH_MesherHelper::GetMediumPos(), GetMesh(), GetMeshDS(), SMDS_MeshElement::GetNode(), SMDS_MeshElement::GetNodeIndex(), SMDS_VolumeTool::GetNodes(), SMDS_MeshElement::GetType(), SMESH_Mesh::HasShapeToMesh(), SMESHDS_Mesh::IndexToShape(), SMESH_MeshEditor::ElemFeatures::Init(), SMDS_MeshElement::interlacedNodesIterator(), SMDS_VolumeTool::IsFreeFace(), SMDS_MeshElement::IsQuadratic(), SMESH_MesherHelper::IsSubShape(), myLastCreatedElems, myMesh, SMDS_MeshElement::NbCornerNodes(), SMDS_VolumeTool::NbFaceNodes(), SMDS_VolumeTool::NbFaces(), SMDS_MeshElement::NbNodes(), SMDS_VolumeTool::Set(), SMDS_VolumeTool::SetExternalNormal(), SMESHDS_Mesh::SetMeshElementOnShape(), SMDSAbs_Edge, SMDSAbs_Face, and SMDSAbs_Volume.

Referenced by VISCOUS_3D::_ViscousBuilder::Compute(), SMESH_MeshEditor_i::MakeBoundaryElements(), and SMESH_MeshEditor_i::MakeBoundaryMesh().

◆ makeWalls()

void SMESH_MeshEditor::makeWalls ( TNodeOfNodeListMap mapNewNodes,
TTElemOfElemListMap newElemsMap,
TElemOfVecOfNnlmiMap elemNewNodesMap,
TIDSortedElemSet elemSet,
const int  nbSteps,
SMESH_SequenceOfElemPtr srcElements 
)
private

◆ MergeElements()

void SMESH_MeshEditor::MergeElements ( TListOfListOfElementsID theGroupsOfElementsID)

◆ MergeEqualElements()

void SMESH_MeshEditor::MergeEqualElements ( )

◆ MergeNodes()

◆ Offset()

SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::Offset ( TIDSortedElemSet theElements,
const double  theValue,
SMESH_Mesh theTgtMesh,
const bool  theMakeGroups,
const bool  theCopyElements,
const bool  theFixSelfIntersection 
)

Make an offset mesh from a source 2D mesh.

Parameters
[in]theElements- source faces
[in]theValue- offset value
[out]theTgtMesh- a mesh to add offset elements to
[in]theMakeGroups- to generate groups
Returns
PGroupIDs - IDs of created groups. NULL means failure

References AddElement(), SMESHDS_Mesh::AddNodeWithID(), ClearLastCreated(), SMDS_Mesh::elementsIterator(), SMESHUtils::elemSetIterator(), SMDS_Mesh::FindElement(), SMDS_Mesh::FindNode(), generateGroups(), SMDS_MeshElement::GetID(), SMESH_Mesh::GetMeshDS(), GetMeshDS(), SMESH_MeshEditor::ElemFeatures::Init(), SMESH_MeshAlgos::MakeOffset(), SMDS_Mesh::MaxNodeID(), myLastCreatedElems, myLastCreatedNodes, myMesh, SMESH_MeshEditor::ElemFeatures::myNodes, SMESHDS_Mesh::RemoveFreeElement(), and SMDSAbs_Face.

Referenced by SMESH_MeshEditor_i::Offset().

◆ OrientedAngle()

double SMESH_MeshEditor::OrientedAngle ( const gp_Pnt &  p0,
const gp_Pnt &  p1,
const gp_Pnt &  g1,
const gp_Pnt &  g2 
)

compute an oriented angle between two planes defined by four points.

The vector (p0,p1) defines the intersection of the 2 planes (p0,p1,g1) and (p0,p1,g2)

Parameters
p0base of the rotation axe
p1extremity of the rotation axe
g1belongs to the first plane
g2belongs to the second plane

Referenced by DoubleNodesOnGroupBoundaries().

◆ QuadTo4Tri()

◆ QuadToTri() [1/2]

◆ QuadToTri() [2/2]

◆ Remove()

◆ RemoveElemFromGroups()

void SMESH_MeshEditor::RemoveElemFromGroups ( const SMDS_MeshElement element,
SMESHDS_Mesh aMesh 
)
static

◆ RemoveNodeWithReconnection()

void SMESH_MeshEditor::RemoveNodeWithReconnection ( const SMDS_MeshNode node)

◆ removeQuadElem()

◆ Reorient()

◆ Reorient2D()

int SMESH_MeshEditor::Reorient2D ( TIDSortedElemSet theFaces,
const gp_Vec &  theDirection,
TIDSortedElemSet theRefFaces,
bool  theAllowNonManifold 
)

Reorient faces.

Parameters
theFaces- the faces to reorient. If empty the whole mesh is meant
theDirection- desired direction of normal of theRefFaces. It can be (0,0,0) in order to keep orientation of theRefFaces.
theRefFaces- correctly oriented faces whose orientation defines orientation of other faces.
Returns
number of reoriented faces.

References SMESH_MeshAlgos::FaceNormal(), SMDS_Mesh::facesIterator(), SMESH_MeshAlgos::FindFaceInSet(), GetMeshDS(), SMDS_MeshElement::GetNode(), SMDS_MeshElement::isMarked(), SMDS_MeshElement::NbCornerNodes(), Reorient(), and SMDS_Mesh::SetAllCellsNotMarked().

Referenced by SMESH_MeshEditor_i::Reorient2D(), and SMESH_MeshEditor_i::Reorient2DByNeighbours().

◆ Reorient2DBy3D()

int SMESH_MeshEditor::Reorient2DBy3D ( TIDSortedElemSet theFaces,
TIDSortedElemSet theVolumes,
const bool  theOutsideNormal 
)

Reorient faces basing on orientation of adjacent volumes.

Parameters
theFaces- faces to reorient. If empty, all mesh faces are treated.
theVolumes- reference volumes.
theOutsideNormal- to orient faces to have their normal pointing either outside or inside the adjacent volumes.
Returns
number of reoriented faces.

References SMDS_MeshElement::begin_nodes(), SMDS_Mesh::elementsIterator(), SMESHUtils::elemSetIterator(), SMDS_MeshElement::end_nodes(), SMDS_VolumeTool::GetFaceIndex(), SMDS_VolumeTool::GetFaceNodes(), GetMeshDS(), SMDS_MeshElement::GetNodeIndex(), SMDS_MeshElement::GetType(), SMDS_MeshElement::NbCornerNodes(), Reorient(), SMDS_VolumeTool::Set(), SMDS_VolumeTool::SetExternalNormal(), SMDSAbs_Face, and SMDSAbs_Volume.

Referenced by SMESH_MeshEditor_i::Reorient2DBy3D().

◆ ReplaceElemInGroups() [1/2]

void SMESH_MeshEditor::ReplaceElemInGroups ( const SMDS_MeshElement elemToRm,
const SMDS_MeshElement elemToAdd,
SMESHDS_Mesh aMesh 
)
static

◆ ReplaceElemInGroups() [2/2]

void SMESH_MeshEditor::ReplaceElemInGroups ( const SMDS_MeshElement elemToRm,
const std::vector< const SMDS_MeshElement * > &  elemToAdd,
SMESHDS_Mesh aMesh 
)
static

Replace elemToRm by elemToAdd in the all groups.

References SMDS_MeshGroup::Add(), SMESHDS_Mesh::GetGroups(), SMDS_MeshGroup::Remove(), and SMESHDS_Group::SMDSGroup().

◆ RotationSweep()

◆ SewFreeBorder()

◆ SewSideElements()

◆ SimplifyFace()

int SMESH_MeshEditor::SimplifyFace ( const std::vector< const SMDS_MeshNode * > &  faceNodes,
std::vector< const SMDS_MeshNode * > &  poly_nodes,
std::vector< int > &  quantities 
) const

Referenced by applyMerge().

◆ Smooth()

◆ SplitBiQuadraticIntoLinear()

void SMESH_MeshEditor::SplitBiQuadraticIntoLinear ( TIDSortedElemSet theElems)

Split bi-quadratic elements into linear ones without creation of additional nodes.

  • bi-quadratic triangle will be split into 3 linear quadrangles;
  • bi-quadratic quadrangle will be split into 4 linear quadrangles;
  • tri-quadratic hexahedron will be split into 8 linear hexahedra; Quadratic elements of lower dimension adjacent to the split bi-quadratic element will be split in order to keep the mesh conformal.
    Parameters
    elems- elements to split

References SMESHDS_SubMesh::AddElement(), AddElement(), SMDS_MeshElement::begin_nodes(), SMDS_ElementHolder::clear(), SMDS_MeshElement::end_nodes(), SMDS_MeshElement::GetEntityType(), GetMeshDS(), SMDS_MeshElement::getshapeId(), SMESHDS_Mesh::MeshElements(), SMESHDS_Mesh::RemoveFreeElement(), ReplaceElemInGroups(), SMDSAbs_Edge, SMDSAbs_Face, SMDSAbs_Volume, SMDSEntity_BiQuad_Quadrangle, SMDSEntity_BiQuad_Triangle, SMDSEntity_Quad_Edge, and SMDSEntity_TriQuad_Hexa.

Referenced by SMESH_MeshEditor_i::SplitBiQuadraticIntoLinear().

◆ SplitEdge()

◆ SplitFace()

◆ SplitVolumes()

void SMESH_MeshEditor::SplitVolumes ( const TFacetOfElem theElems,
const int  theMethodFlags,
const bool  avoidOverConstrainedVolumes = false 
)

Split volumic elements into tetrahedra or prisms.

If facet ID < 0, element is split into tetrahedra, else a hexahedron is split into prisms so that the given facet is split into triangles if avoidOverConstrainedVolumes is True , the split method will choose the variant with no over-constrained volumes.

References SMESHDS_SubMesh::AddElement(), SMESH_MesherHelper::CheckNodeUV(), SMESHDS_SubMesh::Contains(), Face, FindShape(), SMDS_VolumeTool::GetBaryCenter(), SMDS_VolumeTool::GetCenterNodeIndex(), SMDS_MeshElement::GetEntityType(), SMDS_VolumeTool::GetFaceBaryCenter(), SMDS_VolumeTool::GetFaceNodes(), SMDS_VolumeTool::GetFaceNodesIndices(), SMESHDS_SubMesh::GetID(), GetMesh(), GetMeshDS(), SMDS_VolumeTool::GetNodes(), SMDS_MeshElement::GetType(), SMESHDS_Mesh::IndexToShape(), SMDS_VolumeTool::IsFaceExternal(), SMDS_MeshElement::IsQuadratic(), SMESHDS_Mesh::MeshElements(), SMESHDS_Mesh::MoveNode(), myLastCreatedElems, myLastCreatedNodes, SMDS_VolumeTool::NbFaceNodes(), SMDS_VolumeTool::NbFaces(), SMDS_VolumeTool::NbNodes(), SMDS_MeshElement::NbNodes(), SMESHDS_Mesh::RemoveFreeElement(), SMESHDS_Mesh::RemoveNode(), SMESHDS_SubMesh::RemoveNode(), ReplaceElemInGroups(), SMDS_VolumeTool::Set(), SMESHDS_Mesh::SetNodeOnFace(), SMESH_MesherHelper::SetSubShape(), SMDSAbs_Face, SMDSAbs_Volume, SMDSEntity_Quad_Tetra, SMDSEntity_Tetra, SMDSEntity_TriQuad_Hexa, and SMESH_MesherHelper::ToFixNodeParameters().

Referenced by SMESH_MeshEditor_i::SplitHexahedraIntoPrisms(), SMESH_MeshEditor_i::SplitVolumesIntoTetra(), and SMESH_MeshEditor_i::SplitVolumesIntoTetraAvoidOverConstrainedVolumes().

◆ sweepElement()

◆ Transform()

SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::Transform ( TIDSortedElemSet theElems,
const gp_Trsf &  theTrsf,
const bool  theCopy,
const bool  theMakeGroups,
SMESH_Mesh theTargetMesh = 0 
)

◆ TriToQuad()

bool SMESH_MeshEditor::TriToQuad ( TIDSortedElemSet theElems,
SMESH::Controls::NumericalFunctorPtr  theCriterion,
const double  theMaxAngle 
)

Fuse neighbour triangles into quadrangles.

Parameters
theElems- The triangles to be fused.
theCriterion- Is used to choose a neighbour to fuse with.
theMaxAngle- Is a max angle between element normals at which fusion is still performed; theMaxAngle is measured in radians.
Returns
bool - Success or not.

References SMESHDS_Mesh::AddFace(), AddToSameGroups(), ClearLastCreated(), getAngle(), getBadRate(), GetMeshDS(), getNodesFromTwoTria(), getQuadrangleNodes(), SMDS_MeshElement::getshapeId(), SMDS_MeshElement::GetType(), myLastCreatedElems, SMDS_MeshElement::NbCornerNodes(), SMDS_MeshElement::NbNodes(), SMDS_MeshElement::nodeIterator(), SMESHDS_Mesh::RemoveElement(), SMESHDS_Mesh::RemoveNode(), SMESHDS_Mesh::SetMeshElementOnShape(), and SMDSAbs_Face.

Referenced by SMESH_MeshEditor_i::TriToQuad().

◆ UpdateVolumes()

Field Documentation

◆ myError

SMESH_ComputeErrorPtr SMESH_MeshEditor::myError
private

Referenced by ConvertToQuadratic().

◆ myLastCreatedElems

◆ myLastCreatedNodes

◆ myMesh