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 );
TNodeOfNodeListMap mapNewNodes;
TElemOfVecOfNnlmiMap mapElemNewNodes;
- //TElemOfElemListMap newElemsMap;
+ TElemOfElemListMap newElemsMap;
// loop on theElems
set< const SMDS_MeshElement* >::iterator itElem;
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 );
}
//=======================================================================
#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;
// 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
SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); }
+ const SMESH_DataMapOfElemPtrSequenceOfElemPtr& GetExtrusionHistory() const
+ { return myExtrusionHistory; }
+
private:
SMESH_Mesh * myMesh;
+ SMESH_DataMapOfElemPtrSequenceOfElemPtr myExtrusionHistory;
+
};
#endif