Salome HOME
Temporarily rolling back the last integration
authorsan <san@opencascade.com>
Fri, 21 Oct 2005 07:58:14 +0000 (07:58 +0000)
committersan <san@opencascade.com>
Fri, 21 Oct 2005 07:58:14 +0000 (07:58 +0000)
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx

index b73f854..846a3cc 100644 (file)
@@ -2410,45 +2410,14 @@ void SMESH_MeshEditor::RotationSweep(set<const SMDS_MeshElement*> & 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<const SMDS_MeshNode*> (itn->next());
-    gp_Pnt P2(aN->X(),aN->Y(),aN->Z());
-    if(P1.Distance(P2)<tolnode)
-      return aN;
-  }    
-  // create new node and return it
-  const SMDS_MeshNode* NewNode = aMesh->AddNode(x,y,z);
-  return NewNode;
-}
-
-
 //=======================================================================
 //function : ExtrusionSweep
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor::ExtrusionSweep
-                    (set<const SMDS_MeshElement*> & theElems,
-                     const gp_Vec&                  theStep,
-                     const int                      theNbSteps,
-                     TElemOfElemListMap&            newElemsMap,
-                     const int                      theFlags,
-                     const double                   theTolerance)
+void SMESH_MeshEditor::ExtrusionSweep(set<const SMDS_MeshElement*> & theElems,
+                                      const gp_Vec&                  theStep,
+                                      const int                      theNbSteps)
 {
   gp_Trsf aTrsf;
   aTrsf.SetTranslation( theStep );
@@ -2457,7 +2426,7 @@ void SMESH_MeshEditor::ExtrusionSweep
 
   TNodeOfNodeListMap mapNewNodes;
   TElemOfVecOfNnlmiMap mapElemNewNodes;
-  //TElemOfElemListMap newElemsMap;
+  TElemOfElemListMap newElemsMap;
 
   // loop on theElems
   set< const SMDS_MeshElement* >::iterator itElem;
@@ -2488,25 +2457,27 @@ void SMESH_MeshEditor::ExtrusionSweep
         double coord[] = { node->X(), node->Y(), node->Z() };
         for ( int i = 0; i < theNbSteps; i++ ) {
           aTrsf.Transforms( coord[0], coord[1], coord[2] );
-          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 );
-          }
+          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<const SMDS_MeshElement*> tmpList = newElemsMap[elem];
+    for(list<const SMDS_MeshElement*>::iterator ite = tmpList.begin();
+        ite!=tmpList.end(); ite++) {
+      SeqNewME.Append(*ite);
+    }
+    myExtrusionHistory.Bind(elem,SeqNewME);
+    // end fill history
+
   }
-  if( theFlags & EXTRUSION_FLAG_BOUNDARY ) {
-    makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems );
-  }
+  makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems );
 }
 
 //=======================================================================
index ea02a7a..6c4dc76 100644 (file)
@@ -35,9 +35,8 @@
 
 #include <list>
 #include <map>
-
-typedef map<const SMDS_MeshElement*,
-            list<const SMDS_MeshElement*> > TElemOfElemListMap;
+//#include <TColStd_DataMapOfIntegerListOfInteger.hxx>
+#include <SMESH_DataMapOfElemPtrSequenceOfElemPtr.hxx>
 
 class SMDS_MeshElement;
 class SMDS_MeshFace;
@@ -143,46 +142,9 @@ class SMESH_MeshEditor {
   // Generate new elements by rotation of theElements around theAxis
   // by theAngle by 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<const SMDS_MeshElement*> & theElements,
-  //                     const gp_Vec&                       theStep,
-  //                     const int                           theNbSteps);
-  void ExtrusionSweep
-           (set<const SMDS_MeshElement*> & 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);
-  
+  void ExtrusionSweep (std::set<const SMDS_MeshElement*> & theElements,
+                       const gp_Vec&                       theStep,
+                       const int                           theNbSteps);
   // Generate new elements by extrusion of theElements 
   // by theStep by theNbSteps
 
@@ -344,10 +306,15 @@ class SMESH_MeshEditor {
 
   SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); }
 
+  const SMESH_DataMapOfElemPtrSequenceOfElemPtr& GetExtrusionHistory() const
+    { return myExtrusionHistory; }
+
  private:
 
   SMESH_Mesh * myMesh;
 
+  SMESH_DataMapOfElemPtrSequenceOfElemPtr myExtrusionHistory;
+
 };
 
 #endif