0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups

To create/edit SMESH_GroupOnFilter
This commit is contained in:
eap 2011-06-23 12:39:01 +00:00
parent d0b3f328a8
commit 066bcc3471
12 changed files with 508 additions and 230 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -2,12 +2,13 @@
\page creating_groups_page Creating groups
\n In MESH you can create groups of elements of different types. To
create a group of elements in the \b Mesh menu select <b>Create
Group</b>.
\n To create any group you should define the following:
\n In MESH you can create groups of elements of a certain type whose
contents is defined in different ways. To create a group, in the \b
Mesh menu select <b>Create Group</b> item (also available in the
contextual menu of the mesh).<br>
To create a group of any type you should define the following:
<ul>
<li><b>Mesh</b> - the name of the mesh whose elements will form your
<li><b>Mesh</b> - the mesh whose elements will form your
group. You can select your mesh in the Objet Browser or in the 3D
viewer.</li>
<li><b>Elements Type</b> - set of radio buttons allows to select the type of
@ -19,86 +20,122 @@ elements which will form your group:</li>
<li><b>Volumes</b></li>
</ul>
<li><b>Name</b> field allows to enter the name of your new group.</li>
<li><b>Color</b> - allows to assign to the group a certain color, for
example, defining boundary conditions. The chosen color is used to
display the elements of the group. The color attribute of the group is
not persistent, it is lost if you save and then load the study from
the file.</li>
</ul>
SALOME Platform distinguishes between the two Group types:
<b>Standalone Group</b> and <b>Group on Geometry</b>.
SALOME Platform distinguishes between the three Group types:
<b>Standalone Group</b>, <b>Group on Geometry</b> and <b>Group on Filter</b>.
\anchor standalone_group <br><h2>"Standalone Group"</h2>
<b>Standalone Group</b> consists of mesh elements, which you can define in
<b>Standalone Group</b> contains a list of mesh elements, which you can define in
the following ways:
<ul>
<li>Choosing them manually with the mouse in the 3D Viewer. You can
click on an element in the 3D viewer and it will be highlighted. After
that click the \b Add button and the ID of this element will be added to
the list.</li>
<li>Applying Filters. The <b>Set filter</b> button allows to apply a
definite filter to selection of the elements of your group. See more
about filters on the
\ref selection_filter_library_page "Selection filter library" page.</li>
<li>By adding all existing entities of the chosen type to the
group. For this turn on the <b>Select All</b> check box. In this
mode all controls, which allow selecting the entities manually or by filters, are disabled.</li>
<li>By adding all entities of the chosen type existing in the
mesh. For this, turn on the <b>Select All</b> check box. In this mode
all controls, which allow selecting the entities in other ways are
disabled.</li>
<li>By applying the Filter. The <b>Set filter</b> button allows to
define the filter for selection of the elements for your group. See more
about filters on the
\ref selection_filter_library_page "Selection filter library" page.<br>
If the <b>Enable manual edition</b> check box is turned off, the defined
filter defines contents of the group. In this mode, the filter is
applied to all elements of the mesh. If none entity satisfies the
filter, the \b Apply button is disabled.<br>
If the <b>Enable manual edition</b> check box is turned on, the defined
filter can be used to for selection of entities composing the group.</li>
<li>By choosing entities manually with the mouse in the 3D Viewer. For
this, turn on the <b>Enable manual edition</b> check box. You can
click on an element in the 3D viewer and it will be highlighted. After
that click the \b Add button and the ID of this element will be
added to the list.</li>
<li>By adding entities from either a submesh or an existing
group. For this, turn on the <b>Enable manual edition</b> check
box. <b>Select from</b> set of fields allows to select a submesh or
a group of an appropriate type.</li>
</ul>
In the <b>manual edition</b> mode you can
<ul>
<li>click the \b Remove button to remove selected elements from the list</li>
<li>click the <b>Sort List</b> button to sort the list of IDs of
mesh elements.</li>
</ul>
To remove a selected element or elements from the list click the
\b Remove button. The <b>Sort List</b> button allows to sort the list of IDs of
mesh elements.
\n <b>Select from</b> set of fields allows to choose a submesh or an existing
group whose elements of the previously defined type will be added to
the list of elements which will form the new group.
\n <b>Color</b> - allows to assign to the group a certain color, for
example, defining boundary conditions. This feature introduces a
useful element of preprocessing in Mesh module. Note that <b>Color</b> attribute defines
the colors used for the display of the elements of the group.
\n <b>Warning</b> The Med Color group interface may change in future versions of Salome.
\image html creategroup.png
For example, to create a new group containing all entities of the
For example, to create a new group containing all faces of an
existing group and some other faces selected in the viewer:
<ul>
<li> select the "Face" type of entities and input the name of the new group.</li>
<li> checks "Group" checkbox in "Select From" group.</li>
<li> select the existing group in the object browser or in the viewer.</li>
<li> click "Add" in "Content" group. "Id Elements" list will be filled
<li> Select the \b Face type of entities and input the name of the new group.</li>
<li> Check the \b Group checkbox in <b>Select From</b> group.</li>
<li> Select the existing group of faces in the object browser or in the viewer</li>
<li> Click \b Add in \b Content group. <b>Id Elements</b> list will be filled
with IDs of faces belonging to the exising group.</li>
<li> select other faces in the viewer.</li>
<li> click "Apply" button to create the new group.</li>
<li> Select other faces in the viewer.</li>
<li> Click \b Add in \b Content group.</li>
<li> Click \b Apply button to create the new group.</li>
</ul>
Please note that the new group does not have references to the source
group. It contains only the list of face IDs. So if the old group will
be changed, the new one will not be modified.
group. It contains only the list of face IDs. So if the source group
is changed, the new one is not updated accordingly.
\image html image130.gif
<center>In this picture the brown cells belong to a group defined manually.</center>
<center>In this picture the brown cells belong to a group defined
manually.</center>
\image html image131.gif
<center>In this picture the brown cells belong to the group defined by the criterion
<b>Taper > 0</b>.</center>
<center>In this picture the brown cells belong to the group defined by
the criterion <b>Taper > 0</b>.</center>
<b>See Also</b> a sample TUI Script of a
\ref tui_create_standalone_group "Create a Standalone Group"
operation.
\anchor group_on_geom <br><h2>"Group on Geometry"</h2>
To create a group on geometry check <b>Group on geometry</b> in the \b Group
\b type field. <b>Group on geometry</b> contains the elements of a certain type
belonging to the selected geometrical object. To define a group select
in the Objet Browser or in the 3D viewer a geometrical object from
which the elements will be taken. After confirmation of the operation
a new group of mesh elements will be created.
To create a group on geometry check <b>Group on geometry</b> in the \b
Group \b type field. The group on geometry contains the elements
of a certain type generated on the selected geometrical object. Group
contents is dynamically updated if the mesh is modified.<br>
To define a group, select in the Objet Browser or in the 3D viewer a
geometrical object from which the elements will be taken. After
confirmation of the operation a new group of mesh elements will be
created.
\image html a-creategroup.png
\image html image132.gif
<center>In this picture the cells which belong to a certain face are
selected in green.</center>
<center>In this picture the cells which belong to a certain
geometrical face are selected in green.</center>
<b>See Also</b> a sample TUI Script of a
\ref tui_create_group_on_geometry "Create a Group on Geometry"
operation.
\anchor group_on_filter <br><h2>"Group on Filter"</h2>
To create a group on filter check <b>Group on filter</b> in the <b>
Group type</b> field. The group on filter contains the elements
of a certain type satisfying the defined filter. Group contents is
dynamically updated if the mesh is modified.<br> To define a group,
click the <b>Set filter</b> button and define criteria of the
filter in the opened dialog. After confirmation of the operation a
new group of mesh elements will be created. See more about filters on
the \ref selection_filter_library_page "Selection filter library" page.
\image html creategroup_on_filter.png
<b>See Also</b> a sample TUI Script of a
\ref tui_create_group_on_filter "Create a Group on Filter" operation.
*/

