Salome HOME
Merge from V5_1_4_BR (5_1_4rc2) 09/06/2010
authorvsr <vsr@opencascade.com>
Thu, 10 Jun 2010 06:51:07 +0000 (06:51 +0000)
committervsr <vsr@opencascade.com>
Thu, 10 Jun 2010 06:51:07 +0000 (06:51 +0000)
84 files changed:
doc/salome/gui/SMESH/images/colors_size.png
doc/salome/gui/SMESH/images/image94.gif [deleted file]
doc/salome/gui/SMESH/images/pattern2d.png [new file with mode: 0644]
doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
doc/salome/gui/SMESH/input/about_hypo.doc
doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc
doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
doc/salome/gui/SMESH/input/additional_hypo.doc
doc/salome/gui/SMESH/input/constructing_meshes.doc
doc/salome/gui/SMESH/input/creating_groups.doc
doc/salome/gui/SMESH/input/editing_groups.doc
doc/salome/gui/SMESH/input/find_element_by_point.doc
doc/salome/gui/SMESH/input/index.doc
doc/salome/gui/SMESH/input/merging_elements.doc
doc/salome/gui/SMESH/input/merging_nodes.doc
doc/salome/gui/SMESH/input/modifying_meshes.doc
doc/salome/gui/SMESH/input/pattern_mapping.doc
doc/salome/gui/SMESH/input/point_marker.doc
doc/salome/gui/SMESH/input/scale.doc
doc/salome/gui/SMESH/input/split_to_tetra.doc
doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc
doc/salome/gui/SMESH/input/tui_modifying_meshes.doc
doc/salome/gui/SMESH/input/tui_transforming_meshes.doc
doc/salome/gui/SMESH/input/viewing_meshes_overview.doc
resources/Makefile.am
resources/SalomeApp.xml
resources/mesh_tree_algo_0D.png [new file with mode: 0644]
resources/mesh_tree_algo_existing_2D.png [new file with mode: 0644]
resources/mesh_tree_algo_prism.png [new file with mode: 0644]
resources/mesh_tree_algo_radial_quadrangle_1D2D.png [new file with mode: 0644]
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MesherHelper.cxx
src/SMESH/SMESH_MesherHelper.hxx
src/SMESH/SMESH_Pattern.cxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI.h
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx
src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx
src/SMESHGUI/SMESHGUI_Hypotheses.cxx
src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx
src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_MeshOp.cxx
src/SMESHGUI/SMESHGUI_MeshOrderOp.cxx
src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx
src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h
src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx
src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx
src/SMESHGUI/SMESHGUI_RotationDlg.cxx
src/SMESHGUI/SMESHGUI_ScaleDlg.cxx
src/SMESHGUI/SMESHGUI_SewingDlg.cxx
src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx
src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx
src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx
src/SMESHGUI/SMESHGUI_TranslationDlg.cxx
src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx
src/SMESH_SWIG/ex06_hole1boolean.py
src/SMESH_SWIG/ex07_hole1partition.py
src/SMESH_SWIG/ex11_grid3partition.py
src/SMESH_SWIG/ex13_hole1partial.py
src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx
src/StdMeshers/StdMeshers_FaceSide.cxx
src/StdMeshers/StdMeshers_Quadrangle_2D.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx
src/StdMeshersGUI/StdMeshers_images.ts

index 58210c0bc7456dbd7555b34dfc34fd6376e70a34..53b14620cb6e6fe19d7f8b27ca50cc2a9dd3d66c 100755 (executable)
Binary files a/doc/salome/gui/SMESH/images/colors_size.png and b/doc/salome/gui/SMESH/images/colors_size.png differ
diff --git a/doc/salome/gui/SMESH/images/image94.gif b/doc/salome/gui/SMESH/images/image94.gif
deleted file mode 100755 (executable)
index 7313f5d..0000000
Binary files a/doc/salome/gui/SMESH/images/image94.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pattern2d.png b/doc/salome/gui/SMESH/images/pattern2d.png
new file mode 100644 (file)
index 0000000..ff488eb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/pattern2d.png differ
index 8e789536f0d2be87ac0cc544c5a3feeeee2c7d5a..892cc9f74e2800ac23164f43878795a0b1bcf205 100644 (file)
@@ -7,8 +7,6 @@
 <li>\ref max_element_area_anchor "Max Element Area"</li>
 <li>\ref length_from_edges_anchor "Length from Edges"</li>
 <li>\ref hypo_quad_params_anchor "Quadrangle parameters"</li>
 <li>\ref max_element_area_anchor "Max Element Area"</li>
 <li>\ref length_from_edges_anchor "Length from Edges"</li>
 <li>\ref hypo_quad_params_anchor "Quadrangle parameters"</li>
-<li>\ref quadrangle_preference_anchor "Quadrangle Preference"</li>
-<li>\ref triangle_preference_anchor "Triangle Preference"</li>
 </ul>
 
 <br>
 </ul>
 
 <br>
@@ -69,29 +67,5 @@ shows the good (left) and the bad (right) results of meshing.
 <b>See Also</b> a sample TUI Script of a 
 \ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis.
 
 <b>See Also</b> a sample TUI Script of a 
 \ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis.
 
-\anchor quadrangle_preference_anchor
-<h2>Quadrangle Preference</h2>
-
-This algorithm can be used together with Quadrangle (Mapping) and Netgen 2D
-algorithms. 
-
-It allows Netgen 2D to build quadrangular meshes at any conditions.
-
-It allows Quadrangle (Mapping) to build quadrangular meshes even if the number
-of nodes at the opposite edges of a meshed face is not equal,
-otherwise this mesh will contain some triangular elements.
-<br>
-This hypothesis has one restriction on its work: the total quantity of
-segments on all four sides of the face must be even (divisible by 2).
-
-
-<br>
-\anchor triangle_preference_anchor
-<h2>Triangle Preference</h2>
-
-This algorithm can be used only together with Quadrangle (Mapping)
-algorithm. It allows to build triangular mesh faces in the refinement
-area if the number of nodes at the opposite edges of a meshed face is not equal,
-otherwise refinement area will contain some quadrangular elements.
 <br>
 */
 <br>
 */
index 9d9db7b32c46baba0dbbeb9021df4d31bd6b20f5..0e8ac1007ea11a79c0db38e2065a57f992bd6815 100644 (file)
@@ -55,6 +55,8 @@ with other hypotheses:
 <li>Propagation of 1D Hypothesis on opposite edges</li>
 <li>Non conform mesh allowed</li>
 <li>Quadratic mesh</li>
 <li>Propagation of 1D Hypothesis on opposite edges</li>
 <li>Non conform mesh allowed</li>
 <li>Quadratic mesh</li>
+<li>Quadrangle preference</li>
+<li>Triangle preference</li>
 </ul>
 
 The choice of a hypothesis depends on:
 </ul>
 
 The choice of a hypothesis depends on:
index 451823b7432f8bb488b83a76b7da0a2539cf7f3b..5c99e8e79e2ce9daa95cab88e33fef3d65787b93 100644 (file)
@@ -26,10 +26,25 @@ following associated submenu will appear:</li>
 \image html image146.png
 
 From this submenu select the type of element which you would like to add to your mesh.
 \image html image146.png
 
 From this submenu select the type of element which you would like to add to your mesh.
