X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_MeshEditor.hxx;h=ea02a7a7c105e3229b86d7d7e560ae850f3c450a;hp=0bb91f730c6f4dc91fd5a6d37cab829a070ff4de;hb=423f097f5e34c955b122291ad657d8ac49d8aae0;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80 diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx index 0bb91f730..ea02a7a7c 100644 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ b/src/SMESH/SMESH_MeshEditor.hxx @@ -36,6 +36,9 @@ #include #include +typedef map > TElemOfElemListMap; + class SMDS_MeshElement; class SMDS_MeshFace; class SMDS_MeshNode; @@ -74,22 +77,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 }; @@ -118,9 +143,46 @@ class SMESH_MeshEditor { // Generate new elements by rotation of theElements around theAxis // by theAngle by theNbSteps - void ExtrusionSweep (std::set & theElements, - const gp_Vec& theStep, - const int theNbSteps); + /*! + * Auxilary flag for advanced extrusion. + * BOUNDARY: create or not boundary for result of extrusion + * SEW: try to use existing nodes or create new nodes in any case + */ + enum ExtrusionFlags { + EXTRUSION_FLAG_BOUNDARY = 0x01, + EXTRUSION_FLAG_SEW = 0x02 + }; + + /*! + * Create new node in the mesh with given coordinates + * (auxilary for advanced extrusion) + */ + const SMDS_MeshNode* CreateNode(const double x, + const double y, + const double z, + const double tolnode); + + /*! + * Generate new elements by extrusion of theElements + * by theStep by theNbSteps + * param theHistory returns history of extrusion + * param theFlags set flags for performing extrusion (see description + * of enum ExtrusionFlags for additional information) + * param theTolerance - uses for comparing locations of nodes if flag + * EXTRUSION_FLAG_SEW is set + */ + //void ExtrusionSweep (std::set & theElements, + // const gp_Vec& theStep, + // const int theNbSteps); + void ExtrusionSweep + (set & theElems, + const gp_Vec& theStep, + const int theNbSteps, + TElemOfElemListMap& newElemsMap, + //SMESH_DataMapOfElemPtrSequenceOfElemPtr& theHistory, + const int theFlags = EXTRUSION_FLAG_BOUNDARY, + const double theTolerance = 1.e-6); + // Generate new elements by extrusion of theElements // by theStep by theNbSteps @@ -282,7 +344,6 @@ class SMESH_MeshEditor { SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } - private: SMESH_Mesh * myMesh;