mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-27 07:10:33 +05:00
0022107: EDF 2502 SMESH: Publish the result of show bad mesh in a group
This commit is contained in:
parent
f70691d5a4
commit
88068fce89
Binary file not shown.
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 39 KiB |
Binary file not shown.
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 32 KiB |
@ -22,8 +22,10 @@ written in Python.
|
||||
<li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
|
||||
Mesh"</em> button in the toolbar.
|
||||
|
||||
<center>
|
||||
\image html image32.png
|
||||
<em>"Create Mesh" button</em>
|
||||
</center>
|
||||
|
||||
The following dialog box will appear:
|
||||
|
||||
@ -62,21 +64,27 @@ written in Python.
|
||||
mesh in the Object Browser and click "Select" button near \b Geometry
|
||||
field (if the name of the object has not yet appeared in \b Geometry field).
|
||||
|
||||
<center>
|
||||
\image html image120.png
|
||||
<em>"Select" button</em>
|
||||
</center>
|
||||
|
||||
Now you can define 3D Algorithm and 3D Hypotheses, which will be
|
||||
applied to the solids of your geometrical object. Click the <em>"Add
|
||||
Hypothesis"</em> button to add a hypothesis.
|
||||
|
||||
<center>
|
||||
\image html image121.png
|
||||
<em>"Add Hypothesis" button</em>
|
||||
</center>
|
||||
|
||||
Click the <em>"Edit Hypothesis"</em> button to change the values for the
|
||||
current hypothesis.
|
||||
|
||||
<center>
|
||||
\image html image122.png
|
||||
<em>"Edit Hypothesis" button</em>
|
||||
</center>
|
||||
|
||||
Most standard 2D and 3D algorithms can work without hypotheses
|
||||
using some default parameters. The use of additional hypotheses
|
||||
@ -90,7 +98,8 @@ written in Python.
|
||||
the higher dimension algorithm.
|
||||
|
||||
Some algorithms generate mesh of several dimensions, while others
|
||||
produce mesh of only one dimension. In the latter case there must be one Algorithm and zero or several
|
||||
produce mesh of only one dimension. In the latter case there must
|
||||
be one Algorithm and zero or several
|
||||
Hypotheses for each dimension of your object, otherwise you will
|
||||
not get any mesh at all. Of course, if you wish to mesh a face,
|
||||
which is a 2D object, you do not need to define a 3D Algorithm and
|
||||
@ -99,9 +108,11 @@ written in Python.
|
||||
In the <b>Object Browser</b> the structure of the new mesh will be
|
||||
displayed as follows:
|
||||
|
||||
\image html image88.jpg
|
||||
<center>
|
||||
\image html image88.jpg
|
||||
</center>
|
||||
|
||||
It contains:
|
||||
It contains:
|
||||
<ul>
|
||||
<li>a reference to the geometrical object on the basis of
|
||||
which the mesh has been constructed;</li>
|
||||
@ -152,8 +163,10 @@ For this, select the mesh in the Object Browser. From the \b Mesh menu
|
||||
select \b Preview or click "Preview" button in the toolbar or activate
|
||||
"Preview" item from the pop-up menu.
|
||||
|
||||
<center>
|
||||
\image html mesh_precompute.png
|
||||
<em>"Preview" button</em>
|
||||
</center>
|
||||
|
||||
Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog.
|
||||
|
||||
@ -265,33 +278,29 @@ the hypotheses are assigned. For this, select your mesh in
|
||||
the <b>Object Browser</b>. From the \b Mesh menu select \b Compute or
|
||||
click "Compute" button of the toolbar.
|
||||
|
||||
<center>
|
||||
\image html image28.png
|
||||
<em>"Compute" button</em>
|
||||
</center>
|
||||
|
||||
The Mesh Computation information box appears.
|
||||
After the mesh computation finishes, the Mesh Computation information
|
||||
box appears. In case of a success, the box shows
|
||||
information on number of entities of different types in the mesh.
|
||||
|
||||
\image html meshcomputationsucceed.png
|
||||
|
||||
If the mesh computation failed, the information about the cause of the
|
||||
failure is provided.
|
||||
failure is provided in \b Errors table.
|
||||
|
||||
\image html meshcomputationfail.png
|
||||
|
||||
After you select the error, <b>Show Sub-shape</b> button allows
|
||||
visualizing in magenta the geometrical entity that causes it.
|
||||
visualizing in magenta the geometrical entity that causes the error.
|
||||
|
||||
\image html failed_computation.png
|
||||
<em>3D algorithm failed to compute mesh on a box shown using <b>Show
|
||||
Sub-shape</b> button</em>
|
||||
|
||||
|
||||
\note Mesh Computation Information box does not appear if you set
|
||||
"Mesh computation/Show a computation result notification" preference
|
||||
to the "Never" value. This option gives the possibility to control mesh
|
||||
computation reporting. There are the following possibilities: always
|
||||
show the information box, show only if an error occurs or never.
|
||||
By default, the information box is always shown after mesh computation operation.
|
||||
|
||||
<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
|
||||
has failed, in GEOM component as a child of the mesh geometry, which
|
||||
allows analyzing the problem geometry and creating a submesh on it in
|
||||
@ -305,9 +314,20 @@ or/and hidden by other mesh elements. They can be seen after
|
||||
switching the mesh to Wireframe visualization mode or switching off
|
||||
the visualization of faces and volumes (if any).
|
||||
|
||||
<b>Bad Mesh to Group</b> button creates groups of the bad mesh entities,
|
||||
thus allowing you for more comfortable analysis of these entities.
|
||||
|
||||
\image html show_bad_mesh.png
|
||||
<em>Too close nodes causing meshing failure are shown in magenta using <b>Show
|
||||
<em>Edges bounding a hole in the surface are shown in magenta using <b>Show
|
||||
bad Mesh</b> button</em>
|
||||
|
||||
\note Mesh Computation Information box does not appear if you set
|
||||
"Mesh computation/Show a computation result notification" preference
|
||||
to the "Never" value. This option gives the possibility to control mesh
|
||||
computation reporting. There are the following possibilities: always
|
||||
show the information box, show only if an error occurs or never.
|
||||
By default, the information box is always shown after mesh computation operation.
|
||||
|
||||
<br><br>
|
||||
|
||||
\anchor use_existing_anchor
|
||||
@ -320,13 +340,13 @@ this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
|
||||
existing faces</b>.
|
||||
For example, you want to use standard algorithms to generate 1D and 3D
|
||||
meshes and to create 2D mesh by your python code. Then you
|
||||
<ul>
|
||||
<li> create a mesh object, assign a 1D algorithm,</li>
|
||||
<li> invoke \b Compute command, which computes a 1D mesh,</li>
|
||||
<ol>
|
||||
<li> create a mesh object, assign an 1D algorithm,</li>
|
||||
<li> invoke \b Compute command, which computes an 1D mesh,</li>
|
||||
<li> assign <b>Use existing faces</b> and a 3D algorithm,</li>
|
||||
<li> run your python code, which creates a 2D mesh,</li>
|
||||
<li> invoke \b Compute command, which computes a 3D mesh.</li>
|
||||
</ul>
|
||||
</ol>
|
||||
|
||||
Consider trying a sample script demonstrating the usage of
|
||||
\ref tui_use_existing_faces "Use existing faces" algorithm for
|
||||
|
@ -12,7 +12,7 @@
|
||||
\n Scripts generated for SALOME 6 and older versions must be adapted to work in SALOME 7.2 with full functionality.
|
||||
\n The compatibility mode allows old scripts to work in almost all cases, but with a warning.
|
||||
|
||||
See also <li>\subpage geompy_migration_page</li>
|
||||
See also \subpage geompy_migration_page
|
||||
|
||||
<b>Salome initialisation must always be done as shown below</b>
|
||||
\n (<em>salome_init()</em> can be invoked safely several times):
|
||||
|
@ -13,7 +13,7 @@ in the \ref smeshBuilder and \ref StdMeshersBuilder Python packages.
|
||||
|
||||
\n With SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality,
|
||||
\n You may have to modify your scripts generated with SALOME 6 or older versions.
|
||||
\n Please see <li>\ref smesh_migration_page</li>
|
||||
\n Please see \ref smesh_migration_page
|
||||
|
||||
Class \ref smeshBuilder.smeshBuilder "smeshBuilder" provides an interface to create and handle
|
||||
meshes. It can be used to create an empty mesh or to import mesh from the data file.
|
||||
|
@ -61,6 +61,8 @@
|
||||
#include <SALOMEDSClient_SObject.hxx>
|
||||
#include <SALOMEDS_wrap.hxx>
|
||||
|
||||
#include CORBA_SERVER_HEADER(SMESH_Group)
|
||||
|
||||
// OCCT includes
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <TopExp.hxx>
|
||||
@ -460,10 +462,12 @@ namespace SMESH
|
||||
foreach( range, selRanges )
|
||||
{
|
||||
for ( int row = range.topRow(); row <= range.bottomRow(); ++row )
|
||||
rows.append( row );
|
||||
if ( !rows.count( row ))
|
||||
rows.append( row );
|
||||
}
|
||||
if ( rows.isEmpty() && table->currentRow() > -1 )
|
||||
rows.append( table->currentRow() );
|
||||
if ( !rows.count( table->currentRow() ))
|
||||
rows.append( table->currentRow() );
|
||||
|
||||
return rows.count();
|
||||
}
|
||||
@ -553,6 +557,7 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent, bool ForEval)
|
||||
myShowBtn = new QPushButton(tr("SHOW_SHAPE"), myCompErrorGroup);
|
||||
myPublishBtn = new QPushButton(tr("PUBLISH_SHAPE"), myCompErrorGroup);
|
||||
myBadMeshBtn = new QPushButton(tr("SHOW_BAD_MESH"), myCompErrorGroup);
|
||||
myBadMeshToGroupBtn = new QPushButton(tr("GROUP_OF_BAD_MESH"), myCompErrorGroup);
|
||||
|
||||
//myTable->setReadOnly( true ); // VSR: check
|
||||
myTable->setEditTriggers( QAbstractItemView::NoEditTriggers );
|
||||
@ -577,11 +582,12 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent, bool ForEval)
|
||||
QGridLayout* grpLayout = new QGridLayout(myCompErrorGroup);
|
||||
grpLayout->setSpacing(SPACING);
|
||||
grpLayout->setMargin(MARGIN);
|
||||
grpLayout->addWidget( myWarningLabel, 0, 0, 1, 4 );
|
||||
grpLayout->addWidget( myTable, 1, 0, 1, 4 );
|
||||
grpLayout->addWidget( myShowBtn, 2, 0 );
|
||||
grpLayout->addWidget( myPublishBtn, 2, 1 );
|
||||
grpLayout->addWidget( myBadMeshBtn, 2, 2 );
|
||||
grpLayout->addWidget( myWarningLabel, 0, 0, 1, 4 );
|
||||
grpLayout->addWidget( myTable, 1, 0, 1, 4 );
|
||||
grpLayout->addWidget( myShowBtn, 2, 0 );
|
||||
grpLayout->addWidget( myPublishBtn, 2, 1 );
|
||||
grpLayout->addWidget( myBadMeshBtn, 2, 2 );
|
||||
grpLayout->addWidget( myBadMeshToGroupBtn, 2, 3 );
|
||||
grpLayout->setColumnStretch( 3, 1 );
|
||||
|
||||
// Hypothesis definition errors
|
||||
@ -1068,11 +1074,14 @@ void SMESHGUI_BaseComputeOp::showComputeResult( const bool theMemoryLack,
|
||||
tbl->resizeColumnToContents( COL_SHAPE );
|
||||
tbl->setWordWrap( true );
|
||||
|
||||
if ( hasBadMesh )
|
||||
if ( hasBadMesh ) {
|
||||
aCompDlg->myBadMeshBtn->show();
|
||||
else
|
||||
aCompDlg->myBadMeshToGroupBtn->show();
|
||||
}
|
||||
else {
|
||||
aCompDlg->myBadMeshBtn->hide();
|
||||
|
||||
aCompDlg->myBadMeshToGroupBtn->hide();
|
||||
}
|
||||
tbl->setCurrentCell(0,0);
|
||||
currentCellChanged(); // to update buttons
|
||||
}
|
||||
@ -1189,6 +1198,43 @@ void SMESHGUI_BaseComputeOp::onShowBadMesh()
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief create groups of bad mesh elements preventing computation of a submesh of current row
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHGUI_BaseComputeOp::onGroupOfBadMesh()
|
||||
{
|
||||
QList<int> rows;
|
||||
SMESH::getSelectedRows( table(), rows );
|
||||
int row;
|
||||
foreach ( row, rows )
|
||||
{
|
||||
bool hasBadMesh = ( !table()->item(row, COL_BAD_MESH)->text().isEmpty() );
|
||||
if ( hasBadMesh ) {
|
||||
int curSub = table()->item(rows.front(), COL_SHAPEID)->text().toInt();
|
||||
QString grName = table()->item(rows.front(), COL_SHAPE)->text();
|
||||
if ( grName.isEmpty() ) grName = "bad mesh";
|
||||
else grName = "bad mesh of " + grName;
|
||||
SMESH::SMESH_Gen_var gen = getSMESHGUI()->GetSMESHGen();
|
||||
SMESH::ListOfGroups_var groups
|
||||
( gen->MakeGroupsOfBadInputElements(myMesh,curSub,grName.toLatin1().data()) );
|
||||
update( UF_ObjBrowser | UF_Model );
|
||||
if( LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( application() ))
|
||||
{
|
||||
QStringList anEntryList;
|
||||
for ( size_t i = 0; i < groups->length(); ++i )
|
||||
if ( _PTR(SObject) so = SMESH::FindSObject( groups[i] ))
|
||||
anEntryList.append( so->GetID().c_str() );
|
||||
|
||||
if ( !anEntryList.isEmpty())
|
||||
anApp->browseObjects( anEntryList, true, false );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief SLOT called when a selected cell in table() changed
|
||||
@ -1287,9 +1333,10 @@ SMESHGUI_ComputeDlg* SMESHGUI_BaseComputeOp::computeDlg() const
|
||||
SMESHGUI_BaseComputeOp* me = (SMESHGUI_BaseComputeOp*)this;
|
||||
me->myCompDlg = new SMESHGUI_ComputeDlg( desktop(), false );
|
||||
// connect signals and slots
|
||||
connect(myCompDlg->myShowBtn, SIGNAL (clicked()), SLOT(onPreviewShape()));
|
||||
connect(myCompDlg->myPublishBtn, SIGNAL (clicked()), SLOT(onPublishShape()));
|
||||
connect(myCompDlg->myBadMeshBtn, SIGNAL (clicked()), SLOT(onShowBadMesh()));
|
||||
connect(myCompDlg->myShowBtn, SIGNAL (clicked()), SLOT(onPreviewShape()));
|
||||
connect(myCompDlg->myPublishBtn, SIGNAL (clicked()), SLOT(onPublishShape()));
|
||||
connect(myCompDlg->myBadMeshBtn, SIGNAL (clicked()), SLOT(onShowBadMesh()));
|
||||
connect(myCompDlg->myBadMeshToGroupBtn, SIGNAL (clicked()), SLOT(onGroupOfBadMesh()));
|
||||
|
||||
QTableWidget* aTable = me->table();
|
||||
connect(aTable, SIGNAL(itemSelectionChanged()), SLOT(currentCellChanged()));
|
||||
|
@ -99,6 +99,7 @@ protected slots:
|
||||
void onPreviewShape();
|
||||
void onPublishShape();
|
||||
void onShowBadMesh();
|
||||
void onGroupOfBadMesh();
|
||||
void currentCellChanged();
|
||||
|
||||
private:
|
||||
@ -226,6 +227,7 @@ protected:
|
||||
QPushButton* myShowBtn;
|
||||
QPushButton* myPublishBtn;
|
||||
QPushButton* myBadMeshBtn;
|
||||
QPushButton* myBadMeshToGroupBtn;
|
||||
|
||||
SMESHGUI_MeshInfosBox* myBriefInfo;
|
||||
SMESHGUI_MeshInfosBox* myFullInfo;
|
||||
|
@ -4604,6 +4604,10 @@ Please, create VTK viewer and try again</translation>
|
||||
<source>SHOW_BAD_MESH</source>
|
||||
<translation>Show bad Mesh</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GROUP_OF_BAD_MESH</source>
|
||||
<translation>Bad Mesh to Group</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_PrecomputeDlg</name>
|
||||
@ -5496,15 +5500,15 @@ Please enter correct value and try again</translation>
|
||||
<translation>OCTA12</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ENTITY_TYPE_21</source>
|
||||
<source>ENTITY_TYPE_22</source>
|
||||
<translation>POLYEDRE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ENTITY_TYPE_22</source>
|
||||
<source>ENTITY_TYPE_23</source>
|
||||
<translation>QPOLYEDRE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ENTITY_TYPE_23</source>
|
||||
<source>ENTITY_TYPE_24</source>
|
||||
<translation>BALL</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
Loading…
Reference in New Issue
Block a user