0022107: EDF 2502 SMESH: Publish the result of show bad mesh in a group

This commit is contained in:
eap 2013-05-21 09:09:04 +00:00
parent f70691d5a4
commit 88068fce89
8 changed files with 110 additions and 37 deletions

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

View File

@ -22,8 +22,10 @@ written in Python.
<li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create <li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
Mesh"</em> button in the toolbar. Mesh"</em> button in the toolbar.
<center>
\image html image32.png \image html image32.png
<em>"Create Mesh" button</em> <em>"Create Mesh" button</em>
</center>
The following dialog box will appear: 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 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). field (if the name of the object has not yet appeared in \b Geometry field).
<center>
\image html image120.png \image html image120.png
<em>"Select" button</em> <em>"Select" button</em>
</center>
Now you can define 3D Algorithm and 3D Hypotheses, which will be Now you can define 3D Algorithm and 3D Hypotheses, which will be
applied to the solids of your geometrical object. Click the <em>"Add applied to the solids of your geometrical object. Click the <em>"Add
Hypothesis"</em> button to add a hypothesis. Hypothesis"</em> button to add a hypothesis.
<center>
\image html image121.png \image html image121.png
<em>"Add Hypothesis" button</em> <em>"Add Hypothesis" button</em>
</center>
Click the <em>"Edit Hypothesis"</em> button to change the values for the Click the <em>"Edit Hypothesis"</em> button to change the values for the
current hypothesis. current hypothesis.
<center>
\image html image122.png \image html image122.png
<em>"Edit Hypothesis" button</em> <em>"Edit Hypothesis" button</em>
</center>
Most standard 2D and 3D algorithms can work without hypotheses Most standard 2D and 3D algorithms can work without hypotheses
using some default parameters. The use of additional hypotheses using some default parameters. The use of additional hypotheses
@ -90,7 +98,8 @@ written in Python.
the higher dimension algorithm. the higher dimension algorithm.
Some algorithms generate mesh of several dimensions, while others 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 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, 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 which is a 2D object, you do not need to define a 3D Algorithm and
@ -99,7 +108,9 @@ written in Python.
In the <b>Object Browser</b> the structure of the new mesh will be In the <b>Object Browser</b> the structure of the new mesh will be
displayed as follows: displayed as follows:
<center>
\image html image88.jpg \image html image88.jpg
</center>
It contains: It contains:
<ul> <ul>
@ -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 select \b Preview or click "Preview" button in the toolbar or activate
"Preview" item from the pop-up menu. "Preview" item from the pop-up menu.
<center>
\image html mesh_precompute.png \image html mesh_precompute.png
<em>"Preview" button</em> <em>"Preview" button</em>
</center>
Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog. 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 the <b>Object Browser</b>. From the \b Mesh menu select \b Compute or
click "Compute" button of the toolbar. click "Compute" button of the toolbar.
<center>
\image html image28.png \image html image28.png
<em>"Compute" button</em> <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 \image html meshcomputationsucceed.png
If the mesh computation failed, the information about the cause of the 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 \image html meshcomputationfail.png
After you select the error, <b>Show Sub-shape</b> button allows 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 \image html failed_computation.png
<em>3D algorithm failed to compute mesh on a box shown using <b>Show <em>3D algorithm failed to compute mesh on a box shown using <b>Show
Sub-shape</b> button</em> 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 <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 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 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 switching the mesh to Wireframe visualization mode or switching off
the visualization of faces and volumes (if any). 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 \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> 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> <br><br>
\anchor use_existing_anchor \anchor use_existing_anchor
@ -320,13 +340,13 @@ this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
existing faces</b>. existing faces</b>.
For example, you want to use standard algorithms to generate 1D and 3D 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 meshes and to create 2D mesh by your python code. Then you
<ul> <ol>
<li> create a mesh object, assign a 1D algorithm,</li> <li> create a mesh object, assign an 1D algorithm,</li>
<li> invoke \b Compute command, which computes a 1D mesh,</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> assign <b>Use existing faces</b> and a 3D algorithm,</li>
<li> run your python code, which creates a 2D mesh,</li> <li> run your python code, which creates a 2D mesh,</li>
<li> invoke \b Compute command, which computes a 3D mesh.</li> <li> invoke \b Compute command, which computes a 3D mesh.</li>
</ul> </ol>
Consider trying a sample script demonstrating the usage of Consider trying a sample script demonstrating the usage of
\ref tui_use_existing_faces "Use existing faces" algorithm for \ref tui_use_existing_faces "Use existing faces" algorithm for

