From dd0d39d752a4d5ba58ed2e417651093764bb8d09 Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 3 Oct 2016 17:53:47 +0300 Subject: [PATCH] 23352: [CEA] Order and naming of meshing algorithms --- .../examples/a3DmeshOnModified2Dmesh.py | 2 +- .../examples/defining_hypotheses_ex01.py | 2 +- .../examples/defining_hypotheses_ex02.py | 2 +- .../examples/defining_hypotheses_ex13.py | 2 +- doc/salome/examples/prism_3d_algo.py | 2 +- doc/salome/gui/SMESH/images/pref21.png | Bin 55263 -> 79642 bytes .../gui/SMESH/images/radial_prism_mesh.png | Bin 0 -> 15822 bytes .../gui/SMESH/input/1d_meshing_hypo.doc | 49 ++--- .../gui/SMESH/input/2d_meshing_hypo.doc | 2 +- doc/salome/gui/SMESH/input/about_hypo.doc | 8 +- .../gui/SMESH/input/additional_hypo.doc | 4 +- .../gui/SMESH/input/basic_meshing_algos.doc | 22 +-- .../gui/SMESH/input/constructing_meshes.doc | 11 +- doc/salome/gui/SMESH/input/display_mode.doc | 4 +- .../gui/SMESH/input/double_nodes_control.doc | 5 +- doc/salome/gui/SMESH/input/mesh_infos.doc | 48 +++-- .../gui/SMESH/input/mesh_preferences.doc | 174 ++++++++++-------- doc/salome/gui/SMESH/input/prism_3d_algo.doc | 18 +- doc/salome/gui/SMESH/input/quad_ijk_algo.doc | 4 +- .../gui/SMESH/input/radial_prism_algo.doc | 6 +- .../input/radial_quadrangle_1D2D_algo.doc | 7 +- .../SMESH/input/tui_defining_hypotheses.doc | 18 +- .../gui/SMESH/input/tui_prism_3d_algo.doc | 2 +- .../SMESH/input/viewing_meshes_overview.doc | 66 ++++--- resources/StdMeshers.xml.in | 84 +++++++-- src/SMDS/SMDS_Mesh.cxx | 11 ++ src/SMDS/SMDS_MeshCell.hxx | 2 +- src/SMESHDS/SMESHDS_Mesh.cxx | 2 +- src/SMESHGUI/SMESHGUI.cxx | 25 ++- src/SMESHGUI/SMESHGUI_Hypotheses.cxx | 4 + src/SMESHGUI/SMESHGUI_Hypotheses.h | 11 +- src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx | 89 ++++++++- src/SMESHGUI/SMESHGUI_HypothesesUtils.h | 3 + src/SMESHGUI/SMESHGUI_MeshDlg.cxx | 54 +++++- src/SMESHGUI/SMESHGUI_MeshDlg.h | 2 +- src/SMESHGUI/SMESHGUI_MeshOp.cxx | 38 +++- src/SMESHGUI/SMESHGUI_XmlHandler.cxx | 11 +- src/SMESHGUI/SMESH_msg_en.ts | 44 +++++ src/StdMeshers/StdMeshers_Quadrangle_2D.cxx | 14 +- 39 files changed, 592 insertions(+), 260 deletions(-) mode change 100755 => 100644 doc/salome/gui/SMESH/images/pref21.png create mode 100644 doc/salome/gui/SMESH/images/radial_prism_mesh.png diff --git a/doc/salome/examples/a3DmeshOnModified2Dmesh.py b/doc/salome/examples/a3DmeshOnModified2Dmesh.py index 7fcdcaca8..ecac4870f 100644 --- a/doc/salome/examples/a3DmeshOnModified2Dmesh.py +++ b/doc/salome/examples/a3DmeshOnModified2Dmesh.py @@ -10,7 +10,7 @@ geompy = geomBuilder.New(salome.myStudy) # The requirement is to have a surface mesh on the cube comprised of # triangles of exactly the same size arranged in a grid pattern. # -# To fulfill this requirement we mesh the box using Quadrangle (Mapping) +# To fulfill this requirement we mesh the box using Quadrangle: Mapping # meshing algorithm, split quadrangles into triangles and then generate # tetrahedrons. diff --git a/doc/salome/examples/defining_hypotheses_ex01.py b/doc/salome/examples/defining_hypotheses_ex01.py index 1d5d281c8..c9f02bc12 100644 --- a/doc/salome/examples/defining_hypotheses_ex01.py +++ b/doc/salome/examples/defining_hypotheses_ex01.py @@ -1,4 +1,4 @@ -# Arithmetic 1D and Geometric Progression +# Arithmetic Progression and Geometric Progression import salome salome.salome_init() diff --git a/doc/salome/examples/defining_hypotheses_ex02.py b/doc/salome/examples/defining_hypotheses_ex02.py index 3662d5632..572404569 100644 --- a/doc/salome/examples/defining_hypotheses_ex02.py +++ b/doc/salome/examples/defining_hypotheses_ex02.py @@ -1,4 +1,4 @@ -# Deflection 1D and Number of Segments +# Deflection and Number of Segments import salome salome.salome_init() diff --git a/doc/salome/examples/defining_hypotheses_ex13.py b/doc/salome/examples/defining_hypotheses_ex13.py index e3eeee8f1..339cd200d 100644 --- a/doc/salome/examples/defining_hypotheses_ex13.py +++ b/doc/salome/examples/defining_hypotheses_ex13.py @@ -1,4 +1,4 @@ -# Radial Quadrangle 1D2D example +# Radial Quadrangle 1D-2D example import salome salome.salome_init() diff --git a/doc/salome/examples/prism_3d_algo.py b/doc/salome/examples/prism_3d_algo.py index e51822561..5aa283edf 100644 --- a/doc/salome/examples/prism_3d_algo.py +++ b/doc/salome/examples/prism_3d_algo.py @@ -1,4 +1,4 @@ -# Usage of 3D Extrusion meshing algorithm +# Usage of Extrusion 3D meshing algorithm import salome salome.salome_init() diff --git a/doc/salome/gui/SMESH/images/pref21.png b/doc/salome/gui/SMESH/images/pref21.png old mode 100755 new mode 100644 index 04bacf3939c17977da7724d1323e9d86e19efff5..926c78085b5c7b33de2d1a1bf80981ae001066d3 GIT binary patch literal 79642 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 literal 55263 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

