From 6498f37c2b039e9a5daef9826f1776b7f88ec892 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 30 Nov 2010 10:39:11 +0000 Subject: [PATCH] 0020945: EDF 1465 SMESH: create a new mesh from a selected group or from selected elements --- doc/salome/gui/SMESH/images/copy_mesh_dlg.png | Bin 0 -> 24617 bytes .../gui/SMESH/images/copy_mesh_icon.png | Bin 0 -> 1117 bytes doc/salome/gui/SMESH/input/about_meshes.doc | 3 + doc/salome/gui/SMESH/input/copy_mesh.doc | 56 ++ .../gui/SMESH/input/tui_creating_meshes.doc | 44 ++ resources/Makefile.am | 1 + resources/copy_mesh.png | Bin 0 -> 1117 bytes src/SMESHGUI/Makefile.am | 3 + src/SMESHGUI/SMESHGUI.cxx | 11 + src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx | 667 ++++++++++++++++++ src/SMESHGUI/SMESHGUI_CopyMeshDlg.h | 125 ++++ src/SMESHGUI/SMESHGUI_Utils.cxx | 2 +- src/SMESHGUI/SMESH_images.ts | 8 + src/SMESHGUI/SMESH_msg_en.ts | 35 + 14 files changed, 954 insertions(+), 1 deletion(-) create mode 100644 doc/salome/gui/SMESH/images/copy_mesh_dlg.png create mode 100644 doc/salome/gui/SMESH/images/copy_mesh_icon.png create mode 100644 doc/salome/gui/SMESH/input/copy_mesh.doc create mode 100644 resources/copy_mesh.png create mode 100644 src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx create mode 100644 src/SMESHGUI/SMESHGUI_CopyMeshDlg.h diff --git a/doc/salome/gui/SMESH/images/copy_mesh_dlg.png b/doc/salome/gui/SMESH/images/copy_mesh_dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..db9c929b5fca0f1a52838fa5dbc57a474cbbb14b GIT binary patch literal 24617 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/copy_mesh_icon.png b/doc/salome/gui/SMESH/images/copy_mesh_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..263479f3bf79e868ee99d860c0c3b13ffb9b3d55 GIT binary patch literal 1117 zcmV-j1fu(iP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ<(@8`@RCwB)lUr<5RTPH5b7tyfCZ{tgB%Kzfz+kJ` zCMd1en)pI!gMuY32oDl47)4P)kpwS^3Ni5-13{%CUYdBp*ceQOM3NGV_`;HPHLIX%$eEe?7e(|Hbo#3SF&DK*8cXt{{|=j5h&glS z$g+(;V%s*BWmQ|2<=m|IKY{b+&66cBe>1)`7pVAOzy%8y$inqsA_C)vs|IeW(7KTi z0Bvn;(z<3lJKtW4>$=yZ)*7W0N-12|rC2OlqvwJ*g0;7|OY7S0c)pO!<#_bfAMmu` z`GPiA(l>(E!u!jUqpDLt_PUWQC@|LHWYS$OuKxpnQX;4W2J!aHWdZ`Faho zxw%>9uh~J-6AGT8;2AQR49b@=kn#;md8k4T$2m_8Fr>pUFmdsiB(=+E>CYgj0pHf5P|oWC0X~y zNsQ5G-$VO~(}#cJj)UK^DUslVREp0oT>@ZJRTYaJhZSefaxkB7v25EGV+;VLrKLn7 z5k!Q$Tb|@x|F7hRQ%srJ!tIT19P9a5AgTsmb1o~(G=7lGr2LSgrx!Qia=a5zyP4zo9#To make a copy of a mesh: + +\par +From the \b Mesh menu select Copy Mesh or click "Copy Mesh +" button in the toolbar. + +\image html copy_mesh_icon.png +
"Copy Mesh" button
+ +\par +The following dialog box will appear: + +\image html copy_mesh_dlg.png + +\par +In the dialog: +
    +
  • specify the part of mesh to copy: + +
      +
    • Select the whole mesh, submesh or group by mouse activating +this checkbox; or
    • +
    • choose mesh elements with the mouse in the 3D Viewer. It is +possible to select a whole area with a mouse frame; or
    • +
    • input the Source Element IDs directly in this field. The +selected elements will be highlighted in the viewer; or
    • +
    • apply Filters. Set filter button allows to apply a filter +to the selection of elements. See more about filters in the \ref +selection_filter_library_page "Selection filter library" page.
    • +
    +
  • + +
  • specify the New Mesh Name;
  • + +
  • specify the conditions of copying: +
      +
    • activate Generate groups checkbox to copy the groups of +elements of the source mesh to the newly created mesh.
    • +
    • activate Preserve IDs of elements checkbox to keep +the IDs of new nodes and elements the same as the IDs of source nodes +and elements.
    • +
    +
  • + +
  • Click \b Apply or Apply and Close button to confirm the operation.
  • +