View File

@ -14,26 +14,29 @@ The following dialog box will appear:
\image html editgroup.png
In this dialog box you can modify the name of your group and add or
remove the elements forming it. For more information see
In this dialog box you can modify the name and the color of your group
despite of it's type. You can add or remove the elements forming the
<em>standalone group</em>. You can change criteria of the filter of
the <em>group on filter</em>. For more information see
\ref creating_groups_page "Creating Groups" page.
<li>Click the \b Apply or <b>Apply and Close</b> button to confirm modification of the
group.</li>
<li>Click the \b Apply or <b>Apply and Close</b> button to confirm
modification of the group.</li>
</ol>
\anchor convert_to_standalone
<em>To convert an existing group on geometry into standalone group
of elements and modify:</em>
<em>To convert an existing group on geometry or a group on filer into
a standalone group of elements and modify:</em>
<ol>
<li>Select your group on geometry in the Object Browser and in the \b Mesh menu click
the <b>Edit Group as Standalone</b> item.</li>
<li>Select your group on geometry (or your group on filter) in the
Object Browser and in the \b Mesh menu click the <b>Edit Group as
Standalone</b> item.</li>
\image html image74.gif
<center><em>"Edit Group as Standalone" button</em></center>
The group on geometry will be converted into standalone group and can
be modified as group of elements.
The selected group will be converted into a standalone group and can
it's contents can be modified.
<li>Click the \b Apply or <b>Apply and Close</b> button to confirm modification of the
group.</li>

View File

@ -3,24 +3,29 @@
\page grouping_elements_page Grouping elements
In Mesh module it is possible to create groups of mesh elements:
nodes, edges, faces or volumes:
nodes, edges, faces or volumes. One group contains elements of only
one type. The following ways of creation are possible:
<ul>
<li> by selecting the elements of the specified kind by their IDs or
directly on the presentation in the VTK viewer - <b>Standalone
group</b> tab of \subpage creating_groups_page "Create group"
dialog.</li>
<li> by creating a group of elements of the selected type from all
such elements of the chosen geometrical object - <b>Group on
geometry</b> tab of \ref creating_groups_page "Create group" dialog.</li>
<li> by creating a group including all types of elements from an
existing geometrical object - using \subpage create_groups_from_geometry_page "Create Groups from Geometry" dialog.</li>
<li> by creating several groups of elements (nodes,
edges, faces and volumes) from the chosen submesh - using <b>Mesh -> Construct
Group</b> Menu item. In this case groups of elements are created
automatically.</li>
<li> by selecting the elements using filters and/or
directly on the presentation in the VTK viewer, and/or by using
elements of other mesh objects - <b>Standalone group</b> tab of
\ref standalone_group "Create group" dialog.</li>
<li> by creating a group of elements generated on the chosen
geometrical object - <b>Group on geometry</b> tab of \ref
creating_groups_page "Create group" dialog and \ref
create_groups_from_geometry_page "Create Groups from Geometry"
dialog.</li>
<li> by creating a group of elements satisfying to certain critaria -
<b>Group on filter</b> tab of \ref creating_groups_page
"Create group" dialog.</li>
<li> by creating groups of nodes and elements from the chosen submesh
(type of elements depends on dimension of submesh geometry) -
using <b>Mesh -> Construct Group</b> menu item (available in contextual
menu as well).</li>
<li> by creating groups of entities from existing groups of superior
dimensions - using \subpage group_of_underlying_elements_page "Create Group of Underlying Elements"
dialog.</li>
dimensions - using \subpage group_of_underlying_elements_page
"Create Group of Underlying Elements" dialog.</li>
</ul>

View File