-\note All dialogs intended for adding nodes or elements to mesh (except dialog for adding
-0D elements) provide a possibility to add these nodes/elements to the specified group
-(or to create the group if it doesn't exist). <b>Add to group</b> box allows to choose
-an existing group for created node or element or to specify a name for new group.
+
+\note All dialogs for adding new node or element to the mesh (except for
+the dialog for 0D elements) provide a possibility to add it
+automatically to the specified group or to create it anew using
+<b>Add to group</b> box, that allows to choose an existing group for
+the created node or element or to give the name to a new group. By
+default, the <b>Add to group</b> check box is switched off. If user
+swiches this check box on, the combo box listing all currently
+existing groups of the corresponding type becomes available. By
+default, no any group is selected. In such a case, when user presses
+<b>Apply</b> or <b>Apply & Close</b> button, the warning message box
+informing the user about the necessity to input new group name is
+shown. The combo box lists both \ref standalone_group "standalone groups"
+and \ref group_on_geom "groups on geometry". If the user has 
+chosen the group on geometry, he is warned and proposed to
+\ref convert_to_standalone "convert this group to the standalone".
+If user refuses converting operation, an operation is cancelled and
+new node/element is not created!
+
 </ol>
 
 <b>See Also</b> sample TUI Scripts of  
 </ol>
 
 <b>See Also</b> sample TUI Scripts of  
index 2a587d1477e7c86ef111e227c808c795a650933e..83736c85dc1e9047496344903ebb0b678ffa1deb 100644 (file)
@@ -2,7 +2,7 @@
 
 \page adding_quadratic_elements_page Adding Quadratic Elements
 
 
 \page adding_quadratic_elements_page Adding Quadratic Elements
 
-\n MESH modules allows you to work with <b>Quadratic Elements</b>.
+\n MESH module allows you to work with <b>Quadratic Elements</b>.
 
 Quadratic Edge is not a straight but a broken line and can be defined
 by three points: first, middle and last. All more complex \b Quadratic
 
 Quadratic Edge is not a straight but a broken line and can be defined
 by three points: first, middle and last. All more complex \b Quadratic
@@ -18,10 +18,24 @@ one of the following:
 
 \image html image152.png
 
 
 \image html image152.png
 
-\note All dialogs intended for adding quadratic elements to mesh provide a possibility
-to add these elements to the specified group (or to create the group if it doesn't exist).
-<b>Add to group</b> box allows to choose an existing group for created element or
-to specify a name for new group.
+\note All dialogs for adding quadratic element to the mesh
+provide a possibility to add new element
+automatically to the specified group or to create it anew using
+<b>Add to group</b> box, that allows to choose an existing group for
+the created node or element or to give the name to a new group. By
+default, the <b>Add to group</b> check box is switched off. If user
+swiches this check box on, the combo box listing all currently
+existing groups of the corresponding type becomes available. By
+default, no any group is selected. In such a case, when user presses
+<b>Apply</b> or <b>Apply & Close</b> button, the warning message box
+informing the user about the necessity to input new group name is
+shown. The combo box lists both \ref standalone_group "standalone groups"
+and \ref group_on_geom "groups on geometry". If the user has 
+chosen the group on geometry, he is warned and proposed to
+\ref convert_to_standalone "convert this group to the standalone".
+If user refuses converting operation, an operation is cancelled and
+new node/element is not created!
+
 
 To create any <b>Quadratic Element</b> specify the nodes which will form your
 triangle by selecting them in the 3D viewer with pressed Shift
 
 To create any <b>Quadratic Element</b> specify the nodes which will form your
 triangle by selecting them in the 3D viewer with pressed Shift
index 9687bdf2d6f9a5ce1ccc478af9605632d53c219a..1205e19b0d5338f0dafe0a574b366ff2000df0fa 100644 (file)
@@ -28,8 +28,30 @@ hypothesis onto an opposite edge. If a local hypothesis and
 propagation are defined on an edge of a quadrangular face, the
 opposite edge will have the same hypothesis, unless another hypothesis
 has been locally defined on the opposite edge.
 propagation are defined on an edge of a quadrangular face, the
 opposite edge will have the same hypothesis, unless another hypothesis
 has been locally defined on the opposite edge.
-
 <br><b>See Also</b> a sample TUI Script of a 
 <br><b>See Also</b> a sample TUI Script of a 
-\ref tui_propagation "Propagation hypothesis" operation.  
+\ref tui_propagation "Propagation hypothesis" operation
+
+<h2>Quadrangle Preference</h2>
+
+This additional hypothesis can be used together with Quadrangle (Mapping) and Netgen 2D
+algorithms. 
+
+It allows Netgen 2D to build quadrangular meshes at any conditions.
+
+It allows Quadrangle (Mapping) to build quadrangular meshes even if the number
+of nodes at the opposite edges of a meshed face is not equal,
+otherwise this mesh will contain some triangular elements.
+<br>
+This hypothesis has one restriction on its work: the total quantity of
+segments on all four sides of the face must be even (divisible by 2).
+
+<h2>Triangle Preference</h2>
+
+This additional hypothesis can be used only together with Quadrangle (Mapping)
+algorithm. It allows to build triangular mesh faces in the refinement
+area if the number of nodes at the opposite edges of a meshed face is not equal,
+otherwise refinement area will contain some quadrangular elements.
 
 
-*/
\ No newline at end of file
+*/
index 042b66320d413ba63466268f27b8333c0be2a37b..ace081140d0913d0dcb45322ab0bf4beb92845fe 100644 (file)
@@ -154,21 +154,20 @@ evaluation will be displayed in the following information box:
 
 </li>
 
 
 </li>
 
-</ol>
 
 \anchor mesh_order_anchor
 
 \anchor mesh_order_anchor
-It is allowed to change submesh priority in mesh computation when
-there are concurrent submeshes present. I.e. user can change priority of
-applying algorithms on shared subshapes of Mesh shape.
+
+<li>
+If the mesh contains concurrent submeshes, it is possible to change
+the priority of their computation, i.e. to change the priority of
+applying algorithms to the shared subshapes of the Mesh shape.</li>
+
 <em>To change submesh priority:</em>
 <em>To change submesh priority:</em>
-<ol>
-<li>From the Mesh menu choose the "Change submesh priority" on
-selected Mesh item, or invoke from popup menu. The opened dialogue box
-shows a list of submeshes in the order of their priority. Algorithm and its
-hypotheses of a submesh being upper in the list are applied before those of
-a submesh lower in the list.
 
 
-There is an example of submesh order modifications of Mesh created on a Box
+<li>Choose "Change submesh priority" from the Mesh menu or a popup menu. The opened dialogue
+shows a list of submeshes in the order of their priority. 
+
+There is an example of submesh order modifications of the Mesh created on a Box
 shape. The main Mesh object:
 <ul>
 <li><i>3D</i> <b>Tetrahedron (Netgen)</b> with Hypothesis<b>Max Element Volume</b></li>
 shape. The main Mesh object:
 <ul>
 <li><i>3D</i> <b>Tetrahedron (Netgen)</b> with Hypothesis<b>Max Element Volume</b></li>
@@ -189,51 +188,50 @@ is:
 (Number of Segments = 8)</li>
 </ul>
 
 (Number of Segments = 8)</li>
 </ul>
 
-And the last third submesh object <b>Submesh_3</b> created on <b>Face_3</b>
+And the last submesh object <b>Submesh_3</b> created on <b>Face_3</b>
 is:
 <ul>
 <li><i>2D</i> Netgen 1D-2D with Hypothesis <b>Netgen Simple parameters</b>
 (Number of Segments = 12)</li>
 </ul>
 is:
 <ul>
 <li><i>2D</i> Netgen 1D-2D with Hypothesis <b>Netgen Simple parameters</b>
 (Number of Segments = 12)</li>
 </ul>
-The submeshes can become concurrent if their algorithms leads to mesh shared subshape
-with different algorithms (or different algorithms parameters, i.e. hypothesises).
-In fact, we have three submeshes with concurrent algorithms, because
-they have different hypothesises assigned to them
+The submeshes become concurrent if they share subshapes that can be meshed 
+with different algorithms (or different hypothesises).
+In the example, we have three submeshes with concurrent algorithms,
+because they have different hypotheses
 
 
-The first mesh computation made with:
+The first mesh computation is made with:
 \image html mesh_order_123.png
 <center><em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
 \image html mesh_order_123_res.png
 <center><em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
 
 \image html mesh_order_123.png
 <center><em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
 \image html mesh_order_123_res.png
 <center><em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
 
-The next mesh computation with:
+The next mesh computation is made with:
 \image html mesh_order_213.png
 <center><em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
 \image html mesh_order_213_res.png
 <center><em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
 
 \image html mesh_order_213.png
 <center><em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
 \image html mesh_order_213_res.png
 <center><em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
 
-And the last mesh computation with:
+And the last mesh computation is made with:
 \image html mesh_order_321.png
 <center><em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
 \image html mesh_order_321_res.png
 <center><em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
 
 \image html mesh_order_321.png
 <center><em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
 \image html mesh_order_321_res.png
 <center><em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
 
-As we can see each mesh computation has different number of result
-elements and different mesh discretisation on shared edges (edges 
+As we can see, each mesh computation has a different number of result
+elements and a different mesh discretisation on the shared edges (the edges 
 that are shared between <b>Face_1</b>, <b>Face_2</b> and <b>Face_3</b>)
 
 that are shared between <b>Face_1</b>, <b>Face_2</b> and <b>Face_3</b>)
 
-Additionally, submesh priority (order of algorithms to be applied) can
-be modified not only in separate dialog box, but in <b>Preview</b>
-also. This helps to preview different mesh results, modifying submesh
-order.
+Additionally, submesh priority (the order of applied algorithms) can
+be modified not only in a separate dialog box, but also in the
+<b>Preview</b>. This helps to preview different mesh results,
+modifying the order of submeshes.
 \image html mesh_order_preview.png
 <center><em>"Preview with submesh priority list box"</em></center>
 
 \image html mesh_order_preview.png
 <center><em>"Preview with submesh priority list box"</em></center>
 
-If there are no concurrent submeshes under Mesh object, then user will see the
-following information dialog box
+If there are no concurrent submeshes under the Mesh object, the user will see the
+following information.
 \image html mesh_order_no_concurrent.png
 <center><em>"No concurrent submeshes detected"</em></center>
 \image html mesh_order_no_concurrent.png
 <center><em>"No concurrent submeshes detected"</em></center>
-and no mesh order list box will appear in Preview dialog box.
 
 </ol>
 
 
 </ol>
 
index 4d74a3aa08628966cfec62c4422d8fc62f3dbdda..29b17f1ae7d9a46f34501b603ea725dd2814d2e2 100644 (file)
@@ -23,7 +23,7 @@ elements which will form your group:</li>
 SALOME Platform distinguishes between the two Group types:
 <b>Standalone Group</b> and <b>Group on Geometry</b>.
 
 SALOME Platform distinguishes between the two Group types:
 <b>Standalone Group</b> and <b>Group on Geometry</b>.
 
-<br><h2>Standalone Group</h2>
+\anchor standalone_group <br><h2>"Standalone Group"</h2>
 
 <b>Standalone Group</b> consists of mesh elements, which you can define in
 two possible ways.
 
 <b>Standalone Group</b> consists of mesh elements, which you can define in
 two possible ways.
@@ -79,7 +79,7 @@ be changed, the new one will not be modified.
 \ref tui_create_standalone_group "Create a Standalone Group"
 operation.  
 
 \ref tui_create_standalone_group "Create a Standalone Group"
 operation.  
 
-<br><h2>Group on Geometry</h2>
+\anchor group_on_geom <br><h2>"Group on Geometry"</h2>
 
 To create a group on geometry check <b>Group on geometry</b> in the \b Group
 \b type field. <b>Group on geometry</b> contains the elements of a certain type
 
 To create a group on geometry check <b>Group on geometry</b> in the \b Group
 \b type field. <b>Group on geometry</b> contains the elements of a certain type
@@ -98,4 +98,4 @@ selected in green.</center>
 \ref tui_create_group_on_geometry "Create a Group on Geometry"
 operation.
 
 \ref tui_create_group_on_geometry "Create a Group on Geometry"
 operation.
 
-*/
\ No newline at end of file
+*/
index 6cbe5ceb4b0a6482afa6d7e0ddab2135a3965ce6..d255c3f82fe968e99da1d0d3679b1fb88760c541 100644 (file)
@@ -22,6 +22,7 @@ remove the elements forming it. For more information see
 group.</li>
 </ol>
 
 group.</li>
 </ol>
 
+\anchor convert_to_standalone
 <em>To convert an existing group on geometry into standalone group
 of elements and modify:</em>
 <ol>
 <em>To convert an existing group on geometry into standalone group
 of elements and modify:</em>
 <ol>
index 34380aed4c0134559c0950c0eacef577372b48f4..fcdadea2946e5cda605c66ff73d1b2b856f61bac 100644 (file)
@@ -24,8 +24,8 @@ The following dialog box will appear:
 <ul>
 <li>the coordinates of the point;</li>
 <li>the type of elements to be found; it is also possible to find elements
 <ul>
 <li>the coordinates of the point;</li>
 <li>the type of elements to be found; it is also possible to find elements
-of all types related to the reference point. To be exact, type "All"
-means to find elements of any type except nodes and 0D elements.</li>
+of all types related to the reference point. Choose type "All" to find
+elements of any type except for nodes and 0D elements.</li>
 </ul>
 
 </li>
 </ul>
 
 </li>
index 2de722d16115cc472b5c69c44fda05ad969dc302..7e18d2b68082f32f5cc7e10d887cd4bcaed91f46 100644 (file)
@@ -16,7 +16,8 @@ the VTK viewer;</li>
 allowing to highlight important elements:
 <li>\subpage modifying_meshes_page "modifying meshes" with a vast
 array of dedicated operations.</li> 
 allowing to highlight important elements:
 <li>\subpage modifying_meshes_page "modifying meshes" with a vast
 array of dedicated operations.</li> 
-<li>\subpage using_notebook_mesh_page.</li>
+<li>easily setting parameters via the variables predefined in
+\subpage using_notebook_mesh_page "Salome notebook".</li>
 </ul>
 
 Almost all mesh module functionalities are accessible via
 </ul>
 
 Almost all mesh module functionalities are accessible via
index d677e179e4c713e9c9f72a9370882efb80960021..50513d58fff4173ddeb63cbaaa617bda23712d56 100644 (file)
@@ -8,32 +8,31 @@ selectable in the dialog box.
 \image html mergeelems_ico.png "Merge elements button"
 
 <ol>
 \image html mergeelems_ico.png "Merge elements button"
 
 <ol>
-<li>From the \b Modification choose \b Transformation and  from its
-sub-menu select the <b>Merge elements</b> item. The following dialog box
+<li>Choose in the main menu \b Modification -> \b Transformation -> <b>Merge elements</b> item. The following dialog box
 shall appear:</li>
 
 \image html mergeelems_auto.png
 <br>
 <ul>
 <li>\b Name is the name of the mesh whose elements will be merged.</li>
 shall appear:</li>
 
 \image html mergeelems_auto.png
 <br>
 <ul>
 <li>\b Name is the name of the mesh whose elements will be merged.</li>
-<li>\b Automatic Mode or \b Manual Mode is to switch the dialog
-controls type.
+<li>\b Automatic or \b Manual Mode allows choosing how the elements
+are processed.
 </ul>
 
 <li><b>Automatic mode:</b>
 <ul>
 </ul>
 
 <li><b>Automatic mode:</b>
 <ul>
-<li>In \b Automatic Mode the elements that were created on the same nodes will be merged.</li>
+<li>In the \b Automatic Mode the elements created on the same nodes will be merged.</li>
 </ul>
 </li>
 
 </ul>
 </li>
 
-<li>If the \b Manual Mode is selected there are additional controls to 
-manage the elements to be merged in more detail:
+<li>If the \b Manual Mode is selected, additional controls are
+available:
 
 \image html mergeelems.png
 <br>
 <ul>
 <li>\b Detect button generates the list of coincident elements for the given \b Tolerance.</li>
 
 \image html mergeelems.png
 <br>
 <ul>
 <li>\b Detect button generates the list of coincident elements for the given \b Tolerance.</li>
-<li><b>Coincident elements</b> is a list of groupes of elements for
+<li><b>Coincident elements</b> is a list of groups of elements for
 merging. All elements of each group will form one after the operation.
 <ul>
 <li>\b Remove button deletes the selected group from the list.</li>
 merging. All elements of each group will form one after the operation.
 <ul>
 <li>\b Remove button deletes the selected group from the list.</li>
index d94d6f49d55f22a44c8d658cdd339a6ac17e6770..eb17e0a14c28c8c4970866b9b0ee1f502d8c5088 100644 (file)
@@ -17,25 +17,24 @@ shall appear:</li>
 <br>
 <ul>
 <li>\b Name is the name of the mesh whose nodes will be merged.</li>
 <br>
 <ul>
 <li>\b Name is the name of the mesh whose nodes will be merged.</li>
-<li>\b Automatic Mode or \b Manual Mode is to switch the dialog
-controls type.
+<li>\b Automatic or \b Manual Mode allows choosing how the nodes are
+processed.
 <li>\b Tolerance is a maximum distance between nodes sufficient for
 <li>\b Tolerance is a maximum distance between nodes sufficient for
-merging, that is able in both dialog modes.</li>
+merging.</li>
 </ul>
 
 <li><b>Automatic mode:</b>
 <br>
 <ul>
 </ul>
 
 <li><b>Automatic mode:</b>
 <br>
 <ul>
-<li>In \b Automatic Mode to merge the Nodes, just input the tolerance
-value and confirm by \b Apply button.</li>
+<li>In the \b Automatic Mode all Nodes within the indicated tolerance
+will be merged.</li>
 </ul>
 </li><br>
 </ul>
 </li><br>
-<li>If the \b Manual Mode is selected there are additional controls to 
-manage the nodes to be merged in more detail:
+<li>If the \b Manual Mode is selected, additional controls are available:
 <ul>
 <li>\b Detect button generates the list of coincident nodes for the given
 \b Tolerance.</li>
 <ul>
 <li>\b Detect button generates the list of coincident nodes for the given
 \b Tolerance.</li>
-<li><b>Coincident nodes</b> is a list of groupes of nodes for
+<li><b>Coincident nodes</b> is a list of groups of nodes for
 merging. All nodes of each group will form one after the
 operation.
 <ul>
 merging. All nodes of each group will form one after the
 operation.
 <ul>
index afa553f1b00fce3bced42779f65b8ee203e0651a..05180eb4b6fe3c1217bb193c60f5863bbccb0abf 100644 (file)
@@ -23,7 +23,7 @@ the mesh or some of its elements.</li>
 through a point or a vector of symmetry.</li>
 <li>Unite meshes by \subpage sewing_meshes_page "sewing" free borders,
 conform free borders, border to side or side elements.</li>
 through a point or a vector of symmetry.</li>
 <li>Unite meshes by \subpage sewing_meshes_page "sewing" free borders,
 conform free borders, border to side or side elements.</li>
-<li>\subpage merging_nodes_page "Merge Notes", considered coincident
+<li>\subpage merging_nodes_page "Merge Nodes", considered coincident
 within the indicated tolerance.</li>
 <li>\subpage merging_elements_page "Merge Elements", considered coincident
 within the indicated tolerance.</li>
 within the indicated tolerance.</li>
 <li>\subpage merging_elements_page "Merge Elements", considered coincident
 within the indicated tolerance.</li>
index db4be41447b2a6335ff945fd14ba80a9bd6b818b..1a48a4644bd640170c6d49e32cdd5a6f7e6960e5 100644 (file)
@@ -11,30 +11,83 @@ located at geometrical vertices. Pattern description is stored in
 \<pattern_name\>.smp file.
 
 The smp file contains 4 sections:
 \<pattern_name\>.smp file.
 
 The smp file contains 4 sections:
-<ol>
-<li>The first line holds the number of nodes (N).</li>
 
 
-<li>The next N lines describe nodes coordinates. Each line holds 2
-coordinates of a node.</li>
-
-<li>A key-points line: indices of nodes to be mapped on geometrical
-vertices. An index n refers to a node described on an n-th line of
-section 2. The first node index is zero.</li>
-
-<li>The rest lines describe nodal connectivity of elements, one line
+-# The first line holds the total number of the pattern nodes (N).
+-# The next N lines describe nodes coordinates. Each line holds 2
+coordinates of a node for 2D pattern or 3 cordinates for 3D pattern.
+Note, that for 3D pattern only relateive values in range [0;1] are
+valid for coordinates of the nodes.
+-# A key-points line: indices of nodes to be mapped on geometrical
+vertices (for 2D pattern only). An index n refers to a node described 
+on an n-th line of section 2. The first node index is zero. For 3D 
+pattern key points are not specified.
+-# The rest lines describe nodal connectivity of elements, one line
 for an element. A line holds indices of nodes forming an element. An
 index n refers to a node described on an n-th line of the section
 2. The first node index is zero. There must be 3 or 4 indices on a
 for an element. A line holds indices of nodes forming an element. An
 index n refers to a node described on an n-th line of the section
 2. The first node index is zero. There must be 3 or 4 indices on a
-line: only 2d elements are allowed.</li>
-</ol>
+line for 2D pattern (only 2d elements are allowed) and 4, 5, 6 or 8
+indices for 3D pattern (only 3d elements are allowed).
 
 The 2D pattern must contain at least one element and at least one
 key-point. All key-points must lay on boundaries.
 
 
 The 2D pattern must contain at least one element and at least one
 key-point. All key-points must lay on boundaries.
 
-An example of a simple smp file and a preview of a pattern described
-in this file:
-
-\image html image94.gif
+The 3D pattern must contain at least one element.
+
+An example of a simple 2D pattern smp file:
+
+\code
+!!! SALOME 2D mesh pattern file
+!!!
+!!! Nb of points:
+9
+        200     0       !- 0
+        100     0       !- 1
+          0     0       !- 2
+          0  -100       !- 3
+          0  -200       !- 4
+        100  -200       !- 5
+        200  -200       !- 6
+        200  -100       !- 7
+        100  -100       !- 8
+!!! Indices of 4 key-points
+ 2 0 4 6
+!!! Indices of points of 6 elements
+ 0 1 8
+ 8 5 6 7
+ 2 3 8
+ 8 3 4 5
+ 8 7 0
+ 8 1 2
+\endcode
+
+The image below provides a preview of above described pattern:
+
+\image html pattern2d.png
+
+An example of a simple 3D pattern smp file:
+
+\code
+!!! SALOME 3D mesh pattern file
+!!!
+!!! Nb of points:
+9
+        0        0        0   !- 0
+        1        0        0   !- 1
+        0        1        0   !- 2
+        1        1        0   !- 3
+        0        0        1   !- 4
+        1        0        1   !- 5
+        0        1        1   !- 6
+        1        1        1   !- 7
+      0.5      0.5      0.5   !- 8
+!!! Indices of points of 6 elements:
+ 0 1 5 4 8
+ 7 5 1 3 8
+ 3 2 6 7 8
+ 2 0 4 6 8
+ 0 2 3 1 8
+ 4 5 7 6 8
+\endcode
 
 <br><h2>Application of pattern mapping</h2>
 
 
 <br><h2>Application of pattern mapping</h2>
 
@@ -50,86 +103,89 @@ The following dialog box shall appear:
 
 \image html patternmapping1.png
 
 
 \image html patternmapping1.png
 
+<center><b> 2D Pattern Mapping dialog box</b></center>
+
 \image html patternmapping2.png
 
 \image html patternmapping2.png
 
+<center><b> 3D Pattern Mapping dialog box</b></center>
+
 To apply a pattern to a geometrical object, you should specify:
 To apply a pattern to a geometrical object, you should specify:
-<ul>
-<li>a face having the number of vertices equal to the number of
-key-points in the pattern; the number of key-points on internal
-boundaries of a pattern must also be equal to the number of vertices
-on internal boundaries of a face;</li>
-<li>a vertex to which the first key-point should be mapped;</li>
-<li>reverse or not the order of key-points. (The order of vertices of
-a face is counterclockwise looking from outside).</li>
-</ul>
+
+-# For 2D pattern
+   - A face having the number of vertices equal to the number of
+     key-points in the pattern; the number of key-points on internal
+     boundaries of a pattern must also be equal to the number of vertices
+     on internal boundaries of a face;
+   - A vertex to which the first key-point should be mapped;
+   - Reverse or not the order of key-points. (The order of vertices of
+     a face is counterclockwise looking from outside).
+-# For 3D pattern
+   - 3D block (Solid) object;
+   - Two vertices that specify the order of nodes in the resulting
+     mesh.
 
 Then you either load a .smp pattern file previously created manually
 by clicking on the <em>"Load pattern"</em> button, or click on the \b
 
 Then you either load a .smp pattern file previously created manually
 by clicking on the <em>"Load pattern"</em> button, or click on the \b
-New button for automatic generation.
-\n For an automatic generation you just specify a geometrical face
-having a mesh built on it. Mesh nodes lying on face vertices become
-key-points. Additionally, you may choose the way of getting nodes
-coordinates by <b>projecting nodes on the face</b> instead of using
+New button for automatic generation of the pattern.
+
+For an automatic generation you just specify a geometrical face (for
+2D) or solid (for 3d) having a mesh built on it. Mesh nodes lying on
+face vertices become key-points of 2D pattern. Additionally, for 2D
+pattern you may choose the way of getting nodes coordinates by
+<b>projecting nodes on the face</b> instead of using
 "positions on face" generated by mesher (if there is any). Faces
 having a seam edge can't be used for automatic pattern creation.
 
 When creating a pattern from an existing mesh, there are two possible
 cases:
 "positions on face" generated by mesher (if there is any). Faces
 having a seam edge can't be used for automatic pattern creation.
 
 When creating a pattern from an existing mesh, there are two possible
 cases:
-<ol>
-<li>A sub-mesh on face is selected. A pattern is created from the 2d
-elements bound to a face by mesher. Node coordinates are either
+
+- A sub-mesh on face/solid is selected. A pattern is created from the 2d/3d
+elements bound to a face/solid by mesher. For 2D pattern, node coordinates are either
 "positions on face" computed by mesher, or coordinates got by node
 "positions on face" computed by mesher, or coordinates got by node
-projection on a geometrical surface, according to your choice.</li>
-<li>A mesh where the main shape is a face, is selected. A pattern is
-created from all the 2d elements in a mesh. If all mesh elements are
-build by mesher, the user can select the way of getting nodes
-coordinates, else all nodes are projected on a face surface.</li>
-</ol>
+projection on a geometrical surface, according to the user choice. For
+3D pattern, nodes coordinates correspond to the nodes computed by mesher.
+- A mesh where the main shape is a face/solid, is selected. A pattern is
+created from all the 2d/3d elements in a mesh. In addition, for 2D
+pattern, if all mesh elements are build by mesher, the user can select
+the way of getting nodes coordinates, else all nodes are projected on
+a face surface.
 
 \image html a-patterntype.png
 
 
 \image html a-patterntype.png
 
+<center><b> 2D Pattern Creation dialog box</b></center>
+
 \image html a-patterntype1.png
 
 \image html a-patterntype1.png
 
+<center><b> 3D Pattern Creation dialog box</b></center>
+
 <br><h2>Mapping algorithm</h2>
 
 <br><h2>Mapping algorithm</h2>
 
-The mapping algorithm is as follows:
-<ol>
-<li>Key-points are set in the order that they are encountered when
-walking along a pattern boundary so that elements are on the left. The
-first key-point is preserved.
-</li>
-
-<li>Find geometrical vertices corresponding to key-points by vertices
-order in a face boundary; here, "Reverse order of key-points" flag is
-taken into account.
-
-\image html image95.gif
-</li>
-
-<li>Boundary nodes of a pattern are mapped onto edges of a face: a
-node located between certain key-points on a pattern boundary is
-mapped on a geometrical edge limited by corresponding geometrical
-vertices. Node position on an edge reflects its distance from two
-key-points.
-
-\image html image96.gif
-</li>
-
-<li>Coordinates of a non-boundary node in a parametric space of a face
-are defined as following. In a parametric space of a pattern, a node
-lays at the intersection of two iso-lines, each of which intersects a
-pattern boundary at least at two points. Knowing mapped positions of
-boundary nodes, we find where isoline-boundary intersection points are
-mapped to, and hence we can find mapped isolines direction and then,
-two node positions on two mapped isolines. The eventual mapped
-position of a node is found as an average of positions on mapped
-isolines.
-
-\image html image97.gif
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
+The mapping algorithm for 2D case is as follows:
+
+- Key-points are set in the order that they are encountered when
+  walking along a pattern boundary so that elements are on the left. The
+  first key-point is preserved.
+- Find geometrical vertices corresponding to key-points by vertices
+  order in a face boundary; here, "Reverse order of key-points" flag is
+  taken into account. \image html image95.gif
+- Boundary nodes of a pattern are mapped onto edges of a face: a
+  node located between certain key-points on a pattern boundary is
+  mapped on a geometrical edge limited by corresponding geometrical
+  vertices. Node position on an edge reflects its distance from two
+  key-points. \image html image96.gif
+- Coordinates of a non-boundary node in a parametric space of a face
+ are defined as following. In a parametric space of a pattern, a node
+ lays at the intersection of two iso-lines, each of which intersects a
+ pattern boundary at least at two points. Knowing mapped positions of
+ boundary nodes, we find where isoline-boundary intersection points are
+ mapped to, and hence we can find mapped isolines direction and then,
+ two node positions on two mapped isolines. The eventual mapped
+ position of a node is found as an average of positions on mapped
+ isolines. \image html image97.gif
+
+For 3D case the algorithm is similar.
+
+<b>See Also</b> a sample TUI Script of a 
 \ref tui_pattern_mapping "Pattern Mapping" operation.
 
 */
 \ref tui_pattern_mapping "Pattern Mapping" operation.
 
 */
index c298893ef4143377c5615538f58e62235cc75632..40c2b932bb79df041cb3bce4acb0da74ad0aaa5d 100644 (file)
@@ -9,7 +9,7 @@ shapes or by loading a custom texture from an external file.
 - Standard point markers
 
 The Mesh module provides a set of predefined point marker shapes
 - Standard point markers
 
 The Mesh module provides a set of predefined point marker shapes
-which can be used to display points in 3D viewer.
+which can be used to display points in the 3D viewer.
 Each standard point marker has two attributes: type (defines shape
 form) and scale factor (defines shape size).
 
 Each standard point marker has two attributes: type (defines shape
 form) and scale factor (defines shape size).
 
@@ -23,9 +23,9 @@ form) and scale factor (defines shape size).
 
 It is also possible to load a point marker shape from an external file.
 This file should provide a description of the point texture as a set
 
 It is also possible to load a point marker shape from an external file.
 This file should provide a description of the point texture as a set
-of lines; each line is represented as sequence of "0" and "1" symbols,
+of lines; each line is represented as sequence of "0" and "1" symbols,
 where "1" symbol means an opaque pixel and "0" symbol means a
 where "1" symbol means an opaque pixel and "0" symbol means a
-transparent pixel. The width of the texture correspond to the length
+transparent pixel. The width of the texture corresponds to the length
 of the longest line in the file, expanded to the nearest byte-aligned
 value. The height of the texture is equal to the number of non-empty
 lines in the file. Note that missing symbols are replaced by "0".
 of the longest line in the file, expanded to the nearest byte-aligned
 value. The height of the texture is equal to the number of non-empty
 lines in the file. Note that missing symbols are replaced by "0".
index 5b10fb5a5902b99dfedfa87f59fe51ef2348cf48..b833903b6da46b4a0f4f21fd4722a021f062475c 100644 (file)
@@ -69,17 +69,17 @@ name in the adjacent box);</li>
 
 <b>Example of using:</b>
 
 
 <b>Example of using:</b>
 
