X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_MeshEditor.hxx;h=870660a8aa4adbef75f0deafbe441e65d9344e3d;hb=45b939fb48267cc638c35ee0a6e67d214b0ceac5;hp=28e0c98d4cc7e38aacd5cbe036ae6922bdab75a1;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx index 28e0c98d4..870660a8a 100644 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ b/src/SMESH/SMESH_MeshEditor.hxx @@ -51,53 +51,7 @@ class gp_Ax1; class gp_Vec; class gp_Pnt; class SMESH_MesherHelper; - - -//======================================================================= -/*! - * \brief Searcher for the node closest to point - */ -//======================================================================= -struct SMESH_NodeSearcher -{ - virtual const SMDS_MeshNode* FindClosestTo( const gp_Pnt& pnt ) = 0; - virtual void MoveNode( const SMDS_MeshNode* node, const gp_Pnt& toPnt ) = 0; -}; - -//======================================================================= -/*! - * \brief Searcher for elements - */ -//======================================================================= - -struct SMESH_ElementSearcher -{ - /*! - * \brief Find elements of given type where the given point is IN or ON. - * Returns nb of found elements and elements them-selves. - * - * 'ALL' type means elements of any type excluding nodes and 0D elements - */ - virtual int FindElementsByPoint(const gp_Pnt& point, - SMDSAbs_ElementType type, - std::vector< const SMDS_MeshElement* >& foundElems)=0; - /*! - * \brief Return an element most close to the given point - */ - virtual const SMDS_MeshElement* FindClosestTo( const gp_Pnt& point, - SMDSAbs_ElementType type) = 0; - /*! - * \brief Return elements possibly intersecting the line - */ - virtual void GetElementsNearLine( const gp_Ax1& line, - SMDSAbs_ElementType type, - std::vector< const SMDS_MeshElement* >& foundElems)=0; - /*! - * \brief Find out if the given point is out of closed 2D mesh. - */ - virtual TopAbs_State GetPointState(const gp_Pnt& point) = 0; - -}; +class SMESH_NodeSearcher; // ============================================================ /*! @@ -183,7 +137,6 @@ public: bool TriToQuad (TIDSortedElemSet & theElems, SMESH::Controls::NumericalFunctorPtr theCriterion, const double theMaxAngle); - /*! * \brief Split quadrangles into triangles. * \param theElems - The faces to be splitted. @@ -192,7 +145,6 @@ public: */ bool QuadToTri (TIDSortedElemSet & theElems, SMESH::Controls::NumericalFunctorPtr theCriterion); - /*! * \brief Split quadrangles into triangles. * \param theElems - The faces to be splitted. @@ -201,6 +153,11 @@ public: */ bool QuadToTri (TIDSortedElemSet & theElems, const bool the13Diag); + /*! + * \brief Split each of given quadrangles into 4 triangles. + * \param theElems - The faces to be splitted. If empty all faces are split. + */ + void QuadTo4Tri (TIDSortedElemSet & theElems); /*! * \brief Find better diagonal for splitting. @@ -236,6 +193,13 @@ public: // If the2D, smoothing is performed using UV parameters of nodes // on geometrical faces + typedef TIDTypeCompare TElemSort; + typedef std::map < const SMDS_MeshElement*, + std::list, TElemSort > TTElemOfElemListMap; + typedef std::map > TNodeOfNodeListMap; + typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr; + typedef std::vector TVecOfNnlmiMap; + typedef std::map TElemOfVecOfNnlmiMap; typedef std::auto_ptr< std::list > PGroupIDs; PGroupIDs RotationSweep (TIDSortedElemSet & theElements, @@ -289,13 +253,13 @@ public: * @param theTolerance - uses for comparing locations of nodes if flag * EXTRUSION_FLAG_SEW is set */ - PGroupIDs ExtrusionSweep (TIDSortedElemSet & theElems, - const gp_Vec& theStep, - const int theNbSteps, - TElemOfElemListMap& newElemsMap, - const bool theMakeGroups, - const int theFlags = EXTRUSION_FLAG_BOUNDARY, - const double theTolerance = 1.e-6); + PGroupIDs ExtrusionSweep (TIDSortedElemSet & theElems, + const gp_Vec& theStep, + const int theNbSteps, + TTElemOfElemListMap& newElemsMap, + const bool theMakeGroups, + const int theFlags = EXTRUSION_FLAG_BOUNDARY, + const double theTolerance = 1.e-6); /*! * Generate new elements by extrusion of theElements @@ -307,12 +271,12 @@ public: * EXTRUSION_FLAG_SEW is set * @param theParams - special structure for manage of extrusion */ - PGroupIDs ExtrusionSweep (TIDSortedElemSet & theElems, - ExtrusParam& theParams, - TElemOfElemListMap& newElemsMap, - const bool theMakeGroups, - const int theFlags, - const double theTolerance); + PGroupIDs ExtrusionSweep (TIDSortedElemSet & theElems, + ExtrusParam& theParams, + TTElemOfElemListMap& newElemsMap, + const bool theMakeGroups, + const int theFlags, + const double theTolerance); // Generate new elements by extrusion of theElements @@ -356,17 +320,6 @@ public: SMESH_Mesh* theTargetMesh=0); // Move or copy theElements applying theTrsf to their nodes - /*! - * \brief Return SMESH_NodeSearcher. The caller is responsible for deleteing it - */ - SMESH_NodeSearcher* GetNodeSearcher(); - - /*! - * \brief Return SMESH_ElementSearcher. The caller is responsible for deleting it - */ - SMESH_ElementSearcher* GetElementSearcher(); - SMESH_ElementSearcher* GetElementSearcher( SMDS_ElemIteratorPtr elemIt ); - typedef std::list< std::list< const SMDS_MeshNode* > > TListOfListOfNodes; void FindCoincidentNodes (TIDSortedNodeSet & theNodes, @@ -393,16 +346,9 @@ public: // Remove all but one of elements built on the same nodes. // Return nb of successfully merged groups. - /*! - * \brief Return true if the point is IN or ON of the element - */ - static bool IsOut( const SMDS_MeshElement* element, const gp_Pnt& point, double tol ); - - static double GetDistance( const SMDS_MeshFace* face, const gp_Pnt& point ); - - int SimplifyFace (const std::vector faceNodes, - std::vector& poly_nodes, - std::vector& quantities) const; + int SimplifyFace (const std::vector& faceNodes, + std::vector& poly_nodes, + std::vector& quantities) const; // Split face, defined by , into several faces by repeating nodes. // Is used by MergeNodes() @@ -533,17 +479,6 @@ public: TIDSortedElemSet & linkedNodes, SMDSAbs_ElementType type = SMDSAbs_All ); - static const SMDS_MeshElement* FindFaceInSet(const SMDS_MeshNode* n1, - const SMDS_MeshNode* n2, - const TIDSortedElemSet& elemSet, - const TIDSortedElemSet& avoidSet, - int* i1=0, - int* i2=0); - // Return a face having linked nodes n1 and n2 and which is - // - not in avoidSet, - // - in elemSet provided that !elemSet.empty() - // i1 and i2 optionally returns indices of n1 and n2 - /*! * \brief Find corresponding nodes in two sets of faces * \param theSide1 - first face set @@ -576,6 +511,8 @@ public: // Return an index of the shape theElem is on // or zero if a shape not found + void DoubleElements( const TIDSortedElemSet& theElements ); + bool DoubleNodes( const std::list< int >& theListOfNodes, const std::list< int >& theListOfModifiedElems ); @@ -651,13 +588,6 @@ public: const SMESH_SequenceOfElemPtr& elemGens, const std::string& postfix, SMESH_Mesh* targetMesh=0); - - - typedef std::map > TNodeOfNodeListMap; - typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr; - typedef std::vector TVecOfNnlmiMap; - typedef std::map TElemOfVecOfNnlmiMap; - /*! * \brief Create elements by sweeping an element * \param elem - element to sweep @@ -682,7 +612,7 @@ public: * \param srcElements - to append elem for each generated element */ void makeWalls (TNodeOfNodeListMap & mapNewNodes, - TElemOfElemListMap & newElemsMap, + TTElemOfElemListMap & newElemsMap, TElemOfVecOfNnlmiMap & elemNewNodesMap, TIDSortedElemSet& elemSet, const int nbSteps,