wY#=Yc_LWwYD!zd87B(GC-E0L9v|+IBaB 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 ZNYLicRh23Nj%Da*Y3Tn^sCN6${|9v_Iqv`f diff --git a/doc/salome/gui/SMESH/images/radial_prism_mesh.png b/doc/salome/gui/SMESH/images/radial_prism_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9a986c1f95602ef03b509cbc16ef47bce8a2b5 GIT binary patch literal 15822 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 aHFsw@smf5H;!EO=Y=Dl20lF4tkNJOd!Zr>7 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc index 01deffbcd..c4de6317c 100644 --- a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc +++ b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc @@ -14,25 +14,25 @@ Basic 1D hypothesis specifies:
  • \ref average_length_anchor "Local Length"
  • \ref max_length_anchor "Max Size"
  • -
  • \ref number_of_segments_anchor "Number of segments" with Equidistant distribution
  • +
  • \ref number_of_segments_anchor "Number of Segments" with Equidistant distribution
  • \ref automatic_length_anchor "Automatic Length"
  • Constantly increasing or decreasing length of segments:
      -
    • \ref arithmetic_1d_anchor "Arithmetic 1D"
    • +
    • \ref arithmetic_1d_anchor "Arithmetic Progression"
    • \ref geometric_1d_anchor "Geometric Progression"
    • \ref start_and_end_length_anchor "Start and end length"
    • -
    • \ref number_of_segments_anchor "Number of segments" with Scale distribution
    • +
    • \ref number_of_segments_anchor "Number of Segments" with Scale distribution
  • Distribution depending on curvature:
    • \ref adaptive_1d_anchor "Adaptive"
    • -
    • \ref deflection_1d_anchor "Deflection 1D"
    • +
    • \ref deflection_1d_anchor "Deflection"
  • Arbitrary distribution:
      -
    • \ref fixed_points_1d_anchor "Fixed points 1D"
    • -
    • \ref number_of_segments_anchor "Number of segments" with +
    • \ref fixed_points_1d_anchor "Fixed Points"
    • +
    • \ref number_of_segments_anchor "Number of Segments" with \ref analyticdensity_anchor "Analytic Density Distribution" or Table Density Distribution
  • @@ -54,15 +54,15 @@ creation of narrow 2D elements. - Max size parameter defines the length of segments on straight edges. - \b Deflection parameter gives maximal distance of a segment from a curved edge. -\image html adaptive1d_sample_mesh.png "Adaptive hypothesis and Netgen 2D algorithm - the size of mesh segments reflects the size of geometrical features" +\image html adaptive1d_sample_mesh.png "Adaptive hypothesis and NETGEN 2D algorithm - the size of mesh segments reflects the size of geometrical features" See Also a \ref tui_1d_adaptive "sample TUI Script" that uses Adaptive hypothesis.
    \anchor arithmetic_1d_anchor -

    Arithmetic 1D hypothesis

    +

    Arithmetic Progression hypothesis

    -Arithmetic 1D hypothesis allows to split edges into segments with a +Arithmetic Progression hypothesis allows to split edges into segments with a length that changes in arithmetic progression (Lk = Lk-1 + d) beginning from a given starting length and up to a given end length. @@ -82,10 +82,10 @@ defining Reversed Edges parameter. \image html a-arithmetic1d.png -\image html b-ithmetic1d.png "Arithmetic 1D hypothesis - the size of mesh elements gradually increases" +\image html b-ithmetic1d.png "Arithmetic Progression hypothesis - the size of mesh elements gradually increases" See Also a sample TUI Script of a -\ref tui_1d_arithmetic "Defining Arithmetic 1D and Geometric Progression hypothesis" operation. +\ref tui_1d_arithmetic "Defining Arithmetic Progression and Geometric Progression hypothesis" operation.
    \anchor geometric_1d_anchor @@ -112,13 +112,13 @@ defining Reversed Edges parameter. \image html a-geometric1d.png See Also a sample TUI Script of a -\ref tui_1d_arithmetic "Defining Arithmetic 1D and Geometric Progression hypothesis" operation. +\ref tui_1d_arithmetic "Defining Arithmetic Progression and Geometric Progression hypothesis" operation.
    \anchor deflection_1d_anchor -

    Deflection 1D hypothesis

    +

    Deflection hypothesis

    -Deflection 1D hypothesis can be applied for meshing curvilinear edges +Deflection hypothesis can be applied for meshing curvilinear edges composing your geometrical object. It defines only one parameter: the value of deflection (or chord error). @@ -130,10 +130,10 @@ two nodes should not exceed the value of deflection. \image html a-deflection1d.png -\image html b-flection1d.png "Deflection 1D hypothesis - useful for meshing curvilinear edges" +\image html b-flection1d.png "Deflection hypothesis - useful for meshing curvilinear edges" See Also a sample TUI Script of a -\ref tui_deflection_1d "Defining Deflection 1D hypothesis" operation. +\ref tui_deflection_1d "Defining Deflection hypothesis" operation.
    \anchor average_length_anchor @@ -174,7 +174,7 @@ consists of setting the maximal allowed \b length of segments. Use preestimated length check box lets you use \b length automatically calculated basing on size of your geometrical object, namely as diagonal of bounding box divided by ten. The divider can be -changed via "Ratio Bounding Box Diagonal / Max Size" +changed via \ref diagonal_size_ratio_pref "Ratio Bounding Box Diagonal / Max Size" preference parameter. Use preestimated length check box is enabled only if the geometrical object has been selected before hypothesis definition. @@ -183,11 +183,14 @@ geometrical object has been selected before hypothesis definition.
    \anchor number_of_segments_anchor -

    Number of segments hypothesis

    +

    Number of Segments hypothesis

    -Number of segments hypothesis can be applied for approximating +Number of Segments hypothesis can be applied for approximating edges by a definite number of mesh segments with length depending on -the selected type of distribution of nodes. +the selected type of distribution of nodes. The default number of +segments can be set via +\ref nb_segments_pref "Automatic Parameters / Default Number of Segments" +preference parameter. The direction of the splitting is defined by the orientation of the underlying geometrical edge. Reverse Edges list box allows to @@ -302,9 +305,9 @@ minimum and maximum value of this parameter.
    \anchor fixed_points_1d_anchor -

    Fixed points 1D hypothesis

    +

    Fixed Points hypothesis

    -Fixed points 1D hypothesis allows splitting edges through a +Fixed Points hypothesis allows splitting edges through a set of points parametrized on the edge (from 1 to 0) and a number of segments for each interval limited by the points. @@ -326,7 +329,7 @@ Object Browser. defining Reversed Edges parameter. -\image html mesh_fixedpnt.png "Example of a sub-mesh on the edge built using Fixed points 1D hypothesis" +\image html mesh_fixedpnt.png "Example of a sub-mesh on the edge built using Fixed Points hypothesis" See Also a sample TUI Script of a \ref tui_fixed_points "Defining Fixed Points" hypothesis operation. diff --git a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc index 308a6899a..2005ad8d7 100644 --- a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc +++ b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc @@ -75,7 +75,7 @@ algorithms are available: \image html reduce_three_to_one.png "The fastest transition pattern: 3 to 1" -Base vertex tab allows using Quadrangle (Mapping) +Base vertex tab allows using Quadrangle: Mapping algorithm for meshing of trilateral faces. In this case it is necessary to select the vertex, which will be used as the forth degenerated side of quadrangle. diff --git a/doc/salome/gui/SMESH/input/about_hypo.doc b/doc/salome/gui/SMESH/input/about_hypo.doc index 12f5c02e1..f40555940 100644 --- a/doc/salome/gui/SMESH/input/about_hypo.doc +++ b/doc/salome/gui/SMESH/input/about_hypo.doc @@ -30,16 +30,16 @@ In \b MESH there are the following Basic Hypotheses:
  • \subpage a1d_meshing_hypo_page "1D Hypotheses" (for meshing of edges):
    • -
    • \ref number_of_segments_anchor "Number of segments"
    • +
    • \ref number_of_segments_anchor "Number of Segments"
    • \ref average_length_anchor "Local Length"
    • \ref max_length_anchor "Max Size"
    • \ref adaptive_1d_anchor "Adaptive"
    • -
    • \ref arithmetic_1d_anchor "Arithmetic 1D"
    • +
    • \ref arithmetic_1d_anchor "Arithmetic Progression"
    • \ref geometric_1d_anchor "Geometric Progression"
    • \ref start_and_end_length_anchor "Start and end length"
    • -
    • \ref deflection_1d_anchor "Deflection 1D"
    • +
    • \ref deflection_1d_anchor "Deflection"
    • \ref automatic_length_anchor "Automatic Length"
    • -
    • \ref fixed_points_1d_anchor "Fixed points 1D"
    • +
    • \ref fixed_points_1d_anchor "Fixed points"
  • \subpage a2d_meshing_hypo_page "2D Hypotheses" (for meshing of faces):
    • diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc index cce2613ce..a41cbb40b 100644 --- a/doc/salome/gui/SMESH/input/additional_hypo.doc +++ b/doc/salome/gui/SMESH/input/additional_hypo.doc @@ -170,10 +170,10 @@ for more information about quadratic meshes. This additional hypothesis can be used together with 2D triangulation algorithms. It allows 2D triangulation algorithms to build quadrangular meshes. -Usage of this hypothesis with "Quadrangle (Mapping)" meshing algorithm +Usage of this hypothesis with "Quadrangle: Mapping" meshing algorithm is obsolete since introducing \ref hypo_quad_params_anchor "Quadrangle parameters" hypothesis. -Usage of this hypothesis with "Quadrangle (Mapping)" meshing algorithm +Usage of this hypothesis with "Quadrangle: Mapping" meshing algorithm corresponds to specifying "Quadrangle Preference" transition type of \ref hypo_quad_params_anchor "Quadrangle parameters" hypothesis. \note "Quadrangle Preference" transition type can be used only if the diff --git a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc index b4a99c41f..08841b063 100644 --- a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc +++ b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc @@ -26,9 +26,9 @@ number of mesh segments following an 1D hypothesis.
    • For meshing of 2D entities (faces):
      • -
      • Triangle (Mefisto) meshing algorithm - splits faces +
      • Triangle: Mefisto meshing algorithm - splits faces into triangular elements.
      • -
      • \subpage quad_ijk_algo_page "Quadrangle (Mapping)" meshing +
      • \subpage quad_ijk_algo_page "Quadrangle: Mapping" meshing algorithm - splits faces into quadrangular elements.
      @@ -65,19 +65,17 @@ objects. There is also a number of more specific algorithms:
        -
      • \subpage prism_3d_algo_page "for meshing prismatic 3D shapes with hexahedra and prisms"
      • -
      • \subpage quad_from_ma_algo_page "for quadrangle meshing of faces with sinuous borders and rings"
      • +
      • \subpage prism_3d_algo_page "Extrusion 3D" - for meshing prismatic 3D shapes with hexahedra and prisms.
      • +
      • \subpage quad_from_ma_algo_page "Quadrangle: Medial Axis Projection" - for quadrangle meshing of faces with sinuous borders and rings.
      • Polygon per Face meshing algorithm - generates one mesh face (either a triangle, a quadrangle or a polygon) per a geometrical face using all nodes from the face boundary.
      • -
      • \subpage projection_algos_page "for meshing by projection of another mesh"
      • -
      • \subpage import_algos_page "for meshing by importing elements from another mesh"
      • -
      • \subpage radial_prism_algo_page "for meshing 3D geometrical objects with cavities with hexahedra and prisms"
      • -
      • \subpage radial_quadrangle_1D2D_algo_page "for quadrangle meshing of disks and parts of disks"
      • -
      • \subpage use_existing_page "Use Edges to be Created Manually" and - \ref use_existing_page "Use Faces to be Created Manually" algorithms can be - used to create a 1D or a 2D mesh in a python script.
      • -
      • \subpage segments_around_vertex_algo_page "for defining the length of mesh segments around certain vertices"
      • +
      • \subpage projection_algos_page "Projection algorithms" - for meshing by projection of another mesh.
      • +
      • \subpage import_algos_page "Import algorithms" - for meshing by importing elements from another mesh.
      • +
      • \subpage radial_prism_algo_page "Radial Prism" - for meshing 3D geometrical objects with cavities with hexahedra and prisms.
      • +
      • \subpage radial_quadrangle_1D2D_algo_page "Radial Quadrangle 1D-2D" - for quadrangle meshing of disks and parts of disks.
      • +
      • \subpage use_existing_page "Use Faces/Edges to be Created Manually" - to create a 1D or a 2D mesh in a python script.
      • +
      • \subpage segments_around_vertex_algo_page "Segments around Vertex" - for defining the length of mesh segments around certain vertices.
      \ref constructing_meshes_page "Constructing meshes" page describes in diff --git a/doc/salome/gui/SMESH/input/constructing_meshes.doc b/doc/salome/gui/SMESH/input/constructing_meshes.doc index 3a0490c21..6794b398b 100644 --- a/doc/salome/gui/SMESH/input/constructing_meshes.doc +++ b/doc/salome/gui/SMESH/input/constructing_meshes.doc @@ -316,24 +316,24 @@ There is an example of sub-mesh order modifications taking a Mesh created on a B shape. The main Mesh object:
      • 1D Wire discretisation with Number of Segments=20
      • -
      • 2D Triangle (Mefisto) with HypothesisMax Element Area +
      • 2D Triangle: Mefisto with HypothesisMax Element Area
      The first sub-mesh Submesh_1 created on Face_1 is:
      • 1D Wire discretisation with Number of Segments=4
      • -
      • 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
      • +
      • 2D Triangle: Mefisto with Hypothesis MaxElementArea=1200
      The second sub-mesh Submesh_2 created on Face_2 is:
      • 1D Wire discretisation with Number of Segments=8
      • -
      • 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
      • +
      • 2D Triangle: Mefisto with Hypothesis MaxElementArea=1200
      And the last sub-mesh Submesh_3 created on Face_3 is:
      • 1D Wire discretisation with Number of Segments=12
      • -
      • 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
      • +
      • 2D Triangle: Mefisto with Hypothesis MaxElementArea=1200
      The sub-meshes become concurrent if they share sub-shapes that can be @@ -404,6 +404,7 @@ re-computed and the Mesh Computation information box will be shown with the same contents. (To fully re-compute the mesh, invoke \ref clear_mesh_anchor "Clear Mesh Data" command before). +\anchor meshing_result_anchor If the mesh computation has been a success, the box shows information on the number of entities of different types in the mesh. @@ -448,7 +449,7 @@ to facilitate their analysis. \note Mesh Computation Information box does not appear if you set -"Mesh computation/Show a computation result notification" preference +\ref show_comp_result_pref "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. diff --git a/doc/salome/gui/SMESH/input/display_mode.doc b/doc/salome/gui/SMESH/input/display_mode.doc index 7e748d603..adcd37615 100644 --- a/doc/salome/gui/SMESH/input/display_mode.doc +++ b/doc/salome/gui/SMESH/input/display_mode.doc @@ -2,8 +2,8 @@ \page display_mode_page Display Mode -\n By default your objects are represented as set in -\ref mesh_preferences_page "Preferences". +\n By default your objects are represented as defined in +\ref mesh_tab_preferences "Preferences". \n However, right-clicking on the mesh in the Object Browser, and selecting Display Mode, you can display your mesh as: diff --git a/doc/salome/gui/SMESH/input/double_nodes_control.doc b/doc/salome/gui/SMESH/input/double_nodes_control.doc index 75fd2928b..10fd49a41 100644 --- a/doc/salome/gui/SMESH/input/double_nodes_control.doc +++ b/doc/salome/gui/SMESH/input/double_nodes_control.doc @@ -4,8 +4,9 @@ This mesh quality control highlights the nodes which are coincident with other nodes (within a given tolerance). Distance at which two -nodes are considered coincident is defined by "Quality Controls/Double -nodes tolerance" preference. +nodes are considered coincident is defined by +\ref dbl_nodes_tol_pref "Quality Controls/Double nodes tolerance" +preference. \image html double_nodes.png diff --git a/doc/salome/gui/SMESH/input/mesh_infos.doc b/doc/salome/gui/SMESH/input/mesh_infos.doc index fd09d0d8d..49a5a5ce4 100644 --- a/doc/salome/gui/SMESH/input/mesh_infos.doc +++ b/doc/salome/gui/SMESH/input/mesh_infos.doc @@ -25,6 +25,13 @@ The Mesh Information dialog box provides three tab pages: overall quality information about the selected mesh, sub-mesh or group object. +\anchor dump_mesh_infos +The button \b Dump allows printing the information displayed in the +dialog box to a .txt file. The dialog for choosing a file also allows +to select which tab pages to dump via four check-boxes. The default state +of the check-boxes can be changed via \ref mesh_information_pref "Mesh information" +preferences. + \anchor advanced_mesh_infos_anchor

      Base Information

      @@ -72,10 +79,11 @@ analyze directly in the dialog box or select the node(s) or element(s) in the 3D viewer. \note The information about the groups, to which the node or element belongs, - can be shown in a short or in a detailed form. By default, for performance +can be shown in a short or in a detailed form. By default, for performance reasons, this information is shown in a short form (group names -only). The detailed information on groups can be switched on via the user -preferences, see \ref mesh_preferences_page. +only). The detailed information on groups can be switched on via +\ref group_detail_info_pref "Show details on groups in element information tab" +option of \ref mesh_preferences_page. \anchor mesh_addition_info_anchor

      Additional Information

      @@ -105,6 +113,7 @@ For a sub-mesh object, the following information is shown: "Additional Info" page, sub-mesh information
      +\anchor mesh_addition_info_group_anchor For a group object, the following information is shown: - Name - Parent mesh @@ -122,8 +131,8 @@ For a group object, the following information is shown: computed only by demand. For this, the user should press the "Compute" button (see picture). Also, the number of underlying nodes is automatically calculated if the size of the group does not exceed -the "Automatic nodes compute limit" set via the "Mesh information" -preferences (zero value means no limit). +the \ref nb_nodes_limit_pref "Automatic nodes compute limit" +preference value (zero value means no limit). \anchor mesh_quality_info_anchor

      Quality Information

      @@ -148,19 +157,22 @@ The Quality Info tab provides overall information about mesh quality cont
      \image html ctrlinfo.png "Quality Info" page
      -\note It is possible to set "Double nodes tolerance" in the dialog for a local change - or via the "Quality controls" in Mesh preferences. - -\note For performance reasons, all quality control values for big meshes are -computed only by demand. For this, press the "compute" -button. Also, values are automatically computed if the number of -nodes / elements does not exceed the "Automatic controls compute limit" set -via the "Mesh information" preferences (zero value means that there is no limit). - -\note The plot functionality is available only if the GUI module is built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when building GUI module). - -The button \b "Dump" allows printing the information displayed in the -dialog box to a .txt file. +\note It is possible to change Double nodes tolerance, which +will be used upon consequent pressing \a Compute button. The default value +of the tolerance can be set via the +\ref dbl_nodes_tol_pref "Quality controls" preferences. + +\note For performance reasons, all quality control values for big +meshes are computed only by demand. For this, press the \a Compute +button. Also, values are automatically computed if the number of nodes +/ elements does not exceed the +\ref auto_control_limit_pref "Automatic controls compute limit" set +via the \ref mesh_information_pref "Mesh information" preferences +(zero value means that there is no limit). + +\note The plot functionality is available only if the GUI module is +built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when +building GUI module). See the \ref tui_viewing_mesh_infos "TUI Example". diff --git a/doc/salome/gui/SMESH/input/mesh_preferences.doc b/doc/salome/gui/SMESH/input/mesh_preferences.doc index 79a268d0a..b27ffef24 100644 --- a/doc/salome/gui/SMESH/input/mesh_preferences.doc +++ b/doc/salome/gui/SMESH/input/mesh_preferences.doc @@ -9,6 +9,7 @@ or in later sessions with this module according to the preferences. \image html pref21.png +\anchor automatic_update_pref - Automatic Update - Automatic Update - if activated, the mesh in your viewer will be automatically updated after it's computation, depending on @@ -27,6 +28,20 @@ or in later sessions with this module according to the preferences. number of elements does not exceed the size limit, the entities of this type are shown, otherwise the user is warned that some entities are not shown. +\anchor display_mode_pref +- Display mode + - Default display mode - allows to set Wireframe, Shading, Nodes or Shrink + \ref display_mode_page "presentation mode" as default. + +\anchor quadratic_2d_mode_pref +- Representation of the 2D quadratic elements + - Default mode of the 2D quadratic elements - allows to + select either \a Lines or \a Arcs as a default + \ref quadratic_2d_mode "representation" of 1D and 2D + \ref adding_quadratic_elements_page "quadratic elements". + - Maximum Angle - maximum deviation angle used by the + application to build arcs. + - Quality Controls - Display entity - if activated, only currently \ref quality_page "controlled" entities are displayed in the @@ -37,22 +52,12 @@ or in later sessions with this module according to the preferences. - Use precision - if activated, all quality controls will be computed at precision defined by Number of digits after point - as integers by default. +\anchor dbl_nodes_tol_pref - Double nodes tolerance - defines the maximal distance between two mesh nodes, at which they are considered coincident by \ref double_nodes_control_page "Double nodes" quality control. - -- Display mode - - Default display mode - allows to set Wireframe, Shading, Nodes or Shrink - \ref display_mode_page "presentation mode" as default. - -\anchor quadratic_2d_mode_pref -- Representation of the 2D quadratic elements - - Default mode of the 2D quadratic elements - allows to - select either \a Lines or \a Arcs as a default - \ref quadratic_2d_mode "representation" of 1D and 2D - \ref adding_quadratic_elements_page "quadratic elements". - - Maximum Angle - maximum deviation angle used by the - application to build arcs. + This value is also used in \ref mesh_quality_info_anchor "Quality Info" + tab page of \ref mesh_infos_page dialog. - Mesh export \anchor export_auto_groups_pref @@ -63,56 +68,70 @@ or in later sessions with this module according to the preferences. - Show warning when exporting group - if activated, a warning is displayed when exporting a group. +\anchor show_comp_result_pref - Mesh computation - - Show a computation result notification combo-box allows to - select the notification mode about a mesh computation result. + - Show a computation result notification - allows to + select the notification mode about a \ref compute_anchor "mesh computation" result. There are 3 possible modes: - - Never - do not show the result dialog at all; + - Never - not to show the \ref meshing_result_anchor "result dialog" at all; - Errors only - the result dialog will be shown if there were some errors during a mesh computation; - Always - show the result dialog after each mesh computation. This is a default mode. +\anchor mesh_information_pref - Mesh information - - Mesh element information - change the way mesh element - information is shown: + - Mesh element information - allows changing the way + \ref mesh_element_info_anchor "mesh element information" is shown: - Simple - as a plain text - Tree - in a tree-like form +\anchor nb_nodes_limit_pref - Automatic nodes compute limit - allows defining the size limit for the - mesh groups for which the number of underlying nodes is calculated + \ref mesh_addition_info_group_anchor "mesh groups" for which + the number of underlying nodes is calculated automatically. If the group size exceeds the value set in the preferences, the user will have to press \em Compute button explicitly. Zero value means "no limit". By default the value is set to 100 000 mesh elements. - - Automatic controls compute limit - allows defining the size limit for the - mesh elements for which the Aspect Ratio histogram is calculated - automatically. If the mesh elements size exceeds the value set in the preferences, - it is possible to press \b Compute button explicitly to calculate the histogram . Zero value - means "no limit". By default the value is set to 3 000 mesh elements. +\anchor auto_control_limit_pref + - Automatic controls compute limit - allows defining a + maximal number of mesh elements for which the quality controls + in the \ref mesh_quality_info_anchor "Quality Information" + tab page are calculated automatically. If the number of mesh elements + exceeds the value set in the preferences, it is necessary to press + \b Compute button explicitly to calculate a quality measure. Zero value + means "no limit". By default the value is set to 3 000 mesh + elements. +\anchor group_detail_info_pref - Show details on groups in element information tab - when this option is switched off (default), only the names of groups, to which the node - or element belongs, are shown in the \ref mesh_element_info_anchor "Info Tab" + or element belongs, are shown in the \ref mesh_element_info_anchor "Element Info" tab of "Mesh Information" dialog box. If this option is switched on, the detailed information on groups is shown. - Dump base information - allows dumping base mesh information to the - file, see \ref mesh_infos_page. + file, see \ref dump_mesh_infos "Mesh Information". - Dump element information - allows dumping element information to the - file, see \ref mesh_infos_page. + file, see \ref dump_mesh_infos "Mesh Information". - Dump additional information - allows dumping additional mesh - information to the file, see \ref mesh_infos_page. + information to the file, see \ref dump_mesh_infos "Mesh Information". - Dump controls information - allows dumping quality mesh - information to the file, see \ref mesh_infos_page. + information to the file, see \ref dump_mesh_infos "Mesh Information". - Automatic Parameters - - Ratio Bounding Box Diagonal / Max Size - this parameter is - used for automatic meshing. This is the ratio between the bounding box of the - meshed object and the Max Size of segments. - - Default Number of Segments - defines the default - number of segments on each edge. +\anchor diagonal_size_ratio_pref + - Ratio Bounding Box Diagonal / Max Size - defines the ratio + between the bounding box of the meshed object and the Max Size of + segments. It is used as a default value of \ref a1d_meshing_hypo_page + defining length of segments, especially by + \ref max_length_anchor "Max Size" hypothesis. +\anchor nb_segments_pref + - Default Number of Segments - defines the default number of + segments in \ref number_of_segments_anchor "Number of Segments" + hypothesis. - Mesh loading - - If No mesh loading from study file at hypothesis modification - check-box is on, the mesh data will not be loaded from the study file - when a hypothesis is modified. This allows saving time by omitting + - No mesh loading from study file at hypothesis modification - if + activated, the mesh data will not be loaded from the study file + when a hypothesis is modified. This allows saving time by omitting loading data of a large mesh that is planned to be recomputed with other parameters. - Input fields precision @@ -126,10 +145,11 @@ or in later sessions with this module according to the preferences. - Preview - Sub-shapes preview chunk size - allows to limit the number of previewed sub-shapes shown in the hypotheses creation dialog boxes, - for example "Reverse Edges" parameter of \ref number_of_segments_anchor "Number of segments" hypothesis. + for example "Reverse Edges" parameter of + \ref number_of_segments_anchor "Number of segments" hypothesis. - Python Dump - - Historical python dump checkbox allows switching between + - Historical python dump - allows switching between \a Historical and \a Snapshot dump mode: - In \a Historical mode, Python Dump script includes all commands performed by SMESH engine. @@ -137,23 +157,28 @@ or in later sessions with this module according to the preferences. from the Study as well as the commands not influencing the current state of meshes are excluded from the script. +\anchor mesh_tab_preferences

      Mesh Preferences

      +\b Mesh tab page contains parameters defining the way the mesh is +displayed in the 3D Viewer. + \image html pref22.png -- Nodes allows to define default parameters for nodes, which will be applied +- Nodes - allows to define default parameters for nodes, which will be applied for a newly created mesh only. Existing meshes can be customized using \ref colors_size_page "Properties dialog box" available from the context menu of a mesh. - Color - allows to select the color of nodes. Click on the - colored line to access to the Select Color dialog box. + downward arrow near the colored line to access to the Select Color dialog box. - Type of marker - allows to define the shape of nodes. - Scale of marker - allows to define the size of nodes. -- Elements allows to define default parameters for different elements, which will be applied - for a newly created mesh only. Existing meshes can be customized using +- Elements - allows to define default parameters for different + elements, which will be applied to a newly created mesh + only. Existing meshes can be customized using \ref colors_size_page "Properties dialog box" available from the context menu of a mesh. - Surface color - allows to select the surface color of 2D elements - (seen in Shading mode). Click on the colored line to access to the + (seen in Shading mode). Click on the downward arrow near the colored line to access to the Select Color dialog box. - Back surface color - allows to select the back surface color of 2D elements. This is useful to differ 2d elements with @@ -166,40 +191,42 @@ or in later sessions with this module according to the preferences. the Volume color by changing its brightness and saturation. - 0D element color - allows to choose color of 0D mesh elements. - Ball color - allows to choose color of discrete mesh elements (balls). - - Outline color - allows to select the color of element - borders. + - Outline color - allows to select the color of element borders. - Wireframe color - allows to select the color of borders of elements in the wireframe mode. - - Preview color - allows to select the preview color of the elements. + - Preview color - allows to select the preview color of the + elements, which is used while + \ref adding_nodes_and_elements_page "manual creation of elements". - Size of 0D elements - specifies default size of 0D elements. - Size of ball elements - specifies default size of discrete elements (balls). - - Scale factor of ball elements - specifies default scale factor of discrete - elements (balls). - - Line width - allows to define the width of 1D elements (edges). + - Scale factor of ball elements - specifies default scale + factor of discrete elements (balls) allowing to adjust their size in the Viewer. + - Line width - allows to define the width of 1D elements (segments). - Outline width - allows to define the width of borders of 2D and 3D elements (shown in the Shading mode). - - Shrink coef. - allows to define relative space of elements - compared to gaps between them in shrink mode. + - Shrink coef. - allows to define relative size of a shrunk + element compared a non-shrunk element in percents in the shrink mode. - Groups - Names color - specifies color of group names to be used in - 3D viewer. + the 3D viewer. - Default color - specifies the default group color, which is used - to create a new mesh group (see \ref creating_groups_page "Create Group dialog box"). + to create a new mesh group (see \ref creating_groups_page "Create Group dialog box"). - Numbering allows to define properties of numbering functionality: - Nodes - specifies text properties of nodes numbering (font family, size, attributes, color). - Elements - same for elements. -- Orientation of Faces - allows to define default properties of orientation vectors. - These preferences will be applied to the newly created meshes only; properties of existing meshes - can be customized using \ref colors_size_page "Properties dialog box" - available from the context menu of a mesh. +- Orientation of Faces - allows to define default properties of + orientation vectors. These preferences will be applied to the newly + created meshes only; properties of existing meshes can be customized + using \ref colors_size_page "Properties dialog box" available from + the context menu of a mesh. - \b Color - allows to define the color of orientation vectors; - \b Scale - allows to define the size of orientation vectors; - - 3D Vector check-box allows to choose between 2D planar + - 3D Vector - allows to choose between 2D planar and 3D vectors.

      Selection Preferences

      @@ -209,7 +236,7 @@ or in later sessions with this module according to the preferences. - Selection - performed with mouse-indexing (preselection) and left-clicking on an object, whose appearance changes as defined in the Preferences. - - Object color - allows to select the color of mesh (edges and + - Object color - allows to select the color of mesh (edges and borders of meshes) of the selected entity. Click on the colored line to access to the Select Color dialog box. - Element color - allows to select the color of surface of selected @@ -218,8 +245,8 @@ or in later sessions with this module according to the preferences. - Preselection - performed with mouse-indexing on an object, whose appearance changes as defined in the Preferences. - - Highlight color - allows to select the color of mesh (edges and - borders of meshes) of the entity . Click on the colored line to access + - Highlight color - allows to select the color of mesh (edges and + borders of meshes) of the entity. Click on the colored line to access to the Select Color dialog box. - Precision - in this menu you can set the value of precision @@ -229,32 +256,31 @@ or in later sessions with this module according to the preferences. \image html pref24.png -\note The following settings are default and will be applied for -a newly created mesh only. Existing meshes -can be customized using local \ref scalar_bar_dlg "Scalar Bar Properties dialog box" -available from the context menu of a mesh. +\note The following settings are default and will be applied to +a newly created mesh only. Existing meshes can be customized using +local \ref scalar_bar_dlg "Scalar Bar Properties dialog box" available +from the context menu of a mesh. -- Font - in this menu you can set type, face and color for +- Font - in this menu you can set type, face and color of the font of Title and Labels. - Colors & Labels - in this menu you can set the number of colors and the number of labels in use. - Orientation - here you can choose between vertical and - horizontal orientation of the Scalar Bar + horizontal orientation of the Scalar Bar. - Origin & Size Vertical & Horizontal - allows to define placement (X and Y) and lookout (Width and Height) of Scalar Bars. - - X: abscissa of the point of origin (from the left - side) - - Y: ordinate of the origin of the bar (from the bottom) + - X - abscissa of the point of origin (from the left side). + - Y - ordinate of the origin of the bar (from the bottom). - Distribution in this menu you can Show/Hide distribution histogram of the values of the Scalar Bar and specify the Coloring Type of the histogram: - - Multicolor the histogram is colored as Scalar Bar - - Monocolor the histogram is colored as selected with - Distribution color selector + - Multicolor - the histogram is colored as Scalar Bar. + - Monocolor - the histogram is colored as selected with + Distribution color selector. */ diff --git a/doc/salome/gui/SMESH/input/prism_3d_algo.doc b/doc/salome/gui/SMESH/input/prism_3d_algo.doc index 5f98399c7..59aee72fa 100644 --- a/doc/salome/gui/SMESH/input/prism_3d_algo.doc +++ b/doc/salome/gui/SMESH/input/prism_3d_algo.doc @@ -1,8 +1,8 @@ /*! -\page prism_3d_algo_page 3D extrusion meshing algorithm +\page prism_3d_algo_page Extrusion 3D meshing algorithm -3D extrusion algorithm can be used for meshing prisms, i.e. 3D shapes +Extrusion 3D algorithm can be used for meshing prisms, i.e. 3D shapes defined by two opposing faces having the same number of vertices and edges. These two faces should be connected by quadrangle "side" faces. @@ -28,7 +28,7 @@ This picture shows four neighboring prism stacks, each comprising two prisms. The shown sub-mesh is used by the algorithm to mesh all eight prisms in the stacks. -To use 3D extrusion algorithm you need to assign algorithms +To use Extrusion 3D algorithm you need to assign algorithms and hypotheses of lower dimensions as follows. (A sample picture below shows algorithms and hypotheses used to mesh a cylinder with prismatic volumes). @@ -41,7 +41,7 @@ The \b Global algorithms and hypotheses to be chosen at
    • 1D algorithm and hypothesis that will be applied for meshing (logically) vertical edges of the prism (which connect the top and the base faces of the prism). In the sample picture above these are - "Regular_1D" algorithm and "Nb. Segments" hypothesis named "Vertical + "Regular_1D" algorithm and "Number of Segments" hypothesis named "Vertical Nb. Segments".
    @@ -66,21 +66,21 @@ The \b Local algorithms and hypotheses to be chosen at Scale Factor=3 is assigned to the highlighted edge. -If 3D extrusion algorithm is assigned to a sub-mesh in a mesh +If Extrusion 3D algorithm is assigned to a sub-mesh in a mesh with multiple sub-meshes, the described above approach may not work as expected. For example the bottom face may be meshed by other algorithm -before 3D extrusion have a chance to project a mesh from the +before Extrusion 3D have a chance to project a mesh from the base face. This thing can happen with vertical edges as well. All these can lead to either a meshing failure or to an incorrect meshing. In such a case, it's necessary to explicitly define algorithms -that 3D extrusion implicitly applies in a simple case: +that Extrusion 3D implicitly applies in a simple case: - assign \ref projection_1D2D algorithm to the top face and - assign a 1D algorithm to a group of all vertical edges. -\image html image157.gif "Prism with 3D extrusion meshing. Vertical division is different on neighbor edges because several local 1D hypotheses are assigned." +\image html image157.gif "Prism with Extrusion 3D meshing. Vertical division is different on neighbor edges because several local 1D hypotheses are assigned." \sa a sample TUI Script of -\ref tui_prism_3d_algo "Use 3D extrusion meshing algorithm". +\ref tui_prism_3d_algo "Use Extrusion 3D meshing algorithm". */ diff --git a/doc/salome/gui/SMESH/input/quad_ijk_algo.doc b/doc/salome/gui/SMESH/input/quad_ijk_algo.doc index 90e7eea94..292a300e5 100644 --- a/doc/salome/gui/SMESH/input/quad_ijk_algo.doc +++ b/doc/salome/gui/SMESH/input/quad_ijk_algo.doc @@ -1,8 +1,8 @@ /*! -\page quad_ijk_algo_page Quadrangle (Mapping) meshing algorithm +\page quad_ijk_algo_page Quadrangle: Mapping meshing algorithm -Quadrangle (Mapping) meshing algorithm is intended for creating +Quadrangle: Mapping meshing algorithm is intended for creating all-quadrangle and quad-dominant meshes on faces without holes and bound by at least three edges. diff --git a/doc/salome/gui/SMESH/input/radial_prism_algo.doc b/doc/salome/gui/SMESH/input/radial_prism_algo.doc index 756e0329a..8c3306857 100644 --- a/doc/salome/gui/SMESH/input/radial_prism_algo.doc +++ b/doc/salome/gui/SMESH/input/radial_prism_algo.doc @@ -10,7 +10,9 @@ shell. The meshes of the shells can consist both of triangles and quadrangles. The Radial Prism algorithm would fill the space between the two shells -with meshes. +with prisms. + +\image html radial_prism_mesh.png "Cut-view of a hollow sphere meshed by Radial Prism algorithm" This algorithm also needs the information concerning the number and distribution of mesh layers between the inner and the outer shapes. @@ -21,4 +23,4 @@ Distribution of layers can be set with any of 1D Hypotheses. \image html distribution_of_layers.png -*/ \ No newline at end of file +*/ diff --git a/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc b/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc index 097d217c2..7e49a9a66 100644 --- a/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc +++ b/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc @@ -1,6 +1,6 @@ /*! -\page radial_quadrangle_1D2D_algo_page Radial Quadrangle 1D2D +\page radial_quadrangle_1D2D_algo_page Radial Quadrangle 1D-2D \n This algorithm applies to the meshing of 2D shapes under the following conditions: the face must be a full ellipse or a part of ellipse @@ -21,8 +21,9 @@ end lying on the elliptic curve. If no own hypothesis of the algorithm is assigned, any local or global hypothesis is used by the algorithm to discretize edges. -If no 1D hypothesis is assigned to an edge, "Default Number of -Segments" preferences parameter is used to discretize the edge. +If no 1D hypothesis is assigned to an edge, +\ref nb_segments_pref "Default Number of Segments" preferences +parameter is used to discretize the edge. \image html hypo_radquad_dlg.png diff --git a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc index c19afd1b9..85a3cdf92 100644 --- a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc +++ b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc @@ -8,31 +8,31 @@ This page provides example codes of \ref tui_defining_meshing_algos
  • Wire discretisation 1D algorithm
    • \ref tui_1d_adaptive "Adaptive 1D" hypothesis
    • -
    • \ref tui_1d_arithmetic "Arithmetic 1D" hypothesis
    • +
    • \ref tui_1d_arithmetic "Arithmetic Progression" hypothesis
    • \ref tui_1d_arithmetic "Geometric Progression" hypothesis
    • -
    • \ref tui_deflection_1d "Deflection 1D and Number of Segments" hypotheses
    • +
    • \ref tui_deflection_1d "Deflection and Number of Segments" hypotheses
    • \ref tui_start_and_end_length "Start and End Length" hypotheses
    • \ref tui_average_length "Local Length"
    • \ref tui_propagation "Propagation" additional hypothesis
    • \ref tui_fixed_points "Fixed Points 1D" hypothesis
  • -
  • Triangle (Mefisto) 2D algorithm +
  • Triangle: Mefisto 2D algorithm
    • \ref tui_max_element_area "Max Element Area" hypothesis
    • \ref tui_length_from_edges "Length from Edges" hypothesis
  • -
  • Tetrahedron (Netgen) 3D algorithm +
  • NETGEN 3D algorithm
    • \ref tui_max_element_volume "Max. Element Volume"hypothesis
    • \ref tui_viscous_layers "Viscous layers"
  • \ref tui_projection "Projection Algorithms"
  • -
  • \ref tui_radial_quadrangle "Radial Quadrangle 1D2D" algorithm
  • -
  • Quadrangle (Mapping) 2D algorithm +
  • \ref tui_radial_quadrangle "Radial Quadrangle 1D-2D" algorithm
  • +
  • Quadrangle: Mapping 2D algorithm
    • \ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis
    @@ -45,7 +45,7 @@ This page provides example codes of \ref tui_defining_meshing_algos
    \anchor tui_1d_arithmetic -

    Arithmetic 1D and Geometric Progression

    +

    Arithmetic Progression and Geometric Progression

    \tui_script{defining_hypotheses_ex01.py}
    @@ -55,7 +55,7 @@ This page provides example codes of \ref tui_defining_meshing_algos
    \anchor tui_deflection_1d -

    Deflection 1D and Number of Segments

    +

    Deflection and Number of Segments

    \tui_script{defining_hypotheses_ex02.py}
    @@ -113,7 +113,7 @@ This page provides example codes of \ref tui_defining_meshing_algos \tui_script{defining_hypotheses_ex12.py} \anchor tui_radial_quadrangle -

    Radial Quadrangle 1D2D example

    +

    Radial Quadrangle 1D-2D example

    \tui_script{defining_hypotheses_ex13.py} \anchor tui_quadrangle_parameters diff --git a/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc b/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc index 6ba5e25d3..0bd16a9e3 100644 --- a/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc +++ b/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc @@ -1,6 +1,6 @@ /*! -\page tui_prism_3d_algo Use 3D extrusion meshing algorithm +\page tui_prism_3d_algo Use Extrusion 3D meshing algorithm \tui_script{prism_3d_algo.py} The result geometry and mesh is shown below diff --git a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc index 5fbbadb89..c4831c064 100644 --- a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc +++ b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc @@ -2,14 +2,23 @@ \page viewing_meshes_overview_page Viewing meshes -\n After definition of algorithms and hypotheses a new mesh is listed -in the Object Browser. Right-click on it and select \b Compute - the -mesh will be automatically displayed in the VTK 3D Viewer. -Alternatively click Display only to hide all other objects at -the same time. +By default a just \ref compute_anchor "computed" mesh will be +automatically displayed in the VTK 3D Viewer. (You can switch +off \ref automatic_update_pref "Automatic Update" preference parameter +to prevent this.) +Click Display only to hide all other objects at the same time. VTK 3D Viewer is described in detail in the documentation on GUI module. -\n After the mesh has appeared in the Viewer, you can select it with + +Use the following \ref mesh_preferences_page "preference parameters" +to adjust how the mesh is displayed by default: +- \ref automatic_update_pref "Automatic Update" +- \ref display_mode_pref "Default display mode" +- \ref quadratic_2d_mode_pref "Representation of the 2D quadratic elements" +- All parameters of \ref mesh_tab_preferences "Mesh" tab page of the +Preferences dialog. + +After the mesh has appeared in the Viewer, you can select it with left mouse click and get information about it, change its presentation parameters and access to other useful options by right-clicking on the selected mesh. @@ -20,21 +29,21 @@ right-clicking on the selected mesh.
  • Rename - allows to rename the object in the Object browser.
  • Hide all - allows to hide all objects in the viewer.
  • Update - refreshes the presentation of your mesh in the -Object Browser, applying all recent changes.
  • + Object Browser, applying all recent changes.
  • \subpage mesh_infos_page "Mesh Information" - provides -information about the mesh.
  • + information about the mesh.
  • \subpage find_element_by_point_page "Find Element by Point" - -allows to find all mesh elements, to which belongs a point with the + allows to find all mesh elements, to which belongs a point with the given coordinates.
  • Auto Color - switch on / off auto-assigning colors for the groups. If switched on, a default color of a new group in \ref creating_groups_page "Create Group" dialog is chosen randomly.
  • \subpage numbering_page "Numbering" - allows to display the ID -numbers of all meshing elements or nodes composing your mesh in the -viewer.
  • + numbers of all meshing elements or nodes composing your mesh in the + viewer.
  • \subpage display_mode_page "Display Mode" - allows to select between -Wireframe, Shading and Nodes presentation.
  • + Wireframe, Shading and Nodes presentation.
  • \subpage display_entity_page "Display Entity" - allows to display entities by types (Faces, Edges, Volumes etc.).
  • \anchor quadratic_2d_mode @@ -44,24 +53,29 @@ Wireframe, Shading and Nodes presentation. Arc representation applies to 1D and 2D elements only.
  • Orientation of faces - shows vectors of orientation of -faces of the selected mesh. The orientation vector is shown for each 2D mesh element -and for each free face of a 3D mesh element. the vector direction is calculated by -the first three nodes of the face produced by vectors n1-n2 and n1-n3.
  • -
  • \subpage colors_size_page "Properties" - allows to define several properties, including color of elements, shrink size, ....
  • + faces of the selected mesh. The orientation vector is shown for each + 2D mesh element and for each free facet of a 3D mesh element. The + vector direction is calculated by the first three nodes of the face + produced by vectors n1-n2 and n1-n3. +
  • \subpage colors_size_page "Properties" - allows to define several + visual properties, including color of elements, shrink size, ...
  • \subpage transparency_page "Transparency" - allows to change the -transparency of mesh elements.
  • -
  • \ref quality_page "Controls" - graphically -presents various information about meshes.
  • + transparency of mesh elements. +
  • \ref quality_page "Controls" - graphically presents various + information about the mesh.
  • Hide - allows to hide the selected mesh from the viewer.
  • -
  • Show Only -allows to display only the selected mesh, hiding all other from the viewer.
  • -
  • \subpage clipping_page "Clipping" - allows to create cross-sections of the selected objects.
  • -
  • Dump view - exports an object from the viewer in bmp, png, jpg or jpeg image format.
  • +
  • Show Only - allows to display only the selected mesh, + hiding all others from the viewer.
  • +
  • \subpage clipping_page "Clipping" - allows to create + cross-sections of the displayed objects.
  • +
  • Dump view - exports an object from the viewer in bmp, png + or jpeg image format.
  • Change background - allows to redefine the background -color. By default it is black.
  • -
  • View Operations checkbox - allows to show/hide the -visualization toolbar in the viewer window.
  • + color. By default it is black. +
  • View Operations - allows to show/hide the + visualization toolbar in the Viewer window.
  • Recording Operations - allows to show/hide the recording -toolbar in the viewer window.
  • + toolbar in the Viewer window. */ diff --git a/resources/StdMeshers.xml.in b/resources/StdMeshers.xml.in index 5c6e8f8ed..3a4e607b1 100644 --- a/resources/StdMeshers.xml.in +++ b/resources/StdMeshers.xml.in @@ -28,11 +28,11 @@ - + gui-lib ="StdMeshersGUI"> @@ -445,8 +493,10 @@ @@ -472,6 +524,8 @@ @@ -481,8 +535,10 @@ Delete(); myGrid->BuildLinks(); this->Modified(); + + // initialize static maps in SMDS_MeshCell, to be thread-safe + if ( myMeshId == 0 ) + { + SMDS_MeshCell::toVtkType( SMDSEntity_Node ); + SMDS_MeshCell::toVtkOrder( SMDSEntity_Node ); + SMDS_MeshCell::reverseSmdsOrder( SMDSEntity_Node ); + SMDS_MeshCell::interlacedSmdsOrder( SMDSEntity_Node ); + SMDS_MeshCell::toSmdsType( VTK_VERTEX ); + SMDS_MeshCell::fromVtkOrder( SMDSEntity_Node ); + } } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/SMDS/SMDS_MeshCell.hxx b/src/SMDS/SMDS_MeshCell.hxx index 803f48622..413b1265a 100644 --- a/src/SMDS/SMDS_MeshCell.hxx +++ b/src/SMDS/SMDS_MeshCell.hxx @@ -33,7 +33,7 @@ public: virtual ~SMDS_MeshCell(); virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)= 0; - virtual bool vtkOrder(const SMDS_MeshNode* nodes[], const int nbNodes) {return true; } + virtual bool vtkOrder(const SMDS_MeshNode* nodes[], const int nbNodes) { return true; } static VTKCellType toVtkType (SMDSAbs_EntityType vtkType); static SMDSAbs_EntityType toSmdsType(VTKCellType vtkType); diff --git a/src/SMESHDS/SMESHDS_Mesh.cxx b/src/SMESHDS/SMESHDS_Mesh.cxx index 168b9ceb3..b0df38a21 100644 --- a/src/SMESHDS/SMESHDS_Mesh.cxx +++ b/src/SMESHDS/SMESHDS_Mesh.cxx @@ -1374,7 +1374,7 @@ const TopoDS_Shape& SMESHDS_Mesh::IndexToShape(int ShapeIndex) const if ( ShapeIndex > 0 ) return myIndexToShape.FindKey(ShapeIndex); } - catch ( Standard_OutOfRange ) + catch ( ... ) { } static TopoDS_Shape nullShape; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 082159299..bda271418 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -5001,19 +5001,6 @@ void SMESHGUI::createPreferences() setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" ); - int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); - setPreferenceProperty( qaGroup, "columns", 2 ); - addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); - addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); - int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); - setPreferenceProperty( prec, "min", 0 ); - setPreferenceProperty( prec, "max", 100 ); - int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); - setPreferenceProperty( doubleNodesTol, "precision", 10 ); - setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); - setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); - setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); - int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE_GROUP" ), genTab ); setPreferenceProperty( dispgroup, "columns", 2 ); int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); @@ -5047,6 +5034,18 @@ void SMESHGUI::createPreferences() setPreferenceProperty( maxAngle, "min", 1 ); setPreferenceProperty( maxAngle, "max", 90 ); + int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); + setPreferenceProperty( qaGroup, "columns", 2 ); + addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); + addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); + int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); + setPreferenceProperty( prec, "min", 0 ); + setPreferenceProperty( prec, "max", 100 ); + int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); + setPreferenceProperty( doubleNodesTol, "precision", 10 ); + setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); + setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); + setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab ); diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx index 9bfb74ac6..07757c909 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx @@ -749,6 +749,8 @@ HypothesisData::HypothesisData( const QString& theTypeName, const QString& theLabel, const QString& theIconId, const QString& theContext, + const int theGroupID, + const int thePriority, const QList& theDim, const bool theIsAuxOrNeedHyp, const QStringList& theBasicHypos, @@ -764,6 +766,8 @@ HypothesisData::HypothesisData( const QString& theTypeName, Label( theLabel ), IconId( theIconId ), Context( theContext ), + GroupID( theGroupID ), + Priority( thePriority ), Dim( theDim ), IsAuxOrNeedHyp( theIsAuxOrNeedHyp ), IsNeedGeometry( theIsNeedGeometry ), diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.h b/src/SMESHGUI/SMESHGUI_Hypotheses.h index 6eb03fa9b..0852bc60e 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.h +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.h @@ -173,7 +173,8 @@ struct HypothesisData { HypothesisData( const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, - const QString&, const QList&, const bool, + const QString&, const int, const int, + const QList&, const bool, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const bool=true, const bool supportSub=false ); @@ -185,11 +186,13 @@ struct HypothesisData QString Label; //!< label QString IconId; //!< icon identifier QString Context; //!< ["GLOBAL","LOCAL","ANY"(default)] + int GroupID; //!< group ID (staring from zero) + int Priority; //!< integer, priority within the group QList Dim; //!< list of supported dimensions (see SMESH::Dimension enumeration) - bool IsAuxOrNeedHyp; //!< TRUE if given hypothesis is auxiliary one, FALSE otherwise - //!< TRUE if given algorithm can't work w/o hypotheses + bool IsAuxOrNeedHyp; //!< TRUE if given HYPOTHESIS is auxiliary one, FALSE otherwise + //!< TRUE if given ALGORITHM can't work w/o hypotheses bool IsNeedGeometry; //!< TRUE if the algorithm works with shapes only, FALSE otherwise - bool IsSupportSubmeshes; //!< TRUE if the algo building all-dim elems supports submeshes + bool IsSupportSubmeshes; //!< TRUE if the algorithm building all-dim elems supports sub-meshes // for algorithm only: dependencies algo <-> algo and algo -> hypos QStringList BasicHypos; //!< list of basic hypotheses diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx index fc1f8c5e2..71b812566 100644 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx @@ -49,9 +49,7 @@ #include // Qt includes -#include #include -//#include // Other includes @@ -180,7 +178,8 @@ namespace SMESH void InitAvailableHypotheses() { SUIT_OverrideCursor wc; - if (myHypothesesMap.empty() && myAlgorithmsMap.empty()) { + if ( myHypothesesMap.empty() && myAlgorithmsMap.empty() ) + { // Resource manager SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr(); if (!resMgr) return; @@ -369,6 +368,90 @@ namespace SMESH return aHypData; } + //================================================================================ + /*! + * \brief Return the HypothesisData holding a name of a group of hypotheses + * a given hypothesis belongs to + */ + //================================================================================ + + HypothesisData* GetGroupTitle( const HypothesisData* hyp, const bool isAlgo ) + { + static std::vector< std::vector< HypothesisData > > theGroups; + if ( theGroups.empty() ) + { + theGroups.resize(14); // 14: isAlgo * 10 + dim + + QString dummyS("GROUP"); + QList dummyIL; dummyIL << 1; + QStringList dummySL; + HypothesisData group( dummyS,dummyS,dummyS,dummyS,dummyS,dummyS,dummyS,-1,-1, + dummyIL, 0, dummySL,dummySL,dummySL,dummySL ); + // no group + int key = 0; + theGroups[ key ].push_back( group ); + + // 1D algo + key = 11; + // 0: Basic + group.Label = "GROUP:" + QObject::tr( "SMESH_1D_ALGO_GROUP_BASIC" ); + theGroups[ key ].push_back( group ); + // 1: Advanced + group.Label = "GROUP:" + QObject::tr( "SMESH_1D_ALGO_GROUP_ADVANCED" ); + theGroups[ key ].push_back( group ); + + // 1D hypotheses + key = 01; + // 0: Basic + group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_BASIC" ); + theGroups[ key ].push_back( group ); + // 1: Progression + group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_PROGRESSION" ); + theGroups[ key ].push_back( group ); + // 2: Advanced + group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_ADVANCED" ); + theGroups[ key ].push_back( group ); + + // 2D algo + key = 12; + // 0: Regular + group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_REGULAR" ); + theGroups[ key ].push_back( group ); + // 1: Free + group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_FREE" ); + theGroups[ key ].push_back( group ); + // 2: Advanced + group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_ADVANCED" ); + theGroups[ key ].push_back( group ); + + // 3D algo + key = 13; + // 0: Regular + group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_REGULAR" ); + theGroups[ key ].push_back( group ); + // 1: Free + group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_FREE" ); + theGroups[ key ].push_back( group ); + // 2: Advanced + group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_ADVANCED" ); + theGroups[ key ].push_back( group ); + } + + size_t key = 0, groupID = 0; + if ( hyp && !hyp->Dim.isEmpty() ) + { + key = hyp->Dim[0] + isAlgo * 10; + groupID = hyp->GroupID; + } + + if ( key < theGroups.size() && !theGroups[ key ].empty() ) + { + std::vector< HypothesisData > & group = theGroups[ key ]; + return & ( groupID < group.size() ? group[ groupID ] : group.back() ); + } + return & theGroups[ 0 ][ 0 ]; + } + bool IsAvailableHypothesis(const HypothesisData* algoData, const QString& hypType, bool& isAuxiliary) diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h b/src/SMESHGUI/SMESHGUI_HypothesesUtils.h index 70314e2ca..0bf059af1 100644 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h +++ b/src/SMESHGUI/SMESHGUI_HypothesesUtils.h @@ -78,6 +78,9 @@ namespace SMESH SMESHGUI_EXPORT HypothesisData* GetHypothesisData( const QString& ); + SMESHGUI_EXPORT + HypothesisData* GetGroupTitle( const HypothesisData* hyp, const bool isAlgo ); + SMESHGUI_EXPORT bool IsAvailableHypothesis( const HypothesisData*, const QString&, diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx index ad2adb520..09218ef3d 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx @@ -30,6 +30,7 @@ // SALOME GUI includes #include #include +#include // Qt includes #include @@ -163,19 +164,33 @@ SMESHGUI_MeshTab::~SMESHGUI_MeshTab() * \param [in] txt - item text * \param [in] type - HypType * \param [in] index - index of item in a list of items + * \param [in] isGroup - is the item a group title */ //================================================================================ -void SMESHGUI_MeshTab::addItem( const QString& txt, const int type, const int index ) +void SMESHGUI_MeshTab::addItem( const QString& txt, + const int type, + const int index, + const bool isGroup ) { + const char* prefix = " "; if ( type <= AddHyp ) { - myHypCombo[ type ]->addItem( txt, QVariant( index )); - myHypCombo[ type ]->setMaxVisibleItems( qMax( 10, myHypCombo[ type ]->count() ) ); + if ( isGroup ) + { + int idx = myHypCombo[ type ]->count(); + myHypCombo[ type ]->addItem( txt.mid( 6 ), QVariant( index )); + myHypCombo[ type ]->setItemData( idx, "separator", Qt::AccessibleDescriptionRole ); + } + else + { + myHypCombo[ type ]->addItem( prefix + txt, QVariant( index )); + } + //myHypCombo[ type ]->setMaxVisibleItems( qMax( 10, myHypCombo[ type ]->count() ) ); } else { - QListWidgetItem* item = new QListWidgetItem( txt, myAddHypList ); + QListWidgetItem* item = new QListWidgetItem( prefix + txt, myAddHypList ); item->setData( Qt::UserRole, QVariant( index )); } } @@ -222,7 +237,7 @@ void SMESHGUI_MeshTab::setAvailableHyps( const int theId, const QStringList& the { addItem( tr( "NONE"), Algo, 0 ); for ( int i = 0, nbHyp = theHyps.count(); i < nbHyp; ++i ) - addItem( theHyps[i], Algo, i+1 ); + addItem( theHyps[i], Algo, i+1, theHyps[i].startsWith( "GROUP:" )); myHypCombo[ Algo ]->setCurrentIndex( 0 ); } } @@ -400,15 +415,25 @@ void SMESHGUI_MeshTab::onCreateHyp() { bool isMainHyp = ( sender() == myCreateHypBtn[ MainHyp ]); - QMenu aPopup( this ); + QtxMenu aPopup( this ); QStringList aHypNames = isMainHyp ? myAvailableHypTypes[ MainHyp ] : myAvailableHypTypes[ AddHyp ]; QList actions; for ( int i = 0, n = aHypNames.count(); i < n; i++ ) - actions.append( aPopup.addAction( aHypNames[ i ] ) ); - + { + QAction* a = 0; + if ( aHypNames[ i ].startsWith( "GROUP:" )) + { + aPopup.appendGroupTitle( aHypNames[ i ].mid( 6 )); + } + else + { + a = aPopup.addAction( aHypNames[ i ] ); + } + actions.append( a ); + } QAction* a = aPopup.exec( QCursor::pos() ); if ( a ) emit createHyp( isMainHyp ? MainHyp : AddHyp, actions.indexOf( a ) ); @@ -444,7 +469,18 @@ void SMESHGUI_MeshTab::onEditHyp() //================================================================================ void SMESHGUI_MeshTab::onHyp( int theIndex ) { - const QObject* aSender = sender(); + QObject* aSender = sender(); + + if ( QComboBox* cb = qobject_cast< QComboBox* >( aSender )) + { + // don't allow selecting a group title + if ( cb->itemData( theIndex, Qt::AccessibleDescriptionRole ) == "separator" ) + { + cb->setCurrentIndex( theIndex+1 ); + return; + } + } + if ( aSender == myHypCombo[ Algo ] ) { emit selectAlgo( theIndex - 1 ); // - 1 because there is NONE on the top diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.h b/src/SMESHGUI/SMESHGUI_MeshDlg.h index 9c0337420..afc499f34 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.h +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.h @@ -150,7 +150,7 @@ private slots: private: - void addItem( const QString& txt, const int type, const int index ); + void addItem( const QString& txt, const int type, const int index, const bool isGroup=false ); int getCurrentIndex( const int type, const bool curByType=false) const; QMap myAvailableHypTypes; diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 8677fad56..8adb02804 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -943,7 +943,6 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim, bool isAux = ( theHypType >= AddHyp ); QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry, !myIsMesh ); - QStringList::const_iterator anIter; GEOM::GEOM_Object_var aGeomVar; QString aCurrentGeomToSelect; if ( !theMeshType.isEmpty() ) { @@ -955,23 +954,50 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim, myHypMapIsApplicable.clear(); } + std::multimap< double, HypothesisData* > sortedHyps; + QStringList::const_iterator anIter; for ( anIter = aHypTypeNameList.begin(); anIter != aHypTypeNameList.end(); ++anIter ) { HypothesisData* aData = SMESH::GetHypothesisData( *anIter ); if ( ( isCompatible ( thePrevAlgoData, aData, theHypType ) && isCompatible ( theNextAlgoData, aData, theHypType ) ) || - ( theMeshType == "ANY" && aData->InputTypes.isEmpty())) { - if ( !theMeshType.isEmpty() && theDim >= SMESH::DIM_2D && + ( theMeshType == "ANY" && aData->InputTypes.isEmpty())) + { + if ( ( !theMeshType.isEmpty() ) && + ( theDim >= SMESH::DIM_2D ) && ( ( theMeshType != "ANY" && !isCompatibleToMeshType( aData, theMeshType )) || - !isCompatibleToGeometry( aData, aCurrentGeomToSelect, aGeomVar ))) + !isCompatibleToGeometry( aData, aCurrentGeomToSelect, aGeomVar ))) continue; + + int groupID = aData->GroupID; + int priority = aData->Priority; + if ( groupID < 0 || groupID > 9 ) groupID = 9; + if ( priority < 0 || priority > 999 ) priority = 999; + + sortedHyps.insert( std::make_pair( groupID + priority * 1e-3, aData )); + } + } + + if ( !sortedHyps.empty() ) + { + HypothesisData* aPrevGroup = SMESH::GetGroupTitle( sortedHyps.rbegin()->second, isAlgo ); + std::multimap< double, HypothesisData* >::iterator key_hyp = sortedHyps.begin(); + for ( ; key_hyp != sortedHyps.end(); ++key_hyp ) + { + HypothesisData* aData = key_hyp->second; + HypothesisData* aGroup = SMESH::GetGroupTitle( aData, isAlgo ); + if ( aPrevGroup != aGroup ) + { + theDataList.append( aGroup ); + theHyps.append( aGroup->Label ); + aPrevGroup = aGroup; + } theDataList.append( aData ); theHyps.append( aData->Label ); } } - if ( !theMeshType.isEmpty() && !aCurrentGeomToSelect.isEmpty() && - myLastGeomToSelect != aCurrentGeomToSelect ) + if ( !theMeshType.isEmpty() && !aCurrentGeomToSelect.isEmpty() ) myLastGeomToSelect = aCurrentGeomToSelect; } diff --git a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx b/src/SMESHGUI/SMESHGUI_XmlHandler.cxx index ec8ed41cd..f164f4fe5 100644 --- a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx +++ b/src/SMESHGUI/SMESHGUI_XmlHandler.cxx @@ -141,11 +141,18 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&, else context = context.toUpper(); + bool isOk; + QString groupIDStr = atts.value("group-id"); + int groupID = groupIDStr.toUInt( &isOk ); + if ( !isOk ) groupID = -1; + QString priorityStr = atts.value("priority"); + int priority = priorityStr.toUInt( &isOk ); + if ( !isOk ) priority = -1; + QString aDimStr = atts.value("dim"); aDimStr = aDimStr.remove( ' ' ); QStringList aDimList = aDimStr.split( ',', QString::SkipEmptyParts ); QStringList::iterator anIter; - bool isOk; QList aDim; for ( anIter = aDimList.begin(); anIter != aDimList.end(); ++anIter ) { @@ -170,7 +177,7 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&, if ( !aHypAlType.contains( BAD_HYP_FLAG ) ) { HypothesisData* aHypData = new HypothesisData (aHypAlType, myPluginName, myServerLib, myClientLib, - aLabel, anIcon, context, aDim, isAuxOrNeedHyp, + aLabel, anIcon, context, groupID, priority, aDim, isAuxOrNeedHyp, attr[ HYPOS ], attr[ OPT_HYPOS ], attr[ INPUT ], attr[ OUTPUT ], isNeedGeom, isSupportSubmeshes ); diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index d275e1d9f..127fae41b 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -4389,6 +4389,50 @@ It can't be deleted SMESH_ADVANCED Advanced + + SMESH_1D_ALGO_GROUP_BASIC + Basic + + + SMESH_1D_ALGO_GROUP_ADVANCED + Advanced + + + SMESH_1D_HYP_GROUP_BASIC + Basic + + + SMESH_1D_HYP_GROUP_PROGRESSION + Progression + + + SMESH_1D_HYP_GROUP_ADVANCED + Advanced + + + SMESH_2D_ALGO_GROUP_REGULAR + Regular faces + + + SMESH_2D_ALGO_GROUP_FREE + Free faces + + + SMESH_2D_ALGO_GROUP_ADVANCED + Advanced + + + SMESH_3D_ALGO_GROUP_REGULAR + Regular volumes + + + SMESH_3D_ALGO_GROUP_FREE + Free volumes + + + SMESH_3D_ALGO_GROUP_ADVANCED + Advanced + SMESHGUI_FieldSelectorWdg diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx index 2be343242..d9b807c24 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx @@ -161,7 +161,7 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis } else if (strcmp("TrianglePreference", aHyp->GetName()) == 0){ isFirstParams = false; - myTrianglePreference = true; + myTrianglePreference = true; } else { isFirstParams = false; @@ -174,18 +174,18 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis if (isFirstParams) { if (strcmp("QuadranglePreference", aHyp->GetName()) == 0) { myQuadranglePreference = true; - myTrianglePreference = false; + myTrianglePreference = false; myQuadType = QUAD_STANDARD; } else if (strcmp("TrianglePreference", aHyp->GetName()) == 0){ myQuadranglePreference = false; - myTrianglePreference = true; + myTrianglePreference = true; myQuadType = QUAD_STANDARD; } } - else { - const StdMeshers_QuadrangleParams* aHyp2 = - (const StdMeshers_QuadrangleParams*)aHyp; + else if (const StdMeshers_QuadrangleParams* aHyp2 = + dynamic_cast( aHyp )) + { myTriaVertexID = aHyp2->GetTriaVertex(); if (!myQuadranglePreference && !myTrianglePreference) { // priority of hypos @@ -206,7 +206,7 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis //============================================================================= /*! - * + * */ //============================================================================= -- 2.30.2