X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_MeshEditor.hxx;h=78457ef15e21528971a3d1f737197aa2637fc584;hp=fdbda16d08b5a36e568f3f31bbb0f03de1819ee8;hb=db9a6dee242042be12ba2cbb986e56988fccc664;hpb=05ae10badd80e02346c06faf21f68062400f3f20 diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx index fdbda16d0..78457ef15 100644 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ b/src/SMESH/SMESH_MeshEditor.hxx @@ -32,10 +32,15 @@ #include "SMESH_Mesh.hxx" #include "SMESH_Controls.hxx" +#include "SMESH_SequenceOfNode.hxx" +#include "gp_Dir.hxx" +#include "TColStd_HSequenceOfReal.hxx" #include #include -#include + +typedef map > TElemOfElemListMap; class SMDS_MeshElement; class SMDS_MeshFace; @@ -141,9 +146,72 @@ 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 + }; + + /*! + * special structire for control of extrusion functionality + */ + struct ExtrusParam { + gp_Dir myDir; // direction of extrusion + Handle(TColStd_HSequenceOfReal) mySteps; // magnitudes for each step + SMESH_SequenceOfNode myNodes; // nodes for using in sewing + }; + + /*! + * 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, + SMESH_SequenceOfNode& aNodes); + + /*! + * 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 cuurent method. + * param theElems - list of elements for extrusion + * param newElemsMap 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 + (set & theElems, + const gp_Vec& theStep, + const int theNbSteps, + TElemOfElemListMap& newElemsMap, + const int theFlags = EXTRUSION_FLAG_BOUNDARY, + const double theTolerance = 1.e-6); + + /*! + * Generate new elements by extrusion of theElements + * param theElems - list of elements for extrusion + * param newElemsMap 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 + * param theParams - special structure for manage of extrusion + */ + void ExtrusionSweep (set & theElems, + ExtrusParam& theParams, + TElemOfElemListMap& newElemsMap, + const int theFlags, + const double theTolerance); + + // Generate new elements by extrusion of theElements // by theStep by theNbSteps @@ -305,15 +373,10 @@ class SMESH_MeshEditor { SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } - const TColStd_DataMapOfIntegerListOfInteger& GetExtrusionHistory() const - { return myExtrusionHistory; } - private: SMESH_Mesh * myMesh; - TColStd_DataMapOfIntegerListOfInteger myExtrusionHistory; - }; #endif