-1. Create quandrangle mesh 3x3 on simple planar face (200x200)
+1. Create quandrangle mesh 3x3 on simple planar face (200x200)
 
 \image html scaleinit01.png
 
 
 \image html scaleinit01.png
 
-and union 3 face (along axis Z) to group "gr_faces"
+and union 3 faces (along axis Z) to group "gr_faces"
 
 \image html scaleinit02.png
 
 
 
 
 \image html scaleinit02.png
 
 
 
-2. Perform scale operation for whole mesh with creation of new mesh:
+2. Perform scale operation for the whole mesh and create a new mesh:
 
 \image html scale03.png
 
 
 \image html scale03.png
 
@@ -89,7 +89,7 @@ result after operation:
 
 
 
 
 
 
-3. Perform scale operation for whole mesh with copy of elements:
+3. Perform scale operation for the whole mesh and copy elements:
 
 \image html scale04.png
 
 
 \image html scale04.png
 
@@ -99,7 +99,7 @@ result after operation:
 
 
 
 
 
 
-4. Perform scale operation for group of faces with copy of elements:
+4. Perform scale operation for a group of faces and copy elements:
 
 \image html scale06.png
 
 
 \image html scale06.png
 
@@ -109,7 +109,7 @@ result after operation:
 
 
 
 
 
 
-5. Perform scale operation for two edges with moving of elements:
+5. Perform scale operation for two edges and move elements:
 
 \image html scale07.png
 
 
 \image html scale07.png
 
@@ -119,7 +119,7 @@ result after operation:
 
 
 
 
 
 
-6. Perform scale operation for one face with moving of elements:
+6. Perform scale operation for one face and move elements:
 
 \image html scale09.png
 
 
 \image html scale09.png
 
index 57efb37eb49c20c20dca31b77c01ba4dcc15ec6e..4817a3f2f02dbc42a31228eab98d7de313aa58ab 100644 (file)
@@ -23,7 +23,7 @@ The following dialog box will appear:
 <li>The main list contains the list of volumes. You can click on
 a volume in the 3D viewer and it will be highlighted (lock Shift
 keyboard button to select several volumes). Click \b Add button and
 <li>The main list contains the list of volumes. You can click on
 a volume in the 3D viewer and it will be highlighted (lock Shift
 keyboard button to select several volumes). Click \b Add button and
-the ID of this volume will be added to the list. To remove a
+the ID of this volume will be added to the list. To remove the
 selected element or elements from the list click \b Remove button. <b>Sort
 list</b> button allows to sort the list of IDs. \b Filter button allows to
 apply a definite filter to the selection of volumes.
 selected element or elements from the list click \b Remove button. <b>Sort
 list</b> button allows to sort the list of IDs. \b Filter button allows to
 apply a definite filter to the selection of volumes.
@@ -40,12 +40,12 @@ volumes of the currently displayed mesh or submesh.</li>
 <li><b>Into 5 tetrahedra</b> and <b>Into 6 tetrahedra</b> allows to
 specify the number of tetrahedra a hexahedron will be split into. If the specified method does
 not allow to get a conform mesh, a generic solution is applied: an additional node 
 <li><b>Into 5 tetrahedra</b> and <b>Into 6 tetrahedra</b> allows to
 specify the number of tetrahedra a hexahedron will be split into. If the specified method does
 not allow to get a conform mesh, a generic solution is applied: an additional node 
-is created at gravity center of a hexahedron, serving an apex of tetrahedra, all quadrangle sides of the hexahedron are split into two triangles each serving a base of a new tetrahedron.</li>
+is created at the gravity center of a hexahedron, serving an apex of tetrahedra, all quadrangle sides of the hexahedron are split into two triangles each serving a base of a new tetrahedron.</li>
 </ul>
 
 </li>
 
 </ul>
 
 </li>
 
-<li><b>Select from</b> set of fields allows to choose a submesh or an
+<li><b>Select from</b> set of fields allows to choose a submesh or an
 existing group whose elements will be automatically added to the
 list.</li>
 </ul>
 existing group whose elements will be automatically added to the
 list.</li>
 </ul>
index 80944666e8c2967672d8975da95a844aa30b0042..1aa91d9d513a14841a1fb19ae7d1d3a24b3c9610 100644 (file)
@@ -536,7 +536,8 @@ radial_Quad_algo = mesh.Quadrangle(algo=RADIAL_QUAD)
 # In this case it uses "Default Nb of Segments" preferences parameter to discretize edges
 mesh.Compute()
 
 # In this case it uses "Default Nb of Segments" preferences parameter to discretize edges
 mesh.Compute()
 
-# The Radial Quadrange uses global or local 1d hypotheses if no its own hypotheses assigned.
+# The Radial Quadrange uses global or local 1d hypotheses if it does
+# not have its own hypotheses.
 # Define global hypotheses to discretize radial edges and a local one for circular edge
 global_Nb_Segments = mesh.Segment().NumberOfSegments(5)
 local_Nb_Segments  = mesh.Segment(circle).NumberOfSegments(10)
 # Define global hypotheses to discretize radial edges and a local one for circular edge
 global_Nb_Segments = mesh.Segment().NumberOfSegments(5)
 local_Nb_Segments  = mesh.Segment(circle).NumberOfSegments(10)
index 66b6361fa0b724214ad4fc2481bc234471388625..2e8f752917bfe1e4632923f11c5dcf3ff248756d 100644 (file)
@@ -22,6 +22,26 @@ if new_id == 0: print "KO node addition."
 else:           print "New Node has been added with ID ", new_id
 \endcode
 
 else:           print "New Node has been added with ID ", new_id
 \endcode
 
+<br>
+\anchor tui_add_0DElement
+<h3>Add 0D Element</h3>
+
+\code
+import SMESH_mechanic
+
+mesh = SMESH_mechanic.mesh
+
+# add node
+node_id = mesh.AddNode(50, 10, 0)
+
+# add 0D Element
+new_id = mesh.Add0DElement(node_id)
+
+print ""
+if new_id == 0: print "KO node addition."
+else:           print "New 0D Element has been added with ID ", new_id
+\endcode
+
 <br>
 \anchor tui_add_edge
 <h3>Add Edge</h3>
 <br>
 \anchor tui_add_edge
 <h3>Add Edge</h3>
@@ -768,7 +788,6 @@ mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5)
 
 \code
 import geompy
 
 \code
 import geompy
-
 import smesh
 
 # define the geometry
 import smesh
 
 # define the geometry
@@ -802,17 +821,100 @@ algo2D.MaxElementArea(240)
 isDone = Mesh_2.Compute()
 if not isDone: print 'Mesh Mesh_2 : computation failed'
 
 isDone = Mesh_2.Compute()
 if not isDone: print 'Mesh Mesh_2 : computation failed'
 