@ -9,8 +9,8 @@ via <b>Tools / Selection filter library</b>.
\image html selectionfilterlibrary.png
<b>Library file name</b> shows the path and the file name where your
filters will be stored. By clicking the <em>Browse</em> button you can load an
existing filter library.
filters will be stored. By clicking the <em>Browse</em> button you can
load an existing filter library.
\n <b>Names of filters</b> lists the filters created or uploaded for
the current study. You can \b Add or \b Delete filters.
\n In <b>Filter name</b> box you can specify the name for your
@ -31,18 +31,28 @@ specify logical relations between criteria using \b Binary operators
Or and And.
\n Some criteria should have the additional parameter of \b Tolerance.
When we create a <b>Standalone Group</b> using filters (for this click
<b>Set Filters</b> button in the <b>Create Group</b> menu), the menu
for setting filters looks a bit differently. Toggling <b>Insert filter
in viewer</b> checkbox enables to preview the group selected with your
current filter in the viewer.
\n In the \b Source field you choose if the filter will be applied to
the whole \b Mesh, the <b>Initial Selection</b> or the <b>Current Group</b>.
\n <b>Copy from...</b> button gives you a possibility to load an
When we create a group using filters (for this click
<b>Set Filters</b> button in the <b>Create Group</b> dialog), the menu
for setting filters looks a bit differently (see below). Switching
on <b>Insert filter in viewer</b> checkbox limits selection of elements
in the Viewer using your current filter.
<br>
In the \b Source field you choose if the filter will be applied to
the whole \b Mesh, the <b>Initial Selection</b> or the <b>Current
Group</b>. If \b Mesh is chosen, the elements satisfying the filter
will be selected in the 3D Viewer. If <b> Initial Selection</b> is
chosen, the filter will be applied to the selected elements and the
elements rejected by the filter will be deseleced. If <b>Current
Group</b> is chosen, the filter will be applied to the list of
elements in the <em>Greate Croup</em> dialog and the elements rejected
by the filter will be removed from the list.
<br>
<b>Copy from...</b> button gives you a possibility to load an
existing filter from <b>Selection filter library</b> and <b>Add
to...</b> button gives you a possibility to save your current filter
in the Library.
\n <b>Note:</b> If the button <b>Apply and Close</b> is disabled, there
<br>
<b>Note:</b> If the button <b>Apply and Close</b> is disabled, there
is no selected mesh in the Object Browser and the filter can not be
created. You have to select the mesh and the button will be enabled.

View File

@ -74,6 +74,51 @@ aSmeshGroup2 = quadra.GroupOnGeom(aGeomGroupE)
salome.sg.updateObjBrowser(1)
\endcode
<br>
\anchor tui_create_group_on_filter
<h2>Create a Group on Filter</h2>
\code
from smesh import *
SetCurrentStudy(salome.myStudy)
box = geompy.MakeBoxDXDYDZ(10,10,10)
# make a mesh with quadrangles of different area in range [1,16]
mesh = Mesh(box,"Quad mesh")
hyp1D = mesh.Segment().StartEndLength( 1, 4 )
mesh.Quadrangle()
mesh.Compute()
# create a group on filter selecting faces of medium size
critaria = [ \
GetCriterion(FACE, FT_Area, ">", 1.1, BinaryOp=FT_LogicalAND ),
GetCriterion(FACE, FT_Area, "<", 15.0 )
]
filt = GetFilterFromCriteria( critaria )
filtGroup = mesh.GroupOnFilter( FACE, "group on filter", filt )
print "Group on filter conatains %s elemens" % filtGroup.Size()
# group on filter is updated if the mesh is modified
hyp1D.SetStartLength( 2.5 )
hyp1D.SetEndLength( 2.5 )
mesh.Compute()
print "After mesh change, group on filter conatains %s elemens" % filtGroup.Size()
# set a new filter defining the group
filt2 = GetFilter( FACE, FT_RangeOfIds, "1-50" )
filtGroup.SetFilter( filt2 )
print "With a new filter, group on filter conatains %s elemens" % filtGroup.Size()
# group is updated at modification of the filter
filt2.SetCriteria( [ GetCriterion( FACE, FT_RangeOfIds, "1-70" )])
filtIDs3 = filtGroup.GetIDs()
print "After filter modification, group on filter conatains %s elemens" % filtGroup.Size()
salome.sg.updateObjBrowser(1)
\endcode
<br>
\anchor tui_edit_group
<h2>Edit a Group</h2>

View File

