From 01d2cde96d919549ca919dd51203b67548680d92 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 30 Mar 2010 12:36:23 +0000 Subject: [PATCH] 0020672: EDF 1243 SMESH : Be able to transform mixed mesh * Add "Split into Tetrahedra" operation --- .../gui/SMESH/images/split_into_tetra.png | Bin 0 -> 24682 bytes .../SMESH/images/split_into_tetra_icon.png | Bin 0 -> 923 bytes .../gui/SMESH/input/modifying_meshes.doc | 1 + doc/salome/gui/SMESH/input/split_to_tetra.doc | 55 ++++++ resources/Makefile.am | 3 +- resources/split_into_tetra.png | Bin 0 -> 923 bytes src/SMESHGUI/SMESHGUI.cxx | 16 +- src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx | 177 ++++++++++++------ src/SMESHGUI/SMESHGUI_MultiEditDlg.h | 35 +++- src/SMESHGUI/SMESH_images.ts | 4 + src/SMESHGUI/SMESH_msg_en.ts | 31 +++ 11 files changed, 258 insertions(+), 64 deletions(-) create mode 100644 doc/salome/gui/SMESH/images/split_into_tetra.png create mode 100644 doc/salome/gui/SMESH/images/split_into_tetra_icon.png create mode 100644 doc/salome/gui/SMESH/input/split_to_tetra.doc create mode 100644 resources/split_into_tetra.png diff --git a/doc/salome/gui/SMESH/images/split_into_tetra.png b/doc/salome/gui/SMESH/images/split_into_tetra.png new file mode 100644 index 0000000000000000000000000000000000000000..bc88b11692a44f172edceb4f8f0f8b3f1ab911ce GIT binary patch literal 24682 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 x53B-l1sDW8+h{Qh$N_mk2RZ-^Fsm|P^
  • \subpage changing_orientation_of_elements_page "Change orientation" of the selected elements.
  • \subpage cutting_quadrangles_page "Cut a quadrangle" into two triangles.
  • +
  • \subpage split_to_tetra_page "Split" volumic elements into tetrahedra.
  • \subpage smoothing_page "Smooth" elements, reducung distortions in them by adjusting the locations of element corners.
  • Create an \subpage extrusion_page "extrusion" along a vector.
  • diff --git a/doc/salome/gui/SMESH/input/split_to_tetra.doc b/doc/salome/gui/SMESH/input/split_to_tetra.doc new file mode 100644 index 000000000..57efb37eb --- /dev/null +++ b/doc/salome/gui/SMESH/input/split_to_tetra.doc @@ -0,0 +1,55 @@ +/*! + +\page split_to_tetra_page Splitting volumes into tetrahedra + +\n This operation allows to split volumic elements into tetrahedra. +2D mesh is modified accordingly. + +To split volumes: +
      +
    1. Display a mesh or a submesh in the 3D viewer.
    2. +
    3. In the \b Modification menu select the Split into Tetrahedra item or +click "Split into Tetrahedra" button in the toolbar. + +\image html split_into_tetra_icon.png +
      "Split into Tetrahedra" button
      + +The following dialog box will appear: + +\image html split_into_tetra.png + +\par +
        +
      • The main list contains the list of volumes. You can click on +a volume in the 3D viewer and it will be highlighted (lock Shift +keyboard button to select several volumes). Click \b Add button and +the ID of this volume will be added to the list. To remove a +selected element or elements from the list click \b Remove button. Sort +list button allows to sort the list of IDs. \b Filter button allows to +apply a definite filter to the selection of volumes. +
        Note: If you split not all adjacent non-tetrahedral volumes, your mesh becomes +non-conform.
      • +
      • Apply to all radio button allows to split all +volumes of the currently displayed mesh or submesh.
      • +
      + +
        +
      • \b Split hexahedron + +
          +
        • Into 5 tetrahedra and Into 6 tetrahedra allows to +specify the number of tetrahedra a hexahedron will be split into. If the specified method does +not allow to get a conform mesh, a generic solution is applied: an additional node +is created at gravity center of a hexahedron, serving an apex of tetrahedra, all quadrangle sides of the hexahedron are split into two triangles each serving a base of a new tetrahedron.
        • +
        + +
      • + +
      • Select from set of fields allows to choose a submesh or an +existing group whose elements will be automatically added to the +list.
      • +
      + +
    4. Click the \b Apply or Apply and Close button to confirm the operation.
    5. +
    +*/ diff --git a/resources/Makefile.am b/resources/Makefile.am index 1444dc111..58a1f9294 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -169,7 +169,8 @@ dist_salomeres_DATA = \ mesh_2d_from_3d.png \ mesh_free_faces.png \ scale.png \ - scale_along_axes.png + scale_along_axes.png \ + split_into_tetra.png # VSR: little trick to avoid putting if SMESHCatalog.xml to the distribution archive nodist_salomeres_SCRIPTS = SMESHCatalog.xml diff --git a/resources/split_into_tetra.png b/resources/split_into_tetra.png new file mode 100644 index 0000000000000000000000000000000000000000..b113c304db955efefb3cecebe156174c299177b8 GIT binary patch literal 923 zcmV;M17!S(P)&9ih-mA`p1k5JGS_EX$%)Dp4pD?wOdFDA&&^)t46!ydXN=USp{>bVre6 z;UpKY-x?oyw!_`&_Gh!%Ec5g8ZL_npMhn2fmq&!&-f6_$?==XzT@|9I_SVMfNC6JmKtcb(P#te+CcPPD-K>AYJJvK68}+gIXVQGAGzII#-hdXhLl&{q6gcR1DEvn9Ma!>>8b` zT_aHl0PxojZvtT7v})@_YXz@ZsO4wdHfpnMlwyqDq4AnDUFku zo!xJ*q}N7F)5NeAZdTV^Idh0)G8vLmnyO`4TUPG=Js+{7>mddP2G}r4zpkyV9&@P9 zBW>kBxct>9sZ=T?r7Qy_#pm-$(=?G%-c_n73J!;ZQmOc9KL5`-pvB|ye3{8)Ua@UE x53B-l1sDW8+h{Qh$N_mk2RZ-^Fsm|P^SetNodeColor( aColor.R, aColor.G, aColor.B ); else if( aGroupObject->GetType() == SMESH::EDGE ) anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); - else if( aGroupObject->GetType() == SMESH::ELEM0D ) - anActor->Set0DColor( aColor.R, aColor.G, aColor.B ); + else if( aGroupObject->GetType() == SMESH::ELEM0D ) + anActor->Set0DColor( aColor.R, aColor.G, aColor.B ); else anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B ); } @@ -1853,9 +1853,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_UnionOfTwoTrianglesDlg( this ) )->show(); break; } - case 409: // Change orientation - case 410: // Union of triangles - case 411: // Cutting of quadrangles + case 409: // Change orientation + case 410: // Union of triangles + case 411: // Cutting of quadrangles + case 419: // Splitting volumes into tetrahedra { if ( !vtkwnd ) { @@ -1873,6 +1874,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) aDlg = new SMESHGUI_ChangeOrientationDlg(this); else if ( theCommandID == 410 ) aDlg = new SMESHGUI_UnionOfTrianglesDlg(this); + else if ( theCommandID == 419 ) + aDlg = new SMESHGUI_CuttingIntoTetraDlg(this); else aDlg = new SMESHGUI_CuttingOfQuadsDlg(this); @@ -2981,6 +2984,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 416, "EXTRUSION_ALONG", "ICON_EXTRUSION_ALONG" ); createSMESHAction( 417, "CONV_TO_QUAD", "ICON_CONV_TO_QUAD" ); createSMESHAction( 418, "2D_FROM_3D", "ICON_2D_FROM_3D" ); + createSMESHAction( 419, "SPLIT_TO_TETRA", "ICON_SPLIT_TO_TETRA" ); createSMESHAction( 200, "RESET" ); createSMESHAction( 201, "SCALAR_BAR_PROP" ); createSMESHAction( 211, "WIRE", "ICON_WIRE", 0, true ); @@ -3147,6 +3151,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 409, modifyId, -1 ); createMenu( 410, modifyId, -1 ); createMenu( 411, modifyId, -1 ); + createMenu( 419, modifyId, -1 ); createMenu( 412, modifyId, -1 ); createMenu( 413, modifyId, -1 ); createMenu( 416, modifyId, -1 ); @@ -3247,6 +3252,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 409, modifyTb ); createTool( 410, modifyTb ); createTool( 411, modifyTb ); + createTool( 419, modifyTb ); createTool( 412, modifyTb ); createTool( 413, modifyTb ); createTool( 416, modifyTb ); diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx index 907f8a65b..edef76173 100755 --- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx @@ -39,15 +39,17 @@ #include // SALOME GUI includes -#include #include -#include #include +#include +#include +#include #include #include #include #include +#include #include #include @@ -301,7 +303,7 @@ QWidget* SMESHGUI_MultiEditDlg::createButtonFrame (QWidget* theParent) bool SMESHGUI_MultiEditDlg::isValid (const bool /*theMess*/) { return (!myMesh->_is_nil() && - (myListBox->count() > 0 || (myToAllChk->isChecked() && myActor))); + (myListBox->count() > 0 || (myToAllChk->isChecked()/* && myActor*/))); } //======================================================================= @@ -423,49 +425,51 @@ void SMESHGUI_MultiEditDlg::onOk() //======================================================================= // name : SMESHGUI_MultiEditDlg::getIds -// Purpose : Retrive identifiers from list box +// Purpose : Retrive identifiers from list box or the whole object //======================================================================= -SMESH::long_array_var SMESHGUI_MultiEditDlg::getIds() + +SMESH::long_array_var SMESHGUI_MultiEditDlg::getIds(SMESH::SMESH_IDSource_var& obj) { SMESH::long_array_var anIds = new SMESH::long_array; if (myToAllChk->isChecked()) { myIds.Clear(); - SMESH_Actor * anActor = SMESH::FindActorByObject(myMesh); - if (!anActor) - anActor = myActor; - if (anActor != 0) - { - // skl 07.02.2006 - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if( myFilterType == SMESH::TriaFilter || - myFilterType == SMESH::QuadFilter || - myFilterType == SMESH::FaceFilter ) { - SMDS_FaceIteratorPtr it = aMesh->facesIterator(); - while(it->more()) { - const SMDS_MeshFace* f = it->next(); - if(myFilterType == SMESH::FaceFilter) { - myIds.Add(f->GetID()); - } - else if( myFilterType==SMESH::TriaFilter && - ( f->NbNodes()==3 || f->NbNodes()==6 ) ) { - myIds.Add(f->GetID()); - } - else if( myFilterType==SMESH::QuadFilter && - ( f->NbNodes()==4 || f->NbNodes()==8 ) ) { - myIds.Add(f->GetID()); - } - } - } - else if(myFilterType == SMESH::VolumeFilter) { - SMDS_VolumeIteratorPtr it = aMesh->volumesIterator(); - while(it->more()) { - const SMDS_MeshVolume* f = it->next(); - myIds.Add(f->GetID()); - } - } - /* commented by skl 07.02.2006 + obj = SMESH::SMESH_IDSource::_narrow( myMesh ); +// SMESH_Actor * anActor = SMESH::FindActorByObject(myMesh); +// if (!anActor) +// anActor = myActor; +// if (anActor != 0) +// { +// // skl 07.02.2006 +// SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); +// if( myFilterType == SMESH::TriaFilter || +// myFilterType == SMESH::QuadFilter || +// myFilterType == SMESH::FaceFilter ) { +// SMDS_FaceIteratorPtr it = aMesh->facesIterator(); +// while(it->more()) { +// const SMDS_MeshFace* f = it->next(); +// if(myFilterType == SMESH::FaceFilter) { +// myIds.Add(f->GetID()); +// } +// else if( myFilterType==SMESH::TriaFilter && +// ( f->NbNodes()==3 || f->NbNodes()==6 ) ) { +// myIds.Add(f->GetID()); +// } +// else if( myFilterType==SMESH::QuadFilter && +// ( f->NbNodes()==4 || f->NbNodes()==8 ) ) { +// myIds.Add(f->GetID()); +// } +// } +// } +// else if(myFilterType == SMESH::VolumeFilter) { +// SMDS_VolumeIteratorPtr it = aMesh->volumesIterator(); +// while(it->more()) { +// const SMDS_MeshVolume* f = it->next(); +// myIds.Add(f->GetID()); +// } +// } + /* commented by skl 07.02.2006 - to work with quadratic elements TVisualObjPtr aVisualObj = anActor->GetObject(); vtkUnstructuredGrid* aGrid = aVisualObj->GetUnstructuredGrid(); if (aGrid != 0) { @@ -490,7 +494,7 @@ SMESH::long_array_var SMESHGUI_MultiEditDlg::getIds() } } */ - } + //} } anIds->length(myIds.Extent()); @@ -1034,9 +1038,12 @@ bool SMESHGUI_MultiEditDlg::onApply() myBusy = true; - SMESH::long_array_var anIds = getIds(); + SUIT_OverrideCursor aWaitCursor; - bool aResult = process(aMeshEditor, anIds.inout()); + SMESH::SMESH_IDSource_var obj; + SMESH::long_array_var anIds = getIds(obj); + + bool aResult = process(aMeshEditor, anIds.inout(), obj); if (aResult) { if (myActor) { SALOME_ListIO sel; @@ -1124,9 +1131,13 @@ SMESHGUI_ChangeOrientationDlg::~SMESHGUI_ChangeOrientationDlg() } bool SMESHGUI_ChangeOrientationDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor, - const SMESH::long_array& theIds) + const SMESH::long_array& theIds, + SMESH::SMESH_IDSource_ptr obj) { - return theEditor->Reorient(theIds); + if ( CORBA::is_nil( obj )) + return theEditor->Reorient(theIds); + else + return theEditor->ReorientObject( obj ); } /*! @@ -1190,11 +1201,16 @@ bool SMESHGUI_UnionOfTrianglesDlg::isValid (const bool theMess) } bool SMESHGUI_UnionOfTrianglesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor, - const SMESH::long_array& theIds) + const SMESH::long_array& theIds, + SMESH::SMESH_IDSource_ptr obj) { SMESH::NumericalFunctor_var aCriterion = getNumericalFunctor(); double aMaxAngle = myMaxAngleSpin->GetValue() * PI / 180.0; - bool ok = theEditor->TriToQuad(theIds, aCriterion, aMaxAngle); + bool ok; + if ( CORBA::is_nil( obj )) + ok = theEditor->TriToQuad(theIds, aCriterion, aMaxAngle); + else + ok = theEditor->TriToQuadObject(obj, aCriterion, aMaxAngle); if( ok ) { QStringList aParameters; aParameters << myMaxAngleSpin->text(); @@ -1243,19 +1259,21 @@ void SMESHGUI_CuttingOfQuadsDlg::onClose() } bool SMESHGUI_CuttingOfQuadsDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor, - const SMESH::long_array& theIds) + const SMESH::long_array& theIds, + SMESH::SMESH_IDSource_ptr obj) { + bool hasObj = (! CORBA::is_nil( obj )); switch (myGroupChoice->checkedId()) { case 0: // use diagonal 1-3 - return theEditor->SplitQuad(theIds, true); + return hasObj ? theEditor->SplitQuadObject(obj, true) : theEditor->SplitQuad(theIds, true); case 1: // use diagonal 2-4 - return theEditor->SplitQuad(theIds, false); + return hasObj ? theEditor->SplitQuadObject(obj, false) : theEditor->SplitQuad(theIds, false); default: // use numeric functor break; } - SMESH::NumericalFunctor_var aCriterion = getNumericalFunctor(); - return theEditor->QuadToTri(theIds, aCriterion); + SMESH::NumericalFunctor_var aCrit = getNumericalFunctor(); + return hasObj ? theEditor->QuadToTriObject(obj, aCrit) : theEditor->QuadToTri(theIds, aCrit); } void SMESHGUI_CuttingOfQuadsDlg::onCriterionRB() @@ -1295,8 +1313,9 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview() erasePreview(); // get Ids of elements - SMESH::long_array_var anElemIds = getIds(); - if (getIds()->length() == 0) + SMESH::SMESH_IDSource_var obj; + SMESH::long_array_var anElemIds = getIds(obj); + if (anElemIds->length() == 0 && obj->_is_nil() ) return; SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); @@ -1449,3 +1468,55 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview() aCellTypesArray->Delete(); aCellLocationsArray->Delete(); } + +/*! + * Class : SMESHGUI_CuttingIntoTetraDlg + * Description : Modification of orientation of faces + */ + +SMESHGUI_CuttingIntoTetraDlg::SMESHGUI_CuttingIntoTetraDlg(SMESHGUI* theModule) + : SMESHGUI_MultiEditDlg(theModule, SMESH::VolumeFilter, false) +{ + setWindowTitle(tr("CAPTION")); + myHelpFileName = "split_to_tetra_page.html"; + myEntityType = SMESH::VolumeFilter; + + myToAllChk->setChecked( true ); //aplly to the whole mesh by default + + bool hasHexa = true;//myMesh->_is_nil() ? false : myMesh->NbHexas(); + + if ( hasHexa ) + { + myGroupChoice->button(2)->hide(); + myGroupChoice->button(0)->setText( tr("SPLIT_HEX_TO_5_TETRA")); + myGroupChoice->button(1)->setText( tr("SPLIT_HEX_TO_6_TETRA")); + + myCriterionGrp->setTitle( tr("SPLIT_METHOD")); + myCriterionGrp->show(); + myComboBoxFunctor->hide(); + myChoiceWidget->show(); + } + setSelectionMode(); + updateButtons(); +} + +SMESHGUI_CuttingIntoTetraDlg::~SMESHGUI_CuttingIntoTetraDlg() +{ +} + +bool SMESHGUI_CuttingIntoTetraDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor, + const SMESH::long_array& theIds, + SMESH::SMESH_IDSource_ptr theObj) +{ + SMESH::SMESH_IDSource_var obj = theObj; + if ( CORBA::is_nil( obj )) + obj = theEditor->MakeIDSource( theIds ); + try { + theEditor->SplitVolumesIntoTetra( obj, myGroupChoice->checkedId()+1 ); + } + catch ( const SALOME::SALOME_Exception& S_ex ) { + SalomeApp_Tools::QtCatchCorbaException( S_ex ); + return false; + } + return true; +} diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.h b/src/SMESHGUI/SMESHGUI_MultiEditDlg.h index f14996814..ea23178c9 100755 --- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.h +++ b/src/SMESHGUI/SMESHGUI_MultiEditDlg.h @@ -108,12 +108,13 @@ protected: QWidget* createButtonFrame( QWidget* ); QWidget* createMainFrame( QWidget*, const bool ); virtual bool isValid( const bool ); - SMESH::long_array_var getIds(); + SMESH::long_array_var getIds(SMESH::SMESH_IDSource_var& obj); void updateButtons(); void setSelectionMode(); virtual bool isIdValid( const int ) const; virtual bool process( SMESH::SMESH_MeshEditor_ptr, - const SMESH::long_array& ) = 0; + const SMESH::long_array& , + SMESH::SMESH_IDSource_ptr obj) = 0; int entityType(); protected: @@ -174,7 +175,9 @@ public: virtual ~SMESHGUI_ChangeOrientationDlg(); protected: - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); + virtual bool process( SMESH::SMESH_MeshEditor_ptr, + const SMESH::long_array& , + SMESH::SMESH_IDSource_ptr obj); }; /*! @@ -191,7 +194,9 @@ public: protected: virtual bool isValid( const bool ); - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); + virtual bool process( SMESH::SMESH_MeshEditor_ptr, + const SMESH::long_array&, + SMESH::SMESH_IDSource_ptr obj ); private: SMESHGUI_SpinBox* myMaxAngleSpin; @@ -210,7 +215,9 @@ public: virtual ~SMESHGUI_CuttingOfQuadsDlg(); protected: - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); + virtual bool process( SMESH::SMESH_MeshEditor_ptr, + const SMESH::long_array& , + SMESH::SMESH_IDSource_ptr obj); protected slots: virtual void onClose(); @@ -226,4 +233,22 @@ private: QCheckBox* myPreviewChk; }; +/*! + * Class : SMESHGUI_CuttingIntoTetraDlg + * Description : Split all volumes into tetrahedrons + */ +class SMESHGUI_CuttingIntoTetraDlg : public SMESHGUI_MultiEditDlg +{ + Q_OBJECT + +public: + SMESHGUI_CuttingIntoTetraDlg( SMESHGUI* ); + virtual ~SMESHGUI_CuttingIntoTetraDlg(); + +protected: + virtual bool process( SMESH::SMESH_MeshEditor_ptr, + const SMESH::long_array&, + SMESH::SMESH_IDSource_ptr obj ); +}; + #endif // SMESHGUI_MULTIEDITDLG_H diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index 24ab4bea1..83d74e83d 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -461,5 +461,9 @@ ICON_2D_FROM_3D mesh_2d_from_3d.png + + ICON_SPLIT_TO_TETRA + split_into_tetra.png + diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 7d6253610..ad1ab608b 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -710,6 +710,18 @@ MEN_WIRE Wireframe + + MEN_SPLIT_TO_TETRA + Split into Tetrahedra + + + TOP_SPLIT_TO_TETRA + Split into Tetrahedra + + + STB_SPLIT_TO_TETRA + Split into Tetrahedra + MESHERS_FILE_CANT_OPEN Can not open resource file @@ -4763,6 +4775,25 @@ It is impossible to read point coordinates from file Use numeric functor + + SMESHGUI_CuttingIntoTetraDlg + + CAPTION + Splitting volumes into tetrahedra + + + SPLIT_METHOD + Split hexahedron + + + SPLIT_HEX_TO_5_TETRA + Into 5 tetrahedra + + + SPLIT_HEX_TO_6_TETRA + Into 6 tetrahedra + + SMESHGUI_PrecisionDlg -- 2.39.2