-# create a pattern
+# create a 2d pattern
 pattern = smesh.GetPattern()
 
 isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
 if (isDone != 1): print 'LoadFromFace :', pattern.GetErrorCode()
 
 # apply the pattern to a face of the first mesh
 pattern = smesh.GetPattern()
 
 isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
 if (isDone != 1): print 'LoadFromFace :', pattern.GetErrorCode()
 
 # apply the pattern to a face of the first mesh
-pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), [17], 0, 0)
-
+facesToSplit = Mesh_1.GetElementsByType(smesh.SMESH.FACE)
+print "Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit))
+pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0)
 isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
 if (isDone != 1): print 'MakeMesh :', pattern.GetErrorCode()  
 isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
 if (isDone != 1): print 'MakeMesh :', pattern.GetErrorCode()  
+
+# create quadrangle mesh
+Mesh_3 = smesh.Mesh(Box_1)
+Mesh_3.Segment().NumberOfSegments(1)
+Mesh_3.Quadrangle()
+Mesh_3.Hexahedron()
+isDone = Mesh_3.Compute()
+if not isDone: print 'Mesh Mesh_3 : computation failed'
+
+# create a 3d pattern (hexahedrons)
+pattern_hexa = smesh.GetPattern()
+
+smp_hexa = """!!! Nb of points:
+15
+      0        0        0   !- 0
+      1        0        0   !- 1
+      0        1        0   !- 2
+      1        1        0   !- 3
+      0        0        1   !- 4
+      1        0        1   !- 5
+      0        1        1   !- 6
+      1        1        1   !- 7
+    0.5        0      0.5   !- 8
+    0.5        0        1   !- 9
+    0.5      0.5      0.5   !- 10
+    0.5      0.5        1   !- 11
+      1        0      0.5   !- 12
+      1      0.5      0.5   !- 13
+      1      0.5        1   !- 14
+  !!! Indices of points of 4 elements:
+  8 12 5 9 10 13 14 11
+  0 8 9 4 2 10 11 6
+  2 10 11 6 3 13 14 7
+  0 1 12 8 2 3 13 10"""
+
+pattern_hexa.LoadFromFile(smp_hexa)
+
+# apply the pattern to a mesh
+volsToSplit = Mesh_3.GetElementsByType(smesh.SMESH.VOLUME)
+print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit))
+pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3)
+isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True)
+if (isDone != 1): print 'MakeMesh :', pattern_hexa.GetErrorCode()  
+
+# create one more quadrangle mesh
+Mesh_4 = smesh.Mesh(Box_1)
+Mesh_4.Segment().NumberOfSegments(1)
+Mesh_4.Quadrangle()
+Mesh_4.Hexahedron()
+isDone = Mesh_4.Compute()
+if not isDone: print 'Mesh Mesh_4 : computation failed'
+
+# create another 3d pattern (pyramids)
+pattern_pyra = smesh.GetPattern()
+
+smp_pyra = """!!! Nb of points:
+9
+        0        0        0   !- 0
+        1        0        0   !- 1
+        0        1        0   !- 2
+        1        1        0   !- 3
+        0        0        1   !- 4
+        1        0        1   !- 5
+        0        1        1   !- 6
+        1        1        1   !- 7
+      0.5      0.5      0.5   !- 8
+  !!! Indices of points of 6 elements:
+  0 1 5 4 8
+  7 5 1 3 8
+  3 2 6 7 8
+  2 0 4 6 8
+  0 2 3 1 8
+  4 5 7 6 8"""
+
+pattern_pyra.LoadFromFile(smp_pyra)
+
+# apply the pattern to a face mesh
+volsToSplit = Mesh_4.GetElementsByType(smesh.SMESH.VOLUME)
+print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit))
+pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0)
+isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True)
+if (isDone != 1): print 'MakeMesh :', pattern_pyra.GetErrorCode()  
 \endcode
 
 <br>
 \endcode
 
 <br>
index 1658e58c59af8e655909af89f0cb3ff62d8a3f19..c55b2a492852c870a3d786873bc38a01b8427629 100644 (file)
@@ -62,16 +62,16 @@ Nb_Segments_1.SetDistrType( 0 )
 Quadrangle_2D = Mesh1.Quadrangle()
 isDone = Mesh1.Compute()
 
 Quadrangle_2D = Mesh1.Quadrangle()
 isDone = Mesh1.Compute()
 
-#Perform scale opration for whole mesh with creation of new mesh
+#Perform scale opration for the whole mesh and creation of a new mesh
 newMesh = Mesh1.ScaleMakeMesh(Mesh1,SMESH.PointStruct(100,100,200),[0.5,0.3,0.7],True,"ScaledMesh")
 
 newMesh = Mesh1.ScaleMakeMesh(Mesh1,SMESH.PointStruct(100,100,200),[0.5,0.3,0.7],True,"ScaledMesh")
 
-#Perform scale operation for whole mesh with copy of elements
+#Perform scale operation for the whole mesh and copy elements
 Mesh1.Scale(Mesh1,SMESH.PointStruct(200,100,100),[0.5,0.5,0.5],True,True)
 
 Mesh1.Scale(Mesh1,SMESH.PointStruct(200,100,100),[0.5,0.5,0.5],True,True)
 
-#Perform scale opration for two edges with moving of elements
+#Perform scale opration for two edges and move elements
 Mesh1.Scale([1,2],SMESH.PointStruct(-100,100,100),[0.8,1.0,0.7],False)
 
 Mesh1.Scale([1,2],SMESH.PointStruct(-100,100,100),[0.8,1.0,0.7],False)
 
-#Perform scale opration for one face with moving of elements
+#Perform scale opration for one face and move elements
 Mesh1.Scale([21],SMESH.PointStruct(0,200,200),[0.7,0.7,0.7],False)
 \endcode
 
 Mesh1.Scale([21],SMESH.PointStruct(0,200,200),[0.7,0.7,0.7],False)
 \endcode
 
index 207c4dda5a160cc7cf260211cb3f5bf87874f20c..17f4c5f7ffc5395076d16e05ad11233430f4b04b 100644 (file)
@@ -37,9 +37,9 @@ Faces, Edges or both.</li>
 <li><b>2D Quadratic</b> - allows to select between the representation
 of quadratic edges as broken <b>lines</b> or as <b>arcs</b></li>
 <li><b>Orientation of faces</b> - shows vectors of orientation of
 <li><b>2D Quadratic</b> - allows to select between the representation
 of quadratic edges as broken <b>lines</b> or as <b>arcs</b></li>
 <li><b>Orientation of faces</b> - shows vectors of orientation of
-faces of the selected mesh. Vector is shown for each 2D mesh element 
-and for each free face of 3D mesh element. Vector direction is calculated by 
-the first three nodes of face as a cross product of vectors n1-n2 and n1-n3.</li> 
+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.</li> 
 <li>\subpage colors_size_page "Colors / Size" - allows to select color and size of
 meshes.</li>
 <li>\subpage transparency_page "Transparency" - allows to change the
 <li>\subpage colors_size_page "Colors / Size" - allows to select color and size of
 meshes.</li>
 <li>\subpage transparency_page "Transparency" - allows to change the
index ca671b982ccd2d82e5185df74b82125ee4651b50..97f2c3b6f2fa9d178d4ffc11fd45033c6bc4fed1 100644 (file)
@@ -80,6 +80,7 @@ dist_salomeres_DATA = \
        mesh_tree_algo_hexa.png \
        mesh_tree_algo_mefisto.png \
        mesh_tree_algo.png \
        mesh_tree_algo_hexa.png \
        mesh_tree_algo_mefisto.png \
        mesh_tree_algo.png \
+       mesh_tree_algo_0D.png \
        mesh_tree_algo_quad.png \
        mesh_tree_algo_regular.png \
        mesh_tree_algo_tetra.png \
        mesh_tree_algo_quad.png \
        mesh_tree_algo_regular.png \
        mesh_tree_algo_tetra.png \
@@ -149,6 +150,9 @@ dist_salomeres_DATA = \
        mesh_conv_to_quad.png \
        mesh_tree_hypo_layers_distribution.png \
        mesh_tree_algo_radial_prism.png \
        mesh_conv_to_quad.png \
        mesh_tree_hypo_layers_distribution.png \
        mesh_tree_algo_radial_prism.png \
+       mesh_tree_algo_radial_quadrangle_1D2D.png \
+       mesh_tree_algo_existing_2D.png \
+       mesh_tree_algo_prism.png \
        mesh_tree_algo_projection_2d.png \
        mesh_hypo_source_edge.png \
        mesh_hypo_source_3d.png \
        mesh_tree_algo_projection_2d.png \
        mesh_hypo_source_edge.png \
        mesh_hypo_source_3d.png \
index 173cbd07773011ebe603184ae933f598560d99ca..e4ddfa7381b1f890b88e8fc7a5048fab3e3d804c 100644 (file)
@@ -99,7 +99,7 @@
     <parameter name="NETGENPlugin" value="${NETGENPlugin_ROOT_DIR}/share/salome/resources/netgenplugin"/>
     <parameter name="GHS3DPlugin"  value="${GHS3DPlugin_ROOT_DIR}/share/salome/resources/ghs3dplugin"/>
     <parameter name="BLSURFPlugin" value="${BLSURFPlugin_ROOT_DIR}/share/salome/resources"/>
     <parameter name="NETGENPlugin" value="${NETGENPlugin_ROOT_DIR}/share/salome/resources/netgenplugin"/>
     <parameter name="GHS3DPlugin"  value="${GHS3DPlugin_ROOT_DIR}/share/salome/resources/ghs3dplugin"/>
     <parameter name="BLSURFPlugin" value="${BLSURFPlugin_ROOT_DIR}/share/salome/resources"/>
-    <parameter name="HexoticPLUGIN" value="${HexoticPlugin_ROOT_DIR}/share/salome/resources"/>
+    <parameter name="HexoticPlugin" value="${HexoticPLUGIN_ROOT_DIR}/share/salome/resources/hexoticplugin"/>
     <parameter name="GHS3DPRLPlugin" value="${GHS3DPRLPLUGIN_ROOT_DIR}/share/salome/resources"/>
   </section>
 </document>
     <parameter name="GHS3DPRLPlugin" value="${GHS3DPRLPLUGIN_ROOT_DIR}/share/salome/resources"/>
   </section>
 </document>
diff --git a/resources/mesh_tree_algo_0D.png b/resources/mesh_tree_algo_0D.png
new file mode 100644 (file)
index 0000000..5725a17
Binary files /dev/null and b/resources/mesh_tree_algo_0D.png differ
diff --git a/resources/mesh_tree_algo_existing_2D.png b/resources/mesh_tree_algo_existing_2D.png
new file mode 100644 (file)
index 0000000..db0de78
Binary files /dev/null and b/resources/mesh_tree_algo_existing_2D.png differ
diff --git a/resources/mesh_tree_algo_prism.png b/resources/mesh_tree_algo_prism.png
new file mode 100644 (file)
index 0000000..0025d48
Binary files /dev/null and b/resources/mesh_tree_algo_prism.png differ
diff --git a/resources/mesh_tree_algo_radial_quadrangle_1D2D.png b/resources/mesh_tree_algo_radial_quadrangle_1D2D.png
new file mode 100644 (file)
index 0000000..234ed30
Binary files /dev/null and b/resources/mesh_tree_algo_radial_quadrangle_1D2D.png differ
index 433c5116ef27964c1471e0ec7614ff06794b44c6..6801d7d0d14bbaf14a8cff2861c44c72d9e5f8e8 100644 (file)
@@ -9056,7 +9056,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
       ReplaceElemInGroups(volume, NewVolume, meshDS);
     }
   }
       ReplaceElemInGroups(volume, NewVolume, meshDS);
     }
   }
-  if ( !theForce3d ) {
+  if ( !theForce3d  && !getenv("NO_FixQuadraticElements")) {
     aHelper.SetSubShape(0); // apply to the whole mesh
     aHelper.FixQuadraticElements();
   }
     aHelper.SetSubShape(0); // apply to the whole mesh
     aHelper.FixQuadraticElements();
   }
index 13b06a3965960dc8f883e8f0f3f48ab8f360bca5..8cdacf7edcd0edbb963ddc3dcf233bf61550fab8 100644 (file)
@@ -597,23 +597,43 @@ gp_XY SMESH_MesherHelper::GetMiddleUV(const Handle(Geom_Surface)& surface,
 
 double SMESH_MesherHelper::GetNodeU(const TopoDS_Edge&   E,
                                     const SMDS_MeshNode* n,
 
 double SMESH_MesherHelper::GetNodeU(const TopoDS_Edge&   E,
                                     const SMDS_MeshNode* n,
+                                    const SMDS_MeshNode* inEdgeNode,
                                     bool*                check)
 {
   double param = 0;
                                     bool*                check)
 {
   double param = 0;
-  const SMDS_PositionPtr Pos = n->GetPosition();
-  if(Pos->GetTypeOfPosition()==SMDS_TOP_EDGE) {
-    const SMDS_EdgePosition* epos =
-      static_cast<const SMDS_EdgePosition*>(n->GetPosition().get());
+  const SMDS_PositionPtr pos = n->GetPosition();
+  if ( pos->GetTypeOfPosition()==SMDS_TOP_EDGE )
+  {
+    const SMDS_EdgePosition* epos = static_cast<const SMDS_EdgePosition*>( pos.get() );
     param =  epos->GetUParameter();
   }
     param =  epos->GetUParameter();
   }
-  else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX) {
-    SMESHDS_Mesh * meshDS = GetMeshDS();
-    int vertexID = n->GetPosition()->GetShapeId();
-    const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
-    param =  BRep_Tool::Parameter( V, E );
+  else if( pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+  {
+    if ( inEdgeNode && TopExp::FirstVertex( E ).IsSame( TopExp::LastVertex( E ))) // issue 0020128
+    {
+      Standard_Real f,l;
+      BRep_Tool::Range( E, f,l );
+      double uInEdge = GetNodeU( E, inEdgeNode );
+      param = ( fabs( uInEdge - f ) < fabs( l - uInEdge )) ? f : l;
+    }
+    else
+    {
+      SMESHDS_Mesh * meshDS = GetMeshDS();
+      int vertexID = pos->GetShapeId();
+      const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
+      param =  BRep_Tool::Parameter( V, E );
+    }
   }
   if ( check )
   }
   if ( check )
-    *check = CheckNodeU( E, n, param, BRep_Tool::Tolerance( E ));
+  {
+    double tol = BRep_Tool::Tolerance( E );
+    double f,l;  BRep_Tool::Range( E, f,l );
+    bool force = ( param < f-tol || param > l+tol );
+    if ( !force && pos->GetTypeOfPosition()==SMDS_TOP_EDGE )
+      force = ( GetMeshDS()->ShapeToIndex( E ) != pos->GetShapeId() );
+
+    *check = CheckNodeU( E, n, param, tol, force );
+  }
   return param;
 }
 
   return param;
 }
 
@@ -667,6 +687,20 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge&   E,
       {
         ((SMESH_MesherHelper*) this)->myOkNodePosShapes.insert( n->GetPosition()->GetShapeId() );
       }
       {
         ((SMESH_MesherHelper*) this)->myOkNodePosShapes.insert( n->GetPosition()->GetShapeId() );
       }
+      if (( u < f-tol || u > l+tol ) && force )
+      {
+        // node is on vertex but is set on periodic but trimmed edge (issue 0020890)
+        try
+        {
+          // do not use IsPeriodic() as Geom_TrimmedCurve::IsPeriodic () returns false
+          double period = curve->Period();
+          u = ( u < f ) ? u + period : u - period;
+        }
+        catch (Standard_Failure& exc)
+        {
+          return false;
+        }
+      }
     }
   }
   return true;
     }
   }
   return true;
