0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups
To create/edit SMESH_GroupOnFilter
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 33 KiB |
BIN
doc/salome/gui/SMESH/images/creategroup_on_filter.png
Normal file
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 38 KiB |
@ -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.
|
||||
|
||||
*/
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -1106,7 +1106,7 @@ Please enter correct values and try again</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_BUT_FILTER</source>
|
||||
<translation>Set &Filters</translation>
|
||||
<translation>Set &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>
|
||||
|