+ +See Also a sample +\ref tui_copy_mesh "TUI Example of mesh copying." +*/ diff --git a/doc/salome/gui/SMESH/input/tui_creating_meshes.doc b/doc/salome/gui/SMESH/input/tui_creating_meshes.doc index 359ffd7d5..bad32ebf4 100644 --- a/doc/salome/gui/SMESH/input/tui_creating_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_creating_meshes.doc @@ -249,4 +249,48 @@ demonstrating the resulting mesh. \skipline import geompy \until #end +
+\anchor tui_copy_mesh +

Mesh Copying

+\code +from smesh import * +SetCurrentStudy(salome.myStudy) + +# make geometry of a box +box = geompy.MakeBoxDXDYDZ(100,100,100) +face = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[0] + +# generate 3D mesh +mesh = Mesh(box) +localAlgo = mesh.Triangle(face) +mesh.AutomaticHexahedralization() + +# objects to copy +fGroup = mesh.GroupOnGeom( face, "2D on face") +nGroup = mesh.GroupOnGeom( face, "nodes on face", NODE) +subMesh = localAlgo.GetSubMesh() + +# make a new mesh by copying different part of the mesh + +# 1. copy the whole mesh +newMesh = CopyMesh( mesh, "whole mesh copy") + +# 2. copy a group of 2D elements along with groups +newMesh = CopyMesh( fGroup, "face group copy with groups",toCopyGroups=True) + +# 3. copy a group of nodes with preseving their ids +newMesh = CopyMesh( nGroup, "node group copy", toKeepIDs=True) + +# 4. copy some faces +faceIds = fGroup.GetIDs()[-10:] +newMesh = CopyMesh( mesh.GetIDSource( faceIds, FACE ), "some faces copy") + +# 5. copy some nodes +nodeIds = nGroup.GetIDs()[-10:] +newMesh = CopyMesh( mesh.GetIDSource( nodeIds, NODE), "some nodes copy") + +# 6. copy a sub-mesh +newMesh = CopyMesh( subMesh, "submesh copy" ) +\endcode + */ diff --git a/resources/Makefile.am b/resources/Makefile.am index 393197be5..c6c163162 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -172,6 +172,7 @@ dist_salomeres_DATA = \ mesh_tree_hypo_projection_3d.png \ mesh_tree_hypo_projection_2d.png \ mesh_build_compound.png \ + copy_mesh.png \ mesh_node_to_point.png \ mesh_tree_mesh_partial.png \ mesh_extractGroup.png \ diff --git a/resources/copy_mesh.png b/resources/copy_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..263479f3bf79e868ee99d860c0c3b13ffb9b3d55 GIT binary patch literal 1117 zcmV-j1fu(iP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ<(@8`@RCwB)lUr<5RTPH5b7tyfCZ{tgB%Kzfz+kJ` zCMd1en)pI!gMuY32oDl47)4P)kpwS^3Ni5-13{%CUYdBp*ceQOM3NGV_`;HPHLIX%$eEe?7e(|Hbo#3SF&DK*8cXt{{|=j5h&glS z$g+(;V%s*BWmQ|2<=m|IKY{b+&66cBe>1)`7pVAOzy%8y$inqsA_C)vs|IeW(7KTi z0Bvn;(z<3lJKtW4>$=yZ)*7W0N-12|rC2OlqvwJ*g0;7|OY7S0c)pO!<#_bfAMmu` z`GPiA(l>(E!u!jUqpDLt_PUWQC@|LHWYS$OuKxpnQX;4W2J!aHWdZ`Faho zxw%>9uh~J-6AGT8;2AQR49b@=kn#;md8k4T$2m_8Fr>pUFmdsiB(=+E>CYgj0pHf5P|oWC0X~y zNsQ5G-$VO~(}#cJj)UK^DUslVREp0oT>@ZJRTYaJhZSefaxkB7v25EGV+;VLrKLn7 z5k!Q$Tb|@x|F7hRQ%srJ!tIT19P9a5AgTsmb1o~(G=7lGr2LSgrx!Qia=a5zyP4zo9#show(); + } + break; case 710: // Build compound mesh { if (checkLock(aStudy)) break; @@ -3209,6 +3217,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 702, "CREATE_MESH", "ICON_DLG_INIT_MESH" ); createSMESHAction( 703, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" ); createSMESHAction( 704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" ); + createSMESHAction( 705, "COPY_MESH", "ICON_COPY_MESH" ); createSMESHAction( 710, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" ); createSMESHAction( 711, "PRECOMPUTE", "ICON_PRECOMPUTE" ); createSMESHAction( 712, "EVALUATE", "ICON_COMPUTE" ); @@ -3377,6 +3386,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 703, meshId, -1 ); createMenu( 704, meshId, -1 ); createMenu( 710, meshId, -1 ); + createMenu( 705, meshId, -1 ); createMenu( separator(), meshId, -1 ); createMenu( 701, meshId, -1 ); createMenu( 711, meshId, -1 ); @@ -3492,6 +3502,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 703, meshTb ); createTool( 704, meshTb ); createTool( 710, meshTb ); + createTool( 705, meshTb ); createTool( separator(), meshTb ); createTool( 701, meshTb ); createTool( 711, meshTb ); diff --git a/src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx new file mode 100644 index 000000000..f4b6950bf --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx @@ -0,0 +1,667 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_CopyMeshDlg.cxx + +#include "SMESHGUI_CopyMeshDlg.h" + +#include "SMESHGUI.h" +#include "SMESHGUI_SpinBox.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_MeshUtils.h" +#include "SMESHGUI_IdValidator.h" +#include "SMESHGUI_FilterDlg.h" + +#include +#include +#include + +// SALOME GUI includes +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +// SALOME KERNEL includes +#include + +// OCCT includes +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +/*! + \class BusyLocker + \brief Simple 'busy state' flag locker. + \internal +*/ + +namespace +{ + class BusyLocker + { + public: + //! Constructor. Sets passed boolean flag to \c true. + BusyLocker( bool& busy ) : myBusy( busy ) { myBusy = true; } + //! Destructor. Clear external boolean flag passed as parameter to the constructor to \c false. + ~BusyLocker() { myBusy = false; } + private: + bool& myBusy; //! External 'busy state' boolean flag + }; +} + +#define SPACING 6 +#define MARGIN 11 + +//To disable automatic genericobj management, the following line should be commented. +//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx +#define WITHGENERICOBJ + + +//================================================================================ +/*! + * \brief Constructor + */ +//================================================================================ + +SMESHGUI_CopyMeshDlg::SMESHGUI_CopyMeshDlg( SMESHGUI* theModule ) + : QDialog( SMESH::GetDesktop( theModule ) ), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + myFilterDlg(0), + mySelectedObject(SMESH::SMESH_IDSource::_nil()) +{ + QPixmap image (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_COPY_MESH"))); + + setModal(false); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowTitle(tr("SMESH_COPY_MESH_TITLE")); + setSizeGripEnabled(true); + + QVBoxLayout* SMESHGUI_CopyMeshDlgLayout = new QVBoxLayout(this); + SMESHGUI_CopyMeshDlgLayout->setSpacing(SPACING); + SMESHGUI_CopyMeshDlgLayout->setMargin(MARGIN); + + /***************************************************************/ + ConstructorsBox = new QGroupBox(tr("SMESH_COPY_MESH_TITLE"), this); + QButtonGroup* GroupConstructors = new QButtonGroup(this); + QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox); + ConstructorsBoxLayout->setSpacing(SPACING); + ConstructorsBoxLayout->setMargin(MARGIN); + + QRadioButton* RadioButton1= new QRadioButton(ConstructorsBox); + RadioButton1->setIcon(image); + GroupConstructors->addButton(RadioButton1, 0); + + ConstructorsBoxLayout->addWidget(RadioButton1); + RadioButton1->setChecked(true); + GroupConstructors->addButton(RadioButton1, 0); + + /***************************************************************/ + GroupArguments = new QGroupBox(tr("SMESH_ARGUMENTS"), this); + QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments); + GroupArgumentsLayout->setSpacing(SPACING); + GroupArgumentsLayout->setMargin(MARGIN); + + myIdValidator = new SMESHGUI_IdValidator(this); + + // Controls for idSource/elements selection + myTextLabelElements = new QLabel(tr("OBJECT_NAME"), GroupArguments); + myLineEditElements = new QLineEdit(GroupArguments); + myLineEditElements->setValidator(myIdValidator); + myLineEditElements->setMaxLength(-1); + myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments ); + connect(myFilterBtn, SIGNAL(clicked()), this, SLOT(setFilters())); + + // Control for the mesh objects selection + myIdSourceCheck = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments); + + // Name of a mesh to create + QLabel* meshNameLabel = new QLabel(tr("NEW_NAME"), GroupArguments); + myMeshNameEdit = new QLineEdit(GroupArguments); + + // CheckBox for copying groups + myCopyGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); + myCopyGroupsCheck->setChecked(false); + + // CheckBox for keeping ids + myKeepIdsCheck = new QCheckBox(tr("SMESH_KEEP_IDS"), GroupArguments); + myKeepIdsCheck->setChecked(true); + + // layout + GroupArgumentsLayout->addWidget(myTextLabelElements, 0, 0); + GroupArgumentsLayout->addWidget(myLineEditElements, 0, 1, 1, 5); + GroupArgumentsLayout->addWidget(myFilterBtn, 0, 6); + GroupArgumentsLayout->addWidget(myIdSourceCheck, 1, 0, 1, 6); + GroupArgumentsLayout->addWidget(meshNameLabel, 2, 0); + GroupArgumentsLayout->addWidget(myMeshNameEdit, 2, 1, 1, 5); + GroupArgumentsLayout->addWidget(myCopyGroupsCheck, 3, 0, 1, 6); + GroupArgumentsLayout->addWidget(myKeepIdsCheck, 4, 0, 1, 6); + + /***************************************************************/ + GroupButtons = new QGroupBox(this); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); + GroupButtonsLayout->setSpacing(SPACING); + GroupButtonsLayout->setMargin(MARGIN); + + buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons); + buttonOk->setAutoDefault(true); + buttonOk->setDefault(true); + buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); + buttonApply->setAutoDefault(true); + buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons); + buttonCancel->setAutoDefault(true); + buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons); + buttonHelp->setAutoDefault(true); + + GroupButtonsLayout->addWidget(buttonOk); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addWidget(buttonApply); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addStretch(); + GroupButtonsLayout->addWidget(buttonCancel); + GroupButtonsLayout->addWidget(buttonHelp); + + /***************************************************************/ + SMESHGUI_CopyMeshDlgLayout->addWidget(ConstructorsBox); + SMESHGUI_CopyMeshDlgLayout->addWidget(GroupArguments); + SMESHGUI_CopyMeshDlgLayout->addWidget(GroupButtons); + + /* Initialisations */ + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + + // Selection filter + myIdSourceFilter = new SMESH_TypeFilter( IDSOURCE ); + + myHelpFileName = "copy_mesh_page.html"; + + Init(); + + /* signals and slots connections */ + connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); + connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + + connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), + this, SLOT (DeactivateActiveDialog())); + connect(mySelectionMgr, SIGNAL (currentSelectionChanged()), + this, SLOT (SelectionIntoArgument())); + connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()),/* to close dialog if study change */ + this, SLOT (ClickOnCancel())); + + connect(myLineEditElements, SIGNAL(textChanged(const QString&)), + this, SLOT (onTextChange(const QString&))); + connect(myIdSourceCheck, SIGNAL(toggled(bool)), + this, SLOT (onSelectIdSource(bool))); + + SelectionIntoArgument(); +} + +//================================================================================= +// function : ~SMESHGUI_CopyMeshDlg() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= + +SMESHGUI_CopyMeshDlg::~SMESHGUI_CopyMeshDlg() +{ + if ( myFilterDlg ) + { + myFilterDlg->setParent( 0 ); + delete myFilterDlg; myFilterDlg = 0; + } + if ( myIdSourceFilter ) + { + if ( mySelectionMgr ) + mySelectionMgr->removeFilter( myIdSourceFilter ); + delete myIdSourceFilter; myIdSourceFilter=0; + } +} + +//================================================================================= +// function : Init() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::Init (bool ResetControls) +{ + myBusy = false; + + myMeshNameEdit->setText( SMESH::UniqueMeshName("Mesh")); + if ( ResetControls ) + { + myLineEditElements->clear(); + //myElementsId = ""; + myNbOkElements = 0; + + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + + myActor = 0; + myMesh = SMESH::SMESH_Mesh::_nil(); + + myIdSourceCheck->setChecked(true); + myCopyGroupsCheck->setChecked(false); + myKeepIdsCheck->setChecked(false); + + onSelectIdSource( myIdSourceCheck->isChecked() ); + } +} + +//================================================================================= +// function : ClickOnApply() +// purpose : +//================================================================================= + +bool SMESHGUI_CopyMeshDlg::ClickOnApply() +{ + if (mySMESHGUI->isActiveStudyLocked()) + return false; + + if( !isValid() ) + return false; + + try + { + SUIT_OverrideCursor aWaitCursor; + SMESH::SMESH_IDSource_var aPartToCopy; + if ( myIdSourceCheck->isChecked()) + { + aPartToCopy = mySelectedObject; + } + else + { + QStringList aListElementsId = myLineEditElements->text().split(" ", QString::SkipEmptyParts); + SMESH::long_array_var anElementsId = new SMESH::long_array; + anElementsId->length(aListElementsId.count()); + for (int i = 0; i < aListElementsId.count(); i++) + anElementsId[i] = aListElementsId[i].toInt(); + + SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); + aPartToCopy = aMeshEditor->MakeIDSource( anElementsId, SMESH::ALL ); + } + QByteArray meshName = myMeshNameEdit->text().toLatin1(); + bool toCopyGroups = ( myCopyGroupsCheck->isChecked() ); + bool toKeepIDs = ( myKeepIdsCheck->isChecked() ); + + SMESH::SMESH_Gen_var gen = SMESHGUI::GetSMESHGen(); + SMESH::SMESH_Mesh_var newMesh = + gen->CopyMesh(aPartToCopy, meshName.constData(), toCopyGroups, toKeepIDs); +#ifdef WITHGENERICOBJ + // obj has been published in study. Its refcount has been incremented. + // It is safe to decrement its refcount + // so that it will be destroyed when the entry in study will be removed + newMesh->Destroy(); +#endif + } catch (...) { + } + + mySMESHGUI->updateObjBrowser(true); + SMESHGUI::Modified(); + + Init(false); + mySelectedObject = SMESH::SMESH_IDSource::_nil(); + SelectionIntoArgument(); + + return true; +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::ClickOnOk() +{ + if( ClickOnApply() ) + ClickOnCancel(); +} + +//================================================================================= +// function : ClickOnCancel() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::ClickOnCancel() +{ + disconnect(mySelectionMgr, 0, this, 0); + if ( mySelectionMgr ) + mySelectionMgr->removeFilter( myIdSourceFilter ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( ActorSelection ); + mySMESHGUI->ResetState(); + reject(); +} + +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); + } +} + +//======================================================================= +// function : onTextChange() +// purpose : +//======================================================================= + +void SMESHGUI_CopyMeshDlg::onTextChange (const QString& theNewText) +{ + QLineEdit* send = (QLineEdit*)sender(); + + if (myBusy) return; + BusyLocker lock( myBusy ); + + //if (send == myLineEditElements) + myNbOkElements = 0; + + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + + // hilight entered elements + SMDS_Mesh* aMesh = 0; + if (myActor) + aMesh = myActor->GetObject()->GetMesh(); + + QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts); + if (myActor && aMesh) + { + TColStd_MapOfInteger newIndices; + if (send == myLineEditElements) { + for (int i = 0; i < aListId.count(); i++) + if ( const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt())) + { + newIndices.Add(e->GetID()); + } + } + myNbOkElements = newIndices.Extent(); + + Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); + mySelector->AddOrRemoveIndex( anIO, newIndices, false ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( anIO, true, true ); + } + else + { + myNbOkElements = aListId.count(); + } + + if (myNbOkElements) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); + } +} + +//================================================================================= +// function : SelectionIntoArgument() +// purpose : Called when selection as changed or other case +//================================================================================= + +void SMESHGUI_CopyMeshDlg::SelectionIntoArgument() +{ + if (myBusy) return; + BusyLocker lock( myBusy ); + + // clear + myActor = 0; + QString aString = ""; + + myLineEditElements->setText(aString); + myNbOkElements = 0; + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + myFilterBtn->setEnabled(false); + + // get selected mesh + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); + int nbSel = aList.Extent(); + if (nbSel != 1) + return; + + Handle(SALOME_InteractiveObject) IO = aList.First(); + mySelectedObject = SMESH::IObjectToInterface( IO ); + if ( mySelectedObject->_is_nil() ) + return; + + myMesh = SMESH::GetMeshByIO(IO); + if (myMesh->_is_nil()) + return; + + myActor = SMESH::FindActorByEntry(IO->getEntry()); + if (!myActor) + myActor = SMESH::FindActorByObject(myMesh); + + if (myIdSourceCheck->isChecked()) + { + SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString ); + if ( aString.isEmpty() ) aString = " "; + } + else + { + SMESH::GetNameOfSelectedElements( mySelector, IO, aString ); + myNbOkElements = aString.size(); + myFilterBtn->setEnabled(true); + } + myLineEditElements->setText( aString ); + bool ok = !aString.isEmpty(); + + buttonOk->setEnabled(ok); + buttonApply->setEnabled(ok); +} + +//======================================================================= +//function : onSelectIdSource +//purpose : +//======================================================================= +void SMESHGUI_CopyMeshDlg::onSelectIdSource (bool toSelectMesh) +{ + if (toSelectMesh) + myTextLabelElements->setText(tr("OBJECT_NAME")); + else + myTextLabelElements->setText(tr("ELEM_IDS")); + + if (toSelectMesh) { + myLineEditElements->clear(); + } + + mySelectionMgr->clearFilters(); + mySelectionMgr->installFilter(myIdSourceFilter); + SMESH::SetPointRepresentation(false); + + if (toSelectMesh) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( ActorSelection ); + myLineEditElements->setReadOnly(true); + myLineEditElements->setValidator(0); + } + else + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( CellSelection ); + myLineEditElements->setReadOnly(false); + myLineEditElements->setValidator(myIdValidator); + onTextChange(myLineEditElements->text()); + } + + SelectionIntoArgument(); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= + +bool SMESHGUI_CopyMeshDlg::isValid() +{ + if ( myIdSourceCheck->isChecked() ) + return !mySelectedObject->_is_nil(); + + return myNbOkElements > 0; +} + +//================================================================================= +// function : DeactivateActiveDialog() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::DeactivateActiveDialog() +{ + if (ConstructorsBox->isEnabled()) { + ConstructorsBox->setEnabled(false); + GroupArguments->setEnabled(false); + GroupButtons->setEnabled(false); + mySMESHGUI->ResetState(); + mySMESHGUI->SetActiveDialogBox(0); + if ( mySelectionMgr ) + mySelectionMgr->removeFilter( myIdSourceFilter ); + } +} + +//================================================================================= +// function : ActivateThisDialog() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::ActivateThisDialog() +{ + /* Emit a signal to deactivate the active dialog */ + mySMESHGUI->EmitSignalDeactivateDialog(); + ConstructorsBox->setEnabled(true); + GroupArguments->setEnabled(true); + GroupButtons->setEnabled(true); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + + onSelectIdSource( myIdSourceCheck->isChecked() ); + + SelectionIntoArgument(); +} + +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::enterEvent (QEvent*) +{ + if (!ConstructorsBox->isEnabled()) + ActivateThisDialog(); +} + +//================================================================================= +// function : closeEvent() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::closeEvent (QCloseEvent*) +{ + /* same than click on cancel button */ + ClickOnCancel(); +} + +//======================================================================= +//function : hideEvent +//purpose : caused by ESC key +//======================================================================= +void SMESHGUI_CopyMeshDlg::hideEvent (QHideEvent*) +{ + if (!isMinimized()) + ClickOnCancel(); +} + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_CopyMeshDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); + } +} + +//================================================================================= +// function : setFilters() +// purpose : SLOT. Called when "Filter" button pressed. +//================================================================================= +void SMESHGUI_CopyMeshDlg::setFilters() +{ + if(myMesh->_is_nil()) { + SUIT_MessageBox::critical(this, + tr("SMESH_ERROR"), + tr("NO_MESH_SELECTED")); + return; + } + if ( !myFilterDlg ) + myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); + + myFilterDlg->SetSelection(); + myFilterDlg->SetMesh( myMesh ); + myFilterDlg->SetSourceWg( myLineEditElements ); + + myFilterDlg->show(); +} diff --git a/src/SMESHGUI/SMESHGUI_CopyMeshDlg.h b/src/SMESHGUI/SMESHGUI_CopyMeshDlg.h new file mode 100644 index 000000000..83fcd095b --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_CopyMeshDlg.h @@ -0,0 +1,125 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_CopyMeshDlg.h +// +#ifndef SMESHGUI_CopyMeshDLG_H +#define SMESHGUI_CopyMeshDLG_H + +// SMESH includes +#include "SMESH_SMESHGUI.hxx" + +// Qt includes +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_Mesh) + +class QCheckBox; +class QGroupBox; +class QLabel; +class QLineEdit; +class QPushButton; + +class SMESHGUI; +class SMESHGUI_IdValidator; +class SMESHGUI_FilterDlg; +class SMESH_Actor; +class SVTK_Selector; +class LightApp_SelectionMgr; +class SUIT_SelectionFilter; + +//================================================================================= +// class : SMESHGUI_CopyMeshDlg +// purpose : copy some elements or a mesh object into a new mesh +//================================================================================= + +class SMESHGUI_EXPORT SMESHGUI_CopyMeshDlg : public QDialog +{ + Q_OBJECT + +public: + SMESHGUI_CopyMeshDlg( SMESHGUI* ); + ~SMESHGUI_CopyMeshDlg(); + +private: + void Init( bool = true ); + void closeEvent( QCloseEvent* ); + void enterEvent( QEvent* ); /* mouse enter the QWidget */ + void hideEvent( QHideEvent* ); /* ESC key */ + void keyPressEvent( QKeyEvent* ); + int GetConstructorId(); + void setNewMeshName(); + + bool isValid(); + + SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ + SMESHGUI_IdValidator* myIdValidator; + LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ + int myNbOkElements; /* to check when elements are defined */ + + SVTK_Selector* mySelector; + + bool myBusy; + SMESH::SMESH_Mesh_var myMesh; + SMESH_Actor* myActor; + SUIT_SelectionFilter* myIdSourceFilter; + + SMESH::SMESH_IDSource_var mySelectedObject; + + QGroupBox* ConstructorsBox; + QGroupBox* GroupArguments; + QGroupBox* GroupButtons; + + QPushButton* buttonOk; + QPushButton* buttonCancel; + QPushButton* buttonApply; + QPushButton* buttonHelp; + + QLabel* myTextLabelElements; + QLineEdit* myLineEditElements; + QLineEdit* myMeshNameEdit; + QCheckBox* myIdSourceCheck; + QCheckBox* myCopyGroupsCheck; + QCheckBox* myKeepIdsCheck; + + QPushButton* myFilterBtn; + SMESHGUI_FilterDlg* myFilterDlg; + + QString myHelpFileName; + +private slots: + void ClickOnOk(); + void ClickOnCancel(); + bool ClickOnApply(); + void ClickOnHelp(); + void SelectionIntoArgument(); + void DeactivateActiveDialog(); + void ActivateThisDialog(); + void onTextChange( const QString& ); + void onSelectIdSource( bool ); + void setFilters(); +}; + +#endif // SMESHGUI_CopyMeshDLG_H diff --git a/src/SMESHGUI/SMESHGUI_Utils.cxx b/src/SMESHGUI/SMESHGUI_Utils.cxx index dfe778831..331ad9f92 100644 --- a/src/SMESHGUI/SMESHGUI_Utils.cxx +++ b/src/SMESHGUI/SMESHGUI_Utils.cxx @@ -214,7 +214,7 @@ namespace SMESH QString IOR = app->orb()->object_to_string( theObject ); SalomeApp_Study* study = dynamic_cast( app->activeStudy() ); if ( study && !IOR.isEmpty() ) - res = study->studyDS()->FindObjectIOR( IOR.toLatin1().constData() ); + res = study->studyDS()->FindObjectIOR( IOR.toLatin1().constData() ); } return res; } diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index 7558fb793..3eff547c5 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -53,6 +53,10 @@ ICON_BUILD_COMPOUND mesh_build_compound.png + + ICON_COPY_MESH + copy_mesh.png + ICON_COMPUTE mesh_compute.png @@ -109,6 +113,10 @@ ICON_DLG_BUILD_COMPOUND_MESH mesh_build_compound.png + + ICON_DLG_COPY_MESH + copy_mesh.png + ICON_DLG_ELEM0D mesh_vertex.png diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 0336c7406..eb5f69cd5 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -187,6 +187,10 @@ MEN_BUILD_COMPOUND Build Compound + + MEN_COPY_MESH + Copy Mesh + MEN_CLIP Clipping @@ -1052,6 +1056,14 @@ Please enter correct values and try again SMESH_BUILD_COMPOUND_TITLE Create a Compound + + SMESH_COPY_MESH_TITLE + Copy Mesh + + + SMESH_KEEP_IDS + Preserve IDs of elements + SMESH_BUT_ADD A&dd @@ -2280,6 +2292,10 @@ Consider saving your work before application crash STB_BUILD_COMPOUND Build Compound Mesh + + STB_COPY_MESH + Copy Mesh + STB_CLIP Clipping @@ -2832,6 +2848,10 @@ Consider saving your work before application crash TOP_BUILD_COMPOUND Build Compound Mesh + + TOP_COPY_MESH + Copy Mesh + TOP_CLIP Clipping @@ -5812,6 +5832,21 @@ It is impossible to read point coordinates from file Distance + + SMESHGUI_CopyMeshDlg + + OBJECT_NAME + Source Object + + + ELEM_IDS + Source Element IDs + + + NEW_NAME + New Mesh Name + + SMESHGUI_MeasureDlg -- 2.30.2