@@ -739,8 +773,8 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
       E = TopoDS::Edge(myShape);
       edgeID = myShapeID;
     }
       E = TopoDS::Edge(myShape);
       edgeID = myShapeID;
     }
-    u[0] = GetNodeU(E,n1, force3d ? 0 : &uvOK[0]);
-    u[1] = GetNodeU(E,n2, force3d ? 0 : &uvOK[1]);
+    u[0] = GetNodeU(E,n1,n2, force3d ? 0 : &uvOK[0]);
+    u[1] = GetNodeU(E,n2,n1, force3d ? 0 : &uvOK[1]);
   }
   if(!force3d)
   {
   }
   if(!force3d)
   {
index f26ed4f6f2a55eaa04cc4f005a51242dbc882694..3fece8a8264aabfc4289f8873b54ccc6d3d3e74f 100644 (file)
@@ -269,6 +269,7 @@ public:
    */
   double GetNodeU(const TopoDS_Edge&   theEdge,
                   const SMDS_MeshNode* theNode,
    */
   double GetNodeU(const TopoDS_Edge&   theEdge,
                   const SMDS_MeshNode* theNode,
+                  const SMDS_MeshNode* inEdgeNode=0,
                   bool*                check=0);
   /*!
    * \brief Return node UV on face
                   bool*                check=0);
   /*!
    * \brief Return node UV on face
index c3a9126a3e941ab475348341e63b7ee16ac5297d..43ee8669da9ececd57a090d44061d2f76c73c105 100644 (file)
@@ -73,6 +73,7 @@
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMesh.hxx"
 
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMesh.hxx"
 
+#include <Basics_Utils.hxx>
 #include "utilities.h"
 
 using namespace std;
 #include "utilities.h"
 
 using namespace std;
@@ -210,6 +211,8 @@ bool SMESH_Pattern::Load (const char* theFileContents)
 {
   MESSAGE("Load( file ) ");
 
 {
   MESSAGE("Load( file ) ");
 
+  Kernel_Utils::Localizer loc;
+  
   // file structure:
 
   // ! This is a comment
   // file structure:
 
   // ! This is a comment
@@ -353,6 +356,9 @@ bool SMESH_Pattern::Load (const char* theFileContents)
 bool SMESH_Pattern::Save (ostream& theFile)
 {
   MESSAGE(" ::Save(file) " );
 bool SMESH_Pattern::Save (ostream& theFile)
 {
   MESSAGE(" ::Save(file) " );
+  
+  Kernel_Utils::Localizer loc;
+    
   if ( !IsLoaded() ) {
     MESSAGE(" Pattern not loaded ");
     return setErrorCode( ERR_SAVE_NOT_LOADED );
   if ( !IsLoaded() ) {
     MESSAGE(" Pattern not loaded ");
     return setErrorCode( ERR_SAVE_NOT_LOADED );
index fb0d7591750c7b921849c64ee4d555c5b2cb93ff..f777acbc420413040cd877418131a2dd4c047eaf 100644 (file)
@@ -1483,6 +1483,22 @@ SalomeApp_Study* SMESHGUI::activeStudy()
     return NULL;
 }
 
     return NULL;
 }
 
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+void SMESHGUI::Modified( bool theIsUpdateActions )
+{
+  if( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
+    if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
+      appStudy->Modified();
+      if( theIsUpdateActions )
+        app->updateActions();
+    }
+  }
+}
+
 //=============================================================================
 /*!
  *
 //=============================================================================
 /*!
  *
@@ -3845,8 +3861,8 @@ void SMESHGUI::createPreferences()
   
   // Set property for precision value for spinboxes
   for ( ii = 0; ii < nbQuantities; ii++ ){
   
   // Set property for precision value for spinboxes
   for ( ii = 0; ii < nbQuantities; ii++ ){
-    setPreferenceProperty( precs[ii], "min", -10 );
-    setPreferenceProperty( precs[ii], "max", 10 );
+    setPreferenceProperty( precs[ii], "min", -14 );
+    setPreferenceProperty( precs[ii], "max", 14 );
     setPreferenceProperty( precs[ii], "precision", 2 );
   }   
 
     setPreferenceProperty( precs[ii], "precision", 2 );
   }   
 
@@ -4869,5 +4885,7 @@ int SMESHGUI::addVtkFontPref( const QString& label, const int pId, const QString
 */
 void SMESHGUI::onHypothesisEdit( int result )
 {
 */
 void SMESHGUI::onHypothesisEdit( int result )
 {
+  if( result == 1 )
+    SMESHGUI::Modified();
   updateObjBrowser( true );
 }
   updateObjBrowser( true );
 }
index 503740c61039b9c4ff6b3639745d9654869c6466..0099a20bde8d21b9e66304cf128dbe1e0abb291c 100644 (file)
@@ -79,6 +79,8 @@ public :
 
   static bool                     automaticUpdate();
 
 
   static bool                     automaticUpdate();
 
+  static void                     Modified( bool = true );
+
   virtual LightApp_Displayer*     displayer();
   virtual QString                 engineIOR() const;
   virtual void                    initialize( CAM_Application* );
   virtual LightApp_Displayer*     displayer();
   virtual QString                 engineIOR() const;
   virtual void                    initialize( CAM_Application* );
index 03ade25cb3965e7544d279adcf0a18e99f8d166b..a5d12e55906dd937cf49d230fb55715f3054164a 100644 (file)
@@ -447,6 +447,7 @@ void SMESHGUI_AddMeshElementDlg::Init()
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument()));
   /* to close dialog if study frame change */
   connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument()));
   /* to close dialog if study frame change */
   connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), SLOT(ClickOnCancel()));    
 
   if (Reverse)
     connect(Reverse, SIGNAL(stateChanged(int)), SLOT(CheckBox(int)));
 
   if (Reverse)
     connect(Reverse, SIGNAL(stateChanged(int)), SLOT(CheckBox(int)));
@@ -570,6 +571,8 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
     myEditCurrentArgument->setText("");
 
     myBusy = false;
     myEditCurrentArgument->setText("");
 
     myBusy = false;
+
+    SMESHGUI::Modified();
   }
 }
 
   }
 }
 
index 601006b705de9b2b3cb4bde2ed6202eb8a8276a1..d190c35e3df78dd91e97149ada468f68f5f14ca3 100644 (file)
@@ -666,6 +666,7 @@ void SMESHGUI_AddQuadraticElementDlg::Init()
 
   connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog()));
   connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel()));
 
   connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog()));
   connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), SLOT(ClickOnCancel()));
 
   // set selection mode
   SMESH::SetPointRepresentation(true);
 
   // set selection mode
   SMESH::SetPointRepresentation(true);
@@ -806,6 +807,8 @@ void SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
   SetEditCorners();
 
   updateButtons();
   SetEditCorners();
 
   updateButtons();
+
+  SMESHGUI::Modified();
 }
 
 //=================================================================================
 }
 
 //=================================================================================
index fe9e5317ed1b5ae3cc34626eb3c5a9a85d5be710..bc6c1daf55051bd90eb7ce9f0319812ee78c14ce 100644 (file)
@@ -331,6 +331,8 @@ bool SMESHGUI_BuildCompoundDlg::ClickOnApply()
         SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor);
     }// end IPAL21468
 
         SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor);
     }// end IPAL21468
 
+    SMESHGUI::Modified();
+
     return true;
   }
   return false;
     return true;
   }
   return false;
index f5ed5ea1516bee7e4c074550aa55c41a6c69b816..5b87777532f87d022bd0f00f4e26a01b4e13346a 100644 (file)
@@ -27,6 +27,7 @@
 //
 #include "SMESHGUI_ConvToQuadOp.h"
 
 //
 #include "SMESHGUI_ConvToQuadOp.h"
 
+#include "SMESHGUI.h"
 #include "SMESHGUI_ConvToQuadDlg.h"
 #include "SMESHGUI_Utils.h"
 
 #include "SMESHGUI_ConvToQuadDlg.h"
 #include "SMESHGUI_Utils.h"
 
@@ -234,6 +235,7 @@ bool SMESHGUI_ConvToQuadOp::onApply()
   }
   if( aResult )
   {
   }
   if( aResult )
   {
+    SMESHGUI::Modified();
     update( UF_ObjBrowser | UF_Model | UF_Viewer );
     selectionDone();
   }
     update( UF_ObjBrowser | UF_Model | UF_Viewer );
     selectionDone();
   }
index 1501f082519498b1091735a818df8e9c9e193126..864537e8464256f6e7d42c6cd2b090704de0932c 100644 (file)
@@ -574,6 +574,8 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
       }
       //ConstructorsClicked( GetConstructorId() );
       busy = false;
       }
       //ConstructorsClicked( GetConstructorId() );
       busy = false;
+
+      SMESHGUI::Modified();
     }
 }
 
     }
 }
 
index 95906a3f98e873c609b644a19590fc4057133079..63ce53b12ebfda7d3f8ae1048c13576852b9a704 100644 (file)
@@ -219,6 +219,7 @@ bool SMESHGUI_DeleteGroupDlg::onApply()
   myListGrp.clear();
   mySelectionMgr->clearSelected();
   SMESH::UpdateView();
   myListGrp.clear();
   mySelectionMgr->clearSelected();
   SMESH::UpdateView();
+  SMESHGUI::Modified();
   mySMESHGUI->updateObjBrowser(true);
 
   myBlockSelection = false;
   mySMESHGUI->updateObjBrowser(true);
 
   myBlockSelection = false;
index 5405ec451a8753c244d31351b5d90df1b1217c3e..64559a58a041bc096a230d15f174ee9a2aa8a679 100644 (file)
@@ -672,6 +672,7 @@ bool SMESHGUI_EditMeshDlg::ClickOnApply()
   }
   
   SMESH::UpdateView();
   }
   
   SMESH::UpdateView();
+  SMESHGUI::Modified();
   
   return true;
 }
   
   return true;
 }
index b2ca950174100f27903717933c8cef7c538b37d3..7b9997de3cfa67b0bde6001513bc29c9ecadefcc 100644 (file)
@@ -167,6 +167,7 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
 
   ElementsLineEdit = new QLineEdit(GroupArguments);
   ElementsLineEdit->setValidator(myIdValidator);
 
   ElementsLineEdit = new QLineEdit(GroupArguments);
   ElementsLineEdit->setValidator(myIdValidator);
+  ElementsLineEdit->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -671,6 +672,8 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
   if ( myMeshActor )
     SMESH::Update( myMeshActor->getIO(), myMeshActor->GetVisibility() );
     
   if ( myMeshActor )
     SMESH::Update( myMeshActor->getIO(), myMeshActor->GetVisibility() );
     
+  SMESHGUI::Modified();
+
   if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
     mySMESHGUI->updateObjBrowser(true); // new groups may appear
   //SMESH::UpdateView();
   if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
     mySMESHGUI->updateObjBrowser(true); // new groups may appear
   //SMESH::UpdateView();
index 89ebc7f55f0ab4371a59f45880fe9ca57da20e9a..b402a0dfe309b9ae365ac9d61625f572a6d3682a 100644 (file)
@@ -165,6 +165,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule)
 
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
 
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -572,6 +573,8 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply()
     mySelectionMgr->clearSelected();
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     mySelectionMgr->clearSelected();
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
   return true;
 }
   }
   return true;
 }
index 711d9a220059d2e1d75a74a713843a18b7969a41..f9b4af0349ffcd439d545df0bf4eedf3c729c7ec 100755 (executable)
@@ -2517,31 +2517,18 @@ void SMESHGUI_FilterDlg::setIdsToWg (QWidget* theWg, const QList<int>& theIds)
   if (theWg == 0)
     return;
 
   if (theWg == 0)
     return;
 
+  QStringList aStrList;
+  foreach(int id, theIds)
+    aStrList << QString::number(id);
+
   if (theWg->inherits("QListWidget"))
   {
   if (theWg->inherits("QListWidget"))
   {
-    QListWidget* aListBox = qobject_cast<QListWidget*>( theWg );
-    aListBox->clear();
-
-    QStringList aStrList;
-    QList<int>::const_iterator anIter;
-    for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter)
-      aStrList.append(QString("%1").arg(*anIter));
-
-    aListBox->addItems(aStrList);
+    qobject_cast<QListWidget*>(theWg)->clear();
+    qobject_cast<QListWidget*>(theWg)->addItems(aStrList);
   }
   else if (theWg->inherits("QLineEdit"))
   {
   }
   else if (theWg->inherits("QLineEdit"))
   {
-    QLineEdit* aLineEdit = qobject_cast<QLineEdit*>( theWg );
-    QString aStr;
-    QList<int>::const_iterator anIter;
-
-    for (anIter = theIds.begin(); anIter != theIds.end(); ++ anIter)
-      aStr += QString("%1 ").arg(*anIter);
-
-    if (!aStr.isEmpty())
-      aStr.remove(aStr.length() - 1, 1);
-
-    aLineEdit->setText(aStr);
+    qobject_cast<QLineEdit*>( theWg )->setText(aStrList.join(" "));
   }
 }
 
   }
 }
 
@@ -2987,14 +2974,12 @@ void SMESHGUI_FilterDlg::onSelectionDone()
     }
   }
 
     }
   }
 
-  int aCriterionType = myTable->GetCriterionType(aRow);
-  if (aList.Extent() != 1 ||
-      !myTable->CurrentCell(aRow, aCol) ||
-      aCriterionType != SMESH::FT_BelongToGeom &&
-      aCriterionType != SMESH::FT_BelongToPlane &&
-      aCriterionType != SMESH::FT_BelongToCylinder &&
-      aCriterionType != SMESH::FT_BelongToGenSurface &&
-      aCriterionType != SMESH::FT_LyingOnGeom)
+  QList<int> types; 
+  types << SMESH::FT_BelongToGeom     << SMESH::FT_BelongToPlane 
+       << SMESH::FT_BelongToCylinder << SMESH::FT_BelongToGenSurface
+       << SMESH::FT_LyingOnGeom;
+  if (aList.Extent() != 1 || !myTable->CurrentCell(aRow, aCol) || 
+      !types.contains(myTable->GetCriterionType(aRow)))
     return;
 
   Handle(SALOME_InteractiveObject) anIO = aList.First();
     return;
 
   Handle(SALOME_InteractiveObject) anIO = aList.First();
index 351c4bc1f1fa9392ddc35313df81f36cf46ba311..28461ee4fb0d89afd3a644eb9098d11e41b47d63 100644 (file)
@@ -852,6 +852,7 @@ bool SMESHGUI_GroupDlg::onApply()
       }
     }
 
       }
     }
 
+    SMESHGUI::Modified();
     mySMESHGUI->updateObjBrowser(true);
     SMESH::UpdateView(); // asv: fix of BUG PAL5515
     mySelectionMgr->clearSelected();
     mySMESHGUI->updateObjBrowser(true);
     SMESH::UpdateView(); // asv: fix of BUG PAL5515
     mySelectionMgr->clearSelected();
@@ -957,6 +958,7 @@ bool SMESHGUI_GroupDlg::onApply()
       }
     }
 
       }
     }
 
