Salome HOME
23627. Update documentation of added parameters.
authoreap <eap@opencascade.com>
Tue, 5 Feb 2019 16:57:10 +0000 (19:57 +0300)
committereap <eap@opencascade.com>
Tue, 5 Feb 2019 16:57:10 +0000 (19:57 +0300)
doc/salome/gui/NETGENPLUGIN/images/netgen2d3d.png
doc/salome/gui/NETGENPLUGIN/images/netgen2d3d_only.png [deleted file]
doc/salome/gui/NETGENPLUGIN/images/netgen2d_remesher.png
doc/salome/gui/NETGENPLUGIN/images/netgen_advanced.png [new file with mode: 0644]
doc/salome/gui/NETGENPLUGIN/input/netgen_2d_3d_hypo.doc
src/GUI/NETGENPluginGUI_HypothesisCreator.cxx
src/NETGENPlugin/NETGENPlugin_Mesher.cxx

index 17f9d55b910afb8170c2175ee1990f871d7d7076..5cf924b404d696d8d89bd562505575f192b7f7a8 100644 (file)
Binary files a/doc/salome/gui/NETGENPLUGIN/images/netgen2d3d.png and b/doc/salome/gui/NETGENPLUGIN/images/netgen2d3d.png differ
diff --git a/doc/salome/gui/NETGENPLUGIN/images/netgen2d3d_only.png b/doc/salome/gui/NETGENPLUGIN/images/netgen2d3d_only.png
deleted file mode 100644 (file)
index f0abed3..0000000
Binary files a/doc/salome/gui/NETGENPLUGIN/images/netgen2d3d_only.png and /dev/null differ
index 67eef4f60bd29d7033584f32007f931a6d0c99a8..7836ad7d0e4e2f58cab1f5e0488b21d268c9fd2f 100644 (file)
Binary files a/doc/salome/gui/NETGENPLUGIN/images/netgen2d_remesher.png and b/doc/salome/gui/NETGENPLUGIN/images/netgen2d_remesher.png differ
diff --git a/doc/salome/gui/NETGENPLUGIN/images/netgen_advanced.png b/doc/salome/gui/NETGENPLUGIN/images/netgen_advanced.png
new file mode 100644 (file)
index 0000000..93219c5
Binary files /dev/null and b/doc/salome/gui/NETGENPLUGIN/images/netgen_advanced.png differ
index 9e34081af86b92f6b12c8603fec293ed44e457fb..ddd1e447ea73e7f5daee1967204c6c7c6e25ce86 100644 (file)
@@ -2,33 +2,43 @@
 
 \page netgen_2d_3d_hypo_page NETGEN 2D and 3D hypotheses
 
-<b>NETGEN 2D Parameters</b> and <b>NETGEN 3D  Parameters</b> hypotheses work only with
-<b>NETGEN 1D-2D</b>, <b>NETGEN 2D</b>, <b>NETGEN 1D-2D-3D</b> and
-<b>NETGEN 3D</b> algorithms. <b>NETGEN 1D-2D</b> and <b>NETGEN
-1D-2D-3D</b>  algorithms do not require definition of lower-level
-hypotheses and algorithms (2D and 1D for meshing 3D objects and 1D for
-meshing 2D objects).
+<b>NETGEN 2D Parameters</b> and <b>NETGEN 3D Parameters</b>
+hypotheses work only with NETGEN algorithm in it's different forms:
+- <b>NETGEN 1D-2D</b>
+- <b>NETGEN 2D</b>
+- <b>NETGEN 1D-2D-3D</b>
+- <b>NETGEN 3D</b>. 
 
-\image html netgen2d3d.png
-<center><em>Hypothesis dialog boxes of <b>NETGEN 1D-2D</b> and <b>NETGEN
-      1D-2D-3D</b> algorithms are same</em></center>
-<br>
+<b>NETGEN 1D-2D</b> and <b>NETGEN 1D-2D-3D</b>  algorithms do not
+ require definition of lower-level hypotheses and algorithms (2D and
+ 1D for meshing 3D objects and 1D for meshing 2D objects).
 
