From a619563bc793133b72374476026a2a7c8d09d1aa Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 11 Mar 2011 10:18:32 +0000 Subject: [PATCH] 020749: EDF 1291 SMESH : Create 2D Mesh from 3D improvement for note 0010000 --- .../gui/SMESH/images/2d_from_3d_dlg.png | Bin 21853 -> 17629 bytes .../gui/SMESH/input/make_2dmesh_from_3d.doc | 23 +- .../SMESH/input/tui_transforming_meshes.doc | 247 +++++++----------- src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx | 199 +++++++------- src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h | 11 +- src/SMESHGUI/SMESH_msg_en.ts | 16 +- 6 files changed, 238 insertions(+), 258 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 a03530978f29caa18e64729480aa02cde20066c0..4a839e89e23143881a7dd6eb1ed0137add1b8459 100644 GIT binary patch literal 17629 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 X1!_{we+vF=35KkcqGX|jzVH76Z8zPW literal 21853 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 generate border elements:
    +
  1. Select a mesh in the Object Browser or in the 3D Viewer
  2. From the Modification menu choose "Create boundary elements" item, or click "Create boundary elements" button in the toolbar @@ -26,31 +27,27 @@ of three 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 3D creates mesh edges on all borders of free facets of volume elements
    • +
    • 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 Mesh, submesh or group, the boundary which of -will be analyzed.
    • +
    • 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.
        -
      • This mesh adds elements in the selected mesh or the mesh - the selected submesh or group belongs to.
      • +
      • This mesh adds elements in the selected mesh.
      • New mesh adds elements to a new mesh. The new mesh appears in the Object Browser with the name that you can change in the adjacent box.
    • -
    • activate Copy source mesh checkbox to copy 2D or 3D - elements (depending on the operation type), which belong to the analyzed -Mesh, submesh or group field, to the new mesh.
    • -
    • deactivate Copy missing elements only checkbox to copy - boundary elements already present in the analyzed mesh to the - new mesh.
    • -
    • activate Create group checkbox to create a group to which the - missing boundary elements are added. The new group appears +
    • activate Copy source mesh checkbox to copy all elements of +the selected mesh to the new mesh, else the new mesh will contain only +boundary elements (old and created by this operation).
    • +
    • activate Create group checkbox to create a group to which + all the boundary elements (old and new) are added. The new group appears in the Object Browser with the name that you can change in the adjacent box.

    See Also a sample TUI Script of a \ref tui_make_2dmesh_from_3d "Create boundary elements" operation. diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc index 22f11886f..2f2f10d4c 100644 --- a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc @@ -426,162 +426,111 @@ if salome.sg.hasDesktop():

    Create boundary elements

    \code -# The objective of these samples is to illustrate the following use cases: -# 1) The mesh MESH1 with 3D cells has no or only a part of its skin (2D cells): -# 1.1) Add the 2D skin (missing 2D cells) to MESH1 (what is done now by the algorithm). -# 1.2) Create a new 3D Mesh MESH2 that consists of MESH1 and added 2D skin cells. -# 1.3) Create a new 2D Mesh MESH3 that consists only of 2D skin cells. -# 2) The mesh MESH1 with 3D cells has all its skin (2D cells): -# Create a new 2D Mesh MESH3 that consists only of 2D skin cells. -# -# In all cases an option to create a group containing these 2D skin cells is available. - from smesh import * +SetCurrentStudy(salome.myStudy) -box = geompy.MakeBoxDXDYDZ(1,1,1) +box = geompy.MakeBoxDXDYDZ(100, 100, 100) +gFaces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"]) +f1,f2 = gFaces[0],gFaces[1] geompy.addToStudy(box,"box") -boxFace = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])[0] -geompy.addToStudyInFather(box,boxFace,"boxFace") +geompy.addToStudyInFather(box,f1,"face1") +geompy.addToStudyInFather(box,f2,"face2") -MESH1 = Mesh(box,"MESH1") -MESH1.AutomaticHexahedralization() +twoFaces = geompy.MakeCompound([f1,f2]) -init_nb_edges = MESH1.NbEdges() -init_nb_faces = MESH1.NbFaces() -init_nb_volumes = MESH1.NbVolumes() +## ----------- +## +## 2D from 3D +## +## ----------- +dim = SMESH.BND_2DFROM3D -# ========================================================================================= -# 1) The mesh MESH1 with 3D cells has no or only a part of its skin (2D cells) -# ========================================================================================= -# remove some faces -all_faces = MESH1.GetElementsByType(SMESH.FACE) -rm_faces = all_faces[:init_nb_faces/5] + all_faces[4*init_nb_faces/5:] -MESH1.RemoveElements(rm_faces) -assert(MESH1.NbFaces() == init_nb_faces-len(rm_faces)) - -# 1.1) Add the 2D skin (missing 2D cells) to MESH1 -# ------------------------------------------------- -# add missing faces -# 1.1.1) to the whole mesh -m,g = MESH1.MakeBoundaryMesh(MESH1) -assert(init_nb_faces == MESH1.NbFaces()) -assert(init_nb_edges == MESH1.NbEdges()) -assert(m) -assert(not g) - -# 1.1.2) to some elements -MESH1.RemoveElements(rm_faces) -MESH1.MakeBoundaryMesh([]) -assert(init_nb_faces != MESH1.NbFaces()) -volumes = MESH1.GetElementsByType(SMESH.VOLUME) -for v in volumes: - MESH1.MakeBoundaryMesh([v]) -assert(init_nb_faces == MESH1.NbFaces()) -assert(init_nb_edges == MESH1.NbEdges()) - -# 1.1.3) to a group of elements -volGroup1 = MESH1.CreateEmptyGroup(SMESH.VOLUME, "volGroup1") -volGroup1.Add( volumes[: init_nb_volumes/2]) -volGroup2 = MESH1.CreateEmptyGroup(SMESH.VOLUME, "volGroup2") -volGroup1.Add( volumes[init_nb_volumes/2:]) -MESH1.RemoveElements(rm_faces) -MESH1.MakeBoundaryMesh(volGroup1) -MESH1.MakeBoundaryMesh(volGroup2) -assert(init_nb_faces == MESH1.NbFaces()) -assert(init_nb_edges == MESH1.NbEdges()) - -# 1.1.4) to a submesh. -# The submesh has no volumes, so it is required to check if it passes without crash and does not create -# missing faces -faceSubmesh = MESH1.GetSubMesh( boxFace, "boxFace" ) -MESH1.RemoveElements(rm_faces) -MESH1.MakeBoundaryMesh(faceSubmesh) -assert(init_nb_faces != MESH1.NbFaces()) - -# check group creation -MESH1.RemoveElements(rm_faces) -groupName = "added to mesh" -m,group = MESH1.MakeBoundaryMesh(MESH1,groupName=groupName) -assert(group) -assert(group.GetName() == groupName) -assert(group.Size() == len(rm_faces)) - - -# 1.2) Create a new 3D Mesh MESH2 that consists of MESH1 and added 2D skin cells. -# ------------------------------------------------------------------------------ -MESH1.RemoveElements(rm_faces) -meshName = "MESH2" -MESH2,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyElements=True) -assert(MESH2) -assert(MESH2.GetName() == meshName) -assert(MESH2.NbVolumes() == MESH1.NbVolumes()) -assert(MESH2.NbFaces() == len(rm_faces)) - -# check group creation -MESH1.RemoveElements(rm_faces) -MESH2,group = MESH1.MakeBoundaryMesh(MESH1,meshName="MESH2_0", - groupName=groupName,toCopyElements=True) -assert(group) -assert(group.GetName() == groupName) -assert(group.Size() == len(rm_faces)) -assert(group.GetMesh()._is_equivalent(MESH2.GetMesh())) - -# 1.3) Create a new 2D Mesh MESH3 that consists only of 2D skin cells. -# ----------------------------------------------------------------------- -MESH1.RemoveElements(rm_faces) -meshName = "MESH3" -MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyExistingBondary=True) -assert(MESH3) -assert(not group) -assert(MESH3.GetName() == meshName) -assert(MESH3.NbVolumes() == 0) -assert(MESH3.NbFaces() == init_nb_faces) - -# check group creation -MESH1.RemoveElements(rm_faces) -MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName, - groupName=groupName, toCopyExistingBondary=True) -assert(group) -assert(group.GetName() == groupName) -assert(group.Size() == len(rm_faces)) -assert(group.GetMesh()._is_equivalent(MESH3.GetMesh())) -assert(MESH3.NbFaces() == init_nb_faces) - -# ================================================================== -# 2) The mesh MESH1 with 3D cells has all its skin (2D cells) -# Create a new 2D Mesh MESH3 that consists only of 2D skin cells. -# ================================================================== -MESH1.MakeBoundaryMesh(MESH1) -MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyExistingBondary=True) -assert(MESH3) -assert(not group) -assert(MESH3.NbVolumes() == 0) -assert(MESH3.NbFaces() == init_nb_faces) - -# check group creation -MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName, - groupName=groupName, toCopyExistingBondary=True) -assert(group) -assert(group.GetName() == groupName) -assert(group.Size() == 0) -assert(group.GetMesh()._is_equivalent(MESH3.GetMesh())) -assert(MESH3.NbFaces() == init_nb_faces) - -# ================ -# Make 1D from 2D -# ================ - -MESH1.Clear() -MESH1.Compute() -MESH1.RemoveElements( MESH1.GetElementsByType(SMESH.EDGE)) - -rm_faces = faceSubmesh.GetIDs()[:2] # to remove few adjacent faces -nb_missing_edges = 2 + 2*len(rm_faces) - -MESH1.RemoveElements(rm_faces) -mesh,group = MESH1.MakeBoundaryMesh(MESH1, BND_1DFROM2D) -assert( MESH1.NbEdges() == nb_missing_edges ) +init_mesh = Mesh(box, "box") +init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons +# remove some faces +faces = init_mesh.GetElementsByType( SMESH.FACE ) +nb_faces = len( faces ) +rm_face = faces[ : nb_faces/2] +init_mesh.RemoveElements( rm_face ) + +# restore boundary in this mesh +mesh = CopyMesh( init_mesh, "2D from 3D") +groupName = "bnd 2D" +nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName) + +# restore boundary (only) in other mesh +meshName = "2D boundary of " + init_mesh.GetName() +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName) + +# restore boundary in mesh copy +meshName = init_mesh.GetName() + " + boundary" +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True) + + +## ----------- +## +## 1D from 2D +## +## ----------- +dim = SMESH.BND_1DFROM2D + +init_mesh = Mesh(f1, "2D mesh") +init_mesh.AutomaticHexahedralization() + +# remove some edges +edges = init_mesh.GetElementsByType( SMESH.EDGE ) +nb_edges = len( edges ) +rm_edge = edges[ : nb_edges/2] +init_mesh.RemoveElements( rm_edge ) + + +# restore boundary edges in this mesh +mesh = CopyMesh( init_mesh, "1D from 2D") +groupName = "bnd 1D" +nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName) + +# restore boundary edges (only) in other mesh +meshName = "1D boundary of " + init_mesh.GetName() +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName) + +# restore boundary edges in mesh copy +meshName = init_mesh.GetName() + " + boundary" +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True) + + + +## ------------------ +## +## 1D from 2D GROUPS +## +## ------------------ +dim = SMESH.BND_1DFROM3D + +init_mesh = Mesh(box, "box") +init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons +# remove all edges +rm_edges = init_mesh.GetElementsByType( SMESH.EDGE ) +init_mesh.RemoveElements( rm_edges ) + +# make groups of faces +fGroup1 = init_mesh.Group( f1, "f1" ) +fGroup2 = init_mesh.Group( f2, "f2" ) + +# make 1D boundary around groups in this mesh +mesh = CopyMesh( init_mesh, "1D from 2D groups", toCopyGroups=True) +groups = mesh.GetGroups() +nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName,groups=groups) + +# make 1D boundary (only) in other mesh +meshName = "boundary from groups of " + init_mesh.GetName() +groups = init_mesh.GetGroups() +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName,groups=groups) + +# make 1D boundary in mesh copy +meshName = init_mesh.GetName() + " + boundary from groups" +nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, + groups=groups, toCopyAll=True) \endcode */ diff --git a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx index eb8a49ba0..b11f4bdf7 100644 --- a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx +++ b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx @@ -28,12 +28,15 @@ #include "SMESH_LogicalFilter.hxx" // SALOME GUI includes +#include #include -#include -#include +#include #include #include #include +#include +#include +#include // IDL includes #include @@ -46,6 +49,7 @@ #include #include #include +#include #define SPACING 6 #define MARGIN 11 @@ -56,15 +60,11 @@ */ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) - : SMESHGUI_Dialog( parent, false, true, OK | Apply | Close | Help ) + : SMESHGUI_Dialog( parent, false, true, OK | Apply | Close | Help ) { // title setWindowTitle( tr("CAPTION") ); - // mesh - setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); - createObject( tr( "MESH" ), mainFrame(), Mesh ); - // mode QGroupBox* aModeGrp = new QGroupBox( tr( "MODE" ), mainFrame() ); QHBoxLayout* aModeGrpLayout = new QHBoxLayout( aModeGrp ); @@ -77,6 +77,12 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) aModeGrpLayout->addWidget( my1dFrom2dRB ); aModeGrpLayout->addWidget( my1dFrom3dRB ); + // Groups of mesh faces + setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); + createObject( tr( "Groups" ), mainFrame(), Groups ); + setNameIndication( Groups, ListOfNames ); + objectWg( Groups, Btn )->hide(); + // target QGroupBox* aTargetGrp = new QGroupBox( tr( "TARGET" ), mainFrame() ); QGridLayout* aTargetGrpLayout = new QGridLayout( aTargetGrp ); @@ -86,12 +92,10 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) myNewMeshRB = new QRadioButton( tr( "NEW_MESH" ), aTargetGrp ); myMeshName = new QLineEdit( aTargetGrp ); myCopyCheck = new QCheckBox( tr( "COPY_SRC" ), aTargetGrp ); - myMissingCheck = new QCheckBox( tr( "MISSING_ONLY" ), aTargetGrp ); aTargetGrpLayout->addWidget( myThisMeshRB, 0, 0 ); aTargetGrpLayout->addWidget( myNewMeshRB, 1, 0 ); aTargetGrpLayout->addWidget( myMeshName, 1, 1 ); aTargetGrpLayout->addWidget( myCopyCheck, 2, 0 ); - aTargetGrpLayout->addWidget( myMissingCheck, 2, 1 ); myGroupCheck = new QCheckBox( tr( "CREATE_GROUP" ), mainFrame() ); myGroupName = new QLineEdit( mainFrame() ); @@ -99,10 +103,9 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) QGridLayout* aDlgLay = new QGridLayout( mainFrame() ); aDlgLay->setMargin( 0 ); aDlgLay->setSpacing( SPACING ); - aDlgLay->addWidget( objectWg( Mesh, Label ), 0, 0 ); - aDlgLay->addWidget( objectWg( Mesh, Btn ), 0, 1 ); - aDlgLay->addWidget( objectWg( Mesh, Control ), 0, 2 ); - aDlgLay->addWidget( aModeGrp, 1, 0, 1, 3 ); + aDlgLay->addWidget( aModeGrp, 0, 0, 1, 3 ); + aDlgLay->addWidget( objectWg( Groups, Label ), 1, 0 ); + aDlgLay->addWidget( objectWg( Groups, Control ), 1, 1 ); aDlgLay->addWidget( aTargetGrp, 2, 0, 1, 3 ); aDlgLay->addWidget( myGroupCheck, 3, 0 ); aDlgLay->addWidget( myGroupName, 3, 1, 1, 2 ); @@ -115,7 +118,6 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent ) // init dlg my2dFrom3dRB->setChecked( true ); myThisMeshRB->setChecked( true ); - myMissingCheck->setChecked( true ); onTargetChanged(); onGroupChecked(); } @@ -169,16 +171,10 @@ bool SMESHGUI_Make2DFrom3DDlg::copySource() const return myCopyCheck->isChecked(); } -bool SMESHGUI_Make2DFrom3DDlg::copyMissingOnly() const -{ - return myMissingCheck->isChecked(); -} - void SMESHGUI_Make2DFrom3DDlg::onTargetChanged() { myMeshName->setEnabled( myNewMeshRB->isChecked() ); myCopyCheck->setEnabled( myNewMeshRB->isChecked() ); - myMissingCheck->setEnabled( myNewMeshRB->isChecked() ); } void SMESHGUI_Make2DFrom3DDlg::onGroupChecked() @@ -212,33 +208,61 @@ void SMESHGUI_Make2DFrom3DOp::startOperation() if( !myDlg ) myDlg = new SMESHGUI_Make2DFrom3DDlg( desktop() ); - mySrc = SMESH::SMESH_IDSource::_nil(); - myHelpFileName = "make_2dmesh_from_3d_page.html"; SMESHGUI_SelectionOp::startOperation(); - myDlg->activateObject( SMESHGUI_Make2DFrom3DDlg::Mesh ); myDlg->setNewMeshName( SMESH::UniqueName( "Mesh_1" ) ); myDlg->setGroupName( SMESH::UniqueName( "Group" ) ); myDlg->show(); - selectionDone(); + 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() ) ); + + onModeChanged(); +} + +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 ); + + // install filter + int id = enableGroups ? SMESHGUI_Make2DFrom3DDlg::Groups : SMESHGUI_Make2DFrom3DDlg::Mesh; + onDeactivateObject( id ); + onActivateObject( id ); } void SMESHGUI_Make2DFrom3DOp::selectionDone() { + mySrcMesh = SMESH::SMESH_Mesh::_nil(); + myDlg->clearSelection( SMESHGUI_Make2DFrom3DDlg::Groups ); + if ( !dlg() ) return; + if ( dlg()->isVisible() ) { try { QStringList names, ids; LightApp_Dialog::TypesList types; selected( names, types, ids ); - if ( names.count() == 1 ) - myDlg->selectObject( names, types, ids ); - else - myDlg->clearSelection(); + myDlg->selectObject( names, types, ids ); + + SALOME_ListIO sel; selectionMgr()->selectedObjects( sel, SVTK_Viewer::Type() ); + if ( !sel.IsEmpty() ) + { + SMESH::SMESH_IDSource_var IS = SMESH::IObjectToInterface(sel.First()); + if(!CORBA::is_nil(IS)) + mySrcMesh = IS->GetMesh(); + } } catch ( const SALOME::SALOME_Exception& S_ex ) { SalomeApp_Tools::QtCatchCorbaException( S_ex ); @@ -250,13 +274,8 @@ void SMESHGUI_Make2DFrom3DOp::selectionDone() SUIT_SelectionFilter* SMESHGUI_Make2DFrom3DOp::createFilter( const int theId ) const { - SUIT_SelectionFilter* f = 0; - if ( theId == SMESHGUI_Make2DFrom3DDlg::Mesh ) { - QList filters; - filters.append( new SMESH_TypeFilter( MESHorSUBMESH ) ); - filters.append( new SMESH_TypeFilter( GROUP ) ); - f = new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR ); - } + MeshObjectType type = ( theId == SMESHGUI_Make2DFrom3DDlg::Groups ? GROUP_FACE : MESH ); + SUIT_SelectionFilter* f = new SMESH_TypeFilter( type ); return f; } @@ -264,36 +283,43 @@ bool SMESHGUI_Make2DFrom3DOp::isValid( QString& msg ) const { if ( !dlg() ) return false; - // check if any source data is selected - QString entry = myDlg->selectedObject( SMESHGUI_Make2DFrom3DDlg::Mesh ); - SMESH::SMESH_IDSource_var obj; - _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entry.toLatin1().constData() ); - if ( sobj ) - obj = SMESH::SObjectToInterface( sobj ); - - if ( obj->_is_nil() ) { + // check if a mesh is selected + if ( mySrcMesh->_is_nil() ) + { msg = tr( "SMESH_ERR_NO_INPUT_MESH" ); return false; } - - // check if source contains elements of required type + // check if groups are selected SMESH::Bnd_Dimension mode = myDlg->mode(); - SMESH::array_of_ElementType_var types = obj->GetTypes(); - - bool has3d = false; - bool has2d = false; - for ( int i = 0; i < types->length(); i++ ) { - if ( types[i] == SMESH::VOLUME ) has3d = true; - else if ( types[i] == SMESH::FACE ) has2d = true; + if ( mode == SMESH::BND_1DFROM3D ) + { + 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" ); + return false; + } } + else + { + // check if mesh contains elements of required type + SMESH::Bnd_Dimension mode = myDlg->mode(); - if ( ( mode == SMESH::BND_2DFROM3D || mode == SMESH::BND_1DFROM3D ) && !has3d ) { - msg = tr( "SMESH_ERR_NO_3D_ELEMENTS" ); - return false; - } - else if ( mode == SMESH::BND_1DFROM2D && !has2d ) { - msg = tr( "SMESH_ERR_NO_2D_ELEMENTS" ); - return false; + if ( mode == SMESH::BND_2DFROM3D && mySrcMesh->NbVolumes() == 0 ) { + msg = tr( "SMESH_ERR_NO_3D_ELEMENTS" ); + return false; + } + else if ( mode == SMESH::BND_1DFROM2D && mySrcMesh->NbFaces() == 0 ) { + msg = tr( "SMESH_ERR_NO_2D_ELEMENTS" ); + return false; + } } // check if new mesh name is specified @@ -317,41 +343,38 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh() bool ok = false; try { - QString entry = myDlg->selectedObject( SMESHGUI_Make2DFrom3DDlg::Mesh ); - _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entry.toLatin1().constData() ); - SMESH::SMESH_IDSource_var obj = SMESH::SObjectToInterface( sobj ); - + QStringList entries; + dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::Groups, entries ); + SMESH::ListOfIDSources_var groups = new SMESH::ListOfIDSources; + 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 ); + groups[i] = grp; + } SMESH::Bnd_Dimension mode = myDlg->mode(); QString meshName = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString(); QString groupName = myDlg->needGroup() ? myDlg->getGroupName() : QString(); - bool copySrc = myDlg->copySource(); - bool copyAll = !myDlg->copyMissingOnly(); - - SMESH::SMESH_Mesh_var srcMesh = SMESH::SMESH_Mesh::_narrow( obj ); - if ( CORBA::is_nil( srcMesh ) ) { - SMESH::SMESH_subMesh_var subMesh = SMESH::SMESH_subMesh::_narrow( obj ); - if ( !CORBA::is_nil( subMesh ) ) - srcMesh = subMesh->GetFather(); - } - if ( CORBA::is_nil( srcMesh ) ) { - SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj ); - if ( !CORBA::is_nil( grp ) ) - srcMesh = grp->GetMesh(); - } + bool copyAll = myDlg->copySource(); - if ( !CORBA::is_nil( srcMesh ) ) { - SMESH::SMESH_MeshEditor_var aMeshEditor = srcMesh->GetMeshEditor(); + if ( !CORBA::is_nil( mySrcMesh ) ) { + SMESH::SMESH_MeshEditor_var aMeshEditor = mySrcMesh->GetMeshEditor(); SMESH::SMESH_Group_var newGrp; - SMESH::SMESH_Mesh_var mesh = aMeshEditor->MakeBoundaryMesh( obj.in(), - mode, - groupName.toLatin1().constData(), - meshName.toLatin1().constData(), - copySrc, - copyAll, - newGrp.out() ); - if ( !mesh->_is_nil() ) { + SMESH::SMESH_Mesh_var newMesh; + CORBA::Long nbAdded = aMeshEditor->MakeBoundaryElements( mode, + groupName.toLatin1().constData(), + meshName.toLatin1().constData(), + copyAll, + groups, + newMesh.out(), + newGrp.out() ); + SUIT_MessageBox::information( myDlg, + tr("SMESH_INFORMATION"), + tr("NB_ADDED").arg( nbAdded )); + if ( !newMesh->_is_nil() ) { #ifdef WITHGENERICOBJ - mesh->UnRegister(); + newMesh->UnRegister(); #endif } if ( !newGrp->_is_nil() ) { diff --git a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h index 23bab5e61..69cc94655 100644 --- a/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h +++ b/src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h @@ -29,10 +29,12 @@ #include #include CORBA_SERVER_HEADER(SMESH_MeshEditor) +#include CORBA_SERVER_HEADER(SMESH_Mesh) class QCheckBox; class QLineEdit; class QRadioButton; +class SMESHGUI_Make2DFrom3DOp; /*! * \brief Dialog to show result mesh statistic @@ -43,7 +45,7 @@ class SMESHGUI_EXPORT SMESHGUI_Make2DFrom3DDlg : public SMESHGUI_Dialog Q_OBJECT public: - enum { Mesh }; + enum { Mesh, Groups }; SMESHGUI_Make2DFrom3DDlg( QWidget* ); virtual ~SMESHGUI_Make2DFrom3DDlg(); @@ -59,7 +61,6 @@ public: void setGroupName( const QString& ); bool copySource() const; - bool copyMissingOnly() const; private slots: void onTargetChanged(); @@ -73,9 +74,10 @@ private: QRadioButton* myNewMeshRB; QLineEdit* myMeshName; QCheckBox* myCopyCheck; - QCheckBox* myMissingCheck; QCheckBox* myGroupCheck; QLineEdit* myGroupName; + + friend class SMESHGUI_Make2DFrom3DOp; }; /*! @@ -100,12 +102,13 @@ protected: protected slots: virtual bool onApply(); + void onModeChanged(); private: bool compute2DMesh(); private: - SMESH::SMESH_IDSource_var mySrc; + SMESH::SMESH_Mesh_var mySrcMesh; QPointer myDlg; }; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index d615804e7..d6e8ce582 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -5589,8 +5589,8 @@ It is impossible to read point coordinates from file Create boundary elements - MESH - Mesh, submesh or group + Groups + 2D groups MODE @@ -5602,7 +5602,7 @@ It is impossible to read point coordinates from file 1D_FROM_3D - 1D from 3D + 1D from 2D groups 1D_FROM_2D @@ -5635,9 +5635,17 @@ It is impossible to read point coordinates from file SMESHGUI_Make2DFrom3DOp + + NB_ADDED + %1 boundary elements have been added + SMESH_ERR_NO_INPUT_MESH - Source mesh, sub-mesh or group is not specified + Source mesh is not specified + + + SMESH_ERR_NO_INPUT_GROUP + 2D group is not specified SMESH_ERR_NO_3D_ELEMENTS -- 2.30.2