View File

@ -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 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. \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> <b>Salome initialisation must always be done as shown below</b>
\n (<em>salome_init()</em> can be invoked safely several times): \n (<em>salome_init()</em> can be invoked safely several times):

View File

@ -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 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 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 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. meshes. It can be used to create an empty mesh or to import mesh from the data file.

View File

@ -61,6 +61,8 @@
#include <SALOMEDSClient_SObject.hxx> #include <SALOMEDSClient_SObject.hxx>
#include <SALOMEDS_wrap.hxx> #include <SALOMEDS_wrap.hxx>
#include CORBA_SERVER_HEADER(SMESH_Group)
// OCCT includes // OCCT includes
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
#include <TopExp.hxx> #include <TopExp.hxx>
@ -460,9 +462,11 @@ namespace SMESH
foreach( range, selRanges ) foreach( range, selRanges )
{ {
for ( int row = range.topRow(); row <= range.bottomRow(); ++row ) for ( int row = range.topRow(); row <= range.bottomRow(); ++row )
if ( !rows.count( row ))
rows.append( row ); rows.append( row );
} }
if ( rows.isEmpty() && table->currentRow() > -1 ) if ( rows.isEmpty() && table->currentRow() > -1 )
if ( !rows.count( table->currentRow() ))
rows.append( table->currentRow() ); rows.append( table->currentRow() );
return rows.count(); return rows.count();
@ -553,6 +557,7 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent, bool ForEval)
myShowBtn = new QPushButton(tr("SHOW_SHAPE"), myCompErrorGroup); myShowBtn = new QPushButton(tr("SHOW_SHAPE"), myCompErrorGroup);
myPublishBtn = new QPushButton(tr("PUBLISH_SHAPE"), myCompErrorGroup); myPublishBtn = new QPushButton(tr("PUBLISH_SHAPE"), myCompErrorGroup);
myBadMeshBtn = new QPushButton(tr("SHOW_BAD_MESH"), myCompErrorGroup); myBadMeshBtn = new QPushButton(tr("SHOW_BAD_MESH"), myCompErrorGroup);
myBadMeshToGroupBtn = new QPushButton(tr("GROUP_OF_BAD_MESH"), myCompErrorGroup);
//myTable->setReadOnly( true ); // VSR: check //myTable->setReadOnly( true ); // VSR: check
myTable->setEditTriggers( QAbstractItemView::NoEditTriggers ); myTable->setEditTriggers( QAbstractItemView::NoEditTriggers );
@ -582,6 +587,7 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent, bool ForEval)
grpLayout->addWidget( myShowBtn, 2, 0 ); grpLayout->addWidget( myShowBtn, 2, 0 );
grpLayout->addWidget( myPublishBtn, 2, 1 ); grpLayout->addWidget( myPublishBtn, 2, 1 );
grpLayout->addWidget( myBadMeshBtn, 2, 2 ); grpLayout->addWidget( myBadMeshBtn, 2, 2 );
grpLayout->addWidget( myBadMeshToGroupBtn, 2, 3 );
grpLayout->setColumnStretch( 3, 1 ); grpLayout->setColumnStretch( 3, 1 );
// Hypothesis definition errors // Hypothesis definition errors
@ -1068,11 +1074,14 @@ void SMESHGUI_BaseComputeOp::showComputeResult( const bool theMemoryLack,
tbl->resizeColumnToContents( COL_SHAPE ); tbl->resizeColumnToContents( COL_SHAPE );
tbl->setWordWrap( true ); tbl->setWordWrap( true );
if ( hasBadMesh ) if ( hasBadMesh ) {
aCompDlg->myBadMeshBtn->show(); aCompDlg->myBadMeshBtn->show();
else aCompDlg->myBadMeshToGroupBtn->show();
}
else {
aCompDlg->myBadMeshBtn->hide(); aCompDlg->myBadMeshBtn->hide();
aCompDlg->myBadMeshToGroupBtn->hide();
}
tbl->setCurrentCell(0,0); tbl->setCurrentCell(0,0);
currentCellChanged(); // to update buttons 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 * \brief SLOT called when a selected cell in table() changed
@ -1290,6 +1336,7 @@ SMESHGUI_ComputeDlg* SMESHGUI_BaseComputeOp::computeDlg() const
connect(myCompDlg->myShowBtn, SIGNAL (clicked()), SLOT(onPreviewShape())); connect(myCompDlg->myShowBtn, SIGNAL (clicked()), SLOT(onPreviewShape()));
connect(myCompDlg->myPublishBtn, SIGNAL (clicked()), SLOT(onPublishShape())); connect(myCompDlg->myPublishBtn, SIGNAL (clicked()), SLOT(onPublishShape()));
connect(myCompDlg->myBadMeshBtn, SIGNAL (clicked()), SLOT(onShowBadMesh())); connect(myCompDlg->myBadMeshBtn, SIGNAL (clicked()), SLOT(onShowBadMesh()));
connect(myCompDlg->myBadMeshToGroupBtn, SIGNAL (clicked()), SLOT(onGroupOfBadMesh()));
QTableWidget* aTable = me->table(); QTableWidget* aTable = me->table();
connect(aTable, SIGNAL(itemSelectionChanged()), SLOT(currentCellChanged())); connect(aTable, SIGNAL(itemSelectionChanged()), SLOT(currentCellChanged()));

View File

@ -99,6 +99,7 @@ protected slots:
void onPreviewShape(); void onPreviewShape();
void onPublishShape(); void onPublishShape();
void onShowBadMesh(); void onShowBadMesh();
void onGroupOfBadMesh();
void currentCellChanged(); void currentCellChanged();
private: private:
@ -226,6 +227,7 @@ protected:
QPushButton* myShowBtn; QPushButton* myShowBtn;
QPushButton* myPublishBtn; QPushButton* myPublishBtn;
QPushButton* myBadMeshBtn; QPushButton* myBadMeshBtn;
QPushButton* myBadMeshToGroupBtn;
SMESHGUI_MeshInfosBox* myBriefInfo; SMESHGUI_MeshInfosBox* myBriefInfo;
SMESHGUI_MeshInfosBox* myFullInfo; SMESHGUI_MeshInfosBox* myFullInfo;

View File

@ -4604,6 +4604,10 @@ Please, create VTK viewer and try again</translation>
<source>SHOW_BAD_MESH</source> <source>SHOW_BAD_MESH</source>
<translation>Show bad Mesh</translation> <translation>Show bad Mesh</translation>
</message> </message>
<message>
<source>GROUP_OF_BAD_MESH</source>
<translation>Bad Mesh to Group</translation>
</message>
</context> </context>
<context> <context>
<name>SMESHGUI_PrecomputeDlg</name> <name>SMESHGUI_PrecomputeDlg</name>
@ -5496,15 +5500,15 @@ Please enter correct value and try again</translation>
<translation>OCTA12</translation> <translation>OCTA12</translation>
</message> </message>
<message> <message>
<source>ENTITY_TYPE_21</source> <source>ENTITY_TYPE_22</source>
<translation>POLYEDRE</translation> <translation>POLYEDRE</translation>
</message> </message>
<message> <message>
<source>ENTITY_TYPE_22</source> <source>ENTITY_TYPE_23</source>
<translation>QPOLYEDRE</translation> <translation>QPOLYEDRE</translation>
</message> </message>
<message> <message>
<source>ENTITY_TYPE_23</source> <source>ENTITY_TYPE_24</source>
<translation>BALL</translation> <translation>BALL</translation>
</message> </message>
<message> <message>