-\image html netgen2d3d_only.png
-<center><em>Dialog boxes of <b>NETGEN 2D</b> and <b>NETGEN 3D</b>
-    algorithms </em></center>
-<br>
-\image html netgen2d_remesher.png
-<center><em>Hypothesis dialog box of <b>NETGEN 2D</b> remesher algorithms</em></center>
+<b>NETGEN 1D-2D-3D</b> algorithm has maximal number of options. The
+rest forms have less options as they construct elements of less number
+of dimensions. All options are distributed among following tabs:
+- \ref arguments_anchor "Arguments" - basic options.
+- \ref local_sizes_anchor "Local Sizes" - local element size.
+- \ref advanced_anchor "Advanced" - advanced options.
+- \ref stl_anchor "STL" - specific Remesher options.
+
+\ref simple_anchor "NETGEN 2D/3D simple parameters" hypotheses allow
+defining the size of elements for each dimension separately.
 
 
+\anchor arguments_anchor
+<h2> Arguments tab</h2> 
+
+<b>Arguments</b> tab defines basic mesh parameters.
+
+\image html netgen2d3d.png
+<center><em>Main tab of hypothesis dialog box <b>NETGEN 1D-2D-3D</b> algorithm</em></center>
+<br>
+
 - <b>Name</b> - allows to define the name for the algorithm (NETGEN
 2D (or 3D) Parameters by default).
 - <b>Max Size</b> - maximum linear dimensions for mesh cells.
 - <b>Min Size</b> - minimum linear dimensions for mesh cells. It is
 ignored if it is more than <b>Max Size</b>.
-- <b>Second Order</b> - if this box is checked in, the algorithm will
-create second order mesh.
 - <b>Fineness</b> - ranging from <em>Very Coarse</em> to <em>Very Fine</em>
 allows to set the level of meshing detalization using the three
 parameters below. You can select \a Custom to define them manually.
@@ -56,23 +66,33 @@ number of segments on straight edges is defined by values of
 into account.) If this box is not checked in, then size of elements is
 defined by three parameters only:
 <b>Max Size</b>, <b>Min Size</b> and <b>Growth rate</b>.
-- <b>Allow Quadrangles</b> - if this box is checked in, the mesher
+- <b>Quad-dominated</b> - if this box is checked in, the mesher
 tries to generate quadrangle 2D mesh. Triangle elements are created
 where quadrangles are not possible.
+- <b>Second Order</b> - if this box is checked in, the algorithm will
+create second order mesh.
 - <b>Optimize</b> - if this box is checked in, the algorithm will modify
 initially created mesh in order to improve quality of elements. Optimization
-process is rather time consuming comparing to creation of initial mesh.
-- <b>Fuse Coincident Nodes on Edges and Vertices</b> - allows merging
-mesh nodes on vertices and edges which are geometrically coincident
-but are topologically different.
-- <b>Ridge angle</b> - allows to define minimum angle in degrees between
-normals of adjacent triangles at which the remesher (Netgen 2D working
-w/o geometry) considers the edge between these triangles as a feature edge.
+process is rather time consuming comparing to creation of initial
+mesh.
+
+Remesher has two additional basic options:
+- <b>Keep existing edges</b> - if activated, all edges present in the
+initial mesh are kept and used to separate STL surfaces.
+- <b>Create groups of surfaces </b> if activated, all new surface
+elements are distributed among groups corresponding to STL surfaces
+the Remesher detects.
+
+
+\anchor local_sizes_anchor
+<h2> Local sizes tab</h2> 
+
+<b>Local sizes</b> tab allows to define size of elements on and
+around specified geometrical objects. 
 
 \image html netgen3d_local_size.png
 
-- <b>Local sizes</b> - allows to define size of elements on and
-around specified geometrical objects. To define the local
+- To define the local
 size it is necessary to select a geometrical objects in the
 object browser or in the viewer, and to click a button corresponding
 to the type of the geometrical objects: <b>On Vertex</b>, <b>On
@@ -103,12 +123,75 @@ section.<br>
 25, 0) and (25, 25, 200) size of elements should be 0.3.
 
 