+    SMESHGUI::Modified();
     mySMESHGUI->updateObjBrowser(true);
     mySelectionMgr->clearSelected();
     return true;
     mySMESHGUI->updateObjBrowser(true);
     mySelectionMgr->clearSelected();
     return true;
index f5b0037098d519bf3d476805d543bd5f046ab5f7..9fefa98daf9d9e2f107bbb92186de7d3e7f5a67d 100644 (file)
@@ -27,6 +27,7 @@
 #include "SMESHGUI_GroupOnShapeDlg.h"
 
 #include "SMESH_TypeFilter.hxx"
 #include "SMESHGUI_GroupOnShapeDlg.h"
 
 #include "SMESH_TypeFilter.hxx"
+#include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
 
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
 
@@ -347,6 +348,8 @@ bool SMESHGUI_GroupOnShapeOp::onApply()
       group = mesh->CreateGroupFromGEOM( elemType, name.toLatin1().data(), geom );
     }
   }
       group = mesh->CreateGroupFromGEOM( elemType, name.toLatin1().data(), geom );
     }
   }
+  SMESHGUI::Modified();
+
   update( UF_ObjBrowser | UF_Model );
 
   init();
   update( UF_ObjBrowser | UF_Model );
 
   init();
index 15d772347a251237b35faec1ce08e409752c1209..39941b26acd97413ca25c04324bc86ef098f823e 100644 (file)
@@ -604,6 +604,7 @@ bool SMESHGUI_UnionGroupsDlg::onApply()
 
   if ( aRes ) 
   {
 
   if ( aRes ) 
   {
+    SMESHGUI::Modified();
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
@@ -706,6 +707,7 @@ bool SMESHGUI_IntersectGroupsDlg::onApply()
 
   if ( aRes ) 
   {
 
   if ( aRes ) 
   {
+    SMESHGUI::Modified();
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
@@ -872,6 +874,7 @@ bool SMESHGUI_CutGroupsDlg::onApply()
 
   if ( aRes ) 
   {
 
   if ( aRes ) 
   {
+    SMESHGUI::Modified();
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
@@ -1023,6 +1026,7 @@ bool SMESHGUI_DimGroupDlg::onApply()
 
   if ( aRes ) 
   {
 
   if ( aRes ) 
   {
+    SMESHGUI::Modified();
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
     getSMESHGUI()->updateObjBrowser(true);
     reset();
     return true;
index 6f7237c9f198592560ae6c4d85eb3f393aee7d1a..b6e28773aa4823ef67a79ee9cc9e6ff5260fee95 100644 (file)
@@ -122,6 +122,7 @@ void SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_
   SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent );
   connect( Dlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) );
   connect( this, SIGNAL( finished( int ) ), obj, slot.toLatin1().constData() );
   SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent );
   connect( Dlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) );
   connect( this, SIGNAL( finished( int ) ), obj, slot.toLatin1().constData() );
+  connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), Dlg, SLOT( reject() ));
 
   myDlg = Dlg;
   QFrame* fr = buildFrame();
 
   myDlg = Dlg;
   QFrame* fr = buildFrame();
index e8d9204f8a578548e6d0464679c4700df23a589a..005e6a87345a0d37feecec9494ea05e8a84baaca 100644 (file)
@@ -414,6 +414,7 @@ namespace SMESH
         if (aHypSObject) {
           if (!aHypName.isEmpty())
             SMESH::SetName(aHypSObject, aHypName);
         if (aHypSObject) {
           if (!aHypName.isEmpty())
             SMESH::SetName(aHypSObject, aHypName);
+          SMESHGUI::Modified();
           SMESHGUI::GetSMESHGUI()->updateObjBrowser();
           return aHypothesis._retn();
         }
           SMESHGUI::GetSMESHGUI()->updateObjBrowser();
           return aHypothesis._retn();
         }
index fb404641f5b73e881516a6d219ed2bcb3c1056af..ffbc3b80dd2f42c21a91f28872ef823aa829e395 100644 (file)
@@ -233,6 +233,7 @@ void SMESHGUI_Make2DFrom3DOp::startOperation()
   myDlg->SetMeshInfo( aNewInfo );
   myDlg->show(); /*exec();*/
   commit();
   myDlg->SetMeshInfo( aNewInfo );
   myDlg->show(); /*exec();*/
   commit();
+  SMESHGUI::Modified();
 }
 
 //================================================================================
 }
 
 //================================================================================
index 0792b596ce7a93624c356b2ba3a7469a9b4f987b..ee35301f045d85b1092ac6a108a47b67d84687a5 100644 (file)
@@ -424,6 +424,7 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply()
       aList.Append(myMeshActor->getIO());
       selectionMgr()->setSelectedObjects(aList,false);
       SMESH::UpdateView();
       aList.Append(myMeshActor->getIO());
       selectionMgr()->setSelectedObjects(aList,false);
       SMESH::UpdateView();
+      SMESHGUI::Modified();
     }
   }
   catch (const SALOME::SALOME_Exception& S_ex) {
     }
   }
   catch (const SALOME::SALOME_Exception& S_ex) {
index 1739b419c7dcab07e1efe08b281f8210985cec5f..4ceb159ee0d3ea39527e71b1c5002feb230bdcca 100644 (file)
@@ -150,7 +150,10 @@ bool SMESHGUI_MeshOp::onApply()
     else if ( !myToCreate )
       aResult = editMeshOrSubMesh( aMess );
     if ( aResult )
     else if ( !myToCreate )
       aResult = editMeshOrSubMesh( aMess );
     if ( aResult )
+    {
+      SMESHGUI::Modified();
       update( UF_ObjBrowser | UF_Model );
       update( UF_ObjBrowser | UF_Model );
+    }
   }
   catch ( const SALOME::SALOME_Exception& S_ex )
   {
   }
   catch ( const SALOME::SALOME_Exception& S_ex )
   {
index 494d4eabfc8104e34bcf88234bd1c82eca98a9d6..511191c136b6424bb21c09a3400bb73d1abda75f 100644 (file)
@@ -138,6 +138,9 @@ bool SMESHGUI_MeshOrderOp::onApply()
   SUIT_OverrideCursor aWaitCursor;
   bool res = myMgr ? myMgr->SetMeshOrder() : false;
 
   SUIT_OverrideCursor aWaitCursor;
   bool res = myMgr ? myMgr->SetMeshOrder() : false;
 
+  if( res )
+    SMESHGUI::Modified();
+
   delete myMgr;
   myMgr = 0;
 
   delete myMgr;
   myMgr = 0;
 
index f08d017d962f7ddf012873216011feccb03a7823..2f3a7a2350c2b2fd7e8f1178a1c9c7a9fdc0bc05 100755 (executable)
@@ -510,6 +510,7 @@ bool SMESHGUI_MeshPatternDlg::onApply()
       }
       mySelectionMgr->clearSelected();
       SMESH::UpdateView();
       }
       mySelectionMgr->clearSelected();
       SMESH::UpdateView();
+      SMESHGUI::Modified();
 
       mySMESHGUI->updateObjBrowser(true);
 
 
       mySMESHGUI->updateObjBrowser(true);
 
index f4c26bb9f985467371bd2de1a0b0704ceba4ea74..ac54383824e3f6c3965540041816397c36cd3c4a 100644 (file)
@@ -356,6 +356,7 @@ bool SMESHGUI_MoveNodesDlg::onApply()
     aList.Append(myMeshActor->getIO());
     mySelectionMgr->setSelectedObjects(aList,false);
     SMESH::UpdateView();
     aList.Append(myMeshActor->getIO());
     mySelectionMgr->setSelectedObjects(aList,false);
     SMESH::UpdateView();
+    SMESHGUI::Modified();
     reset();
   }
 
     reset();
   }
 
index 98b047400a782cf2e4dce932b08004e5558aeba7..341ffb2845f4f96afb6248aa7a359a42541c73de 100755 (executable)
@@ -1052,6 +1052,7 @@ bool SMESHGUI_MultiEditDlg::onApply()
       mySelector->ClearIndex();
       mySelectionMgr->setSelectedObjects( sel );
       SMESH::UpdateView();
       mySelector->ClearIndex();
       mySelectionMgr->setSelectedObjects( sel );
       SMESH::UpdateView();
+      SMESHGUI::Modified();
     }
 
     myListBox->clear();
     }
 
     myListBox->clear();
index d12100ca293ee4ca3fae5eb09301f784b73b7956..84abe524296e47675ed4481ba66ccd74a33dcbda 100644 (file)
@@ -379,6 +379,7 @@ void SMESHGUI_NodesDlg::Init()
   connect( mySMESHGUI,     SIGNAL( SignalDeactivateActiveDialog() ), SLOT( DeactivateActiveDialog() ) );
   /* to close dialog if study frame change */
   connect( mySMESHGUI,     SIGNAL( SignalStudyFrameChanged() ),      SLOT( ClickOnCancel() ) );
   connect( mySMESHGUI,     SIGNAL( SignalDeactivateActiveDialog() ), SLOT( DeactivateActiveDialog() ) );
   /* to close dialog if study frame change */
   connect( mySMESHGUI,     SIGNAL( SignalStudyFrameChanged() ),      SLOT( ClickOnCancel() ) );
+  connect(mySMESHGUI,      SIGNAL(SignalCloseAllDialogs()),          SLOT(ClickOnCancel()));
 
   // set selection mode
   SMESH::SetPointRepresentation( true );
 
   // set selection mode
   SMESH::SetPointRepresentation( true );
@@ -526,6 +527,9 @@ bool SMESHGUI_NodesDlg::ClickOnApply()
       }
     }
   }
       }
     }
   }
+
+  SMESHGUI::Modified();
+
   return true;
 }
 
   return true;
 }
 
index 85311c6b70492fef6f1ae5b7e6689c16260e7cde..7d03f277971f3154a7b0fa844f746c322e335fc9 100644 (file)
 
 // SALOME GUI includes
 #include <SUIT_Desktop.h>
 
 // SALOME GUI includes
 #include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
 #include <QtxColorButton.h>
 #include <VTKViewer_MarkerWidget.h>
 #include <QtxColorButton.h>
 #include <VTKViewer_MarkerWidget.h>
+#include <LightApp_Application.h>
 #include <SalomeApp_IntSpinBox.h>
 
 // Qt includes
 #include <SalomeApp_IntSpinBox.h>
 
 // Qt includes
@@ -45,6 +49,7 @@
 #include <QHBoxLayout>
 #include <QGridLayout>
 #include <QCheckBox>
 #include <QHBoxLayout>
 #include <QGridLayout>
 #include <QCheckBox>
+#include <QKeyEvent>
 
 #define SPACING 6
 #define MARGIN  11
 
 #define SPACING 6
 #define MARGIN  11
@@ -186,10 +191,14 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul
   QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ), GroupButtons );
   buttonCancel->setAutoDefault( true );
 
   QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ), GroupButtons );
   buttonCancel->setAutoDefault( true );
 
+  QPushButton* buttonHelp = new QPushButton( tr( "&Help" ), GroupButtons );
+  buttonHelp->setAutoDefault( true );
+
   GroupButtonsLayout->addWidget( buttonOk );
   GroupButtonsLayout->addSpacing( 10 );
   GroupButtonsLayout->addStretch();
   GroupButtonsLayout->addWidget( buttonCancel );
   GroupButtonsLayout->addWidget( buttonOk );
   GroupButtonsLayout->addSpacing( 10 );
   GroupButtonsLayout->addStretch();
   GroupButtonsLayout->addWidget( buttonCancel );
+  GroupButtonsLayout->addWidget( buttonHelp );
 
   // -------------------------------
   topLayout->addWidget( ButtonGroup1 );
 
   // -------------------------------
   topLayout->addWidget( ButtonGroup1 );
@@ -200,9 +209,12 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul
   // -------------------------------
   mySMESHGUI->SetActiveDialogBox( this );
 
   // -------------------------------
   mySMESHGUI->SetActiveDialogBox( this );
 
+  myHelpFileName = "colors_size_page.html";
+
   /* signals and slots connections */
   connect( buttonOk,     SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
   connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) );
   /* signals and slots connections */
   connect( buttonOk,     SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
   connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) );
+  connect( buttonHelp,   SIGNAL( clicked() ), this, SLOT( ClickOnHelp() ) );
 
   connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ),
            this,       SLOT( DeactivateActiveDialog() ) );
 
   connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ),
            this,       SLOT( DeactivateActiveDialog() ) );
@@ -239,6 +251,30 @@ void SMESHGUI_Preferences_ColorDlg::ClickOnCancel()
   reject();
 }
 
   reject();
 }
 
+//=================================================================================
+// function : ClickOnHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_Preferences_ColorDlg::ClickOnHelp()
+{
+  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+  if (app) 
+    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
+  else {
+    QString platform;
+#ifdef WIN32
+    platform = "winapplication";
+#else
+    platform = "application";
+#endif
+    SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
+                             tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                             arg(app->resourceMgr()->stringValue("ExternalBrowser", 
+                                                                 platform)).
+                             arg(myHelpFileName));
+  }
+}
+
 //=================================================================================
 // function : DeactivateActiveDialog()
 // purpose  :
 //=================================================================================
 // function : DeactivateActiveDialog()
 // purpose  :
@@ -447,3 +483,19 @@ int SMESHGUI_Preferences_ColorDlg::getCustomMarkerID() const
 {
   return MarkerWidget->getCustomMarkerID();
 }
 {
   return MarkerWidget->getCustomMarkerID();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_Preferences_ColorDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Qt::Key_F1 ) {
+    e->accept();
+    ClickOnHelp();
+  }
+}
index dc26a938483fb75f1b571e427bb3247430af798a..aaaa499a60cc979b412a57f449ccab44afb1514d 100644 (file)
@@ -71,10 +71,12 @@ public:
 
 protected:
   void                  closeEvent( QCloseEvent* );
 
 protected:
   void                  closeEvent( QCloseEvent* );
+  void                  keyPressEvent( QKeyEvent* );
 
 private slots:
   void                  ClickOnOk();
   void                  ClickOnCancel();
 
 private slots:
   void                  ClickOnOk();
   void                  ClickOnCancel();
+  void                  ClickOnHelp();
   void                  DeactivateActiveDialog();
   void                  ActivateThisDialog();
   
   void                  DeactivateActiveDialog();
   void                  ActivateThisDialog();
   
@@ -93,6 +95,8 @@ private:
   QtxColorButton*       btnOrientationColor;
   SMESHGUI_SpinBox*     SpinBox_Orientation_Scale;
   QCheckBox*            CheckBox_Orientation_3DVectors;
   QtxColorButton*       btnOrientationColor;
   SMESHGUI_SpinBox*     SpinBox_Orientation_Scale;
   QCheckBox*            CheckBox_Orientation_3DVectors;
+
+  QString               myHelpFileName;
 };
 
 #endif // SMESHGUI_PREFERENCES_COLORDLG_H
 };
 
 #endif // SMESHGUI_PREFERENCES_COLORDLG_H
index c6ff898f3bc105aa08027bc579a1313804c29c55..a007feb0f7da311e154e439f2209f9dbf5e2cfd1 100644 (file)
@@ -123,6 +123,7 @@ SMESHGUI_RemoveElementsDlg
   SelectButtonC1A1->setIcon(image1);
   LineEditC1A1 = new QLineEdit(GroupC1);
   LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this));
   SelectButtonC1A1->setIcon(image1);
   LineEditC1A1 = new QLineEdit(GroupC1);
   LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this));
