X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_MeshEditor.hxx;h=fdbda16d08b5a36e568f3f31bbb0f03de1819ee8;hp=677d9c033596a54021628fd99c3ebe8e4c13fa25;hb=05ae10badd80e02346c06faf21f68062400f3f20;hpb=08e0a4de43baa17209cefa536be155f1585297a0 diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx index 677d9c033..fdbda16d0 100644 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ b/src/SMESH/SMESH_MeshEditor.hxx @@ -35,6 +35,7 @@ #include #include +#include class SMDS_MeshElement; class SMDS_MeshFace; @@ -74,22 +75,44 @@ class SMESH_MeshEditor { // Reverse theElement orientation + /*! + * \brief Fuse neighbour triangles into quadrangles. + * \param theElems - The triangles to be fused. + * \param theCriterion - Is used to choose a neighbour to fuse with. + * \param theMaxAngle - Is a max angle between element normals at which fusion + * is still performed; theMaxAngle is mesured in radians. + * \retval bool - Success or not. + */ bool TriToQuad (std::set & theElems, SMESH::Controls::NumericalFunctorPtr theCriterion, const double theMaxAngle); - // Fuse neighbour triangles into quadrangles. - // 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 mesured in radians. + /*! + * \brief Split quadrangles into triangles. + * \param theElems - The faces to be splitted. + * \param theCriterion - Is used to choose a diagonal for splitting. + * \retval bool - Success or not. + */ bool QuadToTri (std::set & theElems, SMESH::Controls::NumericalFunctorPtr theCriterion); - // Cut quadrangles into triangles. - // theCriterion is used to choose a diagonal to cut + /*! + * \brief Split quadrangles into triangles. + * \param theElems - The faces to be splitted. + * \param the13Diag - Is used to choose a diagonal for splitting. + * \retval bool - Success or not. + */ bool QuadToTri (std::set & theElems, const bool the13Diag); - // Cut quadrangles into triangles + + /*! + * \brief Find better diagonal for splitting. + * \param theQuad - The face to find better splitting of. + * \param theCriterion - Is used to choose a diagonal for splitting. + * \retval int - 1 for 1-3 diagonal, 2 for 2-4, -1 - for errors. + */ + int BestSplit (const SMDS_MeshElement* theQuad, + SMESH::Controls::NumericalFunctorPtr theCriterion); enum SmoothMethod { LAPLACIAN = 0, CENTROIDAL }; @@ -98,13 +121,16 @@ class SMESH_MeshEditor { std::set & theFixedNodes, const SmoothMethod theSmoothMethod, const int theNbIterations, - double theTgtAspectRatio = 1.0); + double theTgtAspectRatio = 1.0, + const bool the2D = true); // Smooth theElements using theSmoothMethod during theNbIterations // or until a worst element has aspect ratio <= theTgtAspectRatio. // Aspect Ratio varies in range [1.0, inf]. // If theElements is empty, the whole mesh is smoothed. // theFixedNodes contains additionally fixed nodes. Nodes built // on edges and boundary nodes are always fixed. + // If the2D, smoothing is performed using UV parameters of nodes + // on geometrical faces void RotationSweep (std::set & theElements, @@ -154,6 +180,12 @@ class SMESH_MeshEditor { // Return list of group of nodes close to each other within theTolerance. // Search among theNodes or in the whole mesh if theNodes is empty. + int SimplifyFace (const vector faceNodes, + vector& poly_nodes, + vector& quantities) const; + // Split face, defined by , into several faces by repeating nodes. + // Is used by MergeNodes() + void MergeNodes (TListOfListOfNodes & theNodeGroups); // In each group, the cdr of nodes are substituted by the first one // in all elements. @@ -189,7 +221,9 @@ class SMESH_MeshEditor { const SMDS_MeshNode* theSide2FirstNode, const SMDS_MeshNode* theSide2SecondNode, const SMDS_MeshNode* theSide2ThirdNode = 0, - bool theSide2IsFreeBorder = true); + const bool theSide2IsFreeBorder = true, + const bool toCreatePolygons = false, + const bool toCreatePolyedrs = false); // Sew the free border to the side2 by replacing nodes in // elements on the free border with nodes of the elements // of the side 2. If nb of links in the free border and @@ -226,20 +260,27 @@ class SMESH_MeshEditor { void InsertNodesIntoLink(const SMDS_MeshElement* theFace, const SMDS_MeshNode* theBetweenNode1, const SMDS_MeshNode* theBetweenNode2, - std::list& theNodesToInsert); - // insert theNodesToInsert into theFace between theBetweenNode1 - // and theBetweenNode2 and split theElement. - - static int SortQuadNodes (const SMDS_Mesh * theMesh, - int theNodeIds[] ); - // Set 4 nodes of a quadrangle face in a good order. - // Swap 1<->2 or 2<->3 nodes and correspondingly return - // 1 or 2 else 0. - - static bool SortHexaNodes (const SMDS_Mesh * theMesh, - int theNodeIds[] ); - // Set 8 nodes of a hexahedron in a good order. - // Return success status + std::list& theNodesToInsert, + const bool toCreatePoly = false); + // insert theNodesToInsert into theFace between theBetweenNode1 and theBetweenNode2. + // If toCreatePoly is true, replace theFace by polygon, else split theFace. + + void UpdateVolumes (const SMDS_MeshNode* theBetweenNode1, + const SMDS_MeshNode* theBetweenNode2, + std::list& theNodesToInsert); + // insert theNodesToInsert into all volumes, containing link + // theBetweenNode1 - theBetweenNode2, between theBetweenNode1 and theBetweenNode2. + +// static int SortQuadNodes (const SMDS_Mesh * theMesh, +// int theNodeIds[] ); +// // Set 4 nodes of a quadrangle face in a good order. +// // Swap 1<->2 or 2<->3 nodes and correspondingly return +// // 1 or 2 else 0. +// +// static bool SortHexaNodes (const SMDS_Mesh * theMesh, +// int theNodeIds[] ); +// // Set 8 nodes of a hexahedron in a good order. +// // Return success status static void AddToSameGroups (const SMDS_MeshElement* elemToAdd, const SMDS_MeshElement* elemInGroups, @@ -264,11 +305,15 @@ class SMESH_MeshEditor { SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } + const TColStd_DataMapOfIntegerListOfInteger& GetExtrusionHistory() const + { return myExtrusionHistory; } private: SMESH_Mesh * myMesh; + TColStd_DataMapOfIntegerListOfInteger myExtrusionHistory; + }; #endif