X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_MeshEditor.cxx;h=b73f854d2e02183bdd38380e856e61733bb49344;hp=846a3cc31b5e6779b75d820565f24f786197b07a;hb=423f097f5e34c955b122291ad657d8ac49d8aae0;hpb=d03efc5f7afe62484b0802bbe5fc933fad3a6481;ds=sidebyside diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx index 846a3cc31..b73f854d2 100644 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ b/src/SMESH/SMESH_MeshEditor.cxx @@ -2410,14 +2410,45 @@ void SMESH_MeshEditor::RotationSweep(set & theElems, makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems ); } + + +//======================================================================= +//function : CreateNode +//purpose : +//======================================================================= +const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x, + const double y, + const double z, + const double tolnode) +{ + gp_Pnt P1(x,y,z); + SMESHDS_Mesh * aMesh = myMesh->GetMeshDS(); + // try to search in sequence of existing nodes + SMDS_NodeIteratorPtr itn = aMesh->nodesIterator(); + while(itn->more()) { + const SMDS_MeshNode* aN = static_cast (itn->next()); + gp_Pnt P2(aN->X(),aN->Y(),aN->Z()); + if(P1.Distance(P2)AddNode(x,y,z); + return NewNode; +} + + //======================================================================= //function : ExtrusionSweep //purpose : //======================================================================= -void SMESH_MeshEditor::ExtrusionSweep(set & theElems, - const gp_Vec& theStep, - const int theNbSteps) +void SMESH_MeshEditor::ExtrusionSweep + (set & theElems, + const gp_Vec& theStep, + const int theNbSteps, + TElemOfElemListMap& newElemsMap, + const int theFlags, + const double theTolerance) { gp_Trsf aTrsf; aTrsf.SetTranslation( theStep ); @@ -2426,7 +2457,7 @@ void SMESH_MeshEditor::ExtrusionSweep(set & theElems, TNodeOfNodeListMap mapNewNodes; TElemOfVecOfNnlmiMap mapElemNewNodes; - TElemOfElemListMap newElemsMap; + //TElemOfElemListMap newElemsMap; // loop on theElems set< const SMDS_MeshElement* >::iterator itElem; @@ -2457,27 +2488,25 @@ void SMESH_MeshEditor::ExtrusionSweep(set & theElems, double coord[] = { node->X(), node->Y(), node->Z() }; for ( int i = 0; i < theNbSteps; i++ ) { aTrsf.Transforms( coord[0], coord[1], coord[2] ); - const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); - listNewNodes.push_back( newNode ); + if( theFlags & EXTRUSION_FLAG_SEW ) { + const SMDS_MeshNode * newNode = CreateNode(coord[0], coord[1], + coord[2], theTolerance); + listNewNodes.push_back( newNode ); + } + else { + const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); + listNewNodes.push_back( newNode ); + } } } newNodesItVec.push_back( nIt ); } // make new elements sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem] ); - - // fill history - SMESH_SequenceOfElemPtr SeqNewME; - list tmpList = newElemsMap[elem]; - for(list::iterator ite = tmpList.begin(); - ite!=tmpList.end(); ite++) { - SeqNewME.Append(*ite); - } - myExtrusionHistory.Bind(elem,SeqNewME); - // end fill history - } - makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems ); + if( theFlags & EXTRUSION_FLAG_BOUNDARY ) { + makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems ); + } } //=======================================================================