+  LineEditC1A1->setMaxLength(-1);
   QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupC1 );
   connect(filterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupC1 );
   connect(filterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -232,7 +233,7 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply()
     bool aResult = false;
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
     bool aResult = false;
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-      aResult = aMeshEditor->RemoveElements(anArrayOfIdeces.inout());
+      aResult = aMeshEditor->RemoveElements(anArrayOfIdeces.in());
     } catch (const SALOME::SALOME_Exception& S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
       myEditCurrentArgument->clear();
     } catch (const SALOME::SALOME_Exception& S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
       myEditCurrentArgument->clear();
@@ -244,6 +245,7 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply()
       myEditCurrentArgument->clear();
       mySelector->ClearIndex();
       SMESH::UpdateView();
       myEditCurrentArgument->clear();
       mySelector->ClearIndex();
       SMESH::UpdateView();
+      SMESHGUI::Modified();
     }
   }
 }
     }
   }
 }
@@ -310,9 +312,6 @@ void SMESHGUI_RemoveElementsDlg::onTextChange(const QString& theNewText)
 
   myNbOkElements = 0;
 
 
   myNbOkElements = 0;
 
-  buttonOk->setEnabled(false);
-  buttonApply->setEnabled(false);
-
   // hilight entered elements
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
   // hilight entered elements
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
@@ -334,12 +333,8 @@ void SMESHGUI_RemoveElementsDlg::onTextChange(const QString& theNewText)
     }
   }
   
     }
   }
   
-  if (myNbOkElements) {
-    buttonOk->setEnabled(true);
-    buttonApply->setEnabled(true);
-  }
-  
   myBusy = false;
   myBusy = false;
+  updateButtons();
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -348,56 +343,52 @@ void SMESHGUI_RemoveElementsDlg::onTextChange(const QString& theNewText)
 //=================================================================================
 void SMESHGUI_RemoveElementsDlg::SelectionIntoArgument()
 {
 //=================================================================================
 void SMESHGUI_RemoveElementsDlg::SelectionIntoArgument()
 {
-  if (myBusy) return;
+  if (myBusy) return;                                  // busy
+  if (myFilterDlg && myFilterDlg->isVisible()) return; // filter digl active
+  if (!GroupButtons->isEnabled()) return;              // inactive
 
   // clear
 
 
   // clear
 
-  myNbOkElements = false;
+  myNbOkElements = 0;
   myActor = 0;
 
   myBusy = true;
   myEditCurrentArgument->setText("");
   myBusy = false;
 
   myActor = 0;
 
   myBusy = true;
   myEditCurrentArgument->setText("");
   myBusy = false;
 
-  if (!GroupButtons->isEnabled()) // inactive
-    return;
-
-  buttonOk->setEnabled(false);
-  buttonApply->setEnabled(false);
-
   // get selected mesh
 
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
 
   int nbSel = aList.Extent();
   // get selected mesh
 
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
 
   int nbSel = aList.Extent();
-  if (nbSel != 1)
-    return;
-
-  Handle(SALOME_InteractiveObject) anIO = aList.First();
-  myMesh = SMESH::GetMeshByIO(anIO);
-  if (myMesh->_is_nil())
-    return;
-
-  myActor = SMESH::FindActorByEntry(anIO->getEntry());
-  if (!myActor)
-    return;
-
-  // get selected nodes
-  QString aString = "";
-  int nbElems = SMESH::GetNameOfSelectedElements(mySelector,anIO,aString);
-  if(nbElems < 1)
-    return;
-  myBusy = true;
-  myEditCurrentArgument->setText(aString);
-  myBusy = false;
-
-  // OK
-
-  myNbOkElements = nbElems;
-
-  buttonOk->setEnabled(true);
-  buttonApply->setEnabled(true);
+  if (nbSel == 1) {
+
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    myMesh = SMESH::GetMeshByIO(anIO);
+
+    if (!myMesh->_is_nil()) {
+
+      myActor = SMESH::FindActorByEntry(anIO->getEntry());
+      if (myActor) {
+       
+       // get selected nodes
+       QString aString = "";
+       int nbElems = SMESH::GetNameOfSelectedElements(mySelector,anIO,aString);
+       if (nbElems > 0) {
+         myBusy = true;
+         myEditCurrentArgument->setText(aString);
+         myBusy = false;
+         
+         // OK
+         
+         myNbOkElements = nbElems;
+       } // if (nbElems > 0)
+      } // if (myActor)
+    } // if (!myMesh->_is_nil())
+  } // if (nbSel == 1) {
+
+  updateButtons();       
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -523,3 +514,13 @@ void SMESHGUI_RemoveElementsDlg::setFilters()
 
   myFilterDlg->show();
 }
 
   myFilterDlg->show();
 }
+
+//=================================================================================
+// function : updateButtons
+// purpose  : enable / disable control buttons
+//=================================================================================
+void SMESHGUI_RemoveElementsDlg::updateButtons()
+{
+  buttonOk->setEnabled(myNbOkElements > 0);
+  buttonApply->setEnabled(myNbOkElements > 0);
+}
index 246c78a4746020c9c4121662bceb311d0e22878b..9a372bb273c317813645c3f0581b66c4d2747990 100644 (file)
@@ -107,6 +107,7 @@ private slots:
   void                   ActivateThisDialog();
   void                   onTextChange( const QString& );
   void                   setFilters();
   void                   ActivateThisDialog();
   void                   onTextChange( const QString& );
   void                   setFilters();
+  void                   updateButtons();
 };
 
 #endif // SMESHGUI_REMOVEELEMENTSDLG_H
 };
 
 #endif // SMESHGUI_REMOVEELEMENTSDLG_H
index fc6c78a30a846a8e898f4e5a681881b3368a900c..58fd31fb32f9d2efaca3e3ad25517284c77696ea 100644 (file)
@@ -123,6 +123,7 @@ SMESHGUI_RemoveNodesDlg
   SelectButtonC1A1->setIcon(image1);
   LineEditC1A1 = new QLineEdit(GroupC1);
   LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this));
   SelectButtonC1A1->setIcon(image1);
   LineEditC1A1 = new QLineEdit(GroupC1);
   LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this));
+  LineEditC1A1->setMaxLength(-1);
   QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupC1 );
   connect(filterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupC1 );
   connect(filterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -234,7 +235,7 @@ void SMESHGUI_RemoveNodesDlg::ClickOnApply()
     bool aResult = false;
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
     bool aResult = false;
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-      aResult = aMeshEditor->RemoveNodes(anArrayOfIdeces.inout());
+      aResult = aMeshEditor->RemoveNodes(anArrayOfIdeces.in());
     } catch (const SALOME::SALOME_Exception& S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
       myEditCurrentArgument->clear();
     } catch (const SALOME::SALOME_Exception& S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
       myEditCurrentArgument->clear();
@@ -246,6 +247,7 @@ void SMESHGUI_RemoveNodesDlg::ClickOnApply()
       myEditCurrentArgument->clear();
       mySelector->ClearIndex();
       SMESH::UpdateView();
       myEditCurrentArgument->clear();
       mySelector->ClearIndex();
       SMESH::UpdateView();
+      SMESHGUI::Modified();
     }
 
     SMESH::SetPointRepresentation(true);
     }
 
     SMESH::SetPointRepresentation(true);
@@ -316,9 +318,6 @@ void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText)
 
   myNbOkNodes = 0;
 
 
   myNbOkNodes = 0;
 
-  buttonOk->setEnabled(false);
-  buttonApply->setEnabled(false);
-
   // hilight entered nodes
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
   // hilight entered nodes
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
@@ -340,12 +339,8 @@ void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText)
     }
   }
 
     }
   }
 
-  if (myNbOkNodes) {
-    buttonOk->setEnabled(true);
-    buttonApply->setEnabled(true);
-  }
-
   myBusy = false;
   myBusy = false;
+  updateButtons();
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -354,56 +349,51 @@ void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText)
 //=================================================================================
 void SMESHGUI_RemoveNodesDlg::SelectionIntoArgument()
 {
 //=================================================================================
 void SMESHGUI_RemoveNodesDlg::SelectionIntoArgument()
 {
-  if (myBusy) return;
-
+  if (myBusy) return;                                  // busy
+  if (myFilterDlg && myFilterDlg->isVisible()) return; // filter dlg active
+  if (!GroupButtons->isEnabled()) return;              // inactive
+    
   // clear
 
   // clear
 
-  myNbOkNodes = false;
+  myNbOkNodes = 0;
   myActor = 0;
 
   myBusy = true;
   myEditCurrentArgument->setText("");
   myBusy = false;
 
   myActor = 0;
 
   myBusy = true;
   myEditCurrentArgument->setText("");
   myBusy = false;
 
-  if (!GroupButtons->isEnabled()) // inactive
-    return;
-
-  buttonOk->setEnabled(false);
-  buttonApply->setEnabled(false);
-
   // get selected mesh
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
 
   int nbSel = aList.Extent();
   // get selected mesh
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
 
   int nbSel = aList.Extent();
-  if (nbSel != 1)
-    return;
-
-  Handle(SALOME_InteractiveObject) anIO = aList.First();
-  myMesh = SMESH::GetMeshByIO(anIO);
-  if (myMesh->_is_nil())
-    return;
-
-  myActor = SMESH::FindActorByEntry(anIO->getEntry());
-  if (!myActor)
-    return;
-
-  // get selected nodes
-
-  QString aString = "";
-  int nbNodes = SMESH::GetNameOfSelectedNodes(mySelector,anIO,aString);
-  if(nbNodes < 1)
-    return;
-  myBusy = true;
-  myEditCurrentArgument->setText(aString);
-  myBusy = false;
-
-  // OK
-
-  myNbOkNodes = true;
-
-  buttonOk->setEnabled(true);
-  buttonApply->setEnabled(true);
+  if (nbSel == 1) {
+
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    myMesh = SMESH::GetMeshByIO(anIO);
+
+    if (!myMesh->_is_nil()) {
+
+      myActor = SMESH::FindActorByEntry(anIO->getEntry());
+      if (myActor) {
+
+       // get selected nodes
+       QString aString = "";
+       int nbNodes = SMESH::GetNameOfSelectedNodes(mySelector,anIO,aString);
+       if (nbNodes > 0) {
+         myBusy = true;
+         myEditCurrentArgument->setText(aString);
+         myBusy = false;
+         
+         // OK
+         
+         myNbOkNodes = nbNodes;
+       } // if (nbNodes > 0)
+      } // if (myActor)
+    } // if (!myMesh->_is_nil())
+  } // if (nbSel == 1)
+
+  updateButtons();       
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -530,3 +520,13 @@ void SMESHGUI_RemoveNodesDlg::setFilters()
 
   myFilterDlg->show();
 }
 
   myFilterDlg->show();
 }
+
+//=================================================================================
+// function : updateButtons
+// purpose  : enable / disable control buttons
+//=================================================================================
+void SMESHGUI_RemoveNodesDlg::updateButtons()
+{
+  buttonOk->setEnabled(myNbOkNodes > 0);
+  buttonApply->setEnabled(myNbOkNodes > 0);
+}
index 866757ef50f1e2b8129eca11ad14b85e524f9cfa..2ce8f9e7e3e960eaa1a597d676ab50de352e4e0c 100644 (file)
@@ -107,6 +107,7 @@ private slots:
   void                   ActivateThisDialog();
   void                   onTextChange( const QString& );
   void                   setFilters();
   void                   ActivateThisDialog();
   void                   onTextChange( const QString& );
   void                   setFilters();
+  void                   updateButtons();
 };
 
 #endif // SMESHGUI_REMOVENODESDLG_H
 };
 
 #endif // SMESHGUI_REMOVENODESDLG_H
index 5ebfe50623084aaebec5e1b164da40b157d28d90..67a1a422025a4070d494973583214bacca978d44 100644 (file)
@@ -243,6 +243,7 @@ void SMESHGUI_RenumberingDlg::ClickOnApply()
     
     //mySelectionMgr->clearSelected();
     SMESH::UpdateView();
     
     //mySelectionMgr->clearSelected();
     SMESH::UpdateView();
+    SMESHGUI::Modified();
   }
 }
 
   }
 }
 
index f6edc503fbbb4ad0f4b1171878485de2d49fdd41..d292d2996c54430631da779c982d23cacda11232 100644 (file)
@@ -146,6 +146,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule )
 
   LineEditElements  = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
 
   LineEditElements  = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -557,6 +558,8 @@ bool SMESHGUI_RevolutionDlg::ClickOnApply()
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
 
   return true;
   }
 
   return true;
index f2855bb7a1c23ebd29209c85bbf747bd13096b4c..1dc48b0b33adc99cc2d8c7ef33072c030ea36bc3 100644 (file)
@@ -134,6 +134,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule )
   SelectElementsButton->setIcon(image1);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
   SelectElementsButton->setIcon(image1);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -456,6 +457,8 @@ bool SMESHGUI_RotationDlg::ClickOnApply()
     Init(false);
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     Init(false);
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
 
   return true;
   }
 
   return true;
index 97976bf046638c157c566fbaa6b5f3a2cd492e1f..b9a5c1a0bb341770bd62a35b8691f8d31aa109c9 100644 (file)
@@ -154,6 +154,7 @@ SMESHGUI_ScaleDlg::SMESHGUI_ScaleDlg( SMESHGUI* theModule )
   SelectElementsButton->setIcon(image2);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
   SelectElementsButton->setIcon(image2);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -526,6 +527,8 @@ bool SMESHGUI_ScaleDlg::ClickOnApply()
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
   
   return true;
   }
   
   return true;
index cd63b5e12c463f8a34435acc97abb6fd69a6269d..cc8fbf13686c2e45099423d6a22a794e0cf8d488 100644 (file)
@@ -533,6 +533,8 @@ bool SMESHGUI_SewingDlg::ClickOnApply()
 
       Init();
       ConstructorsClicked(GetConstructorId());
 
       Init();
       ConstructorsClicked(GetConstructorId());
+
+      SMESHGUI::Modified();
     }
   }
 
     }
   }
 
index bb73bcbd5218fbd716ecdcc840b206654c731be1..d005010e438afbb0a81d254a49f55bbb6ea2a813 100755 (executable)
@@ -514,6 +514,7 @@ bool SMESHGUI_SingleEditDlg::onApply()
     mySelectionMgr->setSelectedObjects(aList, false);
     onSelectionDone();
     SMESH::UpdateView();
     mySelectionMgr->setSelectedObjects(aList, false);
     onSelectionDone();
     SMESH::UpdateView();
+    SMESHGUI::Modified();
   }
 
   return aResult;
   }
 
   return aResult;
index 3b83752eb5c1527da99d5cd4aa3784380eb804ad..be2178dbb40557768d5dc032c67c172583e1573c 100644 (file)
@@ -138,6 +138,7 @@ SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule )
 
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
 
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myElemFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myElemFilterBtn,   SIGNAL(clicked()), this, SLOT(setElemFilters()));
 
   myElemFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myElemFilterBtn,   SIGNAL(clicked()), this, SLOT(setElemFilters()));
 
@@ -152,6 +153,7 @@ SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule )
 
   LineEditNodes  = new QLineEdit(GroupArguments);
   LineEditNodes->setValidator(myIdValidator);
 
   LineEditNodes  = new QLineEdit(GroupArguments);
   LineEditNodes->setValidator(myIdValidator);