-\image html netgen2d3d_simple.png
+
+\anchor advanced_anchor 
+<h2> Advanced tab</h2> 
+
+<b>Advanced</b> tab allows advance controlling meshing algorithm.
+
+\image html netgen_advanced.png
+
+- <b>Element size weight</b> - weight of triangle size badness with respect to
+triangle shape badness. Total triangle badness is evaluated as <em>
+  shape_badness + size_weight * size_mismatch</em>.
+- <b>Nb. surface optimization steps</b> - number of loops when optimizing surface mesh.
+- <b>Nb. volume optimization steps</b> - number of loops when optimizing volume mesh.
+- <b>Worst element measure</b> - power of error, used to approximate max error optimization.
+- <b>Use Delaunay</b> - if activated, use Delaunay approach to
+construct volume elements, otherwise use Advancing front method.
+- <b>Check overlapping</b> - check overlapping surfaces during surface meshing.
+- <b>Check chart boundary</b> - to check chart boundary.
+- <b>Fuse Coincident Nodes on Edges and Vertices</b> - allows merging
+mesh nodes on vertices and edges which are geometrically coincident
+but are topologically different.
+
+
+
+\anchor stl_anchor
+<h2> STL tab</h2> 
+
+<b> STL </b> tab holds option of Remesher (NETGEN 2D working w/o geometry).
+
+\image html netgen2d_remesher.png
+<center><em>Options specific to <b>NETGEN 2D</b> remesher algorithms</em></center>
+
+
+- <b>Ridge angle</b> - defines minimum angle in degrees between
+normals of adjacent triangles at which the remesher considers the edge
+between these triangles as a feature edge. Feature edges bound charts
+of triangles that are re-meshed as separate surfaces.
+- <b> Edge corner angle </b> - defines minimum angle in degrees
+between adjacent edges of chart boundary, above which a point shared
+by the edges is considered as an end point of chart boundary curve.
+- <b> Chart angle </b> - angle between normals of adjacent triangles 
+under which a shared sharp edge is <em>not</em> considered as chart boundary,
+provided that this edge is not classified as chart boundary due
+to <b>Ridge angle</b> and <b>Keep existing edges</b> options.
+- <b> Outer chart angle </b> - angle for overlapping parts of chart.
+- <b> Chart distance </b> - defines a factor used to limit element
+size by distance to neighbor chart.
+- <b> Line length </b> - defines a factor used to limit size
+of elements located near ends of chart boundary curves by length of a
+chart boundary curve.
+- <b> Close edges </b> - defines a factor used to limit size
+of elements located near chart boundary curves by distance to other
+chart boundary curves.
+- <b> Surface curvature </b> - defines a factor used to limit size
+of elements by surface curvature.
+- <b> Edge angle </b> - defines a factor used to limit size
+of elements by chart boundary curve curvature.
+- <b> Surface mesh curvature</b> - defines a number of elements per
+curvature radius.
+
+\anchor simple_anchor
+<h2> NETGEN 2D/3D simple parameters</h2> 
 
 <b>NETGEN 2D simple parameters</b> and <b>NETGEN 3D simple
-parameters</b> allow defining the size of elements for each
+parameters</b> hypotheses allow defining the size of elements for each
 dimension.
 
+\image html netgen2d3d_simple.png
+
 \b 1D group allows defining the size of 1D elements in either of two ways: 
 - <b>Number of Segments</b> allows specifying number of segments, that
 will split each edge, with equidistant distribution.
index 0847703617e7862e3bab40d264251444220a4f76..6dce1032bc6f1ea5d38b61cf9ab00aebbae7b14f 100644 (file)
@@ -478,15 +478,16 @@ QFrame* NETGENPluginGUI_HypothesisCreator::buildFrame()
     optLayout->setSpacing( 6 );
 
     int row = 0;
-    optLayout->addWidget( new QLabel( tr( "NETGEN_ELEM_SIZE_WEIGHT" ), optBox ), row, 0 );
-    myElemSizeWeight = new SMESHGUI_SpinBox( optBox );
-    myElemSizeWeight->RangeStepAndValidator( 0., 1., 0.1, "parametric_precision" );
-    optLayout->addWidget( myElemSizeWeight, row, 1 );
-    row++;
-
+    myElemSizeWeight = 0;
     myNbSurfOptSteps = 0;
