From: eap Date: Tue, 30 Sep 2008 08:01:23 +0000 (+0000) Subject: 0019970: create groups automatically X-Git-Tag: V5_1_0a3~33 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=1856f1d72e94856031d2f0918738f3c583bd1419;p=modules%2Fsmesh.git 0019970: create groups automatically --- diff --git a/doc/salome/gui/SMESH/input/creating_groups.doc b/doc/salome/gui/SMESH/input/creating_groups.doc index d21a4d78e..2cfc648e8 100644 --- a/doc/salome/gui/SMESH/input/creating_groups.doc +++ b/doc/salome/gui/SMESH/input/creating_groups.doc @@ -74,6 +74,16 @@ a new group of mesh elements will be created. \image html a-creategroup.png +

+To create multiple groups on geometry of both nodes and elements of +any type at once, in the \b Mesh menu select Create Groups from +Geometry.
+Unique group names are generated by appending a number to \b Name. +Type of group of mesh elements is defined automatically by +Geometrical object nature. + +\image html create_groups_from_geometry.png + \image html image132.gif
In this picture the cells which belong to a certain face are selected in green.
diff --git a/resources/Makefile.am b/resources/Makefile.am index 5166f3b07..fd51e821a 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -105,6 +105,7 @@ dist_salomeres_DATA = \ mesh_tree_group.png \ mesh_edit_group.png \ mesh_make_group.png \ + mesh_groups_from_gemetry.png \ mesh_union2tri.png \ mesh_uniontri.png \ mesh_cutquad.png \ diff --git a/src/SMESHGUI/Makefile.am b/src/SMESHGUI/Makefile.am index 72e49e280..1fc4b43b3 100644 --- a/src/SMESHGUI/Makefile.am +++ b/src/SMESHGUI/Makefile.am @@ -156,6 +156,7 @@ dist_libSMESH_la_SOURCES = \ SMESHGUI_ComputeDlg.cxx \ SMESHGUI_MakeNodeAtPointDlg.cxx \ SMESHGUI_MeshEditPreview.cxx \ + SMESHGUI_GroupOnShapeDlg.cxx \ SMESHGUI_FileInfoDlg.cxx MOC_FILES = \ @@ -207,6 +208,7 @@ MOC_FILES = \ SMESHGUI_BuildCompoundDlg_moc.cxx \ SMESHGUI_ComputeDlg_moc.cxx \ SMESHGUI_MakeNodeAtPointDlg_moc.cxx \ + SMESHGUI_GroupOnShapeDlg_moc.cxx \ SMESHGUI_FileInfoDlg_moc.cxx nodist_libSMESH_la_SOURCES= \ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index b191f63ae..df3f9c912 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -45,6 +45,7 @@ #include "SMESHGUI_SingleEditDlg.h" #include "SMESHGUI_MultiEditDlg.h" #include "SMESHGUI_GroupOpDlg.h" +#include "SMESHGUI_GroupOnShapeDlg.h" #include "SMESHGUI_DeleteGroupDlg.h" #include "SMESHGUI_SmoothingDlg.h" #include "SMESHGUI_RenumberingDlg.h" @@ -1705,6 +1706,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) }*/ break; } + case 806: // CREATE GEO GROUP + { + startOperation( 806 ); + break; + } case 801: // CREATE GROUP { if ( !vtkwnd ) @@ -2575,6 +2581,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 703, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" ); createSMESHAction( 704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" ); createSMESHAction( 710, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" ); + createSMESHAction( 806, "CREATE_GEO_GROUP","ICON_CREATE_GEO_GROUP" ); createSMESHAction( 801, "CREATE_GROUP", "ICON_CREATE_GROUP" ); createSMESHAction( 802, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" ); createSMESHAction( 803, "EDIT_GROUP", "ICON_EDIT_GROUP" ); @@ -2711,6 +2718,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 701, meshId, -1 ); createMenu( separator(), meshId, -1 ); createMenu( 801, meshId, -1 ); + createMenu( 806, meshId, -1 ); createMenu( 802, meshId, -1 ); createMenu( 803, meshId, -1 ); createMenu( separator(), meshId, -1 ); @@ -2805,6 +2813,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 701, meshTb ); createTool( separator(), meshTb ); createTool( 801, meshTb ); + createTool( 806, meshTb ); createTool( 802, meshTb ); createTool( 803, meshTb ); createTool( separator(), meshTb ); @@ -2915,6 +2924,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 903, OB, mesh_group ); // WHAT_IS popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 801, OB, mesh ); // CREATE_GROUP + createPopupItem( 806, OB, mesh ); // CREATE_GEO_GROUP createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 1100, OB, hypo); // EDIT HYPOTHESIS @@ -3650,6 +3660,9 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const case 704: // Edit mesh/sub-mesh op = new SMESHGUI_MeshOp( false ); break; + case 806: // Create group on geom + op = new SMESHGUI_GroupOnShapeOp(); + break; case 417: //convert to quadratic op = new SMESHGUI_ConvToQuadOp(); break; diff --git a/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx new file mode 100644 index 000000000..d93e6c430 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx @@ -0,0 +1,484 @@ +// SMESH SMESHGUI : GUI for SMESH component +// +// Copyright (C) 2003 CEA +// +// 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 +// +// +// +// File : SMESHGUI_GroupOnShapeDlg.cxx +// Created : Wed Sep 17 18:36:51 2008 +// Author : Edward AGAPOV (eap) +// Module : SMESH + + +// IDL Headers +#include "SMESHGUI_GroupOnShapeDlg.h" + +#include "SMESH_TypeFilter.hxx" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_GEOMGenUtils.h" + +#include +#include + +#include +#include +#include +#include + +#include +#include CORBA_SERVER_HEADER(SMESH_Mesh) +#include CORBA_SERVER_HEADER(SMESH_Group) + +#include +#include +#include +#include +#include +#include +#include + +#define SPACING 6 +#define MARGIN 11 + +enum { _MESH, _ELEM_GEOM, _NODE_GEOM }; + +SMESHGUI_GroupOnShapeDlg::SMESHGUI_GroupOnShapeDlg() + : SMESHGUI_Dialog( 0, false, true ) +{ + QPixmap image (resourceMgr()->loadPixmap("SMESH", tr("ICON_SELECT"))); + + // Name + QLabel* nameLabel = new QLabel( tr( "SMESH_NAME" ), mainFrame() ); + myGrpNameLine = new QLineEdit( mainFrame() ); + + // Mesh + QLabel* meshLabel = new QLabel( tr( "SMESH_OBJECT_MESH" ), mainFrame() ); + myMeshBtn = new QPushButton( mainFrame() ); + myMeshBtn->setCheckable(true); + myMeshBtn->setIcon(image); + myMeshLine = new QLineEdit( mainFrame() ); + myMeshLine->setReadOnly(true); + + // Elem geom + + QGroupBox* elemsGrp = new QGroupBox( tr( "SMESH_ELEMENTS" ), mainFrame() ); + QLabel* label = new QLabel( tr( "SMESH_GEOM" ), elemsGrp ); + myElemGeomBtn = new QPushButton( elemsGrp ); + myElemGeomBtn->setCheckable(true); + myElemGeomBtn->setIcon(image); + myElemGeomList = new QListWidget( elemsGrp ); + myElemGeomList->setSelectionMode(QListWidget::NoSelection); + + QGridLayout* elemLay = new QGridLayout(elemsGrp); + elemLay->setSpacing( SPACING ); + elemLay->setMargin( MARGIN ); + elemLay->setRowStretch( 1, 1 ); + elemLay->addWidget( label, 0, 0 ); + elemLay->addWidget( myElemGeomBtn, 0, 1 ); + elemLay->addWidget( myElemGeomList, 0, 2, 2, 1); + + // Node geom + + QGroupBox* nodesGrp = new QGroupBox( tr( "SMESH_NODES" ), mainFrame() ); + + label = new QLabel( tr( "SMESH_GEOM" ), nodesGrp ); + myNodeGeomBtn = new QPushButton( nodesGrp ); + myNodeGeomBtn->setCheckable(true); + myNodeGeomBtn->setIcon(image); + myNodeGeomList = new QListWidget( nodesGrp ); + myNodeGeomList->setSelectionMode(QListWidget::NoSelection); + + QGridLayout* nodeLay = new QGridLayout(nodesGrp); + nodeLay->setSpacing( SPACING ); + nodeLay->setMargin( MARGIN ); + nodeLay->setRowStretch( 1, 1 ); + nodeLay->addWidget( label, 0, 0 ); + nodeLay->addWidget( myNodeGeomBtn, 0, 1 ); + nodeLay->addWidget(myNodeGeomList, 0, 2, 2, 1); + + // Fill layout + QGridLayout* aLay = new QGridLayout( mainFrame()); + aLay->setSpacing( SPACING ); + aLay->setMargin( MARGIN ); + aLay->addWidget( nameLabel, 0, 0 ); + aLay->addWidget( myGrpNameLine, 0, 2 ); + aLay->addWidget( meshLabel, 1, 0 ); + aLay->addWidget( myMeshBtn, 1, 1 ); + aLay->addWidget( myMeshLine,1, 2 ); + aLay->addWidget( elemsGrp, 2, 1, 1, 3 ); + aLay->addWidget( nodesGrp, 3, 1, 1, 3 ); + + setWindowTitle( tr( "SMESH_CREATE_GROUP_FROM_GEOM" ) ); +} + +SMESHGUI_GroupOnShapeDlg::~SMESHGUI_GroupOnShapeDlg() +{ +} + +//================================================================================ +/*! + * \brief slot to enable/diable [Apply] + */ +//================================================================================ + +void SMESHGUI_GroupOnShapeDlg::updateButtons() +{ + bool enable = + !myGrpNameLine->text().isEmpty() && myElemGeomList->count() + myNodeGeomList->count(); + + button(Apply)->setEnabled( enable ); + button(OK)->setEnabled( enable ); +} + +//================================================================================ +/*! + * \brief initialization + */ +//================================================================================ + +void SMESHGUI_GroupOnShapeDlg::init() +{ + myGrpNameLine->setText(""); + + myMeshBtn->setChecked( true ); + myMeshLine->setText(""); + + myElemGeomBtn->setChecked(false); + myElemGeomBtn->setEnabled(false); + myElemGeomList->clear(); + myNodeGeomBtn->setChecked(false); + myNodeGeomBtn->setEnabled(false); + myNodeGeomList->clear(); + + updateButtons(); +} + +//================================================================================ +/*! + * \brief operation constructor + */ +//================================================================================ + +SMESHGUI_GroupOnShapeOp::SMESHGUI_GroupOnShapeOp() + : SMESHGUI_SelectionOp(ActorSelection), + myDlg( 0 ) +{ + myHelpFileName = "creating_groups_page.html"; +} + +SMESHGUI_GroupOnShapeOp::~SMESHGUI_GroupOnShapeOp() +{ + if ( myDlg ) + delete myDlg; +} +//================================================================================ +/*! + * \brief Gets dialog of this operation + * \retval LightApp_Dialog* - pointer to dialog of this operation +*/ +//================================================================================ + +LightApp_Dialog* SMESHGUI_GroupOnShapeOp::dlg() const +{ + return myDlg; +} + +//================================================================================ +/*! + * \brief return type of mesh group by geom object + */ +//================================================================================ + +static SMESH::ElementType elementType(GEOM::GEOM_Object_var& geom) +{ + if ( !geom->_is_nil() ) { + switch ( geom->GetShapeType() ) { + case GEOM::VERTEX: return SMESH::NODE; + case GEOM::EDGE: return SMESH::EDGE; + case GEOM::WIRE: return SMESH::EDGE; + case GEOM::FACE: return SMESH::FACE; + case GEOM::SHELL: return SMESH::FACE; + case GEOM::SOLID: return SMESH::VOLUME; + case GEOM::COMPSOLID:return SMESH::VOLUME; + case GEOM::COMPOUND: break; + default: return SMESH::ALL; + } + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + GEOM::GEOM_IShapesOperations_var aShapeOp = + SMESH::GetGEOMGen()->GetIShapesOperations(aStudy->StudyId()); + + if ( geom->GetType() == 37 ) { // geom group + GEOM::GEOM_IGroupOperations_var aGroupOp = + SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId()); + if ( !aGroupOp->_is_nil() ) { + GEOM::GEOM_Object_var mainShape = aGroupOp->GetMainShape( geom ); + GEOM::ListOfLong_var ids = aGroupOp->GetObjects( geom ); + if ( ids->length() && !mainShape->_is_nil() && !aShapeOp->_is_nil() ) { + GEOM::GEOM_Object_var member = aShapeOp->GetSubShape( mainShape, ids[0] ); + return elementType( member ); + } + } + } + else if ( !aShapeOp->_is_nil() ) { // just a compoud shape + GEOM::ListOfLong_var ids = aShapeOp->SubShapeAllIDs( geom, GEOM::SHAPE, false ); + if ( ids->length() ) { + GEOM::GEOM_Object_var member = aShapeOp->GetSubShape( geom, ids[0] ); + return elementType( member ); + } + } + } + return SMESH::ALL; +} + +//================================================================================ +/*! + * \brief initialization + */ +//================================================================================ + +void SMESHGUI_GroupOnShapeOp::init() +{ + myMeshID=""; + myElemGeoIDs.clear(); + myNodeGeoIDs.clear(); + + myDlg->init(); + removeCustomFilters(); + onActivateObject( _MESH ); // install filter +} + +//================================================================================ +/*! + * \brief start operation + */ +//================================================================================ + +void SMESHGUI_GroupOnShapeOp::startOperation() +{ + if (!myDlg) + { + myDlg = new SMESHGUI_GroupOnShapeDlg(); + connect(myDlg->myMeshBtn, SIGNAL(clicked()), this, SLOT(onButtonClick())); + connect(myDlg->myElemGeomBtn, SIGNAL(clicked()), this, SLOT(onButtonClick())); + connect(myDlg->myNodeGeomBtn, SIGNAL(clicked()), this, SLOT(onButtonClick())); + connect(myDlg->myGrpNameLine, SIGNAL(textChanged(const QString&)),myDlg,SLOT(updateButtons())); + } + SMESHGUI_SelectionOp::startOperation(); + + init(); + myDlg->show(); +} + +//================================================================================ +/*! + * \brief create groups + */ +//================================================================================ + +bool SMESHGUI_GroupOnShapeOp::onApply() +{ + SUIT_OverrideCursor aWaitCursor; + + if (isStudyLocked()) + return false; + + // study + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + if ( !aStudy ) return false; + + // mesh + _PTR(SObject) meshSO = aStudy->FindObjectID( myMeshID.toLatin1().data() ); + SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface( meshSO ); + if ( mesh->_is_nil() ) return false; + + // names of all existing groups + SMESH::ListOfGroups_var groups = mesh->GetGroups(); + QStringList groupNames; + for ( int i = 0; i < groups->length(); ++i ) { + CORBA::String_var name = groups[i]->GetName(); + groupNames.append( name.in() ); + } + + // create groups + SMESH::SMESH_GroupOnGeom_var group; + for ( int isNode = 0; isNode < 2; ++isNode ) // elems and then nodes + { + QStringList::iterator geomID = isNode ? myNodeGeoIDs.begin() : myElemGeoIDs.begin(); + QStringList::iterator geomEnd = isNode ? myNodeGeoIDs.end() : myElemGeoIDs.end(); + + for ( ; geomID != geomEnd; ++geomID ) + { + // selected geom + _PTR(SObject) geomSO = aStudy->FindObjectID( geomID->toLatin1().data() ); + GEOM::GEOM_Object_var geom = SMESH::SObjectToInterface(geomSO); + if ( geom->_is_nil() ) continue; + + // group type + SMESH::ElementType elemType = isNode ? SMESH::NODE : elementType( geom ); + if ( elemType == SMESH::ALL ) + continue; + + // make a unique name + int nb = 1; + QString name = myDlg->myGrpNameLine->text() + "_" + QString::number(nb); + while ( groupNames.contains( name )) + name = myDlg->myGrpNameLine->text() + "_" + QString::number(++nb); + groupNames.append( name ); + + //printf( "apply() %s %s\n", (*geomID).latin1(), name.latin1() ); + group = mesh->CreateGroupFromGEOM( elemType, name.toLatin1().data(), geom ); + } + } + update( UF_ObjBrowser | UF_Model ); + + init(); + + return !group->_is_nil(); +} + +//================================================================================ +/*! + * \brief slot connected to selection buttons + */ +//================================================================================ + +void SMESHGUI_GroupOnShapeOp::onButtonClick() +{ + removeCustomFilters(); + + if ( sender() == myDlg->myMeshBtn && myDlg->myMeshBtn->isChecked() ) + { + myDlg->myElemGeomBtn->setChecked(false); + myDlg->myNodeGeomBtn->setChecked(false); + onActivateObject( _MESH ); // install filter + } + else if ( sender() == myDlg->myElemGeomBtn && myDlg->myElemGeomBtn->isChecked() ) + { + myDlg->myMeshBtn->setChecked(false); + myDlg->myNodeGeomBtn->setChecked(false); + onActivateObject( _ELEM_GEOM ); // install filter + } + else if ( sender() == myDlg->myNodeGeomBtn && myDlg->myNodeGeomBtn->isChecked() ) + { + myDlg->myMeshBtn->setChecked(false); + myDlg->myElemGeomBtn->setChecked(false); + onActivateObject( _NODE_GEOM ); // install filter + } + //selectionDone(); +} + +//================================================================================ +/*! + * \brief Creates selection filter + * \param theId - identifier of current selection widget + * \retval SUIT_SelectionFilter* - pointer to the created filter or null + * + * Creates selection filter in accordance with identifier of current selection widget + */ +//================================================================================ +SUIT_SelectionFilter* SMESHGUI_GroupOnShapeOp::createFilter( const int theId ) const +{ + if ( theId == _ELEM_GEOM || theId == _NODE_GEOM ) + return new GEOM_SelectionFilter( (SalomeApp_Study*)study(), true ); + else if ( theId == _MESH ) + return new SMESH_TypeFilter( MESH ); + else + return ( SUIT_SelectionFilter*) 0; +} +//================================================================================ +/*! + * \brief Updates dialog's look and feel + * + * Virtual method redefined from the base class updates dialog's look and feel + */ +//================================================================================ +void SMESHGUI_GroupOnShapeOp::selectionDone() +{ + QStringList names, ids; + LightApp_Dialog::TypesList types; + selected( names, types, ids ); + int nbSelected = names.size(); + + if ( myDlg->myMeshBtn->isChecked() ) // mesh selected + { + myDlg->myMeshLine->setText(""); + myMeshID = ""; + if ( nbSelected == 1 ) { + myDlg->myMeshLine->setText( names.front() ); + myMeshID = ids.front(); + } + myDlg->myElemGeomList->clear(); + myDlg->myElemGeomBtn->setEnabled( nbSelected == 1 ); + myDlg->myNodeGeomList->clear(); + myDlg->myNodeGeomBtn->setEnabled( nbSelected == 1 ); + return; + } + + // Filter off inappropriate shapes + + QStringList goodNames, goodIds; + if (nbSelected > 0) { + // study + if (_PTR(Study) aStudy = SMESH::GetActiveStudyDocument()) { + // mesh + if (_PTR(SObject) meshSO = aStudy->FindObjectID( myMeshID.toLatin1().data() )) { + // shape to mesh + _PTR(SObject) anObj, shapeToMesh; + if (meshSO->FindSubObject(1, anObj) && anObj->ReferencedObject(shapeToMesh)) { + // loop on selected + QStringList::iterator name = names.begin(), id = ids.begin(), idEnd = ids.end(); + for (; id != idEnd; ++id, ++name ) { + // shape SO + if (_PTR(SObject) shapeSO = aStudy->FindObjectID( id->toLatin1().data() )) { + // check if shape SO is a child of shape to mesh + while ( shapeSO && shapeSO->GetID() != shapeToMesh->GetID() ) + if ( shapeSO->Depth() < 2 ) + shapeSO.reset(); + else + shapeSO = shapeSO->GetFather(); + if ( shapeSO ) { + //printf( "selectionDone() %s %s\n", (*id).latin1(), (*name).latin1() ); + if ( !goodIds.contains( *id )) { + goodIds.append( *id ); + goodNames.append( *name ); + } + } + } + } + } + } + } + } + + if ( myDlg->myElemGeomBtn->isChecked() ) // elem geomerty selection + { + myDlg->myElemGeomList->clear(); + myDlg->myElemGeomList->addItems( goodNames ); + myElemGeoIDs = goodIds; + } + else if ( myDlg->myNodeGeomBtn->isChecked() ) // Node geomerty selection + { + myDlg->myNodeGeomList->clear(); + myDlg->myNodeGeomList->addItems( goodNames ); + myNodeGeoIDs = goodIds; + } + + // enable/diable Apply, which can change at selection + myDlg->updateButtons(); +} diff --git a/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.h b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.h new file mode 100644 index 000000000..4236ae105 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.h @@ -0,0 +1,130 @@ +// SMESH SMESHGUI : GUI for SMESH component +// +// Copyright (C) 2003 CEA +// +// 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 +// +// +// +// File : SMESHGUI_GroupOnShapeDlg.h +// Author : Edard AGAPOV +// Module : SMESH + +#ifndef SMESHGUI_GroupOnShapeDlg_H_H +#define SMESHGUI_GroupOnShapeDlg_H_H + +#include "SMESH_SMESHGUI.hxx" + +#include "SMESHGUI_SelectionOp.h" + +class QLineEdit; +class QListWidget; +class QPushButton; +class SMESHGUI_GroupOnShapeDlg; + +//================================================================================= +// class : SMESHGUI_GroupOnShapeOp +// purpose : create groups on shapes of nodes and element at once, Issue 19970 +//================================================================================= + +class SMESHGUI_EXPORT SMESHGUI_GroupOnShapeOp : public SMESHGUI_SelectionOp +{ + Q_OBJECT + +public: + SMESHGUI_GroupOnShapeOp(); + ~SMESHGUI_GroupOnShapeOp(); + + virtual LightApp_Dialog* dlg() const; + static QString GetDefaultName(const QString& theOperation); + +public slots: + +protected: + + virtual void startOperation(); + virtual void selectionDone(); + virtual SUIT_SelectionFilter* createFilter( const int ) const; + //virtual bool isValid( SUIT_Operation* ) const; + +private slots: + + bool onApply(); + void onButtonClick(); + + + void onSelectColor(); + void onAdd(); + void onRemove(); + + +private: + + void init(); +// void setGroupColor( const SALOMEDS::Color& ); +// SALOMEDS::Color getGroupColor() const; + +// void setGroupQColor( const QColor& ); +// QColor getGroupQColor() const; + +// void setDefaultGroupColor(); + +private: + + SMESHGUI_GroupOnShapeDlg* myDlg; + + QString myMeshID; + QStringList myElemGeoIDs, myNodeGeoIDs; + //GEOM::ListOfGO_var myElemGObj; +}; + +class SMESHGUI_EXPORT SMESHGUI_GroupOnShapeDlg : public SMESHGUI_Dialog +{ + Q_OBJECT + +public: + SMESHGUI_GroupOnShapeDlg(); + virtual ~SMESHGUI_GroupOnShapeDlg(); + +public slots: + + void updateButtons(); + void init(); + +private: + + QLineEdit* myGrpNameLine; + + QPushButton* myMeshBtn; + QLineEdit* myMeshLine; + + QPushButton* myElemGeomBtn; + QListWidget* myElemGeomList; + + QPushButton* myNodeGeomBtn; + QListWidget* myNodeGeomList; + +// QPushButton* myColorBtn; + +// bool myCreate, myIsBusy; + +// QString myHelpFileName; + + friend class SMESHGUI_GroupOnShapeOp; +}; + +#endif // SMESHGUI_GroupOnShapeDlg_H_H diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index 37a420137..4b89ca687 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -50,6 +50,10 @@ ICON_CONSTRUCT_GROUP mesh_make_group.png + + ICON_CREATE_GEO_GROUP + mesh_groups_from_gemetry.png + ICON_CONV_TO_QUAD mesh_conv_to_quad.png diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index da59f429b..a9564138c 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -62,6 +62,10 @@ COMPERR_STD_EXCEPTION std::exception + + SMESH_GEOM + Geometry + DIRECT_GEOM_SELECTION Direct geometry selection @@ -170,6 +174,10 @@ MEN_CREATE_GROUP Create Group + + MEN_CREATE_GEO_GROUP + Create Groups from Geometry + MEN_CREATE_MESH Create Mesh @@ -928,6 +936,10 @@ so that the application may crash. Do you wish to continue visualization?SMESH_CREATE_GROUP_TITLE Create Group + + SMESH_CREATE_GEO_GROUP + Create Groups from Geometry + SMESH_CREATE_HYPOTHESES Create hypotheses @@ -1916,6 +1928,10 @@ Consider saving your work before application crash STB_CREATE_GROUP Create Group + + STB_CREATE_GEO_GROUP + Create Groups from Geometry + STB_CREATE_MESH Create Mesh @@ -2372,6 +2388,10 @@ Consider saving your work before application crash TOP_CREATE_GROUP Create Group + + TOP_CREATE_GEO_GROUP + Create Groups from Geometry + TOP_CREATE_MESH Create Mesh