+  LineEditNodes->setMaxLength(-1);
   QPushButton* filterNodeBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(filterNodeBtn,   SIGNAL(clicked()), this, SLOT(setNodeFilters()));
 
   QPushButton* filterNodeBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(filterNodeBtn,   SIGNAL(clicked()), this, SLOT(setNodeFilters()));
 
@@ -395,6 +397,7 @@ bool SMESHGUI_SmoothingDlg::ClickOnApply()
       }
 
       SMESH::UpdateView();
       }
 
       SMESH::UpdateView();
+      SMESHGUI::Modified();
       Init();
 
       mySelectedObject = SMESH::SMESH_IDSource::_nil();
       Init();
 
       mySelectedObject = SMESH::SMESH_IDSource::_nil();
index 6fec286e31d9dff88d54e00d0cd4f1ac2513b8d4..2a3562e3d53c581792532aabdfb9b87295bd60c3 100644 (file)
@@ -145,6 +145,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule )
   SelectElementsButton->setIcon(image3);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
   SelectElementsButton->setIcon(image3);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -546,6 +547,8 @@ bool SMESHGUI_SymmetryDlg::ClickOnApply()
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
   return true;
 }
   }
   return true;
 }
index 6b2e2398da7135f1d04a8fb24f08a5ebd13452be..fac987991ed5c76aee77aa51431190f2d8a2e492 100644 (file)
@@ -157,6 +157,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule )
   SelectElementsButton->setIcon(image2);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
   SelectElementsButton->setIcon(image2);
   LineEditElements = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(myIdValidator);
+  LineEditElements->setMaxLength(-1);
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
   myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
   connect(myFilterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
 
@@ -530,6 +531,8 @@ bool SMESHGUI_TranslationDlg::ClickOnApply()
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
     ConstructorsClicked(GetConstructorId());
     mySelectedObject = SMESH::SMESH_IDSource::_nil();
     SelectionIntoArgument();
+
+    SMESHGUI::Modified();
   }
   
   return true;
   }
   
   return true;
index 5c78a9d13397d70b6e9039981e51a80ee56e3bcf..02791962750009867698b4c7ff95c7bd4b7971dc 100755 (executable)
@@ -130,6 +130,7 @@ SMESHGUI_WhatIsDlg::SMESHGUI_WhatIsDlg( SMESHGUI* theModule )
 
   LineEditElements  = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this));
 
   LineEditElements  = new QLineEdit(GroupArguments);
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this));
+  LineEditElements->setMaxLength(-1);
   GroupArgumentsLayout->addWidget(LineEditElements, 0, 1);
 
   // information text browser
   GroupArgumentsLayout->addWidget(LineEditElements, 0, 1);
 
   // information text browser
index 3c50545900e24c6fc0c796d8d3b1f227d4af9749..2a2784e9125eead981d615d9e266da3693fcb8b0 100644 (file)
@@ -109,7 +109,7 @@ c_l.append(baseHexa4)
 
 c_cpd = MakeCompound(c_l)
 c_glu = MakeGlueFaces(c_cpd, 1.e-5)
 
 c_cpd = MakeCompound(c_l)
 c_glu = MakeGlueFaces(c_cpd, 1.e-5)
-piece = RemoveExtraEdges(c_glu)
+piece = RemoveExtraEdges(c_glu, doUnionFaces=True)
 
 # Add in study
 # ------------
 
 # Add in study
 # ------------
index 6ef4f6c3d44106e182890e50fc1b74b376a752e7..50f8d07a8c5c256ad1a1b44629ed0f7e9b63f427 100644 (file)
@@ -72,7 +72,7 @@ p_tools.append(MakePlane(p_centre, MakeVectorDXDYDZ(-g_largeur, 0, g_longueur),
 
 p_part = MakePartition([c_piece], p_tools, [], [], ShapeType["SOLID"])
 
 
 p_part = MakePartition([c_piece], p_tools, [], [], ShapeType["SOLID"])
 
-p_blocs = RemoveExtraEdges(p_part)
+p_blocs = RemoveExtraEdges(p_part, doUnionFaces=True)
 piece   = MakeGlueFaces(p_blocs, 1.e-5)
 
 # Add in study
 piece   = MakeGlueFaces(p_blocs, 1.e-5)
 
 # Add in study
index 6b2407af9673b36a36b123049aaa586a575e04eb..3e5f6712b99ed08b1287b9718313f8afa2d989ea 100644 (file)
@@ -85,7 +85,7 @@ p_tools.append(MakePlane(e_centre, MakeVectorDXDYDZ(-1, 0, 1), g_trim))
 
 p_part = MakePartition([e_blo1, e_blo2, e_blo3], p_tools, [], [], ShapeType["SOLID"])
 
 
 p_part = MakePartition([e_blo1, e_blo2, e_blo3], p_tools, [], [], ShapeType["SOLID"])
 
-p_element = RemoveExtraEdges(p_part)
+p_element = RemoveExtraEdges(p_part, doUnionFaces=True)
 
 # Grid and glue
 # -------------
 
 # Grid and glue
 # -------------
index c1108065734c10399e5f3212218f32ac4a1d5507..24ae387f5ca3ec777151729d839311c1382d5744 100644 (file)
@@ -206,7 +206,7 @@ blocks.append(full_parts)
 
 piece_cpd = MakeCompound(blocks)
 
 
 piece_cpd = MakeCompound(blocks)
 
-piece_ok = RemoveExtraEdges(piece_cpd)
+piece_ok = RemoveExtraEdges(piece_cpd, doUnionFaces=True)
 
 piece = MakeGlueFaces(piece_ok, 1.e-3)
 
 
 piece = MakeGlueFaces(piece_ok, 1.e-3)
 
index d55c175135fe8ec0ca34496be75d9ccdc143a3bd..24a1e3fa9908b6371221bf9a270e9542a17306ca 100644 (file)
@@ -205,7 +205,7 @@ public: //** Access to member fields **//
 
 private:
 
 
 private:
 
-  bool error(std::string& text, int code = COMPERR_ALGO_FAILED)
+  bool error(const std::string& text, int code = COMPERR_ALGO_FAILED)
   { myError = SMESH_ComputeError::New( code, text ); return false; }
 
   bool error(const SMESH_ComputeErrorPtr& err)
   { myError = SMESH_ComputeError::New( code, text ); return false; }
 
   bool error(const SMESH_ComputeErrorPtr& err)
@@ -987,6 +987,13 @@ bool _QuadFaceGrid::LoadGrid( SMESH_Mesh& mesh )
   if ( !myGrid.empty() )
     return true;
 
   if ( !myGrid.empty() )
     return true;
 
+  SMESHDS_SubMesh* faceSubMesh = mesh.GetSubMesh( myFace )->GetSubMeshDS();
+  // check that all faces are quadrangular
+  SMDS_ElemIteratorPtr fIt = faceSubMesh->GetElements();
+  while ( fIt->more() )
+    if ( fIt->next()->NbNodes() % 4 > 0 )
+      return error("Non-quadrangular mesh faces are not allowed on sides of a composite block");
+  
   myIndexer._xSize = 1 + mySides.GetSide( Q_BOTTOM )->GetNbSegments( mesh );
   myIndexer._ySize = 1 + mySides.GetSide( Q_LEFT   )->GetNbSegments( mesh );
 
   myIndexer._xSize = 1 + mySides.GetSide( Q_BOTTOM )->GetNbSegments( mesh );
   myIndexer._ySize = 1 + mySides.GetSide( Q_LEFT   )->GetNbSegments( mesh );
 
@@ -997,8 +1004,6 @@ bool _QuadFaceGrid::LoadGrid( SMESH_Mesh& mesh )
 
   // store the rest nodes row by row
 
 
   // store the rest nodes row by row
 
-  SMESHDS_SubMesh* faceSubMesh = mesh.GetSubMesh( myFace )->GetSubMeshDS();
-
   SMDS_MeshNode dummy(0,0,0);
   const SMDS_MeshElement* firstQuad = &dummy;// most left face above the last row of found nodes
   
   SMDS_MeshNode dummy(0,0,0);
   const SMDS_MeshElement* firstQuad = &dummy;// most left face above the last row of found nodes
   
index 7d972607702a77a23d4e2e3e07834c30f9d18621..036da0ba9bbf4ac6488a46633395eab921ed42e2 100644 (file)
@@ -270,7 +270,7 @@ const vector<UVPtStruct>& StdMeshers_FaceSide::GetUVPtStruct(bool   isXConst,
           const SMDS_MeshNode* node = nItr->next();
           if ( myIgnoreMediumNodes && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
             continue;
           const SMDS_MeshNode* node = nItr->next();
           if ( myIgnoreMediumNodes && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
             continue;
-          double u = helper.GetNodeU( myEdge[i], node, &paramOK );
+          double u = helper.GetNodeU( myEdge[i], node, 0, &paramOK );
           double aLenU = GCPnts_AbscissaPoint::Length
             ( const_cast<GeomAdaptor_Curve&>( myC3dAdaptor[i]), myFirst[i], u );
           if ( myEdgeLength[i] < aLenU ) // nonregression test "3D_mesh_NETGEN/G6"
           double aLenU = GCPnts_AbscissaPoint::Length
             ( const_cast<GeomAdaptor_Curve&>( myC3dAdaptor[i]), myFirst[i], u );
           if ( myEdgeLength[i] < aLenU ) // nonregression test "3D_mesh_NETGEN/G6"
@@ -288,7 +288,7 @@ const vector<UVPtStruct>& StdMeshers_FaceSide::GetUVPtStruct(bool   isXConst,
           const SMDS_MeshNode* node = nItr->next();
           if ( myIgnoreMediumNodes && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
             continue;
           const SMDS_MeshNode* node = nItr->next();
           if ( myIgnoreMediumNodes && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
             continue;
-          double u = helper.GetNodeU( myEdge[i], node, &paramOK );
+          double u = helper.GetNodeU( myEdge[i], node, 0, &paramOK );
 
           // paramSize is signed so orientation is taken into account
           double normPar = prevNormPar + r * ( u - myFirst[i] ) / paramSize;
 
           // paramSize is signed so orientation is taken into account
           double normPar = prevNormPar + r * ( u - myFirst[i] ) / paramSize;
index 5e2031c23bb0f37baca3f2bb72ce04404dd342d4..1c0cf5e5bd3f13384896bee228a44ef93443ea93 100644 (file)
@@ -1483,6 +1483,9 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref (SMESH_Mesh &        aMesh,
   const vector<UVPtStruct>& uv_et = quad->side[2]->GetUVPtStruct(true,1 );
   const vector<UVPtStruct>& uv_el = quad->side[3]->GetUVPtStruct(false,0);
 
   const vector<UVPtStruct>& uv_et = quad->side[2]->GetUVPtStruct(true,1 );
   const vector<UVPtStruct>& uv_el = quad->side[3]->GetUVPtStruct(false,0);
 
+  if ( uv_eb.size() != nb || uv_er.size() != nr || uv_et.size() != nt || uv_el.size() != nl )
+    return error( COMPERR_BAD_INPUT_MESH );
+
   // arrays for normalized params
   //cout<<"Dump B:"<<endl;
   TColStd_SequenceOfReal npb, npr, npt, npl;
   // arrays for normalized params
   //cout<<"Dump B:"<<endl;
   TColStd_SequenceOfReal npb, npr, npt, npl;
index b3b101afb23997cb9de410761ec028a2092e4bd7..fb493741754333b6b4b9ecb9d0daa7a51014236f 100644 (file)
@@ -50,6 +50,8 @@
 #ifdef WIN32
 # include <algorithm>
 #endif
 #ifdef WIN32
 # include <algorithm>
 #endif
+#include <math.h>
+#include <limits>
 
 #include <Basics_Utils.hxx>
 
 
 #include <Basics_Utils.hxx>
 
@@ -262,6 +264,15 @@ void StdMeshersGUI_DistrPreview::update()
       showError();
       return;
     }
       showError();
       return;
     }
+#ifdef WIN32
+    if ( std::fabs(y[i]) >= HUGE_VAL)
+      y[i] = HUGE_VAL/100.;
+#else
+    if ( isinf(y[i]))
+      y[i] = std::numeric_limits<double>::max()/100.;
+#endif
+//     if ( y[i] > 1e3 )
+//       y[i] = 1e3;
     if( i==0 || y[i]<min_y )
       min_y = y[i];
     if( i==0 || y[i]>max_y )
     if( i==0 || y[i]<min_y )
       min_y = y[i];
     if( i==0 || y[i]>max_y )
index fa4ca57672c8de4829386534e92af38637411b57..da9130846c431ea9119f200bdbe814dd2cd95cb6 100644 (file)
             <source>ICON_SMESH_TREE_ALGO_CompositeSegment_1D</source>
             <translation>mesh_tree_algo_regular.png</translation>
         </message>
             <source>ICON_SMESH_TREE_ALGO_CompositeSegment_1D</source>
             <translation>mesh_tree_algo_regular.png</translation>
         </message>
+       <message>
+            <source>ICON_SMESH_TREE_ALGO_UseExisting_2D</source>
+            <translation>mesh_tree_algo_existing_2D.png</translation>
+        </message>
+       <message>
+            <source>ICON_SMESH_TREE_ALGO_UseExisting_1D</source>
+            <translation>mesh_tree_algo_regular.png</translation>
+        </message>
         <message>
             <source>ICON_SMESH_TREE_ALGO_Hexa_3D</source>
             <translation>mesh_tree_algo_hexa.png</translation>
         <message>
             <source>ICON_SMESH_TREE_ALGO_Hexa_3D</source>
             <translation>mesh_tree_algo_hexa.png</translation>
             <source>ICON_SMESH_TREE_ALGO_Quadrangle_2D</source>
             <translation>mesh_tree_algo_quad.png</translation>
         </message>
             <source>ICON_SMESH_TREE_ALGO_Quadrangle_2D</source>
             <translation>mesh_tree_algo_quad.png</translation>
         </message>
+       <message>
+            <source>ICON_SMESH_TREE_ALGO_RadialQuadrangle_1D2D</source>
+            <translation>mesh_tree_algo_radial_quadrangle_1D2D.png</translation>
+        </message>
+       <message>
+            <source>ICON_SMESH_TREE_ALGO_Prism_3D</source>
+            <translation>mesh_tree_algo_prism.png</translation>
+        </message>
         <message>
             <source>ICON_SMESH_TREE_ALGO_RadialPrism_3D</source>
             <translation>mesh_tree_algo_radial_prism.png</translation>
         <message>
             <source>ICON_SMESH_TREE_ALGO_RadialPrism_3D</source>
             <translation>mesh_tree_algo_radial_prism.png</translation>
         </message>
         <message>
             <source>ICON_SMESH_TREE_ALGO_SegmentAroundVertex_0D</source>
         </message>
         <message>
             <source>ICON_SMESH_TREE_ALGO_SegmentAroundVertex_0D</source>
-            <translation>mesh_tree_algo_regular.png</translation>
+            <translation>mesh_tree_algo_0D.png</translation>
         </message>
         <message>
             <source>ICON_SMESH_TREE_HYPO_Arithmetic1D</source>
         </message>
         <message>
             <source>ICON_SMESH_TREE_HYPO_Arithmetic1D</source>