From 4352740230817ec8f014d5f11f8be968011f0031 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 15 Jun 2011 11:09:30 +0000 Subject: [PATCH] 020749: EDF 1291 SMESH : Create 2D Mesh from 3D improvement / note 0011031 --- .../gui/SMESH/images/2d_from_3d_dlg.png | Bin 17629 -> 17623 bytes .../gui/SMESH/input/make_2dmesh_from_3d.doc | 9 +- src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx | 234 ++++++++++++------ src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h | 8 +- src/SMESHGUI/SMESH_msg_en.ts | 20 +- 5 files changed, 188 insertions(+), 83 deletions(-) diff --git a/doc/salome/gui/SMESH/images/2d_from_3d_dlg.png b/doc/salome/gui/SMESH/images/2d_from_3d_dlg.png index 4a839e89e23143881a7dd6eb1ed0137add1b8459..e0c8ca5cfd9f6b67a4112e5ab440357a2f09579d 100644 GIT binary patch literal 17623 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 X1!_{we+vF=35KkcqGX|jzVH76Z8zPW diff --git a/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc b/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc index fe8f31b66..0ab41a24d 100644 --- a/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc +++ b/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc @@ -7,7 +7,7 @@ elements of a higher dimension. To generate border elements:
    -
  1. Select a mesh in the Object Browser or in the 3D Viewer
  2. +
  3. Select a mesh or groups in the Object Browser or in the 3D Viewer
  4. From the Modification menu choose "Create boundary elements" item, or click "Create boundary elements" button in the toolbar @@ -16,26 +16,23 @@ item, or click "Create boundary elements" button in the toolbar The following dialog box will appear: \image html 2d_from_3d_dlg.png "Create boundary elements dialog box".
  5. -
  6. Check in the dialog box one of three radio buttons corresponding to +
  7. Check in the dialog box one of two radio buttons corresponding to the type of operation you would like to perform.
  8. Fill the other fields available in the dialog box.
  9. Click the \b Apply or Apply and Close button to perform the operation.
\n "Create boundary elements" dialog allows creation of boundary elements -of three types. +of two types.
  • 2D from 3D creates mesh faces on free facets of volume elements
  • 1D from 2D creates mesh edges on free edges of mesh faces
  • -
  • 1D from 2D groups creates mesh edges on borders of groups of faces
Here a free facet means a facet shared by only one volume, a free edge means an edge shared by only one mesh face. In this dialog:
    -
  • specify the 2D groups on borders of which the edges will be -generated (if 1D from 2D groups is selected).
  • specify the Target mesh, where the boundary elements will be created.
      diff --git a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx index afc81d19a..746cc5afd 100644 --- a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx +++ b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx @@ -26,6 +26,8 @@ #include "SMESHGUI_MeshUtils.h" #include "SMESH_TypeFilter.hxx" #include "SMESH_LogicalFilter.hxx" +#include "SMESHGUI_VTKUtils.h" +#include "SMESH_Actor.h" // SALOME GUI includes #include @@ -37,6 +39,7 @@ #include #include #include +//#include #include #include @@ -53,6 +56,8 @@ #include #include +#include + #define SPACING 6 #define MARGIN 11 @@ -74,16 +79,22 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) aModeGrpLayout->setSpacing( SPACING ); my2dFrom3dRB = new QRadioButton( tr( "2D_FROM_3D" ), aModeGrp ); my1dFrom2dRB = new QRadioButton( tr( "1D_FROM_2D" ), aModeGrp ); - my1dFrom3dRB = new QRadioButton( tr( "1D_FROM_3D" ), aModeGrp ); + //my1dFrom3dRB = new QRadioButton( tr( "1D_FROM_3D" ), aModeGrp ); aModeGrpLayout->addWidget( my2dFrom3dRB ); aModeGrpLayout->addWidget( my1dFrom2dRB ); - aModeGrpLayout->addWidget( my1dFrom3dRB ); + //aModeGrpLayout->addWidget( my1dFrom3dRB ); + +// // Groups of mesh faces +// setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); +// createObject( tr( "Groups" ), mainFrame(), Groups ); +// setNameIndication( Groups, ListOfNames ); +// objectWg( Groups, Btn )->hide(); - // Groups of mesh faces - setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); - createObject( tr( "Groups" ), mainFrame(), Groups ); - setNameIndication( Groups, ListOfNames ); - objectWg( Groups, Btn )->hide(); + // Mesh or Groups + //setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); + createObject( tr( "Groups" ), mainFrame(), MeshOrGroups ); + setNameIndication( MeshOrGroups, ListOfNames ); + objectWg( MeshOrGroups, Btn )->hide(); // target QGroupBox* aTargetGrp = new QGroupBox( tr( "TARGET" ), mainFrame() ); @@ -106,8 +117,8 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) aDlgLay->setMargin( 0 ); aDlgLay->setSpacing( SPACING ); aDlgLay->addWidget( aModeGrp, 0, 0, 1, 3 ); - aDlgLay->addWidget( objectWg( Groups, Label ), 1, 0 ); - aDlgLay->addWidget( objectWg( Groups, Control ), 1, 1 ); + aDlgLay->addWidget( objectWg( MeshOrGroups, Label ), 1, 0 ); + aDlgLay->addWidget( objectWg( MeshOrGroups, Control ), 1, 1 ); aDlgLay->addWidget( aTargetGrp, 2, 0, 1, 3 ); aDlgLay->addWidget( myGroupCheck, 3, 0 ); aDlgLay->addWidget( myGroupName, 3, 1, 1, 2 ); @@ -153,6 +164,21 @@ void SMESHGUI_Make2DFrom3DDlg::setNewMeshName( const QString& name ) myMeshName->setText( name ); } +void SMESHGUI_Make2DFrom3DDlg::setNewMeshEnabled( bool enable ) +{ + if ( !enable ) + myThisMeshRB->setChecked( true ); + + myNewMeshRB->setEnabled( enable ); + + onTargetChanged(); +} + +bool SMESHGUI_Make2DFrom3DDlg::getNewMeshEnabled() const +{ + return myNewMeshRB->isEnabled(); +} + bool SMESHGUI_Make2DFrom3DDlg::needGroup() const { return myGroupCheck->isChecked(); @@ -190,7 +216,9 @@ void SMESHGUI_Make2DFrom3DDlg::onGroupChecked() */ SMESHGUI_Make2DFrom3DOp::SMESHGUI_Make2DFrom3DOp() - : SMESHGUI_SelectionOp() + : SMESHGUI_SelectionOp(), + myMeshFilter(MESH), + myGroupFilter(GROUP) { } @@ -220,33 +248,43 @@ void SMESHGUI_Make2DFrom3DOp::startOperation() connect( myDlg->my2dFrom3dRB, SIGNAL( toggled(bool) ), this, SLOT( onModeChanged() ) ); connect( myDlg->my1dFrom2dRB, SIGNAL( toggled(bool) ), this, SLOT( onModeChanged() ) ); - connect( myDlg->my1dFrom3dRB, SIGNAL( toggled(bool) ), this, SLOT( onModeChanged() ) ); + //connect( myDlg->my1dFrom3dRB, SIGNAL( toggled(bool) ), this, SLOT( onModeChanged() ) ); + + //onModeChanged(); - onModeChanged(); + myDlg->activateObject( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups ); + selectionDone(); } +//================================================================================ +/*! + * \brief Set filter corresponding to dimension + */ +//================================================================================ + void SMESHGUI_Make2DFrom3DOp::onModeChanged() { - QRadioButton* b = dynamic_cast( sender()); - if ( b && !b->isChecked() ) - return; - - // enable "2D groups" field - bool enableGroups = ( myDlg->mode() == SMESH::BND_1DFROM3D ); - myDlg->setObjectEnabled( SMESHGUI_Make2DFrom3DDlg::Groups, enableGroups ); - ((QToolButton*) myDlg->objectWg( SMESHGUI_Make2DFrom3DDlg::Groups, - SMESHGUI_Make2DFrom3DDlg::Btn ))->setChecked( enableGroups ); +// QRadioButton* b = dynamic_cast( sender()); +// if ( b && !b->isChecked() ) +// return; + +// // enable "2D groups" field +// bool enableGroups = ( myDlg->mode() == SMESH::BND_1DFROM3D ); +// myDlg->setObjectEnabled( SMESHGUI_Make2DFrom3DDlg::Groups, enableGroups ); +// ((QToolButton*) myDlg->objectWg( SMESHGUI_Make2DFrom3DDlg::Groups, +// SMESHGUI_Make2DFrom3DDlg::Btn ))->setChecked( enableGroups ); - // install filter - int id = enableGroups ? SMESHGUI_Make2DFrom3DDlg::Groups : SMESHGUI_Make2DFrom3DDlg::Mesh; - onDeactivateObject( id ); - onActivateObject( id ); +// // install filter +// int id = enableGroups ? SMESHGUI_Make2DFrom3DDlg::Groups : SMESHGUI_Make2DFrom3DDlg::Mesh; +// onDeactivateObject( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups ); +// onActivateObject ( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups ); +// selectionDone(); } void SMESHGUI_Make2DFrom3DOp::selectionDone() { + myDlg->clearSelection( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups ); mySrcMesh = SMESH::SMESH_Mesh::_nil(); - myDlg->clearSelection( SMESHGUI_Make2DFrom3DDlg::Groups ); if ( !dlg() ) return; @@ -258,13 +296,16 @@ void SMESHGUI_Make2DFrom3DOp::selectionDone() selected( names, types, ids ); myDlg->selectObject( names, types, ids ); - SALOME_ListIO sel; selectionMgr()->selectedObjects( sel, SVTK_Viewer::Type() ); - if ( !sel.IsEmpty() ) + // enable/desable "new mesh" button + bool isMesh = true; + for ( int i = 0; i < ids.count() && isMesh; ++i ) { - SMESH::SMESH_IDSource_var IS = SMESH::IObjectToInterface(sel.First()); - if(!CORBA::is_nil(IS)) - mySrcMesh = IS->GetMesh(); + _PTR(SObject) sobj = + SMESHGUI::activeStudy()->studyDS()->FindObjectID( ids[i].toLatin1().constData() ); + mySrcMesh = SMESH::SObjectToInterface( sobj ); + isMesh = !mySrcMesh->_is_nil(); } + myDlg->setNewMeshEnabled( isMesh ); } catch ( const SALOME::SALOME_Exception& S_ex ) { SalomeApp_Tools::QtCatchCorbaException( S_ex ); @@ -276,8 +317,13 @@ void SMESHGUI_Make2DFrom3DOp::selectionDone() SUIT_SelectionFilter* SMESHGUI_Make2DFrom3DOp::createFilter( const int theId ) const { - MeshObjectType type = ( theId == SMESHGUI_Make2DFrom3DDlg::Groups ? GROUP_FACE : MESH ); - SUIT_SelectionFilter* f = new SMESH_TypeFilter( type ); + SMESHGUI_Make2DFrom3DOp* me = (SMESHGUI_Make2DFrom3DOp*) this; + + QList subFilters; + subFilters.append( & me->myMeshFilter ); + subFilters.append( & me->myGroupFilter ); + + SUIT_SelectionFilter* f = new SMESH_LogicalFilter( subFilters, SMESH_LogicalFilter::LO_OR ); return f; } @@ -286,43 +332,61 @@ bool SMESHGUI_Make2DFrom3DOp::isValid( QString& msg ) const if ( !dlg() ) return false; // check if a mesh is selected - if ( mySrcMesh->_is_nil() ) + if ( !myDlg->hasSelection( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups )) { msg = tr( "SMESH_ERR_NO_INPUT_MESH" ); return false; } - // check if groups are selected - SMESH::Bnd_Dimension mode = myDlg->mode(); - if ( mode == SMESH::BND_1DFROM3D ) + QStringList entries; + dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups, entries ); + const bool isMeshSelected = ( !mySrcMesh->_is_nil() ); + if ( isMeshSelected ) { - SMESH::SMESH_GroupBase_var grp; - QStringList entries; - dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::Groups, entries ); - if ( !entries.isEmpty() ) - { - _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[0].toLatin1().constData() ); - if ( sobj ) - grp = SMESH::SObjectToInterface( sobj ); - } - if ( grp->_is_nil() ) { - msg = tr( "SMESH_ERR_NO_INPUT_GROUP" ); + // only one mesh is allowed + if ( entries.size() > 1 ) { + msg = tr( "SMESH_TOO_MANY_MESHES" ); return false; } } else { - // check if mesh contains elements of required type - SMESH::Bnd_Dimension mode = myDlg->mode(); - - if ( mode == SMESH::BND_2DFROM3D && mySrcMesh->NbVolumes() == 0 ) { - msg = tr( "SMESH_ERR_NO_3D_ELEMENTS" ); - return false; + // check if only groups are selected + for ( int i = 0; i < entries.count(); ++i ) + { + SMESH::SMESH_GroupBase_var grp; + if ( _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() )) + grp = SMESH::SObjectToInterface( sobj ); + if ( grp->_is_nil() ) { + msg = tr( "SMESH_NOT_ONLY_GROUPS" ); + return false; + } } - else if ( mode == SMESH::BND_1DFROM2D && mySrcMesh->NbFaces() == 0 ) { - msg = tr( "SMESH_ERR_NO_2D_ELEMENTS" ); - return false; + } + // check if the selected objects contains elements of required type + bool hasFaces = false, hasVolumes = false; + SMESH::Bnd_Dimension mode = myDlg->mode(); + for ( int i = 0; i < entries.count(); ++i ) + { + SMESH::SMESH_IDSource_var idSource; + if ( _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() )) + idSource = SMESH::SObjectToInterface( sobj ); + if ( !idSource->_is_nil() ) { + SMESH::array_of_ElementType_var types = idSource->GetTypes(); + for ( int j = 0; j < types->length(); ++j ) + if ( types[j] == SMESH::VOLUME ) + hasVolumes = true; + else if ( types[j] == SMESH::FACE ) + hasFaces = true; } } + if ( mode == SMESH::BND_2DFROM3D && !hasVolumes ) { + msg = tr( "SMESH_ERR_NO_3D_ELEMENTS" ); + return false; + } + else if ( mode == SMESH::BND_1DFROM2D && !hasFaces ) { + msg = tr( "SMESH_ERR_NO_2D_ELEMENTS" ); + return false; + } // check if new mesh name is specified if ( myDlg->needNewMesh() && myDlg->getNewMeshName().isEmpty() ) { @@ -335,7 +399,7 @@ bool SMESHGUI_Make2DFrom3DOp::isValid( QString& msg ) const msg = tr( "SMESH_ERR_GRP_NAME_NOT_SPECIFIED" ); return false; } - + return true; } @@ -345,20 +409,41 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList ) bool ok = false; try { + SMESH::Bnd_Dimension mode = myDlg->mode(); + QString meshName = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString(); + QString groupName = myDlg->needGroup() ? myDlg->getGroupName() : QString(); + bool copyAll = myDlg->copySource(); + QStringList entries; - dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::Groups, entries ); + dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups, entries ); SMESH::ListOfIDSources_var groups = new SMESH::ListOfIDSources; - groups->length( entries.count() ); - for ( int i = 0; i < entries.count(); ++i ) + QString wrongGroups = ""; + + if ( mySrcMesh->_is_nil() ) // get selected groups, find groups of wrong type { - _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() ); - SMESH::SMESH_IDSource_var grp = SMESH::SObjectToInterface( sobj ); - groups[i] = grp; + int nbGroups = 0; + int goodType = ( mode == SMESH::BND_2DFROM3D ? SMESH::VOLUME : SMESH::FACE ); + groups->length( entries.count() ); + for ( int i = 0; i < entries.count(); ++i ) + { + _PTR(SObject) sobj = + SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() ); + SMESH::SMESH_IDSource_var grp = SMESH::SObjectToInterface( sobj ); + SMESH::array_of_ElementType_var types = grp->GetTypes(); + if ( types->length() < 1 || types[0] != goodType ) + { + if ( !wrongGroups.isEmpty() ) + wrongGroups += ", "; + wrongGroups += sobj->GetName().c_str(); + } + else + { + groups[ nbGroups++ ] = grp; + } + } + groups->length( nbGroups ); + mySrcMesh = groups[0]->GetMesh(); } - SMESH::Bnd_Dimension mode = myDlg->mode(); - QString meshName = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString(); - QString groupName = myDlg->needGroup() ? myDlg->getGroupName() : QString(); - bool copyAll = myDlg->copySource(); if ( !CORBA::is_nil( mySrcMesh ) ) { SMESH::SMESH_MeshEditor_var aMeshEditor = mySrcMesh->GetMeshEditor(); @@ -371,9 +456,11 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList ) groups, newMesh.out(), newGrp.out() ); - SUIT_MessageBox::information( myDlg, - tr("SMESH_INFORMATION"), - tr("NB_ADDED").arg( nbAdded )); + QString msg = tr("NB_ADDED").arg( nbAdded ); + if ( !wrongGroups.isEmpty() ) + msg += ".\n" + tr("WRONG_GROUPS").arg( wrongGroups ); + SUIT_MessageBox::information( myDlg, tr("SMESH_INFORMATION"), msg); + if ( !newMesh->_is_nil() ) { if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( newMesh ) ) theEntryList.append( aSObject->GetID().c_str() ); @@ -387,6 +474,11 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList ) #endif } ok = true; + + for ( int i = 0; i < entries.count(); ++i ) + if ( SMESH_Actor* actor = SMESH::FindActorByEntry( entries[i].toLatin1().constData() )) + SMESH::Update(actor->getIO(),actor->GetVisibility()); + SMESH::RepaintCurrentView(); } } catch ( ... ) { diff --git a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h index 272e7e09b..e0372955a 100644 --- a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h +++ b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h @@ -26,6 +26,7 @@ #include "SMESH_SMESHGUI.hxx" #include "SMESHGUI_Dialog.h" #include "SMESHGUI_SelectionOp.h" +#include "SMESH_TypeFilter.hxx" #include #include CORBA_SERVER_HEADER(SMESH_MeshEditor) @@ -45,7 +46,7 @@ class SMESHGUI_EXPORT SMESHGUI_Make2DFrom3DDlg : public SMESHGUI_Dialog Q_OBJECT public: - enum { Mesh, Groups }; + enum { MeshOrGroups }; SMESHGUI_Make2DFrom3DDlg( QWidget* ); virtual ~SMESHGUI_Make2DFrom3DDlg(); @@ -55,6 +56,8 @@ public: bool needNewMesh() const; QString getNewMeshName() const; void setNewMeshName( const QString& ); + void setNewMeshEnabled( bool ); + bool getNewMeshEnabled() const; bool needGroup() const; QString getGroupName() const; @@ -110,6 +113,9 @@ private: private: SMESH::SMESH_Mesh_var mySrcMesh; QPointer myDlg; + + SMESH_TypeFilter myMeshFilter; + SMESH_TypeFilter myGroupFilter; }; #endif // SMESHGUI_Make2DFrom3DOp_H diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index c5ebf227c..0da96ccdd 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -5594,7 +5594,7 @@ It is impossible to read point coordinates from file Groups - 2D groups + Mesh or groups MODE @@ -5643,21 +5643,31 @@ It is impossible to read point coordinates from file NB_ADDED %1 boundary elements have been added + + WRONG_GROUPS + The following groups have not been processed +as they are of improper type: +%1 + SMESH_ERR_NO_INPUT_MESH Source mesh is not specified - SMESH_ERR_NO_INPUT_GROUP - 2D group is not specified + SMESH_TOO_MANY_MESHES + Only one mesh can be processed at once + + + SMESH_NOT_ONLY_GROUPS + Can't process meshes and groups at once SMESH_ERR_NO_3D_ELEMENTS - The source object does not contain 3D elements + The source objects do not contain 3D elements SMESH_ERR_NO_2D_ELEMENTS - The source object does not contain 2D elements + The source objects do not contain 2D elements SMESH_ERR_MESH_NAME_NOT_SPECIFIED -- 2.39.2