@ -39,6 +39,7 @@
#include <SMESH_TypeFilter.hxx>
#include <SMESH_Actor.h>
#include <SMESH_ActorUtils.h>
#include <SMESH_LogicalFilter.hxx>
// SALOME GEOM includes
#include <GEOMBase.h>
@ -124,7 +125,8 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule,
mySelector( SMESH::GetViewWindow( theModule )->GetSelector() ),
myIsBusy( false ),
myNameChanged( false ),
myIsApplyAndClose( false )
myIsApplyAndClose( false ),
myNbChangesOfContents(0)
{
initDialog( true );
if ( !theMesh->_is_nil() )
@ -150,7 +152,8 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule,
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
mySelector( SMESH::GetViewWindow( theModule )->GetSelector() ),
myIsBusy( false ),
myNameChanged( false )
myNameChanged( false ),
myNbChangesOfContents(0) // just not to use uninitialized variable
{
initDialog( false );
if ( !theGroup->_is_nil() )
@ -237,10 +240,13 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
QRadioButton* rb1 = new QRadioButton( tr( "SMESH_GROUP_STANDALONE" ), aGrpTypeBox );
QRadioButton* rb2 = new QRadioButton( tr( "SMESH_GROUP_GEOMETRY" ), aGrpTypeBox );
QRadioButton* rb3 = new QRadioButton( tr( "SMESH_GROUP_FILTER" ), aGrpTypeBox );
myGrpTypeGroup->addButton( rb1, 0 );
myGrpTypeGroup->addButton( rb2, 1 );
myGrpTypeGroup->addButton( rb3, 2 );
aGrpTypeBoxLayout->addWidget( rb1 );
aGrpTypeBoxLayout->addWidget( rb2 );
aGrpTypeBoxLayout->addWidget( rb3 );
aGrpTypeBox->setEnabled( create );
myGrpTypeId = -1;
@ -248,6 +254,7 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
myWGStack = new QStackedWidget( this );
QWidget* wg1 = new QWidget( myWGStack );
QWidget* wg2 = new QWidget( myWGStack );
QWidget* wg3 = new QWidget( myWGStack );
/***************************************************************/
QGroupBox* aContentBox = new QGroupBox( tr( "SMESH_CONTENT" ), wg1 );
@ -256,23 +263,25 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
aContentBoxLayout->setSpacing( SPACING );
mySelectAll = new QCheckBox( tr( "SELECT_ALL" ), aContentBox );
myAllowElemsModif = new QCheckBox( tr( "ALLOW_ELEM_LIST_MODIF" ), aContentBox );
myElementsLab = new QLabel( tr( "SMESH_ID_ELEMENTS" ), aContentBox );
myElements = new QListWidget( aContentBox );
myElements->setSelectionMode( QListWidget::ExtendedSelection );
myFilter = new QPushButton( tr( "SMESH_BUT_FILTER" ), aContentBox );
myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), aContentBox );
myAddBtn = new QPushButton( tr( "SMESH_BUT_ADD" ), aContentBox );
myRemoveBtn = new QPushButton( tr( "SMESH_BUT_REMOVE" ), aContentBox );
mySortBtn = new QPushButton( tr( "SMESH_BUT_SORT" ), aContentBox );
aContentBoxLayout->addWidget( mySelectAll, 0, 0 );
aContentBoxLayout->addWidget( myElementsLab, 1, 0 );
aContentBoxLayout->addWidget( myElements, 2, 0, 6, 1 );
aContentBoxLayout->addWidget( myFilter, 2, 1 );
aContentBoxLayout->addWidget( myAddBtn, 4, 1 );
aContentBoxLayout->addWidget( myRemoveBtn, 5, 1 );
aContentBoxLayout->addWidget( mySortBtn, 7, 1 );
aContentBoxLayout->addWidget( myAllowElemsModif, 1, 0 );
aContentBoxLayout->addWidget( myFilterBtn, 1, 1 );
aContentBoxLayout->addWidget( myElementsLab, 2, 0 );
aContentBoxLayout->addWidget( myElements, 3, 0, 6, 1 );
aContentBoxLayout->addWidget( myAddBtn, 3, 1 );
aContentBoxLayout->addWidget( myRemoveBtn, 4, 1 );
aContentBoxLayout->addWidget( mySortBtn, 8, 1 );
aContentBoxLayout->setColumnStretch( 0, 1 );
aContentBoxLayout->setRowStretch( 3, 1 );
@ -328,15 +337,24 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
/***************************************************************/
QGridLayout* wg2Layout = new QGridLayout( wg2 );
wg2Layout->setMargin( 0 );
wg1Layout->setSpacing( SPACING );
wg2Layout->setSpacing( SPACING );
wg2Layout->addWidget( geomObject, 0, 0 );
wg2Layout->addWidget( myGeomGroupBtn, 0, 1 );
wg2Layout->addWidget( myGeomGroupLine,0, 2 );
wg2Layout->setRowStretch( 1, 5 );
/***************************************************************/
QPushButton * aFilter2 = new QPushButton( tr( "SMESH_BUT_FILTER" ), wg3 );
QGridLayout* wg3Layout = new QGridLayout( wg3 );
wg3Layout->setMargin( 0 );
wg3Layout->setSpacing( SPACING );
wg3Layout->addWidget( aFilter2, 0, 0 );
wg3Layout->setRowStretch( 1, 5 );
/***************************************************************/
myWGStack->insertWidget( 0, wg1 );
myWGStack->insertWidget( 1, wg2 );
myWGStack->insertWidget( 2, wg3 );
/***************************************************************/
QGroupBox* aColorBox = new QGroupBox(tr( "SMESH_SET_COLOR" ), this);
@ -398,8 +416,10 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
connect(myName, SIGNAL(textChanged(const QString&)), this, SLOT(onNameChanged(const QString&)));
connect(myElements, SIGNAL(itemSelectionChanged()), this, SLOT(onListSelectionChanged()));
connect(myFilter, SIGNAL(clicked()), this, SLOT(setFilters()));
connect(myFilterBtn, SIGNAL(clicked()), this, SLOT(setFilters()));
connect(aFilter2, SIGNAL(clicked()), this, SLOT(setFilters()));
connect(mySelectAll, SIGNAL(toggled(bool)), this, SLOT(onSelectAll()));
connect(myAllowElemsModif,SIGNAL(toggled(bool)), this, SLOT(onSelectAll()));
connect(myAddBtn, SIGNAL(clicked()), this, SLOT(onAdd()));
connect(myRemoveBtn, SIGNAL(clicked()), this, SLOT(onRemove()));
connect(mySortBtn, SIGNAL(clicked()), this, SLOT(onSort()));
@ -423,8 +443,12 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
mySelectionMode = grpNoSelection;
myMeshFilter = new SMESH_TypeFilter(MESH);
mySubMeshFilter = new SMESH_TypeFilter(SUBMESH);
myGroupFilter = new SMESH_TypeFilter(GROUP);
mySubMeshFilter = new SMESH_LogicalFilter(QList<SUIT_SelectionFilter*>(),
SMESH_LogicalFilter::LO_OR,
/*takeOwnership=*/true);
myGroupFilter = new SMESH_LogicalFilter(QList<SUIT_SelectionFilter*>(),
SMESH_LogicalFilter::LO_OR,
/*takeOwnership=*/true);
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( mySMESHGUI->application()->activeStudy() );
myGeomFilter = new GEOM_SelectionFilter( aStudy, true );
@ -439,8 +463,7 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
if (myMesh->_is_nil() )
myTypeGroup->button(0)->setChecked(true);
updateButtons();
//myName->setText(GetDefaultName(tr( "SMESH_GROUP" )));
onSelectAll(); //updateButtons();
}
//=================================================================================
@ -454,6 +477,10 @@ SMESHGUI_GroupDlg::~SMESHGUI_GroupDlg()
myFilterDlg->setParent( 0 );
delete myFilterDlg;
}
if ( myMeshFilter ) delete myMeshFilter;
if ( mySubMeshFilter ) delete mySubMeshFilter;
if ( myGroupFilter ) delete myGroupFilter;
if ( myGeomFilter ) delete myGeomFilter;
}
//=================================================================================
@ -506,6 +533,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
setShowEntityMode();
myGroup = SMESH::SMESH_Group::_nil();
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
// NPAL19389: create a group with a selection in another group
// set actor of myMesh, if it is visible, else try
@ -562,8 +590,10 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
myGroup = SMESH::SMESH_Group::_narrow( theGroup );
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow( theGroup );
myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_narrow( theGroup );
myFilter = SMESH::Filter::_nil();
if (myGroup->_is_nil() && myGroupOnGeom->_is_nil())
if (myGroup->_is_nil() && myGroupOnGeom->_is_nil() && myGroupOnFilter->_is_nil() )
return;
// NPAL19389: create a group with a selection in another group
@ -578,14 +608,16 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
anActor = SMESH::FindActorByObject(theGroup);
SMESH::SetPickable(anActor);*/
int grpType = (!myGroup->_is_nil() ? 0 : (theIsConvert ? 0 : 1));
int grpType = (!myGroup->_is_nil() ? 0 : (theIsConvert ? 0 : myGroupOnGeom->_is_nil() ? 2 : 1));
myGrpTypeGroup->button(grpType)->setChecked(true);
onGrpTypeChanged(grpType);
myTypeId = aType;
if ( grpType == 0 ) {
if ( grpType == 0 ) { // standalone group
myCurrentLineEdit = 0;
myElements->clear();
myAllowElemsModif->setChecked( true );
setSelectionMode(aType);
setShowEntityMode(); // depends on myTypeId
@ -601,7 +633,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
myElements->selectAll();
}
}
else
else if ( grpType == 1 ) // group on geom
{
QString aShapeName( "" );
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
@ -613,12 +645,26 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
aShapeName = aGroupShapeSO->GetName().c_str();
}
myGeomGroupLine->setText( aShapeName );
}
else // group on filter
{
myFilter = myGroupOnFilter->GetFilter();
if ( !myFilter->_is_nil() ) {
SMESH::Predicate_var perdicate = myFilter->GetPredicate();
if ( perdicate->_is_nil() )
myFilter = SMESH::Filter::_nil();
}
}
if ( grpType != 0 )
{
myNameChanged = true;
myName->blockSignals(true);
myName->setText(theGroup->GetName());
myName->blockSignals(false);
}
updateButtons();
onSelectAll(); //updateButtons();
}
//=================================================================================
@ -628,14 +674,33 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
void SMESHGUI_GroupDlg::updateButtons()
{
bool enable = !myName->text().trimmed().isEmpty();
if (myGrpTypeId == 0) {
enable = enable && (mySelectAll->isChecked() || myElements->count() > 0);
if ( enable )
{
if (myGrpTypeId == 0) { // standalone
if ( !mySelectAll->isChecked() )
{
if ( myAllowElemsModif->isChecked() )
{
enable = ( myElements->count() > 0 );
}
else if ((enable = !myFilter->_is_nil() ))
{
SMESH::array_of_ElementType_var types = myFilter->GetTypes();
enable = types->length();
}
}
enable = enable && (!myGroup->_is_nil() || !myMesh->_is_nil());
}
else if (myGrpTypeId == 1) {
if (CORBA::is_nil(myGroupOnGeom)) { // creation mode
enable = enable && myGeomObjects->length() > 0 && !myMesh->_is_nil();
else if (myGrpTypeId == 1) // on geom
{
if (CORBA::is_nil(myGroupOnGeom)) // creation mode
enable = ( myGeomObjects->length() > 0 && !myMesh->_is_nil() );
}
else if (myGrpTypeId == 2) // on filter
{
if (( enable = !myFilter->_is_nil() ))
if (CORBA::is_nil(myGroupOnFilter) ) // creation mode
enable = !myMesh->_is_nil();
}
}
@ -662,9 +727,13 @@ void SMESHGUI_GroupDlg::onTypeChanged (int id)
{
if (myTypeId != id) {
myElements->clear();
if (myCurrentLineEdit == 0)
setSelectionMode(id);
myTypeId = id;
int curSelMode = mySelectionMode;
mySelectionMode = grpNoSelection;
setSelectionMode( curSelMode );
onObjectSelectionChanged();
setShowEntityMode();
}
}
@ -683,6 +752,7 @@ void SMESHGUI_GroupDlg::onGrpTypeChanged (int id)
onSelectGeomGroup(id == 1);
}
myGrpTypeId = id;
updateButtons();
}
//=================================================================================
@ -704,7 +774,7 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
if (myMesh->_is_nil())
return;
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
bool isSelectAll = mySelectAll->isChecked();
bool isSelectAll = mySelectAll->isChecked() || !myAllowElemsModif->isChecked();
if (mySelectionMode != theMode) {
// [PAL10408] mySelectionMgr->clearSelected();
mySelectionMgr->clearFilters();
@ -737,14 +807,44 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
case grpVolumeSelection:
if ( aViewWindow ) aViewWindow->SetSelectionMode(isSelectAll ? ActorSelection : VolumeSelection);
break;
case grpSubMeshSelection:
mySelectionMgr->installFilter(mySubMeshFilter);
case grpSubMeshSelection: {
SMESH_TypeFilter* f = 0;
switch (myTypeId) {
case 0: f = new SMESH_TypeFilter(SUBMESH); break;
case 1: f = new SMESH_TypeFilter(SUBMESH_EDGE); break;
case 2: f = new SMESH_TypeFilter(SUBMESH_FACE); break;
case 3: f = new SMESH_TypeFilter(SUBMESH_SOLID); break;
default:f = new SMESH_TypeFilter(SUBMESH);
}
QList<SUIT_SelectionFilter*> filtList;
filtList.append( f );
filtList.append( new SMESH_TypeFilter(SUBMESH_COMPOUND));
mySubMeshFilter->setFilters( filtList );
mySelectionMgr->installFilter( mySubMeshFilter );
if ( aViewWindow ) aViewWindow->SetSelectionMode(ActorSelection);
break;
case grpGroupSelection:
}
case grpGroupSelection: {
SMESH_TypeFilter* f = 0;
switch (myTypeId) {
case 0: f = new SMESH_TypeFilter(GROUP_NODE); break;
case 1: f = new SMESH_TypeFilter(GROUP_EDGE); break;
case 2: f = new SMESH_TypeFilter(GROUP_FACE); break;
case 3: f = new SMESH_TypeFilter(GROUP_VOLUME); break;
default:f = new SMESH_TypeFilter(GROUP);
}
QList<SUIT_SelectionFilter*> filtList;
filtList.append( f );
myGroupFilter->setFilters( filtList );
mySelectionMgr->installFilter(myGroupFilter);
if ( aViewWindow ) aViewWindow->SetSelectionMode(ActorSelection);
break;
}
case grpMeshSelection:
mySelectionMgr->installFilter(myMeshFilter);
if ( aViewWindow ) aViewWindow->SetSelectionMode(ActorSelection);
@ -774,29 +874,6 @@ bool SMESHGUI_GroupDlg::onApply()
if (myName->text().trimmed().isEmpty())
return false;
bool anIsOk = false;
QStringList anEntryList;
if (myGrpTypeId == 0) { // on mesh elements
if (!mySelectAll->isChecked() && !myElements->count())
return false;
mySelectionMgr->clearSelected();
if (myGroup->_is_nil()) { // creation or conversion
// check if group on geometry is not null
if (!CORBA::is_nil(myGroupOnGeom)) {
if (myMesh->_is_nil())
return false;
myGroup = myMesh->ConvertToStandalone( myGroupOnGeom );
// nullify pointer, because object become dead
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
}
}
if (myGroup->_is_nil()) { // creation
if (myMesh->_is_nil())
return false;
SMESH::ElementType aType = SMESH::ALL;
switch (myTypeId) {
case 0: aType = SMESH::NODE; break;
@ -805,55 +882,72 @@ bool SMESHGUI_GroupDlg::onApply()
case 3: aType = SMESH::VOLUME; break;
}
bool anIsOk = false;
QStringList anEntryList;
SMESH::SMESH_GroupBase_var resultGroup;
bool isCreation;
if (myGrpTypeId == 0) // standalone
{
if (!mySelectAll->isChecked() && !myElements->count() && myAllowElemsModif->isChecked())
return false;
mySelectionMgr->clearSelected();
if (myGroup->_is_nil()) { // creation or conversion
// check if group on geometry is not null
if (!myGroupOnGeom->_is_nil() || !myGroupOnFilter->_is_nil()) {
if (myMesh->_is_nil())
return false;
if ( myGroupOnGeom->_is_nil() )
myGroup = myMesh->ConvertToStandalone( myGroupOnFilter );
else
myGroup = myMesh->ConvertToStandalone( myGroupOnGeom );
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
}
}
if (myGroup->_is_nil()) { // creation
if (myMesh->_is_nil())
return false;
myGroup = SMESH::AddGroup(myMesh, aType, myName->text());
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroup );
isCreation = true;
if ( mySelectAll->isChecked() ) {
// select all
myGroup->AddFrom(myMesh.in());
}
else {
// select manually
if ( !myFilter->_is_nil() &&
( myNbChangesOfContents == 1 || !myAllowElemsModif->isChecked()))
{
myGroup->AddFrom( myFilter );
}
else
{
SMESH::long_array_var anIdList = new SMESH::long_array;
int i, k = myElements->count();
anIdList->length(k);
for (i = 0; i < k; i++) {
anIdList[i] = myElements->item(i)->text().toInt();
}
myGroup->Add(anIdList.inout());
}
}
SALOMEDS::Color aColor = getGroupColor();
myGroup->SetColor(aColor);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
if( aMeshGroupSO )
anEntryList.append( aMeshGroupSO->GetID().c_str() );
//SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
SMESH::setFileType ( aMeshGroupSO, "COULEURGROUP" );
/* init for next operation */
myName->setText( "" );
myElements->clear();
myGroup = SMESH::SMESH_Group::_nil();
} else { // edition
myGroup->SetName(myName->text().toLatin1().data());
SALOMEDS::Color aColor = getGroupColor();
myGroup->SetColor(aColor);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str())) {
anActor->setName(myName->text().toLatin1().data());
switch ( myTypeId ) {
case 0: anActor->SetNodeColor( aColor.R, aColor.G, aColor.B ); break;
case 1: anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); break;
case 2:
case 3: anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B ); break;
}
}
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroup );
isCreation = false;
if ( mySelectAll->isChecked() ) {
// select all
@ -896,25 +990,14 @@ bool SMESHGUI_GroupDlg::onApply()
}
}
SMESHGUI::Modified();
mySMESHGUI->updateObjBrowser(true);
SMESH::UpdateView(); // asv: fix of BUG PAL5515
mySelectionMgr->clearSelected();
anIsOk = true;
}
else if (myGrpTypeId == 1) { // on geom object
else if (myGrpTypeId == 1) // on geom object
{
if (CORBA::is_nil(myGroupOnGeom)) { // creation
if (myMesh->_is_nil() || !myGeomObjects->length())
return false;
SMESH::ElementType aType = SMESH::ALL;
switch (myTypeId) {
case 0: aType = SMESH::NODE; break;
case 1: aType = SMESH::EDGE; break;
case 2: aType = SMESH::FACE; break;
case 3: aType = SMESH::VOLUME; break;
}
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
GEOM::GEOM_IGroupOperations_var aGroupOp =
SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
@ -971,28 +1054,68 @@ bool SMESHGUI_GroupDlg::onApply()
myName->text().toLatin1().data(),
aGroupVar);
}
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroupOnGeom );
isCreation = true;
}
else { // edition
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroupOnGeom );
isCreation = false;
}
anIsOk = true;
}
if (myGrpTypeId == 2) // group on filter
{
if ( myFilter->_is_nil() ) return false;
if (CORBA::is_nil(myGroupOnFilter)) { // creation
if (myMesh->_is_nil())
return false;
myGroupOnFilter = myMesh->CreateGroupFromFilter(aType,
myName->text().toLatin1().data(),
myFilter);
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroupOnFilter );
isCreation = true;
}
else
{
myGroupOnFilter->SetFilter( myFilter );
resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroupOnFilter );
isCreation = false;
}
anIsOk = true;
}
if( anIsOk )
{
SALOMEDS::Color aColor = getGroupColor();
myGroupOnGeom->SetColor(aColor);
resultGroup->SetColor(aColor);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject( resultGroup );
if( aMeshGroupSO )
anEntryList.append( aMeshGroupSO->GetID().c_str() );
//SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
SMESH::setFileType ( aMeshGroupSO,"COULEURGROUP" );
if ( isCreation )
{
SMESH::setFileType ( aMeshGroupSO, "COULEURGROUP" );
/* init for next operation */
/* init for the next operation */
myName->setText( "" );
myElements->clear();
myGroup = SMESH::SMESH_Group::_nil();
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
myFilter = SMESH::Filter::_nil();
}
else { // edition
myGroupOnGeom->SetName(myName->text().toLatin1().data());
else
{
myGroup->SetName(myName->text().toLatin1().data());
SALOMEDS::Color aColor = getGroupColor();
myGroupOnGeom->SetColor(aColor);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
if ( aMeshGroupSO )
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str())) {
anActor->setName(myName->text().toLatin1().data());
switch ( myTypeId ) {
@ -1003,18 +1126,15 @@ bool SMESHGUI_GroupDlg::onApply()
}
}
}
SMESHGUI::Modified();
mySMESHGUI->updateObjBrowser(true);
SMESH::UpdateView(); // asv: fix of BUG PAL5515
mySelectionMgr->clearSelected();
anIsOk = true;
}
if( anIsOk )
if( LightApp_Application* anApp =
dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
myObjectToSelect = anApp->browseObjects( anEntryList, isApplyAndClose() );
}
return anIsOk;
}
@ -1388,18 +1508,22 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
}
//=================================================================================
// function : onSelectSubMesh()
// purpose : Called when selection in 3D view or ObjectBrowser is changed
// function : onSelectAll()
// purpose : Called when "Select all" is checked
//=================================================================================
void SMESHGUI_GroupDlg::onSelectAll()
{
myElementsLab->setEnabled( !mySelectAll->isChecked() );
myElements->setEnabled( !mySelectAll->isChecked() );
myFilter->setEnabled( !mySelectAll->isChecked() );
myAddBtn->setEnabled( !mySelectAll->isChecked() );
myRemoveBtn->setEnabled( !mySelectAll->isChecked() );
mySortBtn->setEnabled( !mySelectAll->isChecked() );
mySelectBox->setEnabled( !mySelectAll->isChecked() );
bool noElemsModif = ( mySelectAll->isChecked() || !myAllowElemsModif->isChecked() );
myElementsLab->setEnabled( !noElemsModif );
myElements->setEnabled ( !noElemsModif );
myFilterBtn->setEnabled ( !mySelectAll->isChecked() );
myAddBtn->setEnabled ( !noElemsModif );
myRemoveBtn->setEnabled ( !noElemsModif );
mySortBtn->setEnabled ( !noElemsModif );
mySelectBox->setEnabled ( !noElemsModif );
myAllowElemsModif->setEnabled( !mySelectAll->isChecked() );
int selMode = mySelectionMode;
mySelectionMode = grpNoSelection;
setSelectionMode( selMode );
@ -1546,6 +1670,12 @@ void SMESHGUI_GroupDlg::setFilters()
else
myFilterDlg->Init( aType );
if ( !myGroupOnFilter->_is_nil() )
{
myFilterDlg->SetFilter( myFilter, aType );
myFilterDlg->Init( aType );
}
myFilterDlg->SetSelection();
myFilterDlg->SetMesh( myMesh );
myFilterDlg->SetSourceWg( myElements, false );
@ -1566,6 +1696,28 @@ void SMESHGUI_GroupDlg::onFilterAccepted()
mySelectSubMesh->setChecked( false );
mySelectGroup->setChecked( false );
}
// get a filter from myFilterDlg
myFilter = myFilterDlg->GetFilter();
if ( !myFilter->_is_nil() ) {
SMESH::Predicate_var perdicate = myFilter->GetPredicate();
if ( perdicate->_is_nil() )
myFilter = SMESH::Filter::_nil();
}
// set mesh to myFilter
if ( !myFilter->_is_nil() ) {
SMESH::SMESH_Mesh_var mesh = myMesh;
if ( mesh->_is_nil() ) {
if ( !myGroup->_is_nil() )
mesh = myGroup->GetMesh();
else if ( !myGroupOnGeom->_is_nil() )
mesh = myGroupOnGeom->GetMesh();
else if ( !myGroupOnFilter->_is_nil() )
mesh = myGroupOnFilter->GetMesh();
}
myFilter->SetMesh( mesh );
}
updateButtons();
}
//=================================================================================
@ -1582,6 +1734,7 @@ void SMESHGUI_GroupDlg::onAdd()
if (aNbSel == 0 || myActorsList.count() == 0 || myMesh->_is_nil()) return;
myIsBusy = true;
int sizeBefore = myElements->count();
SMESH::ElementType aType = SMESH::ALL;
switch(myTypeId) {
@ -1762,7 +1915,7 @@ void SMESHGUI_GroupDlg::onAdd()
// Construct filter
SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
SMESH::Filter_var aFilter = aFilterMgr->CreateFilter();
SMESH::BelongToGeom_var aBelongToGeom = aFilterMgr->CreateBelongToGeom();;
SMESH::BelongToGeom_var aBelongToGeom = aFilterMgr->CreateBelongToGeom();
aBelongToGeom->SetGeom(myGeomObjects[0]);
aBelongToGeom->SetShapeName(aGroupSO->GetName().c_str());
aBelongToGeom->SetElementType(aType);
@ -1799,6 +1952,8 @@ void SMESHGUI_GroupDlg::onAdd()
onListSelectionChanged();
}
myIsBusy = false;
if ( sizeBefore < myElements->count() )
++myNbChangesOfContents;
// mySelectionMgr->clearSelected();
updateButtons();
}
@ -1810,6 +1965,8 @@ void SMESHGUI_GroupDlg::onAdd()
void SMESHGUI_GroupDlg::onRemove()
{
myIsBusy = true;
int sizeBefore = myElements->count();
if (myCurrentLineEdit == 0) {
QList<QListWidgetItem*> selItems = myElements->selectedItems();
QListWidgetItem* item;
@ -1901,6 +2058,8 @@ void SMESHGUI_GroupDlg::onRemove()
}
}
myIsBusy = false;
if ( sizeBefore > myElements->count() )
myNbChangesOfContents += 2; // it's used to detect that "Add" was only once
updateButtons();
}

