diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index c7de9ac08..e380a6a09 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -545,6 +545,14 @@ module SMESH in DirStruct StepVector, in long NbOfSteps); + void ExtrusionSweepObject1D(in SMESH_IDSource theObject, + in DirStruct StepVector, + in long NbOfSteps); + + void ExtrusionSweepObject2D(in SMESH_IDSource theObject, + in DirStruct StepVector, + in long NbOfSteps); + enum Extrusion_Error { EXTR_OK, EXTR_NO_ELEMENTS, diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index a908b3d14..6a4799a73 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -533,6 +533,62 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObjec ExtrusionSweep(anElementsId, theStepVector, theNbOfSteps); } +//======================================================================= +//function : ExtrusionSweepObject1D +//purpose : +//======================================================================= + +void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct & theStepVector, + CORBA::Long theNbOfSteps) +{ + SMESHDS_Mesh* aMesh = GetMeshDS(); + + SMESH::long_array_var allElementsId = theObject->GetIDs(); + + set elements; + for (int i = 0; i < allElementsId->length(); i++) + { + CORBA::Long index = allElementsId[i]; + const SMDS_MeshElement * elem = aMesh->FindElement(index); + if ( elem && elem->GetType() == SMDSAbs_Edge ) + elements.insert( elem ); + } + const SMESH::PointStruct * P = &theStepVector.PS; + gp_Vec stepVec( P->x, P->y, P->z ); + + ::SMESH_MeshEditor anEditor( _myMesh ); + anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); +} + +//======================================================================= +//function : ExtrusionSweepObject2D +//purpose : +//======================================================================= + +void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct & theStepVector, + CORBA::Long theNbOfSteps) +{ + SMESHDS_Mesh* aMesh = GetMeshDS(); + + SMESH::long_array_var allElementsId = theObject->GetIDs(); + + set elements; + for (int i = 0; i < allElementsId->length(); i++) + { + CORBA::Long index = allElementsId[i]; + const SMDS_MeshElement * elem = aMesh->FindElement(index); + if ( elem && elem->GetType() == SMDSAbs_Face ) + elements.insert( elem ); + } + const SMESH::PointStruct * P = &theStepVector.PS; + gp_Vec stepVec( P->x, P->y, P->z ); + + ::SMESH_MeshEditor anEditor( _myMesh ); + anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); +} + #define RETCASE(enm) case ::SMESH_MeshEditor::enm: return SMESH::SMESH_MeshEditor::enm; static SMESH::SMESH_MeshEditor::Extrusion_Error convExtrError( const::SMESH_MeshEditor::Extrusion_Error e ) diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx index 9a2ced6bf..941c51937 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.hxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.hxx @@ -104,6 +104,12 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor void ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject, const SMESH::DirStruct & StepVector, CORBA::Long NbOfSteps); + void ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct & StepVector, + CORBA::Long NbOfSteps); + void ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct & StepVector, + CORBA::Long NbOfSteps); SMESH::SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPath(const SMESH::long_array & IDsOfElements,