-    if ( myIs2D || !myIsONLY )
+    if ( myIs2D || !myIsONLY ) // 2D options
     {
+      optLayout->addWidget( new QLabel( tr( "NETGEN_ELEM_SIZE_WEIGHT" ), optBox ), row, 0 );
+      myElemSizeWeight = new SMESHGUI_SpinBox( optBox );
+      myElemSizeWeight->RangeStepAndValidator( 0., 1., 0.1, "parametric_precision" );
+      optLayout->addWidget( myElemSizeWeight, row, 1 );
+      row++;
+
       optLayout->addWidget( new QLabel( tr( "NETGEN_NB_SURF_OPT_STEPS" ), optBox ), row, 0 );
       myNbSurfOptSteps = new SalomeApp_IntSpinBox( optBox );
       myNbSurfOptSteps->setMinimum( 0 );
@@ -515,24 +516,37 @@ QFrame* NETGENPluginGUI_HypothesisCreator::buildFrame()
     insLayout->setSpacing( 6 );
 
     int row = 0;
-    insLayout->addWidget( new QLabel( tr( "NETGEN_WORST_ELEM_MEASURE" ), insGroup ), row, 0 );
-    myWorstElemMeasure = new SalomeApp_IntSpinBox( insGroup );
-    myWorstElemMeasure->setMinimum( 1 );
-    myWorstElemMeasure->setMaximum( 10 );
-    insLayout->addWidget( myWorstElemMeasure, row, 1, 1, 2 );
-    row++;
+    myWorstElemMeasure = 0;
+    myUseDelauney = 0;
+    if ( !myIs2D )
+    {
+      insLayout->addWidget( new QLabel( tr( "NETGEN_WORST_ELEM_MEASURE" ), insGroup ), row, 0 );
+      myWorstElemMeasure = new SalomeApp_IntSpinBox( insGroup );
+      myWorstElemMeasure->setMinimum( 1 );
+      myWorstElemMeasure->setMaximum( 10 );
+      insLayout->addWidget( myWorstElemMeasure, row, 1, 1, 2 );
+      row++;
 
-    myUseDelauney = new QCheckBox( tr( "NETGEN_USE_DELAUNEY" ), insGroup );
-    insLayout->addWidget( myUseDelauney, row, 0, 1, 2 );
-    row++;
+      myUseDelauney = new QCheckBox( tr( "NETGEN_USE_DELAUNEY" ), insGroup );
+      insLayout->addWidget( myUseDelauney, row, 0, 1, 2 );
+      row++;
+    }
 
-    myCheckOverlapping = new QCheckBox( tr( "NETGEN_CHECK_OVERLAPPING" ), insGroup );
-    insLayout->addWidget( myCheckOverlapping, row, 0, 1, 2 );
-    row++;
+    myCheckOverlapping = 0;
+    if ( myIs2D || !myIsONLY ) // 2D options
+    {
+      myCheckOverlapping = new QCheckBox( tr( "NETGEN_CHECK_OVERLAPPING" ), insGroup );
+      insLayout->addWidget( myCheckOverlapping, row, 0, 1, 2 );
+      row++;
+    }
 
-    myCheckChartBoundary = new QCheckBox( tr( "NETGEN_CHECK_CHART_BOUNDARY" ), insGroup );
-    insLayout->addWidget( myCheckChartBoundary, row, 0, 1, 2 );
-    row++;
+    myCheckChartBoundary = 0;
+    if ( isRemesher )
+    {
+      myCheckChartBoundary = new QCheckBox( tr( "NETGEN_CHECK_CHART_BOUNDARY" ), insGroup );
+      insLayout->addWidget( myCheckChartBoundary, row, 0, 1, 2 );
+      row++;
+    }
 
     myFuseEdges = 0;
     if ( !myIsONLY && !isRemesher )
@@ -590,9 +604,12 @@ void NETGENPluginGUI_HypothesisCreator::retrieveParams() const
   if (myFuseEdges)
     myFuseEdges->setChecked( data.myFuseEdges );
   setTextOrVar( myWorstElemMeasure, data.myWorstElemMeasure, data.myWorstElemMeasureVar );
-  myUseDelauney->setChecked( data.myUseDelauney );
-  myCheckOverlapping->setChecked( data.myCheckOverlapping );
-  myCheckChartBoundary->setChecked( data.myCheckChartBoundary );
+  if ( myUseDelauney )
+    myUseDelauney->setChecked( data.myUseDelauney );
+  if ( myCheckOverlapping )
+    myCheckOverlapping->setChecked( data.myCheckOverlapping );
+  if ( myCheckChartBoundary )
+    myCheckChartBoundary->setChecked( data.myCheckChartBoundary );
 
   if ( myRidgeAngle )
   {
@@ -824,9 +841,9 @@ bool NETGENPluginGUI_HypothesisCreator::storeParamsToHypo( const NetgenHypothesi
     h->SetVarParameter    ( h_data.myWorstElemMeasureVar.toLatin1().constData(), "SetWorstElemMeasure");
     h->SetWorstElemMeasure( h_data.myWorstElemMeasure );
 
-    h->SetUseDelauney( myUseDelauney );
-    h->SetCheckOverlapping( myCheckOverlapping );
-    h->SetCheckChartBoundary( myCheckChartBoundary );
+    h->SetUseDelauney( h_data.myUseDelauney );
+    h->SetCheckOverlapping( h_data.myCheckOverlapping );
+    h->SetCheckChartBoundary( h_data.myCheckChartBoundary );
     
     //if ( myIs2D )
     {
@@ -938,8 +955,11 @@ bool NETGENPluginGUI_HypothesisCreator::readParamsFromWidgets( NetgenHypothesisD
   if ( myFuseEdges )
     h_data.myFuseEdges = myFuseEdges->isChecked();
 
-  h_data.myElemSizeWeight    = myElemSizeWeight->value();
-  h_data.myElemSizeWeightVar = myElemSizeWeight->text();
+  if ( myElemSizeWeight )
+  {
+    h_data.myElemSizeWeight    = myElemSizeWeight->value();
+    h_data.myElemSizeWeightVar = myElemSizeWeight->text();
+  }
   if ( myNbSurfOptSteps )
   {
     h_data.myNbSurfOptSteps    = myNbSurfOptSteps->value();
@@ -950,12 +970,19 @@ bool NETGENPluginGUI_HypothesisCreator::readParamsFromWidgets( NetgenHypothesisD
     h_data.myNbVolOptSteps    = myNbVolOptSteps->value();
     h_data.myNbVolOptStepsVar = myNbVolOptSteps->text();
   }
-  h_data.myWorstElemMeasure    = myWorstElemMeasure->value();
-  h_data.myWorstElemMeasureVar = myWorstElemMeasure->text();
+  if ( myWorstElemMeasure )
+  {
+    h_data.myWorstElemMeasure    = myWorstElemMeasure->value();
+    h_data.myWorstElemMeasureVar = myWorstElemMeasure->text();
+  }
+  if ( myUseDelauney )
+    h_data.myUseDelauney        = myUseDelauney->isChecked();
+
+  if ( myCheckOverlapping )
+    h_data.myCheckOverlapping   = myCheckOverlapping->isChecked();
 
-  h_data.myUseDelauney        = myUseDelauney->isChecked();
-  h_data.myCheckOverlapping   = myCheckOverlapping->isChecked();
-  h_data.myCheckChartBoundary = myCheckChartBoundary->isChecked();
+  if ( myCheckChartBoundary )
+    h_data.myCheckChartBoundary = myCheckChartBoundary->isChecked();
 
   if ( myRidgeAngle )
   {
index d1b32d9835cb37fa7296e5ec756027a86e0bd8cf..8d0e2ad83f0ebc84398afbf632ed09d7e4a4450e 100644 (file)
@@ -299,8 +299,8 @@ void NETGENPlugin_Mesher::SetParameters(const NETGENPlugin_Hypothesis* hyp)
     mparams.uselocalh          = hyp->GetSurfaceCurvature();
     netgen::merge_solids       = hyp->GetFuseEdges();
     _chordalError              = hyp->GetChordalErrorEnabled() ? hyp->GetChordalError() : -1.;
-    mparams.optsteps2d         = hyp->GetNbSurfOptSteps();
-    mparams.optsteps3d         = hyp->GetNbVolOptSteps();
+    mparams.optsteps2d         = _optimize ? hyp->GetNbSurfOptSteps() : 0;
+    mparams.optsteps3d         = _optimize ? hyp->GetNbVolOptSteps()  : 0;
     mparams.elsizeweight       = hyp->GetElemSizeWeight();
     mparams.opterrpow          = hyp->GetWorstElemMeasure();
     mparams.delaunay           = hyp->GetUseDelauney();