View File

@ -39,6 +39,7 @@
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SMESH_Mesh)
#include CORBA_SERVER_HEADER(SMESH_Group)
#include CORBA_SERVER_HEADER(SMESH_Filter)
class QGroupBox;
class QLabel;
@ -60,6 +61,7 @@ class SUIT_Operation;
class SVTK_Selector;
class SUIT_SelectionFilter;
class LightApp_SelectionMgr;
class SMESH_LogicalFilter;
//=================================================================================
// class : SMESHGUI_GroupDlg
@ -145,6 +147,8 @@ private:
void setIsApplyAndClose( const bool theFlag );
bool isApplyAndClose() const;
private:
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
int myGrpTypeId; /* Current group type id : standalone or group on geometry */
@ -164,9 +168,10 @@ private:
QStackedWidget* myWGStack;
QCheckBox* mySelectAll;
QCheckBox* myAllowElemsModif;
QLabel* myElementsLab;
QListWidget* myElements;
QPushButton* myFilter;
QPushButton* myFilterBtn;
QPushButton* myAddBtn;
QPushButton* myRemoveBtn;
QPushButton* mySortBtn;
@ -197,6 +202,8 @@ private:
QList<SMESH_Actor*> myActorsList;
SMESH::SMESH_Group_var myGroup;
SMESH::SMESH_GroupOnGeom_var myGroupOnGeom;
SMESH::SMESH_GroupOnFilter_var myGroupOnFilter;
SMESH::Filter_var myFilter;
QList<int> myIdList;
GEOM::ListOfGO_var myGeomObjects;
@ -205,8 +212,8 @@ private:
//Handle(SMESH_TypeFilter) mySubMeshFilter;
//Handle(SMESH_TypeFilter) myGroupFilter;
SUIT_SelectionFilter* myMeshFilter;
SUIT_SelectionFilter* mySubMeshFilter;
SUIT_SelectionFilter* myGroupFilter;
SMESH_LogicalFilter* mySubMeshFilter;
SMESH_LogicalFilter* myGroupFilter;
SUIT_SelectionFilter* myGeomFilter;
SMESHGUI_FilterDlg* myFilterDlg;
@ -218,6 +225,7 @@ private:
QMap<QAction*, int> myActions;
bool myNameChanged; //added by skl for IPAL19574
int myNbChangesOfContents; // nb add's and remove's
QString myObjectToSelect;
bool myIsApplyAndClose;

View File

@ -1106,7 +1106,7 @@ Please enter correct values and try again</translation>
</message>
<message>
<source>SMESH_BUT_FILTER</source>
<translation>Set &amp;Filters</translation>
<translation>Set &amp;Filter</translation>
</message>
<message>
<source>SMESH_BUT_HELP</source>
@ -1445,6 +1445,10 @@ add the exported data to its contents?</translation>
<source>SMESH_GROUP_GEOMETRY</source>
<translation>Group on geometry</translation>
</message>
<message>
<source>SMESH_GROUP_FILTER</source>
<translation>Group on filter</translation>
</message>
<message>
<source>SMESH_GROUP_SELECTED</source>
<translation>%1 Groups</translation>
@ -3482,6 +3486,13 @@ Input value precision can be adjusted using
<translation>SMESH plugins</translation>
</message>
</context>
<context>
<name>SMESHGUI_GroupDlg</name>
<message>
<source>ALLOW_ELEM_LIST_MODIF</source>
<translation>Enable manual edition</translation>
</message>
</context>
<context>
<name>SMESHGUI</name>
<message>