Salome HOME
Merge V9_dev branch into master
authorrnv <rnv@opencascade.com>
Thu, 14 Jun 2018 11:56:19 +0000 (14:56 +0300)
committerrnv <rnv@opencascade.com>
Thu, 14 Jun 2018 11:56:19 +0000 (14:56 +0300)
676 files changed:
CMakeLists.txt
doc/salome/examples/CTestTestfileInstall.cmake
doc/salome/examples/defining_hypotheses_ex13.py
doc/salome/examples/modifying_meshes_split_vol.py [new file with mode: 0644]
doc/salome/examples/radial_prism_3d_algo.py [new file with mode: 0644]
doc/salome/examples/tests.set
doc/salome/gui/SMESH/CMakeLists.txt
doc/salome/gui/SMESH/collect_mesh_methods.py
doc/salome/gui/SMESH/conf.py.in [new file with mode: 0644]
doc/salome/gui/SMESH/doxyfile.in [deleted file]
doc/salome/gui/SMESH/doxyfile_py.in [deleted file]
doc/salome/gui/SMESH/images/smoothing1.png [changed mode: 0755->0644]
doc/salome/gui/SMESH/images/smoothing2.png [changed mode: 0755->0644]
doc/salome/gui/SMESH/input/1d_meshing_hypo.doc [deleted file]
doc/salome/gui/SMESH/input/1d_meshing_hypo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/2d_meshing_hypo.doc [deleted file]
doc/salome/gui/SMESH/input/2d_meshing_hypo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/StdMeshersBuilder.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_filters.doc [deleted file]
doc/salome/gui/SMESH/input/about_filters.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_hypo.doc [deleted file]
doc/salome/gui/SMESH/input/about_hypo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/about_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_quality_controls.doc [deleted file]
doc/salome/gui/SMESH/input/about_quality_controls.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc [deleted file]
doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/adding_quadratic_elements.doc [deleted file]
doc/salome/gui/SMESH/input/adding_quadratic_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/additional_hypo.doc [deleted file]
doc/salome/gui/SMESH/input/additional_hypo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/area.doc [deleted file]
doc/salome/gui/SMESH/input/area.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/aspect_ratio.doc [deleted file]
doc/salome/gui/SMESH/input/aspect_ratio.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/aspect_ratio_3d.doc [deleted file]
doc/salome/gui/SMESH/input/aspect_ratio_3d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/bare_border_face.doc [deleted file]
doc/salome/gui/SMESH/input/bare_border_face.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/bare_border_volumes.doc [deleted file]
doc/salome/gui/SMESH/input/bare_border_volumes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/basic_meshing_algos.doc [deleted file]
doc/salome/gui/SMESH/input/basic_meshing_algos.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/borders_at_multi_connection.doc [deleted file]
doc/salome/gui/SMESH/input/borders_at_multi_connection.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc [deleted file]
doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/building_compounds.doc [deleted file]
doc/salome/gui/SMESH/input/building_compounds.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/cartesian_algo.doc [deleted file]
doc/salome/gui/SMESH/input/cartesian_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc [deleted file]
doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/clipping.doc [deleted file]
doc/salome/gui/SMESH/input/clipping.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/colors_size.doc [deleted file]
doc/salome/gui/SMESH/input/colors_size.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/connectivity.doc [deleted file]
doc/salome/gui/SMESH/input/connectivity.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/constructing_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/constructing_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/constructing_submeshes.doc [deleted file]
doc/salome/gui/SMESH/input/constructing_submeshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc [deleted file]
doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/copy_mesh.doc [deleted file]
doc/salome/gui/SMESH/input/copy_mesh.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/create_groups_from_geometry.doc [deleted file]
doc/salome/gui/SMESH/input/create_groups_from_geometry.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/creating_groups.doc [deleted file]
doc/salome/gui/SMESH/input/creating_groups.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/cut_mesh_by_plane.doc [deleted file]
doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/cutting_quadrangles.doc [deleted file]
doc/salome/gui/SMESH/input/cutting_quadrangles.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/define_mesh_by_script.doc [deleted file]
doc/salome/gui/SMESH/input/define_mesh_by_script.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/deflection_2d.doc [deleted file]
doc/salome/gui/SMESH/input/deleting_groups.doc [deleted file]
doc/salome/gui/SMESH/input/deleting_groups.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc [deleted file]
doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/display_entity.doc [deleted file]
doc/salome/gui/SMESH/input/display_entity.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/display_mode.doc [deleted file]
doc/salome/gui/SMESH/input/display_mode.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/double_elements_control.doc [deleted file]
doc/salome/gui/SMESH/input/double_elements_control.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/double_nodes_control.doc [deleted file]
doc/salome/gui/SMESH/input/double_nodes_control.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/double_nodes_page.doc [deleted file]
doc/salome/gui/SMESH/input/double_nodes_page.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/editing_groups.doc [deleted file]
doc/salome/gui/SMESH/input/editing_groups.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/editing_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/editing_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/extrusion.doc [deleted file]
doc/salome/gui/SMESH/input/extrusion.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/extrusion_along_path.doc [deleted file]
doc/salome/gui/SMESH/input/extrusion_along_path.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/find_element_by_point.doc [deleted file]
doc/salome/gui/SMESH/input/find_element_by_point.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_borders.doc [deleted file]
doc/salome/gui/SMESH/input/free_borders.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_edges.doc [deleted file]
doc/salome/gui/SMESH/input/free_edges.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_faces.doc [deleted file]
doc/salome/gui/SMESH/input/free_faces.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_nodes.doc [deleted file]
doc/salome/gui/SMESH/input/free_nodes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/generate_flat_elements.doc [deleted file]
doc/salome/gui/SMESH/input/generate_flat_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/group_of_underlying_elements.doc [deleted file]
doc/salome/gui/SMESH/input/group_of_underlying_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/grouping_elements.doc [deleted file]
doc/salome/gui/SMESH/input/grouping_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/importing_exporting_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/importing_exporting_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/index.doc [deleted file]
doc/salome/gui/SMESH/input/index.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/length.doc [deleted file]
doc/salome/gui/SMESH/input/length.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/length_2d.doc [deleted file]
doc/salome/gui/SMESH/input/length_2d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc [deleted file]
doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/max_element_length_2d.doc [deleted file]
doc/salome/gui/SMESH/input/max_element_length_2d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/max_element_length_3d.doc [deleted file]
doc/salome/gui/SMESH/input/max_element_length_3d.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/max_element_volume_hypo.doc [deleted file]
doc/salome/gui/SMESH/input/max_element_volume_hypo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/measurements.doc [deleted file]
doc/salome/gui/SMESH/input/measurements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/merging_elements.doc [deleted file]
doc/salome/gui/SMESH/input/merging_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/merging_nodes.doc [deleted file]
doc/salome/gui/SMESH/input/merging_nodes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/mesh_infos.doc [deleted file]
doc/salome/gui/SMESH/input/mesh_infos.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/mesh_preferences.doc [deleted file]
doc/salome/gui/SMESH/input/mesh_preferences.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/mesh_through_point.doc [deleted file]
doc/salome/gui/SMESH/input/mesh_through_point.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/minimum_angle.doc [deleted file]
doc/salome/gui/SMESH/input/minimum_angle.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/modifying_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/modifying_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/modules.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/numbering.doc [deleted file]
doc/salome/gui/SMESH/input/numbering.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/over_constrained_faces.doc [deleted file]
doc/salome/gui/SMESH/input/over_constrained_faces.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/over_constrained_volumes.doc [deleted file]
doc/salome/gui/SMESH/input/over_constrained_volumes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/pattern_mapping.doc [deleted file]
doc/salome/gui/SMESH/input/pattern_mapping.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/point_marker.doc [deleted file]
doc/salome/gui/SMESH/input/point_marker.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/prism_3d_algo.doc [deleted file]
doc/salome/gui/SMESH/input/prism_3d_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/projection_algos.doc [deleted file]
doc/salome/gui/SMESH/input/projection_algos.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/quad_from_ma_algo.doc [deleted file]
doc/salome/gui/SMESH/input/quad_from_ma_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/quad_ijk_algo.doc [deleted file]
doc/salome/gui/SMESH/input/quad_ijk_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/radial_prism_algo.doc [deleted file]
doc/salome/gui/SMESH/input/radial_prism_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc [deleted file]
doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc [deleted file]
doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/reorient_faces.doc [deleted file]
doc/salome/gui/SMESH/input/reorient_faces.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/revolution.doc [deleted file]
doc/salome/gui/SMESH/input/revolution.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/rotation.doc [deleted file]
doc/salome/gui/SMESH/input/rotation.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/scalar_bar.doc [deleted file]
doc/salome/gui/SMESH/input/scalar_bar.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/scale.doc [deleted file]
doc/salome/gui/SMESH/input/scale.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc [deleted file]
doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/selection_filter_library.doc [deleted file]
doc/salome/gui/SMESH/input/selection_filter_library.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/sewing_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/sewing_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/skew.doc [deleted file]
doc/salome/gui/SMESH/input/skew.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smeshBuilder.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smesh_migration.doc [deleted file]
doc/salome/gui/SMESH/input/smesh_migration.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smesh_module.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smeshpy_interface.doc [deleted file]
doc/salome/gui/SMESH/input/smeshpy_interface.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smeshstudytools.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/smoothing.doc [deleted file]
doc/salome/gui/SMESH/input/smoothing.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/split_biquad_to_linear.doc [deleted file]
doc/salome/gui/SMESH/input/split_biquad_to_linear.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/split_to_tetra.doc [deleted file]
doc/salome/gui/SMESH/input/split_to_tetra.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/symmetry.doc [deleted file]
doc/salome/gui/SMESH/input/symmetry.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/taper.doc [deleted file]
doc/salome/gui/SMESH/input/taper.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tools.doc [deleted file]
doc/salome/gui/SMESH/input/tools.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/translation.doc [deleted file]
doc/salome/gui/SMESH/input/translation.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/transparency.doc [deleted file]
doc/salome/gui/SMESH/input/transparency.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_cartesian_algo.doc [deleted file]
doc/salome/gui/SMESH/input/tui_cartesian_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_creating_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/tui_creating_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc [deleted file]
doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_filters.doc [deleted file]
doc/salome/gui/SMESH/input/tui_filters.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_generate_flat_elements.doc [deleted file]
doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_grouping_elements.doc [deleted file]
doc/salome/gui/SMESH/input/tui_grouping_elements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_measurements.doc [deleted file]
doc/salome/gui/SMESH/input/tui_measurements.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_modifying_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/tui_modifying_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_notebook_smesh.doc [deleted file]
doc/salome/gui/SMESH/input/tui_notebook_smesh.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc [deleted file]
doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_quality_controls.doc [deleted file]
doc/salome/gui/SMESH/input/tui_quality_controls.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_transforming_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/tui_transforming_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_use_existing_faces.doc [deleted file]
doc/salome/gui/SMESH/input/tui_use_existing_faces.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_viewing_meshes.doc [deleted file]
doc/salome/gui/SMESH/input/tui_viewing_meshes.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.doc [deleted file]
doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc [deleted file]
doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/uniting_two_triangles.doc [deleted file]
doc/salome/gui/SMESH/input/uniting_two_triangles.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/use_existing_algos.doc [deleted file]
doc/salome/gui/SMESH/input/use_existing_algos.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/using_notebook_smesh_page.doc [deleted file]
doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/using_operations_on_groups.doc [deleted file]
doc/salome/gui/SMESH/input/using_operations_on_groups.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/viewing_meshes_overview.doc [deleted file]
doc/salome/gui/SMESH/input/viewing_meshes_overview.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/volume.doc [deleted file]
doc/salome/gui/SMESH/input/volume.rst [new file with mode: 0644]
doc/salome/gui/SMESH/input/warping.doc [deleted file]
doc/salome/gui/SMESH/input/warping.rst [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/1d_meshing_hypo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/2d_meshing_hypo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_filters.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_hypo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_quality_controls.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_quadratic_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/additional_hypo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/area.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio_3d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_face.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_volumes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/basic_meshing_algos.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/building_compounds.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cartesian_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/clipping.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/colors_size.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/connectivity.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_submeshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/copy_mesh.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/create_groups_from_geometry.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/creating_groups.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cutting_quadrangles.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/define_mesh_by_script.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/deleting_groups.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_entity.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_mode.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_elements_control.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_control.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_page.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_groups.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion_along_path.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/find_element_by_point.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_borders.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_edges.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_faces.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_nodes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/generate_flat_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/group_of_underlying_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/grouping_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/importing_exporting_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/index.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/introduction.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length_2d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_2d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_3d.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_volume_hypo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/measurements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_nodes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_infos.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_preferences.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_through_point.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/minimum_angle.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modifying_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modules.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/numbering.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_faces.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_volumes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/pattern_mapping.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/point_marker.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/prism_3d_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/projection_algos.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/python_api.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_from_ma_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_ijk_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_prism_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/reorient_faces.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/revolution.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/rotation.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scalar_bar.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scale.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/selection_filter_library.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/sewing_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/skew.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smesh_migration.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smeshpy_interface.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smoothing.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_biquad_to_linear.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_to_tetra.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/symmetry.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/taper.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tools.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/translation.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/transparency.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_cartesian_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_creating_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_filters.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_grouping_elements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_measurements.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_modifying_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_notebook_smesh.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_quality_controls.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_transforming_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_use_existing_faces.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_viewing_meshes.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_two_triangles.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/use_existing_algos.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_operations_on_groups.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/viewing_meshes_overview.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/volume.po [new file with mode: 0644]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/warping.po [new file with mode: 0644]
doc/salome/gui/SMESH/merge_mesh_class.py [new file with mode: 0644]
doc/salome/gui/SMESH/static/footer.html [deleted file]
doc/salome/gui/SMESH/static/header.html.in [deleted file]
doc/salome/gui/SMESH/static/header_py.html.in [deleted file]
doc/salome/gui/SMESH/static/salome_extra.css [deleted file]
doc/salome/gui/SMESH/static/switchers.js.in [new file with mode: 0644]
doc/salome/gui/SMESH/templates/layout.html [new file with mode: 0644]
idl/SMESH_Mesh.idl
idl/SMESH_MeshEditor.idl
resources/CMakeLists.txt
resources/SalomeApp.xml.in
resources/mesh_offset.png [new file with mode: 0644]
src/Controls/CMakeLists.txt
src/Controls/SMESH_Controls.cxx
src/Driver/CMakeLists.txt
src/DriverCGNS/CMakeLists.txt
src/DriverCGNS/DriverCGNS_Read.cxx
src/DriverCGNS/DriverCGNS_Write.cxx
src/DriverDAT/CMakeLists.txt
src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx
src/DriverGMF/CMakeLists.txt
src/DriverGMF/DriverGMF_Read.cxx
src/DriverGMF/libmesh5.c
src/DriverMED/CMakeLists.txt
src/DriverMED/DriverMED_Family.cxx
src/DriverMED/DriverMED_Family.h
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_Field.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.h
src/DriverSTL/CMakeLists.txt
src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx
src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx
src/DriverUNV/CMakeLists.txt
src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx
src/DriverUNV/DriverUNV_R_SMDS_Mesh.h
src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx
src/DriverUNV/UNV2417_Structure.hxx
src/MEFISTO2/CMakeLists.txt
src/OBJECT/CMakeLists.txt
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_Actor.h
src/OBJECT/SMESH_ActorDef.h
src/OBJECT/SMESH_Object.cxx
src/PluginUtils/CMakeLists.txt
src/SMDS/CMakeLists.txt
src/SMDS/Notes [deleted file]
src/SMDS/ObjectPool.hxx
src/SMDS/SMDS_BallElement.cxx
src/SMDS/SMDS_BallElement.hxx
src/SMDS/SMDS_CellOfNodes.cxx [new file with mode: 0644]
src/SMDS/SMDS_CellOfNodes.hxx [new file with mode: 0644]
src/SMDS/SMDS_Downward.cxx
src/SMDS/SMDS_EdgePosition.cxx [deleted file]
src/SMDS/SMDS_EdgePosition.hxx
src/SMDS/SMDS_ElementFactory.cxx [new file with mode: 0644]
src/SMDS/SMDS_ElementFactory.hxx [new file with mode: 0644]
src/SMDS/SMDS_ElementHolder.cxx [new file with mode: 0644]
src/SMDS/SMDS_ElementHolder.hxx [new file with mode: 0644]
src/SMDS/SMDS_FaceOfEdges.cxx [deleted file]
src/SMDS/SMDS_FaceOfEdges.hxx [deleted file]
src/SMDS/SMDS_FaceOfNodes.cxx
src/SMDS/SMDS_FaceOfNodes.hxx
src/SMDS/SMDS_FacePosition.cxx
src/SMDS/SMDS_FacePosition.hxx
src/SMDS/SMDS_Iterator.hxx
src/SMDS/SMDS_IteratorOfElements.cxx [deleted file]
src/SMDS/SMDS_IteratorOfElements.hxx [deleted file]
src/SMDS/SMDS_LinearEdge.cxx
src/SMDS/SMDS_LinearEdge.hxx
src/SMDS/SMDS_Mesh.cxx
src/SMDS/SMDS_Mesh.hxx
src/SMDS/SMDS_Mesh0DElement.cxx [deleted file]
src/SMDS/SMDS_Mesh0DElement.hxx
src/SMDS/SMDS_MeshCell.cxx
src/SMDS/SMDS_MeshCell.hxx
src/SMDS/SMDS_MeshEdge.cxx [deleted file]
src/SMDS/SMDS_MeshEdge.hxx
src/SMDS/SMDS_MeshElement.cxx
src/SMDS/SMDS_MeshElement.hxx
src/SMDS/SMDS_MeshElementIDFactory.cxx [deleted file]
src/SMDS/SMDS_MeshElementIDFactory.hxx [deleted file]
src/SMDS/SMDS_MeshFace.cxx [deleted file]
src/SMDS/SMDS_MeshFace.hxx
src/SMDS/SMDS_MeshGroup.cxx
src/SMDS/SMDS_MeshGroup.hxx
src/SMDS/SMDS_MeshIDFactory.cxx [deleted file]
src/SMDS/SMDS_MeshIDFactory.hxx [deleted file]
src/SMDS/SMDS_MeshNode.cxx
src/SMDS/SMDS_MeshNode.hxx
src/SMDS/SMDS_MeshNodeIDFactory.cxx [deleted file]
src/SMDS/SMDS_MeshNodeIDFactory.hxx [deleted file]
src/SMDS/SMDS_MeshVolume.cxx
src/SMDS/SMDS_MeshVolume.hxx
src/SMDS/SMDS_PolygonalFaceOfNodes.cxx
src/SMDS/SMDS_PolygonalFaceOfNodes.hxx
src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx [deleted file]
src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx [deleted file]
src/SMDS/SMDS_Position.cxx [deleted file]
src/SMDS/SMDS_Position.hxx
src/SMDS/SMDS_QuadraticEdge.cxx [deleted file]
src/SMDS/SMDS_QuadraticEdge.hxx [deleted file]
src/SMDS/SMDS_QuadraticFaceOfNodes.cxx [deleted file]
src/SMDS/SMDS_QuadraticFaceOfNodes.hxx [deleted file]
src/SMDS/SMDS_QuadraticVolumeOfNodes.cxx [deleted file]
src/SMDS/SMDS_QuadraticVolumeOfNodes.hxx [deleted file]
src/SMDS/SMDS_SpacePosition.cxx
src/SMDS/SMDS_SpacePosition.hxx
src/SMDS/SMDS_StdIterator.hxx
src/SMDS/SMDS_UnstructuredGrid.cxx
src/SMDS/SMDS_UnstructuredGrid.hxx
src/SMDS/SMDS_VertexPosition.cxx [deleted file]
src/SMDS/SMDS_VertexPosition.hxx
src/SMDS/SMDS_VolumeOfFaces.cxx [deleted file]
src/SMDS/SMDS_VolumeOfFaces.hxx [deleted file]
src/SMDS/SMDS_VolumeOfNodes.cxx
src/SMDS/SMDS_VolumeOfNodes.hxx
src/SMDS/SMDS_VolumeTool.cxx
src/SMDS/SMDS_VolumeTool.hxx
src/SMDS/SMDS_VtkCellIterator.cxx
src/SMDS/SMDS_VtkCellIterator.hxx
src/SMDS/SMDS_VtkEdge.cxx [deleted file]
src/SMDS/SMDS_VtkEdge.hxx [deleted file]
src/SMDS/SMDS_VtkFace.cxx [deleted file]
src/SMDS/SMDS_VtkFace.hxx [deleted file]
src/SMDS/SMDS_VtkVolume.cxx [deleted file]
src/SMDS/SMDS_VtkVolume.hxx [deleted file]
src/SMESH/CMakeLists.txt
src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_HypoFilter.cxx
src/SMESH/SMESH_Hypothesis.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx
src/SMESH/SMESH_MesherHelper.cxx
src/SMESH/SMESH_Pattern.cxx
src/SMESH/SMESH_ProxyMesh.cxx
src/SMESH/SMESH_ProxyMesh.hxx
src/SMESH/SMESH_subMesh.cxx
src/SMESH/SMESH_subMesh.hxx
src/SMESHClient/CMakeLists.txt
src/SMESHClient/SMESH_Client.cxx
src/SMESHDS/CMakeLists.txt
src/SMESHDS/SMESHDS_Group.cxx
src/SMESHDS/SMESHDS_GroupOnFilter.cxx
src/SMESHDS/SMESHDS_GroupOnFilter.hxx
src/SMESHDS/SMESHDS_Mesh.cxx
src/SMESHDS/SMESHDS_Mesh.hxx
src/SMESHDS/SMESHDS_SubMesh.cxx
src/SMESHDS/SMESHDS_SubMesh.hxx
src/SMESHFiltersSelection/CMakeLists.txt
src/SMESHGUI/CMakeLists.txt
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx
src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.cxx
src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx
src/SMESHGUI/SMESHGUI_FindElemByPointDlg.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx
src/SMESHGUI/SMESHGUI_Hypotheses.cxx
src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_Measurements.cxx
src/SMESHGUI/SMESHGUI_MergeDlg.cxx
src/SMESHGUI/SMESHGUI_MeshDlg.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/SMESHGUI/SMESHGUI_MeshOp.cxx
src/SMESHGUI/SMESHGUI_MeshOrderDlg.cxx
src/SMESHGUI/SMESHGUI_MeshOrderDlg.h
src/SMESHGUI/SMESHGUI_MeshOrderOp.cxx
src/SMESHGUI/SMESHGUI_MeshOrderOp.h
src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_OffsetDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_OffsetDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Operation.h
src/SMESHGUI/SMESHGUI_Operations.h
src/SMESHGUI/SMESHGUI_PreVisualObj.cxx
src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx
src/SMESHGUI/SMESHGUI_PropertiesDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx
src/SMESHGUI/SMESHGUI_ReorientFacesDlg.cxx
src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx
src/SMESHGUI/SMESHGUI_RotationDlg.cxx
src/SMESHGUI/SMESHGUI_ScaleDlg.cxx
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_SelectionOp.cxx
src/SMESHGUI/SMESHGUI_SelectionOp.h
src/SMESHGUI/SMESHGUI_SewingDlg.cxx
src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx
src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx
src/SMESHGUI/SMESHGUI_SplitBiQuad.cxx
src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx
src/SMESHGUI/SMESHGUI_TranslationDlg.cxx
src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.h
src/SMESHGUI/SMESHGUI_XmlHandler.cxx
src/SMESHGUI/SMESH_images.ts
src/SMESHGUI/SMESH_msg_en.ts
src/SMESHGUI/SMESH_msg_fr.ts
src/SMESHGUI/SMESH_msg_ja.ts
src/SMESHUtils/CMakeLists.txt
src/SMESHUtils/SMESH_ComputeError.hxx
src/SMESHUtils/SMESH_FillHole.cxx
src/SMESHUtils/SMESH_FreeBorders.cxx
src/SMESHUtils/SMESH_MAT2d.hxx
src/SMESHUtils/SMESH_MeshAlgos.cxx
src/SMESHUtils/SMESH_MeshAlgos.hxx
src/SMESHUtils/SMESH_OctreeNode.cxx
src/SMESHUtils/SMESH_OctreeNode.hxx
src/SMESHUtils/SMESH_Offset.cxx [new file with mode: 0644]
src/SMESHUtils/SMESH_Tree.hxx
src/SMESHUtils/SMESH_Triangulate.cxx [new file with mode: 0644]
src/SMESHUtils/SMESH_Triangulate.hxx [new file with mode: 0644]
src/SMESHUtils/SMESH_TryCatch.cxx
src/SMESHUtils/SMESH_TypeDefs.hxx
src/SMESH_I/CMakeLists.txt
src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx
src/SMESH_I/SMESH_Gen_i_1.cxx
src/SMESH_I/SMESH_Measurements_i.cxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_MeshEditor_i.hxx
src/SMESH_I/SMESH_MeshPartDS.hxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_PreMeshInfo.cxx
src/SMESH_I/SMESH_PythonDump.hxx
src/SMESH_SWIG/StdMeshersBuilder.py
src/SMESH_SWIG/smeshBuilder.py
src/SMESH_SWIG/smesh_algorithm.py
src/SMESH_SWIG_WITHIHM/CMakeLists.txt
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
src/StdMeshers/CMakeLists.txt
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
src/StdMeshers/StdMeshers_FaceSide.cxx
src/StdMeshers/StdMeshers_FaceSide.hxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.cxx
src/StdMeshers/StdMeshers_Import_1D2D.cxx
src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
src/StdMeshers/StdMeshers_Penta_3D.cxx
src/StdMeshers/StdMeshers_Prism_3D.cxx
src/StdMeshers/StdMeshers_ProjectionUtils.cxx
src/StdMeshers/StdMeshers_Projection_1D2D.cxx
src/StdMeshers/StdMeshers_Projection_2D.cxx
src/StdMeshers/StdMeshers_Projection_3D.cxx
src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cxx
src/StdMeshers/StdMeshers_Quadrangle_2D.cxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cxx
src/StdMeshers/StdMeshers_ViscousLayers.cxx
src/StdMeshers/StdMeshers_ViscousLayers2D.cxx
src/StdMeshersGUI/CMakeLists.txt
src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx
src/StdMeshers_I/CMakeLists.txt
src/Tools/CMakeLists.txt
src/Tools/MGCleanerPlug/MGCleanerMonPlugDialog.py
src/Tools/MacMesh/MacMesh/PublishGroups.py
src/Tools/YamsPlug/doc/Advanced_params.rst
src/Tools/YamsPlug/doc/Mandatory_params.rst
src/Tools/padder/doc/CMakeLists.txt
src/Tools/padder/doc/doxyfile.in
src/Tools/padder/doc/static/footer.html [new file with mode: 0755]
src/Tools/padder/doc/static/header.html.in [new file with mode: 0755]
src/Tools/padder/doc/static/salome_extra.css [new file with mode: 0644]
src/Tools/padder/meshjob/impl/CMakeLists.txt
src/Tools/padder/spadderpy/gui/plugindialog.py

index b207ae53e6f982c57d1ec91f96db9a366da3fd14..8e28516e7e2930582de7ae892174f1d31b715047 100755 (executable)
@@ -19,6 +19,8 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
 PROJECT(SalomeSMESH C CXX)
 
+INCLUDE(CMakeDependentOption)
+
 # Ensure a proper linker behavior:
 CMAKE_POLICY(SET CMP0003 NEW)
 IF(WIN32)
@@ -31,7 +33,7 @@ ENDIF(WIN32)
 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
 
 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 8)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 4)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 5)
 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
 SET(${PROJECT_NAME_UC}_VERSION
   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
@@ -78,6 +80,8 @@ OPTION(SALOME_BUILD_GUI            "Enable GUI" ON)
 OPTION(SALOME_SMESH_USE_CGNS       "Enable import/export to CGNS format" OFF)
 OPTION(SALOME_SMESH_USE_TBB        "Enable parallel computation" OFF)
 OPTION(SALOME_SMESH_DYNLOAD_LOCAL  "Load plug-ins' symbols locally (Linux only)" ON)
+CMAKE_DEPENDENT_OPTION(SALOME_SMESH_BUILD_FRENCH_DOC "Generate SALOME SMESH French documentation" OFF
+                       "SALOME_BUILD_DOC" OFF)
 
 IF(SALOME_SMESH_DYNLOAD_LOCAL)
   ADD_DEFINITIONS(-DDYNLOAD_LOCAL)
@@ -128,6 +132,7 @@ IF(SALOME_BUILD_TESTS)
 ENDIF()
 IF(SALOME_BUILD_DOC)
   FIND_PACKAGE(SalomeDoxygen)
+  SET(Sphinx_EXTENSIONS sphinxcontrib.napoleon)
   FIND_PACKAGE(SalomeSphinx)
   SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
   SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
@@ -191,7 +196,7 @@ ENDIF(EXISTS ${GEOM_ROOT_DIR})
 # VTK is obligatiry for the SMESH
 FIND_PACKAGE(SalomeVTK REQUIRED)
 
-FIND_PACKAGE(SalomeCAS REQUIRED) 
+FIND_PACKAGE(SalomeOpenCASCADE REQUIRED) 
 
 IF(SALOME_SMESH_USE_CGNS)
   FIND_PACKAGE(SalomeCGNS)
index c44ec0c5738b30c701bd412a612b7ac9ce1f35e8..a6bd0df5e6ac470793ac94b3752bb97da96d5953 100644 (file)
@@ -19,7 +19,7 @@
 
 INCLUDE(tests.set)
 
-SET(SALOME_TEST_DRIVER "$ENV{ABSOLUTE_APPLI_PATH}/bin/salome/appliskel/salome_test_driver.py")
+SET(SALOME_TEST_DRIVER "$ENV{KERNEL_ROOT_DIR}/bin/salome/appliskel/salome_test_driver.py")
 SET(COMPONENT_NAME SMESH)
 SET(TIMEOUT        300)
 
index 0bcdcf60a2bc2b777cf8576d8c4fdcf2f743b0fd..e952460016a7f4ef6d1eb14a414693ad1dd05d8d 100644 (file)
@@ -25,15 +25,18 @@ radial_Quad_algo = mesh.Quadrangle(algo=smeshBuilder.RADIAL_QUAD)
 
 # The Radial Quadrange algorithm can work without any hypothesis
 # In this case it uses "Default Nb of Segments" preferences parameter to discretize edges
+# So by default there will be 15 segments in both radial and circular directions
 mesh.Compute()
 
 # 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
+# So that there will be 5 radial layers and 10 circular segments
 global_Nb_Segments = mesh.Segment().NumberOfSegments(5)
 local_Nb_Segments  = mesh.Segment(circle).NumberOfSegments(10)
 mesh.Compute()
 
 # Define own parameters of Radial Quadrange algorithm
+# The number of radial layers will be 4
 radial_Quad_algo.NumberOfLayers( 4 )
 mesh.Compute()
diff --git a/doc/salome/examples/modifying_meshes_split_vol.py b/doc/salome/examples/modifying_meshes_split_vol.py
new file mode 100644 (file)
index 0000000..113aac3
--- /dev/null
@@ -0,0 +1,19 @@
+# Split volumic elements into tetrahedrons
+
+import salome
+salome.salome_init()
+
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New(salome.myStudy)
+
+# mesh a hexahedral mesh
+box = geompy.MakeBoxDXDYDZ (1, 1, 1 )
+mesh = smesh.Mesh( box )
+mesh.AutomaticHexahedralization(0)
+print("Nb volumes mesh: %s" % mesh.NbHexas())
+
+# split each hexahedron into 6 tetrahedra
+mesh.SplitVolumesIntoTetra( mesh, smesh.Hex_6Tet )
+print("Nb volumes mesh: %s" % mesh.NbTetras())
diff --git a/doc/salome/examples/radial_prism_3d_algo.py b/doc/salome/examples/radial_prism_3d_algo.py
new file mode 100644 (file)
index 0000000..39b2607
--- /dev/null
@@ -0,0 +1,36 @@
+# Usage of Radial Prism 3D meshing algorithm
+
+import salome
+salome.salome_init()
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+import SMESH
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New(salome.myStudy)
+
+# Create geometry: hollow sphere
+
+sphere_1 = geompy.MakeSphereR( 100 )
+sphere_2 = geompy.MakeSphereR( 50 )
+
+hollow_sphere = geompy.MakeCut( sphere_1, sphere_2, theName="hollow sphere")
+
+faces = geompy.ExtractShapes( hollow_sphere, geompy.ShapeType["FACE"] )
+
+
+# Create mesh 
+
+mesh = smesh.Mesh( hollow_sphere, "Mesh of hollow sphere" )
+
+# assign Global Radial Prism algorithm
+prism_algo = mesh.Prism()
+
+# define projection between the inner and outer spheres
+mesh.Triangle( smeshBuilder.NETGEN_1D2D, faces[0] )    # NETGEN on faces[0]
+mesh.Projection1D2D( faces[1] ).SourceFace( faces[0] ) # projection faces[0] -> faces[1]
+
+# define distribution of layers using Number of Segments hypothesis in logarithmic mode
+prism_algo.NumberOfSegments( 4, 5. )
+
+# compute the mesh
+mesh.Compute()
index 2cf9698d1328353250a00758a9613157b47af6d0..1a2dd81059f2611bb5707cff36669aa80dd6928f 100644 (file)
@@ -42,6 +42,7 @@ SET(BAD_TESTS
   quality_controls_ex21.py
   quality_controls_ex22.py
   viewing_meshes_ex01.py
+  radial_prism_3d_algo.py
   )
 
 SET(GOOD_TESTS
@@ -137,6 +138,7 @@ SET(GOOD_TESTS
   modifying_meshes_ex23.py
   modifying_meshes_ex24.py
   modifying_meshes_ex25.py
+  modifying_meshes_split_vol.py
   prism_3d_algo.py
   quality_controls_ex01.py
   quality_controls_ex02.py
index 9479329a00f6cf4b6c0f8747c0b30b0b47e8bbe1..d5f411c2fd6bcb43d06469e9a4c3eaed2ffcf925 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-SALOME_CONFIGURE_FILE(doxyfile.in doxyfile)
-SALOME_CONFIGURE_FILE(doxyfile_py.in doxyfile_py)
-SALOME_CONFIGURE_FILE(static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html)
-SALOME_CONFIGURE_FILE(static/header_py.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header_py.html)
+INCLUDE(UseSphinx)
 
 SALOME_INSTALL_SCRIPTS(collect_mesh_methods.py ${SALOME_INSTALL_BINS})
-            
+
 SET(DOC_SMESH_MeshersList StdMeshers)
 SET(smesh_file "${CMAKE_CURRENT_SOURCE_DIR}/collect_mesh_methods.py")
-SET(kernel_file "${KERNEL_ROOT_DIR}/bin/salome/prepare_generating_doc.py")
+SET(smesh_merge_file "${CMAKE_CURRENT_SOURCE_DIR}/merge_mesh_class.py")
 
+# Define requared environment variables
 SALOME_ACCUMULATE_ENVIRONMENT(SMESH_MeshersList NOCHECK ${DOC_SMESH_MeshersList})
+SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_CURRENT_BINARY_DIR}/tmp1)
+SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_CURRENT_BINARY_DIR}/tmp2)
+
+# Make configuration file
+SALOME_CONFIGURE_FILE(conf.py.in conf.py)
+
+IF(SALOME_SMESH_BUILD_FRENCH_DOC)
+  SET(BUILD_LANGUAGE_SWITCHER "true")
+  SALOME_CONFIGURE_FILE(static/switchers.js.in static/switchers.js)
+  ADD_MULTI_LANG_DOCUMENTATION(TARGET_NAME usr_docs MODULE SMESH LANGUAGES fr)
+ELSE()
+  SET(BUILD_LANGUAGE_SWITCHER "false")
+  SALOME_CONFIGURE_FILE(static/switchers.js.in static/switchers.js)
+  ADD_MULTI_LANG_DOCUMENTATION(TARGET_NAME usr_docs MODULE SMESH)
+ENDIF()
 
-SET(_cmd_options ${smesh_file} -o tmp1/smeshBuilder.py StdMeshers)
-SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${PYTHON_EXECUTABLE}" "${_cmd_options}")
+# 1. Options for generating temporary python modules
+SET(_cmd_tmp_gen_options ${smesh_file} -o tmp1/smeshBuilder_dynamic.py -f sphinx StdMeshers)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd_tmp_gen env_script "${PYTHON_EXECUTABLE}" "${_cmd_tmp_gen_options}")
 
-ADD_CUSTOM_TARGET(usr_docs ${CMAKE_COMMAND} -E make_directory tmp1
+# 2. Options for generating final smeshBuilder.py script
+SET(_cmd_smeshBuilder_gen_options ${smesh_merge_file} -o tmp2/smeshBuilder.py smeshBuilder)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd_smeshBuilder_gen env_script "${PYTHON_EXECUTABLE}" "${_cmd_smeshBuilder_gen_options}")
+
+ADD_CUSTOM_TARGET(pre_usr_docs
+  # 1. Make temporary directories for python modules 
+  COMMAND ${CMAKE_COMMAND} -E make_directory tmp1
   COMMAND ${CMAKE_COMMAND} -E make_directory tmp2
-  COMMAND ${PYTHON_EXECUTABLE} ${kernel_file} -o tmp2/smeshBuilder.py ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/smeshBuilder.py
-  COMMAND ${PYTHON_EXECUTABLE} ${kernel_file} -o tmp2/smesh_algorithm.py ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/smesh_algorithm.py
-  COMMAND ${PYTHON_EXECUTABLE} ${kernel_file} -o tmp2/StdMeshersBuilder.py ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/StdMeshersBuilder.py
-  COMMAND ${PYTHON_EXECUTABLE} ${kernel_file} -o tmp2/smeshstudytools.py ${CMAKE_SOURCE_DIR}/src/SMESH_PY/smeshstudytools.py
-  COMMAND ${_cmd}
-  COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py
-  COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
-  COMMAND ${CMAKE_COMMAND} -E remove_directory tmp1
-  COMMAND ${CMAKE_COMMAND} -E remove_directory tmp2
-  VERBATIM
+
+  # 2. Copy python module to the temporary file
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/smeshBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/tmp1/smeshBuilder_origin.py
+
+  # 3. Copy python modules to be documented into memporary directory
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/StdMeshersBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/tmp2/StdMeshersBuilder.py
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/SMESH_SWIG/smesh_algorithm.py ${CMAKE_CURRENT_BINARY_DIR}/tmp2/smesh_algorithm.py
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/SMESH_PY/smeshstudytools.py ${CMAKE_CURRENT_BINARY_DIR}/tmp2/smeshstudytools.py
+
+  # 4. Collect methods from StdMeshers into temporary python module
+  COMMAND ${_cmd_tmp_gen}
+
+  # 5. Generate smeshBuilder.py script
+  COMMAND ${_cmd_smeshBuilder_gen}
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 )
 
+ADD_DEPENDENCIES(usr_docs pre_usr_docs)
+
 INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target usr_docs)")
 INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH DESTINATION ${SALOME_INSTALL_DOC}/gui)
-INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/SMESH)
-INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/SMESH/smeshpy_doc)
+IF(SALOME_SMESH_BUILD_FRENCH_DOC)
+  INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH_fr DESTINATION ${SALOME_INSTALL_DOC}/gui)
+ENDIF()
 
-FILE(GLOB tag_files ${CMAKE_CURRENT_BINARY_DIR}/*.tag)
-SET(make_clean_files SMESH ${tag_files})
+SET(make_clean_files tmp1 tmp2)
 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
index 542c5d7fdb3985b6296f7c5ae41d0a83947b800d..99457030cadf117e8f93bf95da567a33a5f7d44c 100755 (executable)
@@ -48,7 +48,7 @@
 import inspect
 import sys
 
-def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py"):
+def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py", format = "doxygen"):
     plugin_module_name  = plugin_name + "Builder"
     plugin_module       = "salome.%s.%s" % (plugin_name, plugin_module_name)
     try:
@@ -68,29 +68,59 @@ def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py"):
         if methods:
             output = []
             if dummymeshhelp:
-                output.append( "## @package smeshBuilder" )
-                output.append( "#  Documentation of the methods dynamically added by the " + plugin_name + " meshing plug-in to the Mesh class." )
-                output.append( "" )
+                if format == "doxygen":
+                    output.append( "## @package smeshBuilder" )
+                    output.append( "#  Documentation of the methods dynamically added by the " + plugin_name + " meshing plug-in to the Mesh class." )
+                    output.append( "" )
+                elif format == "sphinx":
+                    output.append( '"""' )
+                    output.append( 'Documentation of the methods dynamically added by the ' + plugin_name + ' meshing plug-in to the Mesh class.' )
+                    output.append( '"""' )
+                    output.append( '' )
                 pass
-            output.append( "## This class allows defining and managing a mesh." )
-            output.append( "#" )
+            if format == "doxygen":
+                output.append( "## This class allows defining and managing a mesh." )
+                output.append( "#" )
+            elif format == "sphinx":
+                output.append( "class Mesh:" )
+                output.append( '    """' )
+                output.append( '    This class allows defining and managing a mesh.' )
+                output.append( '    ' )
             if dummymeshhelp:
                 # Add dummy Mesh help
                 # This is supposed to be done when generating documentation for meshing plug-ins
-                output.append( "#  @note The documentation below does not provide complete description of class @b %Mesh" )
-                output.append( "#  from @b smeshBuilder package. This documentation provides only information about" )
-                output.append( "#  the methods dynamically added to the %Mesh class by the " + plugin_name + " plugin" )
-                output.append( "#  For more details on the %Mesh class, please refer to the SALOME %Mesh module" )
-                output.append( "#  documentation." )
+                if format == "doxygen":
+                    output.append( "#  @note The documentation below does not provide complete description of class @b %Mesh" )
+                    output.append( "#  from @b smeshBuilder package. This documentation provides only information about" )
+                    output.append( "#  the methods dynamically added to the %Mesh class by the " + plugin_name + " plugin" )
+                    output.append( "#  For more details on the %Mesh class, please refer to the SALOME %Mesh module" )
+                    output.append( "#  documentation." )
+                elif format == "sphinx":
+                    output.append( '    The documentation below does not provide complete description of class @b %Mesh' )
+                    output.append( '    from @b smeshBuilder package. This documentation provides only information about' )
+                    output.append( '    the methods dynamically added to the %Mesh class by the " + plugin_name + " plugin' )
+                    output.append( '    For more details on the %Mesh class, please refer to the SALOME %Mesh module' )
+                    output.append( '    documentation.' )
+                    output.append( '    """' )
+                    output.append( '    ' )
                 pass
             else:
                 # Extend documentation for Mesh class with information about dynamically added methods.
                 # This is supposed to be done only when building documentation for SMESH module
-                output.append( "#  @note Some methods are dynamically added to the @b %Mesh class in runtime by meshing " )
-                output.append( "#  plug-in modules. If you fail to find help on some methods in the documentation of SMESH module, " )
-                output.append( "#  try to look into the documentation for the meshing plug-ins." )
+                if format ==  "doxygen":
+                    output.append( "#  @note Some methods are dynamically added to the @b %Mesh class in runtime by meshing " )
+                    output.append( "#  plug-in modules. If you fail to find help on some methods in the documentation of SMESH module, " )
+                    output.append( "#  try to look into the documentation for the meshing plug-ins." )
+                elif format == "sphinx":
+                    output.append( "    Note:")
+                    output.append( "        Some methods are dynamically added to the @b %Mesh class in runtime by meshing " )
+                    output.append( "        plug-in modules. If you fail to find help on some methods in the documentation of SMESH module, " )
+                    output.append( "        try to look into the documentation for the meshing plug-ins." )
+                    output.append( '    """' )
+                    output.append( '    ' )
                 pass
-            output.append( "class Mesh:" )
+            if format == "doxygen":
+                output.append( "class Mesh:" )
             for method in methods:
                 docHelper = ""
                 for algo in methods[ method ]:
@@ -98,18 +128,38 @@ def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py"):
                     if docHelper: break
                     pass
                 if not docHelper: docHelper = "Creates new algorithm."
-                output.append( "  ## %s" % docHelper )
-                output.append( "  #" )
-                output.append( "  #  This method is dynamically added to %Mesh class by the meshing plug-in(s). " )
-                output.append( "  #" )
-                output.append( "  #  If the optional @a geom_shape parameter is not set, this algorithm is global (applied to whole mesh)." )
-                output.append( "  #  Otherwise, this algorithm defines a submesh based on @a geom_shape subshape." )
-                output.append( "  #  @param algo_type type of algorithm to be created; allowed values are specified by classes implemented by plug-in (see below)" )
-                output.append( "  #  @param geom_shape if defined, the subshape to be meshed (GEOM_Object)" )
-                output.append( "  #  @return An instance of Mesh_Algorithm sub-class according to the specified @a algo_type, see " )
-                output.append( "  #  %s" % ", ".join( [ "%s.%s" % ( plugin_module_name, algo.__name__ ) for algo in methods[ method ] ] ) )
-                output.append( "  def %s(algo_type, geom_shape=0):" % method )
-                output.append( "    pass" )
+                if format == "doxygen":
+                    output.append( " ## %s" % docHelper )
+                    output.append( " #" )
+                    output.append( " #  This method is dynamically added to %Mesh class by the meshing plug-in(s). " )
+                    output.append( " #" )
+                    output.append( " #  If the optional @a geom_shape parameter is not set, this algorithm is global (applied to whole mesh)." )
+                    output.append( " #  Otherwise, this algorithm defines a submesh based on @a geom_shape subshape." )
+                    output.append( " #  @param algo_type type of algorithm to be created; allowed values are specified by classes implemented by plug-in" )
+                    output.append( " #  @param geom_shape if defined, the subshape to be meshed (GEOM_Object)" )
+                    output.append( " #  @return An instance of Mesh_Algorithm sub-class according to the specified @a algo_type, see " )
+                    output.append( " #  %s" % ", ".join( [ "%s.%s" % ( plugin_module_name, algo.__name__ ) for algo in methods[ method ] ] ) )
+                    output.append( " def %s(algo_type, geom_shape=0):" % method )
+                    output.append( "   pass" )
+                elif format == "sphinx":
+                    output.append( '    def %s(algo_type, geom_shape=0):' % method )
+                    output.append( '        """' )
+                    output.append( '        %s' % docHelper )
+                    output.append( '        ' )
+                    output.append( '        This method is dynamically added to :class:`Mesh <smeshBuilder.Mesh>` class by the meshing plug-in(s). ' )
+                    output.append( '        ' )
+                    output.append( '        If the optional *geom_shape* parameter is not set, this algorithm is global (applied to whole mesh).' )
+                    output.append( '        Otherwise, this algorithm defines a submesh based on *geom_shape* subshape.' )
+                    output.append( '        ' )
+                    output.append( '        Parameters:' )
+                    output.append( '            algo_type: type of algorithm to be created; allowed values are specified by classes implemented by plug-in' )
+                    output.append( '            geom_shape (GEOM_Object): if defined, the subshape to be meshed' )
+                    output.append( '        ' )
+                    output.append( '        Returns:')
+                    output.append( '            An instance of Mesh_Algorithm sub-class according to the specified *algo_type*, see ' )
+                    output.append( '            %s' % ", ".join( [ ":class:`~%s.%s`" % ( plugin_module_name, algo.__name__ ) for algo in methods[ method ] ] ) )
+                    output.append( '        """' )
+                    output.append( '        pass' )
                 pass
             with open(output_file, "w", encoding='utf8') as f:
                 f.write('\n'.join(output))
@@ -133,8 +183,17 @@ if __name__ == "__main__":
     parser.add_argument("-d", "--dummy-mesh-help", dest="dummymeshhelp",
                       action="store_true", default=False,
                       help=h)
-    parser.add_argument("plugin", help='Name of plugin')
+    h = "Format of the documentation strings in the output file. Possible values are: "
+    h+= "'doxygen' - documentation strings are generated in the doxygen format, before a method defenition."
+    h+= "'sphinx' - documentation strings are generated in the sphinx format, after a method defenition."
+    parser.add_argument("-f", "--format", dest="format",
+                      action="store", default="doxygen", help=h)
+
+    parser.add_argument("plugin_name")
+
+
     args = parser.parse_args()
 
-    main( args.plugin, args.dummymeshhelp, args.output )
+    if args.plugin_name is None : sys.exit("Plugin name is not specified")
+    main( args.plugin_name, args.dummymeshhelp, args.output, args.format )
     pass
diff --git a/doc/salome/gui/SMESH/conf.py.in b/doc/salome/gui/SMESH/conf.py.in
new file mode 100644 (file)
index 0000000..91124d9
--- /dev/null
@@ -0,0 +1,228 @@
+# -*- coding: utf-8 -*-
+#
+# yacs documentation build configuration file, created by
+# sphinx-quickstart on Fri Aug 29 09:57:25 2008.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# The contents of this file are pickled, so don't put values in the namespace
+# that aren't pickleable (module imports are okay, they're removed automatically).
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If your extensions are in another directory, add it here. If the directory
+# is relative to the documentation root, use os.path.abspath to make it
+# absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# General configuration
+# ---------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc','sphinx.ext.autosummary']
+try:
+  import sphinxcontrib.napoleon
+  extensions += ['sphinxcontrib.napoleon']
+except:
+  pass
+
+#add pdfbuilder to build a pdf with rst2pdf
+#extensions = ['rst2pdf.pdfbuilder']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = [os.path.join('@CMAKE_CURRENT_SOURCE_DIR@','templates')]
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = 'Mesh'
+
+# Copyright is shown via custom footer
+html_show_copyright = False
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '@SALOMESMESH_VERSION@'
+# The full version, including alpha/beta/rc tags.
+release = '@SALOMESMESH_VERSION@'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['.build','ref','images','CVS']
+
+# A list of glob-style patterns that should be excluded when looking for source
+# files. They are matched against the source file names relative to the
+# source directory, using slashes as directory separators on all platforms.
+exclude_patterns = ['**/CVS']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# Options for HTML output
+# -----------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = '@SPHINX_THEME@'
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = [os.path.join('@CMAKE_CURRENT_BINARY_DIR@','static')]
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+html_sidebars = { '**': ['globaltoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html'],}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_use_modindex = True 
+
+# If false, no index is generated.
+html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+#html_copy_source = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'smeshdoc'
+
+
+# Options for LaTeX output
+# ------------------------
+
+# The paper size ('letter' or 'a4').
+latex_paper_size = 'a4'
+
+# The font size ('10pt', '11pt' or '12pt').
+latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, document class [howto/manual]).
+latex_documents = [
+  ('index', 'Smesh.tex', 'SMESH User Documentation', '', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+latex_preamble = """
+\RecustomVerbatimEnvironment
+ {Verbatim}{Verbatim}
+ {fontsize=\scriptsize}
+"""
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+latex_use_modindex = True
+
+#Options for rst2pdf output (through reportlab)
+pdf_documents = [
+  ('index', 'Smesh.tex', 'SMESH User Documentation', '', 'manual'),
+]
+
+# A comma-separated list of custom stylesheets.
+pdf_stylesheets = ['sphinx','kerning','a4']
+
+# Create a compressed PDF
+# Use True/False or 1/0
+#pdf_compressed = False
+
+# A colon-separated list of folders to search for fonts. Example:
+# pdf_font_path = ['/usr/share/fonts', '/usr/share/texmf-dist/fonts/']
+
+# Language to be used for hyphenation support
+#pdf_language = "en_US"
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'https://docs.python.org/': None}
+
+locale_dirs = [os.path.join('@CMAKE_CURRENT_BINARY_DIR@','locale')]   # path is example but recommended.
+gettext_compact = False     # optional
diff --git a/doc/salome/gui/SMESH/doxyfile.in b/doc/salome/gui/SMESH/doxyfile.in
deleted file mode 100755 (executable)
index 2b716b2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME      = "SALOME Mesh User's Guide"
-OUTPUT_DIRECTORY  = SMESH
-CREATE_SUBDIRS   = NO
-OUTPUT_LANGUAGE   = English
-TAB_SIZE          = 5
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET             = NO
-WARNINGS          = YES
-
-#---------------------------------------------------------------------------
-#Input related options
-#---------------------------------------------------------------------------
-INPUT             = @CMAKE_CURRENT_SOURCE_DIR@/input $(GEOM_ROOT_DIR)/share/doc/salome/gui/GEOM/input
-FILE_PATTERNS     = *.doc
-EXCLUDE           = 
-EXCLUDE_PATTERNS  = tui_*.doc
-IMAGE_PATH        = $(GEOM_ROOT_DIR)/share/doc/salome/gui/GEOM @CMAKE_CURRENT_SOURCE_DIR@/images
-EXAMPLE_PATH      = @CMAKE_SOURCE_DIR@/doc/salome/examples @CMAKE_SOURCE_DIR@/src/SMESH_SWIG
-
-#---------------------------------------------------------------------------
-#HTML related options
-#---------------------------------------------------------------------------
-GENERATE_HTML     = YES
-HTML_OUTPUT       = .
-HTML_HEADER       = @CMAKE_CURRENT_BINARY_DIR@/static/header.html
-HTML_FOOTER       = @CMAKE_CURRENT_SOURCE_DIR@/static/footer.html
-HTML_EXTRA_STYLESHEET   = @CMAKE_CURRENT_SOURCE_DIR@/static/salome_extra.css
-TOC_EXPAND        = YES
-DISABLE_INDEX     = NO
-GENERATE_TREEVIEW = YES
-TREEVIEW_WIDTH    = 300
-
-#---------------------------------------------------------------------------
-#SORT related options
-#---------------------------------------------------------------------------
-SORT_GROUP_NAMES = NO
-
-
-#---------------------------------------------------------------------------
-#LaTeX related option
-#---------------------------------------------------------------------------
-GENERATE_LATEX    = NO
-EXTRA_PACKAGES    = amsmath
-
-#---------------------------------------------------------------------------
-#RTF related options
-#---------------------------------------------------------------------------
-GENERATE_RTF      = NO
-
-#---------------------------------------------------------------------------
-#External reference options
-#---------------------------------------------------------------------------
-TAGFILES          = smeshpy_doc.tag=../SMESH/smeshpy_doc #rnv: 07.04.2011 Workaround for the doxygen 1.7.3:
-                                                         #because it wrongly defines location of the html files for search.                                                  
-SEARCHENGINE      = YES
-
-#---------------------------------------------------------------------------
-#Custom commands
-#---------------------------------------------------------------------------
-ALIASES += tui_script{1}="\include \1 <a href=\"../../examples/SMESH/\1\">Download this script</a>"
diff --git a/doc/salome/gui/SMESH/doxyfile_py.in b/doc/salome/gui/SMESH/doxyfile_py.in
deleted file mode 100755 (executable)
index 50b8dbe..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME           = "SALOME Mesh User's Guide"
-OUTPUT_DIRECTORY       = SMESH
-CREATE_SUBDIRS        = NO
-OUTPUT_LANGUAGE        = English
-USE_WINDOWS_ENCODING   = NO
-BRIEF_MEMBER_DESC      = YES
-REPEAT_BRIEF           = YES
-ALWAYS_DETAILED_SEC    = YES
-INLINE_INHERITED_MEMB  = YES
-FULL_PATH_NAMES        = NO
-SHORT_NAMES            = NO
-JAVADOC_AUTOBRIEF      = YES
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP         = NO
-INHERIT_DOCS           = YES
-SEPARATE_MEMBER_PAGES  = NO
-TAB_SIZE               = 5
-OPTIMIZE_OUTPUT_FOR_C  = YES
-OPTIMIZE_OUTPUT_JAVA   = YES
-BUILTIN_STL_SUPPORT    = NO
-DISTRIBUTE_GROUP_DOC   = NO
-SUBGROUPING            = YES
-
-#---------------------------------------------------------------------------
-# Build related options
-#---------------------------------------------------------------------------
-EXTRACT_ALL            = YES
-EXTRACT_PRIVATE        = YES
-EXTRACT_STATIC         = NO
-EXTRACT_LOCAL_CLASSES  = YES
-EXTRACT_LOCAL_METHODS  = NO
-HIDE_UNDOC_MEMBERS     = NO
-HIDE_UNDOC_CLASSES     = NO
-HIDE_FRIEND_COMPOUNDS  = NO
-HIDE_IN_BODY_DOCS      = NO
-INTERNAL_DOCS          = YES
-CASE_SENSE_NAMES       = YES
-HIDE_SCOPE_NAMES       = YES
-SHOW_INCLUDE_FILES     = YES
-INLINE_INFO            = YES
-SORT_MEMBER_DOCS       = NO
-SORT_BRIEF_DOCS        = NO
-SORT_BY_SCOPE_NAME     = NO
-GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
-GENERATE_DEPRECATEDLIST= YES
-MAX_INITIALIZER_LINES  = 25
-SHOW_USED_FILES        = NO
-SHOW_DIRECTORIES       = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER         = NO
-INLINE_SOURCES         = NO
-STRIP_CODE_COMMENTS    = YES
-REFERENCED_BY_RELATION = NO
-REFERENCES_RELATION    = YES
-USE_HTAGS              = NO
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET                  = NO
-WARNINGS               = YES
-WARN_IF_UNDOCUMENTED   = YES
-WARN_IF_DOC_ERROR      = YES
-WARN_NO_PARAMDOC       = NO
-EXCLUDE_SYMLINKS       = NO
-EXAMPLE_RECURSIVE      = NO
-
-#---------------------------------------------------------------------------
-#Input related options
-#---------------------------------------------------------------------------
-INPUT             = tmp2/smeshBuilder.py \
-                    tmp2/smesh_algorithm.py \
-                    tmp2/StdMeshersBuilder.py \
-                    tmp2/smeshstudytools.py \
-                    tmp1/smeshBuilder.py \
-                    @CMAKE_CURRENT_SOURCE_DIR@/input
-FILE_PATTERNS     = tui_*.doc
-IMAGE_PATH        = @CMAKE_CURRENT_SOURCE_DIR@/images
-RECURSIVE         = NO
-EXAMPLE_PATH      = @CMAKE_SOURCE_DIR@/src/SMESH_SWIG @CMAKE_SOURCE_DIR@/doc/salome/examples
-
-#---------------------------------------------------------------------------
-#HTML related options
-#---------------------------------------------------------------------------
-GENERATE_HTML     = YES
-HTML_OUTPUT       = smeshpy_doc
-HTML_HEADER       = @CMAKE_CURRENT_BINARY_DIR@/static/header_py.html
-HTML_FOOTER       = @CMAKE_CURRENT_SOURCE_DIR@/static/footer.html
-HTML_EXTRA_STYLESHEET   = @CMAKE_CURRENT_SOURCE_DIR@/static/salome_extra.css
-TOC_EXPAND        = YES
-DISABLE_INDEX     = NO
-GENERATE_TREEVIEW = YES
-TREEVIEW_WIDTH    = 300
-
-#---------------------------------------------------------------------------
-#LaTeX related option
-#---------------------------------------------------------------------------
-GENERATE_LATEX    = NO
-
-#---------------------------------------------------------------------------
-#RTF related options
-#---------------------------------------------------------------------------
-GENERATE_RTF      = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = NO
-HIDE_UNDOC_RELATIONS   = NO
-HAVE_DOT               = YES
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = NO
-GROUP_GRAPHS           = NO
-UML_LOOK               = NO
-TEMPLATE_RELATIONS     = YES
-INCLUDE_GRAPH          = YES
-INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = NO
-GRAPHICAL_HIERARCHY    = YES
-DIRECTORY_GRAPH        = YES
-DOT_IMAGE_FORMAT       = png
-DOT_FONTNAME           = Arial
-DOT_PATH               = 
-DOTFILE_DIRS           = 
-MAX_DOT_GRAPH_WIDTH    = 1024
-MAX_DOT_GRAPH_HEIGHT   = 1024
-MAX_DOT_GRAPH_DEPTH    = 1000
-DOT_TRANSPARENT        = NO
-DOT_MULTI_TARGETS      = NO
-GENERATE_LEGEND        = NO
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-#External reference options
-#---------------------------------------------------------------------------
-GENERATE_TAGFILE  = smeshpy_doc.tag
-SEARCHENGINE           = YES
-
-#---------------------------------------------------------------------------
-#Custom commands
-#---------------------------------------------------------------------------
-ALIASES += tui_script{1}="\include \1 <a href=\"../../examples/SMESH/\1\">Download this script</a>"
old mode 100755 (executable)
new mode 100644 (file)
index 763a530..567bab5
Binary files a/doc/salome/gui/SMESH/images/smoothing1.png and b/doc/salome/gui/SMESH/images/smoothing1.png differ
old mode 100755 (executable)
new mode 100644 (file)
index bfce457..45ce704
Binary files a/doc/salome/gui/SMESH/images/smoothing2.png and b/doc/salome/gui/SMESH/images/smoothing2.png differ
diff --git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
deleted file mode 100644 (file)
index c4de631..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-/*!
-
-\page a1d_meshing_hypo_page 1D Meshing Hypotheses
-
-Basic 1D hypothesis specifies:
-<ul>
-<li>how \ref a1d_algos_anchor "Wire Discretization" should divide the edge;</li>
-<li>how \ref a1d_algos_anchor "Composite Side Discretization" should divide the group of C1-continuous edges.</li>
-</ul>
-
-1D hypotheses can be categorized by type of nodes distribution as follows:
-<ul>
-<li>Uniform distribution:
-  <ul>
-    <li>\ref average_length_anchor "Local Length"</li>
-    <li>\ref max_length_anchor "Max Size"</li>
-    <li>\ref number_of_segments_anchor "Number of Segments" with Equidistant distribution</li>
-    <li>\ref automatic_length_anchor "Automatic Length"</li>
-</ul></li>
-<li>Constantly increasing or decreasing length of segments:
-  <ul>
-    <li>\ref arithmetic_1d_anchor "Arithmetic Progression"</li>
-    <li>\ref geometric_1d_anchor "Geometric Progression"</li>
-    <li>\ref start_and_end_length_anchor "Start and end length"</li>
-    <li>\ref number_of_segments_anchor "Number of Segments" with Scale distribution</li>
-</ul></li>
-<li>Distribution depending on curvature:
-  <ul>
-    <li>\ref adaptive_1d_anchor "Adaptive"</li>
-    <li>\ref deflection_1d_anchor "Deflection"</li>
-</ul></li>
-<li>Arbitrary distribution:
-  <ul>
-    <li>\ref fixed_points_1d_anchor "Fixed Points"</li>
-    <li>\ref number_of_segments_anchor "Number of Segments" with
-    \ref analyticdensity_anchor "Analytic Density Distribution" or Table Density Distribution</li>
-</ul></li>
-</ul>
-
-<br>
-\anchor adaptive_1d_anchor
-<h2>Adaptive hypothesis</h2>
-
-<b>Adaptive</b> hypothesis allows to split edges into segments with a
-length that depends on the curvature of edges and faces and is limited by <b>Min. Size</b>
-and <b>Max Size</b>. The length of a segment also depends on the lengths
-of adjacent segments (that can't differ more than twice) and on the 
-distance to close geometrical entities (edges and faces) to avoid
-creation of narrow 2D elements.
-
-\image html adaptive1d.png
-
-- <b>Min size</b> parameter limits the minimal segment size. 
-- <b>Max size</b> parameter defines the length of segments on straight edges. 
-- \b Deflection parameter gives maximal distance of a segment from a curved edge.
-
-\image html adaptive1d_sample_mesh.png "Adaptive hypothesis and NETGEN 2D algorithm - the size of mesh segments reflects the size of geometrical features"
-
-<b>See Also</b> a \ref tui_1d_adaptive "sample TUI Script" that uses Adaptive hypothesis.
-
-<br>
-\anchor arithmetic_1d_anchor
-<h2>Arithmetic Progression hypothesis</h2>
-
-<b>Arithmetic Progression</b> hypothesis allows to split edges into segments with a
-length that changes in arithmetic progression (Lk = Lk-1 + d)
-beginning from a given starting length and up to a given end length.
-
-The splitting direction is defined by the orientation of the
-underlying geometrical edge.
-<b>Reverse Edges</b> list box allows specifying the edges, for which
-the splitting should be made in the direction opposite to their
-orientation. This list box is usable only if a geometry object is
-selected for meshing. In this case it is possible to select edges to
-be reversed either directly picking them in the 3D viewer or by
-selecting the edges or groups of edges in the Object Browser. Use \b
-Add button to add the selected edges to the list.
-
-\ref reversed_edges_helper_anchor "Helper" group assists you in
-defining <b>Reversed Edges</b> parameter.
-
-
-\image html a-arithmetic1d.png
-
-\image html b-ithmetic1d.png "Arithmetic Progression hypothesis - the size of mesh elements gradually increases"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_1d_arithmetic "Defining Arithmetic Progression and Geometric Progression hypothesis" operation.  
-
-<br>
-\anchor geometric_1d_anchor
-<h2>Geometric Progression hypothesis</h2>
-
-<b>Geometric Progression</b> hypothesis allows splitting edges into
-segments with a length that changes in geometric progression (Lk =
-Lk-1 * d) starting from a given <b>Start Length</b> and with a given
-<b>Common Ratio</b>.
-
-The splitting direction is defined by the orientation of the
-underlying geometrical edge.
-<b>Reverse Edges</b> list box allows specifying the edges, for which
-the splitting should be made in the direction opposite to their
-orientation. This list box is usable only if a geometry object is
-selected for meshing. In this case it is possible to select edges to
-be reversed either directly picking them in the 3D viewer or by
-selecting the edges or groups of edges in the Object Browser. Use \b
-Add button to add the selected edges to the list.
-
-\ref reversed_edges_helper_anchor "Helper" group assists you in
-defining <b>Reversed Edges</b> parameter.
-
-\image html a-geometric1d.png
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_1d_arithmetic "Defining Arithmetic Progression and Geometric Progression hypothesis" operation.  
-
-<br>
-\anchor deflection_1d_anchor
-<h2>Deflection hypothesis</h2>
-
-<b>Deflection</b> hypothesis can be applied for meshing curvilinear edges
-composing your geometrical object. It defines only one parameter: the
-value of deflection (or chord error).
-
-A geometrical edge is divided into segments of length depending on
-edge curvature. The more curved the edge, the shorter the
-segment. Nodes on the edge are placed so that the maximum distance
-between the edge and a segment approximating a part of edge between
-two nodes should not exceed the value of deflection.
-
-\image html a-deflection1d.png
-
-\image html b-flection1d.png "Deflection hypothesis - useful for meshing curvilinear edges"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_deflection_1d "Defining Deflection hypothesis" operation.
-
-<br>
-\anchor average_length_anchor
-<h2>Local Length hypothesis</h2>
-
-<b>Local Length</b> hypothesis can be applied for meshing of edges
-composing your geometrical object. Definition of this hypothesis
-consists of setting the \b length of segments, which will approximate these
-edges, and the \b precision of rounding.
-
-The \b precision parameter is used to round a <em>number of segments</em>,
-calculated by dividing the <em>edge length</em> by the specified \b length of
-segment, to the higher integer if the \a remainder exceeds the \b precision
-and to the lower integer otherwise. <br>
-Use value 0.5 to provide rounding to the nearest integer, 1.0 for the lower integer, 0.0 for the higher integer. Default value is 1e-07.
-
-For example: if <em>edge length</em> is 10.0 and the segment \b length
-is 3.0 then their division gives 10./3. = 3.33(3) and the \a remainder is 0.33(3).
-If \b precision is less than 0.33(3) then the edge is divided into 3 segments.
-If \b precision is more than 0.33(3) then the edge is divided into 4 segments.
-
-
-\image html image41.gif
-
-\image html a-averagelength.png
-
-\image html b-erage_length.png "Local Length hypothesis - all 1D mesh segments are equal"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_average_length "Defining Local Length" hypothesis
-operation.
-
-<br>\anchor max_length_anchor
-<h2>Max Size</h2>
-<b>Max Size</b> hypothesis allows splitting geometrical edges into
-segments not longer than the given length. Definition of this hypothesis
-consists of setting the maximal allowed \b length of segments.
-<b>Use preestimated length</b> check box lets you use \b length
-automatically calculated basing on size of your geometrical object,
-namely as diagonal of bounding box divided by ten. The divider can be
-changed via \ref diagonal_size_ratio_pref "Ratio Bounding Box Diagonal / Max Size"
-preference parameter.
-<b>Use preestimated length</b> check box is enabled only if the
-geometrical object has been selected before hypothesis definition.
-
-\image html a-maxsize1d.png
-
-<br>
-\anchor number_of_segments_anchor
-<h2>Number of Segments hypothesis</h2>
-
-<b>Number of Segments</b> hypothesis can be applied for approximating
-edges by a definite number of mesh segments with length depending on
-the selected type of distribution of nodes. The default number of
-segments can be set via 
-\ref nb_segments_pref "Automatic Parameters / Default Number of Segments"
-preference parameter.
-
-The direction of the splitting is defined by the orientation of the
-underlying geometrical edge. <b>Reverse Edges</b> list box allows to
-specify the edges for which the splitting should be made in the
-direction opposing to their orientation. This list box is enabled only
-if the geometry object is selected for the meshing. In this case it is 
-possible to select edges to be reversed either by directly picking them
-in the 3D viewer or by selecting the edges or groups of edges in the
-Object Browser.
-
-\ref reversed_edges_helper_anchor "Helper" group assists you in
-defining <b>Reversed Edges</b> parameter.
-
-You can set the type of node distribution for this hypothesis in the
-<b>Hypothesis Construction</b> dialog bog :
-
-\image html a-nbsegments1.png
-
-<br><b>Equidistant Distribution</b> - all segments will have the same
-length, you define only the <b>Number of Segments</b>.
-
-<br><b>Scale Distribution</b> - length of segments gradually changes
-depending on the <b>Scale Factor</b>, which is a ratio of the first
-segment length to the last segment length.<br>
-Length of segments changes in geometric progression with the common
-ratio (A) depending on the <b>Scale Factor</b> (S) and <b>Number of
-Segments</b> (N) as follows: <code> A = S**(1/(N-1))</code>. For an
-edge of length L, length of the first segment is 
-<code>L * (1 - A)/(1 - A**N)</code>.
-
-
-\image html a-nbsegments2.png
-
-<br><b>Distribution with Analytic Density</b> - you input the formula,
-which will rule the change of length of segments and the module shows
-in the plot the density function curve in red and the node
-distribution as blue crosses.
-
-\image html distributionwithanalyticdensity.png
-
-<br>
-\anchor analyticdensity_anchor
-The node distribution is computed so that to have the density function
-integral on the range between two nodes equal for all segments.
-\image html analyticdensity.png
-
-<br><b>Distribution with Table Density</b> - you input a number of
-pairs <b>t - F(t)</b>, where \b t ranges from 0 to 1, and the module computes the
-formula, which will rule the change of length of segments and shows
-in the plot the density function curve in red and the node
-distribution as blue crosses. The node distribution is computed in the
-same way as for 
-\ref analyticdensity_anchor "Distribution with Analytic Density". You
-can select the <b>Conversion mode</b> from \b Exponent and <b>Cut
-negative</b>.
-
-\image html distributionwithtabledensity.png
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_deflection_1d "Defining Number of Segments" hypothesis
-operation.
-
-\note The plot functionality is available only if GUI module is built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when building GUI module).
-
-<br>
-\anchor start_and_end_length_anchor
-<h2>Start and End Length hypothesis</h2>
-
-<b>Start and End Length</b> hypothesis allows to divide a geometrical edge
-into segments so that the first and the last segments have a specified
-length. The length of medium segments changes with automatically chosen
-geometric progression.
-
-The direction of the splitting is defined by the orientation of the
-underlying geometrical edge. <b>Reverse Edges</b> list box allows to
-specify the edges, for which the splitting should be made in the
-direction opposing to their orientation. This list box is enabled only
-if the geometry object is selected for the meshing. In this case it is 
-possible to select edges to be reversed either by directly picking them
-in the 3D viewer or by selecting the edges or groups of edges in the
-Object Browser.
-
-\ref reversed_edges_helper_anchor "Helper" group assists you in
-defining <b>Reversed Edges</b> parameter.
-
-
-\image html a-startendlength.png
-
-\image html b-art_end_length.png "The lengths of the first and the last segment are strictly defined"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_start_and_end_length "Defining Start and End Length"
-hypothesis operation.
-
-<br>
-\anchor automatic_length_anchor
-<h2>Automatic Length</h2>
-
-The dialog box prompts you to define the quality of the future mesh by
-only one parameter, which is \b Fineness, ranging from 0 (coarse mesh,
-low number of segments) to 1 (extremely fine mesh, great number of
-segments). 
-
-\image html automaticlength.png
-
-Compare one and the same object (sphere) meshed with
-minimum and maximum value of this parameter.
-
-\image html image147.gif "Example of a rough mesh at Automatic Length Fineness of 0."
-
-\image html image148.gif "Example of a fine mesh at Automatic Length Fineness of 1."
-
-<br>
-\anchor fixed_points_1d_anchor
-<h2>Fixed Points hypothesis</h2>
-
-<b>Fixed Points</b> hypothesis allows splitting edges through a
-set of points parametrized on the edge (from 1 to 0) and a number of
-segments for each interval limited by the points.
-
-\image html hypo_fixedpnt_dlg.png
-
-It is possible to check in <b>Same Nb. Segments for all intervals</b> 
-option and to define one value for all intervals.
-
-The splitting direction is defined by the orientation of the
-underlying geometrical edge. <b>Reverse Edges</b> list box allows to
-specify the edges for which the splitting should be made in the
-direction opposite to their orientation. This list box is enabled only
-if the geometrical object is selected for meshing. In this case it is
-possible to select the edges to be reversed either directly picking them in
-the 3D viewer or selecting the edges or groups of edges in the
-Object Browser.
-
-\ref reversed_edges_helper_anchor "Helper" group assists in
-defining <b>Reversed Edges</b> parameter.
-
-
-\image html mesh_fixedpnt.png "Example of a sub-mesh on the edge built using Fixed Points hypothesis"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_fixed_points "Defining Fixed Points" hypothesis operation.
-
-\anchor reversed_edges_helper_anchor
-<h2>Reversed Edges Helper</h2>
-
-\image html rev_edges_helper_dlg.png
-
-\b Helper group assists in defining <b>Reversed Edges</b>
-parameter of the hypotheses depending on edge direction.
-
-<b>Show whole geometry</b> check-box allows seeing the whole
-geometrical model in the 3D Viewer, which can help to understand the
-location of a set of edges within the model.
-
-<b>Propagation chains</b> group allows defining <b>Reversed Edges</b>
-for splitting opposite edges of quadrilateral faces in a logically
-uniform direction. When this group is activated, the list is filled
-with propagation chains found within the shape on which a hypothesis
-is assigned. When a chain is selected in the list its edges are shown
-in the Viewer with arrows, which enables choosing a common direction
-for all chain edges. \b Reverse button inverts the common direction of
-chain edges. \b Add button is active if some edges of a chain have a
-different direction, so you can click \b Add button to add them
-to <b>Reversed Edges</b> list.
-
-\image html propagation_chain.png "The whole geometry and a propagation chain"
-
-\note Alternatively, uniform direction of edges of one propagation
-chain can be achieved by 
-\ref constructing_submeshes_page "definition of a sub-mesh" on one
-edge of the chain and assigning a 
-\ref propagation_anchor "Propagation" additional hypothesis.
-Orientation of this edge (and hence of all the rest edges of the chain) can be
-controlled by using <b>Reversed Edges</b> field.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst b/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst
new file mode 100644 (file)
index 0000000..4fc4c2d
--- /dev/null
@@ -0,0 +1,303 @@
+.. _a1d_meshing_hypo_page:
+
+*********************
+1D Meshing Hypotheses
+*********************
+
+Basic 1D hypothesis specifies:
+       * how a :ref:`Wire Discretization <a1d_algos_anchor>` should divide the edge;
+       * how a :ref:`Composite Side Discretization <a1d_algos_anchor>` should divide the group of C1-continuous edges.
+
+1D hypotheses can be categorized by type of nodes distribution as follows:
+       * Uniform distribution:
+               * :ref:`Local Length <average_length_anchor>`
+               * :ref:`Max Size <max_length_anchor>`
+               * :ref:`Number of Segments <number_of_segments_anchor>` with Equidistant distribution
+               * :ref:`Automatic Length <automatic_length_anchor>`
+
+       * Constantly increasing or decreasing length of segments:
+               * :ref:`Arithmetic Progression <arithmetic_1d_anchor>` 
+               * :ref:`Geometric Progression <geometric_1d_anchor>`
+               * :ref:`Start and end length <start_and_end_length_anchor>` 
+               * :ref:`Number of Segments <number_of_segments_anchor>` with Scale distribution
+
+       * Distribution depending on curvature:
+               * :ref:`Adaptive <adaptive_1d_anchor>` 
+               * :ref:`Deflection <deflection_1d_anchor>` 
+
+       * Arbitrary distribution:
+               * :ref:`Fixed Points <fixed_points_1d_anchor>` 
+               * :ref:`Number of Segments <number_of_segments_anchor>` with :ref:`Analytic Density Distribution <analyticdensity_anchor>` or Table Density Distribution
+
+
+.. _adaptive_1d_anchor:
+
+Adaptive hypothesis
+###################
+
+**Adaptive** hypothesis allows to split edges into segments with a length that depends on the curvature of edges and faces and is limited by **Min. Size** and **Max Size**. The length of a segment also depends on the lengths of adjacent segments (that can't differ more than twice) and on the  distance to close geometrical entities (edges and faces) to avoid creation of narrow 2D elements.
+
+       .. image:: ../images/adaptive1d.png
+               :align: center
+
+* **Min size** parameter limits the minimal segment size. 
+* **Max size** parameter defines the length of segments on straight edges. 
+* **Deflection** parameter gives maximal distance of a segment from a curved edge.
+
+       .. image:: ../images/adaptive1d_sample_mesh.png 
+               :align: center
+
+       .. centered::
+               Adaptive hypothesis and NETGEN 2D algorithm - the size of mesh segments reflects the size of geometrical features
+
+**See Also** a :ref:`sample TUI Script <tui_1d_adaptive>` that uses Adaptive hypothesis.
+
+.. _arithmetic_1d_anchor:
+
+Arithmetic Progression hypothesis
+#################################
+
+**Arithmetic Progression** hypothesis allows to split edges into segments with a length that changes in arithmetic progression (Lk = Lk-1 + d) beginning from a given starting length and up to a given end length.
+
+The splitting direction is defined by the orientation of the underlying geometrical edge. **Reverse Edges** list box allows specifying the edges, for which the splitting should be made in the direction opposite to their orientation. This list box is usable only if a geometry object is selected for meshing. In this case it is possible to select edges to be reversed either directly picking them in the 3D viewer or by selecting the edges or groups of edges in the Object Browser. Use 
+**Add** button to add the selected edges to the list.
+
+:ref:`Helper <reversed_edges_helper_anchor>` group assists you in defining **Reversed Edges** parameter.
+
+
+.. image:: ../images/a-arithmetic1d.png
+       :align: center
+
+
+.. image:: ../images/b-ithmetic1d.png 
+       :align: center
+
+.. centered::
+       Arithmetic Progression hypothesis - the size of mesh elements gradually increases
+
+**See Also** a sample TUI Script of :ref:`Defining Arithmetic Progression and Geometric Progression hypothesis <tui_1d_arithmetic>` operation.  
+
+.. _geometric_1d_anchor:
+
+Geometric Progression hypothesis
+################################
+
+**Geometric Progression** hypothesis allows splitting edges into segments with a length that changes in geometric progression (Lk = Lk-1 * d) starting from a given **Start Length** and with a given **Common Ratio**.
+
+The splitting direction is defined by the orientation of the underlying geometrical edge.
+**Reverse Edges** list box allows specifying the edges, for which the splitting should be made in the direction opposite to their orientation. This list box is usable only if a geometry object is selected for meshing. In this case it is possible to select edges to be reversed either directly picking them in the 3D viewer or by selecting the edges or groups of edges in the Object Browser. Use **Add** button to add the selected edges to the list.
+
+:ref:`Helper <reversed_edges_helper_anchor>` group assists you in defining **Reversed Edges** parameter.
+
+.. image:: ../images/a-geometric1d.png
+       :align: center
+
+**See Also** a sample TUI Script of :ref:`Defining Arithmetic Progression and Geometric Progression hypothesis <tui_1d_arithmetic>` operation.  
+
+.. _deflection_1d_anchor:
+
+Deflection hypothesis
+#####################
+
+**Deflection** hypothesis can be applied for meshing curvilinear edges composing your geometrical object. It defines only one parameter: the value of deflection (or chord error).
+
+A geometrical edge is divided into segments of length depending on edge curvature. The more curved the edge, the shorter the segment. Nodes on the edge are placed so that the maximum distance between the edge and a segment approximating a part of edge between two nodes should not exceed the value of deflection.
+
+.. image:: ../images/a-deflection1d.png
+       :align: center
+
+.. image:: ../images/b-flection1d.png 
+       :align: center
+
+.. centered::
+       Deflection hypothesis - useful for meshing curvilinear edges
+
+**See Also** a sample TUI Script of :ref:`Defining Deflection hypothesis <tui_deflection_1d>` operation.
+
+.. _average_length_anchor:
+
+Local Length hypothesis
+#######################
+
+**Local Length** hypothesis can be applied for meshing of edges composing your geometrical object. Definition of this hypothesis consists of setting the **length** of segments, which will approximate these edges, and the **precision** of rounding.
+
+The **precision** parameter is used to round a *number of segments*, calculated by dividing the *edge length* by the specified **length** of segment, to the higher integer if the *remainder* exceeds the **precision** and to the lower integer otherwise. 
+Use value 0.5 to provide rounding to the nearest integer, 1.0 for the lower integer, 0.0 for the higher integer. Default value is 1e-07.
+
+For example: if *edge length* is 10.0 and the segment **length**
+is 3.0 then their division gives 10./3. = 3.33(3) and the *remainder* is 0.33(3).
+If **precision** is less than 0.33(3) then the edge is divided into 3 segments.
+If **precision** is more than 0.33(3) then the edge is divided into 4 segments.
+
+
+.. image:: ../images/image41.gif
+       :align: center
+
+.. image:: ../images/a-averagelength.png
+       :align: center
+
+.. image:: ../images/b-erage_length.png 
+       :align: center
+
+.. centered::
+       Local Length hypothesis - all 1D mesh segments are equal
+
+**See Also** a sample TUI Script of :ref:`Defining Local Length <tui_average_length>` hypothesis
+operation.
+
+.. _max_length_anchor:
+
+Max Size
+########
+
+**Max Size** hypothesis allows splitting geometrical edges into segments not longer than the given length. Definition of this hypothesis consists of setting the maximal allowed **length** of segments.
+**Use preestimated length** check box lets you use **length** automatically calculated basing on size of your geometrical object, namely as diagonal of bounding box divided by ten. The divider can be changed via :ref:`Ratio Bounding Box Diagonal / Max Size <diagonal_size_ratio_pref>` preference parameter.
+**Use preestimated length** check box is enabled only if the geometrical object has been selected before hypothesis definition.
+
+.. image:: ../images/a-maxsize1d.png
+       :align: center
+
+.. _number_of_segments_anchor:
+
+Number of Segments hypothesis
+#############################
+
+**Number of Segments** hypothesis can be applied for approximating edges by a definite number of mesh segments with length depending on the selected type of distribution of nodes. The default number of segments can be set via :ref:`Automatic Parameters / Default Number of Segments <nb_segments_pref>` preference parameter.
+
+The direction of the splitting is defined by the orientation of the underlying geometrical edge. **Reverse Edges** list box allows to specify the edges for which the splitting should be made in the direction opposing to their orientation. This list box is enabled only if the geometry object is selected for the meshing. In this case it is possible to select edges to be reversed either by directly picking them in the 3D viewer or by selecting the edges or groups of edges in the Object Browser.
+
+:ref:`Helper <reversed_edges_helper_anchor>` group assists you in defining **Reversed Edges** parameter.
+
+You can set the type of node distribution for this hypothesis in the **Hypothesis Construction** dialog box:
+
+.. image:: ../images/a-nbsegments1.png
+       :align: center
+
+**Equidistant Distribution** - all segments will have the same length, you define only the **Number of Segments**.
+
+**Scale Distribution** - length of segments gradually changes depending on the **Scale Factor**, which is a ratio of the first segment length to the last segment length.
+
+Length of segments changes in geometric progression with the common ratio (A) depending on the **Scale Factor** (S) and **Number of Segments** (N) as follows: A = S**(1/(N-1)). For an edge of length L, length of the first segment is L * (1 - A)/(1 - A**N)
+
+.. image:: ../images/a-nbsegments2.png
+       :align: center
+
+.. _analyticdensity_anchor:
+
+**Distribution with Analytic Density** - you input the formula, which will rule the change of length of segments and the module shows in the plot the density function curve in red and the node distribution as blue crosses.
+
+.. image:: ../images/distributionwithanalyticdensity.png
+       :align: center
+
+The node distribution is computed so that to have the density function integral on the range between two nodes equal for all segments.
+
+.. image:: ../images/analyticdensity.png
+       :align: center
+
+**Distribution with Table Density** - you input a number of pairs **t - F(t)**, where **t** ranges from 0 to 1, and the module computes the formula, which will rule the change of length of segments and shows in the plot the density function curve in red and the node distribution as blue crosses. The node distribution is computed in the same way as for :ref:`Distribution with Analytic Density <analyticdensity_anchor>`. You can select the **Conversion mode** from **Exponent** and **Cut negative**.
+
+.. image:: ../images/distributionwithtabledensity.png
+       :align: center
+
+
+**See Also** a sample TUI Script of :ref:`Defining Number of Segments <tui_deflection_1d>` hypothesis operation.
+
+.. note:: The plot functionality is available only if GUI module is built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when building GUI module).
+
+.. _start_and_end_length_anchor:
+
+Start and End Length hypothesis
+###############################
+
+**Start and End Length** hypothesis allows to divide a geometrical edge into segments so that the first and the last segments have a specified length. The length of medium segments changes with automatically chosen geometric progression.
+
+The direction of the splitting is defined by the orientation of the underlying geometrical edge. **Reverse Edges** list box allows to specify the edges, for which the splitting should be made in the direction opposing to their orientation. This list box is enabled only if the geometry object is selected for the meshing. In this case it is possible to select edges to be reversed either by directly picking them in the 3D viewer or by selecting the edges or groups of edges in the Object Browser.
+
+:ref:`Helper <reversed_edges_helper_anchor>` group assists you in defining **Reversed Edges** parameter.
+
+
+.. image:: ../images/a-startendlength.png
+       :align: center
+
+.. image:: ../images/b-art_end_length.png 
+       :align: center
+
+.. centered::
+        The lengths of the first and the last segment are strictly defined
+
+**See Also** a sample TUI Script of :ref:`Defining Start and End Length <tui_start_and_end_length>` hypothesis operation.
+
+
+.. _automatic_length_anchor:
+
+Automatic Length
+################
+
+The dialog box prompts you to define the quality of the future mesh by only one parameter, which is **Fineness**, ranging from 0 (coarse mesh, low number of segments) to 1 (extremely fine mesh, great number of segments). 
+
+.. image:: ../images/automaticlength.png
+       :align: center
+
+Compare one and the same object (sphere) meshed with minimum and maximum value of this parameter.
+
+.. image:: ../images/image147.gif
+       :align: center
+.. centered::
+       Example of a rough mesh at Automatic Length Fineness of 0.
+
+.. image:: ../images/image148.gif
+       :align: center
+.. centered::
+       Example of a fine mesh at Automatic Length Fineness of 1.
+
+.. _fixed_points_1d_anchor:
+
+Fixed Points hypothesis
+#######################
+
+**Fixed Points** hypothesis allows splitting edges through a set of points parametrized on the edge (from 1 to 0) and a number of segments for each interval limited by the points.
+
+.. image:: ../images/hypo_fixedpnt_dlg.png
+       :align: center
+
+It is possible to check in **Same Nb. Segments for all intervals** option and to define one value for all intervals.
+
+The splitting direction is defined by the orientation of the underlying geometrical edge. **Reverse Edges** list box allows to specify the edges for which the splitting should be made in the direction opposite to their orientation. This list box is enabled only if the geometrical object is selected for meshing. In this case it is possible to select the edges to be reversed either directly picking them in the 3D viewer or selecting the edges or groups of edges in the Object Browser.
+
+:ref:`Helper <reversed_edges_helper_anchor>`  group assists in defining **Reversed Edges** parameter.
+
+
+.. image:: ../images/mesh_fixedpnt.png 
+       :align: center
+
+.. centered::
+       Example of a sub-mesh on the edge built using Fixed Points hypothesis
+
+**See Also** a sample TUI Script of a :ref:`Defining Fixed Points <tui_fixed_points>` hypothesis operation.
+
+
+.. _reversed_edges_helper_anchor:
+
+Reversed Edges Helper
+#####################
+
+.. image:: ../images/rev_edges_helper_dlg.png
+       :align: center
+
+**Helper** group assists in defining **Reversed Edges** parameter of the hypotheses depending on edge direction.
+
+**Show whole geometry** check-box allows seeing the whole geometrical model in the 3D Viewer, which can help to understand the location of a set of edges within the model.
+
+**Propagation chains** group allows defining **Reversed Edges** for splitting opposite edges of quadrilateral faces in a logically uniform direction. When this group is activated, the list is filled with propagation chains found within the shape on which a hypothesis is assigned. When a chain is selected in the list its edges are shown in the Viewer with arrows, which enables choosing a common direction for all chain edges. **Reverse** button inverts the common direction of chain edges. **Add** button is active if some edges of a chain have a different direction, so you can click **Add** button to add them to **Reversed Edges** list.
+
+.. image:: ../images/propagation_chain.png 
+       :align: center
+
+.. centered::
+       The whole geometry and a propagation chain
+
+.. note:: Alternatively, uniform direction of edges of one propagation chain can be achieved by :ref:`definition of a sub-mesh <constructing_submeshes_page>` on one edge of the chain and assigning a :ref:`Propagation <propagation_anchor>` additional hypothesis. Orientation of this edge (and hence of all the rest edges of the chain) can be controlled by using **Reversed Edges** field.
+
+
diff --git a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
deleted file mode 100644 (file)
index 2005ad8..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*!
-
-\page a2d_meshing_hypo_page 2D Meshing Hypotheses
-
-- \ref max_element_area_anchor "Max Element Area"
-- \ref length_from_edges_anchor "Length from Edges"
-- \ref hypo_quad_params_anchor "Quadrangle parameters"
-
-\anchor max_element_area_anchor
-<h2>Max Element Area</h2>
-
-<b>Max Element Area</b> hypothesis is applied for meshing of faces
-composing your geometrical object. Definition of this hypothesis
-consists of setting the <b>maximum area</b> of mesh faces,
-which will compose the mesh of these faces.
-
-\image html a-maxelarea.png
-
-\n
-
-\image html max_el_area.png "In this example, Max. element area is very small compared to the 1D hypothesis"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_max_element_area "Maximum Element Area" hypothesis operation. 
-
-\anchor length_from_edges_anchor
-<h2>Length from Edges</h2>
-
-<b>Length from edges</b> hypothesis defines the maximum linear size of
-mesh faces as an average length of mesh edges approximating
-the meshed face boundary.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_length_from_edges "Length from Edges" hypothesis operation.
-
-\anchor hypo_quad_params_anchor
-<h2>Quadrangle parameters</h2>
-
-\image html hypo_quad_params_dialog.png "Quadrangle parameters: Transition"
-
-<b>Quadrangle parameters</b> is a hypothesis for \ref quad_ijk_algo_page.
-
-<b>Transition</b> tab is used to define the algorithm of transition
-between opposite sides of the face with a different number of
-segments on them. The following types of transition
-algorithms are available:
-
-- <b>Standard</b> is the default case, when both triangles and quadrangles
-  are possible in the transition area along the finer meshed sides.
-- <b>Triangle preference</b> forces building only triangles in the
-  transition area along the finer meshed sides.
-  \note This type corresponds to <b>Triangle Preference</b> additional hypothesis,
-  which is obsolete now.
-- <b>Quadrangle preference</b> forces building only quadrangles in the
-  transition area along the finer meshed sides. This hypothesis has a
-  restriction: the total quantity of segments on all
-  four face sides must be even (divisible by 2).
-  \note This type corresponds to <b>Quadrangle Preference</b> additional hypothesis,
-  which is obsolete now.
-- <b>Quadrangle preference (reversed)</b> works in the same way and
-  with the same restriction as <b>Quadrangle preference</b>, but
-  the transition area is located along the coarser meshed sides.
-- <b>Reduced</b> type forces building only quadrangles and the transition
-  between the sides is made gradually, layer by layer. This type has
-  a limitation on the number of segments: one pair of opposite sides must have
-  the same number of segments, the other pair must have an even total
-  number of segments. In addition, the number of rows
-  between sides with different discretization
-  should be enough for the transition. Following the fastest transition
-  pattern, three segments become one (see the image below), hence
-  the least number of face rows needed to reduce from Nmax segments
-  to Nmin segments is log<sub>3</sub>( Nmax / Nmin ). The number of
-  face rows is equal to the number of segments on each of equally
-  discretized sides.
-
-\image html reduce_three_to_one.png "The fastest transition pattern: 3 to 1"
-
-<b>Base vertex</b> tab allows using Quadrangle: Mapping
-algorithm for meshing of trilateral faces. In this case it is
-necessary to select the vertex, which will be used as the forth
-degenerated side of quadrangle.
-
-\image html hypo_quad_params_dialog_vert.png "Quadrangle parameters: Base Vertex"
-
-\image html hypo_quad_params_1.png "A face built from 3 edges"
-
-\image html hypo_quad_params_res.png "The resulting mesh"
-
-This parameter can be also used to mesh a segment of a circular face.
-Please, consider that there is a limitation on the selection of the
-vertex for the faces built with the angle > 180 degrees (see the picture).
-
-\image html hypo_quad_params_2.png "3/4 of a circular face"
-
-In this case, selection of a wrong vertex for the <b>Base vertex</b>
-parameter will generate a wrong mesh. The picture below
-shows the good (left) and the bad (right) results of meshing.
-
-\image html hypo_quad_params_res_2.png "The resulting meshes"
-
-\image html hypo_quad_params_dialog_enf.png "Quadrangle parameters: Enforced nodes"
-
-<b>Enforced nodes</b> tab allows defining points, where the
-algorithm should create nodes. There are two ways to define positions
-of the enforced nodes.
-<ul>
-  <li>\b Vertices group allows to set up shapes whose vertices will
-    define positions of the enforced nodes. Only vertices successfully
-    projected to the meshed face and located close enough to the
-    meshed face will be used to create the enforced nodes.</li>
-  <li> \b Points group allows to explicitly define coordinates of
-    points used to create the enforced nodes. Only points successfully
-    projected to the meshed face and located close enough to the
-    meshed face will be used to create the enforced nodes.</li>
-</ul>
-\note <b>Enforced nodes</b> cannot be created at \b Reduced transition type.
-
-Let us see how the algorithm works:
-<ul>
-  <li> Initially positions of nodes are computed without taking into
-  account the enforced vertex (yellow point).</li> 
-\image html hypo_quad_params_enfnodes_algo1.png "Initial mesh"
-
-  <li> Then the node closest to the enforced vertex is
-    detected. Extreme nodes of the row and column of the detected node
-    are used to create virtual edges (yellow lines) ending at the
-    enforced vertex. </li>
-\image html hypo_quad_params_enfnodes_algo2.png "Creation of virtual edges"
-       
-  <li> Consequently, the meshed face is divided by the virtual
-    edges into four quadrilateral sub-domains each of which is meshed
-    as usually: the nodes of the row and column of the detected node are
-    moved to the virtual edges and the quadrilateral elements are
-    constructed. 
-       
-\image html hypo_quad_params_enfnodes_algo3.png "Final mesh"   
-
-</ul>
-If there are several enforced vertices, the algorithm is applied
-recursively to the formed sub-domains.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis.
-
-<br>
-*/
diff --git a/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst b/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst
new file mode 100644 (file)
index 0000000..0e5f108
--- /dev/null
@@ -0,0 +1,152 @@
+.. _a2d_meshing_hypo_page:
+
+*********************
+2D Meshing Hypotheses
+*********************
+
+- :ref:`max_element_area_anchor`
+- :ref:`length_from_edges_anchor`
+- :ref:`hypo_quad_params_anchor`
+
+.. _max_element_area_anchor:
+
+Max Element Area
+################
+
+**Max Element Area** hypothesis is applied for meshing of faces composing your geometrical object. Definition of this hypothesis consists of setting the **maximum area** of mesh faces, which will compose the mesh of these faces.
+
+.. image:: ../images/a-maxelarea.png
+       :align: center
+
+|    
+
+.. image:: ../images/max_el_area.png 
+       :align: center
+
+.. centered::
+       In this example, Max. element area is very small compared to the 1D hypothesis
+
+**See Also** a sample TUI Script of :ref:`tui_max_element_area` hypothesis operation. 
+
+.. _length_from_edges_anchor:
+
+Length from Edges
+#################
+
+**Length from edges** hypothesis defines the maximum linear size of mesh faces as an average length of mesh edges approximating the meshed face boundary.
+
+**See Also** a sample TUI Script of :ref:`tui_length_from_edges` hypothesis operation.
+
+.. _hypo_quad_params_anchor:
+
+Quadrangle parameters
+#####################
+
+.. image:: ../images/ hypo_quad_params_dialog.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Transition
+
+**Quadrangle parameters** is a hypothesis for :ref:`quad_ijk_algo_page`.
+
+**Transition** tab is used to define the algorithm of transition between opposite sides of the face with a different number of segments on them. The following types of transition algorithms are available:
+
+* **Standard** is the default case, when both triangles and quadrangles are possible in the transition area along the finer meshed sides.
+* **Triangle preference** forces building only triangles in the transition area along the finer meshed sides.
+
+  .. note:: This type corresponds to **Triangle Preference** additional hypothesis, which is obsolete now.
+
+* **Quadrangle preference** forces building only quadrangles in the transition area along the finer meshed sides. This hypothesis has a restriction: the total quantity of segments on all four face sides must be even (divisible by 2).
+
+  .. note:: This type corresponds to **Quadrangle Preference** additional hypothesis, which is obsolete now.
+
+* **Quadrangle preference (reversed)** works in the same way and with the same restriction as **Quadrangle preference**, but the transition area is located along the coarser meshed sides.
+* **Reduced** type forces building only quadrangles and the transition between the sides is made gradually, layer by layer. This type has a limitation on the number of segments: one pair of opposite sides must have the same number of segments, the other pair must have an even total number of segments. In addition, the number of rows between sides with different discretization should be enough for the transition. Following the fastest transition pattern, three segments become one (see the image below), hence the least number of face rows needed to reduce from Nmax segments to Nmin segments is log<sub>3</sub>( Nmax / Nmin ). The number of face rows is equal to the number of segments on each of equally discretized sides.
+
+.. image:: ../images/ reduce_three_to_one.png 
+       :align: center
+
+.. centered::
+       The fastest transition pattern: 3 to 1
+
+**Base vertex** tab allows using Quadrangle: Mapping algorithm for meshing of trilateral faces. In this case it is necessary to select the vertex, which will be used as the forth degenerated side of quadrangle.
+
+.. image:: ../images/ hypo_quad_params_dialog_vert.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Base Vertex
+
+.. image:: ../images/ hypo_quad_params_1.png 
+       :align: center
+
+.. centered::
+       A face built from 3 edges
+
+.. image:: ../images/ hypo_quad_params_res.png 
+       :align: center
+
+.. centered::
+       The resulting mesh
+
+This parameter can be also used to mesh a segment of a circular face. Please, consider that there is a limitation on the selection of the vertex for the faces built with the angle > 180 degrees (see the picture).
+
+.. image:: ../images/ hypo_quad_params_2.png 
+       :align: center
+
+.. centered:: 
+       3/4 of a circular face
+
+In this case, selection of a wrong vertex for the **Base vertex** parameter will generate a wrong mesh. The picture below shows the good (left) and the bad (right) results of meshing.
+
+.. image:: ../images/ hypo_quad_params_res_2.png 
+       :align: center
+
+.. centered::
+       The resulting meshes
+
+.. image:: ../images/ hypo_quad_params_dialog_enf.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Enforced nodes
+
+**Enforced nodes** tab allows defining points, where the algorithm should create nodes. There are two ways to define positions of the enforced nodes.
+
+* **Vertices** group allows to set up shapes whose vertices will  define positions of the enforced nodes. Only vertices successfully projected to the meshed face and located close enough to the meshed face will be used to create the enforced nodes.
+* **Points** group allows to explicitly define coordinates of points used to create the enforced nodes. Only points successfully projected to the meshed face and located close enough to the meshed face will be used to create the enforced nodes.
+
+..  note::
+       **Enforced nodes** cannot be created at **Reduced** transition type.
+
+Let us see how the algorithm works:
+
+* Initially positions of nodes are computed without taking into account the enforced vertex (yellow point). 
+
+.. image:: ../images/ hypo_quad_params_enfnodes_algo1.png
+       :align: center
+
+.. centered::
+       Initial mesh
+
+* Then the node closest to the enforced vertex is detected. Extreme nodes of the row and column of the detected node are used to create virtual edges (yellow lines) ending at the enforced vertex. 
+
+       .. image:: ../images/ hypo_quad_params_enfnodes_algo2.png
+               :align: center
+       .. centered::
+                Creation of virtual edges
+       
+* Consequently, the meshed face is divided by the virtual edges into four quadrilateral sub-domains each of which is meshed as usually: the nodes of the row and column of the detected node are moved to the virtual edges and the quadrilateral elements are constructed. 
+       
+       .. image:: ../images/ hypo_quad_params_enfnodes_algo3.png 
+               :align: center
+       
+       .. centered::
+               Final mesh
+
+
+If there are several enforced vertices, the algorithm is applied recursively to the formed sub-domains.
+
+**See Also** a sample TUI Script of a :ref:`Quadrangle Parameters <tui_quadrangle_parameters>` hypothesis.
+
diff --git a/doc/salome/gui/SMESH/input/StdMeshersBuilder.rst b/doc/salome/gui/SMESH/input/StdMeshersBuilder.rst
new file mode 100644 (file)
index 0000000..a1bf1d4
--- /dev/null
@@ -0,0 +1,9 @@
+smesh_algorithm module
+======================
+.. automodule:: smesh_algorithm
+   :members:
+
+StdMeshersBuilder module
+========================
+.. automodule:: StdMeshersBuilder
+   :members:
diff --git a/doc/salome/gui/SMESH/input/about_filters.doc b/doc/salome/gui/SMESH/input/about_filters.doc
deleted file mode 100644 (file)
index 0519da4..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-
-\page filters_page About filters
-
-\b Filters allow picking only the mesh elements satisfying to a
-specific condition or a set of conditions. Filters can be used to create
-or edit mesh groups, remove elements from the mesh, control
-mesh quality by different parameters, etc.
-
-Several \ref filtering_criteria "filtering criteria" can be combined
-together by using logical operators \a AND and \a OR. In addition, a
-filter criterion can be reverted using logical operator \a NOT.
-
-Some filtering criteria use the functionality of \ref quality_page
-"mesh quality controls" to filter mesh nodes / elements by specific
-characteristic (Area, Length, etc).
-
-The functinality of mesh filters is available in both GUI and TUI
-modes:
-
-- In GUI, filters are available in some dialog boxes via "Set Filters"
-button, clicking on which opens the \ref filtering_elements "dialog box"
-allowing to specify the list of filter criteria to be applied to the
-current selection. See \subpage selection_filter_library_page page to
-learn more about selection filters and their usage in GUI.
-
-- In Python scripts, filters can be used to choose only some mesh
-  entities (nodes or elements) for the operations, which require the
-  list of entities as input parameter (create/modify group, remove
-  nodes/elements, etc) and for the operations, which accept objects
-  (groups, sub-meshes) as input parameter. The page \ref
-  tui_filters_page provides examples of the filters usage in Python
-  scripts.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/about_filters.rst b/doc/salome/gui/SMESH/input/about_filters.rst
new file mode 100644 (file)
index 0000000..5f36201
--- /dev/null
@@ -0,0 +1,23 @@
+.. _filters_page: 
+
+*************
+About filters
+*************
+
+**Filters** allow picking only the mesh elements satisfying to a specific condition or a set of conditions. Filters can be used to create or edit mesh groups, remove elements from the mesh, control mesh quality by different parameters, etc.
+
+Several criteria can be combined together by using logical operators *AND* and *OR*. In addition, a filter criterion can be reverted using logical operator *NOT*.
+
+Some filtering criteria use the functionality of :ref:`mesh quality controls <quality_page>` to filter mesh nodes / elements by specific characteristic (Area, Length, etc).
+
+The functinality of mesh filters is available in both GUI and TUI modes:
+
+* In GUI, filters are available in some dialog boxes via "Set Filters" button, clicking on which opens the :ref:`dialog box <filtering_elements>` allowing to specify the list of filter criteria to be applied to the current selection. See :ref:`selection_filter_library_page` page to learn more about selection filters and their usage in GUI.
+
+* In Python scripts, filters can be used to choose only some mesh nodes or elements for the operations, which require the list of entities as input parameter (create/modify group, remove nodes/elements, etc) and for the operations, which accept objects (groups, sub-meshes) as input parameter. The page :ref:`tui_filters_page` provides examples of the filters usage in Python scripts.
+
+.. toctree::
+   :maxdepth: 2
+   :hidden:
+
+   selection_filter_library.rst
diff --git a/doc/salome/gui/SMESH/input/about_hypo.doc b/doc/salome/gui/SMESH/input/about_hypo.doc
deleted file mode 100644 (file)
index f405559..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*!
-
-\page about_hypo_page About Hypotheses
-
-\b Hypotheses represent boundary conditions which will be taken into
-account by meshing algorithms.
-The hypotheses allow you to manage the level of detail of
-the resulting mesh: when applying different hypotheses
-with different parameters you can preset the quantity or size of
-elements which will compose your mesh. So, it will be possible to
-generate a coarse or a more refined mesh.
-
-The choice of a hypothesis depends on the selected algorithm.
-
-Hypotheses are created during creation and edition of 
-\ref constructing_meshes_page "meshes" and
-\ref constructing_submeshes_page "sub-meshes". 
-Once created a hypotheses can be reused during creation and edition of
-other meshes and sub-meshes. All created hypotheses and algorithms are
-present in the Object Browser in \a Hypotheses and \a Algorithms
-folders correspondingly. It is possible to open a dialog to modify the
-parameters of a hypothesis from its context menu. This menu also
-provides \b Unassign command that will unassign the hypothesis from
-all meshes and sub-meshes using it. Modification of any parameter of a
-hypothesis and its unassignment leads to automatic removal of elements
-generated using it.
-
-In \b MESH there are the following Basic Hypotheses:
-<ul>
-<li>\subpage a1d_meshing_hypo_page "1D Hypotheses" (for meshing of 
-<b>edges</b>):</li>
-<ul>
-<li>\ref number_of_segments_anchor "Number of Segments"</li>
-<li>\ref average_length_anchor "Local Length"</li>
-<li>\ref max_length_anchor "Max Size"</li>
-<li>\ref adaptive_1d_anchor "Adaptive"</li>
-<li>\ref arithmetic_1d_anchor "Arithmetic Progression"</li>
-<li>\ref geometric_1d_anchor "Geometric Progression"</li>
-<li>\ref start_and_end_length_anchor "Start and end length"</li>
-<li>\ref deflection_1d_anchor "Deflection"</li>
-<li>\ref automatic_length_anchor "Automatic Length"</li>
-<li>\ref fixed_points_1d_anchor "Fixed points"</li>
-</ul>
-<li>\subpage a2d_meshing_hypo_page "2D Hypotheses" (for meshing of <b>faces</b>):</li>
-<ul>
-<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>
-</ul>
-<li>3D Hypothesis (for meshing of <b>volumes</b>):</li>
-<ul>
-<li>\subpage max_element_volume_hypo_page "Max Element Volume"</li>
-</ul>
-</ul>
-
-There also exist
-\subpage additional_hypo_page "Additional Hypotheses":
-<ul>
-<li>\ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges"</li>
-<li>\ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"</li>
-<li>\ref viscous_layers_anchor "Viscous layers"</li>
-<li>\ref quadratic_mesh_anchor "Quadratic mesh"</li>
-<li>\ref quadrangle_preference_anchor "Quadrangle preference"</li>
-</ul>
-
-*/
diff --git a/doc/salome/gui/SMESH/input/about_hypo.rst b/doc/salome/gui/SMESH/input/about_hypo.rst
new file mode 100644 (file)
index 0000000..df935f3
--- /dev/null
@@ -0,0 +1,31 @@
+.. _about_hypo_page: 
+
+****************
+About Hypotheses
+****************
+
+**Hypotheses** represent boundary conditions which will be taken into account by meshing algorithms. The hypotheses allow you to manage the level of detail of the resulting mesh: when applying different hypotheses with different parameters you can preset the quantity or size of elements which will compose your mesh. So, it will be possible to generate a coarse or a more refined mesh.
+
+The choice of a hypothesis depends on the selected algorithm.
+
+Hypotheses are created during creation and edition of 
+:ref:`meshes <constructing_meshes_page>` and :ref:`sub-meshes <constructing_submeshes_page>`. 
+Once created a hypotheses can be reused during creation and edition of other meshes and sub-meshes. All created hypotheses and algorithms are present in the Object Browser in *Hypotheses* and *Algorithms* folders correspondingly. It is possible to open a dialog to modify the parameters of a hypothesis from its context menu. This menu also provides  **Unassign** command that will unassign the hypothesis from all meshes and sub-meshes using it. Modification of any parameter of a hypothesis and its unassignment leads to automatic removal of elements generated using it.
+
+In **MESH** there are:
+
+* :ref:`a1d_meshing_hypo_page` for meshing of **edges**
+* :ref:`a2d_meshing_hypo_page` for meshing of **faces**
+* :ref:`3D Hypothesis <max_element_volume_hypo_page>` for meshing of **volumes**
+* :ref:`additional_hypo_page`
+
+**Table of Contents**
+
+.. toctree::
+   :maxdepth: 2
+
+   1d_meshing_hypo.rst
+   2d_meshing_hypo.rst
+   3D: Max Element Volume hypothesis <max_element_volume_hypo>
+   additional_hypo.rst 
+
diff --git a/doc/salome/gui/SMESH/input/about_meshes.doc b/doc/salome/gui/SMESH/input/about_meshes.doc
deleted file mode 100644 (file)
index be900bc..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*!
-
-\page about_meshes_page About meshes
-
-\n \b MESH represents a discrete approximation of a subset of the
-three-dimensional space by \ref mesh_entities "elementary geometrical elements".
-
-A SALOME study can contain multiple meshes, but they do not
-implicitly compose one super-mesh, and finally each of them
-can be used (e.g. exported) only individually.
-
-Mesh module provides several ways to create the mesh:
-<ul>
-  <li>The main way is to \subpage constructing_meshes_page "construct the mesh" 
-    on the basis of the geometrical shape produced in the Geometry
-    module. This way implies selection of 
-    - a geometrical object (<em>main shape</em>) and
-    - <em>meshing parameters</em> (\ref
-      basic_meshing_algos_page "meshing algorithms" and
-    characteristics (e.g. element size) of a
-    required mesh encapsulated in \ref about_hypo_page "hypothesis"
-    objects).
-
-    Construction of \subpage constructing_submeshes_page "sub-meshes"
-    allows to discretize some sub-shapes of the main shape, for example a face,
-    using the meshing parameters that differ from those used for other sub-shapes.<br>
-    Meshing parameters of meshes and sub-meshes can be 
-    \subpage editing_meshes_page "edited". (Upon edition only mesh entities
-    generated using changed meshing parameters are removed and will be
-    re-computed).<br>
-    \note Algorithms and hypotheses used at mesh level are referred to as
-    \a global ones and those used at sub-mesh level are referred to as \a
-    local ones.
-  </li>
-  <li>Bottom-up way, using \ref modifying_meshes_page "mesh modification"
-    operations, especially \ref extrusion_page "extrusion" and \ref
-    revolution_page "revolution". To create an empty mesh not based on
-    geometry, use the same dialog as to \ref constructing_meshes_page
-    "construct the mesh on geometry" but specify neither the geometry
-    nor meshing algorithms.
-  </li>
-  <li>The mesh can be \subpage importing_exporting_meshes_page "imported" from
-    (and exported to) the file in MED, UNV, STL, CGNS, DAT, GMF and
-    SAUVE formats.
-  </li>
-  <li>The 3D mesh can be generated from the 2D mesh not based on geometry,
-    which was either \ref importing_exporting_meshes_page "imported" or created in
-    other way. To setup the meshing parameters of a mesh not based on geometry,
-    just invoke \ref editing_meshes_page "Edit mesh / sub-mesh" command on
-    your 2D mesh.
-  </li>
-  <li>Several meshes can be \subpage building_compounds_page "combined"
-    into a new mesh.
-  </li>
-  <li>The whole mesh or its part (sub-mesh or group) can be 
-    \subpage copy_mesh_page "copied" into a new mesh.
-  </li>
-  <li>A new mesh can be created from a transformed, e.g. \ref
-    translation_page "translated", part of the mesh.</li>
-</ul>
-
-Meshes can be edited using the MESH functions destined for 
-\ref modifying_meshes_page "modification" of meshes.
-
-Attractive meshing capabilities include:
-- 3D and 2D \ref viscous_layers_anchor "Viscous Layers" (boundary
-  layers of highly stretched elements beneficial for high quality
-  viscous computations);
-- automatic conformal transition between tetrahedral and hexahedral
-  sub-meshes.
-
-The \b structure of a SALOME mesh is described by nodes and elements based on
-these nodes. The geometry of an element is defined by the sequence of
-nodes constituting it and the \ref connectivity_page "connectivity convention"
-(adopted from MED library). Definition of the element basing on the elements
-of a lower dimension is NOT supported.
-
-\anchor mesh_entities
-The mesh can include the following entities:
-<ul>
-<li>\b Node &mdash; a mesh entity defining a position in 3D
-  space with coordinates (x, y, z).</li>
-<li>\b Edge (or segment) &mdash; 1D mesh element linking two nodes.</li>
-<li>\b Face &mdash; 2D mesh element representing a part of
-  surface bound by links between face nodes. A face can be a
-  triangle, quadrangle or polygon.</li>
-<li>\b Volume &mdash; 3D mesh element representing a part of 3D
-  space bound by volume facets. Nodes of a volume describing each
-  facet are defined by
-  the \subpage connectivity_page "connectivity convention".
-  A volume can be a tetrahedron, hexahedron,
-  pentahedron, pyramid, hexagonal prism or polyhedron.</li>
-<li>\b 0D element &mdash; mesh element defined by one node.</li>
-<li>\b Ball element &mdash; discrete mesh element defined by a
-  node and a diameter.</li>
-</ul>
-
-Every mesh entity has an attribute associating it to a sub-shape it is
-generated on (if any). The node generated on the geometrical edge or
-surface in addition stores its position in parametric space of the
-associated geometrical entity. This attribute is set up by meshing
-algorithms generating elements and nodes.
-
-Mesh entities are identified by integer IDs starting from 1.
-Nodes and elements are counted separately, i.e. there can be a node
-and element with the same ID.
-
-SALOME supports elements of second order, without a central node
-(quadratic triangle, quadrangle, polygon, tetrahedron, hexahedron,
-pentahedron and pyramid) and with central nodes (bi-quadratic triangle
-and quadrangle and tri-quadratic hexahedron).<br>
-Quadratic mesh can be obtained in three ways:
-- Using a global \ref quadratic_mesh_anchor "Quadratic Mesh"
-hypothesis. (Elements with the central node are not generated in this way).
-- Using \ref convert_to_from_quadratic_mesh_page operation.
-- Using an appropriate option of some meshing algorithms, which
-generate elements of several dimensions starting from mesh segments.
-*/
diff --git a/doc/salome/gui/SMESH/input/about_meshes.rst b/doc/salome/gui/SMESH/input/about_meshes.rst
new file mode 100644 (file)
index 0000000..abb8067
--- /dev/null
@@ -0,0 +1,85 @@
+.. _about_meshes_page: 
+
+************
+About meshes
+************ 
+
+**MESH** represents a discrete approximation of a subset of the three-dimensional space by `elementary geometrical elements`_.
+
+A SALOME study can contain multiple meshes, but they do not implicitly compose one super-mesh, and finally each of them can be used (e.g. exported) only individually.
+
+Mesh module provides several ways to create the mesh:
+
+* The main way is to :ref:`construct the mesh <constructing_meshes_page>` on the basis of the geometrical shape produced in the Geometry module. This way implies selection of 
+
+  * a geometrical object (*main shape*) and
+  * *meshing parameters* (:ref:`meshing algorithms <basic_meshing_algos_page>` and characteristics (e.g. element size) of a required mesh encapsulated in :ref:`hypothesis <about_hypo_page>` objects).
+
+  Construction of :ref:`sub-meshes <constructing_submeshes_page>` allows to discretize some sub-shapes of the main shape, for example a face, using the meshing parameters that differ from those used for other sub-shapes.
+  Meshing parameters of meshes and sub-meshes can be :ref:`edited <editing_meshes_page>`. (Upon edition only mesh entities generated using changed meshing parameters are removed and will be re-computed).
+
+  .. note::
+       Algorithms and hypotheses used at mesh level are referred to as *global* ones and those used at sub-mesh level are referred to as *local* ones.
+  
+* Bottom-up way, using :ref:`mesh modification <modifying_meshes_page>` operations, especially :ref:`extrusion <extrusion_page>` and :ref:`revolution <revolution_page>`. To create an empty mesh not based on geometry, use the same dialog as to :ref:`construct the mesh on geometry <constructing_meshes_page>` but specify neither the geometry nor meshing algorithms.
+  
+* The mesh can be :ref:`imported <importing_exporting_meshes_page>` from (and exported to) the file in MED, UNV, STL, CGNS, DAT, GMF and SAUVE formats.
+  
+* The 3D mesh can be generated from the 2D mesh not based on geometry, which was either :ref:`imported <importing_exporting_meshes_page>` or created in other way. To setup the meshing parameters of a mesh not based on geometry, just invoke :ref:`Edit mesh / sub-mesh <editing_meshes_page>` command on your 2D mesh.
+  
+* Several meshes can be :ref:`combined <building_compounds_page>` into a new mesh.
+  
+* The whole mesh or its part (sub-mesh or group) can be :ref:`copied <copy_mesh_page>` into a new mesh.
+  
+* A new mesh can be created from a transformed, e.g. :ref:`translated <translation_page>`, part of the mesh.
+
+
+Meshes can be edited using the MESH functions destined for :ref:`modification <modifying_meshes_page>` of meshes.
+
+Attractive meshing capabilities include:
+
+* 3D and 2D :ref:`Viscous Layers <viscous_layers_anchor>` (boundary layers of highly stretched elements beneficial for high quality viscous computations);
+* automatic conformal transition between tetrahedral and hexahedral sub-meshes.
+
+The **structure** of a SALOME mesh is described by nodes and elements based on these nodes. The geometry of an element is defined by the sequence of nodes constituting it and the :ref:`connectivity convention <connectivity_page>` (adopted from MED library). Definition of the element basing on the elements of a lower dimension is NOT supported.
+
+.. _elementary geometrical elements:
+
+The mesh can include the following entities:
+
+* **Node** - a mesh entity defining a position in 3D space with coordinates (x, y, z).
+* **Edge** (or segment) - 1D mesh element linking two nodes.
+* **Face** - 2D mesh element representing a part of surface bound by links between face nodes. A face can be a triangle, quadrangle or polygon.
+* **Volume** - 3D mesh element representing a part of 3D space bound by volume facets. Nodes of a volume describing each facet are defined by the :ref:`connectivity convention <connectivity_page>`. A volume can be a tetrahedron, hexahedron, pentahedron, pyramid, hexagonal prism or polyhedron.
+* **0D** element - mesh element defined by one node.
+* **Ball** element - discrete mesh element defined by a node and a diameter.
+
+
+Every mesh entity has an attribute associating it to a sub-shape it is generated on (if any). The node generated on the geometrical edge or surface in addition stores its position in parametric space of the associated geometrical entity. This attribute is set up by meshing algorithms generating elements and nodes.
+
+Mesh entities are identified by integer IDs starting from 1.
+Nodes and elements are counted separately, i.e. there can be a node and element with the same ID.
+
+SALOME supports elements of second order, without a central node (quadratic triangle, quadrangle, polygon, tetrahedron, hexahedron,
+pentahedron and pyramid) and with central nodes (bi-quadratic triangle and quadrangle and tri-quadratic hexahedron).
+
+Quadratic mesh can be obtained in three ways:
+
+* Using a global :ref:`quadratic_mesh_anchor` hypothesis. (Elements with the central node are not generated in this way).
+* Using :ref:`convert_to_from_quadratic_mesh_page` operation.
+* Using an appropriate option of some meshing algorithms, which generate elements of several dimensions starting from mesh segments.
+
+
+**Table of Contents**
+
+.. toctree::
+   :titlesonly:
+   :maxdepth: 2
+
+   constructing_meshes.rst
+   constructing_submeshes.rst
+   editing_meshes.rst
+   importing_exporting_meshes.rst
+   building_compounds.rst
+   copy_mesh.rst
+   connectivity.rst
diff --git a/doc/salome/gui/SMESH/input/about_quality_controls.doc b/doc/salome/gui/SMESH/input/about_quality_controls.doc
deleted file mode 100644 (file)
index 84bcf0d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-
-\page quality_page About quality controls
-
-\n <b>Mesh quality control</b> in MESH is destined for visual control of the generated mesh.
-
-Application of a definite quality control consists of usage of the
-corresponding algorithm, which calculates a value of a definite
-geometric characteristic (Area, Length of edges, etc) for all meshing
-elements, composing your mesh. Then all meshing elements are colored
-according the calculated values. The reference between the coloring of
-the meshing elements and these calculated values is shown with the
-help of a scalar bar, which is displayed near the presentation of your
-mesh.
-
-There are four types of quality controls, corresponding to node, edge,
-face and volume entity type.
-
-Node quality controls:
-<ul>
-<li>\subpage free_nodes_page "Free nodes"</li>
-<li>\subpage double_nodes_control_page "Double nodes"</li>
-</ul>
-
-Edge quality controls:
-<ul>
-<li>\subpage free_borders_page "Free borders"</li>
-<li>\subpage length_page "Length"</li>
-<li>\subpage borders_at_multi_connection_page "Borders at multi-connection"</li>
-<li>\subpage double_elements_page "Double edges"</li>
-</ul>
-
-Face quality controls:
-<ul>
-<li>\subpage free_edges_page "Free edges"</li>
-<li>\subpage free_faces_page "Free faces"</li>
-<li>\subpage bare_border_faces_page "Bare border faces"</li>
-<li>\subpage over_constrained_faces_page "Over-constrained faces"</li>
-<li>\subpage length_2d_page "Length 2D"</li>
-<li>\subpage deflection_2d_page "Deflection 2D"</li>
-<li>\subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
-<li>\subpage area_page "Area"</li>
-<li>\subpage taper_page "Taper"</li>
-<li>\subpage aspect_ratio_page "Aspect ratio"</li>
-<li>\subpage minimum_angle_page "Minimum angle"</li>
-<li>\subpage warping_page "Warping"</li>
-<li>\subpage skew_page "Skew"</li>
-<li>\subpage max_element_length_2d_page "Element Diameter 2D"</li>
-<li>\ref double_elements_page "Double faces"</li>
-</ul>
-
-Volume quality controls:
-<ul>
-<li>\subpage aspect_ratio_3d_page "Aspect ratio 3D"</li>
-<li>\subpage volume_page "Volume"</li>
-<li>\subpage max_element_length_3d_page "Element Diameter 3D"</li>
-<li>\subpage bare_border_volumes_page "Bare border volumes"</li>
-<li>\subpage over_constrained_volumes_page "Over-constrained volumes"</li>
-<li>\ref double_elements_page "Double volumes"</li>
-</ul>
-
-To manage the quality controls call pop-up in the VTK viewer and select "Controls" sub-menu
-\image html controls_popup.png
-
-<ul>
-<li> <b>Reset</b> switches off quality controls;</li>
-<li> <b>Node Controls</b> provides access to the node quality controls;</li>
-<li> <b>Edge Controls</b> provides access to the edge quality controls;</li>
-<li> <b>Face Controls</b> provides access to the face quality controls;</li>
-<li> <b>Volume Controls</b> provides access to the volume quality controls;</li>
-<li> <b>Scalar Bar Properties</b> allows setting \subpage scalar_bar_dlg;</li>
-<li> <b>Distribution -> Export ...</b> allows saving the distribution of quality control values in the text file;</li>
-<li> <b>Distribution -> Show </b> Shows/Hides the distribution histogram of the quality control values in the VTK Viewer.</li>
-<li> <b>Distribution -> Plot </b> Plots the distribution histogram of the quality control values in the Plot 2D Viewer.</li>
-</ul>
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/about_quality_controls.rst b/doc/salome/gui/SMESH/input/about_quality_controls.rst
new file mode 100644 (file)
index 0000000..63b20dd
--- /dev/null
@@ -0,0 +1,100 @@
+.. _quality_page: 
+
+**********************
+About quality controls
+**********************
+
+**Mesh quality control** in MESH is destined for visual control of the generated mesh.
+
+Application of a definite quality control consists of usage of the corresponding algorithm, which calculates a value of a definite geometric characteristic (Area, Length of edges, etc) for all meshing elements, composing your mesh. Then all meshing elements are colored according the calculated values. The reference between the coloring of the meshing elements and these calculated values is shown with the help of a scalar bar, which is displayed near the presentation of your mesh.
+
+There are four types of quality controls, corresponding to node, edge, face and volume entity type.
+
+Node quality controls:
+
+* :ref:`free_nodes_page`
+* :ref:`double_nodes_control_page`
+
+
+Edge quality controls:
+
+* :ref:`free_borders_page`
+* :ref:`length_page`
+* :ref:`borders_at_multi_connection_page`
+* :ref:`double_elements_page`
+
+
+Face quality controls:
+
+* :ref:`free_edges_page`
+* :ref:`free_faces_page`
+* :ref:`bare_border_faces_page`
+* :ref:`over_constrained_faces_page`
+* :ref:`length_2d_page`
+* :ref:`borders_at_multi_connection_2d_page`
+* :ref:`area_page`
+* :ref:`taper_page`
+* :ref:`aspect_ratio_page`
+* :ref:`minimum_angle_page`
+* :ref:`warping_page`
+* :ref:`skew_page`
+* :ref:`max_element_length_2d_page`
+* :ref:`double_elements_page`
+
+
+Volume quality controls:
+
+* :ref:`aspect_ratio_3d_page`
+* :ref:`volume_page`
+* :ref:`max_element_length_3d_page`
+* :ref:`bare_border_volumes_page`
+* :ref:`over_constrained_volumes_page`
+* :ref:`double_elements_page`
+
+
+To manage the quality controls call pop-up in the VTK viewer and select "Controls" sub-menu
+
+.. image:: ../images/controls_popup.png
+       :align: center
+
+
+*  **Reset** switches off quality controls;
+*  **Node Controls** provides access to the node quality controls;
+*  **Edge Controls** provides access to the edge quality controls;
+*  **Face Controls** provides access to the face quality controls;
+*  **Volume Controls** provides access to the volume quality controls;
+*  **Scalar Bar Properties** allows setting :ref:`scalar_bar_dlg`;
+*  **Distribution -> Export ...** allows saving the distribution of quality control values in the text file;
+*  **Distribution -> Show** Shows/Hides the distribution histogram of the quality control values in the VTK Viewer.
+*  **Distribution -> Plot** Plots the distribution histogram of the quality control values in the Plot 2D Viewer.
+
+**Table of Contents**
+
+.. toctree::
+       :maxdepth: 2
+
+       free_nodes.rst
+       double_nodes_control.rst
+       free_borders.rst
+       length.rst
+       borders_at_multi_connection.rst
+       double_elements_control.rst
+       free_edges.rst
+       free_faces.rst
+       bare_border_face.rst
+       over_constrained_faces.rst
+       length_2d.rst
+       borders_at_multi_connection_2d.rst
+       area.rst
+       taper.rst
+       aspect_ratio.rst
+       minimum_angle.rst
+       warping.rst
+       skew.rst
+       max_element_length_2d.rst
+       aspect_ratio_3d.rst
+       volume.rst
+       max_element_length_3d.rst
+       bare_border_volumes.rst
+       over_constrained_volumes.rst
+       scalar_bar.rst  
diff --git a/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc
deleted file mode 100644 (file)
index 793525c..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*!
-
-\page adding_nodes_and_elements_page Adding nodes and elements
-
-\n In MESH you can add to your mesh different elements such as:
-
-<ul>
-<li>\ref adding_nodes_anchor "Nodes"</li>
-<li>\ref adding_0delems_anchor "0D Elements"</li>
-<li>\ref adding_0delems_on_all_nodes_anchor "0D elements on Element Nodes"</li>
-<li>\ref adding_balls_anchor "Ball Elements"</li>
-<li>\ref adding_edges_anchor "Edges"</li>
-<li>\ref adding_triangles_anchor "Triangles"</li>
-<li>\ref adding_quadrangles_anchor "Quadrangles"</li>
-<li>\ref adding_polygons_anchor "Polygons"</li>
-<li>\ref adding_tetrahedrons_anchor "Tetrahedrons"</li>
-<li>\ref adding_hexahedrons_anchor "Hexahedrons"</li>
-<li>\ref adding_octahedrons_anchor "Hexagonal prism"</li>
-<li>\ref adding_polyhedrons_anchor "Polyhedrons"</li>
-</ul>
-
-The convention of nodal connectivity of elements used in SALOME is
-the MED library convention. You can consult the description of
-nodal connectivity of elements in the documentation on MED library or 
-\ref connectivity_page "here".
-
-<em>To add a node or an element to your mesh:</em>
-<ol>
-  <li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-  <li>From the \b Modification menu choose the \b Add item, the
-    following associated sub-menu will appear:</li>
-
-  \image html image152.png
-
-From this sub-menu select the type of element which you would like to add to your mesh.
-
-\note All dialogs for new node or element adding to the mesh provide
-the possibility to automatically add
-a node or element to the specified group or to create it anew using
-<b>Add to group</b> box, that allows choosing an existing group for
-the created node or element or giving the name to a new group. By
-default, the <b>Add to group</b> check box is switched off. If the user
-switches this check box on, the combo box listing all currently
-existing groups of the corresponding type becomes available. By
-default, no group is selected. In this case, when the user presses
-<b>Apply</b> or <b>Apply & Close</b> button, the warning message box
-informs the user about the necessity to input new group name. The
-combo box lists groups of all the 
-\ref grouping_elements_page "three types": both 
-\ref standalone_group "standalone groups",
-\ref group_on_filter "groups on filter", and 
-\ref group_on_geom "groups on geometry". If the user chooses a
-group on geometry or on filter, he is warned and proposed to
-convert this group to standalone.
-If the user rejects conversion operation, it is cancelled and
-a new node/element is not created!
-
-</ol>
-
-<b>See Also</b> sample TUI Scripts of  
-\ref tui_adding_nodes_and_elements "Adding Nodes and Elements"
-operations.  
-
-<br>
-\anchor adding_nodes_anchor
-<h2>Adding nodes</h2>
-
-\image html addnode.png
-
-In this dialog box set coordinates for your node in the \b Coordinates
-set of fields and click the \b Apply or <b>Apply and Close</b> button. Your node will be
-created:
-
-\image html add_node.png
-
-<br>
-\anchor adding_0delems_anchor
-<h2>Adding 0D elements</h2>
-
-\image html add0delement.png
-
-In this dialog box specify nodes which will form your 0D elements by
-selecting them in the 3D viewer. Activate <b>Allow duplicate
-  elements</b> to get several 0D elements on a node. Click the \b Apply or
-<b>Apply and Close</b> button. Your 0D elements will be created:
-
-\image html add_0delement.png
-
-\anchor adding_0delems_on_all_nodes_anchor
-<h2>Making 0D elements on Element Nodes</h2>
-
-There is another way to create 0D elements. It is possible to create
-0D elements on all nodes of the selected mesh, sub-mesh, or a group of elements or nodes.
-
-\image html dlg_0D_on_all_nodes.png
-
-In this dialog
-<ul>
-  <li> The radio-buttons allow choosing the type of object to create 0D elements on.
-    <ul>
-      <li><b> Mesh, sub-mesh, group </b> - this button allows selecting
-        a mesh, a sub-mesh or a group to create 0D elements on the nodes of its
-        elements. The name of the selected object is shown in the dialog. </li>
-      <li><b> Elements </b> - this button allows selecting elements in the
-        VTK viewer or typing their IDs in the dialog.</li>
-      <li><b> Nodes </b> - this button allows selecting nodes to create
-        0D elements on in the VTK viewer or typing their IDs in the dialog.</li>
-  </ul></li>
-  <li><b> Set Filter </b> button allows selecting elements or nodes
-    by filtering mesh elements or nodes with different criteria
-    (see \ref filtering_elements "Filter usage").</li>
-  <li>Activate <b>Allow duplicate elements</b> to get several 0D
-    elements on a node. </li>
-  <li> Switching on <b>Add to group</b> check-box allows specifying the
-    name of the group to which all created or found (existing) 0D elements will
-    be added. You can either select an existing group from a drop-down
-    list, or enter the name of the group to be created. If a selected
-    existing \ref grouping_elements_page "group" is not Standalone
-    (Group On Geometry or Group On Filter) it will be converted to
-    Standalone.
-    \warning If <b>Add to group</b> is activated it has to be filled in.
-</li>
-</ul>
-
-
-\anchor adding_balls_anchor
-<h2>Adding ball elements</h2>
-
-\image html addball.png
-
-In this dialog box specify the nodes, which will form your ball elements,
-either by selecting them in the 3D viewer or by manually entering their IDs,
-specify the ball diameter and click the \b Apply or <b>Apply and
-  Close</b> button.
-
-\image html add_ball.png
-
-<br>
-\anchor adding_edges_anchor
-<h2>Adding edges</h2>
-
-\image html addedge.png
-
-In this dialog box specify the nodes which will form your edge by
-selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your edge will be created:
-
-\image html add_edge.png
-
-<br>
-\anchor adding_triangles_anchor
-<h2>Adding triangles</h2>
-
-\image html addtriangle.png
-
-In this dialog box specify the nodes which will form your triangle by
-selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your triangle will be created:
-
-\image html add_triangle.png
-
-<br>
-\anchor adding_quadrangles_anchor
-<h2>Adding quadrangles</h2>
-
-\image html addquadrangle.png
-
-In this dialog box specify the nodes which will form your quadrangle
-by selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your quadrangle will be created:
-
-\image html add_quadrangle.png
-
-<br>
-\anchor adding_polygons_anchor
-<h2>Adding polygons</h2>
-
-\image html addpolygon.png
-
-In this dialog box specify the nodes which will form your polygon by
-selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button.
-
-\image html add_polygone.png
-
-<br>
-\anchor adding_tetrahedrons_anchor
-<h2>Adding tetrahedrons</h2>
-
-\image html addtetrahedron.png
-
-In this dialog box specify the nodes which will form your tetrahedron
-by selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your tetrahedron will be created:
-
-\image html image70.jpg
-
-<br>
-\anchor adding_hexahedrons_anchor
-<h2>Adding hexahedrons</h2>
-
-\image html addhexahedron.png
-
-In this dialog box specify the nodes which will form your hexahedron
-by selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your hexahedron will be created:
-
-\image html image71.jpg
-
-<br>
-\anchor adding_octahedrons_anchor
-<h2>Adding hexagonal prism</h2>
-
-In the Add Hexagonal Prism dialog box specify the nodes which will
-form your hexagonal prism by selecting them in the 3D viewer with pressed Shift button and click
-the \b Apply or <b>Apply and Close</b> button. Your hexagonal prism will be created:
-
-\image html image_octa12.png
-
-<br>
-\anchor adding_polyhedrons_anchor
-<h2>Adding polyhedrons</h2>
-
-\image html a-createpolyhedralvolume.png
-
-There are two different ways to add polyhedral volumes. 
-\n If you select \b Node as <b>Elements Type</b> you will specify the
-nodes which will form the faces of your polyhedron by selecting the
-nodes in the 3D viewer with pressed Shift button and clicking the \b
-Add button to add the face in the list of Faces by Nodes, which will
-form your polyhedron. Note, that it could be very useful to toggle
-Polyhedron Preview checkbox to see the results of your selection.
-\n The second way is somewhat simpler, however, there are cases when
-it does not provide you with the necessary level of precision. If you
-select \b Face as <b>Elements Type</b>, you will be able to select the faces
-which will form your polyhedron in the 3D viewer with pressed Shift
-button. If you've managed to obtain the necessary result, click the
-\b Apply or <b>Apply and Close</b> button. Your polyhedron will be created:
-
-\image html add_polyhedron.png
-
-*/
diff --git a/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst
new file mode 100644 (file)
index 0000000..d2df5f2
--- /dev/null
@@ -0,0 +1,220 @@
+.. _adding_nodes_and_elements_page: 
+
+*************************
+Adding nodes and elements
+*************************
+
+In MESH you can add to your mesh different elements such as:
+
+* :ref:`Nodes <adding_nodes_anchor>`
+* :ref:`0D Elements <adding_0delems_anchor>`
+* :ref:`0D elements on Element Nodes <adding_0delems_on_all_nodes_anchor>`
+* :ref:`Ball Elements <adding_balls_anchor>`
+* :ref:`Edges <adding_edges_anchor>`
+* :ref:`Triangles <adding_triangles_anchor>`
+* :ref:`Quadrangles <adding_quadrangles_anchor>`
+* :ref:`Polygons <adding_polygons_anchor>`
+* :ref:`Tetrahedrons <adding_tetrahedrons_anchor>`
+* :ref:`Hexahedrons <adding_hexahedrons_anchor>`
+* :ref:`Hexagonal prism <adding_octahedrons_anchor>`
+* :ref:`Polyhedrons <adding_polyhedrons_anchor>`
+
+
+The convention of nodal connectivity of elements used in SALOME is the MED library convention. You can consult the description of nodal connectivity of elements in the documentation on MED library or :ref:`here <connectivity_page>`.
+
+*To add a node or an element to your mesh:*
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+#. From the **Modification** menu choose the **Add** item, the following associated sub-menu will appear:
+
+       .. image:: ../images/image152.png
+               :align: center
+
+   From this sub-menu select the type of element which you would like to add to your mesh.
+
+   .. note:: All dialogs for new node or element adding to the mesh provide the possibility to automatically add a node or element to the specified group or to create it anew using **Add to group** box, that allows choosing an existing group for the created node or element or giving the name to a new group. By default, the **Add to group** check box is switched off. If the user switches this check box on, the combo box listing all currently existing groups of the corresponding type becomes available. By default, no group is selected. In this case, when the user presses **Apply** or **Apply & Close** button, the warning message box informs the user about the necessity to input new group name. The combo box lists groups of all the :ref:`three types <grouping_elements_page>`: both :ref:`standalone groups <standalone_group>`, :ref:`groups on filter <group_on_filter>`, and :ref:`groups on geometry <group_on_geom>`. If the user chooses a group on geometry or on filter, he is warned and proposed to convert this group to standalone. If the user rejects conversion operation, it is cancelled and a new node/element is not created!
+
+
+**See Also** sample TUI Scripts of :ref:`tui_adding_nodes_and_elements` operations.  
+
+.. _adding_nodes_anchor:
+
+Adding nodes
+############
+
+.. image:: ../images/addnode.png
+       :align: center
+
+In this dialog box set coordinates for your node in the **Coordinates** set of fields and click the **Apply** or **Apply and Close** button. Your node will be created:
+
+.. image:: ../images/add_node.png
+       :align: center
+
+
+.. _adding_0delems_anchor:
+
+Adding 0D elements
+##################
+
+.. image:: ../images/add0delement.png
+       :align: center
+
+In this dialog box specify nodes which will form your 0D elements by selecting them in the 3D viewer. Activate **Allow duplicate elements** 
+to get several 0D elements on a node. Click the **Apply** or **Apply and Close** button. Your 0D elements will be created:
+
+.. image:: ../images/add_0delement.png
+       :align: center
+
+
+.. _adding_0delems_on_all_nodes_anchor:
+
+Making 0D elements on Element Nodes
+###################################
+
+There is another way to create 0D elements. It is possible to create 0D elements on all nodes of the selected mesh, sub-mesh, or a group of elements or nodes.
+
+.. image:: ../images/dlg_0D_on_all_nodes.png
+       :align: center
+
+In this dialog
+
+*  The radio-buttons allow choosing the type of object to create 0D elements on.
+    
+       * **Mesh, sub-mesh, group** - this button allows selecting a mesh, a sub-mesh or a group to create 0D elements on the nodes of its elements. The name of the selected object is shown in the dialog. 
+       * **Elements** - this button allows selecting elements in the VTK viewer or typing their IDs in the dialog.
+       * **Nodes** - this button allows selecting nodes to create 0D elements on in the VTK viewer or typing their IDs in the dialog.
+  
+* **Set Filter** button allows selecting elements or nodes by filtering mesh elements or nodes with different criteria (see :ref:`Filter usage <filtering_elements>`).
+* Activate **Allow duplicate elements** to get several 0D elements on a node. 
+* Switching on **Add to group** check-box allows specifying the name of the group to which all created or found (existing) 0D elements will be added. You can either select an existing group from a drop-down list, or enter the name of the group to be created. If a selected existing :ref:`group <grouping_elements_page>` is not Standalone (Group On Geometry or Group On Filter) it will be converted to Standalone.
+
+.. warning:: If **Add to group** is activated it has to be filled in.
+
+
+
+
+.. _adding_balls_anchor:
+
+Adding ball elements
+####################
+
+.. image:: ../images/addball.png
+       :align: center
+
+In this dialog box specify the nodes, which will form your ball elements, either by selecting them in the 3D viewer or by manually entering their IDs, specify the ball diameter and click the **Apply** or **Apply and Close** button.
+
+.. image:: ../images/add_ball.png
+       :align: center
+
+
+.. _adding_edges_anchor:
+
+Adding edges
+############
+
+.. image:: ../images/addedge.png
+       :align: center
+
+In this dialog box specify the nodes which will form your edge by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button. Your edge will be created:
+
+.. image:: ../images/add_edge.png
+       :align: center
+
+
+.. _adding_triangles_anchor:
+
+Adding triangles
+################
+
+.. image:: ../images/addtriangle.png
+       :align: center
+
+In this dialog box specify the nodes which will form your triangle by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button. Your triangle will be created:
+
+.. image:: ../images/add_triangle.png
+       :align: center
+
+
+.. _adding_quadrangles_anchor:
+
+Adding quadrangles
+##################
+
+.. image:: ../images/addquadrangle.png
+       :align: center
+
+In this dialog box specify the nodes which will form your quadrangle by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button. Your quadrangle will be created:
+
+.. image:: ../images/add_quadrangle.png
+       :align: center
+
+
+.. _adding_polygons_anchor:
+
+Adding polygons
+###############
+
+.. image:: ../images/addpolygon.png
+       :align: center
+
+In this dialog box specify the nodes which will form your polygon by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button.
+
+.. image:: ../images/add_polygone.png
+       :align: center
+
+
+.. _adding_tetrahedrons_anchor:
+
+Adding tetrahedrons
+###################
+
+.. image:: ../images/addtetrahedron.png
+       :align: center
+
+In this dialog box specify the nodes which will form your tetrahedron by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button. Your tetrahedron will be created:
+
+.. image:: ../images/image70.jpg
+       :align: center
+
+
+.. _adding_hexahedrons_anchor:
+
+Adding hexahedrons
+##################
+
+.. image:: ../images/addhexahedron.png
+       :align: center
+
+In this dialog box specify the nodes which will form your hexahedron by selecting them in the 3D viewer with pressed Shift button and click
+the **Apply** or **Apply and Close** button. Your hexahedron will be created:
+
+.. image:: ../images/image71.jpg
+       :align: center
+
+.. _adding_octahedrons_anchor:
+
+Adding hexagonal prism
+######################
+
+In the Add Hexagonal Prism dialog box specify the nodes which will form your hexagonal prism by selecting them in the 3D viewer with pressed Shift button and click the **Apply** or **Apply and Close** button. Your hexagonal prism will be created:
+
+.. image:: ../images/image_octa12.png
+       :align: center
+
+
+.. _adding_polyhedrons_anchor:
+
+Adding polyhedrons
+##################
+
+.. image:: ../images/a-createpolyhedralvolume.png
+       :align: center
+
+There are two different ways to add polyhedral volumes. 
+
+If you select **Node** as **Elements Type** you will specify the nodes which will form the faces of your polyhedron by selecting the nodes in the 3D viewer with pressed Shift button and clicking the  **Add** button to add the face in the list of Faces by Nodes, which will form your polyhedron. Note, that it could be very useful to toggle Polyhedron Preview checkbox to see the results of your selection.
+The second way is somewhat simpler, however, there are cases when it does not provide you with the necessary level of precision. If you select **Face** as **Elements Type**, you will be able to select the faces which will form your polyhedron in the 3D viewer with pressed Shift button. If you've managed to obtain the necessary result, click the **Apply** or **Apply and Close** button. Your polyhedron will be created:
+
+.. image:: ../images/add_polyhedron.png
+       :align: center
+
diff --git a/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc b/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
deleted file mode 100644 (file)
index 222774c..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-
-\page adding_quadratic_elements_page Adding Quadratic Elements
-
-\n MESH module allows you to work with <b>Quadratic Elements</b>.
-
-Quadratic elements are defined by the same corner nodes as the
-corresponding linear ones, but in addition they have \a midside nodes
-located between the corner nodes on element sides.
-
-If a quadratic 2D element has an additional node at the
-element center, it is a bi-quadratic element (both TRIA7 and
-QUAD9 elements are supported). If a quadratic hexahedral element has 7
-additional nodes: at the element center and at the center of each
-side, it is a tri-quadratic element (or HEXA27).
-
-The convention of nodal connectivity of elements used in SALOME is
-the MED library convention. You can consult the description of nodal
-connectivity of elements in the documentation on MED library or
-\ref connectivity_page "here".
-
-There are several ways to create quadratic elements in your mesh:
-- manually (this way is described below);
-- use \ref quadratic_mesh_anchor "Quadratic Mesh" hypothesis to
-generate a quadratic mesh on your geometry;
-- convert an existing linear mesh to a quadratic one 
-(see \ref convert_to_from_quadratic_mesh_page).
-
-<em>To add a quadratic element to your mesh:</em>
-<ol>
-<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-<li>From the \b Modification menu choose the \b Add item and select
-one of the following:
-
-\image html image152.png
-
-\note All dialogs for adding quadratic element to the mesh
-provide the possibility to automatically add an element
-to the specified group or to create the group anew using
-<b>Add to group</b> box, that allows choosing an existing group for
-the created node or element or giving the name to a new group. By
-default, the <b>Add to group</b> check box is switched off. If the user
-switches this check box on, the combo box listing all currently
-existing groups of the corresponding type becomes available. By
-default, no group is selected. In this case, when the user presses
-<b>Apply</b> or <b>Apply & Close</b> button, the warning message box
-informs the user about the necessity to input a new group name. The
-combo box lists groups of all the 
-\ref grouping_elements_page "three types": both 
-\ref standalone_group "standalone groups",
-\ref group_on_filter "groups on filter", and 
-\ref group_on_geom "groups on geometry". If the user chooses a
-group on geometry or on filter, he is warned and proposed to
-convert this group to standalone.
-If the user rejects conversion operation, it is cancelled and
-a new quadratic element is not created.
-
-
-To create any <b>Quadratic Element</b> specify the nodes which will
-form your element by selecting them in the 3D viewer with pressed
-Shift button and click \a Selection button to the right of 
-<b>Corner Nodes</b> label. Their numbers will appear in the dialog box
-as <b>Corner Nodes</b> (alternatively you can just input numbers in
-this field without selection; note that to use this way the mesh
-should be selected before invoking this operation). The edges formed
-by the corner nodes will appear in the table. To define the middle
-nodes for each edge, double-click on the respective field and input
-the number of the node (or pick the node in the viewer). For
-bi-quadratic and tri-quadratic elements, your also need to specify
-central nodes.
-As soon as all needed nodes are specified, a preview of a new
-quadratic element will be displayed in the 3D viewer. Then
-you will be able to click \b Apply or <b>Apply and Close</b> button to
-add the element to the mesh.
-
-\image html aqt.png
-
-\b Reverse button reverses the element.
-</li>
-</ol>
-
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst b/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst
new file mode 100644 (file)
index 0000000..2bcba51
--- /dev/null
@@ -0,0 +1,43 @@
+                                    
+.. _adding_quadratic_elements_page: 
+
+*************************
+Adding Quadratic Elements
+*************************  
+
+MESH module allows you to work with **Quadratic Elements**.
+
+Quadratic elements are defined by the same corner nodes as the corresponding linear ones, but in addition they have *midside* nodes located between the corner nodes on element sides.
+
+If a quadratic 2D element has an additional node at the element center, it is a bi-quadratic element (both TRIA7 and QUAD9 elements are supported). If a quadratic hexahedral element has 7 additional nodes: at the element center and at the center of each side, it is a tri-quadratic element (or HEXA27).
+
+The convention of nodal connectivity of elements used in SALOME is the MED library convention. You can consult the description of nodal connectivity of elements in the documentation on MED library or :ref:`here <connectivity_page>`.
+
+There are several ways to create quadratic elements in your mesh:
+
+* manually (this way is described below);
+* use :ref:`quadratic_mesh_anchor` hypothesis to generate a quadratic mesh on your geometry;
+* convert an existing linear mesh to a quadratic one (see :ref:`convert_to_from_quadratic_mesh_page`).
+
+**To add a quadratic element to your mesh:**
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+
+#. From the **Modification** menu choose the **Add** item and select one of the following:
+
+       .. image:: ../images/image152.png
+               :align: center
+
+.. note::
+       All dialogs for adding quadratic element to the mesh provide the possibility to automatically add an element to the specified group or to create the group anew using **Add to group** box, that allows choosing an existing group for the created node or element or giving the name to a new group. By default, the **Add to group** check box is switched off. If the user switches this check box on, the combo box listing all currently existing groups of the corresponding type becomes available. By default, no group is selected. In this case, when the user presses **Apply** or **Apply & Close** button, the warning message box informs the user about the necessity to input a new group name. The combo box lists groups of all the :ref:`three types <grouping_elements_page>`: both :ref:`standalone groups <standalone_group>`, :ref:`groups on filter <group_on_filter>`, and :ref:`groups on geometry <group_on_geom>`. If the user chooses a group on geometry or on filter, he is warned and proposed to convert this group to standalone. If the user rejects conversion operation, it is cancelled and a new node/element is not created!
+
+To create any **Quadratic Element** specify the nodes which will form your element by selecting them in the 3D viewer with pressed Shift button and click *Selection* button to the right of **Corner Nodes** label. Their numbers will appear in the dialog box as **Corner Nodes** (alternatively you can just input numbers in this field without selection; note that to use this way the mesh should be selected before invoking this operation). The edges formed by the corner nodes will appear in the table. To define the middle nodes for each edge, double-click on the respective field and input the number of the node (or pick the node in the viewer). For bi-quadratic and tri-quadratic elements, your also need to specify central nodes. As soon as all needed nodes are specified, a preview of a new quadratic element will be displayed in the 3D viewer. Then you will be able to click **Apply** or **Apply and Close** button to add the element to the mesh.
+
+.. image:: ../images/aqt.png
+       :align: center
+
+**Reverse** button reverses the element.
+
+
+
+
diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc
deleted file mode 100644 (file)
index a41cbb4..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*!
-
-\page additional_hypo_page Additional Hypotheses
-
-\n <b>Additional Hypotheses</b> can be applied as a supplement to the
-main hypotheses, introducing additional concepts to mesh creation.
-
-An <b>Additional Hypothesis</b> can be defined in the same way as any
-main hypothesis in \ref create_mesh_anchor "Create Mesh" or 
-\ref constructing_submeshes_page "Create Sub-Mesh" dialog.
-
-The following additional hypothesis are available:
-<ul> 
-<li>\ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges" 
-  and \ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"
-  hypotheses are useful for creation of quadrangle and hexahedral
-  meshes.</li>
-<li>\ref viscous_layers_anchor "Viscous Layers" and 
-  \ref viscous_layers_anchor "Viscous Layers 2D"
-  hypotheses allow creation of layers of highly stretched
-  elements near mesh boundary, which is beneficial for high quality
-  viscous computations.</li>
-<li>\ref quadratic_mesh_anchor "Quadratic Mesh" hypothesis allows
-  generation of second order meshes.</li> 
-<li>\ref quadrangle_preference_anchor "Quadrangle Preference"
-  enables generation of quadrangles.</li>
-</ul>
-
-
-\anchor propagation_anchor
-<h2>Propagation of 1D Hypothesis on opposite edges</h2>
-
-<b>Propagation of 1D Hypothesis on opposite edges</b> allows to mesh
-opposite sides of a quadrangle face and other adjacent quadrangles,
-using the same hypothesis assigned to only one edge.<br>
-Thus you define a sub-mesh on the edge where you define 1D meshing
-parameters and the \b Propagation hypothesis. These local meshing
-parameters will be propagated via opposite sides of quadrangles to the
-whole geometry, and this propagation stops at an edge with other local
-meshing parameters.
-
-This hypothesis can be taken into account by 
-\ref a1d_algos_anchor "Wire Discretization" and 
-\ref a1d_algos_anchor "Composite Side Discretization" algorithms.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_propagation "Propagation hypothesis" operation
-
-\anchor propagofdistribution_anchor
-<h2>Propagation of Node Distribution on Opposite Edges</h2>
-
-<b>Propagation of Node Distribution on Opposite Edges</b> allows to propagate
-distribution of nodes 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 number of nodes and the same
-relations between segment lengths, unless another hypothesis
-has been locally defined on the opposite edge.
-This hypothesis can be taken into account by 
-\ref a1d_algos_anchor "Wire Discretization" and 
-\ref a1d_algos_anchor "Composite Side Discretization" algorithms.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_propagation "Propagation hypothesis" operation
-
-\anchor viscous_layers_anchor
-<h2>Viscous Layers and Viscous Layers 2D</h2>
-
-<b>Viscous Layers</b> and <b>Viscous Layers 2D </b> additional
-hypotheses can be used by several 3D algorithms, for example
-Hexahedron(i,j,k), or 2D algorithms, for example Triangle
-(MEFISTO), correspondingly. These hypotheses allow creation of layers
-of highly stretched elements, prisms in 3D and quadrilaterals in 2D,
-near mesh boundary, which is beneficial for high quality viscous
-computations.
-
-\image html viscous_layers_hyp.png
-
-\image html viscous_layers_2d_hyp.png
-
-<ul>
-<li><b>Name</b> - allows to define the name of the hypothesis.</li>
-<li><b>Total thickness</b> - gives the total thickness of element layers.</li>
-<li><b>Number of layers</b> - defines the number of element layers.</li>
-<li><b>Stretch factor</b> - defines the growth factor of element height
-  from the mesh boundary inwards.</li>
-<li><b>Extrusion method</b> (available in 3D only) - defines how
-  positions of nodes are found during prism construction and how
-  the creation of distorted and intersecting prisms is prevented.
-<ul><li><b>Surface offset + smooth</b> method extrudes nodes along the normal
-    to the underlying geometrical surface. Smoothing of the internal surface of
-    element layers is possible to avoid creation of invalid prisms.</li>
-  <li><b>Face offset</b> method extrudes nodes along the average normal of
-    surrounding mesh faces to the intersection with a neighbor mesh face
-    translated along its own normal by the thickness of layers. The thickness
-    of layers can be limited to avoid creation of invalid prisms.</li>
-  <li><b>Node offset</b> method extrudes nodes along the average normal of
-    surrounding mesh faces by the thickness of layers. The thickness of
-    layers can be limited to avoid creation of invalid prisms.</li> 
-\image html viscous_layers_extrusion_method.png "Prisms created by the tree extrusion methods at the same other parameters"
-</ul></li>
-<li><b>Specified Faces/Edges are</b> - defines how the shapes specified by
-  the next parameter are used.
-<li><b> Faces/Edges with/without layers</b> - 
-  defines geometrical faces or edges on which element layers
-  either should be or should not be constructed, depending on the
-  value of the previous parameter (<b>Specified Faces/Edges are</b>). 
-  Faces (or edges) can be selected either in the Object Browser or in
-  the VTK Viewer. \b Add button becomes active as soon as a suitable
-  sub-shape is selected.
-  \note A mesh shown in the 3D Viewer can prevent selection of faces
-  and edges, just hide the mesh to avoid this. If a face, which should be
-  selected, is hidden by other faces, consider creating a
-  group of faces to be selected in the Geometry module.<br>
-  To avoid a long wait when a
-  geometry with many faces (or edges) is displayed, the number of faces
-  (edges) shown at a time is limited by the value of "Sub-shapes
-  preview chunk size" preference (in Preferences/Mesh/General tab).
-
-
-  If faces/edges without layers are specified, the element layers are
-  not constructed on geometrical faces shared by several solids in 3D
-  case and edges shared by several faces in 2D case. In other words,
-  in this mode the element layers can be constructed on boundary faces
-  and edges only, and are not constructed on internal faces and
-  edges. There is an exception to this rule: if a hypothesis is
-  assigned to a sub-mesh, the element layers can be constructed on
-  boundary faces/edges of the shape of this sub-mesh, at same time
-  possibly being internal faces/edges within the whole model.
-  \image html viscous_layers_on_submesh.png 2D viscous layers constructed on boundary edges of a sub-mesh on a disk face.
-
-  If you use \b several hypotheses to define viscous layers on faces of
-  one solid, keep in mind the following. Each hypothesis defines a set
-  of faces with viscous layers (even if you specify faces without
-  layers). The sets of faces with viscous layers defined by several
-  hypotheses should not intersect, else the module won't add an
-  hypothesis that is incompatible with another one. <br>
-  Also you can't define different number of layers on adjacent faces
-  of a solid.<br>
-  This logic is also valid for the 2D hypothesis.
-</li>
-</ul>
-
-\image html viscous_layers_mesh.png A group containing viscous layer prisms.
-
-<br><b>See also</b> a sample TUI script of a \ref tui_viscous_layers
-"Viscous layers construction".
-
-
-\anchor quadratic_mesh_anchor
-<h2>Quadratic Mesh</h2>
-
-Quadratic Mesh hypothesis allows to build a quadratic mesh (in which
-links between element nodes are not straight but curved lines due to
-presence of an additional mid-side node).
-
-This 1D hypothesis can be taken into account by 
-\ref a1d_algos_anchor "Wire Discretization" and 
-\ref a1d_algos_anchor "Composite Side Discretization" algorithms. To
-create a quadratic mesh assign this hypothesis at 
-\ref constructing_meshes_page "mesh construction".
-
-See \ref adding_quadratic_elements_page
-for more information about quadratic meshes.
-
-
-\anchor quadrangle_preference_anchor
-<h2>Quadrangle Preference</h2>
-
-This additional hypothesis can be used together with 2D triangulation algorithms.
-It allows 2D triangulation algorithms to build quadrangular meshes.
-
-Usage of this hypothesis with "Quadrangle: Mapping" meshing algorithm
-is obsolete since introducing
-\ref hypo_quad_params_anchor "Quadrangle parameters" hypothesis.
-Usage of this hypothesis with "Quadrangle: Mapping" meshing algorithm
-corresponds to specifying "Quadrangle Preference" transition type of
-\ref hypo_quad_params_anchor "Quadrangle parameters" hypothesis.
-\note "Quadrangle Preference" transition type can be used only if the
-total quantity of segments on all sides of the face is even (divisible
-by 2), else "Standard" transition type is used.
-*/
diff --git a/doc/salome/gui/SMESH/input/additional_hypo.rst b/doc/salome/gui/SMESH/input/additional_hypo.rst
new file mode 100644 (file)
index 0000000..c666591
--- /dev/null
@@ -0,0 +1,167 @@
+.. _additional_hypo_page: 
+
+*********************
+Additional Hypotheses
+*********************
+
+**Additional Hypotheses** can be applied as a supplement to the main hypotheses, introducing additional concepts to mesh creation.
+
+An **Additional Hypothesis** can be defined in the same way as any main hypothesis in :ref:`Create Mesh <create_mesh_anchor>` or :ref:`Create Sub-Mesh <constructing_submeshes_page>` dialog.
+
+The following additional hypothesis are available:
+* :ref:`propagation_anchor` and :ref:`propagofdistribution_anchor` hypotheses are useful for creation of quadrangle and hexahedral meshes.
+* :ref:`Viscous Layers <viscous_layers_anchor>` and :ref:`Viscous Layers 2D <viscous_layers_anchor>` hypotheses allow creation of layers of highly stretched elements near mesh boundary, which is beneficial for high quality viscous computations.
+* :ref:`quadratic_mesh_anchor` hypothesis allows generation of second order meshes. 
+* :ref:`quadrangle_preference_anchor` hypothesis enables generation of quadrangles.
+
+
+
+.. _propagation_anchor:
+
+Propagation of 1D Hypothesis on opposite edges
+##############################################
+
+**Propagation of 1D Hypothesis on opposite edges** allows to mesh
+opposite sides of a quadrangle face and other adjacent quadrangles,
+using the same hypothesis assigned to only one edge.
+Thus you define a sub-mesh on the edge where you define 1D meshing
+parameters and the **Propagation hypothesis**. These local meshing
+parameters will be propagated via opposite sides of quadrangles to the
+whole geometry, and this propagation stops at an edge with other local
+meshing parameters.
+
+This hypothesis can be taken into account by 
+:ref:`Wire Discretization <a1d_algos_anchor>` and 
+:ref:`Composite Side Discretization <a1d_algos_anchor>` algorithms.
+
+**See Also** a sample TUI Script of a :ref:`Propagation hypothesis <tui_propagation>` operation
+
+.. _propagofdistribution_anchor:
+
+Propagation of Node Distribution on Opposite Edges
+##################################################
+
+**Propagation of Node Distribution on Opposite Edges** allows to propagate
+distribution of nodes 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 number of nodes and the same
+relations between segment lengths, unless another hypothesis
+has been locally defined on the opposite edge.
+This hypothesis can be taken into account by 
+:ref:`Wire Discretization <a1d_algos_anchor>` and 
+:ref:`Composite Side Discretization <a1d_algos_anchor>` algorithms.
+
+**See Also** a sample TUI Script of a :ref:`Propagation hypothesis <tui_propagation>` operation
+
+.. _viscous_layers_anchor:
+
+Viscous Layers and Viscous Layers 2D
+####################################
+
+**Viscous Layers** and **Viscous Layers 2D** additional
+hypotheses can be used by several 3D algorithms, for example
+Hexahedron(i,j,k), or 2D algorithms, for example Triangle
+(MEFISTO), correspondingly. These hypotheses allow creation of layers
+of highly stretched elements, prisms in 3D and quadrilaterals in 2D,
+near mesh boundary, which is beneficial for high quality viscous
+computations.
+
+.. image:: ../images/viscous_layers_hyp.png
+       :align: center
+
+.. image:: ../images/viscous_layers_2d_hyp.png
+       :align: center
+   
+
+* **Name** - allows to define the name of the hypothesis.
+* **Total thickness** - gives the total thickness of element layers.
+* **Number of layers** - defines the number of element layers.
+* **Stretch factor** - defines the growth factor of element height from the mesh boundary inwards.
+* **Extrusion method** (available in 3D only) - defines how positions of nodes are found during prism construction and how the creation of distorted and intersecting prisms is prevented.
+
+  * **Surface offset + smooth** method extrudes nodes along the normal to the underlying geometrical surface. Smoothing of the internal surface of element layers is possible to avoid creation of invalid prisms.
+  * **Face offset** method extrudes nodes along the average normal of surrounding mesh faces to the intersection with a neighbor mesh face translated along its own normal by the thickness of layers. The thickness of layers can be limited to avoid creation of invalid prisms.
+  * **Node offset** method extrudes nodes along the average normal of surrounding mesh faces by the thickness of layers. The thickness of layers can be limited to avoid creation of invalid prisms. 
+
+       .. image:: ../images/viscous_layers_extrusion_method.png 
+               :align: center
+
+       .. centered::
+               Prisms created by the tree extrusion methods at the same other parameters
+
+* **Specified Faces/Edges are** - defines how the shapes specified by the next parameter are used.     
+* **Faces/Edges with/without layers** - defines geometrical faces or edges on which element layers either should be or should not be constructed, depending on the value of the previous parameter (**Specified Faces/Edges are**). Faces (or edges) can be selected either in the Object Browser or in the VTK Viewer. **Add** button becomes active as soon as a suitable sub-shape is selected.
+
+  .. note:: 
+       A mesh shown in the 3D Viewer can prevent selection of faces and edges, just hide the mesh to avoid this. If a face, which should be selected, is hidden by other faces, consider creating a group of faces to be selected in the Geometry module. To avoid a long wait when a geometry with many faces (or edges) is displayed, the number of faces (edges) shown at a time is limited by the value of :ref:`Sub-shapes preview chunk size <chunk_size_pref>` preference (in Preferences/Mesh/General tab).
+
+
+  If faces/edges without layers are specified, the element layers are
+  not constructed on geometrical faces shared by several solids in 3D
+  case and edges shared by several faces in 2D case. In other words,
+  in this mode the element layers can be constructed on boundary faces
+  and edges only, and are not constructed on internal faces and
+  edges. There is an exception to this rule: if a hypothesis is
+  assigned to a sub-mesh, the element layers can be constructed on
+  boundary faces/edges of the shape of this sub-mesh, at same time
+  possibly being internal faces/edges within the whole model.
+
+  .. image:: ../images/viscous_layers_on_submesh.png 
+     :align: center
+
+  .. centered::
+       2D viscous layers constructed on boundary edges of a sub-mesh on a disk face.
+
+  If you use **several** hypotheses to define viscous layers on faces of
+  one solid, keep in mind the following. Each hypothesis defines a set
+  of faces with viscous layers (even if you specify faces without
+  layers). The sets of faces with viscous layers defined by several
+  hypotheses should not intersect, else the module won't add an
+  hypothesis that is incompatible with another one.
+  Also you can't define different number of layers on adjacent faces
+  of a solid.
+  This logic is also valid for the 2D hypothesis.
+
+
+
+.. image:: ../images/viscous_layers_mesh.png
+       :align: center
+
+.. centered::
+       A group containing viscous layer prisms.
+
+**See also** a sample TUI script of a :ref:`tui_viscous_layers`.
+
+
+.. _quadratic_mesh_anchor:
+
+Quadratic Mesh
+##############
+
+Quadratic Mesh hypothesis allows to build a quadratic mesh (in which
+links between element nodes are not straight but curved lines due to
+presence of an additional mid-side node).
+
+This 1D hypothesis can be taken into account by 
+:ref:`Wire Discretization <a1d_algos_anchor>` and 
+:ref:`Composite Side Discretization <a1d_algos_anchor>` algorithms. To create a quadratic mes assign this hypothesis at 
+:ref:`mesh construction <constructing_meshes_page>`.
+
+See :ref:`adding_quadratic_elements_page` for more information about quadratic meshes.
+
+
+.. _quadrangle_preference_anchor:
+
+Quadrangle Preference
+#####################
+
+This additional hypothesis can be used together with 2D triangulation algorithms.
+It allows 2D triangulation algorithms to build quadrangular meshes.
+
+Usage of this hypothesis with :ref:`Quadrangle: Mapping <quad_ijk_algo_page>` meshing algorithm is obsolete since introducing :ref:`Quadrangle parameters <hypo_quad_params_anchor>` hypothesis.
+Usage of this hypothesis with :ref:`Quadrangle: Mapping <quad_ijk_algo_page>` meshing algorithm corresponds to specifying *Quadrangle Preference* transition type of :ref:`Quadrangle parameters <hypo_quad_params_anchor>` hypothesis.
+
+.. note::
+       *Quadrangle Preference* transition type can be used only if the total quantity of segments on all sides of the face is even (divisible by 2), else *Standard* transition type is used.
diff --git a/doc/salome/gui/SMESH/input/area.doc b/doc/salome/gui/SMESH/input/area.doc
deleted file mode 100644 (file)
index 765d4d4..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
-
-\page area_page Area
-
-\n \b Area mesh quality control is based on the algorithm of area
-calculation of mesh faces.
-
-<em>To apply the Area quality control to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Area</b> or click
-<em>"Area"</em> button. 
-
-\image html image35.png
-<center><em>"Area" button</em></center>
-
-Your mesh will be displayed in the viewer with its faces colored
-according to the applied mesh quality control criterion:
-
-\image html image5.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of an 
-\ref tui_area "Area quality control" operation.  
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/area.rst b/doc/salome/gui/SMESH/input/area.rst
new file mode 100644 (file)
index 0000000..11bbddd
--- /dev/null
@@ -0,0 +1,25 @@
+
+.. _area_page:
+
+****
+Area
+****
+
+**Area** mesh quality control is based on the algorithm of area calculation of mesh faces.
+
+*To apply the Area quality control to your mesh:*
+
+.. |img| image:: ../images/image35.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Area** or click         **"Area"** button |img|. 
+
+Your mesh will be displayed in the viewer with its faces colored
+according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image5.jpg
+               :align: center
+
+
+**See Also** a sample TUI Script of an :ref:`tui_area` filter.  
+
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio.doc b/doc/salome/gui/SMESH/input/aspect_ratio.doc
deleted file mode 100644 (file)
index af1057d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-
-\page aspect_ratio_page Aspect Ratio
-
-\n The <b>Aspect Ratio</b> quality criterion for mesh elements reveals
-the degree of conformity of a mesh element to the regular element of
-its type (with all edges having the same length).
-
-  
-
-- The <b>Aspect Ratio</b> of a \b triangle 2D element consisting of 3
-nodes is calculated by the formula:
-
-\image html formula4.png
-
-- The <b>Aspect Ratio</b> of a \b quadrangle 2D element consisting of 4
-nodes is calculated using The Verdict Geometric Quality Library
-available within VTK. The calculation formula is:
-
-\image html formula5.png
-
-<em>To apply the Aspect Ratio quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Aspect Ratio</b> or click
-<em>"Aspect Ratio"</em> button in the toolbar.
-
-<center>
-\image html image37.png
-<em>"Aspect Ratio" button</em>
-</center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image94.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of an 
-\ref tui_aspect_ratio "Aspect Ratio quality control" operation.
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio.rst b/doc/salome/gui/SMESH/input/aspect_ratio.rst
new file mode 100644 (file)
index 0000000..2199d5b
--- /dev/null
@@ -0,0 +1,33 @@
+.. _aspect_ratio_page: 
+
+************
+Aspect Ratio
+************
+
+The **Aspect Ratio** quality criterion for mesh elements reveals the degree of conformity of a mesh element to the regular element of its type (with all edges having the same length).
+  
+
+* The **Aspect Ratio** of a **triangle** 2D element consisting of 3 nodes is calculated by the formula:
+
+       .. image:: ../images/formula4.png
+               :align: center
+
+* The **Aspect Ratio** of a **quadrangle** 2D element consisting of 4 nodes is calculated using The Verdict Geometric Quality Library available within VTK. The calculation formula is:
+
+       .. image:: ../images/formula5.png
+               :align: center
+
+*To apply the Aspect Ratio quality criterion to your mesh:*
+
+.. |img| image:: ../images/image37.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Aspect Ratio** or click *Aspect Ratio* button |img| in the toolbar.
+   
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image94.jpg
+               :align: center
+
+
+**See Also** a sample TUI Script of an :ref:`tui_aspect_ratio` filter.
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio_3d.doc b/doc/salome/gui/SMESH/input/aspect_ratio_3d.doc
deleted file mode 100644 (file)
index 2ea62f1..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-
-\page aspect_ratio_3d_page Aspect ratio 3D
-
-\n The <b>Aspect Ratio 3D</b> mesh quality criterion calculates the same
-parameter as the \ref aspect_ratio_page "Aspect ratio" criterion, but
-it is applied to 3D mesh elements: tetrahedrons, pentahedrons,
-hexahedrons, etc.
-
-- The <b>Aspect Ratio</b> of a \b tetrahedron 3D element defined by
-vertices {a,b,c,d } is calculated by the formula:
-
-\image html formula1.png
-
-- Other element types like polyhedron, pentahedron and hexahedron use
-  the following formula:
-
-\image html formula2.png
-
-<em>To apply the Aspect Ratio 3D quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Volume Controls > Aspect Ratio 3D</b> or click
-<em>"Aspect Ratio 3D"</em> button of the toolbar.
-
-\image html image144.png
-<center><em>"Aspect Ratio 3D" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image86.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_aspect_ratio_3d "Aspect Ratio 3D quality control" operation. 
-
-*/
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst b/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst
new file mode 100644 (file)
index 0000000..dd1ac91
--- /dev/null
@@ -0,0 +1,32 @@
+.. _aspect_ratio_3d_page:
+
+***************
+Aspect ratio 3D
+***************
+
+The **Aspect Ratio 3D** mesh quality criterion calculates the same parameter as the :ref:`aspect_ratio_page` criterion, but it is applied to 3D mesh elements: tetrahedrons, pentahedrons, hexahedrons, etc.
+
+* The **Aspect Ratio** of a **tetrahedron** 3D element defined by vertices {a,b,c,d } is calculated by the formula:
+
+       .. image:: ../images/formula1.png
+               :align: center
+
+* Other element types like polyhedron, pentahedron and hexahedron use the following formula:
+
+       .. image:: ../images/formula2.png
+               :align: center
+
+*To apply the Aspect Ratio 3D quality criterion to your mesh:*
+
+.. |img| image:: ../images/image144.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Volume Controls > Aspect Ratio 3D** or click *"Aspect Ratio 3D"* button |img| of the toolbar.
+   
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image86.jpg
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_aspect_ratio_3d` filter.
diff --git a/doc/salome/gui/SMESH/input/bare_border_face.doc b/doc/salome/gui/SMESH/input/bare_border_face.doc
deleted file mode 100644 (file)
index 2115d32..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-
-\page bare_border_faces_page Bare border faces
-
-This mesh quality control highlights the faces having the border not
-shared with other faces (free border) and missing an edge based on
-nodes of the free border. The faces with bare border are shown with a
-color different from the color of shared faces.
-
-\image html bare_border_faces_smpl.png
-
-\sa A sample TUI Script making a group of faces highlighted in the
-picture is \ref tui_bare_border_faces "Bare border faces Control".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/bare_border_face.rst b/doc/salome/gui/SMESH/input/bare_border_face.rst
new file mode 100644 (file)
index 0000000..fd50742
--- /dev/null
@@ -0,0 +1,15 @@
+.. _bare_border_faces_page:
+*****************
+Bare border faces
+*****************
+
+This mesh quality control highlights the faces having the border not
+shared with other faces (free border) and missing an edge based on
+nodes of the free border. The faces with bare border are shown with a
+color different from the color of shared faces.
+
+.. image:: ../images/bare_border_faces_smpl.png
+       :align: center
+
+**See also** a sample :ref:`TUI Script <tui_bare_border_faces>` making a group of faces highlighted in the picture.
diff --git a/doc/salome/gui/SMESH/input/bare_border_volumes.doc b/doc/salome/gui/SMESH/input/bare_border_volumes.doc
deleted file mode 100644 (file)
index d0dd894..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-
-\page bare_border_volumes_page Bare border volumes
-
-This mesh quality control highlights the volumes having the border not
-shared with other volumes (free border) and missing a face based on
-nodes of the free border. The volumes with bare border are shown with a
-color different from the color of shared volumes.
-
-\image html bare_border_volumes_smpl.png
-
-\sa A sample TUI Script making a group of volumes highlighted in the
-picture is \ref tui_bare_border_volumes "Bare border volumes Control".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/bare_border_volumes.rst b/doc/salome/gui/SMESH/input/bare_border_volumes.rst
new file mode 100644 (file)
index 0000000..d58673d
--- /dev/null
@@ -0,0 +1,16 @@
+.. _bare_border_volumes_page:
+
+*******************
+Bare border volumes
+*******************
+
+This mesh quality control highlights the volumes having the border not
+shared with other volumes (free border) and missing a face based on
+nodes of the free border. The volumes with bare border are shown with a
+color different from the color of shared volumes.
+
+.. image:: ../images/bare_border_volumes_smpl.png
+       :align: center
+
+**See also** a sample :ref:`TUI Script <tui_bare_border_volumes>` making a group of volumes highlighted in the picture.
+
diff --git a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc
deleted file mode 100644 (file)
index 08841b0..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*!
-
-\page basic_meshing_algos_page Basic meshing algorithms
-
-\n The MESH module contains a set of meshing algorithms, which are
-used for meshing entities (1D, 2D, 3D sub-shapes) composing
-geometrical objects.
-
-An algorithm represents either an implementation of a certain meshing
-technique or an interface to the whole meshing program generating elements
-of several dimensions.
-
-<ul>
-<li>For meshing of 1D entities (<b>edges</b>):</li>
-\anchor a1d_algos_anchor
-<ul>
-<li><b>Wire Discretization</b> meshing algorithm - splits an edge into a
-number of mesh segments following an 1D hypothesis.
-</li>
-<li><b>Composite Side Discretization</b> algorithm - allows to apply a 1D
-  hypothesis to a whole side of a geometrical face even if it is
-  composed of several edges provided that they form C1 curve in all
-  faces of the main shape.</li>
-</ul>
-
-<li>For meshing of 2D entities (<b>faces</b>):</li>
-
-<ul>
-<li><b>Triangle: Mefisto</b> meshing algorithm - splits faces
-  into triangular elements.</li>
-<li>\subpage quad_ijk_algo_page "Quadrangle: Mapping" meshing
-  algorithm - splits faces into quadrangular elements.</li>
-</ul>
-
-\image html image123.gif "Example of a triangular 2D mesh"
-
-\image html image124.gif "Example of a quadrangular 2D mesh"
-
-<li>For meshing of 3D entities (<b>solid objects</b>):</li>
-
-<ul>
-<li><b>Hexahedron (i,j,k)</b> meshing algorithm - solids are
-  split into hexahedral elements thus forming a structured 3D
-  mesh. The algorithm requires that 2D mesh generated on a solid could
-  be considered as a mesh of a box, i.e. there should be eight nodes
-  shared by three quadrangles and the rest nodes should be shared by
-  four quadrangles.
-\image html hexa_ijk_mesh.png "Structured mesh generated by Hexahedron (i,j,k) on a solid bound by 16 faces"
-</li>
-
-<li>\subpage cartesian_algo_page "Body Fitting" meshing
-  algorithm - solids are split into hexahedral elements forming
-  a Cartesian grid; polyhedra and other types of elements are generated
-  where the geometrical boundary intersects Cartesian cells.</li>
-</ul>
-
-\image html image125.gif "Example of a tetrahedral 3D mesh"
-
-\image html image126.gif "Example of a hexahedral 3D mesh"
-</ul>
-
-Some 3D meshing algorithms, such as Hexahedron(i,j,k) also can
-generate 3D meshes from 2D meshes, working without geometrical
-objects.
-
-There is also a number of more specific algorithms:
-<ul>
-<li>\subpage prism_3d_algo_page "Extrusion 3D" - for meshing prismatic 3D shapes with hexahedra and prisms.</li>
-<li>\subpage quad_from_ma_algo_page "Quadrangle: Medial Axis Projection" - for quadrangle meshing of faces with sinuous borders and rings.</li>
-<li> <b>Polygon per Face</b> meshing algorithm - generates one mesh
-  face (either a triangle, a quadrangle or a polygon) per a geometrical
-  face using all nodes from the face boundary.</li>
-<li>\subpage projection_algos_page "Projection algorithms" - for meshing by projection of another mesh.</li>
-<li>\subpage import_algos_page "Import algorithms" - for meshing by importing elements from another mesh.</li>
-<li>\subpage radial_prism_algo_page "Radial Prism" - for meshing 3D geometrical objects with cavities with hexahedra and prisms.</li>
-<li>\subpage radial_quadrangle_1D2D_algo_page "Radial Quadrangle 1D-2D" - for quadrangle meshing of disks and parts of disks.</li>
-<li>\subpage use_existing_page "Use Faces/Edges to be Created Manually" - to create a 1D or a 2D mesh in a python script.</li>
-<li>\subpage segments_around_vertex_algo_page "Segments around Vertex" - for defining the length of mesh segments around certain vertices.</li>
-</ul>
-
-\ref constructing_meshes_page "Constructing meshes" page describes in
-detail how to apply meshing algorithms.
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_defining_meshing_algos "Define Meshing Algorithm" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/basic_meshing_algos.rst b/doc/salome/gui/SMESH/input/basic_meshing_algos.rst
new file mode 100644 (file)
index 0000000..9033c31
--- /dev/null
@@ -0,0 +1,83 @@
+.. _basic_meshing_algos_page:
+
+************************
+Basic meshing algorithms
+************************
+
+The MESH module contains a set of meshing algorithms, which are        used for meshing entities (1D, 2D, 3D sub-shapes) composing geometrical objects.
+
+.. note:: Algorithms added to the module as plug-ins are described in documentation of the plug-ins.
+
+An algorithm represents either an implementation of a certain meshing technique or an interface to the whole meshing program generating elements of several dimensions.
+
+.. _a1d_algos_anchor:
+
+* For meshing of 1D entities (**edges**):
+
+  * **Wire Discretization** meshing algorithm - splits an edge into a number of mesh segments following an 1D hypothesis.
+  * **Composite Side Discretization** algorithm - allows to apply a 1D hypothesis to a whole side of a geometrical face even if it is composed of several edges provided that they form C1 curve in all faces of the main shape.
+
+* For meshing of 2D entities (**faces**):
+
+  * **Triangle: Mefisto** meshing algorithm - splits faces into triangular elements.
+  * :ref:`Quadrangle: Mapping <quad_ijk_algo_page>` meshing algorithm - splits faces into quadrangular elements.
+
+               .. image:: ../images/image123.gif
+                       :align: center 
+
+               .. centered::
+                       Example of a triangular 2D mesh
+
+               .. image:: ../images/image124.gif 
+                       :align: center 
+
+               .. centered::
+                       Example of a quadrangular 2D mesh
+
+* For meshing of 3D entities (**solid objects**):
+
+  * **Hexahedron (i,j,k)** meshing algorithm - solids are split into hexahedral elements thus forming a structured 3D mesh. The algorithm requires that 2D mesh generated on a solid could be considered as a mesh of a box, i.e. there should be eight nodes shared by three quadrangles and the rest nodes should be shared by four quadrangles.
+                       .. image:: ../images/hexa_ijk_mesh.png 
+                               :align: center 
+
+    .. centered::
+       Structured mesh generated by Hexahedron (i,j,k) on a solid bound by 16 faces
+
+  * :ref:`Body Fitting <cartesian_algo_page>` meshing algorithm - solids are split into hexahedral elements forming a Cartesian grid; polyhedra and other types of elements are generated where the geometrical boundary intersects Cartesian cells.
+
+  Some 3D meshing algorithms, such as Hexahedron(i,j,k) also can
+  generate 3D meshes from 2D meshes, working without geometrical objects.
+
+* There is also a number of more specific algorithms:
+
+   * :ref:`Extrusion 3D <prism_3d_algo_page>` - for meshing prismatic 3D shapes with hexahedra and prisms.
+   * :ref:`Quadrangle: Medial Axis Projection <quad_from_ma_algo_page>` - for quadrangle meshing of faces with sinuous borders and rings.
+   * **Polygon per Face** meshing algorithm - generates one mesh face (either a triangle, a quadrangle or a polygon) per a geometrical face using all nodes from the face boundary.
+   * :ref:`Projection algorithms <projection_algos_page>` - for meshing by projection of another mesh.
+   * :ref:`Import algorithms <import_algos_page>` - for meshing by importing elements from another mesh.
+   * :ref:`Radial Prism <radial_prism_algo_page>` - for meshing 3D geometrical objects with cavities with hexahedra and prisms.
+   * :ref:`Radial Quadrangle 1D-2D <radial_quadrangle_1D2D_algo_page>` - for quadrangle meshing of disks and parts of disks.
+   * :ref:`Use Faces/Edges to be Created Manually <use_existing_page>` - to create a 1D or a 2D mesh in a python script.
+   * :ref:`Segments around Vertex <segments_around_vertex_algo_page>` - for defining the length of mesh segments around certain vertices.
+
+
+:ref:`constructing_meshes_page` page describes in detail how to apply meshing algorithms.
+
+**See Also** a sample TUI Script of a :ref:`tui_defining_meshing_algos` operation.  
+
+
+.. toctree::
+   :maxdepth: 2
+   :hidden:
+
+   quad_ijk_algo.rst
+   cartesian_algo.rst
+   prism_3d_algo.rst
+   quad_from_ma_algo.rst
+   projection_algos.rst
+   use_existing_algos.rst
+   radial_prism_algo.rst
+   radial_quadrangle_1D2D_algo.rst
+   define_mesh_by_script.rst
+   segments_around_vertex_algo.rst
+
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection.doc b/doc/salome/gui/SMESH/input/borders_at_multi_connection.doc
deleted file mode 100644 (file)
index 46fbc60..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-
-\page borders_at_multi_connection_page Borders at multi-connection
-
-\n This mesh quality control highlights segments according to the number
-of elements, faces and volumes, to which the segment belongs.
-
-\image html image151.gif
-
-In this picture the borders at multi-connection are displayed in blue.
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_borders_at_multiconnection "Borders at Multi-Connection quality control" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst b/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst
new file mode 100644 (file)
index 0000000..b7dce97
--- /dev/null
@@ -0,0 +1,15 @@
+.. _borders_at_multi_connection_page:
+
+***************************
+Borders at multi-connection
+***************************
+
+This mesh quality control highlights segments according to the number of elements, faces and volumes, to which the segment belongs.
+
+.. image:: ../images/image151.gif
+       :align: center
+
+In this picture the borders at multi-connection are displayed in blue.
+
+**See Also** a sample TUI Script of a :ref:`tui_borders_at_multiconnection` filter.
+
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc b/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc
deleted file mode 100644 (file)
index 77a4391..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
-
-\page borders_at_multi_connection_2d_page Borders at multi-connection 2D
-
-\n This mesh quality control highlights borders of faces (links
-between nodes) according to the number of faces, to which the link belongs.
-
-\image html image127.gif
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_borders_at_multiconnection_2d "Borders at Multi-Connection quality control" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst b/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst
new file mode 100644 (file)
index 0000000..7494952
--- /dev/null
@@ -0,0 +1,12 @@
+.. _borders_at_multi_connection_2d_page:
+
+******************************
+Borders at multi-connection 2D
+******************************
+
+This mesh quality control highlights borders of faces (links between nodes) according to the number of faces, to which the link belongs.
+
+.. image:: ../images/image127.gif
+       :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_borders_at_multiconnection_2d` filter.
diff --git a/doc/salome/gui/SMESH/input/building_compounds.doc b/doc/salome/gui/SMESH/input/building_compounds.doc
deleted file mode 100644 (file)
index ce5f3ce..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-
-\page building_compounds_page Building Compound Meshes
-
-\n Compound Mesh is a combination of several meshes. All elements and
-groups present in input meshes are present in the compound
-mesh. However, it does not use geometry or hypotheses of the initial meshes. 
-The links between the input meshes and the compound mesh are not
-supported, consequently the modification of an input mesh does not lead to
-the update of the compound mesh.
-
-<em>To Build a compound mesh:</em>
-
-\par
-From the \b Mesh menu select <b>Build Compound</b> or click <em>"Build
-  Compound Mesh"</em> button in the toolbar.
-
-\image html image161.png
-<center><em>"Build Compound Mesh" button</em></center>
-
-\par
-The following dialog box will appear:
-
-\image html buildcompound.png
-
-\par
-<ul>
-  <li>\b Name - allows selecting the name of the resulting \b Compound mesh.</li>
-  <li><b>Meshes, sub-meshes, groups</b> - allows selecting the meshes,
-    sub-meshes and groups to be concatenated. They can be
-    chosen in the Object Browser while holding \b Ctrl button.</li>
-  <li><b>Processing identical groups</b> - allows selecting the method
-    of processing the namesake groups existing in the input meshes.
-    They can be either <ul>
-      <li>\b United - all elements of \em Group1 of \em Mesh_1 and \em
-      Group1 of \em Mesh_2 become the elements of \em Group1 of the
-      \em Compound_Mesh, or</li>
-      <li>\b Renamed - \em Group1 of \em Mesh_1 becomes \em Group1_1
-      and \em Group1 of \em Mesh_2 becomes \em Group1_2.</li>
-    </ul>
-    See \ref grouping_elements_page "Creating Groups" for more information
-    about groups.</li>
-  <li><b>Create groups from input objects</b> check-box permits to
-    automatically create groups corresponding to every initial mesh.
-
-\image html buildcompound_groups.png "Groups created from input meshes 'Box_large' and 'Box_small'"
-
-  <p></li>
-  <li>You can choose to additionally
-    \ref merging_nodes_page "Merge coincident nodes" 
-    \ref merging_elements_page "and elements" in the compound mesh, in
-    which case it is possible to define the \b Tolerance for this
-    operation.</li>
-</ul>
-
-\image html image160.gif "Example of a compound of two meshed cubes"
-
-<b>See Also</b> a sample
-\ref tui_building_compound "TUI Example of building compounds."
-*/
diff --git a/doc/salome/gui/SMESH/input/building_compounds.rst b/doc/salome/gui/SMESH/input/building_compounds.rst
new file mode 100644 (file)
index 0000000..8501ab7
--- /dev/null
@@ -0,0 +1,43 @@
+.. _building_compounds_page:
+
+************************
+Building Compound Meshes
+************************
+
+Compound Mesh is a combination of several meshes. All elements and groups present in input meshes are present in the compound mesh. However, it does not use geometry or hypotheses of the initial meshes. 
+The links between the input meshes and the compound mesh are not supported, consequently the modification of an input mesh does not lead to the update of the compound mesh.
+
+*To Build a compound mesh:*
+
+.. |img| image:: ../images/image161.png
+
+From the **Mesh** menu select **Build Compound** or click *"Build Compound Mesh"* button |img| in the toolbar. The following dialog box will appear:
+
+       .. image:: ../images/buildcompound.png
+               :align: center
+
+* **Name** - allows selecting the name of the resulting **Compound** mesh.
+* **Meshes, sub-meshes, groups** - allows selecting the meshes, sub-meshes and groups to be concatenated. They can be chosen in the Object Browser while holding **Ctrl** button.
+* **Processing identical groups** - allows selecting the method of processing the namesake groups existing in the input meshes. They can be either 
+
+  * **United** - all elements of *Group1* of *Mesh_1* and *Group1* of *Mesh_2* become the elements of *Group1* of the *Compound_Mesh*, or
+  * **Renamed** - *Group1* of *Mesh_1* becomes *Group1_1* and *Group1* of *Mesh_2* becomes *Group1_2*.
+    
+  See :ref:`grouping_elements_page` for more information about groups.
+* **Create groups from input objects** check-box permits to automatically create groups corresponding to every initial mesh.
+
+       .. image:: ../images/buildcompound_groups.png
+               :align: center
+
+       .. centered:: 
+               Groups created from input meshes 'Box_large' and 'Box_small'
+
+* You can choose to additionally :ref:`Merge coincident nodes <merging_nodes_page>` :ref:`and elements <merging_elements_page>` in the compound mesh, in which case it is possible to define the **Tolerance** for this operation.
+
+       .. image:: ../images/image160.gif
+               :align: center
+
+       .. centered::
+               Example of a compound of two meshed cubes
+
+**See Also** a sample script of :ref:`tui_building_compound`.
diff --git a/doc/salome/gui/SMESH/input/cartesian_algo.doc b/doc/salome/gui/SMESH/input/cartesian_algo.doc
deleted file mode 100644 (file)
index 63b81ff..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*!
-
-\page cartesian_algo_page Body Fitting 3D meshing algorithm
-
-Body Fitting algorithm generates hexahedrons of a Cartesian grid in
-the internal part of geometry and polyhedrons and other types of
-elements at the intersection of Cartesian cells with the geometrical
-boundary.
-
-\image html cartesian3D_sphere.png "A sphere meshed by Body Fitting algorithm"
-
-The meshing algorithm is as follows.
-<ol>
-<li> Lines of a Cartesian structured grid defined by
-\ref cartesian_hyp_anchor "Body Fitting Parameters" hypothesis are
-intersected with the geometry boundary, thus nodes lying on the
-boundary are found. This step also allows finding out for each node of
-the Cartesian grid if it is inside or outside the geometry. </li>
-<li> For each cell of the grid, check how many of its nodes are outside
-of the geometry boundary. Depending on a result of this check
-<ul>
-<li> skip a cell, if all its nodes are outside </li>
-<li> skip a cell, if it is too small according to <b> Size
-    Threshold </b> parameter</li>
-<li> add a hexahedron in the mesh, if all nodes are inside </li>
-<li> add a polyhedron or another cell type in the mesh, if some
-nodes are inside and some outside. </li> 
-</ul>
-</li>
-</ol>
-To apply this algorithm when you define your mesh, select <b>Body
-  Fitting</b> in the list of 3D algorithms and add <b>Body Fitting
-  Parameters</b> hypothesis. The following dialog will appear:
-
-<br>
-\anchor cartesian_hyp_anchor
-<h2>Body Fitting Parameters hypothesis</h2>
-
-\image html cartesian3D_hyp.png "Body Fitting Parameters hypothesis dialog"
-
-This dialog allows to define
-<ul>
-  <li>\b Name of the algorithm. </li>
-  <li> Minimal size of a cell truncated by the geometry boundary. If the
-    size of a truncated grid cell is \b Threshold times less than a
-    initial cell size, then a mesh element is not created. </li>
-  <li> <b> Implement Edges </b> check-box activates incorporation of
-  geometrical edges in the mesh.
-  
-\image html cartesian_implement_edge.png "Implement Edges switched off to the left and on to the right"
-
-  <li> <b>Definition mode</b> allows choosing how Cartesian structured
-  grid is defined. Location of nodes along each grid axis is defined
-  individually:
-    <ul>
-      <li> You can specify the \b Coordinates of grid nodes. \b Insert button
-        inserts a node at \b Step distance (negative or positive) from the
-        selected node. \b Delete button removes the selected node. Double
-        click on a coordinate in the list enables its edition. 
-        \b Note that node coordinates are measured along directions of
-        axes that can differ from the directions of the Global Coordinate
-        System.</li>
-      <li> You can define the \b Spacing of a grid as an algebraic formula
-        <em>f(t)</em> where \a t is a position along a grid axis
-        normalized at [0.0,1.0]. <em>f(t)</em> must be non-negative
-        at 0. <= \a t <= 1. The whole extent of geometry can be
-        divided into ranges with their own spacing formulas to apply;
-        \a t varies between 0.0 and 1.0 within each \b Range. \b Insert button
-        divides a selected range into two. \b Delete button adds the
-        selected sub-range to the previous one. Double click on a range in
-        the list enables edition of its right boundary. Double click on a
-        function in the list enables its edition.
-    </li> </ul>
-  </li>
-  
-  <li> <b> Fixed Point</b> group allows defining an exact location of
-  a grid node in the direction defined by spacing. The following cases
-  are possible:
-    <ul>
-      <li>If all three directions are defined by spacing, there will
-      be a mesh node at the <b> Fixed Point</b>. </li>
-      <li>If two directions are defined by spacing, there will be at
-      least a link between mesh nodes passing through the <b> Fixed
-      Point</b>.</li> 
-      <li> If only one direction is defined by spacing, there will be
-      at least an element facet passing through the <b> Fixed
-      Point</b>.</li>
-      <li>If no directions are defined by spacing, <b> Fixed Point</b>
-      is disabled.</li>
-    </ul>
-  </li>
-       
-  <li> <b> Directions of Axes</b> group allows setting the directions of grid axes.
-    <ul>
-      <li>If <b> Orthogonal Axes </b> check-box is activated the
-        axes remain orthogonal during their modification. </li>
-      <li> Selection buttons enable snapping corresponding axes to
-        direction of a geometrical edge selected in the Object
-        Browser. Edge direction is defined by coordinates of its end
-        points.</li>
-      <li><b> Optimal Axes</b> button runs an algorithm that tries to
-        set the axes to maximize the number of generated hexahedra.</li>
-      <li><b> Reset </b> button returns the axes in a default position
-      parallel to the axes of the Global Coordinate System.</li> 
-  </ul>
-  </li>
- </ul>
-
-<br>
-<b>See Also</b> a sample TUI Script of a
-\ref tui_cartesian_algo "Usage of Body Fitting algorithm".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/cartesian_algo.rst b/doc/salome/gui/SMESH/input/cartesian_algo.rst
new file mode 100644 (file)
index 0000000..bde18de
--- /dev/null
@@ -0,0 +1,76 @@
+.. _cartesian_algo_page:
+
+*********************************
+Body Fitting 3D meshing algorithm
+*********************************
+
+Body Fitting algorithm generates hexahedrons of a Cartesian grid in
+the internal part of geometry and polyhedrons and other types of
+elements at the intersection of Cartesian cells with the geometrical
+boundary.
+
+.. image:: ../images/cartesian3D_sphere.png 
+       :align: center
+
+.. centered::
+       A sphere meshed by Body Fitting algorithm
+
+The meshing algorithm is as follows.
+
+#. Lines of a Cartesian structured grid defined by :ref:`Body Fitting Parameters <cartesian_hyp_anchor>` hypothesis are intersected with the geometry boundary, thus nodes lying on the boundary are found. This step also allows finding out for each node of the Cartesian grid if it is inside or outside the geometry. 
+#. For each cell of the grid, check how many of its nodes are outside of the geometry boundary. Depending on a result of this check
+
+   * skip a cell, if all its nodes are outside 
+   * skip a cell, if it is too small according to **Size Threshold** parameter
+   * add a hexahedron in the mesh, if all nodes are inside 
+   * add a polyhedron or another cell type in the mesh, if some nodes are inside and some outside.  
+
+To apply this algorithm when you define your mesh, select **Body Fitting** in the list of 3D algorithms and add **Body Fitting  Parameters** hypothesis. The following dialog will appear:
+
+.. _cartesian_hyp_anchor:
+
+Body Fitting Parameters hypothesis
+##################################
+
+.. image:: ../images/cartesian3D_hyp.png 
+       :align: center
+
+.. centered::
+       Body Fitting Parameters hypothesis dialog
+
+This dialog allows to define
+
+* **Name** of the algorithm. 
+* Minimal size of a cell truncated by the geometry boundary. If the size of a truncated grid cell is **Threshold** times less than a initial cell size, then a mesh element is not created. 
+* **Implement Edges** check-box activates incorporation of geometrical edges in the mesh.
+  
+       .. image:: ../images/cartesian_implement_edge.png 
+               :align: center
+
+       .. centered::
+               Implement Edges switched off to the left and on to the right
+
+* **Definition mode** allows choosing how Cartesian structured grid is defined. Location of nodes along each grid axis is defined individually:
+    
+       * You can specify the **Coordinates** of grid nodes. **Insert** button inserts a node at **Step** distance (negative or positive) from the selected node. **Delete** button removes the selected node. Double click on a coordinate in the list enables its edition. **Note** that node coordinates are measured along directions of axes that can differ from the directions of the Global Coordinate System.
+       * You can define the **Spacing** of a grid as an algebraic formula *f(t)* where *t* is a position along a grid axis normalized at [0.0,1.0]. *f(t)* must be non-negative at 0. <= *t* <= 1. The whole extent of geometry can be divided into ranges with their own spacing formulas to apply; a t varies between 0.0 and 1.0 within each **Range**. **Insert** button divides a selected range into two. **Delete** button adds the selected sub-range to the previous one. Double click on a range in the list enables edition of its right boundary. Double click on a function in the list enables its edition.
+  
+* **Fixed Point** group allows defining an exact location of a grid node in the direction defined by spacing. The following cases are possible:
+   
+       * If all three directions are defined by spacing, there will be a mesh node at the **Fixed Point**. 
+       * If two directions are defined by spacing, there will be at least a link between mesh nodes passing through the **Fixed Point**. 
+       * If only one direction is defined by spacing, there will be at least an element facet passing through the **Fixed Point**.
+       * If no directions are defined by spacing, **Fixed Point** is disabled.
+       
+* **Directions of Axes** group allows setting the directions of grid axes.
+   
+       * If **Orthogonal Axes** check-box is activated the axes remain orthogonal during their modification. 
+       * Selection buttons enable snapping corresponding axes to direction of a geometrical edge selected in the Object Browser. Edge direction is defined by coordinates of its end points.
+       * **Optimal Axes** button runs an algorithm that tries to set the axes to maximize the number of generated hexahedra.
+       * **Reset** button returns the axes in a default position parallel to the axes of the Global Coordinate System. 
+  
+  
+
+**See Also** a sample TUI Script of a :ref:`tui_cartesian_algo`.
+
diff --git a/doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc b/doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc
deleted file mode 100644 (file)
index 7253782..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-
-\page changing_orientation_of_elements_page Changing orientation of elements
-
-\n Orientation of an element is changed by changing the order of its nodes.
-
-<em>To change orientation of elements:</em>
-<ol>
-  <li>Select a mesh (and display it in the 3D Viewer if you are going to pick elements by mouse).</li>
-  <li>In the \b Modification menu select the \b Orientation item or click
-    <em>Orientation</em> button in the toolbar.
-
-    <center>
-\image html image79.png
-<em>"Orientation" button</em>
-    </center>
-
-    The following dialog box will appear:
-
-    <center>
-\image html orientaation1.png
-    </center>
-    <ul>
-      <li>Select type of elements to reorient: \b Face or \b Volume.</li>
-      <li><b>The main list</b> shall contain the elements which will be
-        reoriented. You can click on an element in the 3D viewer and it will
-        be highlighted. After that click the \b Add button and the ID of this
-        element will be added to the list. To remove a selected element or
-        elements from the list click the \b Remove button. The \b Sort button
-        allows to sort the list of elements IDs. The <b>Set filter</b> button
-        allows to apply a definite \ref filtering_elements "filter" to the
-        selection of elements.</li>
-      <li><b>Apply to all</b> radio button allows to modify the orientation
-        of all elements of the selected mesh.</li>
-      <li><b>Select from</b> set of fields allows to choose a sub-mesh or an
-        existing group whose elements can be added to the list.</li>
-    </ul>
-
-  </li>
-  <li>Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a
-\ref tui_orientation "Change Orientation" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst b/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst
new file mode 100644 (file)
index 0000000..61f979c
--- /dev/null
@@ -0,0 +1,29 @@
+.. _changing_orientation_of_elements_page:
+
+********************************
+Changing orientation of elements
+********************************
+
+Orientation of an element is changed by changing the :doc:`order <connectivity>` of its nodes.
+
+*To change orientation of elements:*
+
+.. |img| image:: ../images/image79.png
+
+#. Select a mesh (and display it in the 3D Viewer if you are going to pick elements by mouse).
+#. In the **Modification** menu select the **Orientation** item or click *Orientation* button |img| in the toolbar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/orientaation1.png
+               :align: center
+    
+       * Select type of elements to reorient: **Face** or **Volume**.
+       * **The main list** shall contain the elements which will be reoriented. You can click on an element in the 3D viewer and it will be highlighted. After that click the **Add** button and the ID of this element will be added to the list. To remove a selected element or elements from the list click the **Remove** button. The **Sort** button allows to sort the list of elements IDs. The **Set filter** button allows to apply a definite :ref:`filter <filtering_elements>` to the selection of elements.
+       * **Apply to all** radio button allows to modify the orientation of all elements of the selected mesh.
+       * *Select from** set of fields allows to choose a sub-mesh or an existing group whose elements can be added to the list.
+  
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_orientation` operation.
+
diff --git a/doc/salome/gui/SMESH/input/clipping.doc b/doc/salome/gui/SMESH/input/clipping.doc
deleted file mode 100644 (file)
index f28b880..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-
-\page clipping_page Clipping
-
-\b Clipping allows creating cross-section views (clipping planes)
-of your mesh.
-
-It is available as a sub-item in the context menu of an active mesh. 
-
-To create a clipping plane, click on the \b New button in the dialog and choose how it is  defined: by \b Absolute or \b Relative coordinates.
-
-<b>Absolute Coordinates</b>
-
-\image html Clipping_Absolute.png
-
-- <b>Base point</b> - allows defining the coordinates of the base
-  point for the clipping plane.
-
-  - <b>Reset</b> - returns the base point to coordinate origin.
-
-- <b>Direction</b> - allows defining the orientation of the
-  clipping plane.
-
-       - <b>Invert</b> - allows selecting, which part of the object will be
-    removed and which will remain after clipping.
-    
-<b>Relative mode</b>  
-
-\image html Clipping_Relative.png
-
-- \b Orientation ( ||X-Y, ||X-Z or ||Y-Z).
-
-- \b Distance between the opposite extremities of the boundary box of 
-selected objects, if it is set to 0.5 the boundary box is split in two halves.
-
-- \b Rotation (in angle degrees) <b>around X</b> (Y to Z) and <b>around 
-Y</b> (X to Z) (depending on the chosen Orientation)
-
-\image html before_clipping_preview.png "The preview plane and the cut object"
-
-The other parameters are available in both modes : 
-
-- <b>OpenGL clipping</b> check-box allows choosing OpenGL native clipping, which clips the whole presentation. If it is unchecked, the clipping is done on the dataset i.e. only the visibility of separate mesh cells is changed (see the examples).
-- The List contains <b>Meshes, sub-meshes and groups</b> to which the cross-section will be applied.
-- <b>Select all</b> check-box allows to selecting and deselecting all available objects at once.
-- <b>Show preview</b> check-box shows the clipping plane in the <b>3D Viewer</b>.
-- <b>Auto Apply</b> check-box shows button is on, you can preview the
-cross-section in the <b>3D Viewer</b>.
-
-It is also possible to interact  with the clipping plane directly in 3D 
-view using the mouse. 
-
-To get a new object from \b Clipping, click \b Apply.
-
-<b>Examples:</b>
-
-\image html dataset_clipping.png "The cross-section using dataset"
-
-\image html opengl_clipping.png "The OpenGL cross-section"
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/clipping.rst b/doc/salome/gui/SMESH/input/clipping.rst
new file mode 100644 (file)
index 0000000..6cafd29
--- /dev/null
@@ -0,0 +1,60 @@
+.. _clipping_page:
+
+********
+Clipping
+********
+
+**Clipping** allows creating cross-section views (clipping planes) of your mesh.
+It is available as a sub-item in the context menu of an active mesh in 3D Viewer.
+To create a clipping plane, click on the **New** button in the dialog and choose how it is defined: by **Absolute** or **Relative** coordinates.
+
+* **Absolute Coordinates**
+
+  .. image:: ../images/Clipping_Absolute.png
+       :align: center
+
+  * **Base point** - allows defining the coordinates of the base point for the clipping plane.
+     * **Reset** - returns the base point to the coordinate origin.
+  * **Direction** - allows defining the orientation of the clipping plane.
+     * **Invert** - allows selecting, which part of the object will be removed and which will remain after clipping.
+    
+* **Relative mode**  
+
+  .. image:: ../images/Clipping_Relative.png
+       :align: center
+
+  * **Orientation** ( ||X-Y, ||X-Z or ||Y-Z).
+  * **Distance** between the opposite extremities of the boundary box of selected objects, if it is set to 0.5 the boundary box is split in two halves.
+  * **Rotation** (in angle degrees) **around X** (Y to Z) and **around Y** (X to Z) (depending on the chosen Orientation)
+
+       .. image:: ../images/before_clipping_preview.png 
+               :align: center
+
+        .. centered:: 
+           The preview plane and the cut object
+
+The other parameters are available in both modes : 
+
+* **OpenGL clipping** check-box allows choosing OpenGL native clipping, which clips the whole presentation. If it is unchecked, the clipping is done on the dataset i.e. only the visibility of separate mesh cells is changed (see the examples).
+* The List contains **Meshes, sub-meshes and groups** to which the cross-section will be applied.
+* **Select all** check-box allows to selecting and deselecting all available objects at once.
+* **Show preview** check-box shows the clipping plane in the **3D Viewer**.
+* **Auto Apply** check-box shows button is on, you can preview the cross-section in the **3D Viewer**.
+
+It is also possible to interact with the clipping plane directly in 3D view using the mouse. 
+
+To get an object clipped, click **Apply**.
+
+**Examples:**
+
+       .. image:: ../images/dataset_clipping.png
+               :align: center
+
+        .. centered:: 
+           The cross-section using dataset
+
+       .. image:: ../images/opengl_clipping.png
+               :align: center
+
+        .. centered:: 
+           The OpenGL cross-section
diff --git a/doc/salome/gui/SMESH/input/colors_size.doc b/doc/salome/gui/SMESH/input/colors_size.doc
deleted file mode 100644 (file)
index c8be227..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-
-\page colors_size_page Properties
-
-\image html colors_size.png
-
-Using this dialog you can customize different properties of the mesh visualization
-parameters.
-
-The GUI elements in the "Properties" dialog box are grouped according
-to the entity types of mesh data. If some data entities are not
-present in the mesh object, the corresponding GUI elements are not
-shown.
-
-- \b Nodes:
-  - \b Color - color of nodes.
-  - \b Type and \b Scale - these options allow changing the nodes
-    representation (see \subpage point_marker_page "Point Marker" page
-    for more details).
-- <b>Edges / wireframe</b>:
-  - \b Color - color of element borders in wireframe mode.
-  - \b Width - width of lines (edges and borders of elements
-    in wireframe mode).
-- \b Faces:
-  - \b Front - surface color of face elements (seen in shading mode).
-  - \b Back - backside surface color of face elements. Use the slider to
-    select this color generated on the base of the \b Face color by
-    changing its brightness and saturation. 
-- \b Volumes:
-  - \b Normal - surface color of normal volume elements (seen in shading mode).
-  - \b Reversed - surface color of volume elements. Use the slider to
-    select this color generated on the base of the \b Normal color by
-    changing its brightness and saturation. 
-- \b Outlines:
-  - \b Color - color of element borders in shading mode.
-  - \b Width - width of outlines (borders of elements
-    in shading mode).
-- <b>0D elements</b>:
-  - \b Color - color of 0D elements.
-  - \b Size - size of 0D elements.
-- \b Balls:
-  - \b Color - color of discrete ball elements.
-  - \b Size - size of discrete ball elements.
-  - \b Scale - scale factor of discrete ball elements.
-- <b>Orientation vectors</b>:
-  - \b Color - color of orientation vectors.
-  - \b Scale - size of orientation vectors.
-  - <b>3D vectors</b> - allows to choose between 2D planar and 3D vectors.
-- <b>Shrink coef.</b> - relative space of elements compared to gaps between
-  them in shrink mode.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/colors_size.rst b/doc/salome/gui/SMESH/input/colors_size.rst
new file mode 100644 (file)
index 0000000..56a9ab1
--- /dev/null
@@ -0,0 +1,45 @@
+.. _colors_size_page:
+
+**********
+Properties
+**********
+
+.. image:: ../images/colors_size.png
+       :align: center                                                 
+
+Using this dialog you can customize different properties of the mesh visualization parameters.
+
+The GUI elements in the "Properties" dialog box are grouped according to the entity types of mesh data. If some data entities are not present in the mesh object, the corresponding GUI elements are not shown.
+
+*  **Nodes**:
+       * **Color** - color of nodes.
+       * **Type** and **Scale** - these options allow changing the nodes representation (see :ref:`point_marker_page` page for more details).
+* **Edges / wireframe**:
+       * **Color** - color of element borders in wireframe mode.
+       * **Width** - width of lines (edges and borders of elements in wireframe mode).
+* **Faces**:
+       * **Front** - surface color of face elements (seen in shading mode).
+       * **Back** - backside surface color of face elements. Use the slider to select this color generated on the base of the **Face** color by changing its brightness and saturation. 
+* **Volumes**:
+       * **Normal** - surface color of normal volume elements (seen in shading mode).
+       * **Reversed** - surface color of volume elements. Use the slider to select this color generated on the base of the **Normal** color by changing its brightness and saturation. 
+* **Outlines**:
+       * **Color** - color of element borders in shading mode.
+       * **Width** - width of outlines (borders of elements in shading mode).
+* **0D elements**:
+       * **Color** - color of 0D elements.
+       * **Size** - size of 0D elements.
+* **Balls**:
+       * **Color** - color of discrete ball elements.
+       * **Size** - size of discrete ball elements.
+       * **Scale** - scale factor of discrete ball elements.
+* **Orientation vectors**:
+       * **Color** - color of orientation vectors.
+       * **Scale** - size of orientation vectors.
+       * **3D vectors** - allows to choose between 2D planar and 3D vectors.
+* **Shrink coef.** - relative space of elements compared to gaps between them in shrink mode.
+
+.. toctree::
+   :hidden:
+
+   point_marker.rst
diff --git a/doc/salome/gui/SMESH/input/connectivity.doc b/doc/salome/gui/SMESH/input/connectivity.doc
deleted file mode 100644 (file)
index 28c863f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-\page connectivity_page Nodal connectivity of elements
-
-The following images show order of nodes in correctly defined elements.
-
-<table>
-  <tr><td> Edge (segment): linear and quadratic<br>
-      \image html connectivity_edge.png </td></tr>
-  <tr><td> Triangle: linear, quadratic and bi-quadratic <br>
-      \image html connectivity_tria.png </td></tr>
-  <tr><td> Quadrangle: linear, quadratic and bi-quadratic <br>
-      \image html connectivity_quad.png </td></tr>
-  <tr><td align="left"> Polygon: linear and quadratic <br>
-      \image html connectivity_polygon.png </td></tr>
-  <tr><td> Tetrahedron: linear and quadratic <br>
-      \image html connectivity_tetra.png </td></tr>
-  <tr><td> Hexahedron: linear, quadratic and tri-quadratic <br>
-      \image html connectivity_hexa.png </td></tr>
-  <tr><td> Pentahedron: linear and quadratic <br>
-      \image html connectivity_penta.png </td></tr>
-  <tr><td> Pyramid: linear and quadratic <br>
-      \image html connectivity_pyramid.png </td></tr>
-  <tr><td> Hexagonal prism <br>
-      \image html connectivity_hex_prism.png </td></tr>
-  <tr><td> Polyhedron is defined by <ul>
-      <li> a sequence of nodes defining all facets</li>
-      <li> a sequence of number of nodes per facet</li>
-      </ul>
-      \b Nodes: <br>
-      Node1_of_Facet1, Node2_of_Facet1, ..., NodeN_of_Facet1, <br>
-      Node1_of_Facet2, Node2_of_Facet2, ..., NodeN_of_Facet2, <br>
-      Node1_of_FacetM, Node2_of_FacetM, ..., NodeN_of_FacetM  <br>
-      \b Quantity of nodes per facet: <br>
-      NbNodes_in_Facet1, NbNodes_in_Facet2, ..., NbNodes_in_FacetM
-
-      For example the polyhedron shown in the image below is defined by nodes <br>
-      [ 1,2,3, 1,4,5,2, 2,5,6,3, 3,6,4,1, 4,7,9,5, 5,9,8,6, 6,8,7,4, 7,8,9 ]<br>
-      and quantities [ 3, 4, 4, 4, 4, 4, 4, 3 ]
-      \image html connectivity_polyhedron.png
-      Order of nodes of a facet must assure outward direction of its normal.
-  </td></tr>
-</table>
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/connectivity.rst b/doc/salome/gui/SMESH/input/connectivity.rst
new file mode 100644 (file)
index 0000000..c487d71
--- /dev/null
@@ -0,0 +1,67 @@
+.. _connectivity_page:
+
+******************************
+Nodal connectivity of elements
+******************************
+
+The following images show order of nodes in correctly defined elements.
+
++------------------------------------------------------------------------------+
+| Edge (segment): linear and quadratic                                         |
+|     .. image:: ../images/connectivity_edge.png                               |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Triangle: linear, quadratic and bi-quadratic                                 |
+|     .. image:: ../images/connectivity_tria.png                               |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Quadrangle: linear, quadratic and bi-quadratic                               |
+|     .. image:: ../images/connectivity_quad.png                               |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Polygon: linear and quadratic                                                |
+|     .. image:: ../images/connectivity_polygon.png                            |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Tetrahedron: linear and quadratic                                            |
+|     .. image:: ../images/connectivity_tetra.png                              |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Hexahedron: linear, quadratic and tri-quadratic                              |
+|      .. image:: ../images/connectivity_hexa.png                             |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Pentahedron: linear and quadratic                                            |
+|      .. image:: ../images/connectivity_penta.png                            |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Pyramid: linear and quadratic                                                |
+|      .. image:: ../images/connectivity_pyramid.png                          |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Hexagonal prism                                                              |
+|      .. image:: ../images/connectivity_hex_prism.png                        |
+|              :align: center                                                 |
++------------------------------------------------------------------------------+
+| Polyhedron is defined by                                                     |
+|      * a sequence of nodes defining all facets                              |
+|      * a sequence of number of nodes per facet                              |
+|                                                                              |
+|      **Nodes**:                                                              |
+|      Node1_of_Facet1, Node2_of_Facet1, ..., NodeN_of_Facet1,                 |
+|      Node1_of_Facet2, Node2_of_Facet2, ..., NodeN_of_Facet2,                 |
+|      Node1_of_FacetM, Node2_of_FacetM, ..., NodeN_of_FacetM                  |
+|                                                                              |
+|      **Quantity** of nodes per facet:                                        |
+|      NbNodes_in_Facet1, NbNodes_in_Facet2, ..., NbNodes_in_FacetM            |
+|                                                                              |
+|      For example the polyhedron shown in the image below is defined by nodes |
+|      [ 1,2,3, 1,4,5,2, 2,5,6,3, 3,6,4,1, 4,7,9,5, 5,9,8,6, 6,8,7,4, 7,8,9 ]  |
+|      and quantities [ 3, 4, 4, 4, 4, 4, 4, 3 ]                               |
+|                                                                              |
+|      .. image:: ../images/connectivity_polyhedron.png                       |
+|              :align: center                                                 |
+|                                                                              |
+|      Order of nodes of a facet must assure outward direction of its normal.  |
++------------------------------------------------------------------------------+
+
diff --git a/doc/salome/gui/SMESH/input/constructing_meshes.doc b/doc/salome/gui/SMESH/input/constructing_meshes.doc
deleted file mode 100644 (file)
index 2481807..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/*!
-
-\page constructing_meshes_page Constructing meshes
-
-To create a mesh on geometry, it is necessary to create a mesh object by choosing
-- a geometrical shape produced in the Geometry module (<em>main shape</em>);
-- <em>meshing parameters</em>, including 
-  - \ref basic_meshing_algos_page "meshing algorithms" and
-  - \ref about_hypo_page "hypotheses" specifying constraints to be
-    taken into account by the chosen meshing algorithms.
-
-Then you can launch mesh generation by invoking \ref compute_anchor "Compute" command.
-The generated mesh will be automatically shown in the Viewer. You can
-switch off automatic visualization or limit mesh size until which it is
-automatically shown in \ref mesh_preferences_page (<em>Automatic update</em> entry).
-
-\note Sometimes \a hypotheses term is used to refer to both algorithms
-and hypotheses.
-
-Mesh generation on the geometry is performed in the bottom-up
-flow: nodes on vertices are created first, then edges are divided into
-segments using nodes on vertices; the nodes of segments are then
-used to mesh faces; then the nodes of faces are used to mesh
-solids. This automatically assures the conformity of the mesh.
-
-It is required to choose a meshing algorithm for every dimension of
-sub-shapes up to the highest dimension to be generated. Note
-that some algorithms generate elements of several dimensions, and
-others of only one. It is not necessary to define meshing
-parameters for all dimensions at once; you can start from 1D
-meshing parameters only, compute the 1D mesh, then define 2D meshing
-parameters and compute the 2D mesh (note that 1D mesh will not be
-re-computed).
-
-An algorithm of a certain dimension chosen at mesh creation is applied
-to discretize every sub-shape of this dimension. It is possible to
-specify a different algorithm or hypothesis to be applied to one or
-a group of sub-shapes by creating a \ref constructing_submeshes_page
-"sub-mesh". You can specify no algorithms at all at mesh object
-creation and specify the meshing parameters on sub-meshes only; then
-only the sub-shapes, for which an algorithm and a hypothesis (if any)
-have been defined will be discretized.
-
-\n Construction of a mesh on a geometry includes at least two 
-(\ref create_mesh_anchor "mesh creation" and
-\ref compute_anchor "computing") of the following steps:
-<ul>
-  <li> \ref create_mesh_anchor "Creation of a mesh object", where you
-  can specify meshing parameters to apply to all sub-shapes of the
-  main shape.</li>
-  <li> \ref constructing_submeshes_page "Creation of sub-meshes",
-  (optional) where you can specify meshing parameters to apply to the
-  selected sub-shapes.</li>
-  <li> \ref evaluate_anchor "Evaluating mesh size" (optional) can be
-  used to know an approximate number of elements before their actual generation.</li>
-  <li> \ref preview_anchor "Previewing the mesh" (optional) can be
-  used to generate mesh of only lower dimension(s) in order to
-  visually estimate it before full mesh generation, which can be much
-  longer.</li>
-  <li> \ref submesh_order_anchor "Changing sub-mesh priority"
-  (optional) can be useful if there are concurrent sub-meshes
-  defined.</li>
-  <li> \ref compute_anchor "Computing the mesh" uses defined meshing
-  parameters to generate mesh elements.</li>
-  <li> \ref edit_anchor "Editing the mesh" (optional) can be used to
-  \ref modifying_meshes_page "modify" the mesh of a lower dimension before
-  \ref compute_anchor "computing" elements of an upper dimension.</li>
-</ul>
-
-\anchor create_mesh_anchor
-<h2>Creation of a mesh object</h2>
-<em>To construct a mesh:</em>
-<ol>
-  <li>Select a geometrical object for meshing.</li>
-  <li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
-      Mesh"</em> button in the toolbar. 
-
-    <center>
-    \image html image32.png
-    <em>"Create Mesh" button</em>
-    </center>
-
-    The following dialog box will appear: 
-
-    \image html createmesh-inv.png
-    <br>
-  </li>
-  <li> To filter off irrelevant meshing algorithms, you can
-    select <b>Mesh Type</b> in the corresponding list from <b>Any,
-      Hexahedral, Tetrahedral, Triangular </b> and \b Quadrilateral (there
-    can be less items for the geometry of lower dimensions).
-
-    Selection of a mesh type hides all meshing algorithms that cannot
-    generate elements of this type.</li>
-
-  <li>Apply \subpage basic_meshing_algos_page "meshing algorithms" and
-    \subpage about_hypo_page "hypotheses" which will be used to compute
-    this mesh.
-
-    "Create mesh" dialog box contains several tab pages titled \b 3D,
-    \b 2D, \b 1D and \b 0D. The title of each page reflects the
-    dimension of the sub-shapes the algorithms listed on
-    this page affect and the maximal dimension of elements the algorithms
-    generate. For example, \b 3D page lists the algorithms that affect
-    3D sub-shapes (solids) and generate 3D mesh elements
-    (tetrahedra, hexahedra etc.)
-
-    As soon as you have selected an algorithm, you can create a
-    hypothesis (or select an already created one). A set of accessible
-    hypotheses includes only the hypotheses that can be used by the
-    selected algorithm.
-
-    \note
-    - Some page(s) can be disabled if the geometrical
-    object does not include shapes (sub-shapes) of the corresponding
-    dimension(s). For example, if the input object is a geometrical face,
-    \b 3D page is disabled.
-    - Some algorithms affect the geometry of several dimensions,
-    i.e. 1D+2D or 1D+2D+3D. If such an algorithm is selected, the
-    dialog pages related to the corresponding lower dimensions are
-    disabled.
-    - \b 0D page refers to 0D geometry (vertices) rather than
-    to 0D elements. Mesh module does not provide algorithms that
-    produce 0D elements. Currently \b 0D page provides only one
-    algorithm "Segments around vertex" that allows specifying the required
-    size of mesh edges about the selected vertex (or vertices).
-
-    For example, you need to mesh a 3D object.
-
-    First, you can change a default name of your mesh in the \b Name
-    box. Then check that the selected geometrical object indicated in
-    \b Geometry field, is what you wish to mesh; if not, select
-    the correct object in the Object Browser. Click "Select" button
-    near \b Geometry field if the name of the object has not yet
-    appeared in \b Geometry field.
-    <center>
-    \image html image120.png
-    <em>"Select" button</em>
-    </center>
-
-    Now you can define 3D Algorithm and 3D Hypotheses, which will be
-    applied to discretize the solids of your geometrical object using
-    3D elements. Click the <em>"Add Hypothesis"</em> button to create
-    and add a hypothesis.
-    <center>
-    \image html image121.png
-    <em>"Add Hypothesis" button</em>
-    </center>
-    Click the <em>"Plus"</em> button to enable adding more additional hypotheses.
-
-    Click the <em>"Edit Hypothesis"</em> button to change the values for the
-    current hypothesis.
-    <center>
-    \image html image122.png
-    <em>"Edit Hypothesis" button</em>
-    </center>
-
-    Most 2D and 3D algorithms can work without hypotheses using
-    default meshing parameters. Some algorithms do not require any
-    hypotheses. After selection of an algorithm "Hypothesis" field of
-    the dialog can contain:
-    <ul>
-      <li> <em>\<Default\></em> if the algorithm can work using default
-      parameters.</li>
-      <li> <em>\<None\></em> if the algorithm requires a hypothesis defining
-      its parameters.</li>
-      <li> If the algorithm does not use hypotheses, this field is grayed.</li>
-    </ul>
-    After selection of an algorithm <b>Add. Hypothesis</b> field can contain:
-    <ul>
-      <li> <em>\<None\></em> if the algorithm can be tuned
-      using an additional hypothesis.</li>
-      <li> If the algorithm does not use additional hypotheses, this field is grayed.</li>
-    </ul>
-
-    Proceed in the same way with 2D and 1D Algorithms and Hypotheses that
-    will be used to mesh faces and edges of your geometry. (Note
-    that any object has edges, even if their existence is not
-    apparent, for example, a sphere has 4 edges). Note that the
-    choice of hypotheses and lower dimension algorithms depends on
-    the higher dimension algorithm.
-
-    If you wish you can select other algorithms and/or hypotheses
-    for meshing some sub-shapes of your CAD model by \ref constructing_submeshes_page.
-
-    Some algorithms generate mesh of several dimensions, while others
-    produce mesh of only one dimension. In the latter case there must
-    be one Algorithm and zero or several
-    Hypotheses for each dimension of your object, otherwise you will
-    not get any mesh at all. Of course, if you wish to mesh a face,
-    which is a 2D object, you do not need to define a 3D Algorithm and
-    Hypotheses.
-
-    In the <b>Object Browser</b> the structure of the new mesh is
-    displayed as follows:
-    \image html image88.jpg
-    It contains: 
-    <ul>
-      <li>a mesh name (<em>Mesh_mechanic</em>);
-      <li>a reference to the geometrical object on the basis of
-        which the mesh has been constructed (\a mechanic);</li> 
-      <li><b>Applied hypotheses</b> folder containing the references
-        to the hypotheses chosen at the construction of the mesh;</li>
-      <li><b>Applied algorithms</b> folder containing the references
-        to the algorithms chosen at the construction of the mesh.</li> 
-      <li><b>SubMeshes on Face</b> folder containing the sub-meshes
-        defined on geometrical faces. There also can be folders for
-        sub-meshes on vertices, edges, wires, shells, solids and
-        compounds.</li>
-      <li><b>Groups of Faces</b> folder containing the groups of mesh
-        faces. There also can be folders for groups of nodes, edges,
-        volumes 0D elements and balls.</li>
-    </ul>
-
-    There is an alternative way to assign Algorithms and Hypotheses by
-    clicking <b>Assign a set of hypotheses</b> button and selecting among
-    pre-defined sets of algorithms and hypotheses. In addition to the built-in
-    sets of hypotheses, it is possible to create custom sets by editing
-    CustomMeshers.xml file located in the home directory. CustomMeshers.xml
-    file must describe sets of hypotheses in the
-    same way as ${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml 
-    file does (sets of hypotheses are enclosed between \<hypotheses-set-group\>
-      tags). For example:
-~~~~~~{.xml}
-    <?xml version='1.0' encoding='us-ascii'?>
-    <!DOCTYPE meshers PUBLIC "" "desktop.dtd">
-    <meshers>
-    <hypotheses-set-group>
-        <hypotheses-set name="My favorite hypotheses"
-                        hypos="AutomaticLength"
-                        algos="CompositeSegment_1D, Quadrangle_2D, GHS3D_3D"/>
-    </hypotheses-set-group>
-    </meshers>
-~~~~~~
-    If the file contents are incorrect, there can be an error at
-    activation of Mesh module: <em>"fatal parsing error: error
-    triggered by consumer in line ..."</em>
-<br>
-<center>
-      \image html hypo_sets.png
-      List of sets of hypotheses. Tag <em>[custom]</em> is
-      automatically added to the sets defined by the user.
-</center>
-      \note 
-      - \a "Automatic" in the names of predefined sets of hypotheses
-      does not actually mean that they are suitable for meshing any
-      geometry.
-      - The list of sets of hypotheses can be shorter than in the
-        above image depending on the geometry dimension.
-  </li>
-</ol>
-
-Consider trying a sample script for construction of a mesh from our 
-\ref tui_creating_meshes_page "TUI Scripts" section.
-
-\anchor evaluate_anchor
-<h2>Evaluating mesh size</h2>
-
-After the mesh object is created and all hypotheses are assigned and
-before \ref compute_anchor "Compute" operation, it is possible to
-calculate the eventual mesh size. For this, select the mesh in
-the <b>Object Browser</b> and from the \b Mesh menu select \b
-Evaluate. The result of evaluation will be displayed in the following
-information box: 
-
-\image html mesh_evaluation_succeed.png
-
-\anchor preview_anchor
-<h2>Previewing the mesh</h2>
-
-Before \ref compute_anchor "the mesh computation", it is also possible
-to see the mesh preview. This operation allows to incrementally
-compute the mesh, dimension by dimension, and to discard an
-unsatisfactory mesh.
-
-For this, select the mesh in the Object Browser. From the \b Mesh menu
-select \b Preview or click "Preview" button in the toolbar or activate
-"Preview" item from the pop-up menu.
-
-<center>
-\image html mesh_precompute.png
-<em>"Preview" button</em>
-</center>
-
-Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog. 
-
-\image html preview_mesh_1D.png "1D mesh preview shows nodes computed on geometry edges"
-<br>
-\image html preview_mesh_2D.png "2D mesh preview shows edge mesh elements, computed on geometry faces"
-
-<b>Compute</b> button computes the whole mesh.
-
-When the Preview dialog is closed, the question about the storage of temporarily
-created mesh elements appears:
-
-\image html preview_tmp_data.png
-
-These elements can be kept in the mesh.
-
-
-\anchor submesh_order_anchor
-<h2>Changing sub-mesh priority</h2>
-
-If the mesh contains concurrent \ref constructing_submeshes_page "sub-meshes", 
-it is possible to change the priority of their computation, i.e. to
-change the priority of applying algorithms to the shared sub-shapes of
-the Mesh shape.
-
-<em>To change sub-mesh priority:</em>
-
-Choose "Change sub-mesh priority" from the Mesh menu or a pop-up
-menu. The opened dialog shows a list of sub-meshes in the order of
-their priority. 
-
-There is an example of sub-mesh order modifications taking a Mesh created on a Box
-shape. The main Mesh object:
-<ul>
-  <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=20</li>
-  <li><i>2D</i> <b>Triangle: Mefisto</b> with Hypothesis<b>Max Element Area</b>
-  </li>
-</ul>
-The first sub-mesh <b>Submesh_1</b> created on <b>Face_1</b> is:
-<ul>
-  <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=4</li>
-  <li><i>2D</i> <b>Triangle: Mefisto</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
-</ul>
-The second sub-mesh <b>Submesh_2</b> created on <b>Face_2</b> is:
-<ul>
-  <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=8</li>
-  <li><i>2D</i> <b>Triangle: Mefisto</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
-</ul>
-
-And the last sub-mesh <b>Submesh_3</b> created on <b>Face_3</b> is:
-<ul>
-  <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=12</li>
-  <li><i>2D</i> <b>Triangle: Mefisto</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
-</ul>
-
-The sub-meshes become concurrent if they share sub-shapes that can be
-meshed with different algorithms (or different hypotheses). In the
-example, we have three sub-meshes with concurrent algorithms, because
-they have different hypotheses.
-
-The first mesh computation is made with:
-<center>
-\image html mesh_order_123.png
-<em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
-<center>
-\image html mesh_order_123_res.png
-<em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
-
-The next mesh computation is made with:
-<center>
-\image html mesh_order_213.png
-<em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
-<center>
-\image html mesh_order_213_res.png
-<em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
-
-And the last mesh computation is made with:
-<center>
-\image html mesh_order_321.png
-<em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
-<center>\image html mesh_order_321_res.png
-<em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
-
-As we can see, each mesh computation has a different number of result
-elements and a different mesh discretization on the shared edges (the edges 
-that are shared between <b>Face_1</b>, <b>Face_2</b> and <b>Face_3</b>)
-
-Additionally, sub-mesh 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 sub-meshes. 
-<center>
-\image html mesh_order_preview.png
-<em>"Preview with sub-mesh priority list box"</em></center>
-
-If there are no concurrent sub-meshes under the Mesh object, the user
-will see the following information.
-<center>
-\image html mesh_order_no_concurrent.png
-<em>"No concurrent submeshes detected"</em></center>
-
-
-\anchor compute_anchor
-<h2>Computing the mesh</h2>
-
-It is equally possible to skip  \ref evaluate_anchor "the Evaluation"
-and \ref preview_anchor "the Preview" and to \b Compute the mesh after
-the hypotheses are assigned. For this, select your mesh in
-the <b>Object Browser</b>. From the \b Mesh menu or the context menu
-select \b Compute or click \a "Compute" button of the toolbar.
-
-<center>
-\image html image28.png
-<em>"Compute" button</em>
-</center>
-
-After the mesh computation finishes, the Mesh Computation information
-box appears. If you close this box and click "Compute" button again,
-without previously changing meshing parameters, the mesh will NOT be
-re-computed and the Mesh Computation information box will be shown
-with the same contents. (To fully re-compute the mesh, invoke 
-\ref clear_mesh_anchor "Clear Mesh Data" command before). 
-
-\anchor meshing_result_anchor
-If the mesh computation has been a success, the box shows information
-on the number of entities of different types in the mesh.
-
-\image html meshcomputationsucceed.png
-
-\anchor meshing_failed_anchor
-If the mesh computation has failed, the information about the cause of the
-failure is provided in \b Errors table.
-
-\image html meshcomputationfail.png
-
-After you select an error in \b Errors table, <b>Show Sub-shape</b> button allows
-visualizing in magenta the geometrical entity meshing of which failed
-(Name of this entity or its ID and type is shown in \a Sub-shape column).
-
-<center>
-\image html failed_computation.png 
-<em>3D algorithm failed to compute mesh on a box shown using <b>Show
-    Sub-shape</b> button</em>
-</center>
-
-<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
-has failed, in the Geometry component as a child of the main shape, which
-allows analyzing the problematic geometry and creating a sub-mesh on it in
-order to locally tune the hypotheses.
-
-If the failure is caused by an invalid input mesh and the algorithm has
-found which mesh entities are bad, <b>Show bad Mesh</b> 
-button appears in the dialog. Clicked, it shows the bad mesh entities in
-the Viewer in magenta. Sometimes the shown mesh entities are too small
-or/and hidden by other mesh elements. They can be seen after
-switching the mesh to Wireframe visualization mode or switching off
-the visualization of faces and volumes (if any).
-
-<b>Bad Mesh to Group</b> button creates groups of bad mesh entities
-to facilitate their analysis.
-
-<center>
-\image html show_bad_mesh.png
-<em>Edges bounding a hole in the surface are shown in magenta using <b>Show
-    bad Mesh</b> button</em>
-</center>
-
-\note Mesh Computation Information box does not appear if you set
-\ref show_comp_result_pref "Mesh computation/Show a computation result notification" preference 
-to the "Never" value. This option gives the possibility to control mesh
-computation reporting. There are the following possibilities: always
-show the information box, show only if an error occurs or never. 
-By default, the information box is always shown after mesh computation operation.
-
-<p><p>
-\anchor edit_anchor
-<h2>Editing the mesh</h2>
-
-It is possible to \ref modifying_meshes_page "edit the mesh" of a 
-lower dimension before generation of the mesh of a higher dimension.
-
-For example you can generate a 2D mesh, modify it using e.g. 
-\ref pattern_mapping_page, and then generate a 3D mesh basing on the
-modified 2D mesh. The workflow is as follows:
-- Define 1D and 2D meshing algorithms.
-- Compute the mesh. 2D mesh is generated.
-- Apply \ref pattern_mapping_page.
-- Define 3D meshing algorithms without modifying 1D and 2D algorithms
-and hypotheses.
-- Compute the mesh. 3D mesh is generated.
-
-\note Nodes and elements added \ref adding_nodes_and_elements_page
-"manually" cannot be used in this workflow because the manually created
-entities are not attached to any geometry and thus (usually) cannot be
-found by the mesher paving a geometry.
-
-<b>See Also</b> a sample TUI Script demonstrates the possibility of 
-\ref tui_editing_while_meshing "Intermediate edition while meshing"
-
-*/
diff --git a/doc/salome/gui/SMESH/input/constructing_meshes.rst b/doc/salome/gui/SMESH/input/constructing_meshes.rst
new file mode 100644 (file)
index 0000000..bb26995
--- /dev/null
@@ -0,0 +1,405 @@
+.. _constructing_meshes_page:
+
+*******************
+Constructing meshes
+*******************
+
+To create a mesh on geometry, it is necessary to create a mesh object by choosing
+
+* a geometrical shape produced in the Geometry module (*main shape*);
+* *meshing parameters*, including 
+
+  * :ref:`meshing algorithms <basic_meshing_algos_page>` and
+  * :ref:`hypotheses <about_hypo_page>` specifying constraints to be taken into account by the chosen meshing algorithms.
+
+Then you can launch mesh generation by invoking :ref:`Compute <compute_anchor>` command.
+The generated mesh will be automatically shown in the Viewer. You can
+switch off automatic visualization or limit mesh size until which it is
+automatically shown in :ref:`mesh_preferences_page` (*Automatic update* entry).
+
+Read more about meshing parameters:
+
+.. toctree::
+       :maxdepth: 1
+
+       basic_meshing_algos.rst
+       about_hypo.rst
+
+Mesh generation on the geometry is performed in the bottom-up
+flow: nodes on vertices are created first, then edges are divided into
+segments using nodes on vertices; the nodes of segments are then
+used to mesh faces; then the nodes of faces are used to mesh
+solids. This automatically assures the conformity of the mesh.
+
+It is required to choose a meshing algorithm for every dimension of
+sub-shapes up to the highest dimension to be generated. Note
+that some algorithms generate elements of several dimensions, and
+others of only one. It is not necessary to define meshing
+parameters for all dimensions at once; you can start from 1D
+meshing parameters only, compute the 1D mesh, then define 2D meshing
+parameters and compute the 2D mesh (note that 1D mesh will not be
+re-computed).
+
+An algorithm of a certain dimension chosen at mesh creation is applied
+to discretize every sub-shape of this dimension. It is possible to
+specify a different algorithm or hypothesis to be applied to one or
+a group of sub-shapes by creating a :ref:`sub-mesh <constructing_submeshes_page>`.
+You can specify no algorithms at all at mesh object
+creation and specify the meshing parameters on sub-meshes only; then
+only the sub-shapes, for which an algorithm and a hypothesis (if any)
+have been defined will be discretized.
+
+Construction of a mesh on a geometry includes at least two (:ref:`mesh creation <create_mesh_anchor>` and :ref:`computing <compute_anchor>`) of the following steps:
+
+* :ref:`create_mesh_anchor`, where you can specify meshing parameters to apply to all sub-shapes of the main shape.
+* :ref:`Creation of sub-meshes <constructing_submeshes_page>`, (optional) where you can specify meshing parameters to apply to the selected sub-shapes.
+* :ref:`evaluate_anchor` (optional) can be used to know an approximate number of elements before their actual generation.
+* :ref:`preview_anchor` (optional) can be used to generate mesh of only lower dimension(s) in order to visually estimate it before full mesh generation, which can be much longer.
+* :ref:`submesh_order_anchor` (optional) can be useful if there are concurrent sub-meshes defined.
+* :ref:`compute_anchor` uses defined meshing parameters to generate mesh elements.
+* :ref:`edit_anchor` (optional) can be used to :ref:`modify <modifying_meshes_page>` the mesh of a lower dimension before :ref:`computing <compute_anchor>` elements of an upper dimension.
+
+
+.. _create_mesh_anchor:
+
+Creation of a mesh object
+#########################
+
+To construct a mesh:
+
+.. |img| image:: ../images/image32.png
+.. |sel| image:: ../images/image120.png
+.. |add| image:: ../images/image121.png
+.. |edt| image:: ../images/image122.png
+.. |cmp| image:: ../images/image28.png
+.. |prv| image:: ../images/mesh_precompute.png
+
+#. Select a geometrical object for meshing.
+#. In the **Mesh** menu select **Create Mesh** or click *"Create Mesh"* button |img| in the toolbar.
+
+   The following dialog box will appear: 
+
+       .. image:: ../images/createmesh-inv.png
+               :align: center
+  
+#. To filter off irrelevant meshing algorithms, you can select **Mesh Type** in the corresponding list from **Any, Hexahedral, Tetrahedral, Triangular** and **Quadrilateral** (there can be less items for the geometry of lower dimensions). Selection of a mesh type hides all meshing algorithms that cannot generate elements of this type.
+
+#. Apply :ref:`meshing algorithms <basic_meshing_algos_page>` and :ref:`hypotheses <about_hypo_page>` which will be used to compute this mesh.
+
+   "Create mesh" dialog box contains several tab pages titled **3D**, **2D**, **1D** and **0D**. The title of each page reflects the dimension of the sub-shapes the algorithms listed on this page affect and the maximal dimension of elements the algorithms generate. For example, **3D** page lists the algorithms that affect 3D sub-shapes (solids) and generate 3D mesh elements (tetrahedra, hexahedra etc.)
+
+   As soon as you have selected an algorithm, you can create a hypothesis (or select an already created one). A set of accessible hypotheses includes only the hypotheses that can be used by the selected algorithm.
+
+   .. note::
+      * Some page(s) can be disabled if the geometrical object does not include shapes (sub-shapes) of the corresponding dimension(s). For example, if the input object is a geometrical face, **3D** page is disabled.
+      * Some algorithms affect the geometry of several dimensions, i.e. 1D+2D or 1D+2D+3D. If such an algorithm is selected, the dialog pages related to the corresponding lower dimensions are disabled.
+      * **0D** page refers to 0D geometry (vertices) rather than to 0D elements. Mesh module does not provide algorithms that produce 0D elements. Currently **0D** page provides only one algorithm "Segments around vertex" that allows specifying the required size of mesh edges about the selected vertex (or vertices).
+
+   For example, you need to mesh a 3D object.
+
+   First, you can change a default name of your mesh in the **Name** box. Then check that the selected geometrical object indicated in **Geometry** field, is what you wish to mesh; if not, select the correct object in the Object Browser. Click "Select" button |sel| near **Geometry** field if the name of the object has not yet appeared in **Geometry** field.
+
+   Now you can define 3D Algorithm and 3D Hypotheses, which will be applied to discretize the solids of your geometrical object using 3D elements. Click the *"Add Hypothesis"* button |add| to create  and add a hypothesis.
+
+   Click the *"Plus"* button to enable adding more additional hypotheses.
+
+   Click the *"Edit Hypothesis"* button |edt| to change the values for the current hypothesis.
+
+   Most 2D and 3D algorithms can work without hypotheses using default meshing parameters. Some algorithms do not require any hypotheses. After selection of an algorithm "Hypothesis" field of the dialog can contain:
+    
+   * *\<Default\>* if the algorithm can work using default parameters.
+   * *\<None\>* if the algorithm requires a hypothesis defining its parameters.
+   * If the algorithm does not use hypotheses, this field is grayed.
+    
+   After selection of an algorithm **Add. Hypothesis** field can contain:
+    
+   * *\<None\>* if the algorithm can be tuned using an additional hypothesis.
+   * If the algorithm does not use additional hypotheses, this field is grayed.
+    
+
+   Proceed in the same way with 2D and 1D Algorithms and Hypotheses that will be used to mesh faces and edges of your geometry. (Note that any object has edges, even if their existence is not apparent, for example, a sphere has 4 edges). Note that the choice of hypotheses and lower dimension algorithms depends on the higher dimension algorithm.
+
+   If you wish you can select other algorithms and/or hypotheses for meshing some sub-shapes of your CAD model by :ref:`constructing_submeshes_page`.
+
+   Some algorithms generate mesh of several dimensions, while others produce mesh of only one dimension. In the latter case there must be one Algorithm and zero or several Hypotheses for each dimension of your object, otherwise you will not get any mesh at all. Of course, if you wish to mesh a face, which is a 2D object, you do not need to define a 3D Algorithm and Hypotheses.
+
+   In the **Object Browser** the structure of the new mesh is displayed as follows:
+
+       .. image:: ../images/image88.jpg
+               :align: center
+
+   It contains: 
+    
+   * a mesh name (*Mesh_mechanic*);
+   * a reference to the geometrical object on the basis of which the mesh has been constructed (*mechanic*); 
+   * **Applied hypotheses** folder containing the references to the hypotheses chosen at the construction of the mesh;
+   * **Applied algorithms** folder containing the references to the algorithms chosen at the construction of the mesh. 
+   * **SubMeshes on Face** folder containing the sub-meshes defined on geometrical faces. There also can be folders for sub-meshes on vertices, edges, wires, shells, solids and compounds.
+   * **Groups of Faces** folder containing the groups of mesh faces. There also can be folders for groups of nodes, edges, volumes 0D elements and balls.
+    
+
+   There is an alternative way to assign Algorithms and Hypotheses by clicking **Assign a set of hypotheses** button and selecting among pre-defined sets of algorithms and hypotheses. In addition to the built-in sets of hypotheses, it is possible to create custom sets by editing CustomMeshers.xml file located in the home directory. CustomMeshers.xml file must describe sets of hypotheses in the same way as ${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml file does (sets of hypotheses are enclosed between \<hypotheses-set-group\> tags). For example:
+       ::
+
+               <?xml version='1.0' encoding='us-ascii'?>
+               <!DOCTYPE meshers PUBLIC "" "desktop.dtd">
+               <meshers>
+               <hypotheses-set-group>
+                       <hypotheses-set name="My favorite hypotheses"
+                               hypos="AutomaticLength"
+                               algos="CompositeSegment_1D, Quadrangle_2D, GHS3D_3D"/>
+               </hypotheses-set-group>
+               </meshers>
+
+   If the file contents are incorrect, there can be an error at activation of Mesh module: *"fatal parsing error: error triggered by consumer in line ..."*
+
+       .. image:: ../images/hypo_sets.png
+               :align: center
+
+   .. centered::
+      List of sets of hypotheses. Tag *[custom]* is automatically added to the sets defined by the user.
+
+   .. note::
+      * *"Automatic"* in the names of predefined sets of hypotheses does not actually mean that they are suitable for meshing any geometry.
+      * The list of sets of hypotheses can be shorter than in the above image depending on the geometry dimension.
+  
+
+Consider trying a sample script for construction of a mesh from our :ref:`TUI Scripts <tui_creating_meshes_page>` section.
+
+.. _evaluate_anchor:
+
+Evaluating mesh size
+####################
+
+After the mesh object is created and all hypotheses are assigned and before :ref:`Compute <compute_anchor>` operation, it is possible to calculate the eventual mesh size. For this, select the mesh in the **Object Browser** and from the **Mesh** menu select **Evaluate**.
+The result of evaluation will be displayed in the following information box: 
+
+       .. image:: ../images/mesh_evaluation_succeed.png
+               :align: center
+
+.. _preview_anchor:
+
+Previewing the mesh
+###################
+
+Before :ref:`the mesh computation <compute_anchor>`, it is also possible to see the mesh preview. This operation allows to incrementally compute the mesh, dimension by dimension, and to discard an unsatisfactory mesh.
+
+For this, select the mesh in the Object Browser. From the **Mesh** menu select **Preview** or click "Preview" button |prv| in the toolbar or activate "Preview" item from the pop-up menu.
+
+Select **1D mesh** or **2D mesh** preview mode in the Preview dialog. 
+
+.. image:: ../images/preview_mesh_1D.png 
+       :align: center
+
+.. centered::
+       1D mesh preview shows nodes computed on geometry edges
+
+
+.. image:: ../images/preview_mesh_2D.png 
+       :align: center
+
+.. centered::
+       2D mesh preview shows edge mesh elements, computed on geometry faces
+
+
+**Compute** button computes the whole mesh.
+
+When the Preview dialog is closed, the question about the storage of temporarily created mesh elements appears:
+
+.. image:: ../images/preview_tmp_data.png
+       :align: center
+
+These elements can be kept in the mesh.
+
+
+.. _submesh_order_anchor:
+
+Changing sub-mesh priority
+##########################
+
+If the mesh contains concurrent :ref:`sub-meshes <constructing_submeshes_page>`, it is possible to change the priority of their computation, i.e. to change the priority of applying algorithms to the shared sub-shapes of the Mesh shape.
+
+*To change sub-mesh priority:*
+
+Choose **Change sub-mesh priority** from the **Mesh** menu or a pop-up menu. The opened dialog shows a list of sub-meshes in the order of their priority. 
+
+There is an example of sub-mesh order modifications taking a Mesh created on a Box shape. The main Mesh object:
+
+* *1D* **Wire discretisation** with **Number of Segments** = 20
+* *2D* **Triangle: Mefisto** with Hypothesis **Max Element Area**
+  
+
+The first sub-mesh **Submesh_1** created on **Face_1** is:
+
+* *1D* **Wire discretisation** with **Number of Segments** = 4
+* *2D* **Triangle: Mefisto** with Hypothesis **MaxElementArea** = 1200
+
+The second sub-mesh **Submesh_2** created on **Face_2** is:
+
+* *1D* **Wire discretisation** with **Number of Segments** = 8
+* *2D* **Triangle: Mefisto** with Hypothesis **MaxElementArea** = 1200
+
+
+And the last sub-mesh **Submesh_3** created on **Face_3** is:
+
+* *1D* **Wire discretisation** with **Number of Segments** = 12
+* *2D* **Triangle: Mefisto** with Hypothesis **MaxElementArea** = 1200
+
+
+The sub-meshes become concurrent if they share sub-shapes that can be meshed with different algorithms (or different hypotheses). In the example, we have three sub-meshes with concurrent algorithms, because they have different hypotheses.
+
+The first mesh computation is made with:
+
+.. image:: ../images/mesh_order_123.png
+       :align: center
+
+.. centered::
+       Mesh order SubMesh_1, SubMesh_2, SubMesh_3
+
+
+.. image:: ../images/mesh_order_123_res.png
+       :align: center
+
+.. centered::
+       Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3
+
+The next mesh computation is made with:
+
+.. image:: ../images/mesh_order_213.png
+       :align: center
+
+.. centered::
+       Mesh order SubMesh_2, SubMesh_1, SubMesh_3
+
+.. image:: ../images/mesh_order_213_res.png
+       :align: center
+
+.. centered::
+       Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3
+
+And the last mesh computation is made with:
+
+.. image:: ../images/mesh_order_321.png
+       :align: center
+
+.. centered::
+       Mesh order SubMesh_3, SubMesh_2, SubMesh_1
+       
+
+.. image:: ../images/mesh_order_321_res.png
+       :align: center
+
+.. centered::
+       Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1
+
+As we can see, each mesh computation has a different number of result
+elements and a different mesh discretization on the shared edges (the edges 
+that are shared between **Face_1**, **Face_2** and **Face_3**)
+
+Additionally, sub-mesh priority (the order of applied algorithms) can
+be modified not only in a separate dialog box, but also in
+the **Preview**. This helps to preview different mesh results,
+modifying the order of sub-meshes. 
+
+.. image:: ../images/mesh_order_preview.png
+       :align: center
+
+.. centered::
+       Preview with sub-mesh priority list box
+
+If there are no concurrent sub-meshes under the Mesh object, the user
+will see the following information.
+
+.. image:: ../images/mesh_order_no_concurrent.png
+       :align: center
+
+.. centered::
+       No concurrent submeshes detected
+
+
+.. _compute_anchor:
+
+Computing the mesh
+##################
+
+It is equally possible to skip  :ref:`Evaluation <evaluate_anchor>`
+and :ref:`Preview <preview_anchor>` and to **Compute** the mesh after
+the hypotheses are assigned. For this, select your mesh in
+the Object Browser. From the **Mesh** menu or the context menu
+select **Compute** or click *"Compute"* button |cmp| of the toolbar.
+
+After the mesh computation finishes, the Mesh Computation information
+box appears. If you close this box and click "Compute" button again,
+without previously changing meshing parameters, the mesh will NOT be
+re-computed and the Mesh Computation information box will be shown
+with the same contents. (To fully re-compute the mesh, invoke 
+:ref:`clear_mesh_anchor` command before). 
+
+.. _meshing_result_anchor:
+
+If the mesh computation has been a success, the box shows information on the number of entities of different types in the mesh.
+
+.. image:: ../images/meshcomputationsucceed.png
+       :align: center
+
+.. _meshing_failed_anchor:
+
+If the mesh computation has failed, the information about the cause of the failure is provided in **Errors** table.
+
+.. image:: ../images/meshcomputationfail.png
+       :align: center
+
+After you select an error in **Errors** table, **Show Sub-shape** button allows
+visualizing in magenta the geometrical entity meshing of which failed
+(Name of this entity or its ID and type is shown in *Sub-shape* column).
+
+.. image:: ../images/failed_computation.png 
+       :align: center
+
+.. centered::
+       3D algorithm failed to compute mesh on a box shown using **Show Sub-shape** button
+
+**Publish Sub-shape** button publishes the sub-shape, whose meshing
+has failed, in the Geometry component as a child of the main shape, which
+allows analyzing the problematic geometry and creating a sub-mesh on it in
+order to locally tune the hypotheses.
+
+If the failure is caused by an invalid input mesh and the algorithm has
+found which mesh entities are bad, **Show bad Mesh** 
+button appears in the dialog. Clicked, it shows the bad mesh entities in
+the Viewer in magenta. Sometimes the shown mesh entities are too small
+or/and hidden by other mesh elements. They can be seen after
+switching the mesh to Wireframe visualization mode or switching off
+the visualization of faces and volumes (if any).
+
+**Bad Mesh to Group** button creates groups of bad mesh entities to facilitate their analysis.
+
+.. image:: ../images/show_bad_mesh.png
+       :align: center
+
+Edges bounding a hole in the surface are shown in magenta using **Show bad Mesh** button
+
+.. note::
+       Mesh Computation Information box does not appear if you set :ref:`Mesh computation/Show a computation result notification <show_comp_result_pref>` preference to the "Never" value. This option gives the possibility to control mesh computation reporting. There are the following possibilities: always show the information box, show only if an error occurs or never. By default, the information box is always shown after mesh computation operation.
+
+.. _edit_anchor:
+
+Editing the mesh
+################
+
+It is possible to :ref:`edit the mesh <modifying_meshes_page>` of a 
+lower dimension before generation of the mesh of a higher dimension.
+
+For example you can generate a 2D mesh, modify it using e.g. :ref:`Pattern mapping <pattern_mapping_page>`, and then generate a 3D mesh basing on the modified 2D mesh. The workflow is as follows:
+
+* Define 1D and 2D meshing algorithms.
+* Compute the mesh. 2D mesh is generated.
+* Apply :ref:`Pattern mapping <pattern_mapping_page>`.
+* Define 3D meshing algorithms without modifying 1D and 2D algorithms and hypotheses.
+* Compute the mesh. 3D mesh is generated basing on a modified 2D mesh.
+
+.. note::
+   Nodes and elements added :ref:`manually <adding_nodes_and_elements_page>` cannot be used in this workflow because the manually created entities are not attached to any geometry and thus (usually) cannot be found by the mesher paving a geometry.
+
+**See Also** a sample TUI Script demonstrates the possibility of :ref:`tui_editing_while_meshing`.
+
diff --git a/doc/salome/gui/SMESH/input/constructing_submeshes.doc b/doc/salome/gui/SMESH/input/constructing_submeshes.doc
deleted file mode 100644 (file)
index b7fe2fe..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*!
-
-\page constructing_submeshes_page Constructing sub-meshes
-
-\tableofcontents
-
-By purpose, the sub-mesh is an object used to assign to a sub-shape
-different meshing parameters than those assigned to the main shape.
-
-Structurally, the sub-mesh is a mesh on a certain sub-shape, or a group of
-sub-shapes, possibly generated using different meshing algorithms
-and/or hypotheses than those used to generate the mesh on other
-sub-shapes.
-
-Creation of a sub-mesh allows to control individually meshing of a
-certain sub-shape, thus to get a locally coarser or finer mesh, to get
-elements of different types in the same mesh, etc.
-
-A sub-mesh can be meshed individually. To achieve this, select a
-sub-mesh and either invoke <b>Compute Sub-mesh</b> vai the contextual
-menu in the Object Browser or invoke <b> Mesh > Compute </b> menu.
-
-\section submesh_shape_section How to get a sub-shape for sub-mesh construction
-
-A sub-shape to create a sub-mesh on should be retrieved from the main shape
-in one of the following ways: <ul>
-<li> In Geometry module, via <em>New Entity > Explode</em> menu.</li>
-<li> In Geometry module, by creation of a group (<em>New Entity >
-    Group > Create Group</em> menu).</li> 
-<li> In Mesh module, by
-  \ref subshape_by_mesh_elem "selecting a mesh element" generated on a
-  sub-shape of interest. This way is accessible if the mesh is
-  already computed.</li> 
-<li> In Mesh module, by clicking <em>Publish Sub-shape</em> button in a
-      dialog showing \ref meshing_failed_anchor "meshing errors".</li> 
-</ul>
-
-\section submesh_priority How hypotheses are selected among sub-meshes
-
-Internally, definition of meshing parameters to apply for
-discretization of a certain sub-shape, for example an edge of a
-compound of solids, starts from searching an algorithm, 1D as for the
-edge. The following sub-shapes are sequentially checked for presence
-of a sub-mesh where 1D algorithm is assigned:
-<ul>
-<li> the \b edge itself</li>
-<li> <b>groups of edges</b> containing the edge, if any</li>
-<li> \b wires sharing the edge</li>
-<li> \b faces sharing the edge</li>
-<li> <b>groups of faces</b> sharing the edge, if any</li>
-<li> \b shells sharing the edge</li>
-<li> \b solids sharing the edge</li>
-<li> <b>groups of solids</b> sharing the edge, if any</li>
-<li> the <b>main shape</b></li>
-</ul>
-(This sequence of sub-shapes defines the priority of sub-meshes. Thus more
-local, i.e. assigned to sub-shape of lower dimension, algorithms and
-hypotheses have higher priority during the search of hypotheses to
-apply.)
-
-As soon as a 1D algorithm is found, the search stops and the same
-sequence of sub-shapes is checked to find the main and additional 1D
-hypotheses, which can be taken into account by the found 1D algorithm. 
-
-The multi-dimensional algorithms have a higher priority than
-uni-dimensional ones if they are assigned to sub-meshes of the
-same priority.
-
-If meshing parameters are defined on sub-meshes of the same priority,
-for example, different 1D hypotheses are assigned to two faces sharing
-an edge, the hypothesis assigned to a sub-shape with a lower ID will
-be used for meshing. You can \ref submesh_order_anchor "change" mutual
-priority of such concurrent sub-meshes. 
-
-\section submesh_definition How to construct a sub-mesh
-
-\n Construction of a sub-mesh consists of:
-<ul>
-<li>Selecting a mesh which will encapsulate the sub-mesh</li>
-<li>Selecting a sub-shape for meshing</li>
-<li>Applying one or several
-\ref about_hypo_page "hypotheses" and 
-\ref basic_meshing_algos_page "meshing algorithms" which will be used
-for discretization of this sub-shape.</li>
-</ul>
-
-<br><em>To construct a sub-mesh:</em>
-\par
-From the \b Mesh menu select <b>Create Sub-mesh</b> or click <em>"Create
-Sum-mesh"</em> button in the toolbar.
-
-<center>
-  \image html image33.gif
-  <em>"Create Sub-mesh" button</em>
-</center>
-
-\par
-The following dialog box will appear:
-
-\par
-\image html createmesh-inv2.png
-
-It allows to define the \b Name, the parent \b Mesh and the \b
-Geometry (e.g. a face if the parent mesh has been built on box) of the
-sub-mesh. You can define meshing algorithms and hypotheses in the same way as
-in \ref constructing_meshes_page "Create mesh" dialog. 
-
-Later you can change the applied hypotheses or their parameters in 
-\ref editing_meshes_page "Edit mesh/sub-mesh" dialog. Mesh entities
-generated using changed hypotheses are automatically removed.
-
-\anchor subshape_by_mesh_elem
-If the parent mesh is already computed, then you can define the
-\b Geometry by picking mesh elements computed on a sub-shape of interest
-in the 3D Viewer, i.e. you do not have to extract this sub-shape
-in Geometry module beforehand. To start element selection, press \a
-Selection button to the right of \b Geometry label. If this button is
-already down, then click it to release and then click it again. The
-following pop-up menu allowing to choose a way of geometry definition will
-appear.
-
-\image html choose_geom_selection_way.png
-
-<b>Direct geometry selection</b> enables selecting the sub-shape in the Object
-Browser.
-<b>Find geometry by mesh element selection</b> activates the following dialog.
-
-\image html find_geom_by_mesh_elem.png
-
-In this dialog, <b> Element Type </b> defines a kind of element to pick in the
-Viewer.
-Instead of picking an element in the Viewer, you can type its
-ID in <b> Element ID</b> field. 
-<b> Geometry name </b> field allows defining a name of the sub-shape, 
-with which the sub-shape will appear in the Object Browser (if not yet
-there).
-
-\section submesh_tree Sub-mesh in the Object Browser
-
-In the Object Browser the structure of the new sub-mesh will be
-displayed as follows:
-
-\image html image10.jpg
-
-It contains:
-<ul>
-<li>a sub-mesh name (\a SubMeshFace1)
-<li>a reference to the geometrical object on the basis of which the
-  sub-mesh has been constructed (<em>Cylindrical Face_1</em>);</li>
-<li><em>Applied hypotheses</em> folder containing references to
-hypotheses assigned to the sub-mesh;</li>
-<li><em>Applied algorithms</em> folder containing references to
-algorithms assigned to the sub-mesh.</li>
-</ul>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_construction_submesh "Construct Sub-mesh" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/constructing_submeshes.rst b/doc/salome/gui/SMESH/input/constructing_submeshes.rst
new file mode 100644 (file)
index 0000000..974b279
--- /dev/null
@@ -0,0 +1,145 @@
+.. _constructing_submeshes_page: 
+
+***********************
+Constructing sub-meshes
+***********************
+
+.. contents:: `Table of contents`
+
+What the sub-mesh is for
+########################
+
+By purpose, the sub-mesh is an object used to assign to a sub-shape
+different meshing parameters than those assigned to the main shape.
+
+Structurally, the sub-mesh is a mesh on a certain sub-shape, or a group of
+sub-shapes, possibly generated using different meshing algorithms
+and/or hypotheses than those used to generate the mesh on other
+sub-shapes.
+
+Creation of a sub-mesh allows to control individually meshing of a
+certain sub-shape, thus to get a locally coarser or finer mesh, to get
+elements of different types in the same mesh, etc.
+
+A sub-mesh can be meshed individually. To achieve this, select a
+sub-mesh and either invoke **Compute Sub-mesh** vai the contextual
+menu in the Object Browser or invoke **Mesh > Compute** menu.
+
+.. _submesh_shape_section: 
+
+How to get a sub-shape for sub-mesh construction
+################################################
+
+A sub-shape to create a sub-mesh on should be retrieved from the main shape
+in one of the following ways: 
+
+* In Geometry module, via **New Entity > Explode** menu.
+* In Geometry module, by creation of a group (**New Entity > Group > Create Group** menu). 
+* In Mesh module, by :ref:`selecting a mesh element <subshape_by_mesh_elem>` generated on a sub-shape of interest. This way is accessible if the mesh is already computed. 
+* In Mesh module, by clicking **Publish Sub-shape** button in a dialog showing :ref:`meshing errors <meshing_failed_anchor>`. 
+
+
+.. :submesh_priority: 
+
+How hypotheses are selected among sub-meshes
+############################################
+
+Internally, definition of meshing parameters to apply for
+discretization of a certain sub-shape, for example an edge of a
+compound of solids, starts from searching an algorithm, 1D as for the
+edge. The following sub-shapes are sequentially checked for presence
+of a sub-mesh where 1D algorithm is assigned:
+
+* the **edge** itself
+* **groups of edges** containing the edge, if any
+* **wires** sharing the edge
+* **faces** sharing the edge
+* **groups of faces** sharing the edge, if any
+* **shells** sharing the edge
+* **solids** sharing the edge
+* **groups of solids** sharing the edge, if any
+* the **main shape**
+
+(This sequence of sub-shapes defines the priority of sub-meshes. Thus more
+local, i.e. assigned to sub-shape of lower dimension, algorithms and
+hypotheses have higher priority during the search of hypotheses to
+apply.)
+
+As soon as a 1D algorithm is found, the search stops and the same
+sequence of sub-shapes is checked to find the main and additional 1D
+hypotheses, which can be taken into account by the found 1D algorithm. 
+
+The multi-dimensional algorithms have a higher priority than
+uni-dimensional ones if they are assigned to sub-meshes of the
+same priority.
+
+If meshing parameters are defined on sub-meshes of the same priority,
+for example, different 1D hypotheses are assigned to two faces sharing
+an edge, the hypothesis assigned to a sub-shape with a lower ID will
+be used for meshing. You can :ref:`change <submesh_order_anchor>` mutual
+priority of such concurrent sub-meshes. 
+
+.. _submesh_definition: 
+
+How to construct a sub-mesh
+###########################
+
+Construction of a sub-mesh consists of:
+
+* Selecting a mesh which will encapsulate the sub-mesh.
+* Selecting a sub-shape for meshing.
+* Selecting a :ref:`meshing algorithm <basic_meshing_algos_page>` which will be used for discretization of this sub-shape.
+* Creating or selecting one or several :ref:`hypotheses <about_hypo_page>`.
+
+
+*To construct a sub-mesh:*
+
+.. |img| image:: ../images/image33.gif
+
+From the **Mesh** menu select **Create Sub-mesh** or click *"Create Sum-mesh"* button |img| in the toolbar.
+
+The following dialog box will appear:
+
+       .. image:: ../images/createmesh-inv2.png
+               :align: center
+
+It allows to define the **Name**, the parent **Mesh** and the **Geometry** (e.g. a face if the parent mesh has been built on box) of the sub-mesh. You can define meshing algorithms and hypotheses in the same way as in :ref:`Create mesh <constructing_meshes_page>` dialog. 
+
+Later you can change the applied hypotheses or their parameters in :ref:`Edit mesh/sub-mesh <editing_meshes_page>` dialog. Mesh entities generated using changed hypotheses are automatically removed.
+
+.. _subshape_by_mesh_elem:
+
+If the parent mesh is already computed, then you can define the **Geometry** by picking mesh elements computed on a sub-shape of interest in the 3D Viewer, i.e. you do not have to extract this sub-shape in Geometry module beforehand. To start element selection, press *Selection* button to the right of **Geometry** label. If this button is already down, then click it to release and then click it again. The following pop-up menu allowing to choose a way of geometry definition will appear.
+
+.. image:: ../images/choose_geom_selection_way.png
+       :align: center
+
+**Direct geometry selection** enables selecting the sub-shape in the Objec Browser.
+**Find geometry by mesh element selection** activates the following dialog.
+
+.. image:: ../images/find_geom_by_mesh_elem.png
+       :align: center
+
+In this dialog, **Element Type** defines a kind of element to pick in the Viewer. Instead of picking an element in the Viewer, you can type its ID in **Element ID** field. **Geometry name** field allows defining a name of the sub-shape, with which the sub-shape will appear in the Object Browser (if not yet there).
+
+
+.. _submesh_tree:
+
+Sub-mesh in the Object Browser
+##############################
+
+In the Object Browser the structure of the new sub-mesh will be displayed as follows:
+
+       .. image:: ../images/image10.jpg
+               :align: center
+
+It contains:
+
+* a sub-mesh name (*SubMeshFace1*)
+* a reference to the geometrical object on the basis of which the sub-mesh has been constructed (*Cylindrical Face_1*);
+* *Applied hypotheses* folder containing references to hypotheses assigned to the sub-mesh;
+* *Applied algorithms* folder containing references to algorithms assigned to the sub-mesh.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_construction_submesh` operation.
+
diff --git a/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc
deleted file mode 100644 (file)
index a253c05..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-
-\page convert_to_from_quadratic_mesh_page Convert to/from Quadratic Mesh
-
-\n This functionality allows transforming linear meshes (or
-sub-meshes) to quadratic and vice versa.
-Note that conversion of a sub-mesh most probably will produce a
-non-conformal mesh. Elements on the boundary between quadratic and
-linear sub-meshes become (or remain) quadratic.
-
-See \ref adding_quadratic_elements_page for more information about
-quadratic meshes.
-
-<em>To produce a conversion:</em>
-<ol>
-<li>Select a mesh or a sub-mesh in the Object Browser or in the
-  Viewer.</li>
-<li>From the Modification menu or from the contextual menu in the
-  Object Browser choose <b> Convert to/from Quadratic Mesh</b> item,
-  or click <em>"Convert to/from quadratic"</em> button in the
-  toolbar.
-
-<center>
-\image html image154.png
-<em>"Convert to/from quadratic" button</em>
-</center>
-
-The following dialog box will appear:
-
-\image html convert.png
-
-</li>
-<li>In this dialog box specify:
-
-<ul>
-<li>If it is necessary to convert a linear mesh to quadratic or a quadratic
-  mesh to linear. **Convert to bi-quadratic** creates some types of quadratic
-  elements with additional central nodes: TRIA7, QUAD9 and HEXA27
-  elements instead of TRIA6, QUAD8, and HEXA20 elements
-  respectively.</li>
-<li>If it is necessary to place **medium nodes** of the quadratic mesh **on the
-  geometry** (meshed shape). This option is relevant for conversion to
-  quadratic provided that the mesh is based on a geometry (not imported
-  from file).</li>
-</ul>
-
-\image html image156.gif
-<center>Linear mesh (coarse mesh on a torus)</center>
-
-\image html image155.gif
-<center>Quadratic mesh</center>
-
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a \ref tui_quadratic "Convert to/from quadratic" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst
new file mode 100644 (file)
index 0000000..cd2a3e8
--- /dev/null
@@ -0,0 +1,50 @@
+.. _convert_to_from_quadratic_mesh_page:
+
+****************************************
+Convert to/from Quadratic Mesh
+****************************************
+
+This functionality allows transforming linear meshes (or sub-meshes) to quadratic and vice versa.
+
+.. Note::
+       that conversion of a sub-mesh most probably will produce a non-conformal mesh. Elements on the boundary between quadratic and linear sub-meshes become (or remain) quadratic.
+
+See :ref:`adding_quadratic_elements_page` for more information about quadratic meshes.
+
+*To produce a conversion:*
+
+.. |img| image:: ../images/image154.png
+
+#. Select a mesh or a sub-mesh in the Object Browser or in the Viewer.
+#. From the Modification menu or from the contextual menu in the Object Browser choose **Convert to/from Quadratic Mesh** item, or click *"Convert to/from quadratic"* button |img| in the toolbar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/convert.png
+               :align: center
+
+#. In this dialog box specify:
+
+   * If it is necessary to convert a linear mesh to quadratic or a quadratic mesh to linear. **Convert to bi-quadratic** creates some types of quadratic elements with additional central nodes: TRIA7, QUAD9 and HEXA27 elements instead of TRIA6, QUAD8, and HEXA20 elements respectively.
+   * If it is necessary to place **medium nodes** of the quadratic mesh **on the geometry** (meshed shape). This option is relevant for conversion to quadratic provided that the mesh is based on a geometry (not imported from file).
+
+               .. image:: ../images/image156.gif
+                       :align: center
+
+               .. centered::
+                       Linear mesh (coarse mesh on a torus)
+
+
+               .. image:: ../images/image155.gif
+                       :align: center
+
+               .. centered::
+                       Quadratic mesh
+
+
+#. Click the **Apply** or **Apply and Close** button.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_quadratic` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/copy_mesh.doc b/doc/salome/gui/SMESH/input/copy_mesh.doc
deleted file mode 100644 (file)
index 404359c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-
-\page copy_mesh_page Copy Mesh
-
-\n A mesh can be created by copying a part of or the whole other mesh.
-
-<em>To make a copy of a mesh:</em>
-
-\par
-From the contextual menu in the Object Browser of from the \b Mesh
-menu select <b>Copy Mesh</b> or click <em>"Copy Mesh"</em> button in
-the toolbar.
-
-\image html copy_mesh_icon.png
-<center><em>"Copy Mesh" button</em></center>
-
-\par
-The following dialog box will appear:
-
-\image html copy_mesh_dlg.png
-
-\par
-In the dialog:
-<ul>
-<li>specify the part of mesh to copy:
-
-<ul>
-<li><b>Select whole mesh, sub-mesh or group</b> by mouse activating
-this checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the <b>Source Element IDs</b> directly in this field. The
-selected elements will be highlighted in the viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter
-to the selection of elements. See more about filters in the \ref
-selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-</li>
-
-<li>specify the <b>New Mesh Name</b>;</li>
-
-<li>specify the conditions of copying:
-<ul>
-<li>activate <b>Generate groups</b> checkbox to copy the groups of
-  the source mesh to the newly created mesh.</li>
-</ul>
-</li>
-
-<li>Click \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ul>
-
-<b>See Also</b> a sample 
-\ref tui_copy_mesh "TUI Example of mesh copying."
-*/
diff --git a/doc/salome/gui/SMESH/input/copy_mesh.rst b/doc/salome/gui/SMESH/input/copy_mesh.rst
new file mode 100644 (file)
index 0000000..7d49ed3
--- /dev/null
@@ -0,0 +1,39 @@
+.. _copy_mesh_page:
+
+*********
+Copy Mesh
+*********
+
+A mesh can be created by copying a part of or the whole other mesh.
+
+*To make a copy of a mesh:*
+
+.. |img| image:: ../images/copy_mesh_icon.png
+
+From the contextual menu in the Object Browser of from the **Mesh** menu select **Copy Mesh** or click *"Copy Mesh"* button |img| in the toolbar.
+
+The following dialog box will appear:
+
+.. image:: ../images/copy_mesh_dlg.png
+       :align: center
+
+
+In the dialog:
+
+* specify the part of mesh to copy:
+
+  * **Select whole mesh, sub-mesh or group** by mouse activating this checkbox; or
+  * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+  * input the **Source Element IDs** directly in this field. The selected elements will be highlighted in the viewer; or
+  * apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`selection_filter_library_page` page.
+
+* specify the **New Mesh Name**;
+* specify the conditions of copying:
+
+  * activate **Generate groups** checkbox to copy the groups of the source mesh to the newly created mesh.
+
+* Click **Apply** or **Apply and Close** button to confirm the operation.
+
+
+**See Also** a sample script of :ref:`tui_copy_mesh`.
+
diff --git a/doc/salome/gui/SMESH/input/create_groups_from_geometry.doc b/doc/salome/gui/SMESH/input/create_groups_from_geometry.doc
deleted file mode 100644 (file)
index b8ee303..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*!
-
-\page create_groups_from_geometry_page Create Groups from Geometry
-
-This operation allows creating groups on geometry on all selected
-shapes. Only the main shape of the mesh and its sub-shapes can be selected.
-
-The type of each new group is defined automatically by the nature of
-the <b>Geometry</b>.
-The group names will be the same as the names of geometrical objects.
-
-\warning It's impossible to create a group of <em>0D elements</em> or <em>ball
-elements</em> with this operation. For this, it is necessary to use 
-\ref creating_groups_page "Create Group" operation. 
-
-To use this operation, select in the \b Mesh menu or in the contextual
-menu in the Object browser <b>Create Groups from Geometry</b> item.
-
-\image html create_groups_from_geometry.png
-
-In this dialog \b Elements group contains a list of shapes, on which 
-groups of elements will be created; \b Nodes group contains a list of shapes, 
-on which groups of nodes will be created.
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst b/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst
new file mode 100644 (file)
index 0000000..49bc6ed
--- /dev/null
@@ -0,0 +1,22 @@
+.. _create_groups_from_geometry_page:
+
+***************************
+Create Groups from Geometry
+***************************
+
+This operation allows creating groups on geometry on all selected shapes. Only the main shape of the mesh and its sub-shapes can be selected.
+
+The type of each new group is defined automatically by the nature of the **Geometry**.
+The group names will be the same as the names of geometrical objects.
+
+.. warning:: It's impossible to create a group of *0D elements* or *ball elements* with this operation. For this, it is necessary to use :ref:`Create group <creating_groups_page>` operation. 
+
+To use this operation, select in the **Mesh** menu or in the contextual menu in the Object browser **Create Groups from Geometry** item.
+
+.. image:: ../images/create_groups_from_geometry.png
+       :align: center
+
+In this dialog **Elements** group contains a list of shapes, on which  groups of elements will be created; **Nodes** group contains a list of shapes, on which groups of nodes will be created.
+
+
+**See Also** a sample TUI Script of a  :ref:`tui_create_group_on_geometry` operation.
diff --git a/doc/salome/gui/SMESH/input/creating_groups.doc b/doc/salome/gui/SMESH/input/creating_groups.doc
deleted file mode 100644 (file)
index da12c83..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*!
-
-\page creating_groups_page Creating groups
-
-\n In MESH you can create a \ref grouping_elements_page "group" of
-elements of a certain type. The main way to create a group, is to
-select in the \b Mesh menu <b>Create Group</b> item (also available in
-the context menu of the mesh).<br>
-To create a group you should define the following: 
-<ul>
-<li><b>Mesh</b> - the mesh whose elements will form your
-group. You can select your mesh in the Objet Browser or in the 3D
-viewer.</li>
-<li><b>Elements Type</b> - set of radio buttons allows to select the type of
-elements which will form your group:</li>
-<ul>
-<li><b>Nodes</b></li>
-<li><b>0D Element</b></li>
-<li><b>Ball</b></li>
-<li><b>Edges</b></li>
-<li><b>Faces</b></li>
-<li><b>Volumes</b></li>
-</ul>
-<li><b>Name</b> field allows to enter the name of your new group.</li>
-<li><b>Color</b> - allows to assign to the group a certain color. The
-  chosen color is used to display the elements of the group.<br>
-  Activation of <em>Auto Color</em> item in mesh context menu
-  switches on a random choice of a color for a new group.</li>
-</ul>
-Mesh module distinguishes between the three Group types:
-<b>Standalone Group</b>, <b>Group on Geometry</b> and <b>Group on Filter</b>.
-
-\anchor standalone_group <br><h2>"Standalone Group"</h2>
-
-<b>Standalone Group</b> contains a list of mesh elements, which you can define in
-the following ways:
-<ul>
-<li>By adding all entities of the chosen type existing in the
-  mesh. For this, turn on the <b>Select All</b> check-box. In this mode
-  all controls, which allow selecting the entities, are
-  disabled.</li>
-<li>By choosing entities manually with the mouse in the 3D Viewer. For
-  this, turn on the <b>Enable manual edition</b> check box. You can
-  click on an element in the 3D viewer and it will be highlighted. After
-  that click the \b Add button and the ID of this element will be
-  added to the list.<br>
-  The <b>Set filter</b> button allows to define the filter for
-  selection of the elements for your group. See more about filters on
-  the \ref selection_filter_library_page "Selection filter library"
-  page.</li> 
-<li>By adding entities from either a sub-mesh or another
-  group. For this, turn on the <b>Enable manual edition</b> check
-  box. <b>Select from</b> fields group allows to select a sub-mesh or
-  a group of the appropriate type and to \b Add their elements to the
-  group.</li>
-</ul>
-In the <b>manual edition</b> mode you can
-<ul>
-<li>click the \b Remove button to remove the selected items from
-  the list.</li>
-<li>click the <b>Sort List</b> button to sort the list of IDs of 
-  mesh elements.</li>
-</ul>
-
-\image html creategroup.png
-
-
-For example, to create a new group containing all faces of an
-existing group and some other faces selected in the viewer:
-<ul>
-<li> Select the \b Face type of entities and input the name of the new group.</li>
-<li> Check the \b Group checkbox in <b>Select From</b> group.</li>
-<li> Select the existing group of faces in the object browser or in the viewer.</li>
-<li> Click \b Add in \b Content group. <b>Id Elements</b> list will be filled
-with IDs of faces belonging to the selected group.</li>
-<li> Select other faces in the viewer.</li>
-<li> Click \b Add in \b Content group.</li>
-<li> Click \b Apply button to create the new group.</li>
-</ul>
-
-Please note that the new group does not have references to the source
-group. It contains only the list of face IDs. So if the source group
-is changed, the new one is not updated accordingly.
-
-
-\image html image130.gif
-<center>In this picture the brown cells belong to a group defined
-  manually.</center> 
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_create_standalone_group "Create a Standalone Group"
-operation.  
-
-
-\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. The group on geometry contains the elements
-of a certain type generated on the selected geometrical object. Group
-contents are dynamically updated if the mesh is modified. The group on
-geometry can be created only if the mesh is based on geometry.
-
-To define a group, click the \a Selection button and choose
-- <em>Direct geometry selection</em> to select a shape in the Object
-  Browser or in the Viewer;
-- <em>Find geometry by mesh element selection</em> to activate a
-  dialog which retrieves a shape by the selected element generated on
-  this shape.
-
-Note that this choice is available only if the mesh elements are
-already generated.
-
-\image html a-creategroup.png
-
-After confirmation of the operation a new group of mesh elements will
-be created.
-
-\image html image132.gif
-<center>In this picture the cells which belong to a certain
-  geometrical face are selected in green.</center>
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_create_group_on_geometry "Create a Group on Geometry"
-operation.
-
-
-\anchor group_on_filter <br><h2>"Group on Filter"</h2>
-
-To create a group on filter check <b>Group on filter</b> in the <b>
-Group type</b> field. The group on filter contains the elements
-of a certain type satisfying the defined filter. Group contents are
-dynamically updated if the mesh is modified.
-
-To define a group, click the <b>Set filter</b> button and define
-criteria of the filter in the opened dialog. After the
-operation is confirmed, a new group of mesh elements will be created. See more about
-filters on the 
-\ref selection_filter_library_page "Selection filter library" page. 
-
-\image html creategroup_on_filter.png
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_create_group_on_filter "Create a Group on Filter" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/creating_groups.rst b/doc/salome/gui/SMESH/input/creating_groups.rst
new file mode 100644 (file)
index 0000000..7697a22
--- /dev/null
@@ -0,0 +1,113 @@
+.. _creating_groups_page:
+
+***************
+Creating groups
+***************
+
+In MESH you can create a group of elements of a certain type. The main way to create a group, is to
+select in the **Mesh** menu **Create Group** item (also available in the context menu of the mesh).
+To create a group you should define the following: 
+
+* **Mesh** - the mesh whose elements will form your group. You can select your mesh in the Objet Browser or in the 3D viewer.
+* **Elements Type** - set of radio buttons allows to select the type of elements which will form your group:
+       * **Nodes**
+       * **0D Element**
+       * **Ball**
+       * **Edges**
+       * **Faces**
+       * **Volumes**
+* **Name** field allows to enter the name of your new group.
+* **Color** - allows to assign to the group a certain color. The chosen color is used to display the elements of the group. Activation of **Auto Color** item in mesh context menu switches on a random choice of a color for a new group.
+
+Mesh module distinguishes between the three Group types:
+**Standalone Group**, **Group on Geometry** and **Group on Filter**.
+
+
+.. _standalone_group:
+
+"Standalone Group"
+##################
+
+**Standalone Group** contains a list of mesh elements, which you can define in
+the following ways:
+
+* By adding all entities of the chosen type existing in the mesh. For this, turn on the **Select All** check-box. In this mode all controls, which allow selecting the entities, are disabled.
+* By choosing entities manually with the mouse in the 3D Viewer. For this, turn on the **Enable manual edition** check box. You can click on an element in the 3D viewer and it will be highlighted. After that click the **Add** button and the ID of this element will be added to the list. The **Set filter** button allows to define the filter for selection of the elements for your group. See more about filters on the :ref:`selection_filter_library_page` page. 
+* By adding entities from either a sub-mesh or another group. For this, turn on the **Enable manual edition** check box. **Select from** fields group allows to select a sub-mesh or a group of the appropriate type and to **Add** their elements to the group.
+
+In the **manual edition** mode you can
+
+* click the **Remove** button to remove the selected items from the list.
+* click the **Sort List** button to sort the list of IDs of mesh elements.
+
+.. image:: ../images/creategroup.png
+       :align: center
+
+For example, to create a new group containing all faces of an existing group and some other faces selected in the viewer:
+
+* Select the **Face** type of entities and input the name of the new group.
+* Check the **Group** checkbox in **Select From** group.
+* Select the existing group of faces in the object browser or in the viewer.
+* Click **Add** in **Content** group. **Id Elements** list will be filled with IDs of faces belonging to the selected group.
+* Select other faces in the viewer.
+* Click **Add** in **Content** group.
+* Click **Apply** button to create the new group.
+
+
+.. note:: The new group does not have references to the source group. It contains only the list of face IDs. So if the source group is changed, the new one is not updated accordingly.
+
+.. image:: ../images/image130.gif
+       :align: center
+
+.. centered::
+       Brown cells belong to a group defined manually
+
+**See Also** a sample TUI Script of a :ref:`tui_create_standalone_group` operation.  
+
+
+.. _group_on_geom:
+
+"Group on Geometry"
+###################
+
+.. |sel| image:: ../images/image120.png
+
+To create a group on geometry check **Group on geometry** in the **Group** **type** field. The group on geometry contains the elements of a certain type generated on the selected geometrical object. Group contents are dynamically updated if the mesh is modified. The group on geometry can be created only if the mesh is based on geometry.
+
+To define a group, click the *Selection* button |sel| and choose
+
+* *Direct geometry selection* to select a shape in the Object Browser or in the Viewer;
+* *Find geometry by mesh element selection* to activate a dialog which retrieves a shape by the selected element generated on this shape.
+
+.. note:: 
+       This choice is available only if the mesh elements are already generated.
+
+.. image:: ../images/a-creategroup.png
+       :align: center
+
+After confirmation of the operation a new group of mesh elements will be created.
+
+.. image:: ../images/image132.gif
+       :align: center
+
+.. centered::
+   Cells belonging to a certain geometrical face are selected in green
+
+**See Also** a sample TUI Script of a  :ref:`tui_create_group_on_geometry` operation.
+
+
+.. _group_on_filter:
+
+"Group on Filter"
+#################
+
+To create a group on filter check **Group on filter** in the **Group type** field. 
+The group on filter contains the elements of a certain type satisfying the defined filter. 
+Group contents are dynamically updated if the mesh is modified.
+
+To define a group, click the **Set filter** button and define criteria of the filter in the opened dialog. After the operation is confirmed, a new group of mesh elements will be created. See more about filters on the :ref:`selection_filter_library_page` page. 
+
+       .. image:: ../images/creategroup_on_filter.png
+               :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_create_group_on_filter` operation.
diff --git a/doc/salome/gui/SMESH/input/cut_mesh_by_plane.doc b/doc/salome/gui/SMESH/input/cut_mesh_by_plane.doc
deleted file mode 100644 (file)
index 9befdbb..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-
-\page cut_mesh_by_plane_page Cut a tetrahedron mesh by a plane
-
-\n MeshCut works only with MED files and produces MED files, and is a standalone program.
-It can be used either directly from a command shell outside SALOME, or with a GUI interface in SMESH,
-provided in a python plugin that needs to be installed in your SALOME application.
-
-\n MeshCut allows to cut a mesh constituted of linear tetrahedrons by a plane.
-\n The tetrahedrons intersected by the plane are cut and replaced by elements of various types,
-(tetrahedron, pyramid, pentahedron).
-
-<br>
-\anchor meshcut_standalone
-<h2>Using MeshCut as a standalone program, outside SALOME</h2>
-
-\n MeshCut is a standalone program, reading and producing med files.                
-\n                 
-\n Syntax:
-\code
-MeshCut input.med output.med resuMeshName aboveGroup belowGroup nx ny nz px py pz T
-\endcode
-
-\n                 
-\n where:
-\n  input.med    = name of the original mesh file in med format
-\n  output.med   = name of the result mesh file in med format
-\n  resuMeshName = name of the result mesh
-\n  aboveGroup   = name of the group of volumes above the cut plane
-\n  belowGroups  = name of the group of volumes below the cut plane
-\n  nx ny nz     = vector normal to the cut plane
-\n  px py pz     = a point of the cut plane
-\n  T            = 0 < T < 1 : vertices of a tetrahedron are considered as belonging to
-\n                 the cut plane if their distance from the plane is inferior to L*T,
-\n                 where L is the mean edge size of the tetrahedron
-
-<br>
-\anchor meshcut_plugin
-<h2>Using MeshCut inside SALOME</h2>
-
-When the MeshCut plugin is installed, it can be found in the Mesh menu, sub-menu SMESH_plugins.
-\n If the plugin is not installed, the file meshcut_plugin.py is in
-SMESH installation in  subdirectory bin/salome/meshcut_plugin.py.
-
-\n If there are already plugins defined in a smesh_plugins.py file,
- this file should be added at the end.
- if not, copied as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
- or in ${PLUGINPATH} Directory.
-From the Mesh menu, sub-menu SMESH_plugins, choose "MeshCut" item
-The following dialog box will appear:
-\image html meshcut_plugin.png "MeshCut Plugin dialog box"
-
-See above for the meaning of the parameters. 
-*/
diff --git a/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst b/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst
new file mode 100644 (file)
index 0000000..d0a482e
--- /dev/null
@@ -0,0 +1,58 @@
+.. _cut_mesh_by_plane_page:
+
+*********************************
+Cut a tetrahedron mesh by a plane
+*********************************
+
+MeshCut works only with MED files and produces MED files, and is a standalone program. It can be used either directly from a command shell outside SALOME, or with a GUI interface in SMESH, provided in a python plugin that needs to be installed in your SALOME application.
+
+MeshCut allows to cut a mesh constituted of linear tetrahedrons by a plane.
+The tetrahedrons intersected by the plane are cut and replaced by elements of various types, (tetrahedron, pyramid, pentahedron).
+
+
+.. _meshcut_standalone:
+
+Using MeshCut as a standalone program, outside SALOME
+#####################################################
+
+MeshCut is a standalone program, reading and producing med files.                
+
+Syntax::
+
+       MeshCut input.med output.med resuMeshName aboveGroup belowGroup nx ny nz px py pz T
+
+where:
+
+* **input.med** = name of the original mesh file in med format
+* **output.med** = name of the result mesh file in med format 
+* **resuMeshName** = name of the result mesh                    
+* **aboveGroup** = name of the group of volumes above the cut plane 
+* **belowGroups** = name of the group of volumes below the cut plane 
+* **nx ny nz** = vector normal to the cut plane                       
+* **px py pz** = a point of the cut plane                              
+* **T** = 0 < T < 1 : vertices of a tetrahedron are considered as belonging to the cut plane if their distance from the plane is inferior to L*T, where L is the mean edge size of the tetrahedron   
+
+
+.. _meshcut_plugin:
+
+Using MeshCut inside SALOME
+###########################
+
+When the MeshCut plugin is installed, it can be found in the Mesh menu, sub-menu SMESH_plugins.
+If the plugin is not installed, the file meshcut_plugin.py is in SMESH installation in  subdirectory 
+*bin/salome/meshcut_plugin.py*.
+
+If there are already plugins defined in a smesh_plugins.py file, this file should be added at the end. If not, copied as 
+*${HOME}/Plugins/smesh_plugins.py* or *${APPLI}/Plugins/smesh_plugins.py* or in *${PLUGINPATH}* directory.
+From the Mesh menu, sub-menu SMESH_plugins, choose **"MeshCut"** item
+The following dialog box will appear:
+
+.. image:: ../images/meshcut_plugin.png 
+       :align: center
+
+.. centered::
+       MeshCut Plugin dialog box
+
+See above for the meaning of the parameters. 
+
diff --git a/doc/salome/gui/SMESH/input/cutting_quadrangles.doc b/doc/salome/gui/SMESH/input/cutting_quadrangles.doc
deleted file mode 100644 (file)
index 34f26a6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-
-\page cutting_quadrangles_page Cutting quadrangles
-
-This operation allows cutting one or several quadrangle elements into two or four triangles.
-
-<em>To cut quadrangles:</em>
-
-1) Select a mesh (and display it in the 3D Viewer if you are going to pick elements by mouse).
-
-2) In the \b Modification menu select the <b>Cutting of quadrangles</b> item or
-click <em>"Cutting of quadrangles"</em> button in the toolbar.
-
-\image html image82.png
-<center><em>"Cutting of quadrangles" button</em></center>
-
-The following dialog box will appear:
-
-\image html a-cuttingofquadrangles.png
-
-
-- The main list contains the list of quadrangles selected for cutting. You can
-click on a quadrangle in the 3D viewer and it will be highlighted (lock Shift
-keyboard button to select several quadrangles): 
-  - Click \b Add button and the ID of this quadrangle will be added to the list. 
-  - To remove a selected element or elements from the list click \b Remove button. 
-  - <b>Sort list</b> button allows sorting the list of IDs. 
-  - \b Filter button allows applying a definite \ref filtering_elements "filter" 
-    to the selection of quadrangles.
-- <b>Apply to all</b> check box allows cutting all quadrangles of the selected mesh.
-- \b Preview provides a preview of cutting in the viewer. It is disabled for <b>Cut into 4 triangles</b> as this cutting way implies no ambiguity.
-- \b Criterion defines the way of cutting:
-  - <b>Cut into 4 triangles</b> allows cutting a quadrangle into four triangles by inserting a new node at the center of the quadrangle. The other options allow cutting a quadrangle into two triangles by connecting the nodes of a diagonal.
-  - <b>Use diagonal 1-3</b> and <b>Use diagonal 2-4</b> allow specifying the opposite corners, which will be connected to form two new triangles.
-  - <b>Use numeric functor</b> allows selecting in the field below a quality metric, which will be optimized when choosing a diagonal for cutting a quadrangle: 
-    - <b>Minimum diagonal</b> cuts by the shortest diagonal.
-    - <b>Aspect Ratio</b> cuts by the diagonal splitting the quadrangle into triangles with \ref aspect_ratio_page "Aspect Ratio" closer to 1
-    - <b>Minimum Angle</b> cuts by the diagonal splitting the quadrangle into triangles with \ref minimum_angle_page "Minimum Angle" closer to 60 degrees.
-    - <b>Skew</b> cuts by the diagonal splitting the quadrangle into triangles with \ref skew_page "Skew" closer to 0.0 degrees.
-- <b>Select from</b> allows choosing a sub-mesh or an existing group, whose quadrangle elements then can be added to the main list.
-
-3) Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.
-
-\image html image52.jpg "The chosen quadrangular element"
-
-\image html image51.jpg "Two resulting triangular elements"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_cutting_quadrangles "Cutting Quadrangles" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/cutting_quadrangles.rst b/doc/salome/gui/SMESH/input/cutting_quadrangles.rst
new file mode 100644 (file)
index 0000000..21c3311
--- /dev/null
@@ -0,0 +1,57 @@
+.. _cutting_quadrangles_page:
+
+*******************
+Cutting quadrangles
+*******************
+
+This operation allows cutting one or several quadrangle elements into two or four triangles.
+
+*To cut quadrangles:*
+
+.. |img| image:: ../images/image82.png
+
+#. Select a mesh (and display it in the 3D Viewer if you are going to pick elements by mouse).
+#. In the **Modification** menu select the **Cutting of quadrangles** item or click *"Cutting of quadrangles"* button |img| in the toolbar.
+
+   The following dialog box will appear:
+
+   .. image:: ../images/a-cuttingofquadrangles.png
+      :align: center
+
+
+   * The main list contains the list of quadrangles selected for cutting. You can click on a quadrangle in the 3D viewer and it will be highlighted (lock Shift keyboard button to select several quadrangles): 
+       * Click **Add** button and the ID of this quadrangle will be added to the list. 
+       * To remove a selected element or elements from the list click **Remove** button. 
+       * **Sort list** button allows sorting the list of IDs. 
+       * **Filter** button allows applying a definite :ref:`filter <filtering_elements>` to the selection of quadrangles.
+   * **Apply to all** check box allows cutting all quadrangles of the selected mesh.
+   * **Preview** provides a preview of cutting in the viewer. It is disabled for **Cut into 4 triangles** as this cutting way implies no ambiguity.
+   * **Criterion** defines the way of cutting:
+       * **Cut into 4 triangles** allows cutting a quadrangle into four triangles by inserting a new node at the center of the quadrangle. The other options allow cutting a quadrangle into two triangles by connecting the nodes of a diagonal.
+       * **Use diagonal 1-3** and **Use diagonal 2-4** allow specifying the opposite corners, which will be connected to form two new triangles.
+       * **Use numeric functor** allows selecting in the field below a quality metric, which will be optimized when choosing a diagonal for cutting a quadrangle: 
+               * **Minimum diagonal** cuts by the shortest diagonal.
+               * **Aspect Ratio** cuts by the diagonal splitting the quadrangle into triangles with :ref:`Aspect Ratio <aspect_ratio_page>` closer to 1
+               * **Minimum Angle** cuts by the diagonal splitting the quadrangle into triangles with :ref:`Minimum Angle <minimum_angle_page>` closer to 60 degrees.
+               * **Skew** cuts by the diagonal splitting the quadrangle into triangles with :ref:`Skew <skew_page>` closer to 0.0 degrees.
+   * **Select from** allows choosing a sub-mesh or an existing group, whose quadrangle elements then can be added to the main list.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+.. image:: ../images/image52.jpg 
+       :align: center
+
+.. centered::
+       The chosen quadrangular element
+
+|
+
+.. image:: ../images/image51.jpg 
+       :align: center
+
+.. centered::
+       Two resulting triangular elements
+
+**See Also** a sample TUI Script of a :ref:`tui_cutting_quadrangles` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/define_mesh_by_script.doc b/doc/salome/gui/SMESH/input/define_mesh_by_script.doc
deleted file mode 100644 (file)
index 4b97824..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-
-\page  use_existing_page Use Edges/Faces to be Created Manually
-
-The algorithms <b>Use Edges to be Created Manually</b> and 
-<b>Use Faces to be Created Manually</b> allow  creating a 1D or a 2D mesh
-in a python script (using <em>AddNode, AddEdge</em>
-and <em>AddFace</em> commands) and then using such sub-meshes in the
-construction of a 2D or a 3D mesh. 
-
-For example, you want to use standard algorithms to generate 1D and 3D
-meshes and to create 2D mesh by your python code. For this, you
-<ol>
-  <li> create a mesh object, assign a 1D algorithm,</li>
-  <li> invoke \b Compute command, which computes a 1D mesh,</li>
-  <li> assign <b>Use Faces to be Created Manually</b> and a 3D algorithm,</li>
-  <li> run your python code, which creates a 2D mesh,</li>
-  <li> invoke \b Compute command, which computes a 3D mesh.</li>
-</ol>
-
-\warning <b>Use Edges to be Created Manually</b> and <b>Use Faces to
-be Created Manually</b> algorithms should be assigned _before_
-mesh generation by the Python code.
-
-Consider trying a sample script demonstrating the usage of 
-\ref tui_use_existing_faces "Use Faces to be Created Manually"
-algorithm for construction of a 2D mesh using Python commands.
-
-\image html use_existing_face_sample_mesh.png
-<em> Mesh computed by \ref tui_use_existing_faces "the sample script"
-  shown in a Shrink mode.</em>
-  
-*/
diff --git a/doc/salome/gui/SMESH/input/define_mesh_by_script.rst b/doc/salome/gui/SMESH/input/define_mesh_by_script.rst
new file mode 100644 (file)
index 0000000..9238777
--- /dev/null
@@ -0,0 +1,26 @@
+.. _use_existing_page:
+
+**************************************
+Use Edges/Faces to be Created Manually
+**************************************
+
+The algorithms **Use Edges to be Created Manually** and **Use Faces to be Created Manually** allow  creating a 1D or a 2D mesh in a python script (using *AddNode, AddEdge* and *AddFace* commands) and then using such sub-meshes in the construction of a 2D or a 3D mesh. 
+
+For example, you want to use standard algorithms to generate 1D and 3D
+meshes and to create 2D mesh by your python code. For this, you
+
+#. create a mesh object, assign a 1D algorithm,
+#. invoke **Compute** command, which computes a 1D mesh,
+#. assign **Use Faces to be Created Manually** and a 3D algorithm,
+#. run your python code, which creates a 2D mesh,
+#. invoke **Compute** command, which computes a 3D mesh.
+
+.. warning:: **Use Edges to be Created Manually** and **Use Faces to be Created Manually** algorithms should be assigned *before* mesh generation by the Python code.
+
+Consider trying a sample script demonstrating the usage of :ref:`Use Faces to be Created Manually <tui_use_existing_faces>` algorithm for construction of a 2D mesh using Python commands.
+
+.. figure:: ../images/use_existing_face_sample_mesh.png
+   :align: center
+
+**See also** :ref:`the sample script <tui_use_existing_faces>` creating the mesh shown in the image in a Shrink mode.
+  
diff --git a/doc/salome/gui/SMESH/input/deflection_2d.doc b/doc/salome/gui/SMESH/input/deflection_2d.doc
deleted file mode 100644 (file)
index a9d38cd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*!
-
-\page deflection_2d_page Deflection 2D
-
-\n This quality control criterion consists of calculation of distance
-between a mesh face gravity corner and the surface the face discretizes.
-
-<em>To apply the Deflection 2D quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer. </li>
-
-<li>Choose <b>Controls > Face Controls > Deflection 2D</b> or click
-<em>"Deflection 2D"</em> button in the toolbar. 
-
-Your mesh will be displayed in the viewer with faces colored according
-to the applied mesh quality control criterion:
-
-\image html deflection_2d.png
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_deflection_2d "Deflection 2D quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/deleting_groups.doc b/doc/salome/gui/SMESH/input/deleting_groups.doc
deleted file mode 100644 (file)
index 521b552..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
-
-\page deleting_groups_page Deleting groups with content
-
-To delete groups and their content, in the menu select
-<b>Modification -> Remove -> Delete groups with Contents</b>
-and select one or several groups you wish to delete in the 3D viewer
-or in the Object Browser.
-
-The selected groups will be listed in <b>Delete groups with contents</b> menu. 
-Then click <b>Apply and Close</b> button to remove the selected groups
-and close the menu or \b Apply button to remove them and proceed with
-the selection.
-
-\image html deletegroups.png
-
-\n Please, note that this operation removes groups <b>with their
-  elements</b>. To delete a group and leave its elements intact, right-click
-on the group in the Object Browser and select \b Delete in the pop-up
-menu or select the group and choose <b>Edit -> Delete</b> in the main menu.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/deleting_groups.rst b/doc/salome/gui/SMESH/input/deleting_groups.rst
new file mode 100644 (file)
index 0000000..8b2038c
--- /dev/null
@@ -0,0 +1,17 @@
+.. _deleting_groups_page:
+
+****************************
+Deleting groups with content
+****************************
+
+To delete groups and their content, in the menu select **Modification -> Remove -> Delete groups with Contents** and select one or several groups you wish to delete in the 3D viewer or in the Object Browser.
+
+The selected groups will be listed in **Delete groups with contents** menu. 
+Then click **Apply and Close** button to remove the selected groups and close the menu or **Apply** button to remove them and proceed with the selection.
+
+       .. image:: ../images/deletegroups.png
+               :align: center
+
+.. note:: This operation removes groups **with their elements**. To delete a group and leave its elements intact, right-click on the group in the Object Browser and select **Delete** in the pop-up menu or select the group and choose **Edit -> Delete** in the main menu.
+
+
diff --git a/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc b/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc
deleted file mode 100644 (file)
index c97663d..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-
-\page diagonal_inversion_of_elements_page Diagonal inversion of two triangles
-
-\n In MESH you can inverse the diagonal (edge) of a pseudo-quadrangle
-formed by two neighboring triangles with one common edge.
-
-<em>To inverse the diagonal:</em>
-<ol>
-<li>From the \b Modification menu choose the <b>Diagonal inversion</b> item or
-click <em>"Diagonal Inversion"</em> button in the toolbar.
-
-\image html image70.png
-<center><em>"Diagonal Inversion" button</em></center>
-
-The following dialog box shall appear:
-
-\image html diagonalinversion.png
-</li>
-<li>Enter IDs of nodes forming the required edge in the \b Edge field
-(the node IDs must be separated by dashes) or select
-this edge in the 3D viewer.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
-</ol>
-
-\image html image38.jpg "The selected edge"
-
-\image html image36.jpg "The inverted edge"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_diagonal_inversion "Diagonal Inversion of Elements" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst b/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst
new file mode 100644 (file)
index 0000000..71302bb
--- /dev/null
@@ -0,0 +1,38 @@
+.. _diagonal_inversion_of_elements_page:
+
+***********************************
+Diagonal inversion of two triangles
+***********************************
+
+In MESH you can inverse the diagonal (edge) of a pseudo-quadrangle
+formed by two neighboring triangles with one common edge.
+
+*To inverse the diagonal:*
+
+#. From the **Modification** menu choose the **Diagonal inversion** item or click *"Diagonal Inversion"* |img| button in the toolbar.
+
+.. |img| image:: ../images/image70.png
+
+The following dialog box shall appear:
+
+       .. image:: ../images/diagonalinversion.png
+                 :align: center
+
+#. Enter IDs of nodes forming the required edge in the **Edge** field (the node IDs must be separated by dashes) or select this edge in the 3D viewer.
+#. Click the **Apply** or **Apply and Close** button.
+
+       .. image:: ../images/image38.jpg 
+                 :align: center
+
+       .. centered::
+               The selected edge
+
+       .. image:: ../images/image36.jpg 
+                 :align: center
+
+       .. centered::
+               The inverted edge
+
+**See Also** a sample TUI Script of a :ref:`tui_diagonal_inversion` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/display_entity.doc b/doc/salome/gui/SMESH/input/display_entity.doc
deleted file mode 100644 (file)
index 13b11c3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*!
-
-\page display_entity_page Display Entity
-
-\n In this submenu you can choose to display only volumes, faces or
-edges or combine them.
-
-\image html image56.jpg Only Faces
-
-\image html image58.png Only Edges
-
-\image html image59.png Edges + Faces
-
-If the mesh contains a lot of elements, select <b>Choose...</b> item, 
-
-\image html display_entity_choose_item.png Item to call 'Display Entity' dialog box
-
-and <b>Display Entity</b> dialog box will provide a way to display only some entities at the first display instead of displaying all entities, which can take a long time.
-
-\image html display_entity_dlg.png 'Display Entity' dialog allows to select entities before displaying
-
-\note This menu item is available from the context menu in both Object browser and 3D viewer.
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/display_entity.rst b/doc/salome/gui/SMESH/input/display_entity.rst
new file mode 100644 (file)
index 0000000..09eb03a
--- /dev/null
@@ -0,0 +1,43 @@
+.. _display_entity_page:
+
+**************
+Display Entity
+**************
+
+In this submenu you can choose to display only volumes, faces or edges or combine them.
+
+.. image:: ../images/image56.jpg 
+       :align: center
+
+.. centered::
+       Only Faces
+
+.. image:: ../images/image58.png 
+       :align: center
+
+.. centered::
+       Only Edges
+
+.. image:: ../images/image59.png 
+       :align: center
+
+.. centered::
+       Edges + Faces
+
+If the mesh contains a lot of elements, select **Choose...** item, 
+
+.. image:: ../images/display_entity_choose_item.png 
+       :align: center
+
+.. centered::
+       Item to call 'Display Entity' dialog box
+
+and **Display Entity** dialog box will provide a way to display only some entities at the first display instead of displaying all entities, which can take a long time.
+
+.. image:: ../images/display_entity_dlg.png
+       :align: center
+
+.. centered::
+        'Display Entity' dialog allows to select entities before displaying
+
+This menu item is available from the context menu in both Object browser and 3D viewer.
diff --git a/doc/salome/gui/SMESH/input/display_mode.doc b/doc/salome/gui/SMESH/input/display_mode.doc
deleted file mode 100644 (file)
index adcd376..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*!
-
-\page display_mode_page Display Mode
-
-\n By default your objects are represented as defined in
-\ref mesh_tab_preferences "Preferences".
-\n However, right-clicking on the mesh in the <b>Object Browser</b>,
-and selecting <b>Display Mode</b>, you can display your mesh as:
-
-\image html image53.gif Wireframe
-
-\image html image37.jpg Shading
-
-\image html image56.gif Nodes
-
-\b Wireframe can combine with \b Nodes and \b Shading.
-
-\b Shading and \b Wireframe modes can combine with \b Shrink, however
-\b Nodes can't.
-
-\image html image55.gif Shrink
-
-*/
diff --git a/doc/salome/gui/SMESH/input/display_mode.rst b/doc/salome/gui/SMESH/input/display_mode.rst
new file mode 100644 (file)
index 0000000..8414ebf
--- /dev/null
@@ -0,0 +1,41 @@
+.. _display_mode_page:
+
+************
+Display Mode
+************
+
+By default your objects are represented as defined in :ref:`mesh_tab_preferences`.
+However, right-clicking on the mesh in the **Object Browser**, and selecting **Display Mode**, you can display your mesh as:
+
+.. image:: ../images/image53.gif 
+       :align: center
+
+
+.. centered::
+       Wireframe
+
+.. image:: ../images/image37.jpg 
+       :align: center
+
+
+.. centered::
+       Shading
+
+.. image:: ../images/image56.gif 
+  :align: center
+
+
+.. centered::
+       Nodes
+
+**Wireframe** can combine with **Nodes** and **Shading**.
+
+**Shading** and **Wireframe** modes can combine with **Shrink**, however **Nodes** can't.
+
+.. image:: ../images/image55.gif 
+  :align: center
+
+
+.. centered::
+       Shrink
+
diff --git a/doc/salome/gui/SMESH/input/double_elements_control.doc b/doc/salome/gui/SMESH/input/double_elements_control.doc
deleted file mode 100644 (file)
index 63ee0e7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
-
-\page double_elements_page Double edge, Double faces and Double volumes
-
-These mesh quality controls highlight the mesh elements basing on the same set of nodes.
-
-\image html double_faces.png
-
-In this picture some faces are coincident after copying all elements
-with translation with subsequent Merge of nodes.
-
-\sa A sample TUI Script of a \ref filter_double_elements "Filters of Double Elements".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/double_elements_control.rst b/doc/salome/gui/SMESH/input/double_elements_control.rst
new file mode 100644 (file)
index 0000000..1286bcc
--- /dev/null
@@ -0,0 +1,14 @@
+.. _double_elements_page: 
+
+********************************************
+Double edge, Double faces and Double volumes
+********************************************
+
+These mesh quality controls highlight the mesh elements basing on the same set of nodes.
+
+.. image:: ../images/double_faces.png
+       :align: center
+
+In this picture some faces are coincident after copying all elements with translation with subsequent Merge of nodes.
+
+**See also** a sample TUI Script of a :ref:`filter_double_elements` filters.
diff --git a/doc/salome/gui/SMESH/input/double_nodes_control.doc b/doc/salome/gui/SMESH/input/double_nodes_control.doc
deleted file mode 100644 (file)
index 10fd49a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-
-\page double_nodes_control_page Double nodes
-
-This mesh quality control highlights the nodes which are coincident
-with other nodes (within a given tolerance). Distance at which two
-nodes are considered coincident is defined by 
-\ref dbl_nodes_tol_pref "Quality Controls/Double nodes tolerance"
-preference.
-
-\image html double_nodes.png
-
-In this picture some nodes are coincident after copying all elements with translation.
-
-\sa A sample TUI Script of a \ref tui_double_nodes_control "Double Nodes" filter.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/double_nodes_control.rst b/doc/salome/gui/SMESH/input/double_nodes_control.rst
new file mode 100644 (file)
index 0000000..816f29d
--- /dev/null
@@ -0,0 +1,15 @@
+.. _double_nodes_control_page:
+
+************
+Double nodes
+************
+
+This mesh quality control highlights the nodes which are coincident with other nodes (within a given tolerance). Distance at which two nodes are considered coincident is defined by :ref:`Quality Controls/Double nodes tolerance <dbl_nodes_tol_pref>` preference.
+
+.. image:: ../images/double_nodes.png
+       :align: center
+
+.. centered::
+   Some nodes are coincident after copying all elements with translation.
+
+**See also**: A sample TUI Script of a :ref:`tui_double_nodes_control` filter.
diff --git a/doc/salome/gui/SMESH/input/double_nodes_page.doc b/doc/salome/gui/SMESH/input/double_nodes_page.doc
deleted file mode 100644 (file)
index 1d5a5dd..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*!
-
-\page double_nodes_page Duplicate Nodes or/and Elements
-
-\n This operation allows duplicating mesh nodes or/and elements, which can be useful to emulate a crack in the model.
-
-Duplication consists in creation of mesh elements "equal" to existing ones.
-
-<em>To duplicate nodes or/and elements:</em>
-<ol>
-<li>From the \b Modification menu choose \b Transformation -> <b> Duplicate
- Nodes or/and Elements </b> item or click <em>"Duplicate Nodes or/and
- Elements"</em> button in the toolbar.
-<br>
-\image html duplicate_nodes.png "Duplicate Nodes or/and Elements button"
-</li>
-<li>Check in the dialog box one of four radio buttons corresponding to
-  the type of duplication operation you would like to perform.</li>
-<li>Fill the other fields available in the dialog box (depending on
-  the chosen operation mode).</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to perform the
-  operation of duplication.</li> 
-</ol>
-
-\n "Duplicate Nodes or/and Elements" dialog has four working modes:
-<ul>
-<li>\ref mode_without_elem_anchor "Duplicate nodes only"</li>
-<li>\ref mode_with_elem_anchor "Duplicate nodes and border elements"</li>
-<li>\ref mode_elem_only_anchor "Duplicate elements only"</li>
-<li>\ref mode_group_boundary_anchor "Duplicate nodes on group boundaries"</li>
-</ul>
-
-<br>
-\anchor mode_without_elem_anchor
-
-<h2>Duplicate nodes only</h2>
-
-\image html duplicate01.png
-
-Parameters to be defined in this mode:
-<ul>
-<li><b>Group of nodes to duplicate</b> (<em>mandatory</em>): these
-  nodes will be duplicated.</li>
-<li><b>Group of elements to replace nodes with new ones</b>
-  (<em>optional</em>): the new nodes will replace the duplicated nodes
-  within these elements. \b Generate button automatically creates
-  these groups.
-</li> 
-<li><b>Construct group with newly created nodes</b> option
-  (<em>checked by default</em>): if checked - the group with newly
-  created nodes will be built.</li> 
-</ul>
-A schema below illustrates how the crack is emulated using the node duplication.
-\image html crack_emulation_double_nodes.png "Crack emulation"
-This schema shows a virtual crack in a 2D mesh created using this duplication
-mode:
-- Black balls are <b>duplicated nodes</b>.
-- Red balls are <b>new nodes</b>.
-- <b>Elements to replace nodes with new ones</b> are marked with green.
-
-Note that in the reality <b>duplicated nodes</b> coincide with <b>new nodes</b>.
-
-<br>
-\anchor mode_with_elem_anchor
-
-
-<h2>Duplicate nodes and border elements</h2>
-
-\image html duplicate02.png
-
-Parameters to be defined in this mode:
-<ul>
-<li><b>Group of elements to duplicate</b> (<em>mandatory</em>): these
-  elements will be duplicated.</li> 
-<li><b>Group of nodes not to duplicate</b> (<em>optional</em>):
-  group of nodes at crack bottom which will not be duplicated.</li>
-<li><b>Group of elements to replace nodes with new ones</b>
-  (<em>mandatory</em>): the new nodes will replace the nodes to
-  duplicate within these elements. \b Generate button automatically
-  creates these groups.</li>
-<li><b>Construct group with newly created elements</b> option
- (<em>checked by default</em>): if checked - the group of newly created
- elements will be built.</li>
-<li><b>Construct group with newly created nodes</b> option
-  (<em>checked by default</em>): if checked - the group of newly
-  created nodes will be built.</li>
-</ul>
-
-A schema below explains the crack emulation using the node duplication
-with border elements.
-\image html crack_emulation_double_nodes_with_elems.png "Crack emulation"
-This schema shows a virtual crack in a 2D mesh created using this duplication
-mode. In this schema:
-- Black segments are <b>duplicated elements</b> (edges in 2D case).
-- Black balls (except for the lowest one) are duplicated nodes of <b>duplicated elements</b>.
-- The lowest black ball is the <b>non-duplicated node</b>.
-- Red balls are <b>newly created nodes</b>.
-- Red segments are <b>created elements</b> (edges).
-- <b>Elements to replace nodes with new ones</b> are marked with green.
-
-Note that in the reality <b>nodes to duplicate</b> coincide with <b>new nodes</b>.
-<br>
-In a 3D case, where <b>elements to duplicate</b> are faces, the edges
-located at the "crack" (if any) are cloned automatically.
-
-<br>
-\anchor mode_elem_only_anchor
-<h2>Duplicate elements only</h2>
-
-This mode duplicates the given elements, i.e. creates new elements with the same nodes as the given elements.
-<br>
-
-\image html duplicate03.png
-
-Parameters to be defined in this mode:
-<ul>
-  <li><b>Group of elements to duplicate</b> (<em>mandatory</em>): these
-    elements will be duplicated.</li>
-  <li><b>Construct group with newly created elements</b> option
-    (<em>checked by default</em>): if checked - the group of newly created
-    elements will be built. The name of the created group starts from
-    "DoubleElements".</li>
-</ul>
-
-<br>
-\anchor mode_group_boundary_anchor
-<h2>Duplicate nodes on group boundaries</h2>
-
-This mode duplicates nodes located on boundaries between given groups of volumes.
-
-<br>
-
-\image html duplicate04.png
-
-Parameters to be defined in this mode:
-<ul>
-  <li><b>Groups (faces or volumes) </b> (<em>mandatory</em>): list of mesh
-    groups. These groups should be disjoint, i.e. should not have shared
-    elements.</li>
-  <li> If <b>Create joint elements</b> option is activated, flat
-    elements are created on the duplicated nodes: a triangular facet
-    shared by two volumes of two groups generates a flat prism, a
-    quadrangular facet generates a flat hexahedron. 
-    Correspondingly 2D joint elements (null area faces) are generated
-    where edges are shared by two faces.
-    <br>
-    The created flat volumes (or faces) are stored in groups. These groups are named
-    according to the position of the group in the list of groups: group
-    "j_n_p" is a group of flat elements that are built between the group \#n
-    and the group \#p in the group list. All flat elements are gathered
-    into the group named "joints3D" (correspondingly "joints2D"). The flat elements of multiple
-    junctions between the simple junction are stored in a group named
-    "jointsMultiples".</li>
-  <li> If <b>On all boundaries</b> option is activated, the volumes (or faces),
-    which are not included into <b>Groups</b> input, are considered
-    as another group and thus the nodes on the boundary
-    between <b>Groups</b> and the remaining mesh are also
-    duplicated.</li>
-</ul>
-
-<br><b>See Also</b> a sample TUI Script of a
- \ref tui_duplicate_nodes "Duplicate nodes or/and elements" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/double_nodes_page.rst b/doc/salome/gui/SMESH/input/double_nodes_page.rst
new file mode 100644 (file)
index 0000000..104efb1
--- /dev/null
@@ -0,0 +1,139 @@
+.. _double_nodes_page:
+
+*******************************
+Duplicate Nodes or/and Elements
+*******************************
+
+This operation allows duplicating mesh nodes or/and elements, which can be useful to emulate a crack in the model.
+
+Duplication consists in creation of mesh elements "equal" to existing ones.
+
+*To duplicate nodes or/and elements:*
+
+.. |img| image:: ../images/duplicate_nodes.png 
+
+#. From the **Modification** menu choose **Transformation** -> **Duplicate Nodes or/and Elements** item or click *"Duplicate Nodes or/and Elements"* button |img| in the toolbar.
+#. Check in the dialog box one of four radio buttons corresponding to the type of duplication operation you would like to perform.
+#. Fill the other fields available in the dialog box (depending on the chosen operation mode).
+#. Click the **Apply** or **Apply and Close** button to perform the operation of duplication. 
+
+"Duplicate Nodes or/and Elements" dialog has four working modes:
+
+       * :ref:`mode_without_elem_anchor`
+       * :ref:`mode_with_elem_anchor`
+       * :ref:`mode_elem_only_anchor`
+       * :ref:`mode_group_boundary_anchor`
+
+
+
+.. _mode_without_elem_anchor:
+
+Duplicate nodes only
+####################
+   
+       .. image:: ../images/duplicate01.png 
+               :align: center
+
+
+Parameters to be defined in this mode:
+
+       * **Group of nodes to duplicate** (*mandatory*): these nodes will be duplicated.
+       * **Group of elements to replace nodes with new ones** (*optional*): the new nodes will replace the duplicated nodes within these elements. **Generate** button tries to automatically find such elements and creates a group of them. This button becomes active as soon as **Group of nodes to duplicate** is selected.
+       * **Construct group with newly created nodes** option (*checked by default*): if checked - the group with newly created nodes will be built. 
+
+A schema below illustrates how the crack is emulated using the node duplication.
+    
+.. image:: ../images/crack_emulation_double_nodes.png 
+       :align: center
+
+.. centered::
+       Crack emulation
+
+
+This schema shows a virtual crack in a 2D mesh created using this duplication mode:
+       * Black balls are **duplicated nodes**.
+       * Red balls are **new nodes**.
+       * **Elements to replace nodes with new ones** are marked with green.
+       
+.. note::
+       Note that in the reality **duplicated nodes** coincide with **new nodes**.
+
+
+.. _mode_with_elem_anchor:
+
+Duplicate nodes and border elements
+###################################
+
+.. image:: ../images/duplicate02.png 
+       :align: center
+
+Parameters to be defined in this mode:
+
+       * **Group of elements to duplicate** (*mandatory*): these elements will be duplicated. 
+       * **Group of nodes not to duplicate** (*optional*): group of nodes at crack bottom which will not be duplicated.
+       * **Group of elements to replace nodes with new ones** (*mandatory*): the new nodes will replace the nodes to duplicate within these elements. **Generate** button tries to automatically find such elements and creates a group of them. This button becomes active as soon as **Group of elements to duplicate** is selected.
+       * **Construct group with newly created elements** option (*checked by default*): if checked - the group of newly created elements will be built.
+       * **Construct group with newly created nodes** option (*checked by default*): if checked - the group of newly created nodes will be built.
+
+
+A schema below explains the crack emulation using the node duplication with border elements.
+
+       .. image:: ../images/crack_emulation_double_nodes_with_elems.png 
+               :align: center
+
+       .. centered::  
+               Crack emulation
+
+This schema shows a virtual crack in a 2D mesh created using this duplication mode. In this schema:
+
+* Black segments are **duplicated elements** (edges in 2D case).
+* Black balls (except for the lowest one) are duplicated nodes of **duplicated elements**.
+* The lowest black ball is the **non-duplicated node**.
+* Red balls are **newly created nodes**.
+* Red segments are **created elements** (edges).
+* **Elements to replace nodes with new ones** are marked with green.
+
+Note that in the reality **nodes to duplicate** coincide with **new nodes**.
+
+In a 3D case, where **elements to duplicate** are faces, the edges
+located at the "crack" (if any) are cloned automatically.
+
+
+.. _mode_elem_only_anchor:
+
+Duplicate elements only
+#######################
+
+This mode duplicates the given elements, i.e. creates new elements with the same nodes as the given elements.
+
+
+.. image:: ../images/duplicate03.png
+       :align: center
+
+Parameters to be defined in this mode:
+
+       * **Group of elements to duplicate** (*mandatory*): these elements will be duplicated.
+       * **Construct group with newly created elements** option (*checked by default*): if checked - the group of newly created elements will be built. The name of the created group starts from "DoubleElements".
+
+
+.. _mode_group_boundary_anchor:
+
+Duplicate nodes on group boundaries
+###################################
+
+This mode duplicates nodes located on boundaries between given groups of volumes.
+
+
+.. image:: ../images/duplicate04.png
+       :align: center
+
+Parameters to be defined in this mode:
+
+       * **Groups (faces or volumes)** (*mandatory*): list of mesh groups. These groups should be disjoint, i.e. should not have shared elements.
+       * If **Create joint elements** option is activated, flat elements are created on the duplicated nodes: a triangular facet shared by two volumes of two groups generates a flat prism, a quadrangular facet generates a flat hexahedron. Correspondingly 2D joint elements (null area faces) are generated where edges are shared by two faces. The created flat volumes (or faces) are stored in groups. These groups are named according to the position of the group in the list of groups: group "j_n_p" is a group of flat elements that are built between the group \#n and the group \#p in the group list. All flat elements are gathered into the group named "joints3D" (correspondingly "joints2D"). The flat elements of multiple junctions between the simple junction are stored in a group named "jointsMultiples".
+       * If **On all boundaries** option is activated, the volumes (or faces), which are not included into **Groups** input, are considered as another group and thus the nodes on the boundary between **Groups** and the remaining mesh are also duplicated.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_duplicate_nodes` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/editing_groups.doc b/doc/salome/gui/SMESH/input/editing_groups.doc
deleted file mode 100644 (file)
index a880b1c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-
-\page editing_groups_page Editing groups
-
-<em>To edit an existing group of elements:</em>
-<ol>
-<li>Select your group in the Object Browser and in the \b Mesh menu click
-the <b>Edit Group</b> item or <em>"Edit Group"</em> button in the toolbar.</li>
-
-\image html image74.gif
-<center><em>"Edit Group" button</em></center>
-
-The following dialog box will appear (if the selected group
-is <em>standalone</em>, else this dialog looks different):
-
-\image html editgroup.png
-
-In this dialog box you can modify the name and the color of your group
-despite of its type. You can add or remove the elements composing a
-<em>standalone group</em>. You can change criteria of the filter of
-a <em>group on filter</em>. For more information see
-\ref creating_groups_page "Creating Groups" page.
-
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm
-modification of the group.</li>
-</ol>
-
-<br>
-\anchor convert_to_standalone
-<em>To convert an existing group on geometry or a group on filer into
-a standalone group and modify its contents:</em>
-<ol>
-<li>Select your group on geometry or on filter in the
-Object Browser and in the \b Mesh menu click the <b>Edit Group as
-Standalone</b> item.</li>
-
-\image html image74.gif
-<center><em>"Edit Group as Standalone" button</em></center>
-
-The selected group will be converted into a standalone group and
-its contents can be modified.
-
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm modification of the
-group.</li>
-</ol>
-
-\sa A sample TUI Script of an \ref tui_edit_group "Edit Group" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/editing_groups.rst b/doc/salome/gui/SMESH/input/editing_groups.rst
new file mode 100644 (file)
index 0000000..b00f956
--- /dev/null
@@ -0,0 +1,44 @@
+.. _editing_groups_page:
+
+**************
+Editing groups
+**************
+
+*To edit an existing group of elements:*
+
+.. |img| image:: ../images/image74.gif
+
+#. Select your group in the Object Browser and in the **Mesh** menu click the **Edit Group** item or *"Edit Group"* button |img| in the toolbar.
+
+
+
+   The following dialog box will appear (if the selected group is **standalone**, else this dialog looks different):
+
+       .. image:: ../images/editgroup.png
+               :align: center
+
+   In this dialog box you can modify the name and the color of your group despite of its type. You can add or remove the elements composing a **standalone group**. You can change criteria of the filter of a **group on filter**. For more information see :ref:`creating_groups_page` page.
+
+#. Click the **Apply** or **Apply and Close** button to confirm modification of the group.
+
+
+.. _convert_to_standalone:
+
+Convert to stanalone group
+==========================
+
+*To convert an existing group on geometry or a group on filer into a standalone group and modify its contents:*
+
+.. |edit| image:: ../images/image74.gif
+
+#. Select your group on geometry or on filter in the Object Browser and in the **Mesh** menu click the **Edit Group as Standalone** item |edit|.
+
+
+
+   The selected group will be converted into a standalone group and its contents can be modified.
+
+#. Click the **Apply** or **Apply and Close** button to confirm modification of the group.
+
+**See also:** A sample TUI Script of an :ref:`tui_edit_group` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/editing_meshes.doc b/doc/salome/gui/SMESH/input/editing_meshes.doc
deleted file mode 100644 (file)
index a4602e6..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-
-\page editing_meshes_page Editing Meshes
-
-\n After you have created a mesh or sub-mesh with definite applied
-meshing algorithms and hypotheses you can edit your mesh by \b assigning other
-algorithms and/or hypotheses or \b unassigning the applied hypotheses and
-algorithms. The editing proceeds in the same way as 
-\ref create_mesh_anchor "Mesh Creation".
-
-\image html createmesh-inv3.png
-
-You can also change values for the current hypothesis by clicking the
-<em>"Edit Hypothesis"</em> button.
-
-\image html image122.png
-<center><em>"Edit Hypothesis" button</em></center>
-
-Mesh entities generated before using changed hypotheses are automatically removed.
-
-See how the mesh constructed on a geometrical object
-changes if we apply different meshing parameters to it.
-
-\image html edit_mesh1.png "Example of a mesh with Max. Element area 2D hypothesis roughly corresponding to 1D hypotheses on edges"
-<br>
-
-\image html edit_mesh_change_value_hyp.png "And now the Max Element area is greatly reduced"
-
-<br><b>See Also</b> a sample TUI Script of an 
-\ref tui_editing_mesh "Edit Mesh" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/editing_meshes.rst b/doc/salome/gui/SMESH/input/editing_meshes.rst
new file mode 100644 (file)
index 0000000..09f63fb
--- /dev/null
@@ -0,0 +1,38 @@
+.. _editing_meshes_page:
+
+**************
+Editing Meshes
+**************
+
+After you have created a mesh or sub-mesh with definite applied meshing algorithms and hypotheses you can edit your mesh by **assigning** other algorithms and/or hypotheses or **unassigning** the applied hypotheses and algorithms. The editing proceeds in the same way as 
+:ref:`Mesh Creation <create_mesh_anchor>`.
+
+.. image:: ../images/createmesh-inv3.png
+       :align: center
+
+.. |img| image:: ../images/image122.png
+
+You can also change values for the current hypothesis by clicking the
+*"Edit Hypothesis"* |img| button.
+
+Mesh entities generated before using changed hypotheses are automatically removed.
+
+See how the mesh constructed on a geometrical object
+changes if we apply different meshing parameters to it.
+
+.. image:: ../images/edit_mesh1.png
+       :align: center
+
+.. centered::
+        Example of a mesh with Max. Element area 2D hypothesis roughly corresponding to 1D hypotheses on edges
+
+
+.. image:: ../images/edit_mesh_change_value_hyp.png
+       :align: center
+
+.. centered::
+       And now the Max Element area is greatly reduced
+
+**See Also** a sample TUI Script of an :ref:`Edit Mesh <tui_editing_mesh>` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/extrusion.doc b/doc/salome/gui/SMESH/input/extrusion.doc
deleted file mode 100644 (file)
index 96da45d..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*!
-
-\page extrusion_page Extrusion
-
-\n Extrusion is used to build mesh elements of plus one
-dimension than the input ones. Boundary elements around generated
-mesh of plus one dimension are additionally created. All created
-elements can be automatically grouped. Extrusion can be used to create
-a \ref extrusion_struct "structured mesh from scratch".
-
-\image html extrusion_box.png "If you extrude several quadrangles, you get exactly the same mesh as if you meshed a geometrical box (except for that the initial quadrangles can be incorrectly oriented): quadrangles and segments are created on the boundary of the generated mesh"
-
-<p>Any node, segment or 2D element can be extruded. Each type of
-elements is extruded into a corresponding type of result elements:
-<table>
-<tr><td><b>Extruded element</b></td><td><b> Result element </b></td></tr>
-<tr><td>Node              </td><td> Segment </td></tr>
-<tr><td>Segment           </td><td> Quadrilateral </td></tr>
-<tr><td>Triangle          </td><td> Pentahedron </td></tr>
-<tr><td>Quadrilateral     </td><td> Hexahedron </td></tr>
-<tr><td>Polygon           </td><td> Polyhedron </td></tr>
-<tr><td>Hexagonal polygon </td><td> Hexagonal prism </td></tr>
-</table>
-
-When 2D elements are extruded, in addition to 3D elements segments are
-created on the ribs of the resulting 3D mesh. Free edges of input 2D elements
-generate logically horizontal rib segments. Logically vertical rib
-segments are generated from the nodes belonging to a sole input 2D element
-(the figure below illustrates this rule).
-
-\image html extru_rib_segs.png "Two triangles extruded: no vertical rib segments generated from nodes #2 and #3 as they are shared by both triangles"
-
-<em>To use extrusion:</em>
-<ol>
-<li>From the \b Modification menu choose the \b Extrusion item or click
-<em>"Extrusion"</em> button in the toolbar. 
-
-<center>
-\image html image91.png
-<em>"Extrusion" button</em>
-</center>
-
-The following dialog will appear:
-
-\image html extrusionalongaline1.png
-
-</li>
-
-<li>In this dialog:
-<ul>
-  <li>Use \a Selection button to specify what you are going to
-    select at a given moment, \b Nodes, \b Edges or \b Faces.
-    \image html image120.png
-    <center><em>"Selection" button</em></center>
-  </li>
-  <li>Specify \b Nodes, \b Edges and \b Faces, which will be extruded, by one
-    of following means:
-    <ul>
-      <li><b>Select the whole mesh, sub-mesh or group</b> activating the
-        corresponding check-box.</li>
-      <li>Choose mesh elements with the mouse in the 3D Viewer. It is
-        possible to select a whole area with a mouse frame.</li> 
-      <li>Input the element IDs directly in <b>Node IDs</b>, <b>Edge
-        IDs</b> and <b>Face IDs</b> fields. The selected elements will
-        be highlighted in the viewer, if the mesh is shown there.</li> 
-      <li>Apply Filters. <b>Set filter</b> button allows to apply a
-        filter to the selection of elements. See more about filters in
-        the \ref filtering_elements "Selection filters" page.</li> 
-    </ul>
-  </li>
-
-  <li>If the <b>Extrusion to Distance</b> radio button is selected
-    <ul>
-      <li> specify the translation vector by which the elements will
-      be extruded.</li>
-    </ul>
-  </li>
-
- <li>If the <b>Extrusion Along Vector</b> radio button is selected
-\image html extrusionalongaline2.png  
-    <ul>
-      <li>specify the components of the \b Vector along which the elements
-        will be extruded, either directly or by selecting the mesh face (the
-        normal to the face will define the vector),</li>
-      <li>specify the \b Distance of extrusion along the vector (it can
-        be negative).</li>
-    </ul>
-  </li>
-
-  <li>If the <b>Extrusion By Normal</b> radio button is selected,
-    every node of the selected faces is extruded along the \a average
-    of the \a normal vectors to the faces sharing the node. (Nodes and
-    edges cannot be extruded in this mode.)
-\image html extrusionalongaline3.png 
-    <ul>
-      <li>Specify the \b Distance of extrusion (it can be negative),</li>
-      <li>Use <b>Along average normal</b> check-box to specify along
-        which vector the distance is measured.
-        <ul>
-          <li>If it is \a activated the distance is measured along the
-            average normal mentioned above. </li>
-          <li>If it is \a deactivated every node is extruded along the
-            average normal till its intersection with a virtual plane obtained
-            by translation of the face sharing the node along its own normal
-            by the \b Distance.</li>
-        </ul>
-        The picture below shows a cross-section of a 2D mesh extruded
-        with <b>Along average normal</b> activated (to the left) and
-        deactivated (to the right). 
-
-        \image html extrusionbynormal_alongavgnorm.png "'Along average normal' activated (to the left) and deactivated (to the right)"
-        <p></li>
-
-      <li><b>Use only input elements</b> check-box specifies what
-        elements will be used to compute the average normal.<ul>
-          <li> If it is \a activated only selected faces, among faces
-            sharing the node, are used to compute the average normal at
-            the node. </li>
-          <li>Else all faces sharing the node are used.</li></ul>
-
-        The picture below shows a cross-section of a 2D mesh the upper
-        plane of which is extruded with <b>Use only input elements</b>
-        activated (to the left) and deactivated (to the right). 
-
-        \image html extrusionbynormal_useonly.png "'Use only input elements' activated (to the left) and deactivated (to the right)"
-        <p></li>
-  </li>
-  </ul>
-
-  <li>Specify the <b>Number of steps</b>.</li>
-
-  <li>Optionally specify <b>Scale Factors</b>. Each scale factor in
-  the list is applied to nodes of a corresponding extrusion step
-  unless <b>Linear Variation of Scale Factors</b> is checked, is
-  which case the scale factors are spread over all extrusion steps.</li>
-  <ul>
-    <li><b>Scaling Center</b> can be defined either using spin boxes
-    or by picking a node in the Viewer or by picking a geometrical
-    vertex in the Object Browser.</li>
-    <li>\b Add button adds a scale factor to the list.
-      \image html add.png
-      <center><em>"Add" button</em></center>
-    </li>
-    <li>\b Remove button removes selected scale factors from the list.
-      \image html remove.png
-      <center><em>"Remove" button</em></center>
-    </li>
-  </ul>
-
-  <li>If you activate <b>Generate Groups</b> check-box, the <em>result elements</em>
-    created from <em>selected elements</em> contained in groups will be
-    included into new groups named by pattern "<old group
-    name>_extruded" and "<old group name>_top". For example if a
-    selected quadrangle is included in \a g_Faces group (see figures
-    below) then result hexahedra will be included in \a
-    g_Faces_extruded group and a quadrangle created at the "top" of
-    extruded mesh will be included in \a g_Faces_top group. <br> 
-\image html extrusion_groups.png
-\image html extrusion_groups_res.png
-    <p> This check-box is active only if there are some groups in the mesh.
-  </li>
-</ul>
-
-<li>Click \b Apply or <b> Apply and Close</b>  button to confirm the operation.</li>
-</ol>
-<p>
-
-\anchor extrusion_struct
-<h2>Example: creation of a structured mesh from scratch</h2>
-
-\image html image75.jpg "A node is extruded into a line of segments"
-<br>
-\image html image76.jpg "The line of segments is extruded into a quadrangle mesh"
-<br>
-\image html image77.jpg "The quadrangle mesh is revolved into a hexahedral mesh"
-
-
-<br><b>See Also</b> a sample TUI Script of an 
-\ref tui_extrusion "Extrusion" operation. 
-
-*/
diff --git a/doc/salome/gui/SMESH/input/extrusion.rst b/doc/salome/gui/SMESH/input/extrusion.rst
new file mode 100644 (file)
index 0000000..023d900
--- /dev/null
@@ -0,0 +1,163 @@
+.. _extrusion_page:
+
+*********
+Extrusion
+*********
+
+Extrusion is used to build mesh elements of plus one dimension than the input ones. Boundary elements around generated mesh of plus one dimension are additionally created. All created elements can be automatically grouped. Extrusion can be used to create a :ref:`structured mesh from scratch <extrusion_struct>`.
+
+.. image:: ../images/extrusion_box.png
+       :align: center
+
+.. centered::
+       If you extrude several quadrangles, you get exactly the same mesh as if you meshed a geometrical box (except for that the initial quadrangles can be incorrectly oriented): quadrangles and segments are created on the boundary of the generated mesh
+
+Any node, segment or 2D element can be extruded. Each type of elements is extruded into a corresponding type of result elements:
+
++----------------------+--------------------+
+| **Extruded element** | **Result element** |
++======================+====================+
+|Node                  | Segment            |
++----------------------+--------------------+
+|Segment               | Quadrilateral      |
++----------------------+--------------------+
+|Triangle              | Pentahedron        |
++----------------------+--------------------+
+|Quadrilateral         | Hexahedron         |
++----------------------+--------------------+
+|Polygon               | Polyhedron         |
++----------------------+--------------------+
+|Hexagonal polygon     | Hexagonal prism    |
++----------------------+--------------------+
+
+
+When 2D elements are extruded, in addition to 3D elements segments are created on the ribs of the resulting 3D mesh. Free edges of input 2D elements generate logically horizontal rib segments. Logically vertical rib segments are generated from the nodes belonging to a sole input 2D element (the figure below illustrates this rule).
+
+.. image:: ../images/extru_rib_segs.png
+       :align: center
+
+.. centered::
+       Two triangles extruded: no vertical rib segments generated from nodes #2 and #3 as they are shared by both triangles
+
+
+*To use extrusion:*
+
+.. |img| image:: ../images/image91.png
+.. |sel_img| image:: ../images/image120.png
+
+#. From the **Modification** menu choose the **Extrusion** item or click *"Extrusion"* button |img| in the toolbar. 
+
+   The following dialog will appear:
+
+       .. image:: ../images/extrusionalongaline1.png
+               :align: center
+
+
+#. In this dialog:
+
+       * Use *Selection* button |sel_img| to specify what you are going to select at a given moment, **Nodes**, **Edges** or **Faces**.
+  
+       * Specify **Nodes**, **Edges** and **Faces**, which will be extruded, by one of following means:
+               * **Select the whole mesh, sub-mesh or group** activating the corresponding check-box.
+               * Choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame. 
+               * Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face IDs** fields. The selected elements will be highlighted in the viewer, if the mesh is shown there. 
+               * Apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`filtering_elements` page. 
+
+       * If the **Extrusion to Distance** radio button is selected 
+               * specify the translation vector by which the elements will be extruded.
+
+       * If the **Extrusion Along Vector** radio button is selected
+
+               .. image:: ../images/extrusionalongaline2.png  
+                       :align: center
+    
+               * specify the components of the **Vector** along which the elements will be extruded, either directly or by selecting the mesh face (the normal to the face will define the vector),
+               * specify the **Distance** of extrusion along the vector (it can be negative).
+    
+  
+
+       * If the **Extrusion By Normal** radio button is selected, every node of the selected faces is extruded along the *average* of the *normal* vectors to the faces sharing the node. (Nodes and edges cannot be extruded in this mode.)
+
+               .. image:: ../images/extrusionalongaline3.png 
+                       :align: center
+    
+               * Specify the **Distance** of extrusion (it can be negative),
+               * Use **Along average normal** check-box to specify along which vector the distance is measured.
+               * If it is *activated* the distance is measured along the average normal mentioned above. 
+               * If it is *deactivated* every node is extruded along the average normal till its intersection with a virtual plane obtained by translation of the face sharing the node along its own normal by the **Distance**.
+        
+               The picture below shows a cross-section of a 2D mesh extruded with **Along average normal** activated (to the left) and deactivated (to the right). 
+
+               .. image:: ../images/extrusionbynormal_alongavgnorm.png
+                       :align: center
+
+               .. centered::
+                       'Along average normal' activated (to the left) and deactivated (to the right)
+
+
+
+               * **Use only input elements** check-box specifies what elements will be used to compute the average normal.
+
+                  * If it is *activated* only selected faces, among faces sharing the node, are used to compute the average normal at the node. 
+                  * Else all faces sharing the node are used.
+
+                  The picture below shows a cross-section of a 2D mesh the upper plane of which is extruded with **Use only input elements** activated (to the left) and deactivated (to the right). 
+
+       .. image:: ../images/extrusionbynormal_useonly.png
+               :align: center
+
+       .. centered::
+               'Use only input elements' activated (to the left) and deactivated (to the right)
+  
+  
+        .. |add| image:: ../images/add.png
+        .. |rm| image:: ../images/remove.png
+
+
+       * Specify the **Number of steps**.
+       * Optionally specify **Scale Factors**. Each scale factor in the list is applied to nodes of a corresponding extrusion step unless **Linear Variation of Scale Factors** is checked, is which case the scale factors are spread over all extrusion steps.
+               * **Scaling Center** can be defined either using spin boxes or by picking a node in the Viewer or by picking a geometrical vertex in the Object Browser.
+               * **Add** button |add| adds a scale factor to the list.   
+               * **Remove** button |rm| removes selected scale factors from the list.
+
+       * If you activate **Generate Groups** check-box, the **result elements** created from **selected elements** contained in groups will be included into new groups named by pattern "<old group name>_extruded" and "<old group name>_top". For example if a selected quadrangle is included in *g_Faces* group (see figures below) then result hexahedra will be included in *g_Faces_extruded* group and a quadrangle created at the "top" of extruded mesh will be included in *g_Faces_top group*.  
+
+               .. image:: ../images/extrusion_groups.png
+                       :align: center
+
+               .. image:: ../images/extrusion_groups_res.png
+                       :align: center
+
+          This check-box is active only if there are some groups in the mesh.
+  
+
+
+#. Click **Apply** or **Apply and Close**  button to confirm the operation.
+
+.. _extrusion_struct:
+
+Example: creation of a structured mesh from scratch
+###################################################
+
+.. image:: ../images/image75.jpg
+       :align: center
+
+.. centered::
+       A node is extruded into a line of segments
+
+.. image:: ../images/image76.jpg
+       :align: center
+
+.. centered::
+       The line of segments is extruded into a quadrangle mesh
+
+.. image:: ../images/image77.jpg
+       :align: center
+
+.. centered::
+       The quadrangle mesh is revolved into a hexahedral mesh
+
+
+**See Also** a sample TUI Script of an :ref:`tui_extrusion` operation. 
+
+
diff --git a/doc/salome/gui/SMESH/input/extrusion_along_path.doc b/doc/salome/gui/SMESH/input/extrusion_along_path.doc
deleted file mode 100644 (file)
index ca78204..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*!
-
-\page extrusion_along_path_page Extrusion along Path
-
-\n In principle, <b>Extrusion along Path</b> works in the same way
-as \ref extrusion_page "Extrusion", the main difference is that we
-define not a vector, but a path of extrusion which must be an 1D mesh
-or 1D sub-mesh.
-To get an idea of how this algorithm works, examine several examples,
-starting from the most simple case of extrusion along a straight edge.
-In the examples the sample mesh will be extruded along different
-paths and with different parameters.
-This 2D mesh has two quadrangle faces and seven edges. Look
-at the picture, where white digits are the node numbers and green
-are the element numbers:
-
-\image html mesh_for_extr_along_path.png
-
-<br><center><h2>Extrusion along a straight edge</h2>(not using base point
-or angles)</center>
-
-\image html straight_before.png
-<center>The image shows a 1D path mesh, built on a linear edge, and the initial 2D mesh.</center>
-
-\image html straight_after.png
-<center> The image shows the result of extrusion of two edges
-(#1 and #2) of the initial mesh along the path. \n Node #1 of path mesh
-has been selected as Start node.</center>
-
-<br><center><h2>Extrusion along a curvilinear edge</h2>(with and
-without angles)</center>
-
-\image html curvi_simple_before.png
-<center>The image shows a 1D path mesh, built on curvilinear edge, and
-the initial  2D mesh.</center>
-
-\image html curvi_simple_after.png
-<center>The central image shows the result of extrusion of one edge
-(#2) of the initial mesh along the path. \n Node #1 of path mesh has
-been selected as <b>Start node</b>.</center>
-
-\image html curvi_angles_after.png
-<center>The same, but using angles {45, 45, 45, 0, -45, -45, -45}</center>
-
-<br><center><h2>Extrusion of a 2D face along a mesh built on a wire</h2></center>
-
-In this example the path mesh has been built on a wire containing 3
-edges. Node 1 is a start node. Linear angle variation by 180 degrees
-has also been applied.
-
-\image html extr_along_wire_before.png
-<center><em>Meshed wire</em></center>
-
-\image html extr_along_wire_after.png
-<center><em>The resulting extrusion</em></center>
-
-<br><center><h2>Extrusion of 2d elements along a closed path</h2></center>
-
-\image html circle_simple_before.png
-<center>The image shows a path mesh built on a closed edge
-(circle).</center>
-
-\image html circle_simple_after.png
-<center>The central image shows the result of extrusion of both faces
-of the initial mesh. \n Note, that no sewing has been done, so, there are
-six coincident nodes and two coincident faces in the resulting
-mesh.</center>
-
-\image html circle_angles_after.png
-<center>The same, but using angles {45, -45, 45, -45, 45, -45, 45, -45}
-</center>
-
-<br><em>To use Extrusion along Path:</em>
-<ol>
-<li>From the \b Modification menu choose the <b>Extrusion along a
-path</b> item or click <em>"Extrusion along a path"</em> button in the toolbar.
-
-\image html image101.png
-<center><em>"Extrusion along a path" button</em></center>
-
-The following dialog will appear:
-
-\image html extrusion_along_path_dlg.png
-</li>
-
-<li>In this dialog:
-<ul>
-    <li>Use \a Selection button to specify what you are going to
-    select at a given moment, \b Nodes, \b Edges or \b Faces.
-\image html image120.png
-<center><em>"Selection" button</em></center>
-    </li>
-    <li>Specify \b Nodes, \b Edges and \b Faces, which will be extruded, by one
-      of following means:
-      <ul>
-        <li><b>Select the whole mesh, sub-mesh or group</b> activating this
-          check-box.</li>
-        <li>Choose mesh elements with the mouse in the 3D Viewer. It is
-          possible to select a whole area with a mouse frame.</li>
-        <li>Input the element IDs directly in <b>Node IDs</b>, <b>Edge
-            IDs</b> and <b>Face IDs</b> fields. The selected elements will
-          be highlighted in the viewer, if the mesh is shown there.</li>
-        <li>Apply Filters. <b>Set filter</b> button allows to apply a
-          filter to the selection of elements. See more about filters in
-          the \ref filtering_elements "Selection filters" page.</li>
-      </ul>
-    </li>
-    <li>Define the \b Path along which the elements will be extruded.<br>
-      Path definition consists of several elements:
-      <ul>
-        <li><b>Mesh or sub-mesh</b> - 1D mesh or sub-mesh, along which
-        proceeds the extrusion.</li>
-        <li><b>Start node</b> - the start node of the Path. It is used
-        to define the direction of extrusion. </li>
-      </ul>
-    </li>
-  <li>If you activate <b>Generate Groups</b> check-box, the <em>result elements</em>
-    created from <em>selected elements</em> contained in groups will be
-    included into new groups named by pattern "<old group
-    name>_extruded" and "<old group name>_top". For example if a
-    selected quadrangle is included in \a g_Faces group (see figures
-    below) then result hexahedra will be included in \a
-    g_Faces_extruded group and a quadrangle created at the "top" of
-    extruded mesh will be included in \a g_Faces_top group. <br> 
-\image html extrusion_groups.png
-\image html extrusion_groups_res.png
-    <p> This check-box is active only if there are some groups in the mesh.
-  </li>
-</ul>
-</li>
-
-<li>There are two optional parameters, which can be very useful:
-<ul>
-<li>If the path of extrusion is curvilinear, at each iteration the
-  extruded elements are rotated to keep its initial angularity to the
-  curve. By default, the <b>Base Point</b> around which the elements
-  are rotated is the mass center of the elements (note that it can
-  differ from the gravity center computed by \a Geometry module for the
-  underlying shape), however, you can specify any point as the <b>Base
-  Point</b> and the elements will be rotated with respect to this
-  point.<br>
-  Note that only the displacement of the <b>Base Point</b> exactly
-  equals to the path, and all other extruded elements simply keep
-  their position relatively to the <b>Base Point</b> at each
-  iteration.</li>
-<li>The elements can also be rotated around the path to get the
-  resulting mesh in a helical fashion. You can set the values of
-  angles at the right, add them to the list of angles at the left by
-  pressing the <em>"Add"</em> button and remove them from the list by
-  pressing the <em>"Remove"</em> button.
-\image html add.png
-<center><em>"Add" button</em></center>
-\image html remove.png
-<center><em>"Remove" button</em></center>
-
-<b>Linear variation of the angles</b> option allows defining the angle
-of gradual rotation for the whole path. At each step the elements will
-be rotated by <code>( angle / nb. of steps )</code>.
-</li>
-</ul>
-</li>
-
-
-<li>Click \b Apply or <b> Apply and Close</b>  button to confirm the
-  operation. Mesh edges will be extruded into faces, faces into
-  volumes. The external surface of the resulting 3d mesh (if faces
-  have been extruded) is covered with faces, and corners with
-  edges. If the path is closed, the resulting mesh can contain
-  duplicated nodes and faces, because no sewing is done.
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of an 
-\ref tui_extrusion_along_path "Extrusion along a Path" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/extrusion_along_path.rst b/doc/salome/gui/SMESH/input/extrusion_along_path.rst
new file mode 100644 (file)
index 0000000..71851c8
--- /dev/null
@@ -0,0 +1,158 @@
+.. _extrusion_along_path_page:
+
+********************
+Extrusion along Path
+********************
+
+In principle, **Extrusion along Path** works in the same way as :ref:`extrusion_page`, the main difference is that we define not a vector, but a path of extrusion which must be an 1D mesh or 1D sub-mesh.
+To get an idea of how this algorithm works, examine several examples, starting from the most simple case of extrusion along a straight edge.
+In the examples the sample mesh will be extruded along different paths and with different parameters.
+This 2D mesh has two quadrangle faces and seven edges. Look at the picture, where white digits are the node numbers and green are the element numbers:
+
+.. image:: ../images/mesh_for_extr_along_path.png
+       :align: center
+
+Extrusion along a straight edge
+*******************************
+(not using base point or angles)
+
+.. image:: ../images/straight_before.png
+       :align: center
+
+.. centered::
+       The image shows a 1D path mesh, built on a linear edge, and the initial 2D mesh.
+
+.. image:: ../images/straight_after.png
+       :align: center
+
+.. centered::
+       The image shows the result of extrusion of two edges (#1 and #2) of the initial mesh along the path. 
+
+.. note:: Node #1 of path mesh has been selected as Start node.
+
+Extrusion along a curvilinear edge
+##################################
+(with and without angles)
+
+.. image:: ../images/curvi_simple_before.png
+       :align: center
+
+.. centered::
+       The image shows a 1D path mesh, built on curvilinear edge, and the initial  2D mesh.
+
+.. image:: ../images/curvi_simple_after.png
+       :align: center
+
+.. centered::
+       The central image shows the result of extrusion of one edge (#2) of the initial mesh along the path. 
+
+.. note:: Node #1 of path mesh has been selected as **Start node**.
+
+.. image:: ../images/curvi_angles_after.png
+       :align: center
+
+.. centered::
+       The same, but using angles {45, 45, 45, 0, -45, -45, -45}
+
+Extrusion of a 2D face along a mesh built on a wire
+###################################################
+
+In this example the path mesh has been built on a wire containing 3 edges. Node 1 is a start node. Linear angle variation by 180 degrees has also been applied.
+
+.. image:: ../images/extr_along_wire_before.png
+       :align: center
+
+.. centered::
+       Meshed wire
+
+.. image:: ../images/extr_along_wire_after.png
+       :align: center
+
+.. centered::
+       The resulting extrusion
+
+Extrusion of 2d elements along a closed path
+############################################
+
+.. image:: ../images/circle_simple_before.png
+       :align: center
+
+.. centered::
+       The image shows a path mesh built on a closed edge (circle).
+
+.. image:: ../images/circle_simple_after.png
+       :align: center
+
+.. centered::
+       The central image shows the result of extrusion of both faces of the initial mesh. 
+
+.. note:: Note, that no sewing has been done, so, there are six coincident nodes and two coincident faces in the resulting mesh.
+
+.. image:: ../images/circle_angles_after.png
+       :align: center
+
+.. centered::
+       The same, but using angles {45, -45, 45, -45, 45, -45, 45, -45}
+
+
+*To use Extrusion along Path:*
+
+.. |img| image:: ../images/image101.png
+.. |sel| image:: ../images/image120.png
+
+#. From the **Modification** menu choose the **Extrusion along a path** item or click *"Extrusion along a path"* button |img| in the toolbar.
+
+   The following dialog will appear:
+
+       .. image:: ../images/extrusion_along_path_dlg.png
+
+#. In this dialog:
+
+       * Use *Selection* button |sel| to specify what you are going to select at a given moment, **Nodes**, **Edges** or **Faces**.
+
+       * Specify **Nodes**, **Edges** and **Faces**, which will be extruded, by one of following means:
+      
+               * **Select the whole mesh, sub-mesh or group** activating this check-box.
+               * Choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame.
+               * Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face IDs** fields. The selected elements will be highlighted in the viewer, if the mesh is shown there.
+               * Apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`filtering_elements` page.
+    
+       * Define the **Path** along which the elements will be extruded.Path definition consists of several elements:
+      
+               * **Mesh or sub-mesh** - 1D mesh or sub-mesh, along which proceeds the extrusion.
+               * **Start node** - the start node of the Path. It is used to define the direction of extrusion. 
+      
+    
+       * If you activate **Generate Groups** check-box, the **result elements** created from **selected elements** contained in groups will be included into new groups named by pattern "<old group name>_extruded" and "<old group name>_top". For example if a  selected quadrangle is included in *g_Faces* group (see figures below) then result hexahedra will be included in *g_Faces_extruded* group and a quadrangle created at the "top" of extruded mesh will be included in *g_Faces_top group*.  
+
+       .. image:: ../images/extrusion_groups.png
+               :align: center
+
+       .. image:: ../images/extrusion_groups_res.png
+               :align: center
+
+       This check-box is active only if there are some groups in the mesh.
+  
+
+
+
+#. There are two optional parameters, which can be very useful:
+
+   * If the path of extrusion is curvilinear, at each iteration the extruded elements are rotated to keep its initial angularity to the curve. By default, the **Base Point** around which the elements are rotated is the mass center of the elements (note that it can differ from the gravity center computed by *Geometry* module for the  underlying shape), however, you can specify any point as the **Base Point** and the elements will be rotated with respect to this point. Note that only the displacement of the **Base Point** exactly equals to the path, and all other extruded elements simply keep their position relatively to the **Base Point** at each iteration.
+
+   .. |add| image:: ../images/add.png
+   .. |rem| image:: ../images/remove.png
+
+   * The elements can also be rotated around the path to get the resulting mesh in a helical fashion. You can set the values of angles at the right, add them to the list of angles at the left by pressing the *"Add"* button |add| and remove them from the list by pressing the *"Remove"* button |rem|.
+
+
+     **Linear variation of the angles** option allows defining the angle of gradual rotation for the whole path. At each step the elements will be rotated by *( angle / nb. of steps )*.
+
+
+
+#. Click **Apply** or **Apply and Close**  button to confirm the operation. Mesh edges will be extruded into faces, faces into volumes. The external surface of the resulting 3d mesh (if faces have been extruded) is covered with faces, and corners with edges. If the path is closed, the resulting mesh can contain duplicated nodes and faces, because no sewing is done.
+
+
+**See Also** a sample TUI Script of an :ref:`tui_extrusion_along_path` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/find_element_by_point.doc b/doc/salome/gui/SMESH/input/find_element_by_point.doc
deleted file mode 100644 (file)
index 191aa43..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*!
-
-\page find_element_by_point_page Find Element by Point
-
-\n This functionality allows you to find all mesh elements to which
-belongs a certain point.
-
-<em>To find the elements:</em>
-<ol>
-<li>Select a mesh or a group</li>
-<li>Select from the Mesh menu or from the context menu the Find
-Element by Point item.
-
-\image html findelement3.png
-<center><em>"Find Element by Point" button</em></center>
-
-The following dialog box will appear:
-
-\image html findelement2.png
-
-</li>
-<li>In this dialog box you should select:
-
-<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. Choose type "All" to find
-elements of any type except for nodes and 0D elements.</li>
-</ul>
-
-</li>
-<li>Click the \b Find button.
-</ol>
-
-\image html findelement1.png 
-<center>The reference point and the related elements.</center>
-
-
-<br><b>See Also</b> a sample TUI Script of a \ref tui_find_element_by_point "Find Element by Point" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/find_element_by_point.rst b/doc/salome/gui/SMESH/input/find_element_by_point.rst
new file mode 100644 (file)
index 0000000..1fd4ba7
--- /dev/null
@@ -0,0 +1,37 @@
+.. _find_element_by_point_page:
+
+*********************
+Find Element by Point
+*********************
+
+This functionality allows you to find all mesh elements to which belongs a certain point.
+
+*To find the elements:*
+
+.. |img| image:: ../images/findelement3.png
+
+#. Select a mesh or a group
+#. Select from the Mesh menu or from the context menu the Find Element by Point item |img|.
+
+
+   The following dialog box will appear:
+
+       .. image:: ../images/findelement2.png
+               :align: center
+
+
+#. In this dialog box you should select:
+       * the coordinates of the point;
+       * the type of elements to be found; it is also possible to find elements of all types related to the reference point. Choose type "All" to find elements of any type except for nodes and 0D elements.
+#. Click the **Find** button. IDs of found entities will be shown.
+
+.. image:: ../images/findelement1.png 
+       :align: center
+
+.. centered:: 
+       The reference point and the related elements.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_find_element_by_point` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/free_borders.doc b/doc/salome/gui/SMESH/input/free_borders.doc
deleted file mode 100644 (file)
index 3a8497c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-
-\page free_borders_page Free borders
-
-\n This mesh quality control highlights 1D elements (segments)
-belonging to one element (face or volume) only.
-
-\image html free_borders1.png
-
-In this picture the free borders are displayed in red. (Faces are
-explicitly shown via <em>Display Entity</em> menu as all elements but
-segments are hidden upon this control activation).
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_free_borders "Free Borders quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/free_borders.rst b/doc/salome/gui/SMESH/input/free_borders.rst
new file mode 100644 (file)
index 0000000..fc076f3
--- /dev/null
@@ -0,0 +1,16 @@
+.. _free_borders_page:
+
+************
+Free borders
+************
+
+This mesh quality control highlights 1D elements (segments) belonging to one element (face or volume) only.
+
+.. image:: ../images/free_borders1.png
+       :align: center
+
+In this picture the free borders are displayed in red. (Faces are explicitly shown via **Display Entity** menu as all elements but segments are hidden upon this control activation).
+
+**See Also** a sample TUI Script of a :ref:`tui_free_borders` filter.
+
+
diff --git a/doc/salome/gui/SMESH/input/free_edges.doc b/doc/salome/gui/SMESH/input/free_edges.doc
deleted file mode 100644 (file)
index 2e9d4a6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-
-\page free_edges_page Free edges
-
-\n This mesh quality control highlights borders of faces
-(links between nodes, not mesh segments) belonging to one face only.
-
-\image html free_edges.png
-<center>In this picture some elements of mesh have been deleted and
-the "holes" are outlined in red.</center>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_free_edges "Free Edges quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/free_edges.rst b/doc/salome/gui/SMESH/input/free_edges.rst
new file mode 100644 (file)
index 0000000..feeb58e
--- /dev/null
@@ -0,0 +1,15 @@
+.. _free_edges_page:
+
+**********
+Free edges
+**********
+
+This mesh quality control highlights borders of faces (links between nodes, not mesh segments) belonging to one face only.
+
+.. image:: ../images/free_edges.png
+       :align: center
+
+.. centered::
+       Some elements of mesh have been deleted and the "holes" are outlined in red.
+
+**See Also** a sample TUI Script of a :ref:`tui_free_edges` filter.
diff --git a/doc/salome/gui/SMESH/input/free_faces.doc b/doc/salome/gui/SMESH/input/free_faces.doc
deleted file mode 100644 (file)
index d35caa9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
-
-\page free_faces_page Free faces
-
-This mesh quality control highlights the faces connected to
-less than two mesh volume elements. The free faces are shown with a
-color different from the color of shared faces.
-
-\image html free_faces.png
-
-In this picture some volume mesh elements have been removed, as
-a result some faces became connected only to one
-volume. i.e. became free.
-
-\sa A sample TUI Script of a \ref tui_free_faces "Free Faces quality control"
-operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/free_faces.rst b/doc/salome/gui/SMESH/input/free_faces.rst
new file mode 100644 (file)
index 0000000..cd8ca05
--- /dev/null
@@ -0,0 +1,14 @@
+.. _free_faces_page:
+
+**********
+Free faces
+**********
+
+This mesh quality control highlights the faces connected to less than two mesh volume elements. The free faces are shown with a color different from the color of shared faces.
+
+.. image:: ../images/free_faces.png
+       :align: center
+
+In this picture some volume mesh elements have been removed, as a result some faces became connected only to one volume. i.e. became free.
+
+**See also:** A sample TUI Script of a :ref:`tui_free_faces` filter.
diff --git a/doc/salome/gui/SMESH/input/free_nodes.doc b/doc/salome/gui/SMESH/input/free_nodes.doc
deleted file mode 100644 (file)
index 8a06fe3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
-
-\page free_nodes_page Free nodes
-
-This mesh quality control highlights the nodes which are not connected
-to any  mesh element. 
-
-\image html free_nodes.png
-
-In this picture some nodes are not connected to any mesh
-element after deleting some elements and adding several isolated nodes.
-
-\sa A sample TUI Script of a \ref tui_free_nodes "Free Nodes quality control"
-operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/free_nodes.rst b/doc/salome/gui/SMESH/input/free_nodes.rst
new file mode 100644 (file)
index 0000000..451699c
--- /dev/null
@@ -0,0 +1,14 @@
+.. _free_nodes_page:
+
+**********
+Free nodes
+**********
+
+This mesh quality control highlights the nodes which are not connected to any  mesh element. 
+
+.. image:: ../images/free_nodes.png
+       :align: center
+
+In this picture some nodes are not connected to any mesh element after deleting some elements and adding several isolated nodes.
+
+**See also:** A sample TUI Script of a :ref:`tui_free_nodes` filter.
diff --git a/doc/salome/gui/SMESH/input/generate_flat_elements.doc b/doc/salome/gui/SMESH/input/generate_flat_elements.doc
deleted file mode 100644 (file)
index 7cfdbf9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/*!
-
-\page generate_flat_elements_page Generate flat elements on group boundaries or on faces
-
-\n These functionalities, used in some mechanics calculations,
-allow to generate flat volume elements on the boundaries of a list
-of groups of volumes, or on a list of groups of faces.
-\n These functionalities are only available in python scripts.
-
-<br><b>See </b> a sample TUI Script of \ref tui_double_nodes_on_group_boundaries "Generate flat elements" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/generate_flat_elements.rst b/doc/salome/gui/SMESH/input/generate_flat_elements.rst
new file mode 100644 (file)
index 0000000..7308111
--- /dev/null
@@ -0,0 +1,14 @@
+.. _generate_flat_elements_page:
+
+******************************************************
+Generate flat elements on group boundaries or on faces
+******************************************************
+
+These functionalities, used in some mechanics calculations, allow to generate flat volume elements 
+on the boundaries of a list of groups of volumes, or on a list of groups of faces.
+
+.. note:: These functionalities are only available in python scripts.
+
+**See** a sample TUI Script of :ref:`tui_double_nodes_on_group_boundaries` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/group_of_underlying_elements.doc b/doc/salome/gui/SMESH/input/group_of_underlying_elements.doc
deleted file mode 100755 (executable)
index 7d31f73..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-
-\page group_of_underlying_elements_page Group Based on Nodes of Other Groups
-
-
-To create a standalone group of entities basing on nodes of existing
-reference groups, in the \b Mesh menu select <b>Group of underlying entities</b>.
-
-The following dialog box will appear:
-
-\image html dimgroup_dlg.png
-
-In this dialog box specify <ul>
-  <li> the resulting <b>Group name</b>, </li>
-  <li> the <b>Elements Type</b> of entities of the resulting group,</li>
-  <li> the criterion of inclusion of a mesh entity to the result group,
-    which is <b>Number of common nodes</b> of the entity and the
-    reference groups: <ul>
-      <li>\b All - include if all nodes are common;</li>
-      <li>\b Main - include if all corner nodes are common (meaningful for
-        a quadratic mesh) </li>
-      <li><b>At least one</b> - include if one or more nodes are common</li>
-      <li>\b Majority - include if half or more nodes are common</li></ul>
-  </li>
-  <li> select reference groups,</li>
-  <li> If <b>Include underlying entities only</b> option is activated
-  an entity can be included if it is based on nodes of
-  one element of a reference group.</li>
-</ul>
-
-In the figure below, there are two reference Volume groups:
-
-\image html dimgroup_src.png
-<center>Reference groups</center>
-
-In this case the following results for Faces, Edges and Nodes are obtained:
-
-\image html dimgroup_2d.png
-<center>Faces</center>
-
-\image html dimgroup_1d.png
-<center>Edges</center>
-
-\image html dimgroup_0d.png
-<center>Nodes</center>
-
-<b>See Also</b> a sample TUI Script of a
-\ref tui_create_dim_group "Creating groups basing on nodes of other groups"
-operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst b/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst
new file mode 100644 (file)
index 0000000..a660030
--- /dev/null
@@ -0,0 +1,59 @@
+.. _group_of_underlying_elements_page:
+
+************************************
+Group Based on Nodes of Other Groups
+************************************
+
+
+To create a standalone group of entities basing on nodes of existing reference groups, in the **Mesh** menu select **Group of underlying entities**.
+
+The following dialog box will appear:
+
+.. image:: ../images/dimgroup_dlg.png
+       :align: center
+
+In this dialog box specify 
+
+       * the resulting **Group name**, 
+       * the **Elements Type** of entities of the resulting group,
+       * the criterion of inclusion of a mesh entity to the result group, which is **Number of common nodes** of the entity and the reference groups: 
+               * **All** - include if all nodes are common;
+               * **Main** - include if all corner nodes are common (meaningful for a quadratic mesh) 
+               * **At least one** - include if one or more nodes are common
+               * **Majority** - include if half or more nodes are common
+  
+       * select reference groups,
+       * If **Include underlying entities only** option is activated an entity can be included if it is based on nodes of one element of a reference group.
+
+
+In the figure below, there are two reference Volume groups:
+
+.. image:: ../images/dimgroup_src.png
+       :align: center
+
+.. centered:: 
+       Reference groups
+
+In this case the following results for Faces, Edges and Nodes are obtained:
+
+.. image:: ../images/dimgroup_2d.png
+       :align: center
+
+.. centered::
+       Faces
+
+.. image:: ../images/dimgroup_1d.png
+       :align: center
+
+.. centered::
+       Edges
+
+.. image:: ../images/dimgroup_0d.png
+       :align: center
+
+.. centered::
+       Nodes
+
+**See Also** a sample TUI Script of a :ref:`tui_create_dim_group` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/grouping_elements.doc b/doc/salome/gui/SMESH/input/grouping_elements.doc
deleted file mode 100644 (file)
index 7d738c8..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*!
-
-\page grouping_elements_page Grouping elements
-
-In Mesh module it is possible to create groups of mesh entities:
-nodes, edges, faces, volumes, 0D elements or balls. One group contains
-elements of only one type. Groups, unlike sub-meshes, are exported
-along with mesh entities into the files of following formats: MED, UNV,
-and CGNS. The group has a color attribute which is used for
-visualization only and is not exported.
-
-There are three types of groups different by their internal
-organization:<ol>
-<li><b>Standalone group</b> is a static set of mesh entities. Its
-  contents can be explicitly controlled by the user. Upon removal of
-  the entities included into the group, e.g. due to modification of
-  meshing parameter, the group becomes empty and its content can be
-  restored only manually. Hence it is reasonable to create standalone
-  groups when the mesh generation is finished and mesh quality is
-  verified.
-  \warning Creation and edition of large standalone groups in
-  \ref creating_groups_page "Create group" dialog using manual edition
-  is problematic due to poor performance of the dialog.</li>
-  
-<li><b>Group on geometry</b> is associated to a sub-shape or a group of
-  sub-shapes of the main shape and includes mesh entities generated on
-  these geometrical entities. The association to a geometry is
-  established at group construction and cannot be changed. The group
-  contents are always updated automatically, hence the
-  group can be created even before mesh elements generation.</li>
-<li><b>Group on filter</b> encapsulates a \ref filters_page "filter",
-  which is used to select mesh entities composing the group from the
-  whole mesh. Criteria of the filter can be changed at any time. The
-  group contents are always updated automatically, hence the group can
-  be created even before mesh elements generation.</li>
-</ol>
-The group on geometry and group on filter can be converted to
-a standalone group.
-
-\image html groups_in_OB.png "Groups of different types look differently in the Object Browser"
-
-The following ways of group creation are possible:
-
-- \subpage creating_groups_page "Create group" dialog allows creation of
-  a group of any type:
-  \ref standalone_group "Standalone group",
-  \ref group_on_geom "Group on geometry" and
-  \ref group_on_filter "Group on filter" using dedicated tabs.
-- \subpage create_groups_from_geometry_page "Create Groups from Geometry"
-  dialog allows creation of several groups on geometry at once.
-- Standalone groups of all nodes and elements of the chosen sub-mesh
-  (type of elements depends on dimension of sub-mesh geometry) can
-  be created using <b>Mesh -> Construct Group</b> menu item (available
-  from the context menu as well).
-- Standalone groups of any element type can be created basing on nodes
-  of other groups - using \subpage group_of_underlying_elements_page
-  "Group based on nodes of other groups" dialog.
-- Standalone groups can be created by applying 
-  \subpage using_operations_on_groups_page "Boolean operations" to
-  other groups.
-- Creation of standalone groups is an option of many 
-  \ref modifying_meshes_page "mesh modification" operations.
-
-The created groups can be later:
-
-- \subpage editing_groups_page "Edited"
-- \subpage deleting_groups_page "Deleted", either as an object or
-  together with contained elements.
-- The group on geometry and group on filter can be 
-  \ref convert_to_standalone "converted into the standalone" group.
-- \ref importing_exporting_meshes_page "Exported" into a file as a
-  whole mesh.
-
-In the Object Browser, if an item contains more than one child group,
-it is possible to sort the groups by name in ascending order
-using <b>Sort children</b> context menu item. 
-
-\image html smesh_sort_groups.png "Sorting groups"
-
-An important tool, providing filters for creation of standalone
-groups and groups on filter is \ref selection_filter_library_page.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/grouping_elements.rst b/doc/salome/gui/SMESH/input/grouping_elements.rst
new file mode 100644 (file)
index 0000000..e0e259f
--- /dev/null
@@ -0,0 +1,62 @@
+.. _grouping_elements_page:
+
+*****************
+Grouping elements
+*****************
+
+In Mesh module it is possible to create groups of mesh entities: nodes, edges, faces, volumes, 0D elements or balls. One group contains elements of only one type. Groups, unlike sub-meshes, are exported along with mesh entities into the files of following formats: MED, UNV, and CGNS. The group has a color attribute which is used for visualization only and is not exported.
+
+There are three types of groups different by their internal organization:
+
+#. **Standalone group** is a static set of mesh entities. Its contents can be explicitly controlled by the user. Upon removal of the entities included into the group, e.g. due to modification of  meshing parameter, the group becomes empty and its content can be restored only manually. Hence it is reasonable to create standalone groups when the mesh generation is finished and mesh quality is verified.
+       .. warning:: Creation and edition of large standalone groups in :ref:`Create group <creating_groups_page>` dialog using manual edition is problematic due to poor performance of the dialog.
+  
+#. **Group on geometry** is associated to a sub-shape or a group of sub-shapes of the main shape and includes mesh entities generated on these geometrical entities. The association to a geometry is established at group construction and cannot be changed. The group contents are always updated automatically, hence the group can be created even before mesh elements generation.
+
+#. **Group on filter** encapsulates a :ref:`filter <filters_page>`, which is used to select mesh entities composing the group from the whole mesh. Criteria of the filter can be changed at any time. The group contents are always updated automatically, hence the group can be created even before mesh elements generation.
+
+The group on geometry and group on filter can be converted to a standalone group.
+
+.. image:: ../images/groups_in_OB.png
+       :align: center
+
+.. centered::
+       Groups of different types look differently in the Object Browser
+
+The following ways of group creation are possible:
+
+* :ref:`Create group <creating_groups_page>` dialog allows creation of a group of any type: :ref:`Standalone group<standalone_group>`, :ref:`Group on geometry <group_on_geom>` and :ref:`Group on filter <group_on_filter>` using dedicated tabs.
+* :ref:`Create Groups from Geometry <create_groups_from_geometry_page>` dialog allows creation of several groups on geometry at once.
+* Standalone groups of all nodes and elements of the chosen sub-mesh (type of elements depends on dimension of sub-mesh geometry) can be created using **Mesh -> Construct Group** menu item (available from the context menu as well).
+* Standalone groups of any element type can be created basing on nodes of other groups - using :ref:`Group based on nodes of other groups <group_of_underlying_elements_page>` dialog.
+* Standalone groups can be created by applying :ref:`Boolean operations <using_operations_on_groups_page>` to other groups.
+* Creation of standalone groups is an option of many :ref:`mesh modification <modifying_meshes_page>` operations.
+
+The created groups can be later:
+
+* :ref:`Edited <editing_groups_page>`
+* :ref:`Deleted <deleting_groups_page>`, either as an object or together with contained elements.
+* The group on geometry and group on filter can be :ref:`converted into the standalone <convert_to_standalone>` group.
+* :ref:`Exported <importing_exporting_meshes_page>` into a file as a whole mesh.
+
+In the Object Browser, if an item contains more than one child group, it is possible to sort the groups by name in ascending order using **Sort children** context menu item. 
+
+.. image:: ../images/smesh_sort_groups.png
+       :align: center
+
+.. centered::
+       Sorting groups
+
+An important tool, providing filters for creation of standalone groups and groups on filter is :ref:`selection_filter_library_page`.
+
+**Table of Contents**
+
+.. toctree::
+       :maxdepth: 2
+
+       creating_groups.rst
+       create_groups_from_geometry.rst
+       group_of_underlying_elements.rst
+       using_operations_on_groups.rst
+       editing_groups.rst
+       deleting_groups.rst
diff --git a/doc/salome/gui/SMESH/input/importing_exporting_meshes.doc b/doc/salome/gui/SMESH/input/importing_exporting_meshes.doc
deleted file mode 100644 (file)
index a4a8d3c..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-
-\page importing_exporting_meshes_page Importing and exporting meshes
-
-\n In MESH there is a functionality allowing import/export
-of meshes from/to \b MED, \b UNV (I-DEAS 10), \b DAT (simple ascii format), \b STL,
-\b GMF (internal format of DISTENE products, namely MG-CADSurf, MG-Tetra and
-MG-Hexa algorithms) and \b CGNS format files. You can also export a
-group as a whole mesh.
-
-
-<em>To import a mesh:</em>
-
-<ol>
-<li>From the \b File menu choose the \b Import item, from its sub-menu
-  select the corresponding format (MED, UNV, STL, GMF and CGNS) of the
-  file containing your mesh.</li>
-<li>In the standard <b>Search File</b> dialog box find the file for
-  import. It is possible to select multiple files to be imported all at
-  once. </li> 
-
-<li>Click the \b OK button.</li>
-</ol>
-
-\image html meshimportmesh.png
-
-<em>To export a mesh or a group:</em>
-
-<ol>
-  <li>Select the object you wish to export.</li>
-  <li>From the \b File menu choose the \b Export item, from its sub-menu
-    select the format (MED, UNV, DAT, STL, GMF and CGNS) of the file which will
-    contain your exported mesh.</li>
-  <li>In the standard <b>Search File</b> select a location for the
-    exported file and enter its name.</li>
-  <li>Click the \b OK button.</li>
-</ol>
-
-\image html meshexportmesh.png
-
- If you try to export a group, the warning will be shown:
-\image html meshexportgroupwarning.png
-<ul>
-  <li><b>Don't show this warning anymore</b> check-box allows to
-    switch off the warning. You can re-activate the warning in 
-    \ref group_export_warning_pref "Preferences".</li>
-</ul>
-
- There are additional parameters available at export to MED and SAUV format files.
-<ul>
-  <li>
-\anchor export_auto_groups
-  <b>Automatically create groups</b> check-box specifies whether to
-  create groups of all mesh entities of available dimensions or
-  not. The created groups have names like "Group_On_All_Nodes",
-  "Group_On_All_Faces", etc. A default state of this check-box can be
-  set in \ref export_auto_groups_pref "Preferences". </li>
-  <li><b>Automatically define space dimension</b> check-box specifies
-  whether to define space dimension for export by mesh configuration
-  or not. Usually the mesh is exported as a mesh in 3D space, just as
-  it is in Mesh module. The mesh can be exported as a mesh of a lower
-  dimension in the following cases, provided that this check-box is checked:
-    <ul>
-      <li> <b>1D</b>: if all mesh nodes lie on OX coordinate axis. </li>
-      <li> <b>2D</b>: if all mesh nodes lie in XOY coordinate plane. </li>
-    </ul>
-  </li>
-</ul>
-<br><b>See Also</b> a sample TUI Script of an \ref tui_export_mesh "Export Mesh" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst b/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst
new file mode 100644 (file)
index 0000000..e17080d
--- /dev/null
@@ -0,0 +1,57 @@
+
+.. _importing_exporting_meshes_page:
+
+******************************
+Importing and exporting meshes
+******************************
+
+In MESH there is a functionality allowing import/export of meshes in follwing formats:
+
+* **MED**,
+* **UNV** (I-DEAS 10),
+* **DAT** (simple ascii format), 
+* **STL**, 
+* **GMF** (internal format of DISTENE products from the MeshGems suite),
+* **CGNS**.
+
+You can also export a group as a whole mesh.
+
+*To import a mesh:*
+
+#. From the **File** menu choose the **Import** item, from its sub-menu select the corresponding format (MED, UNV, STL, GMF and CGNS) of the file containing your mesh.
+#. In the standard **Search File** dialog box find the file for import. It is possible to select multiple files to be imported all at once.  
+#. Click the **OK** button.
+
+.. image:: ../images/meshimportmesh.png
+       :align: center
+
+*To export a mesh or a group:*
+
+#. Select the object you wish to export.
+#. From the **File** menu choose the **Export** item, from its sub-menu select the format (MED, UNV, DAT, STL, GMF and CGNS) of the file which will contain your exported mesh.
+#. In the standard **Search File** select a location for the exported file and enter its name.
+#. Click the **OK** button.
+
+.. image:: ../images/meshexportmesh.png
+       :align: center
+
+If you try to export a group, the warning will be shown:
+
+.. image:: ../images/meshexportgroupwarning.png
+       :align: center
+
+* **Don't show this warning anymore** check-box allows to switch off the warning. You can re-activate the warning in :ref:`Preferences <group_export_warning_pref>`.
+
+There are additional parameters available at export to MED and SAUV format files.
+
+.. _export_auto_groups:
+
+* **Automatically create groups** check-box specifies whether to create groups of all mesh entities of available dimensions or not. The created groups have names like "Group_On_All_Nodes", "Group_On_All_Faces", etc. A default state of this check-box can be set in :ref:`Preferences <export_auto_groups_pref>`.
+* **Automatically define space dimension** check-box specifies whether to define space dimension for export by mesh configuration or not. Usually the mesh is exported as a mesh in 3D space, just as it is in Mesh module. The mesh can be exported as a mesh of a lower dimension in the following cases, provided that this check-box is checked:
+
+  * **1D**: if all mesh nodes lie on OX coordinate axis. 
+  * **2D**: if all mesh nodes lie in XOY coordinate plane. 
+
+**See Also** a sample TUI Script of an :ref:`Export Mesh <tui_export_mesh>` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/index.doc b/doc/salome/gui/SMESH/input/index.doc
deleted file mode 100644 (file)
index e276251..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-
-\mainpage Introduction to Mesh module
-
-\image html a-viewgeneral.png
-
-\n \b Mesh module of SALOME is destined for:
-<ul>
-<li>\subpage about_meshes_page "creating meshes" in different ways:
- - by meshing geometrical models previously created or imported by the
-   Geometry component; 
- - bottom-up, using \ref modifying_meshes_page "mesh edition"
-   operations, especially \ref extrusion_page "extrusion" and \ref
-   revolution_page "revolution";
- - by generation of the 3D mesh from the 2D mesh not based on the geometry
-  (\ref importing_exporting_meshes_page "imported" for example); 
- </li>
-<li>\ref importing_exporting_meshes_page "importing and exporting meshes" 
-  in various formats;</li>
-<li>\subpage modifying_meshes_page "modifying meshes" with a vast
-  array of dedicated operations;</li> 
-<li>\subpage grouping_elements_page "creating groups" of mesh
-  elements;</li>
-<li>filtering mesh entities (nodes or elements) using
-  \subpage filters_page "Filters" functionality for \ref
-  grouping_elements_page "creating groups" and applying \ref
-  modifying_meshes_page "mesh modifications";</li>
-<li>\subpage viewing_meshes_overview_page "viewing meshes" in
-  the VTK viewer and \ref mesh_infos_page "getting info" on mesh
-  and its sub-objects;</li>
-<li>applying to meshes \subpage quality_page "Quality Controls", 
-  allowing to highlight important elements;</li>
-<li>taking various \subpage measurements_page "measurements" of the
-  mesh objects.</li>
-</ul>
-
-It is possible to use the variables predefined in
-\subpage using_notebook_mesh_page "Salome notebook" to set parameters
-of operations.
-
-Mesh module preferences are described in the \subpage mesh_preferences_page 
-section of SALOME Mesh Help.
-
-Almost all mesh module functionalities are accessible via
-\subpage smeshpy_interface_page "Mesh module Python interface".
-
-There is a set of \subpage tools_page "tools" plugged-in the module to extend
-the basic functionality listed above.
-
-\image html image7.jpg "Example of MESH module usage for engineering tasks"
-
-*/
diff --git a/doc/salome/gui/SMESH/input/index.rst b/doc/salome/gui/SMESH/input/index.rst
new file mode 100644 (file)
index 0000000..c6a2ade
--- /dev/null
@@ -0,0 +1,60 @@
+.. SMESH documentation master file, created by
+   sphinx-quickstart on Tue Nov 21 15:18:10 2017.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+***************************
+Introduction to Mesh module
+***************************
+
+.. image:: ../images/a-viewgeneral.png
+       :align: center
+
+**Mesh** module of SALOME is destined for:
+
+* :ref:`creating meshes <about_meshes_page>` in different ways:
+
+  * by meshing geometrical models previously created or imported by the Geometry component; 
+  * bottom-up, using :ref:`mesh edition <modifying_meshes_page>`, especially :ref:`extrusion <extrusion_page>` and :ref:`revolution <revolution_page>`;
+  * by generation of the 3D mesh from the 2D mesh not based on the geometry (:ref:`imported <importing_exporting_meshes_page>` for example); 
+* :ref:`importing and exporting meshes <importing_exporting_meshes_page>` in various formats;
+* :ref:`modifying meshes <modifying_meshes_page>` with a vast array of dedicated operations; 
+* :ref:`creating groups <grouping_elements_page>` of mesh elements;
+* filtering mesh entities (nodes or elements) using :ref:`Filters <filters_page>` functionality for :ref:`creating groups <grouping_elements_page>` and applying :ref:`mesh modifications <modifying_meshes_page>`;
+* :ref:`viewing meshes <viewing_meshes_overview_page>` in the VTK viewer and :ref:`getting info <mesh_infos_page>` on mesh and its sub-objects;
+* applying to meshes :ref:`Quality Controls <quality_page>`, allowing to highlight important elements;
+* taking various :ref:`measurements <measurements_page>` of the mesh objects.
+
+There is a set of :ref:`tools <tools_page>` plugged-in the module to extend the basic functionality listed above.
+
+Almost all mesh module functionalities are accessible via :ref:`smeshpy_interface_page`.
+
+It is possible to use the variables predefined in :ref:`Salome notebook <using_notebook_mesh_page>` to set parameters of operations.
+
+Mesh module preferences are described in the :ref:`mesh_preferences_page` section of SALOME Mesh Help.
+
+.. image:: ../images/image7.jpg
+       :align: center 
+
+.. centered::
+       Example of MESH module usage for engineering tasks
+
+
+**Table of Contents**
+
+.. toctree::
+   :titlesonly:
+   :maxdepth: 3
+
+   about_meshes
+   modifying_meshes
+   grouping_elements
+   about_filters
+   about_quality_controls
+   measurements
+   viewing_meshes_overview
+   smeshpy_interface
+   tools       
+   mesh_preferences
+   using_notebook_smesh_page
diff --git a/doc/salome/gui/SMESH/input/length.doc b/doc/salome/gui/SMESH/input/length.doc
deleted file mode 100644 (file)
index e821029..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
-
-\page length_page Length
-
-\n Length quality control criterion returns a value of length of
-edge.
-
-\image html length-crit.png
-
-<br><b>See Also</b> a sample TUI Script of a  
-\ref tui_length_1d "Length quality control" operation.  
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/length.rst b/doc/salome/gui/SMESH/input/length.rst
new file mode 100644 (file)
index 0000000..a873984
--- /dev/null
@@ -0,0 +1,13 @@
+.. _length_page:
+
+******
+Length
+******
+
+Length quality control criterion returns a value of length of edge.
+
+.. image:: ../images/length-crit.png
+       :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_length_1d` filter.  
+
diff --git a/doc/salome/gui/SMESH/input/length_2d.doc b/doc/salome/gui/SMESH/input/length_2d.doc
deleted file mode 100644 (file)
index b3599ae..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
-
-\page length_2d_page Length 2D
-
-\n This quality control criterion consists of calculation of length of
-the links between corner nodes of mesh faces.
-
-<em>To apply the Length 2D quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer. </li>
-
-<li>Choose <b>Controls > Face Controls > Length 2D</b> or click
-<em>"Length 2D"</em> button in the toolbar. 
-
-\image html image34.png
-<center><em>"Length 2D" button</em></center>
-
-Your mesh will be displayed in the viewer with links colored according
-to the applied mesh quality control criterion:
-
-\image html length2d.png
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_length_2d "Length 2D quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/length_2d.rst b/doc/salome/gui/SMESH/input/length_2d.rst
new file mode 100644 (file)
index 0000000..7a1f811
--- /dev/null
@@ -0,0 +1,23 @@
+.. _length_2d_page:
+
+*********
+Length 2D
+*********
+
+This quality control criterion consists of calculation of length of the links between corner nodes of mesh faces.
+
+*To apply the Length 2D quality criterion to your mesh:*
+
+.. |img| image:: ../images/image34.png
+
+#. Display your mesh in the viewer. 
+#. Choose **Controls > Face Controls > Length 2D** or click *"Length 2D"* button |img| in the toolbar. 
+
+
+Your mesh will be displayed in the viewer with links colored according to the applied mesh quality control criterion:
+
+.. image:: ../images/length2d.png
+       :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_length_2d` filter.
diff --git a/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc b/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.doc
deleted file mode 100644 (file)
index 3dfec30..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-
-\page make_2dmesh_from_3d_page Generate boundary elements
-
-\n This functionality allows to generate mesh elements on the borders of
-elements of a higher dimension, for example, to create 2D elements
-around a block of 3D elements as in the following figure.
-
-\image html 2d_from_3d_example.png "Missing 2D elements were generated"
-
-<em>To generate border elements:</em>
-<ol>
-<li>Select a mesh or group in the Object Browser or in the 3D Viewer</li>
-<li>From the Modification menu choose "Create boundary elements"
-item, or click "Create boundary elements" button in the toolbar
-
-\image html 2d_from_3d_ico.png "Create boundary elements icon"
-
-The following dialog box will appear:
-\image html 2d_from_3d_dlg.png "Create boundary elements dialog box".
-</li>
-<li>Check in the dialog box one of two radio buttons corresponding to
-the type of operation you would like to perform.</li>
-<li>Fill the other fields available in the dialog box.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to perform the operation.</li>
-</ol>
-
-\n "Create boundary elements" dialog allows creation of boundary elements
-of two types.
-<ul>
-<li><b>2D from 3D</b> creates missing mesh faces on free facets of volume elements</li>
-<li><b>1D from 2D</b> creates missing mesh edges on free edges of mesh faces</li>
-</ul>
-Here a <em>free facet</em> means a facet shared by only one volume, a <em>free edge</em>
-means an edge shared by only one mesh face.
-
-In this dialog:
-<ul>
-<li>specify the <b>Target</b> mesh, where the boundary elements will
-  be created.
-  <ul>
-  <li><b>This mesh</b> adds elements in the selected mesh.</li>
-  <li><b>New mesh</b> adds elements to a new mesh. The new mesh appears
-    in the Object Browser with the name that you can change in the adjacent box. </li>
-  </ul></li>
-<li>activate <b>Copy source mesh</b> checkbox to copy all elements of
-the selected mesh to the new mesh, else the new mesh will contain only
-boundary elements (old and created by this operation).</li>
-<li>activate <b>Create group</b> checkbox to create a group to which
-  all the boundary elements (old and new) are added. The new group appears
-  in the Object Browser with the name that you can change in the adjacent box. </li>
-</ul>
-<br><b>See Also</b> a sample TUI Script of a \ref tui_make_2dmesh_from_3d "Create boundary elements" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst b/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst
new file mode 100644 (file)
index 0000000..a88c20f
--- /dev/null
@@ -0,0 +1,55 @@
+.. _make_2dmesh_from_3d_page:
+
+**************************
+Generate boundary elements
+**************************
+
+This functionality allows to generate mesh elements on the borders of elements of a higher dimension, for example, to create 2D elements around a block of 3D elements as in the following figure.
+
+.. image:: ../images/2d_from_3d_example.png
+       :align: center
+
+.. centered::
+       Missing 2D elements were generated
+
+
+*To generate border elements:*
+
+.. |img| image:: ../images/2d_from_3d_ico.png
+
+#. Select a mesh or group in the Object Browser or in the 3D Viewer
+#. From the **Modification** menu choose **Create boundary elements** item, or click "Create boundary elements" button |img| in the toolbar
+
+   The following dialog box will appear:
+
+       .. image:: ../images/2d_from_3d_dlg.png 
+               :align: center
+
+       .. centered::
+                Create boundary elements dialog box
+
+#. Check in the dialog box one of two radio buttons corresponding to the type of operation you would like to perform.
+#. Fill the other fields available in the dialog box.
+#. Click the **Apply** or **Apply and Close** button to perform the operation.
+
+*Create boundary elements* dialog allows creation of boundary elements of two types.
+
+* **2D from 3D** creates missing mesh faces on free facets of volume elements
+* **1D from 2D** creates missing mesh edges on free edges of mesh faces
+
+Here a **free facet** means a facet shared by only one volume, a **free edge**
+means an edge shared by only one mesh face.
+
+In this dialog:
+
+* specify the **Target** mesh, where the boundary elements will be created.
+  
+       * **This mesh** adds elements in the selected mesh.
+       * **New mesh** adds elements to a new mesh. The new mesh appears in the Object Browser with the name that you can change in the adjacent box. 
+  
+* activate **Copy source mesh** checkbox to copy all elements of the selected mesh to the new mesh, else the new mesh will contain only boundary elements (old and created by this operation).
+* activate **Create group** checkbox to create a group to which all the boundary elements (old and new) are added. The new group appears in the Object Browser with the name that you can change in the adjacent box. 
+
+**See Also** a sample TUI Script of a :ref:`tui_make_2dmesh_from_3d` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/max_element_length_2d.doc b/doc/salome/gui/SMESH/input/max_element_length_2d.doc
deleted file mode 100644 (file)
index e4e2ce9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*!
-
-\page max_element_length_2d_page Element Diameter 2D
-
-\n This quality control criterion consists in calculation of the maximal length of
-edges and diagonals of 2D mesh elements (triangles and quadrangles). For polygons
-the value is always zero.
-
-<em>To apply the Element Diameter 2D quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer. </li>
-
-<li>Choose <b>Controls > Face Controls > Element Diameter 2D</b> or click
-<em>"Element Diameter 2D"</em> button in the toolbar. 
-
-\image html image42.png
-<center><em>"Element Diameter 2D" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored according to the
-applied mesh quality control criterion:
-
-\image html max_element_length_2d.png
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_max_element_length_2d "Element Diameter 2D quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/max_element_length_2d.rst b/doc/salome/gui/SMESH/input/max_element_length_2d.rst
new file mode 100644 (file)
index 0000000..6e2fa03
--- /dev/null
@@ -0,0 +1,21 @@
+.. _max_element_length_2d_page:
+
+*******************
+Element Diameter 2D
+*******************
+
+This quality control criterion consists in calculation of the maximal length of edges and diagonals of 2D mesh elements (triangles and quadrangles). For polygons the value is always zero.
+
+*To apply the Element Diameter 2D quality criterion to your mesh:*
+
+.. |img| image:: ../images/image42.png
+
+#. Display your mesh in the viewer. 
+#. Choose **Controls > Face Controls > Element Diameter 2D** or click *"Element Diameter 2D"* button |img| in the toolbar. 
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/max_element_length_2d.png
+               :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_max_element_length_2d` filter.
diff --git a/doc/salome/gui/SMESH/input/max_element_length_3d.doc b/doc/salome/gui/SMESH/input/max_element_length_3d.doc
deleted file mode 100644 (file)
index 837f6aa..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*!
-
-\page max_element_length_3d_page Element Diameter 3D
-
-\n This quality control criterion consists in calculation of the maximal length of
-edges and diagonals of 3D mesh elements (tetrahedrons, pyramids, etc). For polyhedra
-the value is always zero. 
-
-<em>To apply the Element Diameter 3D quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer. </li>
-
-<li>Choose <b>Controls > Volume Controls > Element Diameter 3D</b> or click
-<em>"Element Diameter 3D"</em> button in the toolbar. 
-
-\image html image43.png
-<center><em>"Element Diameter 3D" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored according to the
-applied mesh quality control criterion:
-
-\image html max_element_length_3d.png
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_max_element_length_3d "Element Diameter 3D quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/max_element_length_3d.rst b/doc/salome/gui/SMESH/input/max_element_length_3d.rst
new file mode 100644 (file)
index 0000000..9e2adb8
--- /dev/null
@@ -0,0 +1,22 @@
+.. _max_element_length_3d_page:
+
+*******************
+Element Diameter 3D
+*******************
+
+This quality control criterion consists in calculation of the maximal length of edges and diagonals of 3D mesh elements (tetrahedrons, pyramids, etc). For polyhedra the value is always zero. 
+
+*To apply the Element Diameter 3D quality criterion to your mesh:*
+
+.. |img| image:: ../images/image43.png
+
+#. Display your mesh in the viewer. 
+#. Choose **Controls > Volume Controls > Element Diameter 3D** or click *"Element Diameter 3D"* button |img| in the toolbar. 
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/max_element_length_3d.png
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_max_element_length_3d` filter.
diff --git a/doc/salome/gui/SMESH/input/max_element_volume_hypo.doc b/doc/salome/gui/SMESH/input/max_element_volume_hypo.doc
deleted file mode 100644 (file)
index 1dd4591..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
-
-\page max_element_volume_hypo_page Max Element Volume hypothesis
-
-\n <b>Max Element Volume </b> hypothesis is applied for meshing of 3D objects
-composing your geometrical object. Definition of this hypothesis
-consists of setting the <b>maximum volume</b> of 3D meshing elements
-(depending on the chosen meshing algorithm it can be \b hexahedrons or
-\b tetrahedrons), which will compose the mesh of these 3D objects.
-
-\image html a-maxelvolume.png
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_max_element_volume "Maximum Element Volume hypothesis" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/max_element_volume_hypo.rst b/doc/salome/gui/SMESH/input/max_element_volume_hypo.rst
new file mode 100644 (file)
index 0000000..5f835fc
--- /dev/null
@@ -0,0 +1,14 @@
+.. _max_element_volume_hypo_page:
+
+*****************************
+Max Element Volume hypothesis
+*****************************
+
+**Max Element Volume** hypothesis is applied for meshing of 3D objects composing your geometrical object. Definition of this hypothesis consists of setting the **maximum volume** of 3D meshing elements (depending on the chosen meshing algorithm it can be **hexahedrons** or **tetrahedrons**), which will compose the mesh of these 3D objects.
+
+.. image:: ../images/a-maxelvolume.png
+       :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_max_element_volume` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/measurements.doc b/doc/salome/gui/SMESH/input/measurements.doc
deleted file mode 100644 (file)
index bfedbe0..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*!
-
-\page measurements_page Measurements
-
-Mesh module provides the possibility to perform different measurements
-of the selected mesh data.
-
-All measurement operations are available via \b Measurements
-top-level menu. Access to the measurements operations is
-implemented via a single dialog box, where each operation is represented
-as a separate tab page.
-
-\section min_distance_anchor Minimum Distance
-
-This operation allows measuring the distance between two objects.
-Currently only node-to-node and node-to-origin operations are
-available, but this operation will be extended in the future to support
-other mesh objects - elements, meshes, sub-meshes and groups.
-
-To start <b>Minimum Distance</b> operation, select <b>Minimum Distance</b>
-tab in \b Measurements dialog.
-
-\image html min_distance.png
-
-Choose the first and the second target by
-switching the corresponding radio buttons, then select the objects the distance
-between which is to be calculated (or input their IDs directly 
-in case of nodes/elements) and press \b Compute button.
-
-The following targets are supported:
-- \b Node: single mesh node;
-- \b Element: single mesh element (not available in this version);
-- \b Object: mesh, sub-mesh or group object (not available in this
-version);
-- \b Origin: origin of the global co-ordinate system.
-
-The result will be shown in the bottom area of the dialog. In addition, a simple
-preview will be shown in the 3D viewer.
-
-\image html min_distance_preview.png
-
-\section bounding_box_anchor Bounding Box
-
-This operation allows calculating the bounding box of the selected
-object(s).
-
-To start <b>Bounding Box</b> operation, select <b>Bounding Box</b>
-tab in \b Measurements dialog.
-
-\image html bnd_box.png
-
-Choose the required type of the object by switching the corresponding radio button, select the object(s) and press \em Compute button.
-
-The following types of input are available:
-- \b Objects: one or several mesh, sub-mesh or group objects;
-- \b Nodes: a set of mesh nodes;
-- \b Elements: a set of mesh elements.
-
-The result of calculation will be shown in the bottom area of the
-dialog. In addition, a simple preview will be shown in the 3D viewer.
-
-\image html bnd_box_preview.png
-
-\section basic_properties_anchor Basic Properties
-
-This operation provides calculation of length, area or volume for the the selected object:
-- \b Length is calculated as a sum of lengths of all 1D elements;
-- \b Area is a sum of areas of all 2D elements
-- \b Volume is a sum of volumes of all 3D elements. 
-
-To start a <b>Basic Properties</b> calculation, select <b>Length</b>, <b>Area</b> or <b>Volume</b> item.
-
-\image html basic_props.png
-
-In the dialog box select the required type of calculation (length, area or volume) and the object (mesh, sub-mesh or group) and press \b Compute button.
-
-The result of calculation will be shown in the bottom area of the dialog.
-
-\note
-- If the mesh consists of 3D elements only, its "length" and "area" will be 0.
-- As calculation result is a sum of lengths, areas and volumes of all mesh elements, the
-  duplication is not taken into account; i.e. all duplicated elements
-  (elements built on the same set of nodes) will be included into the result.
-- Similarly, intersection of elements is not taken into account.
-
-<b>See Also</b> a sample TUI Script of 
-\ref tui_measurements_page "Measurement operations".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/measurements.rst b/doc/salome/gui/SMESH/input/measurements.rst
new file mode 100644 (file)
index 0000000..ed1426a
--- /dev/null
@@ -0,0 +1,89 @@
+.. _measurements_page:
+
+************
+Measurements
+************
+
+Mesh module provides the possibility to perform different measurements of the selected mesh data.
+
+All measurement operations are available via **Measurements** top-level menu. Access to the measurements operations is implemented via a single dialog box, where each operation is represented as a separate tab page.
+
+.. _min_distance_anchor:
+
+Minimum Distance
+################
+
+This operation allows measuring the distance between two objects. Currently only node-to-node and node-to-origin operations are available, but this operation will be extended in the future to support other mesh objects - elements, meshes, sub-meshes and groups.
+
+To start **Minimum Distance** operation, select **Minimum Distance** tab in **Measurements** dialog.
+
+.. image:: ../images/min_distance.png
+       :align: center
+
+Choose the first and the second target by switching the corresponding radio buttons, then select the objects the distance between which is to be calculated (or input their IDs directly in case of nodes/elements) and press **Compute** button.
+
+The following targets are supported:
+
+* **Node:** single mesh node;
+* **Element:** single mesh element (not available in this version);
+* **Object:** mesh, sub-mesh or group object (not available in this version);
+* **Origin:** origin of the global co-ordinate system.
+
+The result will be shown in the bottom area of the dialog. In addition, a simple preview will be shown in the 3D viewer.
+
+.. image:: ../images/min_distance_preview.png
+       :align: center
+
+.. _bounding_box_anchor:
+
+Bounding Box
+############
+
+This operation allows calculating the bounding box of the selected object(s).
+
+To start **Bounding Box** operation, select **Bounding Box** tab in **Measurements** dialog.
+
+.. image:: ../images/bnd_box.png
+       :align: center
+
+Choose the required type of the object by switching the corresponding radio button, select the object(s) and press *Compute* button.
+
+The following types of input are available:
+
+* **Objects:** one or several mesh, sub-mesh or group objects;
+* **Nodes:** a set of mesh nodes;
+* **Elements:** a set of mesh elements.
+
+The result of calculation will be shown in the bottom area of the dialog. In addition, a simple preview will be shown in the 3D viewer.
+
+.. image:: ../images/bnd_box_preview.png
+       :align: center
+
+.. _basic_properties_anchor:
+
+Basic Properties
+################
+
+This operation provides calculation of length, area or volume for the the selected object:
+
+* **Length** is calculated as a sum of lengths of all 1D elements;
+* **Area** is a sum of areas of all 2D elements
+* **Volume** is a sum of volumes of all 3D elements. 
+
+To start a **Basic Properties** calculation, select **Length**, **Area** or **Volume** item.
+
+.. image:: ../images/basic_props.png
+       :align: center
+
+In the dialog box select the required type of calculation (length, area or volume) and the object (mesh, sub-mesh or group) and press **Compute** button.
+
+The result of calculation will be shown in the bottom area of the dialog.
+
+.. note::
+       * If the mesh consists of 3D elements only, its "length" and "area" will be 0.
+       * As calculation result is a sum of lengths, areas and volumes of all mesh elements, the duplication is not taken into account; i.e. all duplicated elements (elements built on the same set of nodes) will be included into the result.
+       * Similarly, intersection of elements is not taken into account.
+
+**See Also** a sample TUI Script of :ref:`tui_measurements_page`.
+
+
diff --git a/doc/salome/gui/SMESH/input/merging_elements.doc b/doc/salome/gui/SMESH/input/merging_elements.doc
deleted file mode 100644 (file)
index 6236ad0..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-
-\page merging_elements_page Merging Elements
-
-\n This functionality allows to merge coincident elements of a
-mesh. Two elements are considered coincident if they are based on the
-same set of nodes.
-
-\image html mergeelems_ico.png "Merge elements menu button"
-
-To merge elements choose in the main menu \b Modification -> \b Transformation
--> <b>Merge elements</b> item. The following dialog box shall
-appear:
-
-\image html mergeelems_auto.png
-
-In this dialog:
-<ul>
-  <li>\b Name is the name of the mesh object whose elements will be
-    merged.</li> 
-  <li>\b Automatic or \b Manual Mode allows choosing how the elements
-    are processed. In the \b Automatic Mode all elements created on
-    the same nodes will be merged. In \b Manual mode you can adjust
-    groups of coincident elements detected by the program.
-
-    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 found
-    in the selected object.</li>
-  <li><b>Coincident elements</b> is a list of groups of elements for
-    merging. After the operation all elements of each group will
-    be united into one element. The first element of a group is kept and
-    the others are removed.
-  <li>\b Remove button deletes the selected group from the list.</li>
-  <li>\b Add button adds to the list a group of elements selected in the
-    viewer with pressed "Shift" key.</li>
-  <li><b>Select all</b> check-box selects all groups.</li>
-  <li><b>Show double elements IDs</b> check-box shows/hides identifiers of
-    elements of the selected groups in the 3D viewer.</li>
-  <li><b>Edit selected group of coincident elements</b> list allows
-    editing the selected group:
-    <br><br>
-    \image html add.png
-    <center>adds to the group the elements selected in the viewer.</center>
-    <br>
-    \image html remove.png
-    <center>removes the selected elements from the group.</center>
-    <br>
-    \image html sort.png
-    <center>moves the selected element to the first position in the
-      group in order to keep it in the mesh.</center>
-    <br>
-  </li>
-</ul>
-  <li>To confirm your choice click \b Apply or <b>Apply and Close</b> button.</li>
-</ul>
-
-In this picture you see a triangle which coincides with one of the
-elements of the mesh. After we apply <b>Merge Elements</b> functionality, the
-triangle will be completely merged with the mesh.
-
-\image html meshtrianglemergeelem1.png
-
-<br><b>See Also</b> a sample TUI Script of a
-\ref tui_merging_elements "Merge Elements" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/merging_elements.rst b/doc/salome/gui/SMESH/input/merging_elements.rst
new file mode 100644 (file)
index 0000000..43a2709
--- /dev/null
@@ -0,0 +1,66 @@
+.. _merging_elements_page:
+
+****************
+Merging Elements
+****************
+
+This functionality allows to merge coincident elements of a mesh. Two elements are considered coincident if they are based on the same set of nodes.
+
+.. image:: ../images/mergeelems_ico.png
+       :align: center
+
+.. centered::
+       *"Merge elements"* menu button
+
+To merge elements choose in the main menu **Modification** -> **Transformation** -> **Merge elements** item. The following dialog box shall appear:
+
+.. image:: ../images/mergeelems_auto.png
+       :align: center
+
+In this dialog:
+
+       * **Name** is the name of the mesh object whose elements will be merged. 
+       * **Automatic** or **Manual** Mode allows choosing how the elements are processed. In the **Automatic** Mode all elements created on the same nodes will be merged. In **Manual** mode you can adjust groups of coincident elements detected by the program.
+
+         If the **Manual** Mode is selected, additional controls are available:
+
+               .. image:: ../images/mergeelems.png
+                       :align: center
+     
+                                  
+               * **Detect** button generates the list of coincident elements found in the selected object.
+               * **Coincident elements** is a list of groups of elements for merging. After the operation all elements of each group will be united into one element. The first element of a group is kept and the others are removed.
+               * **Remove** button deletes the selected group from the list.
+               * **Add** button adds to the list a group of elements selected in the viewer with pressed "Shift" key.
+               * **Select all** check-box selects all groups.
+               * **Show double elements IDs** check-box shows/hides identifiers of elements of the selected groups in the 3D viewer.
+               * **Edit selected group of coincident elements** list allows editing the selected group:
+    
+                        .. image:: ../images/add.png
+                           :align: center
+
+                       * adds to the group the elements selected in the viewer.
+    
+                       .. image:: ../images/remove.png
+                           :align: center
+
+                       * removes the selected elements from the group.
+    
+                        .. image:: ../images/sort.png
+                           :align: center
+
+                       * moves the selected element to the first position in the group in order to keep it in the mesh.
+    
+  
+
+       * To confirm your choice click **Apply** or **Apply and Close** button.
+
+
+In the following picture you see a triangle which coincides with one of the elements of the mesh. After we apply **Merge Elements** functionality, the triangle will be completely merged with the mesh.
+
+.. image:: ../images/meshtrianglemergeelem1.png
+       :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_merging_elements` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/merging_nodes.doc b/doc/salome/gui/SMESH/input/merging_nodes.doc
deleted file mode 100644 (file)
index 872f9ee..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*!
-
-\page merging_nodes_page Merging nodes
-
-This functionality allows user to detect groups of coincident nodes
-with specified tolerance; each group of the coincident nodes can be
-then converted to the single node.
-
-\image html mergenodes_ico.png "Merge nodes menu button"
-
-<em>To merge nodes of your mesh:</em>
-<ol>
-<li>Choose \b Modification -> \b Transformation -> <b>Merge nodes</b>
-  menu item. The following dialog box shall appear:</li>
-<br>
-\image html mergenodes_auto.png
-<br>
-<ul>
-<li>\b Name is the name of the mesh whose nodes will be merged.</li>
-<li>\b Automatic or \b Manual mode allows choosing how the nodes are
-  processed. In \b Manual mode you can adjust groups of coincident nodes
-  detected by the program and/or select any nodes to be merged.</li>
-<li>\b Tolerance is a maximum distance between nodes sufficient for
-merging.</li>
-<li>Activation of <b>No merge of corner and medium nodes of quadratic
-    cells</b> check-box prevents merging medium nodes of quadratic
-    elements with corner nodes. This check-box is enabled provided
-    that the selected mesh includes quadratic elements.</li>
-<li>Activation of <b>Avoid making holes</b> check-box prevents merging
-    nodes that make elements invalid (but not degenerated) and hence
-    removed. Thus, no holes in place of removed elements appear. </li>
-<li><b>Exclude groups from detection</b> group allows to ignore the
-  nodes which belong to the specified mesh groups. This control is
-  active provided that the mesh includes groups.</li>
-<li><b>Nodes to keep during the merge</b> group allows to specify
-  nodes to keep in the mesh. (By default a node being the first in a
-  group of coincident nodes is kept.) It is possible to either select
-  nodes in the Viewer or select groups of any element type whose nodes
-  will be kept.
-  <ul>
-    <li>\a Selection button activates selection of nodes to keep.</li>
-    <li><b>Nodes</b> button activates selection of nodes in the
-      Viewer.</li>
-    <li><b>Groups and sub-meshes</b> button activates selection of
-      groups and sub-meshes.</li>
-    <li>\b Add button adds selected nodes or groups to the list.</li>
-    <li> Nodes or groups selected in the list can be removed using \b
-      Remove button.</li>
-  </ul>
-</li>
-</ul>
-
-<li><b>Automatic mode:</b>
-<br>
-<ul>
-<li>In the \b Automatic Mode all nodes within the indicated tolerance
-will be merged. The nodes which belong to the groups specified in
-<b>Exclude groups from detection</b> will NOT be taken into account.</li>
-</ul>
-</li><br>
-<li> The \b Manual mode gives you full control of what the operation will do.
-In this mode additional controls are available:
-<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 groups of nodes for
-    merging. Upon \b Apply all nodes of each group will
-    be united into one node. The first node of a group is kept and
-    the others are removed. By default the first node has a lowest ID
-    within the group.
-<ul>
-<li>\b Remove button deletes the selected group from the list.</li>
-<li>\b Add button adds to the list a group of nodes selected in the
-viewer.</li>
-<li><b>Select all</b> check-box selects all groups.</li>
-<li><b>Show double nodes IDs</b> check-box shows/hides identifiers of
-nodes of selected groups in the 3D viewer.</li>
-</ul>
-
-<br>
-\image html mergenodes.png
-<br>
-</li>
-  <li><b>Edit selected group of coincident nodes</b> list allows
-  editing the selected group:
-    <br><br>
-    \image html add.png
-    <center>adds to the group the nodes selected in the viewer.</center>
-    <br>
-    \image html remove.png
-    <center>removes from the group the selected nodes.</center>
-    <br>
-    \image html sort.png
-    <center>moves the selected node to the first position in the
-      group in order to keep it in the mesh.</center><br>
-  </li>
-</ul>
-</li>
-<li>To confirm your choice click \b Apply or <b>Apply and Close</b> button.</li>
-</ol>
-
-\image html merging_nodes1.png 
-<center> The initial object. Nodes 25, 26 and 5 are added to <b>Nodes
-    to keep during the merge</b> group.
-</center>
-<br>
-\image html merging_nodes2.png
-<center> The object has been merged
-</center>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_merging_nodes "Merge Nodes" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/merging_nodes.rst b/doc/salome/gui/SMESH/input/merging_nodes.rst
new file mode 100644 (file)
index 0000000..e7bba52
--- /dev/null
@@ -0,0 +1,86 @@
+.. _merging_nodes_page:
+
+*************
+Merging nodes
+*************
+
+This functionality allows user to detect groups of coincident nodes with specified tolerance; each group of the coincident nodes can be then converted to the single node.
+
+.. image:: ../images/mergenodes_ico.png
+       :align: center
+
+.. centered::
+       *"Merge nodes"* menu button
+
+*To merge nodes of your mesh:*
+
+#. Choose **Modification** -> **Transformation** -> **Merge nodes** menu item. The following dialog box shall appear:
+
+       .. image:: ../images/mergenodes_auto.png
+               :align: center
+
+       * **Name** is the name of the mesh whose nodes will be merged.
+       * **Automatic** or **Manual** mode allows choosing how the nodes are processed. In **Manual** mode you can adjust groups of coincident nodes detected by the program and/or select any nodes to be merged.
+       * **Tolerance** is a maximum distance between nodes sufficient for merging.
+       * Activation of **No merge of corner and medium nodes of quadratic cells** check-box prevents merging medium nodes of quadratic elements with corner nodes. This check-box is enabled provided that the selected mesh includes quadratic elements.
+       * Activation of **Avoid making holes** check-box prevents merging nodes that make elements invalid (but not degenerated) and hence removed. Thus, no holes in place of removed elements appear. 
+       * **Exclude groups from detection** group allows to ignore the nodes which belong to the specified mesh groups. This control is active provided that the mesh includes groups.
+       * **Nodes to keep during the merge** group allows to specify nodes to keep in the mesh. (By default a node being the first in a group of coincident nodes is kept.) It is possible to either select nodes in the Viewer or select groups of any element type whose nodes will be kept.
+  
+               * *Selection* button activates selection of nodes to keep.
+               * **Nodes** button activates selection of nodes in the Viewer.
+               * **Groups and sub-meshes** button activates selection of groups and sub-meshes.
+               * **Add** button adds selected nodes or groups to the list.
+               * Nodes or groups selected in the list can be removed using **Remove** button.
+
+#. **Automatic mode:**
+
+       * In the **Automatic** Mode all nodes within the indicated tolerance will be merged. The nodes which belong to the groups specified in **Exclude groups from detection** will NOT be taken into account.
+
+#. The **Manual** mode gives you full control of what the operation will do. In this mode additional controls are available:
+
+       * **Detect** button generates the list of coincident nodes for the given **Tolerance**.
+       * **Coincident nodes** is a list of groups of nodes for merging. Upon **Apply** all nodes of each group will be united into one node. The first node of a group is kept and the others are removed. By default the first node has a lowest ID within the group.
+
+               * **Remove** button deletes the selected group from the list.
+               * **Add** button adds to the list a group of nodes selected in the viewer.
+               * **Select all** check-box selects all groups.
+               * **Show double nodes IDs** check-box shows/hides identifiers of nodes of selected groups in the 3D viewer.
+
+       .. image:: ../images/mergenodes.png
+               :align: center
+
+
+       * **Edit selected group of coincident nodes** list allows editing the selected group:
+    
+          .. image:: ../images/add.png
+             :align: center
+
+         * adds to the group the nodes selected in the viewer.
+    
+          .. image:: ../images/remove.png
+             :align: center
+
+         * removes from the group the selected nodes.
+    
+          .. image:: ../images/sort.png
+             :align: center
+
+         * moves the selected node to the first position in the group in order to keep it in the mesh.
+
+#. To confirm your choice click **Apply** or **Apply and Close** button.
+
+.. figure:: ../images/merging_nodes1.png 
+   :align: center
+
+   The initial object. Nodes 25, 26 and 5 are added to **Nodes to keep during the merge** group.
+
+.. figure:: ../images/merging_nodes2.png
+   :align: center
+
+   The object has been merged
+
+
+**See Also** a sample TUI Script of a :ref:`tui_merging_nodes` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/mesh_infos.doc b/doc/salome/gui/SMESH/input/mesh_infos.doc
deleted file mode 100644 (file)
index e203752..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*!
-
-\page mesh_infos_page Mesh Information
-
-The user can obtain information about the selected mesh object
-(mesh, sub-mesh or group) using <b>Mesh Information</b> dialog box.
-
-To view the <b>Mesh Information</b>, select your mesh, sub-mesh or
-group in the <b>Object Browser</b> and invoke <b>Mesh Information</b>
-item from the \b Mesh menu or from the context menu, or click <em>"Mesh Information"</em> button
-in the toolbar. 
-
-<center>\image html image49.png
-<em>"Mesh Information" button</em></center>
-
-The <b>Mesh Information</b> dialog box provides three tab pages:
-- <b>\ref advanced_mesh_infos_anchor "Base Info"</b> - to show
-  base and quantitative information about the selected mesh object.
-- <b>\ref mesh_element_info_anchor "Element Info"</b> - to show
-  detailed information about the selected mesh nodes or elements.
-- <b>\ref mesh_addition_info_anchor "Additional Info"</b> - to show
-  additional information available for the selected mesh, sub-mesh or
-  group object. 
-- <b>\ref mesh_quality_info_anchor "Quality Info"</b> - to show
-  overall quality information about the selected mesh, sub-mesh or group
-  object. 
-
-\anchor dump_mesh_infos
-The button \b Dump allows printing the information displayed in the
-dialog box to a .txt file. The dialog for choosing a file also allows
-to select which tab pages to dump via four check-boxes. The default state
-of the check-boxes can be changed via \ref mesh_information_pref "Mesh information"
-preferences.
-
-\anchor advanced_mesh_infos_anchor
-<h2>Base Information</h2>
-
-The <b>Base Info</b> tab page of the dialog box provides general
-information on the selected object - mesh, sub-mesh or mesh group:
-name, type, total number of nodes and elements separately for each
-type: 0D elements, edges, faces, volumes, balls.
-
-<center>\image html advanced_mesh_infos.png
-<em>"Base Info" page</em></center>
-
-\anchor mesh_element_info_anchor
-<h2>Mesh Element Information</h2> 
-
-The <b>Element Info</b> tab page of the dialog box gives detailed
-information about the selected mesh node(s) or element(s), namely:
-
-- For a node:
-  - Node ID;
-  - Coordinates (X, Y, Z);
-  - Connectivity information (connected elements); double click in
-    this line reveals information about these elements;
-  - Position on a shape (for meshes built on a geometry);
-  - Groups information (names of groups the node belongs to).
-
-<center>\image html eleminfo1.png
-<em>"Element Info" page, node information</em></center>
-<br>
-
-- For an element:
-  - Element ID;
-  - Type (triangle, quadrangle, etc.);
-  - Gravity center (X, Y, Z coordinates);
-  - Connectivity information (connected nodes); double click in
-    a line of a node reveals the information about this node;
-  - Quality controls (area, aspect ratio, volume, etc.);
-  - Position on a shape (for meshes built on a geometry);
-  - Groups information (names of groups the element belongs to).
-
-<center>\image html eleminfo2.png 
-<em>"Element Info" page, element information</em></center>
-
-The user can either input the ID of a node or element he wants to
-analyze directly in the dialog box or select the node(s) or element(s) in
-the 3D viewer.
-
-If <b>Show IDs</b> is activated, IDs of selected nodes or elements are
-displayed in the 3D viewer.
-
-\note The information about the groups, to which the node or element belongs,
-can be shown in a short or in a detailed form. By default, for performance
-reasons, this information is shown in a short form (group names
-only). The detailed information on groups can be switched on via
-\ref group_detail_info_pref "Show details on groups in element information tab"
-option of \ref mesh_preferences_page.
-
-\anchor mesh_addition_info_anchor
-<h2>Additional Information</h2> 
-
-The <b>Additional Info</b> tab page of the dialog box provides an
-additional information on the selected object: mesh, sub-mesh or
-group.
-
-For a mesh object, the following information is shown:
-- Name
-- Type: based on geomerty, imported, standalone
-- Shape (if mesh is based on geometry)
-- File (if mesh is imported from the file)
-- Groups
-- Sub-meshes
-
-<center>\image html addinfo_mesh.png
-<em>"Additional Info" page, mesh information</em></center>
-<br>
-
-For a sub-mesh object, the following information is shown:
-- Name
-- Parent mesh
-- Shape
-
-<center>\image html addinfo_submesh.png
-<em>"Additional Info" page, sub-mesh information</em></center>
-<br>
-
-\anchor mesh_addition_info_group_anchor
-For a group object, the following information is shown:
-- Name
-- Parent mesh
-- Type: standalone, group on geometry, group on filter
-- Entity type: node, edge, face, volume
-- Size
-- Color
-- Number of underlying nodes (for non-nodal groups)
-
-<center>\image html addinfo_group.png
-<em>"Additional Info" page, group information</em></center>
-<br>
-
-\note For the performance reasons, the number of underlying nodes is
-computed only by demand. For this, the user should press the "Compute"
-button (see picture). Also, the number of underlying nodes is
-automatically calculated if the size of the group does not exceed
-the \ref nb_nodes_limit_pref "Automatic nodes compute limit"
-preference value (zero value means no limit).
-
-\anchor mesh_quality_info_anchor
-<h2>Quality Information</h2>
-
-The <b>Quality Info</b> tab provides overall information about mesh quality controls  on the selected object - mesh, sub-mesh or mesh group:
-- Name;
-- Nodes information:
-  - Number of free nodes;
-  - Maximal number of elements connected to a node;
-  - Number of double nodes;
-- Edges information:
-  - Number of double edges;
-- Faces information:
-  - Number of double faces;
-  - Number of over-constrained faces;
-  - Aspect Ratio histogram;
-- Volume information:
-  - Number of double volumes;
-  - Number of over-constrained volumes;
-  - Aspect Ratio 3D histogram.
-
-<center>\image html ctrlinfo.png
-<em>"Quality Info" page</em></center>
-
-\note It is possible to change <b>Double nodes tolerance</b>, which
-will be used upon consequent pressing \a Compute button. The default value
-of the tolerance can be set via the
-\ref dbl_nodes_tol_pref "Quality controls" preferences.
-
-\note For performance reasons, all quality control values for big
-meshes are computed only by demand. For this, press the \a Compute
-button. Also, values are automatically computed if the number of nodes
-/ elements does not exceed the
-\ref auto_control_limit_pref "Automatic controls compute limit" set
-via the \ref mesh_information_pref "Mesh information" preferences
-(zero value means that there is no limit).
-
-\note The plot functionality is available only if the GUI module is
-built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when
-building GUI module).
-
-See the \ref tui_viewing_mesh_infos "TUI Example".
-
-*/
-       
diff --git a/doc/salome/gui/SMESH/input/mesh_infos.rst b/doc/salome/gui/SMESH/input/mesh_infos.rst
new file mode 100644 (file)
index 0000000..c12109a
--- /dev/null
@@ -0,0 +1,186 @@
+.. _mesh_infos_page:
+
+****************
+Mesh Information
+****************
+
+The user can obtain information about the selected mesh object (mesh, sub-mesh or group) using **Mesh Information** dialog box.
+
+.. |img| image:: ../images/image49.png
+
+To view the **Mesh Information**, select your mesh, sub-mesh or group in the **Object Browser** and invoke **Mesh Information** item from the **Mesh** menu or from the context menu, or click *"Mesh Information"* button |img| in the toolbar. 
+
+
+The **Mesh Information** dialog box provides three tab pages:
+
+* :ref:`Base Info <advanced_mesh_infos_anchor>` - to show base and quantitative information about the selected mesh object.
+* :ref:`Element Info <mesh_element_info_anchor>` - to show detailed information about the selected mesh nodes or elements.
+* :ref:`Additional Info <mesh_addition_info_anchor>` - to show additional information available for the selected mesh, sub-mesh or group object. 
+* :ref:`Quality Info <mesh_quality_info_anchor>` - to show overall quality information about the selected mesh, sub-mesh or group object. 
+
+.. _dump_mesh_infos:
+
+Dump Mesh Infos
+###############
+
+The button **Dump** allows printing the information displayed in the dialog box to a .txt file. The dialog for choosing a file also allows to select which tab pages to dump via four check-boxes. The default state of the check-boxes can be changed via :ref:`Mesh information <mesh_information_pref>` preferences.
+
+.. _advanced_mesh_infos_anchor:
+
+Base Information
+################
+
+The **Base Info** tab page of the dialog box provides general information on the selected object - mesh, sub-mesh or mesh group: name, type, total number of nodes and elements separately for each type: 0D elements, edges, faces, volumes, balls.
+
+.. image:: ../images/advanced_mesh_infos.png
+       :align: center
+
+.. centered::
+       *"Base Info"* page
+
+.. _mesh_element_info_anchor:
+
+Mesh Element Information
+########################
+
+The **Element Info** tab page of the dialog box gives detailed information about the selected mesh node(s) or element(s), namely:
+
+* For a node:
+       * Node ID;
+       * Coordinates (X, Y, Z);
+       * Connectivity information (connected elements); double click in this line reveals information about these elements;
+       * Position on a shape (for meshes built on a geometry);
+       * Groups information (names of groups the node belongs to).
+
+       .. image:: ../images/eleminfo1.png
+               :align: center
+
+       .. centered::
+               *"Element Info"* page, node information
+
+
+* For an element:
+       * Element ID;
+       * Type (triangle, quadrangle, etc.);
+       * Gravity center (X, Y, Z coordinates);
+       * Connectivity information (connected nodes); double click in a line of a node reveals the information about this node;
+       * Quality controls (area, aspect ratio, volume, etc.);
+       * Position on a shape (for meshes built on a geometry);
+       * Groups information (names of groups the element belongs to).
+
+       .. image:: ../images/eleminfo2.png 
+               :align: center
+
+       .. centered::
+               *"Element Info"* page, element information
+
+The user can either input the ID of a node or element he wants to analyze directly in the dialog box or select the node(s) or element(s) in the 3D viewer.
+
+If **Show IDs** is activated, IDs of selected nodes or elements are displayed in the 3D viewer.
+
+.. note::
+       The information about the groups, to which the node or element belongs, can be shown in a short or in a detailed form. By default, for performance rasons, this information is shown in a short form (group names only). The detailed information on groups can be switched on via :ref:`Show details on groups in element information tab <group_detail_info_pref>` option of :ref:`mesh_preferences_page`.
+
+.. _mesh_addition_info_anchor:
+
+Additional Information
+######################
+
+The **Additional Info** tab page of the dialog box provides an additional information on the selected object: mesh, sub-mesh or group.
+
+For a mesh object, the following information is shown:
+
+* Name
+* Type: based on geomerty, imported, standalone
+* Shape (if mesh is based on geometry)
+* File (if mesh is imported from the file)
+* Groups
+* Sub-meshes
+
+.. image:: ../images/addinfo_mesh.png
+       :align: center
+
+.. centered::
+       *"Additional Info"* page, mesh information
+
+
+For a sub-mesh object, the following information is shown:
+
+* Name
+* Parent mesh
+* Shape
+
+.. image:: ../images/addinfo_submesh.png
+       :align: center
+
+.. centered::
+       *"Additional Info"* page, sub-mesh information
+
+
+.. _mesh_addition_info_group_anchor:
+
+Additional info for Group
+=========================
+
+For a group object, the following information is shown:
+
+* Name
+* Parent mesh
+* Type: standalone, group on geometry, group on filter
+* Entity type: node, edge, face, volume
+* Size
+* Color
+* Number of underlying nodes (for non-nodal groups)
+
+.. image:: ../images/addinfo_group.png
+       :align: center
+
+.. centered::
+       *"Additional Info"* page, group information
+
+
+.. note::
+       For the performance reasons, the number of underlying nodes is computed only by demand. For this, the user should press the "Compute" button (see picture). Also, the number of underlying nodes is automatically calculated if the size of the group does not exceed the :ref:`Automatic nodes compute limit <nb_nodes_limit_pref>` preference value (zero value means no limit).
+
+.. _mesh_quality_info_anchor:
+
+Quality Information
+###################
+
+The **Quality Info** tab provides overall information about mesh quality controls  on the selected object - mesh, sub-mesh or mesh group:
+
+* Name;
+* Nodes information:
+       * Number of free nodes;
+       * Maximal number of elements connected to a node;
+       * Number of double nodes;
+* Edges information:
+       * Number of double edges;
+* Faces information:
+       * Number of double faces;
+       * Number of over-constrained faces;
+       * Aspect Ratio histogram;
+* Volume information:
+       * Number of double volumes;
+       * Number of over-constrained volumes;
+       * Aspect Ratio 3D histogram.
+
+.. image:: ../images/ctrlinfo.png
+       :align: center
+
+.. centered::
+       *"Quality Info"* page
+
+.. note::
+       It is possible to change **Double nodes tolerance**, which will be used upon consequent pressing *Compute* button. The default value of the tolerance can be set via the :ref:`Quality controls <dbl_nodes_tol_pref>` preferences.
+
+.. note::
+       For performance reasons, all quality control values for big meshes are computed only by demand. For this, press the *Compute* button. Also, values are automatically computed if the number of nodes / elements does not exceed the :ref:`Automatic controls compute limit <auto_control_limit_pref>` set via the :ref:`Mesh information <mesh_information_pref>` preferences (zero value means that there is no limit).
+
+.. note::
+       The plot functionality is available only if the GUI module is built with Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when building GUI module).
+
+See the :ref:`TUI Example <tui_viewing_mesh_infos>`.
+
+
+       
diff --git a/doc/salome/gui/SMESH/input/mesh_preferences.doc b/doc/salome/gui/SMESH/input/mesh_preferences.doc
deleted file mode 100644 (file)
index ea83772..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/*!
-
-\page mesh_preferences_page Mesh preferences
-
-In the Mesh module you can set mesh preferences, which can be used right now 
-or in later sessions with this module according to the preferences.
-
-<h2>General Preferences</h2>
-
-\image html pref21.png
-
-\anchor automatic_update_pref
-- <b>Automatic Update</b>
-  - <b>Automatic Update</b> - if activated, the mesh in your
-    viewer will be automatically updated after it's computation, depending on
-    values of additional preferences specified below.
-  - <b>Size limit (elements)</b> - allows specifying the maximum
-    number of elements in the resulting mesh for which the automatic updating
-    of the presentation is performed. This option affects only
-    \ref compute_anchor "Compute" operation. Zero value means "no
-    limit". Default value is 500 000 mesh elements. 
-  - <b>Incremental limit check</b> - if activated,
-    the mesh size limit check is not applied to the total number of
-    elements in the resulting mesh, it is applied iteratively to each entity type
-    in the following order: 0D elements, edges, faces, volumes, balls.
-    At each step the number of entities of a certain type is added to the
-    total number of elements computed at the previous step - if the resulting
-    number of elements does not exceed the size limit, the entities of
-    this type are shown, otherwise the user is warned that some entities are not shown.
-
-\anchor display_mode_pref
-- <b>Display mode</b>
-  - <b>Default display mode</b> - allows to set Wireframe, Shading, Nodes or Shrink
-    \ref display_mode_page "presentation mode" as default.
-
-\anchor quadratic_2d_mode_pref
-- <b>Representation of the 2D quadratic elements</b>
-  - <b>Default mode of the 2D quadratic elements</b> - allows to
-    select either \a Lines or \a Arcs as a default
-    \ref quadratic_2d_mode "representation" of 1D and 2D
-    \ref adding_quadratic_elements_page "quadratic elements".
-  - <b>Maximum Angle</b> - maximum deviation angle used by the
-    application to build arcs.
-
-- <b>Quality Controls</b>
-  - <b>Display entity</b> - if activated, only currently
-    \ref quality_page "controlled" entities are displayed in the
-    viewer and other entities are temporarily hidden. For example if you
-    activate \ref length_page "Length" quality control, which controls
-    the length of mesh segments, then only mesh segments are
-    displayed and faces and volumes are hidden. 
-  - <b>Use precision</b> - if activated, all quality controls
-    will be computed at precision defined by <b>Number of digits after
-    point</b> - as integers by default.
-\anchor dbl_nodes_tol_pref
-  - <b>Double nodes tolerance</b> - defines the maximal distance between two
-    mesh nodes, at which they are considered coincident by
-    \ref double_nodes_control_page "Double nodes" quality control.
-    This value is also used in \ref mesh_quality_info_anchor "Quality Info" 
-    tab page of \ref mesh_infos_page dialog.
-
-- <b>Mesh export</b>
-\anchor export_auto_groups_pref
-  - <b>Automatically create groups for MED export</b> - defines a
-    default state of a corresponding check-box in \ref export_auto_groups
-    "MED Export" dialog.
-\anchor group_export_warning_pref
-  - <b>Show warning when exporting group</b> - if activated, a warning is
-    displayed when exporting a group.
-
-\anchor show_comp_result_pref
-- <b>Mesh computation</b>
-  - <b>Show a computation result notification</b> - allows to
-    select the notification mode about a \ref compute_anchor "mesh computation" result.
-    There are 3 possible modes:
-    - <b>Never</b> - not to show the \ref meshing_result_anchor "result dialog" at all;
-    - <b>Errors only</b> - the result dialog will be shown if there were
-      some errors during a mesh computation;
-    - <b>Always</b> - show the result dialog after each mesh
-      computation. This is a default mode.
-
-\anchor mesh_information_pref
-- <b>Mesh information</b>
-  - <b>Mesh element information</b> - allows changing the way 
-    \ref mesh_element_info_anchor "mesh element information" is shown:
-    - <b>Simple</b> - as a plain text
-    - <b>Tree</b> - in a tree-like form
-\anchor nb_nodes_limit_pref
-  - <b>Automatic nodes compute limit</b> - allows defining the size limit for the
-    \ref mesh_addition_info_group_anchor "mesh groups" for which
-    the number of underlying nodes is calculated
-    automatically. If the group size exceeds the value set in the preferences,
-    the user will have to press \em Compute button explicitly. Zero value
-    means "no limit". By default the value is set to 100 000 mesh elements.
-\anchor auto_control_limit_pref
-  - <b>Automatic controls compute limit</b> - allows defining a
-    maximal number of mesh elements for which the quality controls
-    in the \ref mesh_quality_info_anchor "Quality Information" 
-    tab page are calculated automatically. If the number of mesh elements
-    exceeds the value set in the preferences, it is necessary to press
-    \b Compute button explicitly to calculate a quality measure. Zero value
-    means "no limit". By default the value is set to 3 000 mesh
-    elements.
-\anchor group_detail_info_pref
-  - <b>Show details on groups in element information tab</b> - when
-    this option is switched off (default), only the names of groups, to which the node
-    or element belongs, are shown in the \ref mesh_element_info_anchor "Element Info"
-    tab of "Mesh Information" dialog box. If this option is
-    switched on, the detailed information on groups is shown.
-  - <b>Dump base information</b> - allows dumping base mesh information to the
-    file, see \ref dump_mesh_infos "Mesh Information".
-  - <b>Dump element information</b> - allows dumping element information to the
-    file, see \ref dump_mesh_infos "Mesh Information".
-  - <b>Dump additional information</b> - allows dumping additional mesh
-    information to the file, see \ref dump_mesh_infos "Mesh Information".
-  - <b>Dump controls information</b> - allows dumping quality mesh
-    information to the file, see \ref dump_mesh_infos "Mesh Information".
-
-- <b>Automatic Parameters</b>
-\anchor diagonal_size_ratio_pref
-  - <b>Ratio Bounding Box Diagonal / Max Size</b> - defines the ratio
-    between the bounding box of the meshed object and the Max Size of
-    segments. It is used as a default value of \ref a1d_meshing_hypo_page
-    defining length of segments, especially by 
-    \ref max_length_anchor "Max Size" hypothesis.
-\anchor nb_segments_pref
-  - <b>Default Number of Segments</b> - defines the default number of
-    segments in \ref number_of_segments_anchor "Number of Segments"
-    hypothesis.
-
-- <b>Mesh loading</b>
-  - <b>No mesh loading from study file at hypothesis modification</b> - if
-    activated, the mesh data will not be loaded from the study file
-    when a hypothesis is modified. This allows saving time by omitting
-    loading data of a large mesh that is planned to be recomputed with other parameters.
-
-- <b>Input fields precision</b> - allows to adjust input precision of
-  different parameters. The semantics of the precision values is
-  described in detail in <em>Using input widgets</em> chapter of GUI
-  documentation (Introduction to Salome Platform / Introduction to GUI / 
-  Using input widgets). In brief: \b positive precision value is the
-  maximum allowed number of digits after the decimal point in the
-  fixed-point format; \b nagative precision value is the maximum
-  allowed number of significant digits in mantissa in either the
-  fixed-point or scientific format.
-  - <b>Length precision</b> - allows to adjust input precision of coordinates and dimensions.
-  - <b>Angular precision</b> - allows to adjust input precision of angles.
-  - <b>Length tolerance precision</b> - allows to adjust input precision of tolerance of coordinates and dimensions.
-  - <b>Parametric precision</b> - allows to adjust input precision of parametric values.
-  - <b>Area precision</b> - allows to adjust input precision of mesh element area.
-  - <b>Volume precision</b> - allows to adjust input precision of mesh element volume.
-
-- <b>Preview</b>
-  - <b>Sub-shapes preview chunk size</b> - allows to limit the number
-    of previewed sub-shapes shown in the hypotheses creation dialog boxes,
-    for example "Reverse Edges" parameter of 
-    \ref number_of_segments_anchor "Number of segments" hypothesis.
-
-- <b>Python Dump</b>
-  - <b>Historical python dump</b> - allows switching between
-    \a Historical and \a Snapshot dump mode:
-    - In \a Historical mode, Python Dump script includes all commands
-      performed by SMESH engine.
-    - In \a Snapshot mode, the commands relating to objects removed
-      from the Study as well as the commands not influencing the
-      current state of meshes are excluded from the script.
-
-\anchor mesh_tab_preferences
-<h2>Mesh Preferences</h2>
-
-\b Mesh tab page contains parameters defining the way the mesh is
-displayed in the 3D Viewer.
-
-\image html pref22.png
-
-- <b>Nodes</b> - allows to define default parameters for nodes, which will be applied 
-  for a newly created mesh only. Existing meshes can be customized using 
-  \ref colors_size_page "Properties dialog box" available from the context menu of a mesh.
-  - <b>Color</b> -  allows to select the color of nodes. Click on the
-    downward arrow near the colored line to access to the <b>Select Color</b> dialog box.
-  - <b>Type of marker</b> - allows to define the shape of nodes.
-  - <b>Scale of marker</b> - allows to define the size of nodes.
-
-- <b>Elements</b> - allows to define default parameters for different
-  elements, which will be applied to a newly created mesh
-  only. Existing meshes can be customized using
-  \ref colors_size_page "Properties dialog box" available from the context menu of a mesh.
-  - <b>Surface color</b>  - allows to select the surface color of 2D elements
-    (seen in Shading mode). Click on the downward arrow near the colored line to access to the
-    <b>Select Color</b> dialog box.
-  - <b>Back surface color</b> - allows to select the back surface color
-    of 2D elements. This is useful to differ 2d elements with
-    reversed orientation. Use the slider to select the color generated basing on
-    the <b>Surface color</b> by changing its brightness and saturation.
-  - <b>Volume color</b> - allows to select the surface color of 3D elements
-    (seen in Shading mode).
-  - <b>Reversed volume color</b> - allows to select the surface color
-    of reversed 3D elements. Use the slider to select the color generated basing on
-    the <b>Volume color</b> by changing its brightness and saturation.
-  - <b>0D element color</b> - allows to choose color of 0D mesh elements.
-  - <b>Ball color</b> - allows to choose color of discrete mesh elements (balls).
-  - <b>Outline color</b> - allows to select the color of element borders.
-  - <b>Wireframe color</b> - allows to select the color of borders of
-    elements in the wireframe mode.
-  - <b>Preview color</b> - allows to select the preview color of the
-    elements, which is used while 
-    \ref adding_nodes_and_elements_page "manual creation of elements".
-  - <b>Size of 0D elements</b> - specifies default size of 0D elements.
-  - <b>Size of ball elements</b> - specifies default size of discrete
-    elements (balls).
-  - <b>Scale factor of ball elements</b> - specifies default scale
-    factor of discrete elements (balls) allowing to adjust their size in the Viewer.
-  - <b>Line width</b> - allows to define the width of 1D elements (segments).
-  - <b>Outline width</b> - allows to define the width of borders of
-    2D and 3D elements (shown in the Shading mode).
-  - <b>Shrink coef.</b> - allows to define relative size of a shrunk
-    element compared a non-shrunk element in percents in the shrink mode.
-
-- <b>Groups</b>
-  - <b>Names color</b> - specifies color of group names to be used in
-    the 3D viewer.
-  - <b>Default color</b> - specifies the default group color, which is used 
-    to create a new mesh group (see \ref creating_groups_page "Create Group dialog box").
-
-- <b>Numbering</b> allows to define properties of numbering functionality:
-  - <b>Nodes</b> - specifies text properties of nodes numbering
-    (font family, size, attributes, color).
-  - <b>Elements</b> - same for elements.
-
-- <b>Orientation of Faces</b> - allows to define default properties of
-  orientation vectors. These preferences will be applied to the newly
-  created meshes only; properties of existing meshes can be customized
-  using \ref colors_size_page "Properties dialog box" available from
-  the context menu of a mesh.
-  - \b Color - allows to define the color of orientation vectors;
-  - \b Scale - allows to define the size of orientation vectors;
-  - <b>3D Vector</b> - allows to choose between 2D planar
-    and 3D vectors.
-
-<br><h2>Selection Preferences</h2>
-
-\image html pref23.png
-
-- <b>Selection</b> - performed with mouse-indexing (preselection)
-  and left-clicking on an object, whose appearance changes as defined in
-  the <b>Preferences</b>.
-  - <b>Object color</b> - allows to select the color of mesh (edges and
-    borders of meshes) of the selected entity. Click on the colored line
-    to access to the <b>Select Color</b> dialog box.
-  - <b>Element color</b> - allows to select the color of surface of selected
-    elements (seen in Shading mode). Click on the colored line to access
-    to the <b>Select Color</b> dialog box.
-
-- <b>Preselection</b> - performed with mouse-indexing on an object,
-  whose appearance changes as defined in the <b>Preferences</b>.
-  - <b>Highlight color</b> - allows to select the color of mesh (edges and
-    borders of meshes) of the entity. Click on the colored line to access
-    to the <b>Select Color</b> dialog box.
-
-- <b>Precision</b> - in this menu you can set the value of precision
-  used for <b>Nodes</b>, <b>Elements</b> and <b>Objects</b>.
-
-<br><h2>Scalar Bar Preferences</h2>
-
-\image html pref24.png
-
-\note The following settings are default and will be applied to
-a newly created mesh only. Existing meshes can be customized using
-local \ref scalar_bar_dlg "Scalar Bar Properties dialog box" available
-from the context menu of a mesh.
-
-- <b>Font</b> - in this menu you can set type, face and color of
-  the font of <b>Title</b> and <b>Labels</b>.
-
-- <b>Colors & Labels</b> - in this menu you can set the <b>number of
-  colors</b> and the <b>number of labels</b> in use.
-
-- <b>Orientation</b> - here you can choose between vertical and
-  horizontal orientation of the <b>Scalar Bar</b>.
-
-- <b>Origin & Size Vertical & Horizontal</b> - allows to define
-  placement (<b>X</b> and <b>Y</b>) and lookout (<b>Width</b> and
-  <b>Height</b>) of Scalar Bars.
-  - <b>X</b> - abscissa of the point of origin (from the left side).
-  - <b>Y</b> - ordinate of the origin of the bar (from the bottom).
-
-- <b>Distribution</b> in this menu you can Show/Hide distribution
-  histogram of the values of the <b>Scalar Bar</b> and specify the
-  <b>Coloring Type</b> of the histogram:
-  - <b>Multicolor</b> - the histogram is colored as <b>Scalar Bar</b>.
-  - <b>Monocolor</b> - the histogram is colored as selected with
-    <b>Distribution color</b> selector.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/mesh_preferences.rst b/doc/salome/gui/SMESH/input/mesh_preferences.rst
new file mode 100644 (file)
index 0000000..ccf0f76
--- /dev/null
@@ -0,0 +1,213 @@
+.. _mesh_preferences_page:
+
+****************
+Mesh preferences
+****************
+
+In the Mesh module you can set mesh preferences, which can be used right now or in later sessions with this module according to the preferences.
+
+General Preferences
+###################
+
+.. image:: ../images/pref21.png
+       :align: center
+
+.. _automatic_update_pref:
+
+* **Automatic Update**
+
+  * **Automatic Update** - if activated, the mesh in your viewer will be automatically updated after it's computation, depending on values of additional preferences specified below.
+  * **Size limit (elements)** - allows specifying the maximum number of elements in the resulting mesh for which the automatic updating of the presentation is performed. This option affects only :ref:`Compute <compute_anchor>` operation. Zero value means "no limit". Default value is 500 000 mesh elements. 
+  * **Incremental limit check** - if activated, the mesh size limit check is not applied to the total number of elements in the resulting mesh, it is applied iteratively to each entity type in the following order: 0D elements, edges, faces, volumes, balls. At each step the number of entities of a certain type is added to the total number of elements computed at the previous step - if the resulting number of elements does not exceed the size limit, the entities of this type are shown, otherwise the user is warned that some entities are not shown.
+
+.. _display_mode_pref:
+
+* **Display mode**
+
+  * **Default display mode** - allows to set Wireframe, Shading, Nodes or Shrink :ref:`presentation mode <display_mode_page>` as default.
+
+.. _quadratic_2d_mode_pref:
+
+* **Representation of the 2D quadratic elements**
+
+  * **Default mode of the 2D quadratic elements** - allows to select either *Lines* or *Arcs* as a default :ref:`representation <quadratic_2d_mode>` of 1D and 2D :ref:`quadratic elements <adding_quadratic_elements_page>`.
+  * **Maximum Angle** - maximum deviation angle used by the application to build arcs.
+
+* **Quality Controls**
+
+  * **Display entity** - if activated, only currently :ref:`controlled <quality_page>` entities are displayed in the viewer and other entities are temporarily hidden. For example if you activate :ref:`Length <length_page>` quality control, which controls the length of mesh segments, then only mesh segments are displayed and faces and volumes are hidden. 
+  * **Use precision** - if activated, all quality controls will be computed at precision defined by **Number of digits after point** - as integers by default.
+
+.. _dbl_nodes_tol_pref:
+
+  * **Double nodes tolerance** - defines the maximal distance between two mesh nodes, at which they are considered coincident by :ref:`Double nodes <double_nodes_control_page>` quality control. This value is also used in :ref:`Quality Info <mesh_quality_info_anchor>` tab page of :ref:`Mesh Information <mesh_infos_page>` dialog.
+
+* **Mesh export**
+
+.. _export_auto_groups_pref:
+
+  * **Automatically create groups for MED export** - defines a default state of a corresponding check-box in :ref:`MED Export <export_auto_groups>` dialog.
+
+.. _group_export_warning_pref:
+
+  * **Show warning when exporting group** - if activated, a warning is displayed when exporting a group.
+
+.. _show_comp_result_pref:
+
+* **Mesh computation**
+
+  * **Show a computation result notification** - allows to select the notification mode about a :ref:`mesh computation <compute_anchor>` result. There are 3 possible modes:
+               * **Never** - not to show the :ref:`result dialog <meshing_result_anchor>` at all;
+               * **Errors only** - the result dialog will be shown if there were some errors during a mesh computation;
+               * **Always** - show the result dialog after each mesh computation. This is a default mode.
+
+.. _mesh_information_pref:
+
+* **Mesh information**
+
+  * **Mesh element information** - allows changing the way :ref:`mesh element information <mesh_element_info_anchor>` is shown:
+               * **Simple** - as a plain text
+               * **Tree** - in a tree-like form
+
+.. _nb_nodes_limit_pref:
+
+  * **Automatic nodes compute limit** - allows defining the size limit for the :ref:`mesh groups <mesh_addition_info_group_anchor>` for which the number of underlying nodes is calculated automatically. If the group size exceeds the value set in the preferences, the user will have to press \em Compute button explicitly. Zero value means "no limit". By default the value is set to 100 000 mesh elements.
+
+.. _auto_control_limit_pref:
+
+  * **Automatic controls compute limit** - allows defining a maximal number of mesh elements for which the quality controls in the :ref:`Quality Information <mesh_quality_info_anchor>` tab page are calculated automatically. If the number of mesh elements exceeds the value set in the preferences, it is necessary to press **Compute** button explicitly to calculate a quality measure. Zero value means "no limit". By default the value is set to 3 000 mesh elements.
+
+.. _group_detail_info_pref:
+
+  * **Show details on groups in element information tab** - when this option is switched off (default), only the names of groups, to which the node or element belongs, are shown in the :ref:`Element Info <mesh_element_info_anchor>` tab of "Mesh Information" dialog box. If this option is switched on, the detailed information on groups is shown.
+  * **Dump base information** - allows dumping base mesh information to the file, see :ref:`Mesh Information <dump_mesh_infos>`.
+  * **Dump element information** - allows dumping element information to the file, see :ref:`Mesh Information <dump_mesh_infos>`.
+  * **Dump additional information** - allows dumping additional mesh information to the file, see :ref:`Mesh Information <dump_mesh_infos>`.
+  * **Dump controls information** - allows dumping quality mesh information to the file, see :ref:`Mesh Information <dump_mesh_infos>`.
+
+* **Automatic Parameters**
+
+.. _diagonal_size_ratio_pref:
+       
+  * **Ratio Bounding Box Diagonal / Max Size** - defines the ratio between the bounding box of the meshed object and the Max Size of segments. It is used as a default value of :ref:`1D Meshing Hypotheses <a1d_meshing_hypo_page>` defining length of segments, especially by :ref:`Max Size <max_length_anchor>` hypothesis.
+
+.. _nb_segments_pref:
+
+  * **Default Number of Segments** - defines the default number of segments in :ref:`Number of Segments <number_of_segments_anchor>` hypothesis.
+
+* **Mesh loading**
+
+  * **No mesh loading from study file at hypothesis modification** - if activated, the mesh data will not be loaded from the study file when a hypothesis is modified. This allows saving time by omitting loading data of a large mesh that is planned to be recomputed with other parameters.
+
+* **Input fields precision** - allows to adjust input precision of different parameters. The semantics of the precision values is described in detail in **Using input widgets** chapter of GUI documentation (Introduction to Salome Platform / Introduction to GUI / Using input widgets). In brief: **positive** precision value is the maximum allowed number of digits after the decimal point in the fixed-point format; **negative** precision value is the maximum allowed number of significant digits in mantissa in either the fixed-point or scientific format.
+
+  * **Length precision** - allows to adjust input precision of coordinates and dimensions.
+  * **Angular precision** - allows to adjust input precision of angles.
+  * **Length tolerance precision** - allows to adjust input precision of tolerance of coordinates and dimensions.
+  * **Parametric precision** - allows to adjust input precision of parametric values.
+  * **Area precision** - allows to adjust input precision of mesh element area.
+  * **Volume precision** - allows to adjust input precision of mesh element volume.
+
+* **Preview**
+
+.. _chunk_size_pref:
+
+  * **Sub-shapes preview chunk size** - allows to limit the number of previewed sub-shapes shown in the hypotheses creation dialog boxes, for example "Reverse Edges" parameter of :ref:`Number of Segments <number_of_segments_anchor>` hypothesis.
+
+* **Python Dump**
+
+  * **Historical python dump** - allows switching between *Historical* and *Snapshot* dump mode:
+  * In *Historical* mode, Python Dump script includes all commands performed by SMESH engine.
+  * In *Snapshot* mode, the commands relating to objects removed from the Study as well as the commands not influencing the current state of meshes are excluded from the script.
+
+.. _mesh_tab_preferences:
+
+Mesh Preferences
+################
+
+**Mesh** tab page contains parameters defining the way the mesh is displayed in the 3D Viewer.
+
+.. image:: ../images/pref22.png
+       :align: center
+
+* **Nodes** - allows to define default parameters for nodes, which will be applied for a newly created mesh only. Existing meshes can be customized using :ref:`Properties dialog box <colors_size_page>` available from the context menu of a mesh.
+
+  * **Color** -  allows to select the color of nodes. Click on the downward arrow near the colored line to access to the **Select Color** dialog box.
+  * **Type of marker** - allows to define the shape of nodes.
+  * **Scale of marker** - allows to define the size of nodes.
+
+* **Elements** - allows to define default parameters for different elements, which will be applied to a newly created mesh only. Existing meshes can be customized using :ref:`Properties dialog box <colors_size_page>` available from the context menu of a mesh.
+
+  * **Surface color**  - allows to select the surface color of 2D elements (seen in Shading mode). Click on the downward arrow near the colored line to access to the **Select Color** dialog box.
+  * **Back surface color** - allows to select the back surface color of 2D elements. This is useful to differ 2d elements with reversed orientation. Use the slider to select the color generated basing on the **Surface color** by changing its brightness and saturation.
+  * **Volume color** - allows to select the surface color of 3D elements (seen in Shading mode).
+  * **Reversed volume color** - allows to select the surface color of reversed 3D elements. Use the slider to select the color generated basing on the **Volume color** by changing its brightness and saturation.
+  * **0D element color** - allows to choose color of 0D mesh elements.
+  * **Ball color** - allows to choose color of discrete mesh elements (balls).
+  * **Outline color** - allows to select the color of element borders.
+  * **Wireframe color** - allows to select the color of borders of elements in the wireframe mode.
+  * **Preview color** - allows to select the preview color of the elements, which is used while :ref:`manual creation of elements <adding_nodes_and_elements_page>`.
+  * **Size of 0D elements** - specifies default size of 0D elements.
+  * **Size of ball elements** - specifies default size of discrete elements (balls).
+  * **Scale factor of ball elements** - specifies default scale factor of discrete elements (balls) allowing to adjust their size in the Viewer.
+  * **Line width** - allows to define the width of 1D elements (segments).
+  * **Outline width** - allows to define the width of borders of 2D and 3D elements (shown in the Shading mode).
+  * **Shrink coef.** - allows to define relative size of a shrunk element compared a non-shrunk element in percents in the shrink mode.
+
+* **Groups**
+
+  * **Names color** - specifies color of group names to be used in the 3D viewer.
+  * **Default color** - specifies the default group color, which is used to create a new mesh group (see :ref:`Create Group dialog box <creating_groups_page>`).
+
+* **Numbering** allows to define properties of numbering functionality:
+
+  * **Nodes** - specifies text properties of nodes numbering (font family, size, attributes, color).
+  * **Elements** - same for elements.
+
+* **Orientation of Faces** - allows to define default properties of orientation vectors. These preferences will be applied to the newly created meshes only; properties of existing meshes can be customized using :ref:`Properties dialog box <colors_size_page>` available from the context menu of a mesh.
+
+  * **Color** - allows to define the color of orientation vectors;
+  * **Scale** - allows to define the size of orientation vectors;
+  * **3D Vector** - allows to choose between 2D planar and 3D vectors.
+
+Selection Preferences
+#####################
+
+.. image:: ../images/pref23.png
+       :align: center
+
+* **Selection** - performed with mouse-indexing (preselection) and left-clicking on an object, whose appearance changes as defined in the **Preferences**.
+
+  * **Object color** - allows to select the color of mesh (edges and borders of meshes) of the selected entity. Click on the colored line to access to the **Select Color** dialog box.
+  * **Element color** - allows to select the color of surface of selected elements (seen in Shading mode). Click on the colored line to access to the **Select Color** dialog box.
+
+* **Preselection** - performed with mouse-indexing on an object, whose appearance changes as defined in the **Preferences**.
+
+  * **Highlight color** - allows to select the color of mesh (edges and borders of meshes) of the entity. Click on the colored line to access to the **Select Color** dialog box.
+
+* **Precision** - in this menu you can set the value of precision used for **Nodes**, **Elements** and **Objects**.
+
+Scalar Bar Preferences
+######################
+
+.. image:: ../images/pref24.png
+       :align: center
+
+.. note::
+       The following settings are default and will be applied to a newly created mesh only. Existing meshes can be customized using local :ref:`Scalar Bar Properties dialog box <scalar_bar_dlg>` available from the context menu of a mesh.
+
+* **Font** - in this menu you can set type, face and color of the font of **Title** and **Labels**.
+
+* **Colors & Labels** - in this menu you can set the **number of colors** and the **number of labels** in use.
+
+* **Orientation** - here you can choose between vertical and horizontal orientation of the **Scalar Bar**.
+
+* **Origin & Size Vertical & Horizontal** - allows to define placement (**X** and **Y**) and lookout (**Width** and **Height**) of Scalar Bars.
+       * **X** - abscissa of the point of origin (from the left side).
+       * **Y** - ordinate of the origin of the bar (from the bottom).
+
+* **Distribution** in this menu you can Show/Hide distribution histogram of the values of the **Scalar Bar** and specify the **Coloring Type** of the histogram:
+       * **Multicolor** - the histogram is colored as **Scalar Bar**.
+       * **Monocolor** - the histogram is colored as selected with **Distribution color** selector.
+
+
diff --git a/doc/salome/gui/SMESH/input/mesh_through_point.doc b/doc/salome/gui/SMESH/input/mesh_through_point.doc
deleted file mode 100644 (file)
index 1684404..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-
-\page mesh_through_point_page Moving nodes
-
-\n In mesh you can define a node at a certain point either
-- by movement of the node closest to the point or 
-- by movement of a selected node to the point.
-
-<em>To displace a node:</em>
-<ol>
-<li>From the \b Modification menu choose the <b>Move node</b> item or
-click <em>"Move Node"</em> button in the toolbar.
-
-\image html image67.png
-<center><em>"Move Node" button</em></center>
-
-The following dialog will appear:
-
-\image html meshtopass1.png "Manual node selection"
-<br>
-
-\image html meshtopass2.png "Automatic node selection"
-<br>
-
-</li>
-<li>Specify the way of node selection: manually (the first radio
-  button) or automatically (the second radio button).</li>
-<li>If the manual method is selected, select a node to move (X, Y,
-  Z fields show the original coordinates of the node) or type
-  the node ID.</li>
-<li>Enter the coordinates of the destination point. You can
-  click <b>Update Destination</b> button to set the coordinates of the
-  destination point equal to the coordinates of the node to move.</li>
-<li>Activate \b Preview check-box to show the result of move in the
-  viewer.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm the
-  operation.</li>
-</ol>
-
-\image html moving_nodes1.png "The initial mesh"
-
-\image html moving_nodes2.png "The modified mesh"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_moving_nodes "Moving Nodes" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/mesh_through_point.rst b/doc/salome/gui/SMESH/input/mesh_through_point.rst
new file mode 100644 (file)
index 0000000..0065e24
--- /dev/null
@@ -0,0 +1,59 @@
+.. _mesh_through_point_page:
+
+************
+Moving nodes
+************
+
+In mesh you can define a node at a certain point either
+
+* by movement of the node closest to the point or 
+* by movement of a selected node to the point.
+
+*To displace a node:*
+
+#. From the **Modification** menu choose the **Move node** item or click *"Move Node"* button in the toolbar.
+
+       .. image:: ../images/image67.png
+               :align: center
+
+       .. centered::
+               *"Move Node"* button
+
+   The following dialog will appear:
+
+       .. image:: ../images/meshtopass1.png
+               :align: center
+
+       .. centered::
+               Manual node selection
+
+
+       .. image:: ../images/meshtopass2.png
+               :align: center
+
+       .. centered::
+               Automatic node selection
+
+
+
+#. Specify the way of node selection: manually (the first radio button) or automatically (the second radio button).
+#. If the manual method is selected, select a node to move (X, Y, Z fields show the original coordinates of the node) or type the node ID.
+#. Enter the coordinates of the destination point. You can click **Update Destination** button to set the coordinates of the destination point equal to the coordinates of the node to move.
+#. Activate **Preview** check-box to show the result of move in the viewer.
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+.. image:: ../images/moving_nodes1.png
+       :align: center
+
+.. centered::
+       The initial mesh
+
+.. image:: ../images/moving_nodes2.png
+       :align: center
+
+.. centered::
+       The modified mesh
+
+**See Also** a sample TUI Script of a :ref:`tui_moving_nodes` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/minimum_angle.doc b/doc/salome/gui/SMESH/input/minimum_angle.doc
deleted file mode 100644 (file)
index 4236d65..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*!
-
-\page minimum_angle_page Minimum angle
-
-\n <b>Minimum angle</b> mesh quality criterion consists of calculation of the
-minimum value of angle between two adjacent sides of a 2D meshing
-element (triangle or quadrangle).
-
-<em>To apply the Minimum angle quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Minimum angle</b> or click
-<em>"Minimum Angle"</em> button.
-
-\image html image38.png
-<center><em>"Minimum Angle" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image92.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_minimum_angle "Minimum Angle quality control" operation.  
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/minimum_angle.rst b/doc/salome/gui/SMESH/input/minimum_angle.rst
new file mode 100644 (file)
index 0000000..9eb9ae1
--- /dev/null
@@ -0,0 +1,22 @@
+.. _minimum_angle_page:
+
+*************
+Minimum angle
+*************
+
+**Minimum angle** mesh quality criterion consists of calculation of the minimum value of angle between two adjacent sides of a 2D meshing element (triangle or quadrangle).
+
+*To apply the Minimum angle quality criterion to your mesh:*
+
+.. |img| image:: ../images/image38.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Minimum angle** or click *"Minimum Angle"* button |img|.
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image92.jpg
+               :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_minimum_angle` filter.
+
diff --git a/doc/salome/gui/SMESH/input/modifying_meshes.doc b/doc/salome/gui/SMESH/input/modifying_meshes.doc
deleted file mode 100644 (file)
index 3490916..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-
-\page modifying_meshes_page Modifying meshes
-
-Salome provides a vast specter of mesh modification and
-transformation operations, giving the possibility to:
-
-<ul>
-<li>\subpage adding_nodes_and_elements_page "Add" mesh elements from
-  nodes to polyhedrons at an arbitrary place in the mesh.</li>
-<li>\subpage adding_quadratic_elements_page "Add quadratic" mesh
-  elements from quadratic segments to quadratic hexahedrons at an
-  arbitrary place in the mesh.</li>
-<li>\subpage removing_nodes_and_elements_page "Remove" any existing
-  mesh elements and nodes.</li>
-<li>\subpage translation_page "Translate" in the indicated direction
-  the mesh or some of its elements.</li>
-<li>\subpage rotation_page "Rotate" by the indicated axis and angle
-  the mesh or some of its elements.</li>
-<li>\subpage scale_page "Scale" the mesh or some of its elements.</li>
-<li>\subpage symmetry_page "Mirror" the mesh through a point, a vector
-  or a plane of symmetry.</li>
-<li>\subpage double_nodes_page "Duplicate nodes or/and Elements". 
-  Duplication of nodes can be useful to emulate a crack in the
-  model.</li>
-<li>Unite meshes by \subpage sewing_meshes_page "sewing" free borders,
-  border to side or side elements.</li>
-<li>\subpage merging_nodes_page "Merge Nodes", coincident within the
-  indicated tolerance.</li>
-<li>\subpage merging_elements_page "Merge Elements" based on the same
-  nodes.</li>
-<li>\subpage mesh_through_point_page "Move Nodes" to an arbitrary
-  location with consequent transformation of all adjacent
-  elements.</li>
-<li>\subpage diagonal_inversion_of_elements_page "Invert an edge"
-  between neighboring triangles.</li>
-<li>\subpage uniting_two_triangles_page "Unite two triangles".</li>
-<li>\subpage uniting_set_of_triangles_page "Unite several adjacent triangles".</li>
-<li>\subpage changing_orientation_of_elements_page "Change orientation"
-  of the selected elements.</li>
-<li>\subpage reorient_faces_page "Orient faces" by several means.</li>
-<li>\subpage cutting_quadrangles_page "Cut a quadrangle" into two
-  triangles.</li>
-<li>\subpage split_to_tetra_page "Split" volumic elements into
-  tetrahedra or prisms.</li>
-<li>\subpage split_biquad_to_linear_page "Split bi-quadratic" elements
-  into linear ones without creation of additional nodes.</li>
-<li>\subpage smoothing_page "Smooth" elements, reducung distortions in
-  them by adjusting the locations of nodes.</li>
-<li>Create an \subpage extrusion_page "extrusion" along a vector or by
-  normal to a discretized surface.</li>
-<li>Create an \subpage extrusion_along_path_page "extrusion along a path".</li>
-<li>Create elements by \subpage revolution_page "revolution" of the
-  selected nodes and elements.</li>
-<li>Apply \subpage pattern_mapping_page "pattern mapping".</li>
-<li>\subpage convert_to_from_quadratic_mesh_page "Convert linear mesh to quadratic", 
-  or vice versa.</li>
-<li>\subpage make_2dmesh_from_3d_page "Generate boundary elements".</li>
-<li>\subpage generate_flat_elements_page "Generate flat elements on group boundaries or on faces".</li>
-<li>\subpage cut_mesh_by_plane_page "Cut a tetrahedron mesh by a plane".</li>
-</ul>
-
-\note It is possible to \ref edit_anchor "modify the mesh" of a lower
-dimension before generation of the mesh of a higher dimension.
-
-<p><br></p>
-
-\note It is possible to use the variables defined in the SALOME \b NoteBook
- to specify the numerical parameters used for modification of any object.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/modifying_meshes.rst b/doc/salome/gui/SMESH/input/modifying_meshes.rst
new file mode 100644 (file)
index 0000000..62c4149
--- /dev/null
@@ -0,0 +1,81 @@
+.. _modifying_meshes_page:
+
+****************
+Modifying meshes
+****************
+
+Salome provides a vast specter of mesh modification and transformation operations, giving the possibility to:
+
+* :ref:`Add <adding_nodes_and_elements_page>` mesh elements from nodes to polyhedrons at an arbitrary place in the mesh.
+* :ref:`Add quadratic <adding_quadratic_elements_page>` mesh elements from quadratic segments to quadratic hexahedrons at an arbitrary place in the mesh.
+* :ref:`Remove <removing_nodes_and_elements_page>` any existin" mesh elements and nodes.
+* :ref:`Translate <translation_page>` in the indicated direction the mesh or some of its elements.
+* :ref:`Rotate <rotation_page>` by the indicated axis and angle the mesh or some of its elements.
+* :ref:`Scale <scale_page>` the mesh or some of its elements.
+* :ref:`Mirror <symmetry_page>` the mesh through a point, a vector or a plane of symmetry.
+* :ref:`double_nodes_page`. Duplication of nodes can be useful to emulate a crack in the model.
+* Unite meshes by :ref:`sewing <sewing_meshes_page>` free borders, border to side or side elements.
+* :ref:`Merge Nodes<merging_nodes_page>` coincident within the indicated tolerance.
+* :ref:`Merge Elements <merging_elements_page>` based on the same nodes.
+* :ref:`Move Nodes <mesh_through_point_page>` to an arbitrary location with consequent transformation of all adjacent elements.
+* :ref:`Invert an edge <diagonal_inversion_of_elements_page>` between neighboring triangles.
+* :ref:`Unite two triangles <uniting_two_triangles_page>`.
+* :ref:`Unite several adjacent triangles <uniting_set_of_triangles_page>`.
+* :ref:`Change orientation <changing_orientation_of_elements_page>` of the selected elements.
+* :ref:`Orient faces <reorient_faces_page>` by several means.
+* :ref:`Cut a quadrangle <cutting_quadrangles_page>` into two triangles.
+* :ref:`Split <split_to_tetra_page>` volumic elements into tetrahedra or prisms.
+* :ref:`Split bi-quadratic <split_biquad_to_linear_page>` elements into linear ones without creation of additional nodes.
+* :ref:`Smooth <smoothing_page>` elements, reducung distortions in them by adjusting the locations of nodes.
+* Create an :ref:`extrusion <extrusion_page>` along a vector or by normal to a discretized surface.
+* Create an :ref:`extrusion along a path <extrusion_along_path_page>`.
+* Create elements by :ref:`revolution <revolution_page>` of the selected nodes and elements.
+* Apply :ref:`pattern mapping <pattern_mapping_page>`.
+* :ref:`Convert linear mesh to quadratic <convert_to_from_quadratic_mesh_page>`, or vice versa.
+* :ref:`Generate boundary elements <make_2dmesh_from_3d_page>`.
+* :ref:`generate_flat_elements_page`.
+* :ref:`cut_mesh_by_plane_page`.
+
+
+.. note::
+       It is possible to :ref:`modify the mesh <edit_anchor>` of a lower dimension before generation of the mesh of a higher dimension.
+
+.. note::
+       It is possible to use the variables defined in the SALOME **NoteBook** to specify the numerical parameters used for modification of any object.
+
+
+**Table of Contents**
+
+.. toctree::
+   :titlesonly:
+
+   adding_nodes_and_elements.rst
+   adding_quadratic_elements.rst 
+   removing_nodes_and_elements.rst 
+   translation.rst
+   rotation.rst
+   scale.rst
+   symmetry.rst
+   double_nodes_page.rst 
+   sewing_meshes.rst
+   merging_nodes.rst
+   merging_elements.rst
+   mesh_through_point.rst 
+   diagonal_inversion_of_elements.rst 
+   uniting_two_triangles.rst 
+   uniting_set_of_triangles.rst
+   changing_orientation_of_elements.rst
+   reorient_faces.rst
+   cutting_quadrangles.rst
+   split_to_tetra.rst
+   split_biquad_to_linear.rst
+   smoothing.rst
+   extrusion.rst
+   extrusion_along_path.rst
+   revolution.rst
+   pattern_mapping.rst
+   convert_to_from_quadratic_mesh.rst
+   make_2dmesh_from_3d.rst
+   generate_flat_elements.rst
+   cut_mesh_by_plane.rst
+
diff --git a/doc/salome/gui/SMESH/input/modules.rst b/doc/salome/gui/SMESH/input/modules.rst
new file mode 100644 (file)
index 0000000..35349ee
--- /dev/null
@@ -0,0 +1,523 @@
+########################
+Structured documentation
+########################
+
+.. contents::
+
+.. currentmodule:: smeshBuilder
+
+***************
+Creating meshes
+***************
+
+.. autosummary::
+
+   smeshBuilder.Concatenate
+   smeshBuilder.CopyMesh
+
+Importing and exporting meshes
+==============================
+
+.. autosummary::
+
+   smeshBuilder.CreateMeshesFromUNV
+   smeshBuilder.CreateMeshesFromMED
+   smeshBuilder.CreateMeshesFromSTL
+   smeshBuilder.CreateMeshesFromCGNS
+   smeshBuilder.CreateMeshesFromGMF
+   smeshBuilder.CreateMeshesFromSAUV
+   Mesh.ExportMED
+   Mesh.ExportUNV
+   Mesh.ExportSTL
+   Mesh.ExportCGNS
+   Mesh.ExportDAT
+   Mesh.ExportSAUV
+   Mesh.ExportGMF
+
+
+Constructing meshes
+===================
+
+.. autosummary::
+
+   smeshBuilder.Mesh
+   Mesh.SetName
+   Mesh.SetMeshOrder
+   Mesh.Compute
+   Mesh.Evaluate
+   Mesh.Clear
+   Mesh.GetMesh
+   Mesh.GetShape
+   Mesh.GetComputeErrors
+   Mesh.GetAlgoState
+   Mesh.GetFailedShapes
+   Mesh.GetMeshOrder
+
+Defining Algorithms
+===================
+
+.. autosummary::
+
+   Mesh.Segment
+   Mesh.Triangle
+   Mesh.Quadrangle
+   Mesh.Hexahedron
+   Mesh.Prism
+   Mesh.BodyFitted
+   Mesh.Projection1D
+   Mesh.Projection2D
+   Mesh.Projection1D2D
+   Mesh.Projection3D
+   Mesh.UseExisting1DElements
+   Mesh.UseExisting2DElements
+   Mesh.UseExistingSegments
+   Mesh.UseExistingFaces
+   Mesh.AutomaticTetrahedralization
+   Mesh.AutomaticHexahedralization
+   smesh_algorithm.Mesh_Algorithm
+
+Defining hypotheses
+===================
+
+.. currentmodule:: StdMeshersBuilder
+
+1D Meshing Hypotheses
+---------------------
+
+.. autosummary::
+
+   StdMeshersBuilder_Segment.NumberOfSegments
+   StdMeshersBuilder_Segment.LocalLength
+   StdMeshersBuilder_Segment.MaxSize
+   StdMeshersBuilder_Segment.Arithmetic1D
+   StdMeshersBuilder_Segment.GeometricProgression
+   StdMeshersBuilder_Segment.FixedPoints1D
+   StdMeshersBuilder_Segment.StartEndLength
+   StdMeshersBuilder_Segment.Adaptive
+   StdMeshersBuilder_Segment.Deflection1D
+   StdMeshersBuilder_Segment.AutomaticLength
+   StdMeshersBuilder_Segment_Python.PythonSplit1D
+
+2D Meshing Hypotheses
+---------------------
+
+.. autosummary::
+
+   StdMeshersBuilder_Triangle_MEFISTO.MaxElementArea
+   StdMeshersBuilder_Triangle_MEFISTO.LengthFromEdges
+   StdMeshersBuilder_Quadrangle.QuadrangleParameters
+   StdMeshersBuilder_Quadrangle.QuadranglePreference
+   StdMeshersBuilder_Quadrangle.TrianglePreference
+   StdMeshersBuilder_Quadrangle.Reduced
+   StdMeshersBuilder_Quadrangle.TriangleVertex
+
+Additional Hypotheses
+---------------------
+
+.. autosummary::
+
+   smesh_algorithm.Mesh_Algorithm.ViscousLayers
+   smesh_algorithm.Mesh_Algorithm.ViscousLayers2D
+   StdMeshersBuilder.StdMeshersBuilder_Segment.Propagation
+   StdMeshersBuilder.StdMeshersBuilder_Segment.PropagationOfDistribution
+   StdMeshersBuilder.StdMeshersBuilder_Segment.QuadraticMesh
+
+Constructing sub-meshes
+=======================
+
+.. currentmodule:: smeshBuilder
+
+.. autosummary::
+
+   Mesh.GetSubMesh
+   Mesh.ClearSubMesh
+
+Editing Meshes   
+==============
+
+.. autosummary::
+
+   Mesh.AddHypothesis
+   Mesh.RemoveHypothesis
+   Mesh.RemoveGlobalHypotheses
+   Mesh.GetHypothesisList
+   Mesh.IsUsedHypothesis
+
+*****************
+Grouping elements
+*****************
+
+.. autosummary::
+
+   Mesh.SetAutoColor
+   Mesh.GetAutoColor
+   Mesh.HasDuplicatedGroupNamesMED
+   
+Creating groups
+===============
+
+.. autosummary::
+
+   Mesh.CreateEmptyGroup
+   Mesh.Group
+   Mesh.GroupOnGeom
+   Mesh.GroupOnFilter
+   Mesh.MakeGroupByIds
+   Mesh.MakeGroup
+   Mesh.MakeGroupByCriterion
+   Mesh.MakeGroupByCriteria
+   Mesh.MakeGroupByFilter
+   Mesh.GetGroups
+   Mesh.NbGroups
+   Mesh.GetGroupNames
+   Mesh.GetGroupByName
+
+
+Using operations on groups
+==========================
+
+.. autosummary::
+
+   Mesh.UnionGroups
+   Mesh.UnionListOfGroups
+   Mesh.IntersectGroups
+   Mesh.IntersectListOfGroups
+   Mesh.CutGroups
+   Mesh.CutListOfGroups
+   Mesh.CreateDimGroup
+   Mesh.ConvertToStandalone
+
+Deleting Groups
+===============
+
+.. autosummary::
+
+   Mesh.RemoveGroup
+   Mesh.RemoveGroupWithContents
+
+****************
+Mesh Information
+****************
+
+.. autosummary::
+
+   smeshBuilder.GetMeshInfo
+   Mesh.GetGeometryByMeshElement
+   Mesh.MeshDimension
+   Mesh.GetMeshInfo
+   Mesh.NbNodes
+   Mesh.NbElements
+   Mesh.Nb0DElements
+   Mesh.NbBalls
+   Mesh.NbEdges
+   Mesh.NbEdgesOfOrder
+   Mesh.NbFaces
+   Mesh.NbFacesOfOrder
+   Mesh.NbTriangles
+   Mesh.NbTrianglesOfOrder
+   Mesh.NbBiQuadTriangles
+   Mesh.NbQuadrangles
+   Mesh.NbQuadranglesOfOrder
+   Mesh.NbBiQuadQuadrangles
+   Mesh.NbPolygons
+   Mesh.NbVolumes
+   Mesh.NbVolumesOfOrder
+   Mesh.NbTetras
+   Mesh.NbTetrasOfOrder
+   Mesh.NbHexas
+   Mesh.NbHexasOfOrder
+   Mesh.NbTriQuadraticHexas
+   Mesh.NbPyramids
+   Mesh.NbPyramidsOfOrder
+   Mesh.NbPrisms
+   Mesh.NbPrismsOfOrder
+   Mesh.NbHexagonalPrisms
+   Mesh.NbPolyhedrons
+   Mesh.NbSubMesh
+   Mesh.GetNodesId
+   Mesh.GetElementsId
+   Mesh.GetElementsByType
+   Mesh.GetElementType
+   Mesh.GetElementGeomType
+   Mesh.GetElementShape
+   Mesh.GetSubMeshElementsId
+   Mesh.GetSubMeshNodesId
+   Mesh.GetSubMeshElementType
+   Mesh.GetNodeXYZ
+   Mesh.GetNodeInverseElements
+   Mesh.GetNodePosition
+   Mesh.GetElementPosition
+   Mesh.GetShapeID
+   Mesh.GetShapeIDForElem
+   Mesh.GetElemNbNodes
+   Mesh.GetElemNode
+   Mesh.GetElemNodes
+   Mesh.IsMediumNode
+   Mesh.IsMediumNodeOfAnyElem
+   Mesh.ElemNbEdges
+   Mesh.ElemNbFaces
+   Mesh.GetElemFaceNodes
+   Mesh.GetFaceNormal
+   Mesh.FindElementByNodes
+   Mesh.GetElementsByNodes
+   Mesh.IsPoly
+   Mesh.IsQuadratic
+   Mesh.GetBallDiameter
+   Mesh.BaryCenter
+   Mesh.FindNodeClosestTo
+   Mesh.FindElementsByPoint
+   Mesh.GetPointState
+   Mesh.Dump
+
+******************************
+Quality controls and Filtering
+******************************
+
+.. autosummary::
+
+   smeshBuilder.GetEmptyCriterion
+   smeshBuilder.GetCriterion
+   smeshBuilder.GetFilter
+   smeshBuilder.GetFilterFromCriteria
+   smeshBuilder.GetFunctor
+   Mesh.GetIdsFromFilter
+   Mesh.GetMaxElementLength
+   Mesh.GetAspectRatio
+   Mesh.GetWarping
+   Mesh.GetMinimumAngle
+   Mesh.GetTaper
+   Mesh.GetSkew
+   Mesh.GetMinMax
+   Mesh.IsManifold
+   Mesh.IsCoherentOrientation2D
+
+************
+Measurements
+************
+
+.. autosummary::
+
+   smeshBuilder.MinDistance
+   smeshBuilder.GetMinDistance
+   smeshBuilder.BoundingBox
+   smeshBuilder.GetBoundingBox
+   smeshBuilder.GetLength
+   smeshBuilder.GetArea
+   smeshBuilder.GetVolume
+   Mesh.GetFreeBorders
+   Mesh.MinDistance
+   Mesh.GetMinDistance
+   Mesh.BoundingBox
+   Mesh.GetBoundingBox
+   Mesh.GetFunctor
+   Mesh.FunctorValue
+   Mesh.GetLength
+   Mesh.GetArea
+   Mesh.GetVolume
+
+****************
+Modifying meshes
+****************
+
+.. autosummary::
+
+   smeshBuilder.GetPattern
+   Mesh.GetMeshEditor
+
+Adding nodes and elements
+=========================
+
+.. autosummary::
+
+   Mesh.AddNode
+   Mesh.Add0DElement
+   Mesh.Add0DElementsToAllNodes
+   Mesh.AddBall
+   Mesh.AddEdge
+   Mesh.AddFace
+   Mesh.AddPolygonalFace
+   Mesh.AddQuadPolygonalFace
+   Mesh.AddVolume
+   Mesh.AddPolyhedralVolume
+   Mesh.AddPolyhedralVolumeByFaces
+   Mesh.SetNodeOnVertex
+   Mesh.SetNodeOnEdge
+   Mesh.SetNodeOnFace
+   Mesh.SetNodeInVolume
+   Mesh.SetMeshElementOnShape
+   Mesh.Make2DMeshFrom3D
+   Mesh.MakeBoundaryMesh
+   Mesh.MakeBoundaryElements
+   Mesh.GetLastCreatedNodes
+   Mesh.GetLastCreatedElems
+   Mesh.ClearLastCreated
+
+Removing nodes and elements
+===========================
+
+.. autosummary::
+
+   Mesh.RemoveElements
+   Mesh.RemoveNodes
+   Mesh.RemoveOrphanNodes
+
+Modifying nodes and elements
+============================
+
+.. autosummary::
+
+   Mesh.MoveNode
+   Mesh.MoveClosestNodeToPoint
+   Mesh.MeshToPassThroughAPoint
+   Mesh.ChangeElemNodes
+
+Convert to/from Quadratic Mesh
+==============================
+
+.. autosummary::
+
+   Mesh.ConvertToQuadratic
+   Mesh.ConvertFromQuadratic
+
+Extrusion and Revolution
+========================
+
+.. autosummary::
+
+   Mesh.RotationSweepObjects
+   Mesh.RotationSweep
+   Mesh.RotationSweepObject
+   Mesh.RotationSweepObject1D
+   Mesh.RotationSweepObject2D
+   Mesh.ExtrusionSweepObjects
+   Mesh.ExtrusionSweep
+   Mesh.ExtrusionByNormal
+   Mesh.ExtrusionSweepObject
+   Mesh.ExtrusionSweepObject1D
+   Mesh.ExtrusionSweepObject2D
+   Mesh.AdvancedExtrusion
+   Mesh.ExtrusionAlongPathObjects
+   Mesh.ExtrusionAlongPathX
+   Mesh.ExtrusionAlongPath
+   Mesh.ExtrusionAlongPathObject
+   Mesh.ExtrusionAlongPathObject1D
+   Mesh.ExtrusionAlongPathObject2D
+
+Transforming meshes (Translation, Rotation, Symmetry, Sewing, Merging)
+======================================================================
+
+.. autosummary::
+
+   Mesh.Mirror
+   Mesh.MirrorMakeMesh
+   Mesh.MirrorObject
+   Mesh.MirrorObjectMakeMesh
+   Mesh.Translate
+   Mesh.TranslateMakeMesh
+   Mesh.TranslateObject
+   Mesh.TranslateObjectMakeMesh
+   Mesh.Rotate
+   Mesh.RotateMakeMesh
+   Mesh.RotateObject
+   Mesh.RotateObjectMakeMesh
+   Mesh.FindCoincidentNodes
+   Mesh.FindCoincidentNodesOnPart
+   Mesh.MergeNodes
+   Mesh.FindEqualElements
+   Mesh.MergeElements
+   Mesh.MergeEqualElements
+   Mesh.FindFreeBorders
+   Mesh.FillHole
+   Mesh.FindCoincidentFreeBorders
+   Mesh.SewCoincidentFreeBorders
+   Mesh.SewFreeBorders
+   Mesh.SewConformFreeBorders
+   Mesh.SewBorderToSide
+   Mesh.SewSideElements
+
+Changing orientation of elements
+================================
+
+.. autosummary::
+
+   Mesh.Reorient
+   Mesh.ReorientObject
+   Mesh.Reorient2D
+   Mesh.Reorient2DBy3D
+
+Uniting triangles
+=================
+
+.. autosummary::
+
+   Mesh.DeleteDiag
+   Mesh.TriToQuad
+   Mesh.TriToQuadObject
+
+Cutting elements
+================
+
+.. autosummary::
+
+   Mesh.InverseDiag
+   Mesh.QuadToTri
+   Mesh.QuadToTriObject
+   Mesh.QuadTo4Tri
+   Mesh.SplitQuad
+   Mesh.SplitQuadObject
+   Mesh.BestSplit
+   Mesh.SplitVolumesIntoTetra
+   Mesh.SplitBiQuadraticIntoLinear
+   Mesh.SplitHexahedraIntoPrisms
+   Mesh.SplitQuadsNearTriangularFacets
+   Mesh.SplitHexaToTetras
+   Mesh.SplitHexaToPrisms
+
+Smoothing
+=========
+
+.. autosummary::
+
+   Mesh.Smooth
+   Mesh.SmoothObject
+   Mesh.SmoothParametric
+   Mesh.SmoothParametricObject
+
+Duplication of nodes and elements (to emulate cracks)
+=====================================================
+
+.. autosummary::
+
+   Mesh.DoubleElements
+   Mesh.DoubleNodes
+   Mesh.DoubleNode
+   Mesh.DoubleNodeGroup
+   Mesh.DoubleNodeGroups
+   Mesh.DoubleNodeElem
+   Mesh.DoubleNodeElemInRegion
+   Mesh.DoubleNodeElemGroup
+   Mesh.DoubleNodeElemGroupInRegion
+   Mesh.DoubleNodeElemGroups
+   Mesh.DoubleNodeElemGroupsInRegion
+   Mesh.AffectedElemGroupsInRegion
+   Mesh.DoubleNodesOnGroupBoundaries
+   Mesh.CreateFlatElementsOnFacesGroups
+   
+Renumbering nodes and elements
+==============================
+
+.. autosummary::
+
+   Mesh.RenumberNodes
+   Mesh.RenumberElements
+
+
+*****************
+Auxiliary methods
+*****************
+
+.. autosummary::
+
+   GetName
+   DegreesToRadians
+   New
diff --git a/doc/salome/gui/SMESH/input/numbering.doc b/doc/salome/gui/SMESH/input/numbering.doc
deleted file mode 100644 (file)
index c681373..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-
-\page numbering_page Numbering
-
-<br><h2>Displaying node numbers</h2>
-
-In MESH you can display the ID numbers of all nodes of your mesh in
-the viewer.
-
-<em>To display ID numbers of nodes:</em>
-<ol>
-<li>Display your mesh in the viewer</li>
-<li>Right-click on the mesh in the 3D viewer and from the associated
-pop-up menu choose <b>Numbering > Display Nodes #</b>.</li>
-</ol>
-
-\image html image96.jpg "Displayed node numbers"
-
-<br><h2>Displaying element numbers</h2>
-
-In MESH you can display the ID numbers of all meshing elements
-composing your mesh in the viewer.
-
-<em>To display ID numbers of elements:</em>
-<ol>
-<li>Display your mesh in the viewer</li>
-<li>Right-click on the mesh in the 3D viewer and from the associated
-pop-up menu choose <b>Numbering > Display Elements #</b>.</li>
-</ol>
-
-\image html image95.jpg "Displayed element numbers"
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/numbering.rst b/doc/salome/gui/SMESH/input/numbering.rst
new file mode 100644 (file)
index 0000000..16cc06f
--- /dev/null
@@ -0,0 +1,38 @@
+.. _numbering_page: 
+
+*********
+Numbering
+*********
+
+Displaying node numbers
+#######################
+
+In MESH you can display the ID numbers of all nodes of your mesh in the viewer.
+
+*To display ID numbers of nodes:*
+
+#. Display your mesh in the viewer
+#. Right-click on the mesh in the 3D viewer and from the associated pop-up menu choose **Numbering > Display Nodes #**.
+
+.. image:: ../images/image96.jpg
+       :align: center
+
+.. centered::
+       Displayed node numbers
+
+
+Displaying element numbers
+##########################
+
+In MESH you can display the ID numbers of all meshing elements composing your mesh in the viewer.
+
+*To display ID numbers of elements:*
+
+#. Display your mesh in the viewer
+#. Right-click on the mesh in the 3D viewer and from the associated pop-up menu choose **Numbering > Display Elements #**.
+
+.. image:: ../images/image95.jpg 
+       :align: center
+
+.. centered::
+       Displayed element numbers
diff --git a/doc/salome/gui/SMESH/input/over_constrained_faces.doc b/doc/salome/gui/SMESH/input/over_constrained_faces.doc
deleted file mode 100644 (file)
index acd29bb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*!
-
-\page over_constrained_faces_page Over-constrained faces
-
-\n This mesh quality control highlights faces sharing only one border
-with other faces. In other words, the faces having all their nodes on
-the free border of the 2D mesh are highlighted.
-
-\note The highlighted faces are actually over-constrained only if, at
-the computation time, the boundary conditions on the borders where the
-nodes are located are all Dirichlet boundary conditions.
-
-\image html over_constrained_faces.png
-
-In this picture the over-constrained face is displayed in red.
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_over_constrained_faces "Over-constrained faces" filter.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/over_constrained_faces.rst b/doc/salome/gui/SMESH/input/over_constrained_faces.rst
new file mode 100644 (file)
index 0000000..2ff5bac
--- /dev/null
@@ -0,0 +1,22 @@
+.. _over_constrained_faces_page:
+
+**********************
+Over-constrained faces
+**********************
+
+This mesh quality control highlights faces sharing only one border
+with other faces. In other words, the faces having all their nodes on
+the free border of the 2D mesh are highlighted.
+
+.. note::
+       The highlighted faces are actually over-constrained only if, at the computation time, the boundary conditions on the borders where the nodes are located are all Dirichlet boundary conditions.
+
+.. image:: ../images/over_constrained_faces.png
+       :align: center
+
+.. centered::
+       Over-constrained face is displayed in red
+
+**See Also** a sample TUI Script of a :ref:`tui_over_constrained_faces` filter.  
+
+
diff --git a/doc/salome/gui/SMESH/input/over_constrained_volumes.doc b/doc/salome/gui/SMESH/input/over_constrained_volumes.doc
deleted file mode 100644 (file)
index 7f1ba28..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
-
-\page over_constrained_volumes_page Over-constrained volumes
-
-\n This mesh quality control highlights volumes sharing only one border with other volumes.
-In other words, the volumes having all their nodes on the external border of the mesh are highlighted.
-
-\note The highlighted volumes are actually over-constrained only if, at the computation time, 
-the boundary conditions on the borders where the nodes are located are all Dirichlet boundary conditions.
-
-\image html over_constrained_volumes.png
-
-In this picture the over-constrained volume is displayed in red.
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_over_constrained_volumes "Over-constrained volumes" filter.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/over_constrained_volumes.rst b/doc/salome/gui/SMESH/input/over_constrained_volumes.rst
new file mode 100644 (file)
index 0000000..29c9416
--- /dev/null
@@ -0,0 +1,19 @@
+.. _over_constrained_volumes_page:
+
+************************
+Over-constrained volumes
+************************
+
+This mesh quality control highlights volumes sharing only one border with other volumes.
+In other words, the volumes having all their nodes on the external border of the mesh are highlighted.
+
+.. note::
+       The highlighted volumes are actually over-constrained only if, at the computation time, the boundary conditions on the borders where the nodes are located are all Dirichlet boundary conditions.
+
+.. image:: ../images/over_constrained_volumes.png
+       :align: center
+
+.. centered::
+       Over-constrained volume is displayed in red.
+
+**See Also** a sample TUI Script of a :ref:`tui_over_constrained_volumes` filter.  
diff --git a/doc/salome/gui/SMESH/input/pattern_mapping.doc b/doc/salome/gui/SMESH/input/pattern_mapping.doc
deleted file mode 100644 (file)
index b42795e..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*!
-
-\page pattern_mapping_page Pattern mapping
-
-<br><h2>About patterns</h2>
-
-The pattern describes a mesh to generate: positions of nodes within a
-geometrical domain and nodal connectivity of elements. A
-pattern also specifies the so-called key-points, i.e. the nodes that will be
-located at geometrical vertices. The pattern description is stored in
-\<pattern_name\>.smp file.
-
-The smp file contains 4 sections:
-
--# The first line indicates the total number of pattern nodes (N).
--# The next N lines describe nodes coordinates. Each line contains 2
-  node coordinates for a 2D pattern or 3 node coordinates for a 3D pattern.
-  Note, that node coordinates of a 3D pattern can be defined only by
-  relative values in range [0;1].
--# The key-points line contains the indices of the nodes to be mapped on geometrical
-  vertices (for a 2D pattern only). Index n refers to the node described 
-  on the n-th line of section 2. The index of the first node is
-  zero. For a 3D pattern the key points are not specified.
--# The remaining lines describe nodal connectivity of elements, one line
-  for each element. Each line holds indices of nodes forming an element.
-  Index n refers to the node described on the n-th line of section 2.
-  The first node index is zero. There must be 3 or 4 indices on each
-  line for a 2D pattern (only liner 2d elements are allowed) and 4, 5, 6 or 8
-  indices for a 3D pattern (only linear 3d elements are allowed).
-
-A 2D pattern must contain at least one element and at least one
-key-point. All key-points must lie on boundaries.
-
-A 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 the above 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>
-
-<em>To apply pattern mapping to a geometrical object or mesh elements:</em>
-
-From the \b Modification menu choose the <b>Pattern Mapping</b> item or click 
-<em>"Pattern mapping"</em> button in the toolbar.
-
-\image html image98.png
-<center><em>"Pattern mapping" button</em></center>
-
-The following dialog box will appear:
-
-\n For a <b>2D pattern</b>
-
-\image html patternmapping1.png
-
-In this dialog you should specify:
-
-<ul>
-<li> \b Pattern, which can be loaded from .smp pattern file previously
-  created manually or generated automatically from an existing mesh or
-  sub-mesh.</li>
-<li> \b Face with the number of vertices equal to the number of
-  key-points in the pattern; the number of key-points on internal
-  boundaries of the pattern must also be equal to the number of vertices
-  on internal boundaries of the face;</li>
-<li> \b Vertex to which the first key-point should be mapped;</li>
-</ul>
-
-Alternatively, it is possible to select <b>Refine selected mesh elements</b> 
-check-box and apply the pattern to <ul>
-  <li> <b>Mesh Face</b> instead of a geometric Face</li>
-  <li> and select \b Node instead of vertex.</li>
-</ul>
-
-Additionally it is possible to: <ul>
-<li> <b>Reverse the order of key-points</b>. By default, the vertices of
-  a face are ordered counterclockwise.</li>
-<li> Enable to <b> Create polygons near boundary</b> </li>
-<li> and <b>Create polyhedrons near boundary</b></li>
-</ul>
-
-\n For a <b>3D pattern</b>
-
-\image html patternmapping2.png
-
-In this dialog you should specify:
-<ul>
-<li> \b Pattern, which can be loaded from .smp pattern file previously
-  created manually or generated automatically from an existing mesh or
-  sub-mesh.</li>
-<li> A 3D block (Solid) object.</li>
-<li> Two vertices that specify the order of nodes in the resulting
-  mesh.</li>
-</ul>
-
-Alternatively, it is possible to select <b>Refine selected mesh elements</b> 
-check-box and apply the pattern to
-<ul>
-  <li> One or several <b>Mesh volumes</b> instead of a geometric 3D object</li>
-  <li> and select two \b Nodes instead of vertices.</li> 
-</ul>
-Additionally it is possible to:
-<ul>
-<li> Enable to <b> Create polygons near boundary</b> </li>
-<li> and <b>Create polyhedrons near boundary</b></li>
-</ul>
-
-<br>
-<h3> Automatic Pattern Generation</h3>
-
-To generate a pattern automatically from an existing mesh or sub-mesh,
-click \b New button.
-
-The following dialog box will appear:
-
-\image html a-patterntype1.png
-
-In this dialog you should specify:
-
-<ul>
-<li> <b>Mesh or Sub-mesh</b>, which is a meshed geometrical face (for a
-2D pattern) or a meshed solid block (for a 3D pattern). Mesh nodes lying on
-the face vertices become key-points of the pattern. </li>
-<li> A custom <b>Pattern Name </b> </li>
-<li>Additionally, for a 2D pattern you may choose to 
-<b>Project nodes on the face</b> to get node coordinates instead of using
-"positions on face" generated by the mesher (if there is any). The faces
-having a seam edge cannot be used for automatic pattern creation.</li>
-</ul>
-
-When a pattern is created from an existing mesh, two cases are possible:
-
-- A sub-mesh on a face/solid is selected. The pattern is created from the 2d/3d
-elements bound to the face/solid by the mesher. For a 2D pattern, the node coordinates are either
-"positions on face" computed by the mesher, or coordinates got by node
-projection on a geometrical surface, according to the user choice. For
-a 3D pattern, the node coordinates correspond to the nodes computed by
-the mesher.
-- A mesh, where the main shape is a face/solid, is selected. The pattern is
-created from all 2d/3d elements in a mesh. In addition, if all mesh
-elements of a 2D pattern are built by the mesher, the user can select
-how to get node coordinates, otherwise all nodes are projected on
-a face surface.
-
-
-<br><h2>Mapping algorithm</h2>
-
-The mapping algorithm for a 2D case is as follows:
-
-- The key-points are set counterclockwise in the order corresponding
-  to their location on the pattern boundary. The first key-point is preserved.
-- The geometrical vertices corresponding to the key-points are found
-  on face boundary. Here, "Reverse order of key-points" flag is set. 
-\image html image95.gif
-- The boundary nodes of the pattern are mapped onto the edges of the face: a
-  node located between two key-points on the pattern boundary is
-  mapped on the geometrical edge limited by the corresponding geometrical
-  vertices. The node position on the edge depends on its distance from the
-  key-points. 
-\image html image96.gif
-- The coordinates of a non-boundary node in the parametric space of the face
-  are defined in the following way. In the parametric space of the
-  pattern, the  node lies at the intersection of two iso-lines. Both
-  of them intersect the pattern boundary at two
-  points at least. If the mapped positions of boundary nodes are known, it is
-  possible to find, where the points at the intersection of iso-lines
-  and boundaries are mapped. Then it is possible to find
-  the direction of mapped iso-line section and, finally, the positions of
-  two nodes on two mapped isolines. The eventual mapped
-  position of the node is found as an average of the positions on mapped
-  iso-lines. 
-\image html image97.gif
-
-The 3D algorithm is similar.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_pattern_mapping "Pattern Mapping" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/pattern_mapping.rst b/doc/salome/gui/SMESH/input/pattern_mapping.rst
new file mode 100644 (file)
index 0000000..d505dca
--- /dev/null
@@ -0,0 +1,197 @@
+.. _pattern_mapping_page:
+
+***************
+Pattern mapping
+***************
+
+About patterns
+##############
+
+The pattern describes a mesh to generate: positions of nodes within a
+geometrical domain and nodal connectivity of elements. A
+pattern also specifies the so-called key-points, i.e. the nodes that will be
+located at geometrical vertices. The pattern description is stored in
+\<pattern_name\>.smp file.
+
+The smp file contains 4 sections:
+
+       #. The first line indicates the total number of pattern nodes (N).
+       #. The next N lines describe nodes coordinates. Each line contains 2 node coordinates for a 2D pattern or 3 node coordinates for a 3D pattern. Note, that node coordinates of a 3D pattern can be defined only by relative values in range [0;1].
+       #. The key-points line contains the indices of the nodes to be mapped on geometrical vertices (for a 2D pattern only). Index n refers to the node described on the n-th line of section 2. The index of the first node is zero. For a 3D pattern the key points are not specified.
+       #. The remaining lines describe nodal connectivity of elements, one line for each element. Each line holds indices of nodes forming an element. Index n refers to the node described on the n-th line of section 2. The first node index is zero. There must be 3 or 4 indices on each line for a 2D pattern (only liner 2d elements are allowed) and 4, 5, 6 or 8 indices for a 3D pattern (only linear 3d elements are allowed).
+
+A 2D pattern must contain at least one element and at least one key-point. All key-points must lie on boundaries.
+
+A 3D pattern must contain at least one element.
+
+An example of a simple 2D pattern smp file:
+::
+
+       !!! 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
+
+The image below provides a preview of the above pattern:
+
+.. image:: ../images/pattern2d.png
+       :align: center
+
+.. centered::
+       An example of a simple 3D pattern smp file:
+      
+::
+
+       !!! 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
+
+
+Application of pattern mapping
+##############################
+
+*To apply pattern mapping to a geometrical object or mesh elements:*
+
+.. |img| image:: ../images/image98.png
+
+From the **Modification** menu choose the **Pattern Mapping** item or click 
+*"Pattern mapping"* button |img| in the toolbar.
+
+
+The following dialog box will appear:
+
+For a **2D pattern**
+   
+
+.. image:: ../images/patternmapping1.png
+       :align: center
+
+In this dialog you should specify:
+
+* **Pattern**, which can be loaded from .smp pattern file previously created manually or generated automatically from an existing mesh or sub-mesh.
+* **Face** with the number of vertices equal to the number of key-points in the pattern; the number of key-points on internal boundaries of the pattern must also be equal to the number of vertices on internal boundaries of the face;
+* **Vertex** to which the first key-point should be mapped;
+
+
+Alternatively, it is possible to select **Refine selected mesh elements** check-box and apply the pattern to 
+
+* **Mesh Face** instead of a geometric Face
+* and select **Node** instead of vertex.
+
+
+Additionally it is possible to: 
+
+* **Reverse the order of key-points**. By default, the vertices of a face are ordered counterclockwise.
+* Enable to **Create polygons near boundary** 
+* and **Create polyhedrons near boundary**
+
+          
+For a **3D pattern**
+
+.. image:: ../images/patternmapping2.png
+       :align: center
+
+In this dialog you should specify:
+
+* **Pattern**, which can be loaded from .smp pattern file previously created manually or generated automatically from an existing mesh or sub-mesh.
+* A 3D block (Solid) object.
+* Two vertices that specify the order of nodes in the resulting mesh.
+
+
+Alternatively, it is possible to select **Refine selected mesh elements** check-box and apply the pattern to
+
+* One or several **Mesh volumes** instead of a geometric 3D object
+* and select two **Nodes** instead of vertices. 
+
+Additionally it is possible to:
+
+* Enable to **Create polygons near boundary** 
+* and **Create polyhedrons near boundary**
+
+
+
+Automatic Pattern Generation
+****************************
+
+To generate a pattern automatically from an existing mesh or sub-mesh, click **New** button.
+
+The following dialog box will appear:
+
+.. image:: ../images/a-patterntype1.png
+       :align: center
+
+In this dialog you should specify:
+
+
+* **Mesh or Sub-mesh**, which is a meshed geometrical face (for a 2D pattern) or a meshed solid block (for a 3D pattern). Mesh nodes lying on the face vertices become key-points of the pattern. 
+* A custom **Pattern Name** 
+* Additionally, for a 2D pattern you may choose to **Project nodes on the face** to get node coordinates instead of using "positions on face" generated by the mesher (if there is any). The faces having a seam edge cannot be used for automatic pattern creation.
+
+
+When a pattern is created from an existing mesh, two cases are possible:
+
+* A sub-mesh on a face/solid is selected. The pattern is created from the 2d/3d elements bound to the face/solid by the mesher. For a 2D pattern, the node coordinates are either "positions on face" computed by the mesher, or coordinates got by node projection on a geometrical surface, according to the user choice. For a 3D pattern, the node coordinates correspond to the nodes computed by the mesher.
+* A mesh, where the main shape is a face/solid, is selected. The pattern is created from all 2d/3d elements in a mesh. In addition, if all mesh elements of a 2D pattern are built by the mesher, the user can select how to get node coordinates, otherwise all nodes are projected on a face surface.
+
+
+Mapping algorithm
+#################
+
+The mapping algorithm for a 2D case is as follows:
+
+* The key-points are set counterclockwise in the order corresponding to their location on the pattern boundary. The first key-point is preserved.
+* The geometrical vertices corresponding to the key-points are found on face boundary. Here, "Reverse order of key-points" flag is set. 
+
+.. image:: ../images/image95.gif
+       :align: center
+
+* The boundary nodes of the pattern are mapped onto the edges of the face: a node located between two key-points on the pattern boundary is mapped on the geometrical edge limited by the corresponding geometrical vertices. The node position on the edge depends on its distance from the key-points. 
+
+.. image:: ../images/image96.gif
+       :align: center
+
+* The coordinates of a non-boundary node in the parametric space of the face are defined in the following way. In the parametric space of the pattern, the  node lies at the intersection of two iso-lines. Both of them intersect the pattern boundary at two points at least. If the mapped positions of boundary nodes are known, it is possible to find, where the points at the intersection of iso-lines and boundaries are mapped. Then it is possible to find the direction of mapped iso-line section and, finally, the positions of two nodes on two mapped isolines. The eventual mapped position of the node is found as an average of the positions on mapped iso-lines. 
+
+.. image:: ../images/image97.gif
+       :align: center
+
+The 3D algorithm is similar.
+
+**See Also** a sample TUI Script of a :ref:`tui_pattern_mapping` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/point_marker.doc b/doc/salome/gui/SMESH/input/point_marker.doc
deleted file mode 100644 (file)
index 0a7b88e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-
-\page point_marker_page Point Marker
-
-\n You can change the representation of points in
-the 3D viewer either by selecting one of the predefined
-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
-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).
-
-\image html point_marker_widget1.png
-
-<br>
-
-\image html std_point_marker.png "Mesh presentation with standard point markers"
-
-- Custom point markers
-
-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 a sequence of "0" and "1" symbols,
-where "1" symbol means an opaque pixel and "0" symbol means a
-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".
-
-Here is a texture file sample:
-
-<pre>
-11111111
-10000001
-10011001
-10111101
-10111101
-10011001
-10000001
-11111111
-</pre>
-
-\image html point_marker_widget2.png
-
-<br>
-
-\image html custom_point_marker.png "Mesh presentation with custom point markers"
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/point_marker.rst b/doc/salome/gui/SMESH/input/point_marker.rst
new file mode 100644 (file)
index 0000000..2110fe3
--- /dev/null
@@ -0,0 +1,62 @@
+.. _point_marker_page:
+
+************
+Point Marker
+************
+
+You can change the representation of points in
+the 3D viewer either by selecting one of the predefined
+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
+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).
+
+.. image:: ../images/point_marker_widget1.png
+       :align: center
+
+
+.. image:: ../images/std_point_marker.png
+       :align: center
+
+.. centered::
+       Mesh presentation with standard point markers
+
+Custom point markers
+--------------------
+
+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 a sequence of "0" and "1" symbols,
+where "1" symbol means an opaque pixel and "0" symbol means a
+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".
+
+Here is a texture file sample:
+::
+
+       11111111
+       10000001
+       10011001
+       10111101
+       10111101
+       10011001
+       10000001
+       11111111
+
+
+.. image:: ../images/point_marker_widget2.png
+       :align: center
+
+
+.. image:: ../images/custom_point_marker.png 
+       :align: center
+
+.. centered::
+       Mesh presentation with custom point markers
diff --git a/doc/salome/gui/SMESH/input/prism_3d_algo.doc b/doc/salome/gui/SMESH/input/prism_3d_algo.doc
deleted file mode 100644 (file)
index 6d4be7b..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*!
-
-\page prism_3d_algo_page Extrusion 3D meshing algorithm
-
-Extrusion 3D algorithm can be used for meshing prisms, i.e. 3D shapes
-defined by two opposing faces having the same number of vertices and
-edges. These two faces should be connected by quadrangle "side" faces.
-
-\image html prism_mesh.png "Clipping view of a mesh of a prism with non-planar base and top faces"
-
-The prism is allowed to have sides composed of several faces. (A prism
-side is a row of faces (or one face) connecting the corresponding edges of
-the top and base faces). However, a prism 
-side can be split only vertically as indicated in the
-picture below. 
-
-\image html prism_ok_ko.png "A suitable and an unsuitable prism"
-In this picture, the left prism is suitable for meshing with 3D
-extrusion algorithm: it has six sides, two of which are split
-vertically. The right prism cannot be meshed with this
-algorithm because one of the prism sides is split horizontally (the
-splitting edge is highlighted).
-
-The algorithm can propagate 2D mesh not only between horizontal
-(i.e. base and top) faces of one prism but also between faces of prisms
-organized in a stack and between stacks sharing prism sides.
-
-\image html prism_stack.png "Prism stacks"
-This picture shows four neighboring prism stacks, each comprising two prisms.
-The shown sub-mesh is used by the algorithm to mesh
-all eight prisms in the stacks.
-
-To use <em>Extrusion 3D</em> algorithm you need to assign algorithms
-and hypotheses of lower dimensions as follows.
-(A sample picture below shows algorithms and hypotheses used to
-mesh a cylinder with prismatic volumes).
-
-\image html prism_needs_hyps.png 
-
-The \b Global algorithms and hypotheses to be chosen at 
-\ref create_mesh_anchor "Creation of a mesh object" are:
-<ul>
-<li> 1D algorithm and hypothesis that will be applied for meshing
-  (logically) vertical edges of the prism (which connect the top and the
-  base faces of the prism). In the sample picture above these are
-  "Regular_1D" algorithm and "Number of Segments" hypothesis named "Vertical
-  Nb. Segments".</li>
-</ul>
-
-The \b Local algorithms and hypotheses to be chosen at 
-\ref constructing_submeshes_page "Construction of sub-meshes" are:
-<ul>
-  <li> 1D and 2D algorithms and hypotheses that will be applied for
-    meshing the top and the base prism
-    \ref submesh_shape_section "faces". These faces can be meshed
-    with any type of 2D elements: quadrangles, triangles, polygons or
-    their mix. It is enough to define a sub-mesh on either the top or
-    the base face. In the sample picture above, "NETGEN_1D2D"
-    algorithm meshes "bottom disk" face with triangles. (1D algorithm
-    is not assigned as "NETGEN_1D2D" does not require divided edges to
-    create a 2D mesh.)
-  </li>
-  <li> Optionally you can define a 1D sub-mesh on some vertical
-    \ref submesh_shape_section "edges" of stacked prisms, which will
-    override the global 1D hypothesis mentioned above. In the <b>Prism
-    stacks</b> picture, the vertical division is not equidistant on
-    the whole length because a "Number Of Segments" hypothesis with
-    Scale Factor=3 is assigned to the highlighted edge.
-</li></ul>
-
-If <em>Extrusion 3D</em> algorithm is assigned to a sub-mesh in a mesh
-with multiple sub-meshes, the described above approach may not work as
-expected. For example the bottom face may be meshed by other algorithm
-before <em>Extrusion 3D</em> have a chance to project a mesh from the
-base face. This thing can happen with vertical edges as well. All
-these can lead to either a meshing failure or to an incorrect meshing.
-
-In such a case, it's necessary to explicitly define algorithms
-that <em>Extrusion 3D</em> implicitly applies in a simple case:
-- assign \ref projection_1D2D algorithm to the top face and
-- assign a 1D algorithm to a group of all vertical edges.
-
-\image html image157.gif "Prism with Extrusion 3D meshing. Vertical division is different on neighbor edges because several local 1D hypotheses are assigned."
-
-\sa a sample TUI Script of
-\ref tui_prism_3d_algo "Use Extrusion 3D meshing algorithm".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/prism_3d_algo.rst b/doc/salome/gui/SMESH/input/prism_3d_algo.rst
new file mode 100644 (file)
index 0000000..03dd68a
--- /dev/null
@@ -0,0 +1,93 @@
+.. _prism_3d_algo_page:
+
+******************************
+Extrusion 3D meshing algorithm
+******************************
+
+Extrusion 3D algorithm can be used for meshing prisms, i.e. 3D shapes
+defined by two opposing faces having the same number of vertices and
+edges. These two faces should be connected by quadrangle "side" faces.
+
+.. image:: ../images/prism_mesh.png 
+       :align: center
+
+.. centered::
+       Clipping view of a mesh of a prism with non-planar base and top faces
+
+The prism is allowed to have sides composed of several faces. (A prism
+side is a row of faces (or one face) connecting the corresponding edges of
+the top and base faces). However, a prism 
+side can be split only vertically as indicated in the
+picture below. 
+
+.. image:: ../images/prism_ok_ko.png 
+       :align: center
+
+.. centered::
+       A suitable and an unsuitable prism
+
+In this picture, the left prism is suitable for meshing with 3D
+extrusion algorithm: it has six sides, two of which are split
+vertically. The right prism cannot be meshed with this
+algorithm because one of the prism sides is split horizontally (the
+splitting edge is highlighted).
+
+The algorithm can propagate 2D mesh not only between horizontal
+(i.e. base and top) faces of one prism but also between faces of prisms
+organized in a stack and between stacks sharing prism sides.
+
+.. _prism_stacks:
+
+.. image:: ../images/prism_stack.png 
+       :align: center
+
+.. centered::
+       Prism stacks
+
+This picture shows four neighboring prism stacks, each comprising two prisms.
+The shown sub-mesh is used by the algorithm to mesh
+all eight prisms in the stacks.
+
+To use *Extrusion 3D* algorithm you need to assign algorithms
+and hypotheses of lower dimensions as follows.
+(A sample picture below shows algorithms and hypotheses used to
+mesh a cylinder with prismatic volumes).
+
+.. image:: ../images/prism_needs_hyps.png 
+       :align: center
+
+The **Global** algorithms and hypotheses to be chosen at 
+:ref:`create_mesh_anchor` are:
+
+* 1D algorithm and hypothesis that will be applied for meshing (logically) vertical edges of the prism (which connect the top and the base faces of the prism). In the sample picture above these are "Regular_1D" algorithm and "Number of Segments" hypothesis named "Vertical Nb. Segments".
+
+
+The **Local** algorithms and hypotheses to be chosen at 
+:ref:`constructing_submeshes_page` are:
+
+* 1D and 2D algorithms and hypotheses that will be applied for meshing the top and the base prism :ref:`faces <submesh_shape_section>`. These faces can be meshed with any type of 2D elements: quadrangles, triangles, polygons or their mix. It is enough to define a sub-mesh on either the top or the base face. In the sample picture above, "NETGEN_1D2D" algorithm meshes "bottom disk" face with triangles. (1D algorithm is not assigned as "NETGEN_1D2D" does not require divided edges to create a 2D mesh.)
+  
+* Optionally you can define a 1D sub-mesh on some vertical :ref:`edges <submesh_shape_section>` of stacked prisms, which will override the global 1D hypothesis mentioned above. In the :ref:`Prism stacks <prism_stacks>` picture, the vertical division is not equidistant on the whole length because a "Number Of Segments" hypothesis with Scale Factor=3 is assigned to the highlighted edge.
+
+
+If *Extrusion 3D* algorithm is assigned to a sub-mesh in a mesh
+with multiple sub-meshes, the described above approach may not work as
+expected. For example the bottom face may be meshed by other algorithm
+before *Extrusion 3D* have a chance to project a mesh from the
+base face. This thing can happen with vertical edges as well. All
+these can lead to either a meshing failure or to an incorrect meshing.
+In such a case, it's necessary to explicitly define algorithms
+that *Extrusion 3D* implicitly applies in a simple case:
+
+* assign :ref:`projection_1D2D` algorithm to the top face and
+* assign a 1D algorithm to a group of all vertical edges.
+
+.. image:: ../images/image157.gif
+       :align: center
+
+.. centered::
+       Prism with Extrusion 3D meshing. Vertical division is different on neighbor edges because several local 1D hypotheses are assigned
+
+**See Also** a sample TUI Script of :ref:`tui_prism_3d_algo`.
+
+
diff --git a/doc/salome/gui/SMESH/input/projection_algos.doc b/doc/salome/gui/SMESH/input/projection_algos.doc
deleted file mode 100644 (file)
index de11a7e..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*!
-
-\page projection_algos_page Projection Algorithms
-
-\tableofcontents
-
-Projection algorithms allow to define the mesh of a geometrical
-object by the projection of another already meshed geometrical object.
-
-\note Source and target geometrical objects mush be topologically
-equal, i.e. they must have same number of sub-shapes, connected to
-corresponding counterparts.
-
-\image html topo_equality.png Topologically equal faces suitable for 2D projection.
-
-
-\section projection_1D Projection 1D
-
-<b>Projection 1D</b> algorithm allows to define the mesh of an edge
-(or group of edges)
-by the projection of another already meshed edge (or group of edges).
-\n To apply this algorithm select the edge to be meshed (indicated in
-the field \b Geometry of <b>Create mesh</b> dialog box),
-<b>Projection1D</b> in the list of 1D algorithms and click the
-<em>"Add Hypothesis"</em> button.
-The following dialog box will appear:
-
-\image html projection_1d.png
-
-In this dialog you can define
-<ul>
-  <li> the \b Name of the algorithm,</li>
-  <li> the already meshed <b> Source Edge</b> and </li>
-  <li> the <b>Source Mesh </b> (It can be omitted only when projecting
-    a sub-mesh on another one of the same Mesh).</li>
-  <li> It could also be necessary to define the orientation of edges, 
-    which is done by indicating the <b>Source Vertex</b> being the
-    first point of the <b>Source Edge </b>and the <b>Target Vertex</b> being
-    the first point of the edge being meshed.</li>
-</ul>
-<br>
-For a group of edges, <b>Source</b> and <b>Target</b> vertices should be
-shared by only one edge of the group. If <b>Source</b> and <b>Target</b>
-vertices are specified, the edges in the group must be connected.
-The source and target groups must contain equal number of edges
-and they must form topologically equal structures.
-
-\section projection_2D Projection 2D
-
-\n <b>Projection 2D</b> algorithm allows to define the mesh of a face
-(or group of faces) by the projection of another already meshed face
-(or group of faces). This algorithm works only if all edges of the
-target face have been discretized into the same number of
-segments as corresponding edges of the source face.
-
-To apply this algorithm select the face to be meshed (indicated in the
-field \b Geometry of <b>Create mesh</b> dialog box), <b>Projection
-2D</b> in the list of 2D algorithms and click the <em> "Add
-Hypothesis"</em> button. The following dialog box will appear:
-
-\image html projection_2d.png
-
-In this dialog you can define 
-<ul>
-  <li> the \b Name of the algorithm, </li>
-  <li> the already meshed <b> Source Face </b> and </li>
-  <li> the <b> Source Mesh </b> (It can be omitted only when 
-    projecting a submesh on another one of the same Mesh). </li>
-  <li> It could also be necessary to define the orientation of mesh on
-    the face, which is done by indicating two <b>Source Vertices</b>,
-    which belong to the same edge of the <b>Source Face</b>, and
-    two <b>Target Vertices</b>, which belong to the same edge of the
-    face being meshed.</li>
-</ul>
-
-The groups of faces are suitable for this algorithm only if they
-contain an equal number of faces and form topologically equal
-structures.
-
-\section projection_1D2D Projection 1D-2D
-
-\n <b>Projection 1D-2D</b> algorithm differs from
-\ref projection_2D algorithm in one aspect: it generates mesh segments
-on edges of the face according to the projected 2D elements; thus it
-does not require the edges to be meshed by any other 1D algorithm;
-moreover it does not allow to mesh edges of the face using another
-algorithm via definition of sub-meshes.
-
-\section projection_3D Projection 3D
-
-\n <b>Projection 3D</b> algorithm allows to define the mesh of a shape by
-the projection of another already meshed shape.  This algorithm works
-only if all faces and edges of the target shape have been meshed as 1D-2D
-Projections of the faces and edges of the source shape. Another
-limitation is that this algorithm currently works only on boxes.
-
-To apply this algorithm select the solid to be meshed (indicated in
-the field \b Geometry of <b>Create mesh</b> dialog box), <b>Projection
-3D</b> in the list of 3D algorithms and click the  button. The
-following dialog box will appear:
-
-\image html projection_3d.png
-
-In this menu you can define the \b Name of the algorithm, the already
-meshed source <b>3D shape</b> and the \b Mesh (It can be omitted only when 
-projecting a submesh on another one from the same global Mesh). 
-It could also be necessary to define the orientation of mesh on the shape, which is
-done by indicating two <b>Source Vertices</b>, which belong to the same edge
-of the source <b>3D Shape</b>, and two <b>Target Vertices</b>, which belong to the
-same edge of the source <b>3D Shape</b>.
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_projection "Projection Algorithms".
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/projection_algos.rst b/doc/salome/gui/SMESH/input/projection_algos.rst
new file mode 100644 (file)
index 0000000..ff0cbbb
--- /dev/null
@@ -0,0 +1,128 @@
+.. _projection_algos_page:
+
+*********************
+Projection Algorithms
+*********************
+
+.. contents:: `Table of contents`
+
+Projection algorithms allow to define the mesh of a geometrical
+object by the projection of another already meshed geometrical object.
+
+.. note::
+       Source and target geometrical objects mush be topologically equal, i.e. they must have same number of sub-shapes, connected to corresponding counterparts.
+
+.. image:: ../images/topo_equality.png 
+       :align: center
+
+.. centered::
+       Topologically equal faces suitable for 2D projection.
+
+
+.. _projection_1D:
+
+Projection 1D
+=============
+
+**Projection 1D** algorithm allows to define the mesh of an edge (or group of edges)
+by the projection of another already meshed edge (or group of edges).
+
+To apply this algorithm select the edge to be meshed (indicated in
+the field **Geometry** of **Create mesh** dialog box),
+**Projection1D** in the list of 1D algorithms and click the
+*"Add Hypothesis"* button.
+The following dialog box will appear:
+
+.. image:: ../images/projection_1d.png
+       :align: center
+
+In this dialog you can define
+
+* the **Name** of the algorithm,
+* the already meshed **Source Edge** and 
+* the **Source Mesh** (It can be omitted only when projecting a sub-mesh on another one of the same Mesh).
+* It could also be necessary to define the orientation of edges,  which is done by indicating the **Source Vertex** being the first point of the **Source Edge** and the **Target Vertex** being the first point of the edge being meshed.
+
+
+For a group of edges, **Source** and **Target** vertices should be
+shared by only one edge of the group. If **Source** and **Target**
+vertices are specified, the edges in the group must be connected.
+The source and target groups must contain equal number of edges
+and they must form topologically equal structures.
+
+.. _projection_2D:
+
+Projection 2D
+=============
+
+
+**Projection 2D** algorithm allows to define the mesh of a face
+(or group of faces) by the projection of another already meshed face
+(or group of faces). This algorithm works only if all edges of the
+target face have been discretized into the same number of
+segments as corresponding edges of the source face.
+
+To apply this algorithm select the face to be meshed (indicated in the
+field **Geometry** of **Create mesh** dialog box), **Projection
+2D** in the list of 2D algorithms and click the *"Add Hypothesis"* button. The following dialog box will appear:
+
+.. image:: ../images/projection_2d.png
+       :align: center
+
+In this dialog you can define 
+
+* the **Name** of the algorithm, 
+* the already meshed **Source Face** and 
+* the **Source Mesh** (It can be omitted only when projecting a submesh on another one of the same Mesh). 
+* It could also be necessary to define the orientation of mesh on the face, which is done by indicating two **Source Vertices**, which belong to the same edge of the **Source Face**, and two **Target Vertices**, which belong to the same edge of the face being meshed.
+
+
+The groups of faces are suitable for this algorithm only if they
+contain an equal number of faces and form topologically equal
+structures.
+
+.. _projection_1D2D:
+
+Projection 1D-2D
+================
+
+**Projection 1D-2D** algorithm differs from
+:ref:`projection_2D` algorithm in one aspect: it generates mesh segments
+on edges of the face according to the projected 2D elements; thus it
+does not require the edges to be meshed by any other 1D algorithm;
+moreover it does not allow to mesh edges of the face using another
+algorithm via definition of sub-meshes.
+
+
+.. _projection_3D:
+
+Projection 3D
+=============
+
+**Projection 3D** algorithm allows to define the mesh of a shape by
+the projection of another already meshed shape.  This algorithm works
+only if all faces and edges of the target shape have been meshed as 1D-2D
+Projections of the faces and edges of the source shape. Another
+limitation is that this algorithm currently works only on boxes.
+
+To apply this algorithm select the solid to be meshed (indicated in
+the field **Geometry** of **Create mesh** dialog box), **Projection 3D** 
+in the list of 3D algorithms and click the  button. The
+following dialog box will appear:
+
+.. image:: ../images/projection_3d.png
+       :align: center
+
+In this menu you can define the **Name** of the algorithm, the already
+meshed source **3D shape** and the **Mesh** (It can be omitted only when 
+projecting a submesh on another one from the same global Mesh). 
+It could also be necessary to define the orientation of mesh on the shape, which is
+done by indicating two **Source Vertices**, which belong to the same edge
+of the source **3D Shape**, and two **Target Vertices**, which belong to the
+same edge of the source **3D Shape**.
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_projection`.
+
+
+
diff --git a/doc/salome/gui/SMESH/input/quad_from_ma_algo.doc b/doc/salome/gui/SMESH/input/quad_from_ma_algo.doc
deleted file mode 100644 (file)
index f7312ee..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
-
-\page quad_from_ma_algo_page Medial Axis Projection Quadrangle meshing algorithm
-
-Medial Axis Projection algorithm can be used for meshing faces with
-sinuous borders and a channel-like shape, for which it can be
-difficult to define 1D hypotheses such that to obtain a good shape of
-resulting quadrangles. The algorithm can be also applied to faces with ring
-topology, which can be viewed as a closed 'channel'. In the latter
-case radial discretization of a ring can be specified by
-using <em>Number of Layers</em> or <em>Distribution of Layers</em>
-hypothesis.
-
-\image html quad_from_ma_mesh.png "A mesh of a river model to the left and of a ring-face to the right"
-
-The algorithm provides proper shape of quadrangles by constructing Medial
-Axis between sinuous borders of the face and using it to
-discretize the borders. (Shape of quadrangles can be not perfect at
-locations where opposite sides of a 'channel' are far from being parallel.)
-
-\image html quad_from_ma_medial_axis.png "Medial Axis between two blue sinuous borders"
-
-The Medial Axis is used in two ways:
-<ol>
-<li>If there is a sub-mesh on a sinuous border, then the nodes of
-  this border are mapped to the opposite border via the Medial
-  Axis.</li>
-<li> If there are no sub-meshes on sinuous borders, then the part of
-  the Medial Axis that can be mapped to both borders is discretized
-  using a 1D hypothesis assigned to the face or its ancestor shapes,
-  and the division points are mapped from the Medial Axis to both
-  borders to find positions of nodes.</li>
-</ol>
-
-\image html quad_from_ma_ring_mesh.png "Mesh depends on defined sub-meshes: to the left - sub-meshes on both wires, to the right - a sub-mesh on internal wire only"
-*/
diff --git a/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst b/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst
new file mode 100644 (file)
index 0000000..92413e4
--- /dev/null
@@ -0,0 +1,42 @@
+.. _quad_from_ma_algo_page:
+
+***************************************************
+Medial Axis Projection Quadrangle meshing algorithm
+***************************************************
+
+Medial Axis Projection algorithm can be used for meshing faces with
+sinuous borders and a channel-like shape, for which it can be
+difficult to define 1D hypotheses such that to obtain a good shape of
+resulting quadrangles. The algorithm can be also applied to faces with ring
+topology, which can be viewed as a closed 'channel'. In the latter
+case radial discretization of a ring can be specified by
+using *Number of Layers* or *Distribution of Layers*
+hypothesis.
+
+.. image:: ../images/quad_from_ma_mesh.png 
+       :align: center
+
+.. centered::
+       A mesh of a river model to the left and of a ring-face to the right
+
+The algorithm provides proper shape of quadrangles by constructing Medial
+Axis between sinuous borders of the face and using it to
+discretize the borders. (Shape of quadrangles can be not perfect at
+locations where opposite sides of a 'channel' are far from being parallel.)
+
+.. image:: ../images/quad_from_ma_medial_axis.png 
+       :align: center
+
+.. centered::
+       Medial Axis between two blue sinuous borders
+
+The Medial Axis is used in two ways:
+
+#. If there is a sub-mesh on a sinuous border, then the nodes of this border are mapped to the opposite border via the Medial Axis.
+#. If there are no sub-meshes on sinuous borders, then the part of the Medial Axis that can be mapped to both borders is discretized using a 1D hypothesis assigned to the face or its ancestor shapes, and the division points are mapped from the Medial Axis to both borders to find positions of nodes.
+
+.. image:: ../images/quad_from_ma_ring_mesh.png 
+       :align: center
+
+.. centered::
+       Mesh depends on defined sub-meshes: to the left - sub-meshes on both wires, to the right - a sub-mesh on internal wire only
diff --git a/doc/salome/gui/SMESH/input/quad_ijk_algo.doc b/doc/salome/gui/SMESH/input/quad_ijk_algo.doc
deleted file mode 100644 (file)
index 292a300..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-
-\page quad_ijk_algo_page Quadrangle: Mapping meshing algorithm
-
-<b>Quadrangle: Mapping</b> meshing algorithm is intended for creating
-all-quadrangle and quad-dominant meshes on faces without holes and
-bound by at least three edges.
-
-The algorithm can create mesh on any face but its quality and
-validity depend on two factors:
-- face shape (number of edges and boundary concavity);
-- discretization of edges.
-
-\image html quad_mesh_invalid.png "Invalid mesh on quadrilateral concave faces"
-
-The algorithm uses <em>Transfinite Interpolation</em> technique in the 
-parametric space of a face to locate nodes inside the face.
-
-The algorithm treats any face as quadrangle. If a face is bound by
-more than four edges, four most sharp vertices are considered as
-corners of the quadrangle and all edges between these vertices are
-treated as quadrangle sides. In the case of three edges, the vertex
-specified by the user is considered as a fourth degenerated side of the
-quadrangle.
-
-\image html quad_meshes.png "Algorithm generates a structured mesh on complex faces provided that edges are properly discretized"
-
-To get an all-quadrangle mesh you have to carefully define 1D
-hypotheses on edges of a face. To get a \b structured mesh you have to provide
-equal number of segments on opposite sides of the quadrangle. If this
-condition is not respected, the algorithm by default (without a 
-hypothesis) creates a \b quad-dominant mesh with triangles located near the
-side with the maximal number of segments. However, you can get an
-\b all-quadrangle mesh in this case by using 
-\ref hypo_quad_params_anchor "Quadrangle Parameters"
-hypothesis to specify how to make transition mesh between opposite
-sides with different number of segments, provided that certain
-conditions are respected. In any case the total number of segments must be
-even. To use \a Reduced transition method, there must be an equal number
-of segments on one pair of opposite sides.
-
-The following hypotheses help to create quadrangle meshes. 
-- \ref propagation_anchor "Propagation" additional 1D hypotheses
-  help to get an equal number of segments on the opposite sides of a
-  quadrilateral face.
-- \ref a1d_algos_anchor "Composite Side Discretization" algorithm is useful
-  to discretize several C1 continuous edges as one quadrangle side.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/quad_ijk_algo.rst b/doc/salome/gui/SMESH/input/quad_ijk_algo.rst
new file mode 100644 (file)
index 0000000..fdc6101
--- /dev/null
@@ -0,0 +1,55 @@
+.. _quad_ijk_algo_page:
+
+*************************************
+Quadrangle: Mapping meshing algorithm
+*************************************
+
+**Quadrangle: Mapping** meshing algorithm is intended for creating
+all-quadrangle and quad-dominant meshes on faces without holes and
+bound by at least three edges.
+
+The algorithm can create mesh on any face but its quality and
+validity depend on two factors:
+
+* face shape (number of edges and boundary concavity);
+* discretization of edges.
+
+.. image:: ../images/quad_mesh_invalid.png
+       :align: center
+
+.. centered::
+       "Invalid mesh on quadrilateral concave faces"
+
+The algorithm uses *Transfinite Interpolation* technique in the 
+parametric space of a face to locate nodes inside the face.
+
+The algorithm treats any face as quadrangle. If a face is bound by
+more than four edges, four most sharp vertices are considered as
+corners of the quadrangle and all edges between these vertices are
+treated as quadrangle sides. In the case of three edges, the vertex
+specified by the user is considered as a fourth degenerated side of the
+quadrangle.
+
+.. image:: ../images/quad_meshes.png 
+       :align: center
+
+.. centered::
+       Algorithm generates a structured mesh on complex faces provided that edges are properly discretized
+
+To get an all-quadrangle mesh you have to carefully define 1D
+hypotheses on edges of a face. To get a **structured** mesh you have to provide
+equal number of segments on opposite sides of the quadrangle. If this
+condition is not respected, the algorithm by default (without a 
+hypothesis) creates a **quad-dominant** mesh with triangles located near the
+side with the maximal number of segments. However, you can get an
+**all-quadrangle** mesh in this case by using 
+:ref:`hypo_quad_params_anchor` hypothesis to specify how to make transition mesh between opposite
+sides with different number of segments, provided that certain
+conditions are respected. In any case the total number of segments must be
+even. To use *Reduced* transition method, there must be an equal number
+of segments on one pair of opposite sides.
+
+The following hypotheses help to create quadrangle meshes. 
+
+* :ref:`Propagation <propagation_anchor>` additional 1D hypotheses help to get an equal number of segments on the opposite sides of a quadrilateral face.
+* :ref:`Composite Side Discretization <a1d_algos_anchor>` algorithm is useful to discretize several C1 continuous edges as one quadrangle side.
diff --git a/doc/salome/gui/SMESH/input/radial_prism_algo.doc b/doc/salome/gui/SMESH/input/radial_prism_algo.doc
deleted file mode 100644 (file)
index 8c33068..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*!
-
-\page radial_prism_algo_page Radial Prism
-
-\n This algorithm applies to the meshing of a hollow 3D shape,
-i.e. such shape should be composed of two meshed shells: an outer
-shell and an internal shell without intersection with the outer
-shell. One of the shells should be a 2D Projection of the other
-shell. The meshes of the shells can consist both of triangles and
-quadrangles.
-
-The Radial Prism algorithm would fill the space between the two shells
-with prisms.
-
-\image html radial_prism_mesh.png "Cut-view of a hollow sphere meshed by Radial Prism algorithm"
-
-This algorithm also needs the information concerning the number and
-distribution of mesh layers between the inner and the outer shapes.
-
-\image html number_of_layers.png
-
-Distribution of layers can be set with any of 1D Hypotheses.
-
-\image html distribution_of_layers.png
-
-*/
diff --git a/doc/salome/gui/SMESH/input/radial_prism_algo.rst b/doc/salome/gui/SMESH/input/radial_prism_algo.rst
new file mode 100644 (file)
index 0000000..c81d77c
--- /dev/null
@@ -0,0 +1,43 @@
+.. _radial_prism_algo_page:
+
+************
+Radial Prism
+************
+
+This algorithm applies to the meshing of a hollow 3D shape,
+i.e. such shape should be composed of two meshed shells: an outer
+shell and an internal shell without intersection with the outer
+shell. One of the shells should be a :ref:`2D Projection <projection_2D>` of the other
+shell. The meshes of the shells can consist both of triangles and
+quadrangles.
+
+The Radial Prism algorithm would fill the space between the two shells
+with prisms.
+
+.. image:: ../images/radial_prism_mesh.png 
+       :align: center
+
+.. centered::
+       Cut-view of a hollow sphere meshed by Radial Prism algorithm
+
+This algorithm also needs the information concerning the number and
+distribution of mesh layers between the inner and the outer shapes.
+This information can be defined using either of two hypotheses:
+
+.. image:: ../images/number_of_layers.png
+       :align: center
+
+.. centered::
+       *"Number of layers"* hypothesis
+
+.. image:: ../images/distribution_of_layers.png
+       :align: center
+
+.. centered::
+       *"Distribution of layers"* hypothesis
+
+*Distribution of layers* hypothesis allows using any of 
+:ref:`1D Hypotheses <a1d_meshing_hypo_page>` to define
+the distribution of mesh layers.
+
+**See also** a sample :ref:`TUI script <tui_radial_prism>`.
diff --git a/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc b/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.doc
deleted file mode 100644 (file)
index 7e49a9a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
-
-\page radial_quadrangle_1D2D_algo_page Radial Quadrangle 1D-2D
-
-\n This algorithm applies to the meshing of 2D shapes under the
-following conditions: the face must be a full ellipse or a part of ellipse
-(i.e. the number of edges is less or equal to 3 and one of them is an ellipse curve).
-The resulting mesh consists of triangles (near the center point) and
-quadrangles.
-
-This algorithm is optionally parametrized by the hypothesis indicating
-the number of mesh layers along the radius. The distribution of layers
-can be set with any 1D Hypothesis. If the face boundary includes
-radial edges, this distribution is applied to the longest radial
-edge. If the face boundary does not include radial edges, this
-distribution is applied to the longest virtual radial edge. The
-distribution is applied to the longest radial edge starting from its
-end lying on the elliptic curve.
-
-
-If no own hypothesis of the algorithm is assigned, any local or global
-hypothesis is used by the algorithm to discretize edges.
-
-If no 1D hypothesis is assigned to an edge, 
-\ref nb_segments_pref "Default Number of Segments" preferences
-parameter is used to discretize the edge.
-
-\image html hypo_radquad_dlg.png
-
-\image html mesh_radquad_01.png "Radial Quadrangle 2D mesh on the top and the bottom faces of a cylinder"
-
-\image html mesh_radquad_02.png "Radial Quadrangle 2D mesh on a part of circle"
-
-\sa A sample \ref tui_radial_quadrangle "TUI Script".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst b/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst
new file mode 100644 (file)
index 0000000..817695b
--- /dev/null
@@ -0,0 +1,47 @@
+.. _radial_quadrangle_1D2D_algo_page:
+
+***********************
+Radial Quadrangle 1D-2D
+***********************
+
+This algorithm applies to the meshing of 2D shapes under the
+following conditions: the face must be a full ellipse or a part of ellipse
+(i.e. the number of edges is less or equal to 3 and one of them is an ellipse curve).
+The resulting mesh consists of triangles (near the center point) and
+quadrangles.
+
+This algorithm is optionally parametrized by the hypothesis indicating
+the number of mesh layers along the radius. The distribution of layers
+can be set with any 1D Hypothesis. If the face boundary includes
+radial edges, this distribution is applied to the longest radial
+edge. If the face boundary does not include radial edges, this
+distribution is applied to the longest virtual radial edge. The
+distribution is applied to the longest radial edge starting from its
+end lying on the elliptic curve.
+
+
+If no own hypothesis of the algorithm is assigned, any local or global
+hypothesis is used by the algorithm to discretize edges.
+
+If no 1D hypothesis is assigned to an edge, 
+:ref:`Default Number of Segments <nb_segments_pref>` preferences
+parameter is used to discretize the edge.
+
+.. image:: ../images/hypo_radquad_dlg.png
+       :align: center
+
+.. image:: ../images/mesh_radquad_01.png 
+       :align: center
+
+.. centered::
+       Radial Quadrangle 2D mesh on the top and the bottom faces of a cylinder
+
+.. image:: ../images/mesh_radquad_02.png 
+       :align: center
+
+.. centered::
+       Radial Quadrangle 2D mesh on a part of circle
+
+**See also** a sample :ref:`TUI Script <tui_radial_quadrangle>`.
+
+
diff --git a/doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc
deleted file mode 100644 (file)
index fd506d2..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*!
-
-\page removing_nodes_and_elements_page Removing nodes and elements
-
-\n In MESH you can remove nodes and all types of cells of your mesh.
-
-<ul>
-<li>\ref removing_nodes_anchor "Nodes"</li>
-<li>\ref removing_orphan_nodes_anchor "Orphan Nodes"</li>
-<li>\ref removing_elements_anchor "Elements"</li>
-<li>\ref clear_mesh_anchor "Clear Mesh Data"</li>
-</ul>
-
-<br>
-\anchor removing_nodes_anchor
-<h2>Removing nodes</h2>
-
-<em>To remove a node:</em>
-<ol>
-<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-<li>From the <em>Modification</em> menu choose <em>Remove</em> and from the associated
-submenu select the <em>Nodes</em>, or just click <em>"Remove nodes"</em>
-button in the toolbar.
-
-\image html remove_nodes_icon.png
-<center><em>"Remove nodes" button</em></center>
-
-The following dialog box will appear:
-
-\image html removenodes.png
-
-In this dialog box you can specify one or several nodes:
-<ul>
-<li>choose mesh nodes with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the node IDs directly in <b>ID Elements</b> field. The selected nodes will be highlighted in the
-viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of nodes. See more
-about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-
-
-</li>
-</ol>
-
-\note Be careful while removing nodes because if you remove a definite
-node of your mesh all adjacent elements will be also deleted.
-
-<br>
-\anchor removing_orphan_nodes_anchor
-<h2>Removing orphan nodes</h2>
-
-There is a quick way to remove all orphan (free) nodes.
-
-<em>To remove orphan nodes:</em>
-<ol>
-<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-<li>From the <em>Modification</em> menu choose <em>Remove</em> and from the associated
-submenu select <em>Orphan Nodes</em>, or just click <em>"Remove orphan nodes"</em>
-button in the toolbar.
-
-\image html remove_orphan_nodes_icon.png
-<center><em>"Remove orphan nodes" button</em></center>
-
-The following Warning message box will appear:
-
-\image html removeorphannodes.png
-
-Confirm nodes removal by pressing "Yes" button.
-</ol>
-
-<br>
-\anchor removing_elements_anchor
-<h2>Removing elements</h2>
-
-<em>To remove an element:</em>
-<ol>
-<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-<li>From the <em>Modification</em> menu choose <em>Remove</em> and from the
-associated submenu select the <em>Elements</em>, or just click
-<em>"Remove elements"</em> button in the toolbar.
-
-\image html remove_elements_icon.png
-<center><em>"Remove elements" button</em></center>
-
-The following dialog box will appear:
-
-\image html removeelements.png
-
-In this dialog box you can specify one or several elements
-<ul>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
-viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of elements. See more
-about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-
-</li>
-<li>Click \b Apply or <b>Apply and Close</b> to confirm deletion of the specified elements.</li>
-</ol>
-
-\image html remove_nodes1.png "The initial mesh"
-
-\image html remove_nodes2.png "The mesh with some elements removed" 
-
-<br>
-\anchor clear_mesh_anchor
-<h2>Clearing Mesh Data</h2>
-
-<em>To remove all nodes and all types of cells in your mesh at once:</em>
-<ol>
-<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
-
-<li>From the Modification menu choose Remove and from the associated
-submenu select the Clear Mesh Data, or just click <em>"Clear Mesh Data"</em>
-button in the toolbar. You can also right-click on the mesh in the
-Object Browser and select Clear Mesh Data in the pop-up menu.</li>
-</ol>
-
-<center>
-\image html mesh_clear.png
-<em>"Clear Mesh Data" button</em></center>
-
-\note This command works in a different way in different situations: <ul>
-  <li> if the mesh is computed on a geometry, then "Clear Mesh Data" removes
-    all elements and nodes.</li>
-  <li> if the mesh is not based on a geometry (imported, compound, created from
-    scratch etc.), then "Clear Mesh Data" removes only the elements and
-    nodes computed by algorithms. If no such elements or nodes have been created, can remove nothing.</li></ul>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_removing_nodes_and_elements "Removing Nodes and Elements" operation.  
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst b/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst
new file mode 100644 (file)
index 0000000..bfbb16d
--- /dev/null
@@ -0,0 +1,124 @@
+.. _removing_nodes_and_elements_page:
+
+***************************
+Removing nodes and elements
+***************************
+
+In MESH you can remove nodes and all types of cells of your mesh.
+
+* :ref:`removing_nodes_anchor`
+* :ref:`removing_orphan_nodes_anchor`
+* :ref:`removing_elements_anchor`
+* :ref:`clear_mesh_anchor`
+
+
+
+.. _removing_nodes_anchor:
+
+Removing nodes
+##############
+
+**To remove a node:**
+
+.. |rmn| image:: ../images/remove_nodes_icon.png
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+#. From the **Modification** menu choose **Remove** and from the associated submenu select the **Nodes**, or just click *"Remove nodes"* button |rmn| in the toolbar.
+   The following dialog box will appear:
+
+       .. image:: ../images/removenodes.png
+               :align: center
+
+
+   In this dialog box you can specify one or several nodes:
+
+   * choose mesh nodes with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+   * input the node IDs directly in **ID Elements** field. The selected nodes will be highlighted in the viewer; or
+   * apply Filters. **Set filter** button allows to apply a filter to the selection of nodes. See more about filters in the :ref:`selection_filter_library_page` page.
+
+#. Click **Apply** or **Apply and Close** to confirm deletion of the specified nodes.
+
+.. note::
+       Be careful while removing nodes because if you remove a definite node of your mesh all adjacent elements will be also deleted.
+
+
+.. _removing_orphan_nodes_anchor:
+
+Removing orphan nodes
+#####################
+
+There is a quick way to remove all orphan (free) nodes.
+
+*To remove orphan nodes:*
+
+.. |rmon| image:: ../images/remove_orphan_nodes_icon.png
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+#. From the **Modification** menu choose **Remove** and from the associated submenu select **Orphan Nodes**, or just click *"Remove orphan nodes"* button |rmon| in the toolbar.
+   The following Warning message box will appear:
+
+       .. image:: ../images/removeorphannodes.png
+               :align: center
+
+#. Confirm nodes removal by pressing "Yes" button.
+
+
+.. _removing_elements_anchor:
+
+Removing elements
+#################
+
+*To remove an element:*
+
+.. |rme| image:: ../images/remove_elements_icon.png
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+#. From the **Modification** menu choose **Remove** and from the associated submenu select the **Elements**, or just click *"Remove elements"* button |rme| in the toolbar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/removeelements.png
+               :align: center
+
+   In this dialog box you can specify one or several elements:
+
+   * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+   * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+   * apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`selection_filter_library_page` page.
+
+#. Click **Apply** or **Apply and Close** to confirm deletion of the specified elements.
+
+.. image:: ../images/remove_nodes1.png 
+       :align: center
+
+.. centered::
+       The initial mesh
+
+.. image:: ../images/remove_nodes2.png 
+       :align: center
+
+.. centered::
+       The mesh with some elements removed
+
+
+.. _clear_mesh_anchor:
+
+Clearing Mesh Data
+##################
+
+*To remove all nodes and all types of cells in your mesh at once:*
+
+.. |clr| image:: ../images/mesh_clear.png
+
+#. Select your mesh in the Object Browser or in the 3D viewer.
+#. From the **Modification** menu choose **Remove** and from the associated submenu select the **Clear Mesh Data**, or just click *"Clear Mesh Data"* button |clr| in the toolbar. You can also right-click on the mesh in the Object Browser and select **Clear Mesh Data** in the pop-up menu.
+
+.. note::
+   This command works in a different way in different situations: 
+               * if the mesh is computed on a geometry, then *Clear Mesh Data* removes all elements and nodes.
+               * if the mesh is not based on a geometry (imported, compound, created from scratch etc.), then *Clear Mesh Data* removes only the elements and nodes computed by algorithms. If no such elements or nodes have been created, can remove nothing.
+
+**See Also** a sample TUI Script of a :ref:`tui_removing_nodes_and_elements` operation.  
+
+
+
diff --git a/doc/salome/gui/SMESH/input/reorient_faces.doc b/doc/salome/gui/SMESH/input/reorient_faces.doc
deleted file mode 100644 (file)
index 96072cf..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*!
-
-\page reorient_faces_page Orient faces
-
-\n This operation allows fixing the orientation of a set of faces in
-the following ways:
-<ul>
-<li>The required orientation of a set of neighboring faces can be defined
-  by a vector giving the direction of a normal to a certain face. <br>
-  Since the direction of face normals in the set can be even opposite,
-  it is necessary to specify a \a control face, the normal to which
-  will be compared with the vector. This face can be either:
-  <ul>
-    <li>found by proximity to a given point, or</li> 
-    <li>specified explicitly.</li> 
-  </ul>
-</li>
-<li>Alternatively, the faces can be oriented relatively to the adjacent volumes.</li>
-</ul>
-
-The orientation of a face is changed by reverting the order of its nodes.
-
-<em>To set orientation of faces:</em>
-<ol>
-<li>In the \b Modification menu select <b>Reorient faces</b>
-  item or click <em>Reorient faces</em> button in the toolbar.
-
-<center>
-\image html reorient_faces_face.png
-<em>"Reorient faces" button</em>
-</center>
-</li>
-
-<li>In the "Reorient faces" dialog box
-
-<ul>
-<li>Select the \b Object (mesh, sub-mesh or group)
-  containing faces to reorient, in the Object Browser or in the 3D
-  Viewer.</li>
-
-<li>To reorient by direction of the face normal:
-    <ul>
-    <li>Specify the coordinates of the \b Point by which the control face
-      will be found. You can specify the \b Point by picking a
-      node in the 3D Viewer or selecting a vertex in the Object
-      Browser.</li>
-    <li>Set up the \b Direction vector to be compared with the normal of the
-      control face. There are following options: <ul>
-        <li>adjust vector components directly;</li>
-        <li>select a vertex in the Object Browser or a node in the 3D
-          Viewer; their coordinates will define vector components;</li>
-        <li> pick two nodes (holding Shift button), the \b Direction vector
-          will go from the first to the second node.</li>
-      </ul>
-    </ul>
-
-<br>
-<center>
-\image html reorient_2d_point.png "The orientation of adjacent faces is chosen according to a vector. The control face is found by point."
-</center>
-
-</li>
-
-<li>In the second mode it is possible to pick the \b Face by mouse in the 3D Viewer or directly input the \b Face ID in the corresponding field.
-
-<center>
-\image html reorient_2d_face.png "The orientation of adjacent faces is chosen according to a vector. The control face is explicitly given."
-</center>
-
-</li>
-
-<li>In the third mode, the faces can be reoriented according to volumes:
-    <ul>
-    <li>Select an object (mesh, sub-mesh or group) containing
-      reference \b Volumes, in the Object Browser or in the 3D
-      Viewer.</li>
-    <li>Specify whether face normals should point outside or inside
-      the reference volumes using <b>Face normal outside volume</b>
-      check-box.</li>
-    </ul>
-
-<br>
-<center>
-\image html reorient_2d_volume.png "The orientation of faces is chosen relatively to adjacent volumes."
-</center>
-
-</li>
-</ul>
-
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a
-\ref tui_reorient_faces "Reorient faces" operation. 
-
-*/
diff --git a/doc/salome/gui/SMESH/input/reorient_faces.rst b/doc/salome/gui/SMESH/input/reorient_faces.rst
new file mode 100644 (file)
index 0000000..82982dd
--- /dev/null
@@ -0,0 +1,64 @@
+
+.. _reorient_faces_page:
+
+************
+Orient faces
+************
+
+This operation allows fixing the orientation of a set of faces in the following ways:
+
+* The required orientation of a set of neighboring faces can be defined by a vector giving the direction of a normal to a certain face. Since the direction of face normals in the set can be even opposite, it is necessary to specify a *control* face, the normal to which will be compared with the vector. This face can be either:
+       * found by proximity to a given point, or 
+       * specified explicitly. 
+* Alternatively, the faces can be oriented relatively to the adjacent volumes.
+       
+The orientation of a face is changed by reverting the order of its nodes.
+
+*To set orientation of faces:*
+
+.. |img| image:: ../images/reorient_faces_face.png
+
+#. In the **Modification** menu select **Reorient faces** item or click *"Reorient faces"* button |img| in the toolbar.
+#. In the "Reorient faces" dialog box
+
+   * Select the **Object** (mesh, sub-mesh or group) containing faces to reorient, in the Object Browser or in the 3D Viewer.
+   * To reorient by direction of the face normal:
+    
+       * Specify the coordinates of the **Point** by which the control face will be found. You can specify the **Point** by picking a node in the 3D Viewer or selecting a vertex in the Object Browser.
+       * Set up the **Direction** vector to be compared with the normal of the control face. There are following options: 
+
+               * adjust vector components directly;
+               * select a vertex in the Object Browser or a node in the 3D Viewer; their coordinates will define vector components;
+               * pick two nodes (holding Shift button), the **Direction** vector will go from the first to the second node.
+
+               .. image:: ../images/reorient_2d_point.png 
+                       :align: center
+
+               .. centered::
+                       The orientation of adjacent faces is chosen according to a vector. The control face is found by point.
+
+   * In the second mode it is possible to pick the **Face** by mouse in the 3D Viewer or directly input the **Face** ID in the corresponding field.
+
+       .. image:: ../images/reorient_2d_face.png 
+               :align: center
+
+       .. centered::
+               The orientation of adjacent faces is chosen according to a vector. The control face is explicitly given.
+
+
+   * In the third mode, the faces can be reoriented according to volumes:
+
+     * Select an object (mesh, sub-mesh or group) containing reference **Volumes**, in the Object Browser or in the 3D Viewer.
+     * Specify whether face normals should point outside or inside the reference volumes using **Face normal outside volume** check-box.
+
+               .. image:: ../images/reorient_2d_volume.png 
+                       :align: center
+
+               .. centered::
+                       The orientation of faces is chosen relatively to adjacent volumes.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_reorient_faces` operation. 
+
+
diff --git a/doc/salome/gui/SMESH/input/revolution.doc b/doc/salome/gui/SMESH/input/revolution.doc
deleted file mode 100644 (file)
index 4b1d812..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
-
-\page revolution_page Revolution
-
-\n Revolution is used to build mesh elements of plus one
-dimension than the input ones.  Boundary elements around generated
-mesh of plus one dimension are additionally created. All created
-elements can be automatically grouped. Revolution can be used to create
-a \ref extrusion_struct "structured mesh from scratch". 
-See \ref extrusion_page page for general information on Revolution,
-which can be viewed as extrusion along a circular path.
-
-<em>To apply revolution:</em>
-<ol>
-  <li>From the \b Modification menu choose the \b Revolution item or click
-    <em>"Revolution"</em> button in the toolbar.
-
-\image html image92.png
-<center><em>"Revolution" button</em></center>
-
-The following dialog will appear:
-
-\image html revolution1.png
-
-  </li>
-
-  <li>In this dialog:
-    <ul>
-    <li>Use \a Selection button to specify what you are going to
-    select at a given moment, \b Nodes, \b Edges or \b Faces.
-\image html image120.png
-<center><em>"Selection" button</em></center>
-    </li>
-    <li>Specify \b Nodes, \b Edges and \b Faces, which will be revolved, by one
-      of following means:
-      <ul>
-        <li><b>Select the whole mesh, sub-mesh or group</b> activating this
-          check-box.</li>
-        <li>Choose mesh elements with the mouse in the 3D Viewer. It is
-          possible to select a whole area with a mouse frame.</li>
-        <li>Input the element IDs directly in <b>Node IDs</b>, <b>Edge
-            IDs</b> and <b>Face IDs</b> fields. The selected elements will
-          be highlighted in the viewer, if the mesh is shown there.</li>
-        <li>Apply Filters. <b>Set filter</b> button allows to apply a
-          filter to the selection of elements. See more about filters in
-          the \ref filtering_elements "Selection filters" page.</li>
-      </ul>
-    </li>
-    <li>Specify the \b Axis of revolution:
-      <ul>
-        <li>Specify the coordinates of the start \b Point of the
-          axis of revolution; either directly or by picking a node
-          in the Viewer (selection of nodes is activated as you click
-          the \a Selection button).</li>
-        <li>Specify the \b Vector of the axis in either of three ways:
-          <ul>
-            <li>directly adjust vector components;</li>
-            <li>click \a Selection button, choose <em>From Origin to
-                selected Point</em> in the opened menu and pick a node
-                in the Viewer; </li>
-            <li>click \a Selection button, chose <em>Normal to
-                selected Face</em> in the opened menu and pick a mesh
-                face in the Viewer.</li> 
-      </ul></ul>
-    </li>
-    <li>Specify the \b Angle of revolution and the <b>Number of
-        steps </b> of revolution,
-      <ul> 
-        <li> <b>Angle by Step</b> - the elements are revolved by the
-          specified angle at each step (i.e. for Angle=30 and Number of
-          Steps=3, the elements will be extruded by 30 degrees twice for a
-          total of 30*3=90)
-\image html revolutionsn2.png "Example of Revolution with Angle by Step. Angle=30 and Number of Steps=3"
-        </li>
-        <li> <b>Total Angle</b> - the elements are revolved by the
-          specified angle only once and the number of steps defines the
-          number of iterations (i.e. for Angle=30 and Number of Steps=3,
-          the elements will be revolved by 30/3=10 degrees twice for a
-          total of 30).
-\image html revolutionsn1.png "Example of Revolution with Total Angle. Angle=30 and Number of Steps=3"
-        </li>
-      </ul>
-    </li>
-    <li>Specify the \b Tolerance, which is used to detect nodes lying
-      on the axis of revolution.
-    </li>
-    <li>Activate  <b>Preview</b> check-box to see the result mesh in
-      the viewer.
-    </li>
-    <li>If you activate <b>Generate Groups</b> check-box, the <em>result elements</em>
-      created from <em>selected elements</em> contained in groups will be
-      included into new groups named by pattern "<old group
-      name>_rotated" and "<old group name>_top". For example if a
-      selected quadrangle is included in \a g_Faces group (see figures
-      below) then result hexahedra will be included in \a
-      g_Faces_rotated group and a quadrangle created at the "top" of
-      revolved mesh will be included in \a g_Faces_top group. <br> 
-\image html extrusion_groups.png
-\image html extrusion_groups_res.png
-    <p> This check-box is active only if there are some groups in the mesh.
-    </li>
-    </ul>
-  </li>
-
-  <li>Click \b Apply or <b> Apply and Close</b> button to confirm the
-    operation.</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a
-\ref tui_revolution "Revolution" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/revolution.rst b/doc/salome/gui/SMESH/input/revolution.rst
new file mode 100644 (file)
index 0000000..ef70b40
--- /dev/null
@@ -0,0 +1,77 @@
+.. _revolution_page:
+
+**********
+Revolution
+**********
+
+Revolution is used to build mesh elements of plus one
+dimension than the input ones.  Boundary elements around generated
+mesh of plus one dimension are additionally created. All created
+elements can be automatically grouped. Revolution can be used to create
+a :ref:`structured mesh from scratch <extrusion_struct>`. 
+See :ref:`extrusion_page` page for general information on Revolution,
+which can be viewed as extrusion along a circular path.
+
+*To apply revolution:*
+
+.. |img| image:: ../images/image92.png
+.. |sel| image:: ../images/image120.png
+
+#. From the **Modification** menu choose the **Revolution** item or click  **"Revolution"** button in the toolbar.
+
+   The following dialog will appear:
+
+       .. image:: ../images/revolution1.png
+               :align: center
+  
+
+#. In this dialog:
+    
+       * Use *Selection* button |sel| to specify what you are going to select at a given moment, **Nodes**, **Edges** or **Faces**.
+
+       * Specify **Nodes**, **Edges** and **Faces**, which will be revolved, by one of following means:
+               * **Select the whole mesh, sub-mesh or group** activating this check-box.
+               * Choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame.
+               * Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face IDs** fields. The selected elements will be highlighted in the viewer, if the mesh is shown there.
+               * Apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`filtering_elements` page.
+       * Specify the **Axis** of revolution:
+               * Specify the coordinates of the start **Point** of the axis of revolution; either directly or by picking a node in the Viewer (selection of nodes is activated as you click the *Selection* button).
+               * Specify the **Vector** of the axis in either of three ways:
+                       * directly adjust vector components;
+                       * click *Selection* button, choose **From Origin to selected Point** in the opened menu and pick a node in the Viewer; 
+                       * click *Selection* button, chose **Normal to selected Face** in the opened menu and pick a mesh face in the Viewer. 
+       * Specify the **Angle** of revolution and the **Number of steps** of revolution,
+               * **Angle by Step** - the elements are revolved by the specified angle at each step (i.e. for Angle=30 and Number of Steps=3, the elements will be extruded by 30 degrees twice for a total of 30*3=90)
+
+               .. image:: ../images/revolutionsn2.png 
+                       :align: center
+
+               .. centered::
+                       Example of Revolution with Angle by Step. Angle=30 and Number of Steps=3
+        
+               * **Total Angle** - the elements are revolved by the specified angle only once and the number of steps defines the number of iterations (i.e. for Angle=30 and Number of Steps=3, the elements will be revolved by 30/3=10 degrees twice for a total of 30).
+
+               .. image:: ../images/revolutionsn1.png 
+                       :align: center
+
+               .. centered::
+                       Example of Revolution with Total Angle. Angle=30 and Number of Steps=3
+        
+      
+    
+       * Specify the **Tolerance**, which is used to detect nodes lying on the axis of revolution.
+       * Activate  **Preview** check-box to see the result mesh in the viewer.
+       * If you activate **Generate Groups** check-box, the **result elements** created from **selected elements** contained in groups will be included into new groups named by pattern "<old group name>_rotated" and "<old group name>_top". For example if a selected quadrangle is included in *g_Faces* group (see figures below) then result hexahedra will be included in *g_Faces_rotated* group and a quadrangle created at the "top" of revolved mesh will be included in *g_Faces_top* group.  
+
+       .. image:: ../images/extrusion_groups.png
+               :align: center
+
+       .. image:: ../images/extrusion_groups_res.png
+               :align: center
+
+
+       This check-box is active only if there are some groups in the mesh.
+
+#. Click **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_revolution` operation.
diff --git a/doc/salome/gui/SMESH/input/rotation.doc b/doc/salome/gui/SMESH/input/rotation.doc
deleted file mode 100644 (file)
index cb46359..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-
-\page rotation_page Rotation
-
-\n This operation allows to rotate in space the mesh or
-some of its elements.
-
-<em>To rotate the mesh:</em>
-
-<ol>
-<li>From the \b Modification menu choose \b Transformation -> \b Rotation item  or click
-<em>"Rotation"</em> button in the toolbar.
-\image html rotation_ico.png "Rotation button"
-
-The following dialog will appear:
-
-\image html rotation.png
-
-</li>
-
-<li>
-In this dialog:
-<ul>
-<li>specify the IDs of the elements which will be rotated:
-
-<ul>
-<li><b>Select the whole mesh, submesh or group</b> activating this
-checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
-viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of elements. See more
-about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-</li>
-
-<li>specify the axis of rotation:
-<ul>
-<li>specify the cooordinates of the start \b Point of the vector of rotation;</li>
-<li>specify the \b Vector of rotation through the coordinates of its
-end point with respect to the coordinates of the start point;</li>
-</ul>
-</li>
-<li>specify the \b Angle of rotation </li>
-
-<li>specify the conditions of rotation:
-<ul>
-<li>activate <b>Move elements</b> radio button to create  the source
-mesh (or elements) at the new location and erase it from the previous location;</li>
-<li>activate <b>Copy elements</b> radio button to create the source
-mesh (or elements) at the new location, but leave it at the previous
-location, the source mesh will be considered one and single mesh with the result of the rotation;</li>
-<li>activate <b>Create as new mesh</b> radio button to leave the
-source mesh (or elements) at its previous location and create a new
-mesh at the new location, the new mesh appears in the Object Browser
-with the default name MeshName_rotated (it is possible to change this
-name in the adjacent box);</li>
-<li>activate <b> Copy groups </b> checkbox to copy the groups of elements of the source mesh to the newly created mesh.</li>
-</ul>
-</li>
-
-<li>activate <b>Preview</b> checkbox to show the result of transformation in the viewer </li>
-<li>click \b Apply or <b> Apply and Close</b> button to confirm the
-operation.</li>
-</ul>
-</ol>
-
-
-\image html rotation1.png "The initial mesh"
-
-\image html rotation2.png "The rotated mesh"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_rotation "Rotation" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/rotation.rst b/doc/salome/gui/SMESH/input/rotation.rst
new file mode 100644 (file)
index 0000000..85eb11d
--- /dev/null
@@ -0,0 +1,59 @@
+.. _rotation_page:
+
+********
+Rotation
+********
+
+This operation allows to rotate in space the mesh or some of its elements.
+
+*To rotate the mesh:*
+
+.. |img| image:: ../images/rotation_ico.png 
+
+#. From the **Modification** menu choose **Transformation** -> **Rotation** item  or click *"Rotation"* button |img| in the toolbar.
+   The following dialog will appear:
+
+       .. image:: ../images/rotation.png
+               :align: center
+
+#. In this dialog:
+
+       * specify the IDs of the elements which will be rotated:
+
+               * **Select the whole mesh, submesh or group** activating this checkbox; or
+               * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+               * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+               * apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`selection_filter_library_page` page.
+
+       * specify the axis of rotation:
+               * specify the cooordinates of the start **Point** of the vector of rotation;
+               * specify the **Vector** of rotation through the coordinates of its end point with respect to the coordinates of the start point;
+
+       * specify the **Angle** of rotation 
+
+       * specify the conditions of rotation:
+
+               * activate **Move elements** radio button to create  the source mesh (or elements) at the new location and erase it from the previous location;
+               * activate **Copy elements** radio button to create the source mesh (or elements) at the new location, but leave it at the previous location, the source mesh will be considered one and single mesh with the result of the rotation;
+               * activate **Create as new mesh** radio button to leave the source mesh (or elements) at its previous location and create a new mesh at the new location, the new mesh appears in the Object Browser with the default name MeshName_rotated (it is possible to change this name in the adjacent box);
+               * activate **Copy groups** checkbox to copy the groups of elements of the source mesh to the newly created mesh.
+
+       * activate **Preview** checkbox to show the result of transformation in the viewer 
+       * click **Apply** or **Apply and Close** button to confirm the operation.
+
+
+.. image:: ../images/rotation1.png 
+       :align: center
+
+.. centered::
+       The initial mesh
+
+.. image:: ../images/rotation2.png 
+       :align: center
+
+.. centered::
+       The rotated mesh
+
+**See Also** a sample TUI Script of a :ref:`tui_rotation` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/scalar_bar.doc b/doc/salome/gui/SMESH/input/scalar_bar.doc
deleted file mode 100755 (executable)
index 9d36cd3..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-
-\page scalar_bar_dlg Scalar Bar properties
-
-In this dialog you can specify the properties of the scalar bar
-
-\image html scalar_bar_dlg.png
-
-<ul>
-<li><b>Scalar Range</b> - in this menu you can specify 
-<b>Min value</b> and <b>Max value</b> of the <b>Scalar Bar</b>, and
-turn on/off <b>Logarithmic</b> scaling of the scalar bar.</li>
-
-\note <b>Logarithmic scale</b> is not applicable in case of
-negative and zero values in the range. In such cases it is disabled.
-
-<li><b>Font</b> - in this menu you can set type, face and color for
-the font of <b>Title</b> and <b>Labels</b> of the <b>Scalar
-Bar</b></li>
-
-<li><b>Colors & Labels</b> - in this menu you can set the <b>number of
-colors</b> and the <b>number of labels</b> of the <b>Scalar
-Bar</b></li>
-
-<li><b>Orientation</b> - allows choosing between vertical and
-horizontal orientation of the <b>Scalar Bar</b></li>.
-
-<li><b>Origin & Size Vertical & Horizontal</b> - allows defining the
-location (<b>X</b> and <b>Y</b>) and size (<b>Width</b> and
-<b>Height</b>) of <b>Scalar Bar</b></li>
-<ul>
-<li><b>X</b>: abscissa of the origin (from the left
-side)</li>
-<li><b>Y</b>: ordinate of the origin (from the bottom)</li>
-</ul>
-<li><b>Distribution</b> - in this menu you can Show/Hide distribution histogram of the values of the <b>Scalar Bar</b> and specify histogram properties</li>
-<ul>
-<li><b>Multicolor</b> the histogram is colored as <b>Scalar Bar</b></li>
-<li><b>Monocolor</b> the histogram is colored as selected with <b>Distribution color</b> selector</li>
-</ul>
-</ul>
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/scalar_bar.rst b/doc/salome/gui/SMESH/input/scalar_bar.rst
new file mode 100644 (file)
index 0000000..fa1961e
--- /dev/null
@@ -0,0 +1,29 @@
+.. _scalar_bar_dlg:
+
+*********************
+Scalar Bar properties
+*********************
+
+In this dialog you can specify the properties of the scalar bar
+
+.. image:: ../images/scalar_bar_dlg.png
+       :align: center
+
+
+* **Scalar Range** - in this menu you can specify **Min value** and **Max value** of the **Scalar Bar**, and turn on/off **Logarithmic** scaling of the scalar bar.
+
+       .. note::
+               **Logarithmic scale** is not applicable in case of negative and zero values in the range. In such cases it is disabled.
+
+* **Font** - in this menu you can set type, face and color for the font of **Title** and **Labels** of the **Scalar Bar**
+
+* **Colors & Labels** - in this menu you can set the **number of colors** and the **number of labels** of the **Scalar Bar**
+
+* **Orientation** - allows choosing between vertical and horizontal orientation of the **Scalar Bar**.
+
+* **Origin & Size Vertical & Horizontal** - allows defining the location (**X** and **Y**) and size (**Width** and **Height**) of **Scalar Bar**
+       * **X**: abscissa of the origin (from the left side)
+       * **Y**: ordinate of the origin (from the bottom)
+* **Distribution** - in this menu you can Show/Hide distribution histogram of the values of the **Scalar Bar** and specify histogram properties
+       * **Multicolor** the histogram is colored as **Scalar Bar**
+       * **Monocolor** the histogram is colored as selected with **Distribution color** selector
diff --git a/doc/salome/gui/SMESH/input/scale.doc b/doc/salome/gui/SMESH/input/scale.doc
deleted file mode 100644 (file)
index 57626fd..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*!
-
-\page scale_page Scale
-
-\n This geometrical operation allows to scale in space your mesh
-or some of its elements.
-
-<em>To scale a mesh:</em>
-
-<ol>
-<li>From the \b Modification menu choose \b Transformation -> \b Scale
-\b Transform item.
-
-One of the following dialogs will appear:
-
-With one scale factor:
-\image html scale01.png
-
-Or with different scale factors for axes:
-\image html scale02.png
-
-</li>
-
-<li>
-In the dialog:
-<ul>
-<li>specify the IDs of the translated elements:
-
-<ul>
-<li><b>Select the whole mesh, submesh or group</b> activating this
-checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
-viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of elements. See more
-about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-</li>
-
-<li>specify the base point for scale</li>
-
-<li>specify the scale factor</li>
-
-<li>specify the conditions of scale:
-<ul>
-<li>activate <b>Move elements</b> radio button to scale the selected
-mesh (or elements) without creating a copy;</li>
-<li>activate <b>Copy elements</b> radio button to duplicate the selected
-mesh (or elements) and to apply scaling to the copy within the same mesh;</li>
-<li>activate <b>Create as new mesh</b> radio button to leave the
-selected mesh (or elements) at its previous location and create a new
-mesh of the scaled copy of the selected elements; the new mesh appears in the Object Browser
-with the default name MeshName_scaled (it is possible to change this
-name in the adjacent box);</li>
-<li>activate <b> Copy groups </b> checkbox to copy the groups of
-elements existing in the source mesh to the newly created mesh.</li>
-</ul>
-</li>
-
-</li>
-
-<li>activate <b>Preview</b> checkbox to show the result of transformation in the viewer </li>
-<li>click \b Apply or <b> Apply and Close</b> button to confirm the operation.</li>
-</ul>
-</ol>
-
-
-
-<b>Example of using:</b>
-
-1. Create quandrangle mesh 3x3 on a simple planar face (200x200)
-
-\image html scaleinit01.png
-
-and union 3 faces (along axis Z) to group "gr_faces"
-
-\image html scaleinit02.png
-
-
-
-2. Perform scale operation for the whole mesh and create a new mesh:
-
-\image html scale03.png
-
-result after operation:
-
-\image html scaleres03.png
-
-
-
-3. Perform scale operation for the whole mesh and copy elements:
-
-\image html scale04.png
-
-result after operation:
-
-\image html scaleres04.png
-
-
-
-4. Perform scale operation for a group of faces and copy elements:
-
-\image html scale06.png
-
-result after operation:
-
-\image html scaleres06.png
-
-
-
-5. Perform scale operation for two edges and move elements:
-
-\image html scale07.png
-
-result after operation:
-
-\image html scaleres07.png
-
-
-
-6. Perform scale operation for one face and move elements:
-
-\image html scale09.png
-
-result after operation:
-
-\image html scaleres09.png
-
-
-<br><b>See Also</b> a sample TUI Script of a \ref tui_scale "Scale" operation.  
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/scale.rst b/doc/salome/gui/SMESH/input/scale.rst
new file mode 100644 (file)
index 0000000..9ff8b37
--- /dev/null
@@ -0,0 +1,119 @@
+.. _scale_page:
+
+*****
+Scale
+*****
+
+This geometrical operation allows to scale in space your mesh or some of its elements.
+
+*To scale a mesh:*
+
+#. From the **Modification** menu choose **Transformation** -> **Scale Transform** item.
+
+   The following dialogs will appear, where you can select how to scale:
+
+       * with one scale factor:
+
+       .. image:: ../images/scale01.png
+               :align: center
+
+       * or with different scale factors for axes:
+
+       .. image:: ../images/scale02.png
+               :align: center
+
+#. In the dialog:
+       * specify the IDs of the translated elements:
+               * **Select the whole mesh, submesh or group** activating this checkbox; or
+               * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+               * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+               * apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`selection_filter_library_page` page.
+
+       * specify the base point for scale
+
+       * specify the scale factor
+
+       * specify the conditions of scale:
+
+               * activate **Move elements** radio button to scale the selected mesh (or elements) without creating a copy;
+               * activate **Copy elements** radio button to duplicate the selected mesh (or elements) and to apply scaling to the copy within the same mesh;
+               * activate **Create as new mesh** radio button to leave the selected mesh (or elements) at its previous location and create a new mesh of the scaled copy of the selected elements; the new mesh appears in the Object Browser with the default name MeshName_scaled (it is possible to change this name in the adjacent box);
+               * activate **Copy groups** checkbox to copy the groups of elements existing in the source mesh to the newly created mesh.
+
+       * activate **Preview** checkbox to show the result of transformation in the viewer 
+       * click **Apply** or **Apply and Close** button to confirm the operation.
+
+
+**Example of using:**
+
+#. Create quandrangle mesh 3x3 on a simple planar face (200x200)
+
+       .. image:: ../images/scaleinit01.png
+               :align: center
+
+   and union 3 faces (along axis Z) to group "gr_faces"
+
+       .. image:: ../images/scaleinit02.png
+               :align: center
+
+
+
+#. Perform scale operation for the whole mesh and create a new mesh:
+
+       .. image:: ../images/scale03.png
+               :align: center
+
+   result after operation:
+
+       .. image:: ../images/scaleres03.png
+               :align: center
+
+#. Perform scale operation for the whole mesh and copy elements:
+
+       .. image:: ../images/scale04.png
+               :align: center
+
+   result after operation:
+
+       .. image:: ../images/scaleres04.png
+               :align: center
+
+#. Perform scale operation for a group of faces and copy elements:
+
+       .. image:: ../images/scale06.png
+               :align: center
+
+   result after operation:
+
+       .. image:: ../images/scaleres06.png
+               :align: center
+
+
+
+#. Perform scale operation for two edges and move elements:
+
+       .. image:: ../images/scale07.png
+               :align: center
+
+   result after operation:
+
+       .. image:: ../images/scaleres07.png
+               :align: center
+
+
+
+#. Perform scale operation for one face and move elements:
+
+       .. image:: ../images/scale09.png
+               :align: center
+
+   result after operation:
+
+       .. image:: ../images/scaleres09.png
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_scale` operation.  
+
+
+
diff --git a/doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc b/doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc
deleted file mode 100644 (file)
index ecd2e8a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
-
-\page segments_around_vertex_algo_page Segments around Vertex
-
-\n <b>Segments around Vertex</b> algorithm is considered to be a 0D meshing
-algorithm, but, of course, it doesn't mesh vertices. It allows to define
-the local size of the segments in the neighborhood of a certain
-vertex. If we assign this algorithm to a geometrical object of higher
-dimension, it applies to all its vertices.
-
-Length of segments near vertex is defined by <b> Length Near
-  Vertex </b> hypothesis.
-This hypothesis is used by \ref a1d_algos_anchor "Wire Discretization" or
-\ref a1d_algos_anchor "Composite Side Discretization" algorithms as
-follows: a geometrical edge is discretized according to a 1D
-  hypotheses and then nodes near vertices are modified to assure the
-  segment length required by <b> Length Near Vertex </b> hypothesis.
-
-\image html lengthnearvertex.png
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst b/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst
new file mode 100644 (file)
index 0000000..811ba02
--- /dev/null
@@ -0,0 +1,24 @@
+.. _segments_around_vertex_algo_page:
+
+**********************
+Segments around Vertex
+**********************
+
+**Segments around Vertex** algorithm is considered to be a 0D meshing
+algorithm, but, of course, it doesn't mesh vertices. It allows to define
+the local size of the segments in the neighborhood of a certain
+vertex. If we assign this algorithm to a geometrical object of higher
+dimension, it applies to all its vertices.
+
+Length of segments near vertex is defined by **Length Near Vertex** hypothesis.
+This hypothesis is used by :ref:`Wire Discretization <a1d_algos_anchor>` or
+:ref:`Composite Side Discretization <a1d_algos_anchor>` algorithms as
+follows: a geometrical edge is discretized according to a 1D 
+hypotheses and then nodes near vertices are modified to assure the 
+segment length required by **Length Near Vertex** hypothesis.
+
+.. image:: ../images/lengthnearvertex.png
+       :align: center                                                 
+
+
+
diff --git a/doc/salome/gui/SMESH/input/selection_filter_library.doc b/doc/salome/gui/SMESH/input/selection_filter_library.doc
deleted file mode 100644 (file)
index 97d63ec..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-/*!
-
-\page selection_filter_library_page Selection filter library
-
-\tableofcontents
-
-\section selection_filter_library Filter library
-
-\n Selection filter library allows creating and storing in files
-the filters that can be later reused for operations on meshes. You can
-access it from the Main Menu via <b>Tools / Selection filter library</b>.
-It is also possible to save/load a filter by invoking the filter library
-from \ref filtering_elements "Filter dialog" launched from any mesh operation.
-
-\image html selectionfilterlibrary.png
-
-<b>Library file name</b> shows the path and the file name where your
-filters will be stored. By clicking the <em>Browse</em> button you can
-load an existing filter library.
-\n <b>Names of filters</b> lists the filters created or uploaded for
-the current study. You can \b Add or \b Delete filters.
-\n In <b>Filter name</b> box you can specify the name for your
-filter. By default it is prefixed with the corresponding entity type.
-
-\section filtering_elements Filter Dialog
-
-When we use filters during group creation or another operation (by 
-clicking <b>Set Filter</b> button in the corresponding dialog), the
-dialog for setting filters looks as shown below.
-
-\image html a-filteronfaces.png
-
-The \b Add button creates a new criterion at the end of the list of
-criteria. The \b Insert button creates a new criterion before the
-selected criterion. The \b Remove button deletes the selected
-criterion. The \b Clear button deletes all criteria.\n
-If there is a choice of <b>Entity type</b> in the dialog, only
-criteria of currently selected type are used to create or change a
-filter, and criteria of hidden types (if were specified) are ignored.
-\n Each <b>Entity type</b> has its specific list of criteria, however all
-filters have common syntax. The <b>Threshold Value</b> should be specified 
-for most criteria. For numerical criteria it is necessary to indicate if 
-the found elements should be \b More, \b Less or \b Equal to this
-\b Value. You can also reverse the sense of a criterion using \b Unary
-operator \a Not and you should specify logical relations between
-criteria using \b Binary operators \a Or and \a And.
-\n Some criteria have the additional parameter of \b Tolerance.<br> 
-Switching on <b>Insert filter in viewer</b> check-box limits
-selection of elements in the Viewer to the current filter.
-<br>
-In the \b Source field you choose if the filter will be applied to
-the whole \b Mesh, the <b>Initial Selection</b> or the <b>Current
-Dialog</b>. If \b Mesh is chosen, the elements satisfying the filter
-will be selected in the 3D Viewer. If <b> Initial Selection</b> is
-chosen, the filter will be applied to the selected elements and the
-elements rejected by the filter will be deselected. If <b>Current
-Dialog</b> is chosen, the filter will be applied to the list of
-elements in the current dialog and the elements rejected
-by the filter will be removed from the list.
-<br>
-<b>Copy from...</b> button gives you a possibility to load an
-existing filter from <b>Selection filter library</b> and <b>Add
-to...</b> button gives you a possibility to save your current filter
-in the Library.
-<br>
-<b>Note:</b> If the button <b>Apply and Close</b> is disabled, there
-is no selected mesh in the Object Browser and the filter can not be
-created. You have to select the mesh and the button will be enabled.
-
-\section filtering_criteria Filtering Criteria
-
-Some criteria are applicable to all <b>Entity types</b>:
-<ul><li>
-<b>Belong to Geom</b> selects entities whose all nodes lie on the
-shape defined by <b>Threshold Value</b>. 
-If the threshold shape is a sub-shape of the main shape of the mesh,
-the filtering algorithm works faster because node-to-shape association
-is used instead of measuring distance between nodes and the shape, and
-\b Tolerance is not used. If the threshold shape is any other shape,
-the algorithm works slower because distance between nodes and the
-shape is measured and is compared with \b Tolerance. The latter
-approach (distance measurement) is also used if an element is not
-associated to any shape.
-</li><li>
-<b>Lying on Geom</b> selects entities whose at least one node
-lies on the shape defined by the <b>Threshold Value</b>.
-If the threshold shape is a sub-shape of the main shape of the mesh,
-the filtering algorithm works faster because node-to-shape association
-is used instead of measuring distance between nodes and the shape, and
-\b Tolerance is not used. If the threshold shape is any other shape,
-the algorithm works slower because distance between nodes and the
-shape is measured and is compared with \b Tolerance. The latter
-approach (distance measurement) is also used if an element is not
-associated to any shape.
-</li><li>
-<b>Belong to Mesh Group</b> selects entities included into the mesh group
-defined by the <b>Threshold Value</b>.
-</li><li>
-<b>Range of IDs</b> allows selection of entities with the specified
-IDs. 
-<b>Threshold Value</b> can be, for example: "1,2,3,50-60,63,67,70-78"
-</li><li>
-<b>Color of Group</b> allows selection of entities belonging to the Group with
-the color defined by the <b>Threshold Value</b>.
-</li><li>
-<b>Elements of a domain</b> allows selection of entities belonging to
-one domain of a mesh. The domain is mesh part not connected to
-other parts. <b>Threshold Value</b> locating any element of the domain can be either
-- node ID (that you can pick in the Viewer) or
-- geometrical vertex (that you can pick either in the Viewer or in the
-  Object Browser) or
-- 3 coordinates of a point (that you can enter in TUI mode only).
-
-</li>
-</ul>
-
-Some criteria are applicable to entities of dimension
-more than zero, i.e. to \b Edges, \b Faces and \b Volumes:
-<ul><li>
-<b>Linear</b> allows selection of Linear or Quadratic elements (if Unary is set to "Not")
-</li><li>
-<b>Geometry type</b> allows selection of elements by their geometric type
-defined by the <b>Threshold Value</b>. The list of available geometric
-types depends on the current entity type.
-</li><li>
-<b>Entity type</b> allows selection of elements by their type defined
-as a combination of geometry type and the number of nodes.
-</li>
-</ul>
-
-The following criteria are applicable to Entities of \b all types
-except for \a Volumes:
-<ul><li>
-<b>Belong to Plane</b> selects entities whose all nodes belong to a
-specified plane within a given <b>Tolerance</b>.
-</li><li>
-<b>Belong to Cylinder</b> selects entities whose all nodes belong to a
-specified cylinder within a given <b>Tolerance</b>.
-</li><li>
-<b>Belong to Surface</b> selects entities whose all nodes belong to a
-specified arbitrary surface within a given <b>Tolerance</b>.
-</li>
-</ul>
-
-The following criteria allow selecting mesh <b>Nodes</b>:
-<ul><li>
-<b>Free nodes</b> selects nodes not belonging to any mesh element.
-</li><li>
-<b>Double nodes</b> selects a node coincident with other nodes 
-(within a given <b>Tolerance</b>). 
-See also \ref tui_double_nodes_control "Double Nodes quality control".
-</li><li>
-<b>Connectivity number</b> selects nodes with a number of connected
-elements, which is more, less or equal to the predefined <b>Threshold
-  Value</b>. Elements of the highest dimension are countered only.
-</li>
-</ul>
-
-The following criteria allow selecting mesh <b>Edges</b>:
-<ul><li>
-<b>Free Borders</b> selects free 1D mesh elements, i.e. edges belonging to 
-one element (face or volume) only. See also a
-\ref free_borders_page "Free Borders quality control".
-</li><li>
-<b>Double edges</b> selects 1D mesh elements basing on the same set of nodes.
-See also \ref filter_double_elements "Double Elements quality control".
-</li><li>
-<b>Borders at Multi-Connections</b> selects edges belonging to several faces.
-The number of faces should be more, less or equal (within a given <b>Tolerance</b>)
-to the predefined <b>Threshold Value</b>. See also a
-\ref borders_at_multi_connection_page "Borders at Multi-Connection quality control".
-</li><li>
-<b>Length</b> selects edges with a value of length, which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-See also a
-\ref length_page "Length quality control".
-</li>
-</ul>
-
-The following criteria allow selecting mesh <b>Faces</b>:
-<ul><li>
-<b>Aspect ratio</b> selects 2D mesh elements with an aspect ratio (see also an
-\ref aspect_ratio_page "Aspect Ratio quality control"), which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Warping</b> selects quadrangles with warping angle (see also a
-\ref warping_page "Warping quality control"), which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Minimum angle</b> selects triangles and quadrangles with minimum angle (see also a
-\ref minimum_angle_page "Minimum angle quality control"), which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Taper</b> selects quadrangles cells with taper value (see also a
-\ref taper_page "Taper quality control"), which is more, less or equal (within a given
-<b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Skew</b> selects triangles and quadrangles with skew value (see also a
-\ref skew_page "Skew quality control"), which is more, less or equal (within a given
-<b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Area</b> selects triangles and quadrangles with a value of area (see also an
-\ref area_page "Area quality control"), which is more, less or equal (within a given
-<b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Free edges</b> selects 2D mesh elements having at least one 
-edge, which is not shared with other faces. See also a
-\ref free_edges_page "Free Edges quality control".
-</li><li>
-<b>Free faces</b> selects 2D mesh elements, which belong to less than two volumes.
-</li><li>
-<b>Double faces</b> selects 2D mesh elements basing on the same set of nodes.
-See also \ref filter_double_elements "Double Elements quality control".
-</li><li>
-<b>Faces with bare border</b> selects 2D mesh elements having a free border without an edge on it.
-See also \ref bare_border_faces_page "Bare border faces quality control".
-</li><li>
-<b>Over-constrained faces</b> selects 2D mesh elements having only one border shared 
-with other 2D elements.
-See also \ref over_constrained_faces_page "Over-constrained faces quality control".
-</li><li>
-<b>Borders at Multi-Connections 2D</b> selects cells consisting of edges belonging to
-several elements of mesh. The number of mesh elements should be more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-See also a
-\ref borders_at_multi_connection_2d_page "Borders at Multi-Connection 2D quality control".
-</li><li>
-<b>Length 2D</b> selects triangles and quadrangles combining of the edges with a value of
-length, which is more, less or equal (within a given <b>Tolerance</b>) to the predefined
-<b>Threshold Value</b>. See also a
-\ref length_2d_page "Length 2D quality control".
-</li><li>
-<b>Coplanar faces</b> selects mesh faces neighboring the one selected
-by ID in <b>Threshold Value</b> field, if the angle between the
-normal to the neighboring face and the normal to the selected face is less then the
-angular tolerance (defined in degrees). Selection continues among all neighbor faces of already 
-selected ones.<br>
-</li><li>
-<b>Deflection 2D</b> selects 2D mesh elements having distance between their gravity
-centers and underlying surfaces, which is more, less or equal (within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>. See also a
-\ref deflection_2d_page "Deflection 2D quality control".
-</li><li>
-<b>Element Diameter 2D</b> selects triangles and quadrangles composed of the edges and
-diagonals with a value of length, which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>. See also a
-\ref max_element_length_2d_page "Element Diameter 2D quality control".
-</li>
-</ul>
-
-The following criteria allow selecting mesh <b>Volumes</b>:
-<ul><li>
-<b>Aspect ratio 3D</b> selects 3D mesh elements with an aspect ratio (see also an
-\ref aspect_ratio_3d_page "Aspect Ratio 3D quality control"), which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Volume</b> selects 3D mesh elements with a value of volume (see also a
-\ref volume_page "Volume quality control"), which is more, less or equal (within a given
-<b>Tolerance</b>) to the predefined <b>Threshold Value</b>.
-</li><li>
-<b>Element Diameter 3D</b> selects 3D mesh elements composed of the edges and
-diagonals with a value of length, which is more, less or equal
-(within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>. See also a
-\ref max_element_length_3d_page "Element Diameter 3D quality control".
-</li><li>
-<b>Double volumes</b> selects 3D mesh elements basing on the same set of nodes.
-See also \ref filter_double_elements "Double Elements quality control".
-</li><li>
-<b>Bad oriented volume</b> selects mesh volumes, which are incorrectly oriented from
-the point of view of MED convention.
-</li><li>
-<b>Over-constrained volumes</b> selects mesh volumes having only one facet shared 
-with other volumes.
-See also \ref over_constrained_volumes_page "Over-constrained volumes quality control".
-</li><li>
-<b>Volumes with bare border</b> selects 3D mesh elements having a free border without a face on it.
-See also \ref bare_border_volumes_page "Bare border volumes quality control".
-</li>
-</ul>
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/selection_filter_library.rst b/doc/salome/gui/SMESH/input/selection_filter_library.rst
new file mode 100644 (file)
index 0000000..928678c
--- /dev/null
@@ -0,0 +1,148 @@
+.. _selection_filter_library_page:
+
+************************
+Selection filter library
+************************
+
+Selection filter library allows creating and storing in files
+the filters that can be later reused for operations on meshes. You can
+access it via menu **Tools > Selection filter library**.
+It is also possible to save/load a filter by invoking the filter library
+from :ref:`filtering_elements` launched from any mesh operation.
+
+.. image:: ../images/selectionfilterlibrary.png
+       :align: center
+
+**Library file name** shows the path and the file name where your
+filters will be stored. By clicking the **Browse** button you can
+load an existing filter library.
+
+**Names of filters** lists the filters created or uploaded for
+the current study. You can **Add** or **Delete** filters.
+
+In **Filter name** box you can specify the name for your
+filter. By default it is prefixed with the corresponding entity type.
+
+.. _filtering_elements:
+
+Filter Dialog
+#############
+
+When we use filters during group creation or another operation (by 
+clicking **Set Filter** button in the corresponding dialog), the
+dialog for setting filters looks as shown below.
+
+.. image:: ../images/a-filteronfaces.png
+       :align: center
+
+The **Add** button creates a new criterion at the end of the list of
+criteria. The **Insert** button creates a new criterion before the
+selected criterion. The **Remove** button deletes the selected
+criterion. The **Clear** button deletes all criteria.
+
+If there is a choice of **Entity type** in the dialog, only
+criteria of currently selected type are used to create or change a
+filter, and criteria of hidden types (if were specified) are ignored.
+
+Each **Entity type** has its specific list of criteria, however all
+filters have common syntax. The **Threshold Value** should be specified 
+for most criteria. For numerical criteria it is necessary to indicate if 
+the found elements should be **More**, **Less** or **Equal** to this
+**Value**. You can also reverse the sense of a criterion using **Unary**
+operator *Not* and you should specify logical relations between
+criteria using **Binary** operators *Or* and *And*.
+
+Some criteria have the additional parameter of **Tolerance**. 
+
+Switching on **Insert filter in viewer** check-box limits
+selection of elements in the Viewer to the current filter.
+
+In the **Source** field you choose if the filter will be applied to
+the whole **Mesh**, the **Initial Selection** or the **Current Dialog**. 
+If **Mesh** is chosen, the elements satisfying the filter
+will be selected in the 3D Viewer. If **Initial Selection** is
+chosen, the filter will be applied to the selected elements and the
+elements rejected by the filter will be deselected. If **Current Dialog** 
+is chosen, the filter will be applied to the list of
+elements in the current dialog and the elements rejected
+by the filter will be removed from the list.
+
+**Copy from...** button gives you a possibility to load an
+existing filter from **Selection filter library** and **Add to...** 
+button gives you a possibility to save your current filter in the Library.
+
+.. note::
+       If the button **Apply and Close** is disabled, there is no selected mesh in the Object Browser and the filter can not be created. You have to select the mesh and the button will be enabled.
+
+Some criteria are applicable to all **Entity types**:
+
+* **Belong to Geom** selects entities whose all nodes lie on the shape defined by **Threshold Value**. If the threshold shape is a sub-shape of the main shape of the mesh, the filtering algorithm works faster because node-to-shape association is used instead of measuring distance between nodes and the shape, and **Tolerance** is not used. If the threshold shape is any other shape, the algorithm works slower because distance between nodes and the shape is measured and is compared with **Tolerance**. The latter approach (distance measurement) is also used if an element is not associated to any shape.
+* **Lying on Geom** selects entities whose at least one node lies on the shape defined by the **Threshold Value**. If the threshold shape is a sub-shape of the main shape of the mesh, the filtering algorithm works faster because node-to-shape association is used instead of measuring distance between nodes and the shape, and **Tolerance** is not used. If the threshold shape is any other shape, the algorithm works slower because distance between nodes and the shape is measured and is compared with **Tolerance**. The latter approach (distance measurement) is also used if an element is not associated to any shape.
+* **Belong to Mesh Group** selects entities included into the mesh group defined by the **Threshold Value**.
+* **Range of IDs** allows selection of entities with the specified IDs. **Threshold Value** can be, for example: "1,2,3,50-60,63,67,70-78"
+* **Color of Group** allows selection of entities belonging to the Group with the color defined by the **Threshold Value**.
+* **Elements of a domain** allows selection of entities belonging to one domain of a mesh. The domain is mesh part not connected to other parts. **Threshold Value** locating any element of the domain can be either
+       * node ID (that you can pick in the Viewer) or
+       * geometrical vertex (that you can pick either in the Viewer or in the Object Browser) or
+       * 3 coordinates of a point (that you can enter in TUI mode only).
+
+Some criteria are applicable to entities of dimension more than zero, i.e. to **Edges**, **Faces** and **Volumes**:
+
+* **Linear** allows selection of Linear or Quadratic elements (if Unary is set to "Not")
+* **Geometry type** allows selection of elements by their geometric type defined by the **Threshold Value**. The list of available geometric types depends on the current entity type.
+* **Entity type** allows selection of elements by their type defined as a combination of geometry type and the number of nodes.
+
+The following criteria are applicable to Entities of **all** types except for *Volumes*:
+
+* **Belong to Plane** selects entities whose all nodes belong to a specified plane within a given **Tolerance**.
+* **Belong to Cylinder** selects entities whose all nodes belong to a specified cylinder within a given **Tolerance**.
+* **Belong to Surface** selects entities whose all nodes belong to a specified arbitrary surface within a given **Tolerance**.
+
+The following criteria allow selecting mesh **Nodes**:
+
+* **Free nodes** selects nodes not belonging to any mesh element.
+* **Double nodes** selects a node coincident with other nodes (within a given **Tolerance**). See also :ref:`Double Nodes quality control <tui_double_nodes_control>`.
+* **Connectivity number** selects nodes with a number of connected elements, which is more, less or equal to **Threshold Value**. Elements of the highest dimension are countered only.
+
+The following criteria allow selecting mesh **Edges**:
+
+* **Free Borders** selects free 1D mesh elements, i.e. edges belonging to one element (face or volume) only. See also a :ref:`Free Borders quality control <free_borders_page>`.
+* **Double edges** selects 1D mesh elements basing on the same set of nodes. See also :ref:`filter_double_elements` quality control.
+* **Borders at Multi-Connections** selects edges belonging to several faces. The number of faces should be more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`borders_at_multi_connection_page` quality control.
+* **Length** selects edges with a value of length, which is more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`length_page`  quality control.
+
+The following criteria allow selecting mesh **Faces**:
+
+* **Aspect ratio** selects 2D mesh elements with an aspect ratio (see also an :ref:`aspect_ratio_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Warping** selects quadrangles with warping angle (see also a :ref:`warping_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Minimum angle** selects triangles and quadrangles with minimum angle (see also a :ref:`minimum_angle_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Taper** selects quadrangles cells with taper value (see also a :ref:`taper_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Skew** selects triangles and quadrangles with skew value (see also a :ref:`skew_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Area** selects triangles and quadrangles with a value of area (see also an :ref:`area_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Free edges** selects 2D mesh elements having at least one edge, which is not shared with other faces. See also a :ref:`free_edges_page` quality control.
+* **Free faces** selects 2D mesh elements, which belong to less than two volumes.
+* **Double faces** selects 2D mesh elements basing on the same set of nodes. See also :ref:`filter_double_elements` quality control.
+* **Faces with bare border** selects 2D mesh elements having a free border without an edge on it. See also :ref:`bare_border_faces_page` quality control.
+* **Over-constrained faces** selects 2D mesh elements having only one border shared with other 2D elements. See also :ref:`over_constrained_faces_page` quality control.
+* **Borders at Multi-Connections 2D** selects cells consisting of edges belonging to several elements of mesh. The number of mesh elements should be more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`borders_at_multi_connection_2d_page` quality control.
+* **Length 2D** selects triangles and quadrangles combining of the edges with a value of length, which is more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`length_2d_page` quality control.
+* **Coplanar faces** selects mesh faces neighboring the one selected by ID in **Threshold Value** field, if the angle between the normal to the neighboring face and the normal to the selected face is less then the angular tolerance (defined in degrees). Selection continues among all neighbor faces of already selected ones.
+* **Element Diameter 2D** selects triangles and quadrangles composed of the edges and diagonals with a value of length, which is more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`max_element_length_2d_page` quality control.
+
+The following criteria allow selecting mesh **Volumes**:
+
+* **Aspect ratio 3D** selects 3D mesh elements with an aspect ratio (see also an :ref:`aspect_ratio_3d_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Volume** selects 3D mesh elements with a value of volume (see also a :ref:`volume_page` quality control), which is more, less or equal (within a given **Tolerance**) to **Threshold Value**.
+* **Element Diameter 3D** selects 3D mesh elements composed of the edges and diagonals with a value of length, which is more, less or equal (within a given **Tolerance**) to **Threshold Value**. See also a :ref:`max_element_length_3d_page` quality control.
+* **Double volumes** selects 3D mesh elements basing on the same set of nodes. See also :ref:`filter_double_elements` quality control.
+* **Bad oriented volume** selects mesh volumes, which are incorrectly oriented from the point of view of MED convention.
+* **Over-constrained volumes** selects mesh volumes having only one facet shared with other volumes. See also :ref:`over_constrained_volumes_page` quality control.
+* **Volumes with bare border** selects 3D mesh elements having a free border without a face on it. See also :ref:`bare_border_volumes_page` quality control.
+
+
+**See also** sample scripts of :ref:`tui_filters_page`.
+
+
+
+
+
diff --git a/doc/salome/gui/SMESH/input/sewing_meshes.doc b/doc/salome/gui/SMESH/input/sewing_meshes.doc
deleted file mode 100644 (file)
index cfb6206..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*!
-
-\page sewing_meshes_page Sewing meshes
-
-\n In SMESH you can sew elements of a mesh. The current
-functionality allows you to sew:
-<ul>
-<li>\ref free_borders_anchor "Free borders"</li>
-<li>\ref conform_free_borders_anchor "Conform free borders"</li>
-<li>\ref border_to_side_anchor "Border to side"</li>
-<li>\ref side_elements_anchor "Side elements"</li>
-</ul>
-
-\image html sewing.png "Sewing button"
-
-<em>To sew elements of a mesh:</em>
-<ol>
-<li>From the \b Modification menu choose the \b Transformation item
-and from its sub-menu select the \b Sewing item.</li>
-<li>Check in the dialog box one of the radio buttons corresponding to
-the type of sewing operation you would like to perform.</li>
-<li>Fill the other fields available in the dialog box.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to perform the
-  operation of sewing.</li>
-</ol>
-
-
-<br>
-\anchor free_borders_anchor
-<h2>Sew free borders</h2>
-
-This functionality allows you to unite free borders of a 2D mesh.
-
-There are two working modes: \a Automatic and \a Manual. In the \b
-Automatic mode, the program finds free borders coincident within the
-specified tolerance and sews them. Optionally it is possible to
-visually check and correct if necessary the found free borders before
-sewing. <br>
-In the \b Manual mode you are to define borders to sew by picking
-three nodes of each of two borders.
-
-\image html sewing1.png
-<center>Default mode is \a Automatic</center>
-
-To use \b Automatic sewing:
-<ul>
-<li>Specify the mesh you want to sew by selecting it or any its part
-  (group or sub-mesh) in the Object Browser or in the VTK Viewer.</li>
-<li>Specify the \b Tolerance, within which free borders are considered
-  coincident. At the default zero \b Tolerance, the tolerance used by
-  the search algorithm is defined as one tenth of an average size of
-  elements adjacent to compared free borders.</li>
-<li>To visually check the coincident free borders found by the
-  algorithm, switch off <b>Auto Sewing</b> check-box. The controls
-  to adjust groups of coincident free borders will become available in
-  the dialog.</li>
-
-\image html sewing_auto.png
-<center>Controls to adjust groups of coincident free borders</center>
-
-<li>\b Detect button launches the algorithm of search of coincident
-  free borders.</li>
-<li>The found groups of <b>Coincident Free Borders</b> are shown in the
-  list, one group per line. Each group has its own color, which is used
-  to display the group borders in the VTK Viewer. A free border
-  within a group is designated by the IDs of its first, second and
-  last nodes within parenthesis. All borders present in the list will
-  be sewn upon \b Apply. </li>
-<li>\b Remove button removes the selected groups from the list.</li>
-<li><b>Select All</b> check-box selects all groups in the list.</li>
-<li>When a group is selected, its borders appear in <b>Edit Selected
-    Group</b> list that allows you to change this group.</li>
-<li>
-\image html sort.png
-<em>Set First</em> button moves the selected border to the
-  first position in the group, as a result other borders will be moved
-  to this border during sewing.
-</li><li>
-\image html remove.png
-<em>Remove Border</em> button removes the selected borders from the
-  group. It is active if there are more than two borders in the group.
-</li>
-<li>Selection of a border in the list allows changing its first and
-  last nodes whose IDs appear in two fields below the list. \a Arrow
-  buttons near each field move the corresponding end node by the
-  number of nodes defined by \b Step field.</li>
-<li>
-\image html swap.png
-<em>Swap</em> button swaps the first and last nodes of a
-  selected border.
-</li>
-</ul>
-
-For sewing free borders manually you should switch the \b Mode to \b
-Manual and define three points on each border: the first, the second and the
-last node:
-
-\image html sewing_manual.png
-<ul>
-<li>the first node specifies beginning of the border;</li>
-<li>the second node specifies the part of the border which should be
-considered (as far as the free border usually forms a closed
-contour);</li>
-<li>the last node specifies the end of the border.</li>
-</ul>
-
-You can select these nodes in the 3D viewer or define by its id.
-
-The first and the second nodes should belong to the same link of a
-face. The second and the last nodes of a border can be the same. The
-first and the last nodes of two borders can be the same. The
-corresponding end nodes of two borders will be merged. Intermediate
-nodes of two borders will be either merged or inserted into faces of
-the opposite border.
-
-In practice the borders to sew often coincide and in this case it is
-difficult to specify the first and the last nodes of a border since
-they coincide with the first and the last nodes of the other
-border. To cope with this,
-\ref merging_nodes_page "merge" coincident nodes into one
-beforehand. Two figures below illustrate this approach.
-\image html sew_using_merge.png "Merge coincident nodes, which are difficult to distinguish"
-<br>
-\image html sew_after_merge.png "After merging nodes it is easy to specify border nodes"
-
-The sewing algorithm is as follows:
-<ol>
-<li>The parameter (U) of each node within a border is computed. So
-that the first node has U=0.0, the last node has U=1.0, for the rest
-nodes 0.0 < U < 1.0;</li>
-<li>Compare node parameters of the two borders. If two nodes of the
-opposite borders have close parameters, they are merged, i.e. a node
-of the first border is replaced in all elements by a node of the
-second border. If a node has no node with a close parameter in the
-opposite border, it is inserted into an edge of element of the
-opposite border, an element is split. Two nodes are considered close
-enough to merge, if difference of their parameters is less than one
-fifth of minimum length of adjacent face edges on the borders.</li>
-</ol>
-
-\image html image22.jpg "Sewing free borders"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_sew_free_borders "Sew Free Borders" operation.
-
-<br>
-\anchor conform_free_borders_anchor
-<h2>Sew conform free borders</h2>
-
-This functionality can be used to unite two free borders of a 2D mesh.
-
-\image html sewing2.png
-
-The borders of meshes for sewing are defined as for "Sew free borders"
-except that the second free border is not limited and can be defined
-by the first and the second nodes only. The first nodes of two borders
-can be the same.
-
-The algorithm is following: counting nodes starting at the first ones,
-the n-th node of the first border is merged with the n-th node of the
-other border, until the end of either of borders. Nodes of the first
-border are replaced in all elements with corresponding nodes of the
-second border.
-\n For sewing conform free borders you should define three points on
-the first border and two points on the second one. User can select
-these nodes in 3D viewer or define node by its id.
-
-\image html image23.jpg "Sewing conform free borders"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_sew_conform_free_borders "Sew Conform Free Borders"
-operation.
-
-<br>
-\anchor border_to_side_anchor
-<h2>Sew border to side</h2>
-
-"Sew border to side" is intended to sew a free border to a mesh
-surface.
-\n The free border is defined as for "Sewing of free borders". The
-place where to sew the border is defined by two nodes, between which
-the border faces are placed, so that the first border node is merged
-with the first node on the side and the last node of the border is
-merged with the second specified node on the side.
-
-\image html sewing3.png
-
-The algorithm is following.
-<ol>
-<li>Find a sequence of linked nodes on the side such that the found
-links to be most co-directed with the links of the free border.</li>
-<li>Sew two sequences of nodes using algorithm of "Sewing of free berders".
-\n For sewing border to side you should define three points on the
-border and two points on the side. User can select these nodes in 3D
-viewer or define node by its id.</li>
-</ol>
-
-\image html image30.jpg "Sewing border to side"
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_sew_meshes_border_to_side "Sew Border to Side" operation.  
-
-<br>
-\anchor side_elements_anchor
-<h2>Sew side elements</h2>
-
-This operation is intended to unite two mesh surfaces.
-
-\image html sewing4.png 
-
-Surfaces may be defined by either 2d or 3d elements. The number of
-given elements of the sides must be the same. The sets of given
-elements must be topologically equal, i.e. each node of one element
-set must have a corresponding node in the other element set and
-corresponding nodes must be equally linked. If there are 3d elements
-in a set, only their free faces must obey to that rule.
-\n Two corresponding nodes on each side must be specified. They must
-belong to one element and must be located on an element set boundary.
-
-Sewing algorithm finds and merges the corresponding nodes starting
-from the specified ones.
-
-\image html image31.jpg "Step-by-step sewing process"
-
-\image html image32.jpg "The result of side elements sewing"
-
-For sewing side elements you should define elements for sewing and two
-nodes for merging on the each side. User can select these elements and
-nodes in 3D viewer or define them by its id.
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_sew_side_elements "Sew Side Elements" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/sewing_meshes.rst b/doc/salome/gui/SMESH/input/sewing_meshes.rst
new file mode 100644 (file)
index 0000000..26e7a14
--- /dev/null
@@ -0,0 +1,250 @@
+.. _sewing_meshes_page:
+
+*************
+Sewing meshes
+*************
+
+In SMESH you can sew elements of a mesh. The current functionality allows you to sew:
+
+* :ref:`free_borders_anchor`
+* :ref:`conform_free_borders_anchor`
+* :ref:`border_to_side_anchor`
+* :ref:`side_elements_anchor`
+
+
+.. image:: ../images/sewing.png 
+       :align: center
+
+.. centered::
+       *"Sewing"* button
+
+*To sew elements of a mesh:*
+
+#. From the **Modification** menu choose the **Transformation** item and from its sub-menu select the **Sewing** item.
+#. Check in the dialog box one of the radio buttons corresponding to the type of sewing operation you would like to perform.
+#. Fill the other fields available in the dialog box.
+#. Click the **Apply** or **Apply and Close** button to perform the operation of sewing.
+
+
+
+.. _free_borders_anchor:
+
+Sew free borders
+################
+
+This functionality allows you to unite free borders of a 2D mesh.
+
+There are two working modes: *Automatic* and *Manual*.
+
+* In the **Automatic** mode, the program finds free borders coincident within the
+  specified tolerance and sews them. Optionally it is possible to
+  visually check and correct if necessary the found free borders before
+  sewing. 
+* In the **Manual** mode you are to define borders to sew by picking
+  three nodes of each of two borders.
+
+.. image:: ../images/sewing1.png
+       :align: center
+
+.. centered::
+       Default mode is *Automatic*
+
+To use **Automatic** sewing:
+
+* Specify the mesh you want to sew by selecting it or any its part (group or sub-mesh) in the Object Browser or in the VTK Viewer.
+* Specify the **Tolerance**, within which free borders are considered coincident. At the default zero **Tolerance**, the tolerance used by he search algorithm is defined as one tenth of an average size of elements adjacent to compared free borders.
+* To visually check the coincident free borders found by the algorithm, switch off **Auto Sewing** check-box. The controls to adjust groups of coincident free borders will become available in the dialog.
+
+       .. image:: ../images/sewing_auto.png
+               :align: center
+
+       .. centered::
+               Controls to adjust groups of coincident free borders
+
+* **Detect** button launches the algorithm of search of coincident free borders.
+* The found groups of **Coincident Free Borders** are shown in the list, one group per line. Each group has its own color, which is used to display the group borders in the VTK Viewer. A free border within a group is designated by the IDs of its first, second and last nodes within parenthesis. All borders present in the list will be sewn upon **Apply**. 
+* **Remove** button removes the selected groups from the list.
+* **Select All** check-box selects all groups in the list.
+* When a group is selected, its borders appear in **Edit Selected Group** list that allows you to change this group.
+
+       .. image:: ../images/sort.png
+               :align: center
+
+  * **Set First** button moves the selected border to the first position in the group, as a result other borders will be moved to this border during sewing.
+
+       .. image:: ../images/remove.png
+               :align: center
+
+  * **Remove Border** button removes the selected borders from the group. It is active if there are more than two borders in the group.
+
+
+* Selection of a border in the list allows changing its first and last nodes whose IDs appear in two fields below the list.
+
+  * *Arrow* buttons near each field move the corresponding end node by the number of nodes defined by **Step** field.
+       .. image:: ../images/swap.png
+               :align: center
+
+  * **Swap** button swaps the first and last nodes of a selected border.
+
+
+For sewing free borders manually you should switch the **Mode** to **Manual** and define three points on each border: the first, the second and the last node:
+
+       .. image:: ../images/sewing_manual.png
+               :align: center
+
+* the first node specifies beginning of the border;
+* the second node specifies the part of the border which should be considered (as far as the free border usually forms a closed contour);
+* the last node specifies the end of the border.
+
+
+You can select these nodes in the 3D viewer or define by its id.
+
+The first and the second nodes should belong to the same link of a
+face. The second and the last nodes of a border can be the same. The
+first and the last nodes of two borders can be the same. The
+corresponding end nodes of two borders will be merged. Intermediate
+nodes of two borders will be either merged or inserted into faces of
+the opposite border.
+
+In practice the borders to sew often coincide and in this case it is
+difficult to specify the first and the last nodes of a border since
+they coincide with the first and the last nodes of the other
+border. To cope with this,
+:ref:`merge <merging_nodes_page>` coincident nodes into one
+beforehand. Two figures below illustrate this approach.
+
+.. image:: ../images/sew_using_merge.png               
+       :align: center
+
+.. centered::
+       Merge coincident nodes, which are difficult to distinguish
+
+.. image:: ../images/sew_after_merge.png
+               :align: center
+
+.. centered::
+       After merging nodes it is easy to specify border nodes
+
+The sewing algorithm is as follows:
+
+#. The parameter (U) of each node within a border is computed. So that the first node has U=0.0, the last node has U=1.0, for the rest nodes 0.0 < U < 1.0;
+#. Compare node parameters of the two borders. If two nodes of the opposite borders have close parameters, they are merged, i.e. a node of the first border is replaced in all elements by a node of the second border. If a node has no node with a close parameter in the opposite border, it is inserted into an edge of element of the opposite border, an element is split. Two nodes are considered close enough to merge, if difference of their parameters is less than one fifth of minimum length of adjacent face edges on the borders.
+
+
+       .. image:: ../images/image22.jpg 
+               :align: center
+
+       .. centered::
+               Sewing free borders
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_sew_free_borders` operation.
+
+
+.. _conform_free_borders_anchor:
+
+Sew conform free borders
+########################
+
+This functionality can be used to unite two free borders of a 2D mesh.
+
+.. image:: ../images/sewing2.png
+       :align: center
+
+The borders of meshes for sewing are defined as for :ref:`free_borders_anchor`
+except that the second free border is not limited and can be defined
+by the first and the second nodes only. The first nodes of two borders
+can be the same.
+
+The algorithm is following: counting nodes starting at the first ones,
+the n-th node of the first border is merged with the n-th node of the
+other border, until the end of either of borders. Nodes of the first
+border are replaced in all elements with corresponding nodes of the
+second border.
+
+.. note:: 
+       For sewing conform free borders you should define three points on the first border and two points on the second one. User can select these nodes in 3D viewer or define node by its id.
+
+.. image:: ../images/image23.jpg 
+       :align: center
+
+.. centered::
+       Sewing conform free borders
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_sew_conform_free_borders` operation.
+
+
+.. _border_to_side_anchor:
+
+Sew border to side
+##################
+
+*Sew border to side* is intended to sew a free border to a mesh surface.
+
+The free border is defined as for :ref:`free_borders_anchor`. The place where to sew the border is defined by two nodes, between which the border faces are placed, so that the first border node is merged with the first node on the side and the last node of the border is merged with the second specified node on the side.
+
+.. image:: ../images/sewing3.png
+       :align: center
+
+The algorithm is following.
+
+#. Find a sequence of linked nodes on the side such that the found links to be most co-directed with the links of the free border.
+#. Sew two sequences of nodes using algorithm of :ref:`free_borders_anchor`.
+
+.. note:: 
+       For sewing border to side you should define three points on the border and two points on the side. User can select these nodes in 3D viewer or define node by its id.
+
+.. image:: ../images/image30.jpg 
+       :align: center
+
+.. centered::
+       Sewing border to side
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_sew_meshes_border_to_side` operation.  
+
+
+.. _side_elements_anchor:
+
+Sew side elements
+=================
+
+This operation is intended to unite two mesh surfaces.
+
+.. image:: ../images/sewing4.png 
+       :align: center
+
+Surfaces may be defined by either 2d or 3d elements. The number of
+given elements of the sides must be the same. The sets of given
+elements must be topologically equal, i.e. each node of one element
+set must have a corresponding node in the other element set and
+corresponding nodes must be equally linked. If there are 3d elements
+in a set, only their free faces must obey to that rule.
+
+Two corresponding nodes on each side must be specified. They must belong to one element and must be located on an element set boundary.
+
+Sewing algorithm finds and merges the corresponding nodes starting
+from the specified ones.
+
+.. image:: ../images/image31.jpg 
+       :align: center
+
+.. centered::
+       Step-by-step sewing process
+
+.. image:: ../images/image32.jpg 
+       :align: center
+
+.. centered::
+       The result of side elements sewing
+
+For sewing side elements you should define elements for sewing and two
+nodes for merging on the each side. User can select these elements and
+nodes in 3D viewer or define them by its id.
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_sew_side_elements` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/skew.doc b/doc/salome/gui/SMESH/input/skew.doc
deleted file mode 100644 (file)
index 01f3c5f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-
-\page skew_page Skew
-
-\n \b Skew mesh quality criterion reflects the angle between the lines
-that join opposite sides of a quadrangle element or the greatest angle
-between a median and a midline in a triangle element. This mesh quality
-criterion can be applied to elements composed of 4 and 3 nodes
-(quadrangles and triangles).
-
-\image html image27.jpg
-
-<em>To apply the Skew quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Skew</b> or click
-<em>"Skew"</em> button of the toolbar.
-
-\image html image40.png
-<center><em>"Skew" button </em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image93.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_skew "Skew quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/skew.rst b/doc/salome/gui/SMESH/input/skew.rst
new file mode 100644 (file)
index 0000000..ed9dfa2
--- /dev/null
@@ -0,0 +1,29 @@
+.. _skew_page:
+
+****
+Skew
+****
+
+**Skew** mesh quality criterion reflects the angle between the lines
+that join opposite sides of a quadrangle element or the greatest angle
+between a median and a midline in a triangle element. This mesh quality
+criterion can be applied to elements composed of 4 and 3 nodes
+(quadrangles and triangles).
+
+.. image:: ../images/image27.jpg
+       :align: center
+
+*To apply the Skew quality criterion to your mesh:*
+
+.. |img| image:: ../images/image40.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Skew** or click *"Skew"* button |img| of the toolbar.
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image93.jpg
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_skew` filter.
diff --git a/doc/salome/gui/SMESH/input/smeshBuilder.rst b/doc/salome/gui/SMESH/input/smeshBuilder.rst
new file mode 100644 (file)
index 0000000..5631ecd
--- /dev/null
@@ -0,0 +1,21 @@
+
+smeshBuilder module
+===================
+
+.. contents:: 
+
+.. automodule:: smeshBuilder
+   :synopsis: 
+   :members: GetName, DegreesToRadians, New
+
+smeshBuilder class
+------------------
+
+.. autoclass:: smeshBuilder
+   :members:
+
+Mesh class
+------------------
+.. autoclass:: Mesh
+   :members:
+
diff --git a/doc/salome/gui/SMESH/input/smesh_migration.doc b/doc/salome/gui/SMESH/input/smesh_migration.doc
deleted file mode 100644 (file)
index 9c8af6c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*!
-
-\page smesh_migration_page Modifying Mesh Python scripts from SALOME 6 and before
-
-\n In SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality:
-
-\n Scripts generated for SALOME 6 and older versions must be adapted to work in SALOME 7.2 with full functionality.
-\n The compatibility mode allows old scripts to work in almost all cases, but with a warning.
-
-See also \subpage geompy_migration_page
-
-<b>Salome initialisation must always be done as shown below</b>
-\n (<em>salome_init()</em> can be invoked safely several times):
-\code
-import salome
-salome.salome_init()
-\endcode
-
-<b>smesh initialisation is modified.</b>
-\n the old mode (from dump):
-\code
-import smesh, SMESH, SALOMEDS
-smesh.UpdateStudy()
-\endcode
-\n the new mode:
-\code
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-\endcode
-
-
-<b> Of course, <em>from smesh import *</em> is no more possible.</b>
-\n You have to explicitly write <em>smesh.some_method()</em>.
-
-<b>All algorithms have been transferred from the namespace <em>smesh</em> to the namespace <em>smeshBuilder</em>.</b>
-\n For instance:
-\code
-MEFISTO_2D_1 = Mesh_1.Triangle(algo=smesh.MEFISTO,geom=Face_1)
-\endcode
-is replaced by:
-\code
-MEFISTO_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_1)
-\endcode
-\n StdMeshers algorithms concerned are <em>REGULAR, PYTHON, COMPOSITE, MEFISTO, Hexa, QUADRANGLE, RADIAL_QUAD</em>.
-\n SMESH Plugins provide such algorithms as: <em> NETGEN, NETGEN_FULL, FULL_NETGEN, NETGEN_1D2D3D, NETGEN_1D2D, NETGEN_2D, NETGEN_3D</em>.
-\n If you use DISTENE plugins, you also have <em>BLSURF, GHS3D, GHS3DPRL, Hexotic</em>.
-
-<b>Some variables were available in both namespaces <em>smesh</em> and <em>SMESH</em>.
-Now they are available only in namespace <em>SMESH</em></b>.
-\n The dump function used only the namespace <em>SMESH</em>,
-so, if your script was built with the help of the dump function, it should be already OK in this respect.
-
-The most used variables concerned are:
-\n <em>NODE, EDGE, FACE, VOLUME, ALL.</em>
-\n <em>FT_xxx, geom_xxx, ADD_xxx...</em>
-
-\n For instance:
-\code
-srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", smesh.FACE )
-mesh.MakeGroup("Tetras",smesh.VOLUME,smesh.FT_ElemGeomType,"=",smesh.Geom_TETRA)
-filter = smesh.GetFilter(smesh.FACE, smesh.FT_AspectRatio, smesh.FT_MoreThan, 6.5)
-\endcode
-is replaced by:
-\code
-srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", SMESH.FACE )
-mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 6.5)
-\endcode
-
-
-<b>The namespace <em>smesh.smesh</em> does not exist any more, use <em>smesh</em> instead.</b>
-\n For instance:
-\code
-Compound1 = smesh.smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
-\endcode
-is replaced by:
-\code
-Compound1 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
-\endcode
-
-<b>If you need to import a %SMESH Plugin explicitly, keep in mind that they are now located in separate namespaces.</b>
-\n For instance:
-\code
-import StdMeshers
-import NETGENPlugin
-import BLSURFPlugin
-import GHS3DPlugin
-import HexoticPLUGIN
-\endcode
-is replaced by:
-\code
-from salome.StdMeshers import StdMeshersBuilder
-from salome.NETGENPlugin import NETGENPluginBuilder
-from salome.BLSURFPlugin import BLSURFPluginBuilder
-from salome.GHS3DPlugin import GHS3DPluginBuilder
-from salome.HexoticPLUGIN import HexoticPLUGINBuilder
-\endcode
-
-*/
diff --git a/doc/salome/gui/SMESH/input/smesh_migration.rst b/doc/salome/gui/SMESH/input/smesh_migration.rst
new file mode 100644 (file)
index 0000000..59487da
--- /dev/null
@@ -0,0 +1,105 @@
+.. _smesh_migration_page:
+
+******************************************************
+Modifying Mesh Python scripts from SALOME 6 and before
+******************************************************
+
+In SALOME 7.2, the Python interface for Mesh has been slightly modified to offer new functionality:
+
+
+Scripts generated for SALOME 6 and older versions must be adapted to work in SALOME 7.2 with full functionality.
+The compatibility mode allows old scripts to work in almost all cases, but with a warning.
+
+* **Salome initialisation** must always be done as shown below.
+
+  (*salome_init()* can be invoked safely several times)::
+
+       import salome
+       salome.salome_init()
+
+* **smesh initialisation** is modified.
+
+  The old mode (from dump)::
+
+       import smesh, SMESH, SALOMEDS
+       smesh.SetCurrentStudy(salome.myStudy)
+
+  The new mode::
+
+       import SMESH, SALOMEDS
+       from salome.smesh import smeshBuilder
+       smesh =  smeshBuilder.New()
+
+
+* Of course, **from smesh import** * is **no more possible.**
+
+  You have to explicitly write *smesh.some_method()*.
+
+* All **algorithms** have been transferred from the namespace *smesh* to the namespace *smeshBuilder*.
+
+  For instance::
+
+       MEFISTO_2D_1 = Mesh_1.Triangle(algo=smesh.MEFISTO,geom=Face_1)
+
+  is replaced by::
+
+       MEFISTO_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_1)
+
+  StdMeshers algorithms concerned are *REGULAR, PYTHON, COMPOSITE, MEFISTO, Hexa, QUADRANGLE, RADIAL_QUAD*.
+
+  SMESH Plugins provide such algorithms as: *NETGEN, NETGEN_FULL, FULL_NETGEN, NETGEN_1D2D3D, NETGEN_1D2D, NETGEN_2D, NETGEN_3D*.
+
+  If you use DISTENE plugins, you also have *BLSURF, GHS3D, GHS3DPRL, Hexotic*.
+
+* Some **variables** were available in both namespaces *smesh* and *SMESH*. Now they are available only in namespace *SMESH*.
+
+  The dump function used only the namespace *SMESH*,
+  so, if your script was built with the help of the dump function, it should be already OK in this respect.
+
+  The most used variables concerned are:
+
+  * *NODE, EDGE, FACE, VOLUME, ALL.*
+  * *FT_xxx, geom_xxx, ADD_xxx...*
+
+  For instance::
+
+       srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", smesh.FACE )
+       mesh.MakeGroup("Tetras",smesh.VOLUME,smesh.FT_ElemGeomType,"=",smesh.Geom_TETRA)
+       filter = smesh.GetFilter(smesh.FACE, smesh.FT_AspectRatio, smesh.FT_MoreThan, 6.5)
+
+  is replaced by::
+
+       srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", SMESH.FACE )
+       mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
+       filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 6.5)
+
+
+* The namespace **smesh.smesh** does not exist any more, use **smesh** instead.
+
+  For instance::
+
+       Compound1 = smesh.smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
+
+  is replaced by::
+
+       Compound1 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
+
+* If you need to **import a SMESH Plugin** explicitly, keep in mind that  they are now located in separate namespaces.
+
+  For instance::
+
+       import StdMeshers
+       import NETGENPlugin
+       import BLSURFPlugin
+       import GHS3DPlugin
+       import HexoticPLUGIN
+
+  is replaced by:: 
+
+       from salome.StdMeshers import StdMeshersBuilder
+       from salome.NETGENPlugin import NETGENPluginBuilder
+       from salome.BLSURFPlugin import BLSURFPluginBuilder
+       from salome.GHS3DPlugin import GHS3DPluginBuilder
+       from salome.HexoticPLUGIN import HexoticPLUGINBuilder
+
+
diff --git a/doc/salome/gui/SMESH/input/smesh_module.rst b/doc/salome/gui/SMESH/input/smesh_module.rst
new file mode 100644 (file)
index 0000000..32bae11
--- /dev/null
@@ -0,0 +1,958 @@
+SMESH module
+============
+
+.. contents:: 
+
+.. py:module:: SMESH
+
+DriverMED_ReadStatus
+--------------------
+
+.. py:class:: DriverMED_ReadStatus
+
+   Enumeration for mesh read status
+
+   .. py:attribute:: DRS_OK 
+
+      Ok
+
+   .. py:attribute:: DRS_EMPTY
+                     
+      a file contains no mesh with the given name
+
+   .. py:attribute:: DRS_WARN_RENUMBER
+
+      a MED file has overlapped ranges of element numbers,
+      so the numbers from the file are ignored
+
+   .. py:attribute:: DRS_WARN_SKIP_ELEM
+      
+      some elements were skipped due to incorrect file data
+
+   .. py:attribute:: DRS_WARN_DESCENDING
+
+      some elements were skipped due to descending connectivity
+
+   .. py:attribute:: DRS_FAIL
+
+      general failure (exception etc.)
+
+ComputeErrorName
+----------------
+
+.. py:class:: ComputeErrorName
+
+   Enumeration of computation errors
+
+   .. py:attribute:: COMPERR_OK
+
+      Ok
+      
+   .. py:attribute:: COMPERR_BAD_INPUT_MESH
+
+      wrong mesh of lower sub-mesh
+
+   .. py:attribute:: COMPERR_STD_EXCEPTION
+
+      some std exception raised
+
+   .. py:attribute:: COMPERR_OCC_EXCEPTION
+
+      OCC exception raised
+
+   .. py:attribute:: COMPERR_SLM_EXCEPTION
+
+      SALOME exception raised
+
+   .. py:attribute:: COMPERR_EXCEPTION
+
+      other exception raised
+
+   .. py:attribute:: COMPERR_MEMORY_PB
+
+      memory allocation problem
+
+   .. py:attribute:: COMPERR_ALGO_FAILED
+
+      computation failed
+
+   .. py:attribute:: COMPERR_BAD_SHAPE
+
+      bad geometry
+
+   .. py:attribute:: COMPERR_WARNING
+
+      algo reports error but sub-mesh is computed anyway
+
+   .. py:attribute:: COMPERR_CANCELED
+
+      compute canceled
+
+   .. py:attribute:: COMPERR_NO_MESH_ON_SHAPE
+
+      no mesh elements assigned to sub-mesh
+
+   .. py:attribute:: COMPERR_BAD_PARMETERS
+
+      incorrect hypotheses parameters
+
+
+ComputeError
+------------
+
+.. py:class:: ComputeError
+
+   Error details
+
+   .. py:attribute:: code
+
+      ``int`` - :class:`ComputeErrorName` or, if negative, algo specific code
+
+   .. py:attribute:: comment
+                     
+      ``str`` - textual problem description
+
+   .. py:attribute:: algoName
+
+      ``str``
+
+   .. py:attribute:: subShapeID
+      
+      ``int`` - id of sub-shape of a shape to mesh
+
+   .. py:attribute:: hasBadMesh
+
+      ``boolean`` - there are elements preventing computation available for visualization
+
+Measure
+-------
+
+.. py:class:: Measure
+
+   Data returned by measure operations
+
+   .. py:attribute:: minX, minY, minZ
+
+      ``double`` - coordinates of one point
+
+   .. py:attribute:: maxX, maxY, maxZ
+
+      ``double`` - coordinates of another point
+
+   .. py:attribute:: node1, node2
+
+      ``long`` - IDs of two nodes
+
+   .. py:attribute:: elem1, elem2
+
+      ``long`` - IDs of two elements
+
+   .. py:attribute:: value
+
+      ``double`` - distance
+
+NodePosition
+------------
+
+.. py:class:: NodePosition
+
+   Node location on a shape
+
+   .. py:attribute:: shapeID             
+
+      ``long`` - ID of a shape
+
+   .. py:attribute:: shapeType 
+
+      ``GEOM.shape_type`` - type of shape
+
+   .. py:attribute:: params
+
+      ``list of float`` - 
+
+        * [U] on EDGE, 
+        * [U,V] on FACE,
+        * [] on the rest shapes
+
+ElementPosition
+---------------
+
+.. py:class:: ElementPosition
+
+   Element location on a shape
+
+   .. py:attribute:: shapeID
+
+      ``long`` - ID of a shape
+
+   .. py:attribute:: shapeType
+
+      ``GEOM.shape_type`` - type of shape
+
+PolySegment
+-----------
+
+.. py:class:: PolySegment
+
+   Define a cutting plane passing through two points. 
+   Used in :meth:`smeshBuilder.Mesh.MakePolyLine`
+
+   .. py:attribute:: node1ID1, node1ID2
+
+      ``int,int`` - *point 1*: if *node1ID2* > 0, then the point is in the middle of a face edge defined
+                by two nodes, else it is at *node1ID1*
+
+   .. py:attribute:: node2ID1, node2ID2
+
+      ``int,int`` - *point 2*: if *node2ID2* > 0, then the point is in the middle of a face edge defined
+                by two nodes, else it is at *node2ID1*
+
+   .. py:attribute:: vector
+
+      ``SMESH.DirStruct`` - vector on the plane; to use a default plane set vector = (0,0,0)
+
+
+ElementType
+-----------
+
+.. py:class:: ElementType
+
+   Enumeration for element type, like in SMDS
+
+   .. py:attribute:: 
+    ALL
+    NODE
+    EDGE
+    FACE
+    VOLUME
+    ELEM0D
+    BALL
+    NB_ELEMENT_TYPES
+
+EntityType
+----------
+
+.. py:class:: EntityType
+
+   Enumeration of entity type
+
+   .. py:attribute:: 
+    Entity_Node
+    Entity_0D
+    Entity_Edge
+    Entity_Quad_Edge
+    Entity_Triangle
+    Entity_Quad_Triangle
+    Entity_BiQuad_Triangle
+    Entity_Quadrangle
+    Entity_Quad_Quadrangle
+    Entity_BiQuad_Quadrangle
+    Entity_Polygon
+    Entity_Quad_Polygon
+    Entity_Tetra
+    Entity_Quad_Tetra
+    Entity_Pyramid
+    Entity_Quad_Pyramid
+    Entity_Hexa
+    Entity_Quad_Hexa
+    Entity_TriQuad_Hexa
+    Entity_Penta
+    Entity_Quad_Penta
+    Entity_BiQuad_Penta
+    Entity_Hexagonal_Prism
+    Entity_Polyhedra
+    Entity_Quad_Polyhedra
+    Entity_Ball
+    Entity_Last
+
+GeometryType
+------------
+
+.. py:class:: GeometryType
+
+   Enumeration of element geometry type
+
+   .. py:attribute::
+    Geom_POINT
+    Geom_EDGE
+    Geom_TRIANGLE
+    Geom_QUADRANGLE
+    Geom_POLYGON
+    Geom_TETRA
+    Geom_PYRAMID
+    Geom_HEXA
+    Geom_PENTA
+    Geom_HEXAGONAL_PRISM
+    Geom_POLYHEDRA
+    Geom_BALL
+    Geom_LAST
+
+Hypothesis_Status
+-----------------
+
+.. py:class:: Hypothesis_Status
+
+   Enumeration of result of hypothesis addition/removal
+
+   .. py:attribute::  HYP_OK
+
+      Ok
+
+   .. py:attribute::  HYP_MISSING
+
+      algo misses a hypothesis
+
+   .. py:attribute::  HYP_CONCURRENT
+
+      several applicable hypotheses
+
+   .. py:attribute::  HYP_BAD_PARAMETER
+
+      hypothesis has a bad parameter value
+
+   .. py:attribute::  HYP_HIDDEN_ALGO
+
+      an algo is hidden by an upper dim algo generating all-dim elements
+
+   .. py:attribute::  HYP_HIDING_ALGO
+
+      an algo hides lower dim algos by generating all-dim elements
+
+   .. py:attribute::  HYP_UNKNOWN_FATAL
+
+       all statuses below should be considered as fatal for Add/RemoveHypothesis operations
+
+   .. py:attribute::  HYP_INCOMPATIBLE
+
+      hypothesis does not fit algorithm
+
+   .. py:attribute::  HYP_NOTCONFORM
+
+      not conform mesh is produced appling a hypothesis
+
+   .. py:attribute::  HYP_ALREADY_EXIST
+
+      such hypothesis already exist
+
+   .. py:attribute::  HYP_BAD_DIM
+
+      bad dimension
+
+   .. py:attribute::  HYP_BAD_SUBSHAPE
+
+      shape is neither the main one, nor its sub-shape, nor a group
+
+   .. py:attribute::  HYP_BAD_GEOMETRY
+
+      geometry mismatches algorithm's expectation
+
+   .. py:attribute::  HYP_NEED_SHAPE
+
+      algorithm can work on shape only
+
+   .. py:attribute::  HYP_INCOMPAT_HYPS
+
+      several additional hypotheses are incompatible one with other
+
+
+FunctorType
+-----------
+
+.. py:class:: FunctorType
+
+   Enumeration of functor types
+
+   .. py:attribute:: 
+    FT_AspectRatio
+    FT_AspectRatio3D
+    FT_Warping   
+    FT_MinimumAngle
+    FT_Taper       
+    FT_Skew         
+    FT_Area          
+    FT_Volume3D          
+    FT_MaxElementLength2D
+    FT_MaxElementLength3D
+    FT_FreeBorders
+    FT_FreeEdges
+    FT_FreeNodes
+    FT_FreeFaces
+    FT_EqualNodes
+    FT_EqualEdges
+    FT_EqualFaces
+    FT_EqualVolumes
+    FT_MultiConnection
+    FT_MultiConnection2D
+    FT_Length
+    FT_Length2D
+    FT_Deflection2D
+    FT_NodeConnectivityNumber
+    FT_BelongToMeshGroup
+    FT_BelongToGeom
+    FT_BelongToPlane
+    FT_BelongToCylinder
+    FT_BelongToGenSurface
+    FT_LyingOnGeom
+    FT_RangeOfIds
+    FT_BadOrientedVolume
+    FT_BareBorderVolume
+    FT_BareBorderFace
+    FT_OverConstrainedVolume
+    FT_OverConstrainedFace
+    FT_LinearOrQuadratic
+    FT_GroupColor
+    FT_ElemGeomType
+    FT_EntityType
+    FT_CoplanarFaces
+    FT_BallDiameter
+    FT_ConnectedElements
+    FT_LessThan
+    FT_MoreThan
+    FT_EqualTo
+    FT_LogicalNOT
+    FT_LogicalAND
+    FT_LogicalOR
+    FT_Undefined
+
+.. py:module:: SMESH.Filter
+   :noindex:
+
+Filter.Criterion
+----------------
+
+.. py:class:: Criterion
+
+   Structure containing information of a criterion
+
+   .. py:attribute:: Type
+
+      ``long`` - value of item of :class:`SMESH.FunctorType`
+
+   .. py:attribute:: Compare
+
+      ``long`` - value of item of :class:`SMESH.FunctorType` in ( FT_LessThan, FT_MoreThan, FT_EqualTo )
+
+   .. py:attribute:: Threshold
+
+      ``double`` - threshold value
+
+   .. py:attribute:: ThresholdStr
+
+      ``string`` - Threshold value defined as string. Used for:
+                       1. Diapason of identifiers. Example: "1,2,3,5-10,12,27-29".
+                       2. Storing name of shape.
+                       3. Storing group color "0.2;0;0.5".
+                       4. Storing point coordinates.
+
+   .. py:attribute:: ThresholdID
+
+      ``string`` - One more threshold value defined as string. Used for storing id of shape
+
+   .. py:attribute:: UnaryOp
+
+      ``long`` - unary logical operation: FT_LogicalNOT or FT_Undefined
+
+   .. py:attribute:: BinaryOp
+
+      ``long`` - binary logical operation FT_LogicalAND, FT_LogicalOR etc.
+
+   .. py:attribute:: Tolerance
+
+      ``double`` - Tolerance is used for 
+                       1. Comparison of real values.
+                       2. Detection of geometrical coincidence.
+
+   .. py:attribute:: TypeOfElement
+
+      ``ElementType`` - type of element :class:`SMESH.ElementType` (SMESH.NODE, SMESH.FACE etc.)
+
+   .. py:attribute:: Precision
+
+      ``long`` - Precision of numerical functors
+
+.. py:currentmodule:: SMESH
+
+FreeEdges.Border
+----------------
+
+.. py:class:: FreeEdges.Border
+
+   Free edge: edge connected to one face only
+
+   .. py:attribute:: myElemId
+
+      ``long`` - ID of a face
+
+   .. py:attribute:: myPnt1,myPnt2
+
+      ``long`` - IDs of two nodes
+
+PointStruct
+-----------
+
+.. py:class:: PointStruct
+
+   3D point. 
+
+   Use :meth:`GetPointStruct() <smeshBuilder.smeshBuilder.GetPointStruct>` 
+   to convert a vertex (GEOM.GEOM_Object) to PointStruct
+
+   .. py:attribute:: x,y,z
+
+      ``double`` - point coordinates
+
+DirStruct
+---------
+
+.. py:class:: DirStruct
+
+   3D vector.
+
+   Use :meth:`GetDirStruct() <smeshBuilder.smeshBuilder.GetDirStruct>` 
+   to convert a vector (GEOM.GEOM_Object) to DirStruct
+
+   .. py:attribute:: PS
+
+      :class:`PointStruct` - vector components
+      
+AxisStruct
+----------
+
+.. py:class:: AxisStruct
+
+   Axis defined by its origin and its vector.
+
+   Use :meth:`GetAxisStruct() <smeshBuilder.smeshBuilder.GetAxisStruct>` 
+   to convert a line or plane (GEOM.GEOM_Object) to AxisStruct
+
+   .. py:attribute:: x,y,z
+
+      ``double`` - coordinates of the origin
+
+   .. py:attribute:: vx,vy,vz
+
+      ``double`` - components of the vector
+
+Filter
+------
+
+.. py:class:: Filter
+
+   Filter of mesh entities
+
+   .. py:function:: GetElementsId( mesh )
+
+      Return satisfying elements
+
+      :param SMESH.SMESH_Mesh mesh: the mesh; 
+                                    it can be obtained via :meth:`smeshBuilder.Mesh.GetMesh`
+
+      :return: list of IDs
+                                    
+   .. py:function:: GetIDs()
+
+      Return satisfying elements. 
+      A mesh to filter must be already set, either via :meth:`SetMesh` method 
+      or via ``mesh`` argument of :meth:`smeshBuilder.smeshBuilder.GetFilter`
+
+      :return: list of IDs
+                                    
+   .. py:function:: SetMesh( mesh )
+
+      Set mesh to filter
+
+      :param SMESH.SMESH_Mesh mesh: the mesh;
+                                    it can be obtained via :meth:`smeshBuilder.Mesh.GetMesh`
+
+   .. py:function:: SetCriteria( criteria )
+
+      Define filtering criteria
+
+      :param criteria:  list of :class:`SMESH.Filter.Criterion`
+
+NumericalFunctor
+----------------
+
+.. py:class:: NumericalFunctor
+
+   Calculate value by ID of mesh entity. Base class of various functors
+
+   .. py:function:: GetValue( elementID )
+
+      Compute a value
+
+      :param elementID: ID of element or node
+      :return: floating value
+
+SMESH_Mesh
+----------
+
+.. py:class:: SMESH_Mesh
+
+   Mesh. It is a Python wrap over a CORBA interface of mesh.
+
+   All its methods are exposed via :class:`smeshBuilder.Mesh` class that you can obtain by calling::
+
+     smeshBuilder_mesh = smesh.Mesh( smesh_mesh )
+
+SMESH_MeshEditor
+----------------
+
+.. py:class:: SMESH_MeshEditor
+
+   Mesh editor. It is a Python wrap over a CORBA SMESH_MeshEditor interface.
+   All its methods are exposed via :class:`smeshBuilder.Mesh` class.
+
+   .. py:class:: Extrusion_Error
+
+      Enumeration of errors of :meth:`smeshBuilder.Mesh.ExtrusionAlongPathObjects`
+
+      .. py:attribute::
+         EXTR_OK
+         EXTR_NO_ELEMENTS
+         EXTR_PATH_NOT_EDGE
+         EXTR_BAD_PATH_SHAPE
+         EXTR_BAD_STARTING_NODE
+         EXTR_BAD_ANGLES_NUMBER
+         EXTR_CANT_GET_TANGENT
+
+.. py:class:: SMESH_MeshEditor.Sew_Error
+
+      Enumeration of errors SMESH_MeshEditor.Sewing... methods
+
+      .. py:attribute::
+         SEW_OK
+         SEW_BORDER1_NOT_FOUND
+         SEW_BORDER2_NOT_FOUND
+         SEW_BOTH_BORDERS_NOT_FOUND
+         SEW_BAD_SIDE_NODES
+         SEW_VOLUMES_TO_SPLIT
+         SEW_DIFF_NB_OF_ELEMENTS
+         SEW_TOPO_DIFF_SETS_OF_ELEMENTS
+         SEW_BAD_SIDE1_NODES
+         SEW_BAD_SIDE2_NODES
+         SEW_INTERNAL_ERROR
+
+SMESH_Pattern
+-------------
+
+.. py:class:: SMESH_Pattern
+
+   Pattern mapper. Use a pattern defined by user for
+
+      * creating mesh elements on geometry, faces or blocks
+      * refining existing mesh elements, faces or hexahedra
+
+   The pattern is defined by a string as explained :doc:`here <pattern_mapping>`.
+
+   Usage work-flow is:
+
+      * Define a pattern via Load... method
+      * Compute future positions of nodes via Apply... method
+      * Create nodes and elements in a mesh via :meth:`MakeMesh` method
+
+   .. py:function:: LoadFromFile( patternFileContents )
+
+      Load a pattern from the string *patternFileContents*
+
+      :param str patternFileContents: string defining a pattern
+      :return: True if succeeded
+
+   .. py:function:: LoadFromFace( mesh, geomFace, toProject )
+
+      Create a 2D pattern from the mesh built on *geomFace*.
+
+      :param SMESH.SMESH_Mesh     mesh: source mesh
+      :param GEOM.GEOM_Object geomFace: geometrical face whose mesh forms a pattern
+      :param boolean         toProject: if True makes override nodes positions
+                                          on *geomFace* computed by mesher
+      :return: True if succeeded
+
+   .. py:function:: LoadFrom3DBlock( mesh, geomBlock )
+
+      Create a 3D pattern from the mesh built on *geomBlock*
+
+      :param SMESH.SMESH_Mesh      mesh: source mesh
+      :param GEOM.GEOM_Object geomBlock: geometrical block whose mesh forms a pattern
+      :return: True if succeeded
+
+   .. py:function:: ApplyToFace( geomFace, vertexOnKeyPoint1, toReverse )
+
+      Compute nodes coordinates by applying
+      the loaded pattern to *geomFace*. The first key-point
+      will be mapped into *vertexOnKeyPoint1*, which must
+      be in the outer wire of *geomFace*
+
+      :param GEOM.GEOM_Object geomFace: the geometrical face to generate faces on
+      :param GEOM.GEOM_Object vertexOnKeyPoint1: the vertex to be at the 1st key-point
+      :param boolean          toReverse: to reverse order of key-points
+      :return: list of :class:`SMESH.PointStruct` - computed coordinates of points of the pattern
+
+   .. py:function:: ApplyTo3DBlock( geomBlock, vertex000, vertex001 )
+
+      Compute nodes coordinates by applying
+      the loaded pattern to *geomBlock*. The (0,0,0) key-point
+      will be mapped into *vertex000*. The (0,0,1) 
+      key-point will be mapped into *vertex001*.
+
+      :param GEOM.GEOM_Object geomBlock: the geometrical block to generate volume elements on
+      :param GEOM.GEOM_Object vertex000: the vertex to superpose (0,0,0) key-point of pattern
+      :param GEOM.GEOM_Object vertex001: the vertex to superpose (0,0,1) key-point of pattern
+      :return: list of :class:`SMESH.PointStruct` - computed coordinates of points of the pattern
+
+   .. py:function:: ApplyToMeshFaces( mesh, facesIDs, nodeIndexOnKeyPoint1, toReverse )
+
+      Compute nodes coordinates by applying
+      the loaded pattern to mesh faces. The first key-point
+      will be mapped into *nodeIndexOnKeyPoint1* -th node of each mesh face
+
+      :param SMESH.SMESH_Mesh    mesh: the mesh where to refine faces
+      :param list_of_ids     facesIDs: IDs of faces to refine
+      :param int nodeIndexOnKeyPoint1: index of a face node to be at 1-st key-point of pattern
+      :param boolean        toReverse: to reverse order of key-points
+      :return: list of :class:`SMESH.PointStruct` - computed coordinates of points of the pattern
+
+   .. py:function:: ApplyToHexahedrons( mesh, volumesIDs, node000Index, node001Index )
+
+      Compute nodes coordinates by applying
+      the loaded pattern to hexahedra. The (0,0,0) key-point
+      will be mapped into *Node000Index* -th node of each volume.
+      The (0,0,1) key-point will be mapped into *node001Index* -th
+      node of each volume.
+
+      :param SMESH.SMESH_Mesh   mesh: the mesh where to refine hexahedra
+      :param list_of_ids  volumesIDs: IDs of volumes to refine
+      :param long       node000Index: index of a volume node to be at (0,0,0) key-point of pattern
+      :param long       node001Index: index of a volume node to be at (0,0,1) key-point of pattern
+      :return: list of :class:`SMESH.PointStruct` - computed coordinates of points of the pattern
+
+   .. py:function:: MakeMesh( mesh, createPolygons, createPolyedrs )
+
+      Create nodes and elements in *mesh* using nodes
+      coordinates computed by either of Apply...() methods.
+      If *createPolygons* is True, replace adjacent faces by polygons
+      to keep mesh conformity.
+      If *createPolyedrs* is True, replace adjacent volumes by polyedrs
+      to keep mesh conformity.
+
+      :param SMESH.SMESH_Mesh     mesh: the mesh to create nodes and elements in
+      :param boolean    createPolygons: to create polygons to to keep mesh conformity
+      :param boolean    createPolyedrs: to create polyherda to to keep mesh conformity
+      :return: True if succeeded
+
+
+SMESH_subMesh
+-------------
+
+.. py:class:: SMESH_subMesh
+
+   :doc:`Sub-mesh <constructing_submeshes>`
+
+   .. py:function:: GetNumberOfElements()
+
+      Return number of elements in the sub-mesh
+
+   .. py:function:: GetNumberOfNodes( all )
+
+      Return number of nodes in the sub-mesh
+
+      :param boolean all: if True, also return nodes assigned to boundary sub-meshes 
+
+   .. py:function:: GetElementsId()
+
+      Return IDs of elements in the sub-mesh
+
+   .. py:function:: GetNodesId()
+
+      Return IDs of nodes in the sub-mesh
+
+   .. py:function:: GetSubShape()
+
+      Return :class:`geom shape <GEOM.GEOM_Object>` the sub-mesh is dedicated to
+
+   .. py:function:: GetId()
+
+      Return ID of the :class:`geom shape <GEOM.GEOM_Object>` the sub-mesh is dedicated to
+
+   .. py:function:: GetMeshInfo()
+
+      Return number of mesh elements of each :class:`SMESH.EntityType`.
+      Use :meth:`smeshBuilder.smeshBuilder.EnumToLong` to get an integer from 
+      an item of :class:`SMESH.EntityType`.
+
+      :return: array of number of elements per :class:`SMESH.EntityType`
+
+   .. py:function:: GetMesh()
+
+      Return the :class:`SMESH.SMESH_Mesh`
+
+SMESH_GroupBase
+---------------
+
+.. py:class:: SMESH_GroupBase
+
+   :doc:`Mesh group <grouping_elements>`
+
+   .. py:function:: SetName( name )
+
+      Set group name
+
+   .. py:function:: GetName()
+
+      Return group name
+
+   .. py:function:: GetType()
+
+      Return :class:`group type <SMESH.ElementType>` (type of elements in the group)
+
+   .. py:function:: Size()
+
+      Return the number of elements in the group
+
+   .. py:function:: IsEmpty()
+
+      Return True if the group does not contain any elements
+
+   .. py:function:: Contains( elem_id )
+
+      Return True if the group contains an element with ID == *elem_id*
+
+   .. py:function:: GetID( elem_index )
+
+      Return ID of an element at position *elem_index* counted from 1
+
+   .. py:function:: GetNumberOfNodes()
+
+      Return the number of nodes of cells included to the group.
+      For a nodal group return the same value as Size() function
+
+   .. py:function:: GetNodeIDs()
+
+      Return IDs of nodes of cells included to the group.
+      For a nodal group return result of GetListOfID() function
+
+   .. py:function:: SetColor( color )
+
+      Set group color
+
+      :param SALOMEDS.Color color: color
+
+   .. py:function:: GetColor()
+
+      Return group color
+
+      :return: SALOMEDS.Color
+
+SMESH_Group
+-----------
+
+.. py:class:: SMESH_Group
+
+   :doc:`Standalone mesh group <grouping_elements>`. Inherits all methods of :class:`SMESH.SMESH_GroupBase`
+
+   .. py:function:: Clear()
+
+      Clears the group's contents
+
+   .. py:function:: Add( elem_ids )
+
+      Adds elements or nodes with specified identifiers to the group
+
+      :param list_of_ids elem_ids: IDs to add
+
+   .. py:function:: AddFrom( idSource )
+
+      Add all elements or nodes from the specified source to the group
+
+      :param SMESH.SMESH_IDSource idSource: an object to retrieve IDs from
+
+   .. py:function:: Remove( elem_ids )
+
+      Removes elements or nodes with specified identifiers from the group
+
+      :param list_of_ids elem_ids: IDs to remove
+
+SMESH_GroupOnGeom
+-----------------
+
+.. py:class:: SMESH_GroupOnGeom
+
+   Group linked to geometry. Inherits all methods of :class:`SMESH.SMESH_GroupBase`
+
+   .. py:function:: GetShape()
+
+      Return an associated geometry
+
+      :return: GEOM.GEOM_Object
+
+SMESH_GroupOnFilter
+-------------------
+
+.. py:class:: SMESH_GroupOnFilter
+
+   Group defined by filter. Inherits all methods of :class:`SMESH.SMESH_GroupBase`
+
+   .. py:function:: SetFilter( filter )
+
+      Set the :class:`filter <SMESH.Filter>`
+
+   .. py:function:: GetFilter()
+
+      Return the :class:`filter <SMESH.Filter>`
+
+
+SMESH_IDSource
+--------------
+
+.. py:class:: SMESH_IDSource
+
+   Base class for classes able to return IDs of mesh entities. These classes are:
+
+   * :class:`SMESH.SMESH_Mesh`
+   * :class:`SMESH.SMESH_subMesh`
+   * :class:`SMESH.SMESH_GroupBase`
+   * :class:`SMESH.Filter`
+   * temporal ID source created by :meth:`smeshBuilder.Mesh.GetIDSource`
+
+   .. py:function:: GetIDs()
+
+      Return a sequence of all element IDs
+
+   .. py:function:: GetMeshInfo()
+
+      Return number of mesh elements of each :class:`SMESH.EntityType`.
+      Use :meth:`smeshBuilder.smeshBuilder.EnumToLong` to get an integer from 
+      an item of :class:`SMESH.EntityType`.
+
+   .. py:function:: GetNbElementsByType()
+
+      Return number of mesh elements of each :class:`SMESH.ElementType`.
+      Use :meth:`smeshBuilder.smeshBuilder.EnumToLong` to get an integer from 
+      an item of :class:`SMESH.ElementType`.
+
+
+   .. py:function:: GetTypes()
+
+      Return types of elements it contains.
+      It's empty if the object contains no IDs
+
+      :return: list of :class:`SMESH.ElementType`
+
+   .. py:function:: GetMesh()
+
+      Return the :class:`SMESH.SMESH_Mesh`
+
+SMESH_Hypothesis
+----------------
+
+.. py:class:: SMESH_Hypothesis
+
+   Base class of all :doc:`hypotheses <about_hypo>`
+
+   .. py:function:: GetName()
+
+      Return string of hypothesis type name, something like "Regular_1D"
+
+   .. py:function:: GetLibName()
+      
+      Return string of plugin library name
diff --git a/doc/salome/gui/SMESH/input/smeshpy_interface.doc b/doc/salome/gui/SMESH/input/smeshpy_interface.doc
deleted file mode 100644 (file)
index 5a24ee7..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-
-\page smeshpy_interface_page Python interface
-
-Python API of SALOME %Mesh module defines several classes that can
-be used for easy mesh creation and edition.
-
-Documentation of SALOME %Mesh module Python API is available in two forms:
-- <a href="smeshpy_doc/modules.html">Structured documentation</a>, where all methods and
-classes are grouped by their functionality.
-- <a href="smeshpy_doc/namespaces.html">Linear documentation</a> grouped only by classes, declared
-in the \ref smeshBuilder and \ref StdMeshersBuilder Python packages.
-
-\n With SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality.
-\n You may have to modify your scripts generated with SALOME 6 or older versions.
-\n Please see \subpage smesh_migration_page.
-
-Class \ref smeshBuilder.smeshBuilder "smeshBuilder" provides an interface to create and handle
-meshes. It can be used to create an empty mesh or to import mesh from the data file.
-
-As soon as a mesh is created, it is possible to manage it via its own
-methods, described in class \ref smeshBuilder.Mesh "Mesh" documentation.
-
-Class \ref smeshstudytools.SMeshStudyTools "SMeshStudyTools" provides several methods to manipulate mesh objects in Salome study. 
-
-A usual workflow to generate a mesh on geometry is following:
-<ol>
-  <li>Create an instance of \ref smeshBuilder.smeshBuilder "smeshBuilder":
-    <pre>
-      from salome.smesh import smeshBuilder
-      smesh = smeshBuilder.New()
-    </pre></li>
-  <li>Create a \ref smeshBuilder.Mesh "mesh" object:
-    <pre>
-      mesh = \ref smeshBuilder.smeshBuilder.Mesh "smesh.Mesh( geometry )" 
-    </pre></li>
-  <li> Create and assign \ref basic_meshing_algos_page "algorithms" by
-  calling corresponding methods of the mesh. If a sub-shape is
-  provided as an argument, a \ref constructing_submeshes_page "sub-mesh"
-  is implicitly created on this sub-shape:
-    <pre>
-      regular1D = \ref smeshBuilder.Mesh.Segment "mesh.Segment"()
-      mefisto   = \ref smeshBuilder.Mesh.Triangle "mesh.Triangle"( smeshBuilder.MEFISTO )
-      # use other triangle algorithm on a face -- a sub-mesh appears in the mesh
-      netgen    = \ref smeshBuilder.Mesh.Triangle "mesh.Triangle"( smeshBuilder.NETGEN_1D2D, face )
-    </pre></li>
-  <li> Create and assign \ref about_hypo_page "hypotheses" by calling
-  corresponding methods of algorithms:
-    <pre>
-      segLen10 = \ref StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength "regular1D.LocalLength"( 10. )
-      maxArea  = \ref StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength "mefisto.MaxElementArea"( 100. )
-      netgen.SetMaxSize( 20. )
-      netgen.SetFineness( smeshBuilder.VeryCoarse )
-    </pre>
-  </li>
-  <li> \ref compute_anchor "Compute" the mesh (generate mesh nodes and elements):
-    <pre>
-      \ref Mesh.Compute "mesh.Compute"()
-    </pre>
-  </li>
-</ol>
-
-An easiest way to start with Python scripting is to do something in
-GUI and then to get a corresponding Python script via 
-<b> File > Dump Study </b> menu item. Don't forget that you can get
-all methods of any object in hand (e.g. a mesh group or a hypothesis)
-by calling \a dir() Python built-in function.
-
-All methods of the Mesh Group can be found in \ref tui_create_standalone_group sample script.
-
-An example below demonstrates usage of the Python API for 3d mesh
-generation and for retrieving information on mesh nodes and elements.
-
-\anchor example_3d_mesh
-<h2>Example of 3d mesh generation:</h2>
-\tui_script{3dmesh.py}
-
-Examples of Python scripts for Mesh operations are available by
-the following links:
-
-- \subpage tui_creating_meshes_page
-- \subpage tui_defining_hypotheses_page
-- \subpage tui_grouping_elements_page
-- \subpage tui_filters_page
-- \subpage tui_modifying_meshes_page
-- \subpage tui_transforming_meshes_page
-- \subpage tui_viewing_meshes_page
-- \subpage tui_quality_controls_page
-- \subpage tui_measurements_page
-- \subpage tui_work_on_objects_from_gui
-- \subpage tui_notebook_smesh_page
-- \subpage tui_cartesian_algo
-- \subpage tui_use_existing_faces
-- \subpage tui_prism_3d_algo
-- \subpage tui_generate_flat_elements_page
-
-*/
diff --git a/doc/salome/gui/SMESH/input/smeshpy_interface.rst b/doc/salome/gui/SMESH/input/smeshpy_interface.rst
new file mode 100644 (file)
index 0000000..7094b65
--- /dev/null
@@ -0,0 +1,120 @@
+.. _smeshpy_interface_page:
+
+****************
+Python interface
+****************
+
+Python API of SALOME Mesh module defines several classes that can
+be used for easy mesh creation and edition.
+
+Documentation of SALOME Mesh module Python API is available in two forms:
+
+- :doc:`Structured documentation <modules>`, where all methods and classes are grouped by their functionality.
+
+- :ref:`Linear documentation <modindex>` grouped only by classes, declared in the :mod:`smeshBuilder` and :mod:`StdMeshersBuilder` Python packages.
+
+With SALOME 7.2, the Python interface for Mesh has been slightly modified to offer new functionality.
+You may have to modify your scripts generated with SALOME 6 or older versions.
+Please see :ref:`smesh_migration_page`.
+
+Class :class:`smeshBuilder.smeshBuilder` provides an interface to create and handle
+meshes. It can be used to create an empty mesh or to import mesh from the data file.
+
+As soon as a mesh is created, it is possible to manage it via its own
+methods, described in class :class:`smeshBuilder.Mesh` documentation.
+
+Class :class:`smeshstudytools.SMeshStudyTools` provides several methods to manipulate mesh objects in Salome study. 
+
+A usual workflow to generate a mesh on geometry is following:
+
+#. Create an instance of :class:`smeshBuilder.smeshBuilder`:
+       .. code-block:: python
+               :linenos:
+
+               from salome.smesh import smeshBuilder
+               smesh = smeshBuilder.New( salome.myStudy )
+
+#. Create a :class:`smeshBuilder.Mesh` object:
+
+       .. code-block:: python
+               :linenos:
+
+               mesh = smesh.Mesh( geometry )
+
+#. Create and assign :ref:`algorithms <basic_meshing_algos_page>` by calling corresponding methods of the mesh. If a sub-shape is provided as an argument, a :ref:`sub-mesh <constructing_submeshes_page>` is implicitly created on this sub-shape:
+       .. code-block:: python
+               :linenos:
+
+               regular1D = mesh.Segment()
+               mefisto   = mesh.Triangle( smeshBuilder.MEFISTO )
+               # use other triangle algorithm on a face -- a sub-mesh appears in the mesh
+               netgen    = mesh.Triangle( smeshBuilder.NETGEN_1D2D, face )
+
+#. Create and assign :ref:`hypotheses <about_hypo_page>` by calling corresponding methods of algorithms:
+       .. code-block:: python
+               :linenos:
+
+               segLen10 = regular1D.LocalLength( 10. )
+               maxArea  = mefisto.LocalLength( 100. )
+               netgen.SetMaxSize( 20. )
+               netgen.SetFineness( smeshBuilder.VeryCoarse )
+  
+#. :ref:`compute_anchor` the mesh (generate mesh nodes and elements):
+       .. code-block:: python
+               :linenos:
+
+               mesh.Compute()
+
+An easiest way to start with Python scripting is to do something in
+GUI and then to get a corresponding Python script via 
+**File > Dump Study** menu item. Don't forget that you can get
+all methods of any object in hand (e.g. a mesh group or a hypothesis)
+by calling *dir()* Python built-in function.
+
+All methods of the Mesh Group can be found in :ref:`tui_create_standalone_group` sample script.
+
+An example below demonstrates usage of the Python API for 3d mesh
+generation and for retrieving information on mesh nodes and elements.
+
+.. _example_3d_mesh:
+
+Example of 3d mesh generation:
+##############################
+
+.. literalinclude:: ../../../examples/3dmesh.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/3dmesh.py>`
+
+Examples of Python scripts for Mesh operations are available by
+the following links:
+
+.. toctree::
+   :titlesonly:
+
+   tui_creating_meshes
+   tui_defining_hypotheses
+   tui_grouping_elements
+   tui_filters
+   tui_modifying_meshes
+   tui_transforming_meshes
+   tui_viewing_meshes
+   tui_quality_controls
+   tui_measurements
+   tui_work_on_objects_from_gui
+   tui_notebook_smesh
+   tui_cartesian_algo
+   tui_use_existing_faces
+   tui_prism_3d_algo
+   tui_generate_flat_elements
+
+.. toctree::
+   :hidden:
+
+   smesh_migration.rst
+   smeshBuilder.rst
+   StdMeshersBuilder.rst
+   smeshstudytools.rst
+   modules.rst
+   smesh_module.rst
diff --git a/doc/salome/gui/SMESH/input/smeshstudytools.rst b/doc/salome/gui/SMESH/input/smeshstudytools.rst
new file mode 100644 (file)
index 0000000..288b721
--- /dev/null
@@ -0,0 +1,5 @@
+smeshstudytools module
+======================
+.. automodule:: smeshstudytools
+   :members:
+
diff --git a/doc/salome/gui/SMESH/input/smoothing.doc b/doc/salome/gui/SMESH/input/smoothing.doc
deleted file mode 100644 (file)
index 801b1c9..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*!
-
-\page smoothing_page Smoothing
-
-\n Smoothing is used to improve quality of 2D mesh by adjusting the
-locations of element corners (nodes). 
-
-\note Depending on the chosen method and mesh geometry
-the smoothing can actually decrease the quality of elements and even
-make some elements inverted.
-
-<em>To apply smoothing to the elements of your mesh:</em>
-<ol>
-
-<li>In the \b Modification menu select the \b Smoothing item or click
-<em>"Smoothing"</em> button in the toolbar.
-
-\image html image84.png
-<center><em>"Smoothing" button</em></center>
-
-The following dialog will appear:
-
-\image html smoothing.png
-</li>
-<li>In this dialog:
-
-<ul>
-<li>specify the IDs of the elements which will be smoothed:
-<ul>
-<li><b>Select the whole mesh, sub-mesh or group</b> activating this
-  check-box; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-  possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The
-  selected elements will be highlighted in the viewer; or</li>
-<li>apply Filters. <b>Set filters</b> button allows to apply a filter
-  to the selection of elements. See more about filters in the 
-  \ref filtering_elements "Selection filter library" page.</li>
-</ul>
-</li>
-
-<li>define the <b>Fixed nodes ids</b> that should remain at their
-  location during smoothing. If a mesh is built on a shape, the nodes
-  built on its geometric edges are always fixed. If the smoothing is
-  applied to a part of the mesh (a set of element), the nodes on
-  boundary of the element set are also fixed. It is possible to
-  additionally fix any other nodes. The fixed nodes can be selected
-  manually or by filters, just as the smoothed elements.</li>
-<li>choose the <b>Smoothing Method:</b>
-<ul>
-<li>\b Laplacian smoothing pulls a node toward the center of
-surrounding nodes directly connected to that node along an element
-edge. 
-<li>\b Centroidal smoothing pulls a node toward the
-element-area-weighted centroid of the surrounding elements. </li>
-
-Laplacian method will produce the mesh with the least element
-edge length. It is also the fastest method. Centroidal smoothing
-produces a mesh with more uniform element sizes.</li>
-</ul>
-
-\image html image83.gif
-
-</li>
-<li>specify the <b>Iteration limit</b>. Both smoothing methods iterate
-  through a number of steps to produce the resulting smoothed mesh. At
-  each new step the smoothing is reevaluated with the updated nodal
-  locations. This process continues till the limit of iterations has
-  been exceeded, or till the aspect ratio of all element is less than
-  or equal to the specified one.</li>
-<li>specify the  <b>Max. aspect ratio</b> - the target mesh quality at
-  which the smoothing algorithm should stop the iterations.</li>
-<li>activate <b>in parametric space</b> check-box if it is necessary to
-  improve the shape of faces in the parametric space of geometrical
-  surfaces on which they are generated, else the shape of faces in the
-  3D space is improved that is suitable for <b>planar meshes only</b>. </li>
-</ul>
-</li>
-<li>Click \b Apply or <b> Apply and Close</b> button to confirm the operation.</li>
-</ol>
-
-\image html smoothing1.png "The initial mesh"
-
-\image html smoothing2.png "The smoothed mesh"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_smoothing "Smoothing" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/smoothing.rst b/doc/salome/gui/SMESH/input/smoothing.rst
new file mode 100644 (file)
index 0000000..79041ad
--- /dev/null
@@ -0,0 +1,64 @@
+.. _smoothing_page:
+
+*********
+Smoothing
+*********
+
+Smoothing is used to improve quality of 2D mesh by adjusting the
+locations of element corners (nodes). 
+
+.. note:: Depending on the chosen method and mesh geometry the smoothing can actually decrease the quality of elements and even make some elements inverted.
+
+*To apply smoothing to the elements of your mesh:*
+
+.. |img| image:: ../images/image84.png
+
+#. In the **Modification** menu select the **Smoothing** item or click *"Smoothing"* button |img| in the toolbar.
+
+   The following dialog will appear:
+
+       .. image:: ../images/smoothing.png
+               :align: center
+
+#. In this dialog:
+
+       * specify the IDs of the elements which will be smoothed:
+               * **Select the whole mesh, sub-mesh or group** activating this   check-box; or
+               * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+               * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+               * apply Filters. **Set filters** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`filtering_elements` page.
+
+       * define the **Fixed nodes ids** that should remain at their location during smoothing. If a mesh is built on a shape, the nodes built on its geometric edges are always fixed. If the smoothing is applied to a part of the mesh (a set of element), the nodes on boundary of the element set are also fixed. It is possible to additionally fix any other nodes. The fixed nodes can be selected manually or by filters, just as the smoothed elements.
+       * choose the **Smoothing Method:**
+               * **Laplacian** smoothing pulls a node toward the center of surrounding nodes directly connected to that node along an element edge. 
+               * **Centroidal** smoothing pulls a node toward the element-area-weighted centroid of the surrounding elements. 
+
+               Laplacian method will produce the mesh with the least element edge length. It is also the fastest method. Centroidal smoothing produces a mesh with more uniform element sizes.
+
+
+               .. image:: ../images/image83.gif
+                       :align: center
+
+
+       * specify the **Iteration limit**. Both smoothing methods iterate through a number of steps to produce the resulting smoothed mesh. At each new step the smoothing is reevaluated with the updated nodal locations. This process continues till the limit of iterations has been exceeded, or till the aspect ratio of all element is less than or equal to the specified one.
+       * specify the  **Max. aspect ratio** - the target mesh quality at which the smoothing algorithm should stop the iterations.
+       * activate **in parametric space** check-box if it is necessary to improve the shape of faces in the parametric space of geometrical surfaces on which they are generated, else the shape of faces in the 3D space is improved that is suitable for **planar meshes only**. 
+
+#. Click **Apply** or **Apply and Close** button to confirm the operation.
+
+
+.. image:: ../images/smoothing1.png 
+       :align: center
+
+.. centered:: 
+       The initial mesh
+
+.. image:: ../images/smoothing2.png 
+       :align: center
+
+.. centered:: 
+       The smoothed mesh: mesh quality improved
+
+**See Also** a sample TUI Script of a :ref:`tui_smoothing` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/split_biquad_to_linear.doc b/doc/salome/gui/SMESH/input/split_biquad_to_linear.doc
deleted file mode 100644 (file)
index ea4ac72..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
-
-\page split_biquad_to_linear_page Split bi-quadratic into linear
-
-\n This functionality allows to split bi-quadratic elements into
-linear ones without creation of additional nodes.
-
-So that
-- bi-quadratic triangle will be split into 3 linear quadrangles;
-- bi-quadratic quadrangle will be split into 4 linear quadrangles;
-- tri-quadratic hexahedron will be split into 8 linear hexahedra;
-- quadratic segments adjacent to the split bi-quadratic element will
-  be split into 2 liner segments.
-
-\image html split_biquad_to_linear_mesh.png "Mesh before and after splitting"
-
-<em>To split bi-quadratic elements into linear:</em>
-<ol>
-<li>From the \b Modification menu choose the <b>Split bi-quadratic into linear</b> item or
-click <em>"Split bi-quadratic into linear"</em> button in the toolbar.
-
-\image html split_biquad_to_linear_icon.png
-<center><em>"Split bi-quadratic into linear" button</em></center>
-
-The following dialog box shall appear:
-
-\image html split_biquad_to_linear_dlg.png
-</li>
-<li>Select a mesh, groups or sub-meshes in the Object Browser or in the
-  Viewer.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a \ref tui_split_biquad "Split bi-quadratic into linear" operation.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst b/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst
new file mode 100644 (file)
index 0000000..8b27124
--- /dev/null
@@ -0,0 +1,41 @@
+.. _split_biquad_to_linear_page:
+
+******************************
+Split bi-quadratic into linear
+******************************
+
+This functionality allows to split bi-quadratic elements into
+linear ones without creation of additional nodes.
+
+So that
+
+* bi-quadratic triangle will be split into 3 linear quadrangles;
+* bi-quadratic quadrangle will be split into 4 linear quadrangles;
+* tri-quadratic hexahedron will be split into 8 linear hexahedra;
+* quadratic segments adjacent to the split bi-quadratic element will be split into 2 liner segments.
+
+.. image:: ../images/split_biquad_to_linear_mesh.png 
+       :align: center
+
+.. centered:: 
+       Mesh before and after splitting
+
+*To split bi-quadratic elements into linear:*
+
+.. |img| image:: ../images/split_biquad_to_linear_icon.png
+
+#. From the **Modification** menu choose the **Split bi-quadratic into linear** item or click *"Split bi-quadratic into linear"* button |img| in the toolbar.
+
+
+   The following dialog box shall appear:
+
+       .. image:: ../images/split_biquad_to_linear_dlg.png
+               :align: center
+
+#. Select a mesh, groups or sub-meshes in the Object Browser or in the Viewer.
+#. Click the **Apply** or **Apply and Close** button.
+
+**See Also** a sample TUI Script of a :ref:`tui_split_biquad` operation.
+
+
diff --git a/doc/salome/gui/SMESH/input/split_to_tetra.doc b/doc/salome/gui/SMESH/input/split_to_tetra.doc
deleted file mode 100644 (file)
index b6ee36e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*!
-
-\page split_to_tetra_page Splitting volumes
-
-\n This operation allows to split either any volumic elements into
-tetrahedra or hexahedra into prisms. 2D mesh is modified accordingly.
-
-<em>To split volumes:</em>
-<ol>
-<li>Select a mesh, a sub-mesh or a group.</li>
-<li>In the \b Modification menu select the <b>Split Volumes</b> item or
-click <em>"Split Volumes"</em> button in the toolbar.
-
-\image html split_into_tetra_icon.png
-<center><em>"Split Volumes" button</em></center>
-
-The following dialog box will appear:
-
-\image html split_into_tetra.png
-
-<br>
-First it is possible to select the type of operation:
-- If \b Tetrahedron button is checked, the operation will split volumes of any type into tetrahedra.
-- If \b Prism button is checked, the operation will split hexahedra into prisms.
-
-<ul>
-<li>The main list contains the list of volumes to split. 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 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 applying a filter to the selection of volumes.
-  <br><b>Note:</b> If you split not all adjacent non-tetrahedral
-  volumes, your mesh becomes non-conform.</li> 
-  
-<li><b>Apply to all</b> radio button allows splitting all
-  volumes of the currently selected mesh.</li>
-  
-<li>If \b Tetrahedron element type is selected, <b> Split hexahedron </b> group allows specifying the number of tetrahedra  a hexahedron will be split into. If the chosen method does not allow to get a conform mesh, a generic solution is applied: an additional node 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> 
-
-<li>If \b Prism element type is selected, the <b>Split hexahedron</b> group looks as follows:
-
-\image html split_into_prisms.png
-
-<ul>
-<li><b>Into 2 (or 4) prisms</b> allows to specify the number of prisms a hexahedron will be split into.</li> 
-<li> <b> Facet to split </b> group allows to specify the side (facet) of the hexahedron, which is split into triangles.  This facet is defined by a point and a direction. The algorithm finds a hexahedron closest to the specified point and splits a facet whose normal is closest to the specified direction. Then the splitting is propagated from that hexahedron to all adjacent hexahedra. 
-The point and the direction by which the first split hexahedron is found can be specified:
-<ul>
- <li> by input of coordinates in <b> Hexa location </b> and <b> Facet normal </b> fields, or </li>
- <li> by clicking <b>Selection</b> button and selecting in the viewer the element whose barycenter will be used as the start point and whose direction will be used as a normal to facet to split into triangles. Switch this button
-off to return to selection of volumes to split.</li>
-</ul>
-    
-<li> If <b> All domains </b> option is off, the operation stops when all
-  hehexedra adjacent to the start hexahedron are split into
-  prisms. Else the operation tries to continue splitting starting from
-  another hexahedron closest to the <b> Hexa location</b>. </li>
-</li>
-</ul>
-
-<li><b>Select from</b> set of fields allows choosing a sub-mesh or an
-  existing group whose elements will be added to the list as you click \b Add button.</li>
-</ul>
-
-<li>Click \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ol>
-*/
diff --git a/doc/salome/gui/SMESH/input/split_to_tetra.rst b/doc/salome/gui/SMESH/input/split_to_tetra.rst
new file mode 100644 (file)
index 0000000..775ade4
--- /dev/null
@@ -0,0 +1,53 @@
+.. _split_to_tetra_page:
+
+*****************
+Splitting volumes
+*****************
+
+This operation allows to split either any volumic elements into
+tetrahedra or hexahedra into prisms. 2D mesh is modified accordingly.
+
+*To split volumes:*
+
+.. |img| image:: ../images/split_into_tetra_icon.png
+
+#. Select a mesh, a sub-mesh or a group.
+#. In the **Modification** menu select the **Split Volumes** item or click *"Split Volumes"* button  |img| in the toolbar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/split_into_tetra.png
+               :align: center                                                 
+
+
+   * First it is possible to select the type of operation:
+
+       * If **Tetrahedron** button is checked, the operation will split volumes of any type into tetrahedra.
+       * If **Prism** button is checked, the operation will split hexahedra into prisms.
+   
+   * The main list contains the list of volumes to split. You can click on a volume in the 3D viewer and it will be highlighted (lock Shiftkeyboard button to select several volumes). Click **Add** button and the ID of this volume will be added to the list. To remove the selected element or elements from the list click **Remove** button. **Sort list** button allows to sort the list of IDs. **Filter** button allows applying a filter to the selection of volumes.
+     
+     .. note:: If you split not all adjacent non-tetrahedral volumes, your mesh becomes non-conform. 
+  
+   * **Apply to all** radio button allows splitting all volumes of the currently selected mesh.
+   * If **Tetrahedron** element type is selected, **Split hexahedron** group allows specifying the number of tetrahedra  a hexahedron will be split into. If the chosen method does not allow to get a conform mesh, a generic solution is applied: an additional node 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. 
+   * If **Prism** element type is selected, the **Split hexahedron** group looks as follows:
+
+               .. image:: ../images/split_into_prisms.png
+                       :align: center                                                 
+
+               * **Into 2 (or 4) prisms** allows to specify the number of prisms a hexahedron will be split into. 
+               * **Facet to split** group allows to specify the side (facet) of the hexahedron, which is split into triangles.  This facet is defined by a point and a direction. The algorithm finds a hexahedron closest to the specified point and splits a facet whose normal is closest to the specified direction. Then the splitting is propagated from that hexahedron to all adjacent hexahedra. The point and the direction by which the first split hexahedron is found can be specified:
+
+                       * by input of coordinates in **Hexa location** and **Facet normal** fields, or 
+                       * by clicking **Selection** button and selecting in the viewer the element whose barycenter will be used as the start point and whose direction will be used as a normal to facet to split into triangles. Switch this button off to return to selection of volumes to split.
+
+    
+               * If **All domains** option is off, the operation stops when all hehexedra adjacent to the start hexahedron are split into prisms. Else the operation tries to continue splitting starting from  another hexahedron closest to the **Hexa location**. 
+
+   * **Select from** set of fields allows choosing a sub-mesh or an existing group whose elements will be added to the list as you click **Add** button.
+
+
+#. Click **Apply** or **Apply and Close** button to confirm the operation.
+
+**See also** a sample TUI script of :ref:`modifying_meshes_split_vol` operation.
diff --git a/doc/salome/gui/SMESH/input/symmetry.doc b/doc/salome/gui/SMESH/input/symmetry.doc
deleted file mode 100644 (file)
index 4641ffe..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*!
-
-\page symmetry_page Symmetry
-
-\n This geometrical operation allows to perform a symmetrical copy of
-your mesh or some of its elements.
-
-<em>To create a symmetrical copy:</em>
-
-<ol>
-<li>From the \b Modification menu choose \b Transformation -> \b Symmetry item  or click
-<em>"Symmetry"</em> button in the toolbar.
-
-\image html symmetry.png "Symmetry button"
-
-One of the following dialogs will appear:
-
-It is possible to mirror a mesh or some of its elements through:
-\image html symmetry1.png "a point" <br>
-\image html symmetry2.png "an axis" <br>
-\image html symmetry3.png "a plane (defined by a point and a normal to the plane)"
-
-</li>
-
-<li>In the dialog:
-<ul>
-<li>specify the elements for the symmetry operation:
-
-<ul>
-<li><b>Select the whole mesh, submesh or group</b> activating this
-checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The
-  selected elements will be highlighted in the viewer; or</li>
-<li>apply Filters. <b>Set Filter</b> button allows to apply a 
-  \ref filtering_elements "filter" to the selection of elements.</li> 
-</ul>
-</li>
-
-<li>depending on the nature of the mirror object: 
-<ul>
-<li>if the mesh is mirrored through a point, specify the coordinates
-  of the point, either directly or by picking a mesh node;</li>
-<li>if the mesh is mirrored through an axis: 
-<ul>
-<li>specify the coordinates of the start \b Point of the axis, either
-  directly or by picking a mesh node;</li>
-<li>specify the components of axis \b Vector, either directly or by
-  picking a mesh node, in which case \b Vector is defined as a shift
-  between the \b Point and the node;</li>
-</ul>
-</li>
-
-<li>if the mesh is mirrored through a plane:
-<ul>
-<li>specify the cooordinates of the \b Point lying on the plane,
-  either directly or by picking a mesh node;</li>
-<li>specify the components of plane \b Normal, either directly or by
-  picking a mesh node, in which case \b Normal is defined as a shift
-  between the \b Point and the node.</li>
-</ul>
-</li>
-
-<li>specify the conditions of symmetry operation:
-<ul>
-<li>activate <b>Move elements</b> radio button to change the location of
-  the selected elements within the current mesh;</li>
-<li>activate <b>Copy elements</b> radio button to duplicate the
-  selected elements at the new location within the current mesh;</li>
-<li>activate <b>Create as new mesh</b> radio button to create a new
-  element in a new mesh; the new mesh appears in the Object Browser
-  with the default name \a MeshName_mirrored (it is possible to change
-  this name in the adjacent box);</li>
-<li>activate <b> Copy groups </b> check-box to put new mesh entities
-  into new groups if source entities belong to some groups. New
-  groups are named by pattern "<old group name>_mirrored".</li>
-</ul>
-</li>
-</ul>
-<li>activate <b>Preview</b> check-box to show the result of
-  transformation in the viewer;</li>
-<li>click \b Apply or <b> Apply and Close</b> button to confirm the
-  operation.</li>
-</ul>
-
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_symmetry "Symmetry" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/symmetry.rst b/doc/salome/gui/SMESH/input/symmetry.rst
new file mode 100644 (file)
index 0000000..c20875a
--- /dev/null
@@ -0,0 +1,69 @@
+.. _symmetry_page: 
+
+********
+Symmetry
+********
+
+This geometrical operation allows to perform a symmetrical copy of your mesh or some of its elements.
+
+*To create a symmetrical copy:*
+
+.. |img| image:: ../images/symmetry.png 
+
+#. From the **Modification** menu choose **Transformation** -> **Symmetry** item  or click *"Symmetry"* button |img| in the toolbar.
+
+   The following dialogs will appear, where you can choose a way to mirror:
+
+       * through a point:
+
+       .. image:: ../images/symmetry1.png 
+               :align: center
+
+       * through an axis:
+
+       .. image:: ../images/symmetry2.png 
+               :align: center
+
+       * through a plane (defined by a point and a normal to the plane):
+
+       .. image:: ../images/symmetry3.png
+               :align: center
+
+
+#. In the dialog:
+
+       * specify the elements for the symmetry operation:
+
+               * **Select the whole mesh, submesh or group** activating this checkbox; or
+               * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+               * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+               * apply Filters. **Set Filter** button allows to apply a :ref:`filtering_elements` to the selection of elements. 
+
+       * depending on the nature of the mirror object: 
+
+               * if the mesh is mirrored through a point, specify the coordinates of the point, either directly or by picking a mesh node;
+               * if the mesh is mirrored through an axis: 
+
+                 * specify the coordinates of the start **Point** of the axis, either directly or by picking a mesh node;
+                 * specify the components of axis **Vector**, either directly or by picking a mesh node, in which case **Vector** is defined as a shift between the **Point** and the node;
+
+               * if the mesh is mirrored through a plane:
+
+                 * specify the cooordinates of the **Point** lying on the plane, either directly or by picking a mesh node;
+                 * specify the components of plane **Normal**, either directly or by picking a mesh node, in which case **Normal** is defined as a shift between the **Point** and the node.
+
+               * specify the conditions of symmetry operation:
+
+                  * activate **Move elements** radio button to change the location of the selected elements within the current mesh;
+                  * activate **Copy elements** radio button to duplicate the selected elements at the new location within the current mesh;
+                  * activate **Create as new mesh** radio button to create a new element in a new mesh; the new mesh appears in the Object Browser with the default name *MeshName_mirrored* (it is possible to change this name in the adjacent box);
+                  * activate **Copy groups** check-box to put new mesh entities into new groups if source entities belong to some groups. New groups are named by pattern "<old group name>_mirrored".
+
+       * activate **Preview** check-box to show the result of transformation in the viewer;
+       * click **Apply** or **Apply and Close** button to confirm the operation.
+
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_symmetry` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/taper.doc b/doc/salome/gui/SMESH/input/taper.doc
deleted file mode 100644 (file)
index da3ed83..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-
-\page taper_page Taper
-
-\n \b Taper mesh quality criterion represents the ratio of the areas
-of two triangles separated by a diagonal within a quadrilateral face.
-
-  <b><center>JA = 0.25 * (A1 + A2 + A3 + A4)
-  <br> TAPER = MAX(|A1/JA - 1|, |A2/JA - 1|, |A3/JA - 1|, |A4/JA - 1|)</center></b>
-
-<br><em>To apply the Taper quality criterion to your mesh:</em>
-
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Taper</b> or click
-<em>"Taper"</em> button in the toolbar.
-
-\image html image36.png
-<center><em>"Taper" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image90.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_taper "Taper quality control" operation.  
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/taper.rst b/doc/salome/gui/SMESH/input/taper.rst
new file mode 100644 (file)
index 0000000..db6d75f
--- /dev/null
@@ -0,0 +1,29 @@
+.. _taper_page:
+
+*****
+Taper
+*****
+
+**Taper** mesh quality criterion represents the ratio of the areas
+of two triangles separated by a diagonal within a quadrilateral face.
+
+::
+
+       **JA = 0.25 * (A1 + A2 + A3 + A4)**
+       **TAPER = MAX(|A1/JA - 1|, |A2/JA - 1|, |A3/JA - 1|, |A4/JA - 1|)**
+
+*To apply the Taper quality criterion to your mesh:*
+
+.. |img| image:: ../images/image36.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Taper** or click *"Taper"* button |img| in the toolbar.
+
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image90.jpg
+               :align: center
+
+**See Also** a sample TUI Script of a :ref:`tui_taper` filter.
+
diff --git a/doc/salome/gui/SMESH/input/tools.doc b/doc/salome/gui/SMESH/input/tools.doc
deleted file mode 100644 (file)
index 041a073..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
-
-\page tools_page Plugins
-
-The following plugins are accessible via <b> Mesh > SMESH pligins </b> menu:
-
-- <a href="padder/padder_userguide_page.html"> SpherePadder plugin </a>
-- <a href="yams/index.html"                  > MGSurfOpt plugin    </a>
-- <a href="MGCleaner/index.html"             > MGCleaner plugin    </a>
-- <a href="zcracks/index.html"               > Z-cracks plugin     </a>
-- <a href="MacMesh/index.html"               > MacMesh plugin      </a>
-- <a href="blocFissure/index.html"           > blocFissure plugin  </a>
-- <b>MeshCut plugin</b> - allows to cut a mesh constituted of linear tetrahedrons by a plane.
-- <b>Get min or max value of control</b> - a sample plugin whose sources are located in <em>${GUI_ROOT_DIR}/share/salome/plugins/gui/demo</em> directory (files <em>minmax_plugin.py, minmax_ui.py and smesh_plugins.py</em>). You can find a detailed description of how to create your own plugin in documentation: <b>Help > GUI module > User's Guide > How-To's and Best Practices > Extend SALOME gui functions using python plugins</b>.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tools.rst b/doc/salome/gui/SMESH/input/tools.rst
new file mode 100644 (file)
index 0000000..aa99d0d
--- /dev/null
@@ -0,0 +1,18 @@
+.. _tools_page:
+
+*******
+Plugins
+*******
+
+The following plugins are accessible via **Mesh > SMESH pligins** menu:
+
+* `SpherePadder plugin <padder/padder_userguide_page.html>`_ 
+* `MGSurfOpt plugin <yams/index.html>`_
+* `MGCleaner plugin <MGCleaner/index.html>`_
+* `Z-cracks plugin <zcracks/index.html>`_
+* `MacMesh plugin <MacMesh/index.html>`_
+* `blocFissure plugin <blocFissure/index.html>`_ 
+* **MeshCut plugin** - allows to cut a mesh constituted of linear tetrahedrons by a plane.
+* **Get min or max value of control** - a sample plugin whose sources are located in *${GUI_ROOT_DIR}/share/salome/plugins/gui/demo* directory (files *minmax_plugin.py, minmax_ui.py and smesh_plugins.py*). You can find a detailed description of how to create your own plugin in documentation: **Help > User's Guide > GUI module > How-To's and Best Practices > Extend SALOME gui functions using python plugins**.
+
+
diff --git a/doc/salome/gui/SMESH/input/translation.doc b/doc/salome/gui/SMESH/input/translation.doc
deleted file mode 100644 (file)
index 56c1dfb..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-
-\page translation_page Translation
-
-\n This geometrical operation allows to translate in space your mesh
-or some of its elements.
-
-<em>To translate a mesh:</em>
-
-<ol>
-<li>From the \b Modification menu choose \b Transformation -> \b Translation item  or click
-<em>"Translation"</em> button in the toolbar.
-
-\image html translation.png "Translation button"
-
-One of the following dialogs will appear:
-
-It is possible to define the vector of thanslation:
-\image html translation1.png "by two points"
-
-\image html translation2.png "by the vector from the origin of coordinates" 
-
-</li>
-
-<li>
-In the dialog:
-<ul>
-<li>specify the IDs of the translated elements:
-
-<ul>
-<li><b>Select the whole mesh, submesh or group</b> activating this
-checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
-possible to select a whole area with a mouse frame; or</li> 
-<li>input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
-viewer; or</li>
-<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of elements. See more
-about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
-</ul>
-</li>
-
-<li>specify the vector of translation:
-<ul>
-<li>specify the cooordinates of the start and end \b Points of the
-vector of translation; or</li>
-<li>specify the end point of the \b Vector of rotation starting at the
-origin of coordinates.</li>
-</ul>
-</li>
-
-<li>specify the conditions of translation:
-<ul>
-<li>activate <b>Move elements</b> radio button to create  the source
-mesh (or elements) at the new location and erase it from the previous location;</li>
-<li>activate <b>Copy elements</b> radio button to create the source
-mesh (or elements) at the new location, but leave it at the previous
-location, the source mesh will be considered one and single mesh with the result of the rotation;</li>
-<li>activate <b>Create as new mesh</b> radio button to leave the
-source mesh (or elements) at its previous location and create a new
-mesh at the new location, the new mesh appears in the Object Browser
-with the default name MeshName_rotated (it is possible to change this
-name in the adjacent box);</li>
-<li>activate <b> Copy groups </b> checkbox to copy the groups of elements of the source mesh to the newly created mesh.</li>
-</ul>
-</li>
-
-<li>activate <b>Preview</b> checkbox to show the result of transformation in the viewer </li>
-<li>click \b Apply or <b> Apply and Close</b> button to confirm the operation.</li>
-</ul>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a \ref tui_translation "Translation" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/translation.rst b/doc/salome/gui/SMESH/input/translation.rst
new file mode 100644 (file)
index 0000000..ab9a966
--- /dev/null
@@ -0,0 +1,52 @@
+.. _translation_page:
+
+***********
+Translation
+***********
+
+This geometrical operation allows to translate in space your mesh or some of its elements.
+
+*To translate a mesh:*
+
+.. |img| image:: ../images/translation.png 
+
+#. From the **Modification** menu choose **Transformation** -> **Translation** item  or click *"Translation"* button |img| in the toolbar.
+   The following dialog will appear, where you can select a way to define the vector of thanslation:
+
+   * by two points:
+
+       .. image:: ../images/translation1.png 
+               :align: center
+
+   * by the vector from the origin of coordinates:
+
+       .. image:: ../images/translation2.png 
+               :align: center
+
+#. In the dialog:
+
+   * specify the IDs of the translated elements:
+
+     * **Select the whole mesh, submesh or group** activating this checkbox; or
+     * choose mesh elements with the mouse in the 3D Viewer. It is possible to select a whole area with a mouse frame; or 
+     * input the element IDs directly in **ID Elements** field. The selected elements will be highlighted in the viewer; or
+     * apply Filters. **Set filter** button allows to apply a filter to the selection of elements. See more about filters in the :ref:`selection_filter_library_page` page.
+
+   * specify the vector of translation:
+
+     * specify the cooordinates of the start and end **Points** of the vector of translation; or
+     * specify the end point of the **Vector** of rotation starting at the origin of coordinates.
+
+   * specify the conditions of translation:
+
+     * activate **Move elements** radio button to create  the source mesh (or elements) at the new location and erase it from the previous location;
+     * activate **Copy elements** radio button to create the source mesh (or elements) at the new location, but leave it at the previous location, the source mesh will be considered one and single mesh with the result of the rotation;
+     * activate **Create as new mesh** radio button to leave the source mesh (or elements) at its previous location and create a new mesh at the new location, the new mesh appears in the Object Browser with the default name MeshName_rotated (it is possible to change this name in the adjacent box);
+     * activate **Copy groups** checkbox to copy the groups of elements of the source mesh to the newly created mesh.
+
+   * activate **Preview** checkbox to show the result of transformation in the viewer 
+   * click **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_translation` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/transparency.doc b/doc/salome/gui/SMESH/input/transparency.doc
deleted file mode 100644 (file)
index 91734ab..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
-
-\page transparency_page Transparency
-
-\image html a-transparency.png
-
-Using this slider you can set the transparency of shading. Absolutely
-transparent shading will be invisible. By default it is absolutely
-opaque.
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/transparency.rst b/doc/salome/gui/SMESH/input/transparency.rst
new file mode 100644 (file)
index 0000000..5990033
--- /dev/null
@@ -0,0 +1,13 @@
+.. _transparency_page:
+
+************
+Transparency
+************
+
+.. image:: ../images/a-transparency.png
+       :align: center                                                 
+
+Using this slider you can set the transparency of shading. Absolutely
+transparent shading will be invisible. By default it is absolutely
+opaque.
+
diff --git a/doc/salome/gui/SMESH/input/tui_cartesian_algo.doc b/doc/salome/gui/SMESH/input/tui_cartesian_algo.doc
deleted file mode 100644 (file)
index dccf68a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-
-\page tui_cartesian_algo Usage of Body Fitting algorithm
-\tui_script{cartesian_algo.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst b/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst
new file mode 100644 (file)
index 0000000..2dd01be
--- /dev/null
@@ -0,0 +1,13 @@
+.. _tui_cartesian_algo:
+
+Usage of Body Fitting algorithm
+###############################
+
+.. literalinclude:: ../../../examples/cartesian_algo.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/cartesian_algo.py>`
+
+
+
diff --git a/doc/salome/gui/SMESH/input/tui_creating_meshes.doc b/doc/salome/gui/SMESH/input/tui_creating_meshes.doc
deleted file mode 100644 (file)
index 53ad3f8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-
-\page tui_creating_meshes_page Creating Meshes
-
-\tableofcontents
-
-\n First of all see \ref example_3d_mesh "Example of 3d mesh generation",
- which is an example of good python script style for Mesh module.
-
-<br>
-\section construction_of_a_mesh Construction of a mesh
-\tui_script{creating_meshes_ex01.py}
-
-<br>
-\section tui_construction_submesh Construction of a sub-mesh
-\tui_script{creating_meshes_ex02.py}
-
-<br>
-\section change_priority_of_submeshes_in_mesh Change priority of sub-meshes in mesh
-\tui_script{creating_meshes_ex03.py}
-
-<br>
-\section tui_editing_while_meshing Intermediate edition while meshing
-\tui_script{a3DmeshOnModified2Dmesh.py}
-
-<br>
-\section tui_editing_mesh Editing a mesh (i.e. changing hypotheses)
-\tui_script{creating_meshes_ex04.py}
-
-<br>
-\section tui_export_mesh Export of a Mesh
-\tui_script{creating_meshes_ex05.py}
-
-<br>
-\section how_to_mesh_a_cylinder_with_hexahedrons How to mesh a cylinder with hexahedrons?
-Here you can see an example of python script, creating a hexahedral
-mesh on a cylinder. A picture below the source code of the script
-demonstrates the resulting mesh.
-\tui_script{creating_meshes_ex06.py}
-
-\image html mesh_cylinder_hexa.png
-
-<br>
-\section tui_building_compound Building a compound of meshes
-\tui_script{creating_meshes_ex07.py}
-
-<br>
-\section tui_copy_mesh Mesh Copying
-\tui_script{creating_meshes_ex08.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_creating_meshes.rst b/doc/salome/gui/SMESH/input/tui_creating_meshes.rst
new file mode 100644 (file)
index 0000000..46b4f9f
--- /dev/null
@@ -0,0 +1,118 @@
+.. _tui_creating_meshes_page:
+
+***************
+Creating Meshes
+***************
+
+.. contents:: `Table of contents`
+
+
+First of all see :ref:`example_3d_mesh` which is an example of good python script style for Mesh module.
+
+
+.. _construction_of_a_mesh:
+
+Construction of a mesh
+======================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex01.py>`
+
+.. _tui_construction_submesh:
+
+Construction of a sub-mesh
+==========================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex02.py>`
+
+.. _change_priority_of_submeshes_in_mesh:
+
+Change priority of sub-meshes in mesh
+=====================================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex03.py>`
+
+.. _tui_editing_while_meshing:
+
+Intermediate edition while meshing
+==================================
+
+.. literalinclude:: ../../../examples/a3DmeshOnModified2Dmesh.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/a3DmeshOnModified2Dmesh.py>`
+
+.. _tui_editing_mesh:
+
+Editing a mesh (i.e. changing hypotheses)
+=========================================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex04.py>`
+
+.. _tui_export_mesh:
+
+Export of a Mesh
+================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex05.py>`
+
+.. _how_to_mesh_a_cylinder_with_hexahedrons: 
+
+How to mesh a cylinder with hexahedrons?
+========================================
+
+The next script creates a hexahedral mesh on a cylinder. A picture below the script
+demonstrates the resulting mesh.
+
+.. literalinclude:: ../../../examples/creating_meshes_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex06.py>`
+
+.. image:: ../images/mesh_cylinder_hexa.png
+       :align: center                                                 
+
+
+.. _tui_building_compound: 
+
+Building a compound of meshes
+=============================
+
+.. literalinclude:: ../../../examples/creating_meshes_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex07.py>`
+
+.. _tui_copy_mesh:
+
+Mesh Copying
+============
+
+.. literalinclude:: ../../../examples/creating_meshes_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/creating_meshes_ex08.py>`
+
diff --git a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc
deleted file mode 100644 (file)
index 85a3cdf..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*!
-
-\page tui_defining_hypotheses_page Defining Hypotheses and Algorithms
-
-This page provides example codes of \ref tui_defining_meshing_algos
-"defining algorithms" and hypotheses. 
-<ul>
-<li>Wire discretisation 1D algorithm
-  <ul>
-    <li>\ref tui_1d_adaptive "Adaptive 1D" hypothesis</li>
-    <li>\ref tui_1d_arithmetic "Arithmetic Progression" hypothesis</li>
-    <li>\ref tui_1d_arithmetic "Geometric Progression" hypothesis</li>
-    <li>\ref tui_deflection_1d "Deflection and Number of Segments" hypotheses</li>
-    <li>\ref tui_start_and_end_length "Start and End Length" hypotheses</li>
-    <li>\ref tui_average_length "Local Length"</li>
-    <li>\ref tui_propagation "Propagation" additional hypothesis </li>
-    <li>\ref tui_fixed_points "Fixed Points 1D" hypothesis</li>
-  </ul>
-</li>
-<li>Triangle: Mefisto 2D algorithm
-  <ul>
-    <li>\ref tui_max_element_area "Max Element Area" hypothesis </li>
-    <li>\ref tui_length_from_edges "Length from Edges"
-    hypothesis </li>
-  </ul>
-</li>
-<li>NETGEN 3D algorithm
-  <ul>
-    <li> \ref tui_max_element_volume "Max. Element Volume"hypothesis </li>
-    <li> \ref tui_viscous_layers "Viscous layers"</li>
-  </ul>
-</li>
-<li>\ref tui_projection "Projection Algorithms"</li>
-<li>\ref tui_radial_quadrangle "Radial Quadrangle 1D-2D" algorithm</li>
-<li>Quadrangle: Mapping 2D algorithm
-  <ul>
-    <li> \ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis </li>
-  </ul>
-</li>
-<li>\ref tui_import "Import 1D-2D Elements from Another Mesh" algorithm</li>
-</ul>
-<br>
-
-<h2>Defining 1D Hypotheses</h2>
-
-<br>
-\anchor tui_1d_arithmetic
-<h3>Arithmetic Progression and Geometric Progression</h3>
-\tui_script{defining_hypotheses_ex01.py}
-
-<br>
-\anchor tui_1d_adaptive
-<h3>Adaptive</h3>
-\tui_script{defining_hypotheses_adaptive1d.py}
-
-<br>
-\anchor tui_deflection_1d
-<h3>Deflection and Number of Segments</h3>
-\tui_script{defining_hypotheses_ex02.py}
-
-<br>
-\anchor tui_start_and_end_length
-<h3>Start and End Length</h3>
-\tui_script{defining_hypotheses_ex03.py}
-
-<br>
-\anchor tui_average_length
-<h3>Local Length</h3>
-\tui_script{defining_hypotheses_ex04.py}
-
-<br><h2>Defining 2D and 3D hypotheses</h2>
-
-<br>
-\anchor tui_max_element_area
-<h3>Maximum Element Area</h3>
-\tui_script{defining_hypotheses_ex05.py}
-
-<br>
-\anchor tui_max_element_volume
-<h3>Maximum Element Volume</h3>
-\tui_script{defining_hypotheses_ex06.py}
-
-<br>
-\anchor tui_length_from_edges
-<h3>Length from Edges</h3>
-\tui_script{defining_hypotheses_ex07.py}
-
-<br><h2>Defining Additional Hypotheses</h2>
-
-<br>
-\anchor tui_propagation
-<h3>Propagation</h3>
-\tui_script{defining_hypotheses_ex08.py}
-
-<br>
-\anchor tui_defining_meshing_algos
-<h2>Defining Meshing Algorithms</h2>
-\tui_script{defining_hypotheses_ex09.py}
-
-<br>
-\anchor tui_projection
-<h3>Projection Algorithms</h3>
-\tui_script{defining_hypotheses_ex10.py}
-
-<h3>Projection 1D2D</h3>
-\tui_script{defining_hypotheses_ex11.py}
-
-<br>
-
-\anchor tui_fixed_points
-
-<h2>1D Mesh with Fixed Points example</h2>
-\tui_script{defining_hypotheses_ex12.py}
-
-\anchor tui_radial_quadrangle
-<h2> Radial Quadrangle 1D-2D example </h2>
-\tui_script{defining_hypotheses_ex13.py}
-
-\anchor tui_quadrangle_parameters
-<h2>Quadrangle Parameters example 1 (meshing a face with 3 edges) </h2>
-\tui_script{defining_hypotheses_ex14.py}
-
-<h2>Quadrangle Parameters example 2 (using different types) </h2>
-\tui_script{defining_hypotheses_ex15.py}
-
-\anchor tui_import
-<h2>"Import 1D-2D Elements from Another Mesh" example </h2>
-\tui_script{defining_hypotheses_ex16.py}
-
-\anchor tui_viscous_layers
-<h2>Viscous layers construction</h2>
-\tui_script{defining_hypotheses_ex17.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst
new file mode 100644 (file)
index 0000000..0642126
--- /dev/null
@@ -0,0 +1,264 @@
+.. _tui_defining_hypotheses_page:
+
+**********************************
+Defining Hypotheses and Algorithms
+**********************************
+
+This page provides example codes of :ref:`defining algorithms <tui_defining_meshing_algos>`
+and hypotheses.
+
+* Wire discretisation 1D algorithm
+  
+    * :ref:`tui_1d_adaptive` hypothesis
+    * :ref:`rithmetic Progression <tui_1d_arithmetic>` hypothesis
+    * :ref:`Geometric Progression <tui_1d_arithmetic>` hypothesis
+    * :ref:`Deflection and Number of Segments <tui_deflection_1d>` hypotheses
+    * :ref:`Start and End Length <tui_start_and_end_length>` hypothesis
+    * :ref:`tui_average_length` hypothesis
+    * :ref:`tui_propagation` additional hypotheses 
+    * :ref:`Fixed Points 1D <tui_fixed_points>` hypothesis
+  
+
+* Triangle: Mefisto 2D algorithm
+  
+    * :ref:`tui_max_element_area` hypothesis 
+    * :ref:`tui_length_from_edges` hypothesis 
+  
+
+* NETGEN 3D algorithm
+  
+    *  :ref:`tui_max_element_volume` hypothesis 
+    *  :ref:`Viscous layers <tui_viscous_layers>` hypotheses
+
+* :ref:`tui_projection`
+* :ref:`Radial Quadrangle 1D-2D <tui_radial_quadrangle>` algorithm
+* Quadrangle: Mapping 2D algorithm
+  
+    * :ref:`Quadrangle Parameters <tui_quadrangle_parameters>` hypothesis 
+
+* :ref:`tui_radial_prism`
+* :ref:`Import 1D-2D Elements from Another Mesh <tui_import>` algorithm
+
+
+
+Defining 1D Hypotheses
+######################
+
+.. _tui_1d_arithmetic:
+
+Arithmetic Progression and Geometric Progression
+================================================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex01.py>`
+
+.. _tui_1d_adaptive:
+
+Adaptive
+========
+
+.. literalinclude:: ../../../examples/defining_hypotheses_adaptive1d.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_adaptive1d.py>`
+
+
+.. _tui_deflection_1d:
+
+Deflection and Number of Segments
+=================================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex02.py>`
+
+
+.. _tui_start_and_end_length:
+
+Start and End Length
+====================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex03.py>`
+
+
+.. _tui_average_length:
+
+Local Length
+============
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex04.py>`
+
+Defining 2D and 3D hypotheses
+#############################
+
+
+.. _tui_max_element_area:
+
+Maximum Element Area
+====================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex05.py>`
+
+
+.. _tui_max_element_volume:
+
+Maximum Element Volume
+======================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex06.py>`
+
+
+.. _tui_length_from_edges:
+
+Length from Edges
+=================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex07.py>`
+
+Defining Additional Hypotheses
+##############################
+
+.. _tui_propagation:
+
+Propagation
+===========
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex08.py>`
+
+
+.. _tui_defining_meshing_algos:
+
+Defining Meshing Algorithms
+###########################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex09.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex09.py>`
+
+
+.. _tui_projection:
+
+Projection Algorithms
+=====================
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex10.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex10.py>`
+
+Projection 1D2D
+===============
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex11.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex11.py>`
+
+.. _tui_fixed_points:
+
+1D Mesh with Fixed Points example
+#################################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex12.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex12.py>`
+
+.. _tui_radial_quadrangle:
+
+Radial Quadrangle 1D-2D example
+###############################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex13.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex13.py>`
+
+.. _tui_quadrangle_parameters:
+
+Quadrangle Parameters example 1 (meshing a face with 3 edges)
+##############################################################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex14.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex14.py>`
+
+Quadrangle Parameters example 2 (using different types)
+#######################################################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex15.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex15.py>`
+
+.. _tui_import:
+
+"Import 1D-2D Elements from Another Mesh" example
+#################################################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex16.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex16.py>`
+
+.. _tui_viscous_layers:
+
+Viscous layers construction
+###########################
+
+.. literalinclude:: ../../../examples/defining_hypotheses_ex17.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/defining_hypotheses_ex17.py>`
+
+.. _tui_radial_prism:
+
+Radial Prism example
+####################
+
+.. literalinclude:: ../../../examples/radial_prism_3d_algo.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/radial_prism_3d_algo.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_filters.doc b/doc/salome/gui/SMESH/input/tui_filters.doc
deleted file mode 100755 (executable)
index d77c447..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-/*!
-
-\page tui_filters_page Filters usage
-
-\tableofcontents
-
-Filters allow picking only the mesh elements satisfying to a
-specific condition or a set of conditions. Filters can be used to create
-or edit mesh groups, remove elements from the mesh, control
-mesh quality by different parameters, etc.
-
-Several filtering criteria can be combined together by using logical
-operators \a AND and \a OR. In addition, a filtering criterion can
-be reverted using logical operator \a NOT.
-
-Mesh filters can use the functionality of mesh quality controls to filter
-mesh nodes / elements by a specific characteristic (Area, Length, etc).
-
-This page provides a short description of the existing mesh filters,
-describes required parameters and gives simple examples of usage in
-Python scripts.
-
-\sa \ref tui_quality_controls_page
-
-\section filter_aspect_ratio Aspect ratio
-
-filters 2D mesh elements (faces) according to the aspect ratio value:
-- element type should be \a SMESH.FACE
-- functor type should be \a SMESH.FT_AspectRatio
-- threshold is floating point value (aspect ratio)
-
-\tui_script{filters_ex01.py}
-
-\sa \ref tui_aspect_ratio
-
-\section filter_aspect_ratio_3d Aspect ratio 3D
-
-filters 3D mesh elements (volumes) according to the aspect ratio value:
-- element type is \a SMESH.VOLUME
-- functor type is \a SMESH.FT_AspectRatio3D
-- threshold is floating point value (aspect ratio)
-
-\tui_script{filters_ex02.py}
-
-\sa \ref tui_aspect_ratio_3d
-
-\section filter_warping_angle Warping angle
-
-filters 2D mesh elements (faces) according to the warping angle value:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_Warping
-- threshold is floating point value (warping angle)
-
-\tui_script{filters_ex03.py}
-
-\sa \ref tui_warping
-
-\section filter_minimum_angle Minimum angle
-
-filters 2D mesh elements (faces) according to the minimum angle value:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_MinimumAngle
-- threshold is floating point value (minimum angle)
-
-\tui_script{filters_ex04.py}
-
-\sa \ref tui_minimum_angle
-
-\section filter_taper Taper
-
-filters 2D mesh elements (faces) according to the taper value:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_Taper
-- threshold is floating point value (taper)
-
-\tui_script{filters_ex05.py}
-
-\sa \ref tui_taper
-
-\section filter_skew Skew
-
-filters 2D mesh elements (faces) according to the skew value:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_Skew
-- threshold is floating point value (skew)
-
-\tui_script{filters_ex06.py}
-
-\sa \ref tui_skew
-
-\section filter_area Area
-
-filters 2D mesh elements (faces) according to the area value:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_Area
-- threshold is floating point value (area)
-
-\tui_script{filters_ex07.py}
-
-\sa \ref tui_area
-
-\section filter_volume Volume
-
-filters 3D mesh elements (volumes) according to the volume value:
-- element type is \a SMESH.VOLUME
-- functor type is \a SMESH.FT_Volume3D
-- threshold is floating point value (volume)
-
-\tui_script{filters_ex08.py}
-
-\sa \ref tui_volume
-
-\section filter_free_borders Free borders
-
-filters 1D mesh elements (edges) which represent free borders of a mesh:
-- element type is \a SMESH.EDGE
-- functor type is \a SMESH.FT_FreeBorders
-- threshold value is not required
-
-\tui_script{filters_ex09.py}
-
-\sa \ref tui_free_borders
-
-\section filter_free_edges Free edges
-
-filters 2D mesh elements (faces) having edges (i.e. links between
-nodes, not mesh segments) belonging to one face of mesh only:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_FreeEdges
-- threshold value is not required
-
-\tui_script{filters_ex10.py}
-
-\sa \ref tui_free_edges
-
-\section filter_free_nodes Free nodes
-
-filters free nodes:
-- element type is \a SMESH.NODE
-- functor type is \a SMESH.FT_FreeNodes
-- threshold value is not required
-
-\tui_script{filters_ex11.py}
-
-\sa \ref tui_free_nodes
-
-\section filter_free_faces Free faces
-
-filters free faces:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_FreeFaces
-- threshold value is not required
-
-\tui_script{filters_ex12.py}
-
-\sa \ref tui_free_faces
-
-\section filter_bare_border_faces Bare border faces
-
-filters faces with bare borders:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_BareBorderFace
-- threshold value is not required
-
-\tui_script{filters_ex13.py}
-
-\sa \ref tui_bare_border_faces
-
-\section filter_coplanar_faces Coplanar faces
-
-filters coplanar faces:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_CoplanarFaces
-- threshold value is the face ID
-- tolerance is in degrees
-
-\tui_script{filters_ex14.py}
-
-\section filter_over_constrained_faces Over-constrained faces
-
-filters over-constrained faces:
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_OverConstrainedFace
-- threshold value is not required
-
-\tui_script{filters_ex15.py}
-
-\sa \ref tui_over_constrained_faces
-
-\section filter_double_elements Double edges, Double faces, Double volumes
-
-filters mesh elements basing on the same set of nodes:
-- element type is either \a SMESH.EDGE, \a SMESH.FACE or \a SMESH.VOLUME
-- functor type is either \a SMESH.FT_EqualEdges, \a
-          SMESH.FT_EqualFaces or \a SMESH.FT_EqualVolumes,
-- threshold value is not required
-
-\tui_script{filters_ex16.py}
-
-
-\section tui_double_nodes_control Double nodes
-
-filters mesh nodes which are coincident with other nodes (within a given tolerance):
-- element type is \a SMESH.NODE
-- functor type is \a SMESH.FT_EqualNodes
-- threshold value is not required
-- default tolerance is 1.0e-7
-
-\tui_script{filters_ex17.py}
-
-
-\section filter_node_nb_conn Node connectivity number
-
-filters nodes according to a number of elements of highest dimension connected to a node:
-- element type should be \a SMESH.NODE
-- functor type should be \a SMESH.FT_NodeConnectivityNumber
-- threshold is an integer value (number of elements)
-
-\tui_script{filters_node_nb_conn.py}
-
-
-\section filter_borders_multiconnection Borders at multi-connection
-
-filters 1D mesh elements (segments) according to the specified number of
-connections (faces and volumes on whose border the segment lies):
-- element type is \a SMESH.EDGE
-- functor type is \a SMESH.FT_MultiConnection
-- threshold is integer value (number of connections)
-
-\tui_script{filters_ex18.py}
-
-\sa \ref tui_borders_at_multiconnection
-
-\section filter_borders_multiconnection_2d Borders at multi-connection 2D
-
-filters 2D mesh elements (faces) with the specified maximal number of
-faces connected to a border (link between nodes, not mesh segment):
-- element type is \a SMESH.FACE
-- functor type is \a SMESH.FT_MultiConnection2D
-- threshold is integer value (number of connections)
-
-\tui_script{filters_ex19.py}
-
-\sa \ref tui_borders_at_multiconnection_2d
-
-\section filter_length Length
-
-filters 1D mesh elements (edges) according to the edge length value:
-- element type should be \a SMESH.EDGE
-- functor type should be \a SMESH.FT_Length
-- threshold is floating point value (length)
-
-\tui_script{filters_ex20.py}
-
-\sa \ref tui_length_1d
-
-\section filter_length_2d Length 2D
-
-filters 2D mesh elements (faces) according to the maximum length of its
-edges (links between nodes):
-- element type should be \a SMESH.FACE
-- functor type should be \a SMESH.FT_Length2D
-- threshold is floating point value (edge length)
-
-\tui_script{filters_ex21.py}
-
-\sa \ref tui_length_2d
-
-\section filter_max_element_length_2d Element Diameter 2D
-
-filters 2D mesh elements (faces) according to the maximum length
-of its edges and diagonals:
-- element type should be \a SMESH.FACE
-- functor type should be \a SMESH.FT_MaxElementLength2D
-- threshold is floating point value (length)
-
-\tui_script{filters_ex22.py}
-
-\sa \ref tui_max_element_length_2d
-
-\section filter_max_element_length_3d Element Diameter 3D
-
-filters 3D mesh elements (volumes) according to the maximum length
-of its edges and diagonals:
-- element type should be \a SMESH.VOLUME
-- functor type should be \a SMESH.FT_MaxElementLength3D
-- threshold is floating point value (edge/diagonal length)
-
-\tui_script{filters_ex23.py}
-
-\sa \ref tui_max_element_length_3d
-
-\section filter_bare_border_volumes Bare border volumes
-
-filters 3D mesh elements with bare borders, i.e. having a facet not
-shared with other volumes and without a face on it:
-- element type is \a SMESH.VOLUME
-- functor type is \a SMESH.FT_BareBorderVolume
-- threshold value is not required
-
-\tui_script{filters_ex24.py}
-
-\sa \ref tui_bare_border_volumes
-
-\section filter_over_constrained_volumes Over-constrained volumes
-
-filters over-constrained volumes, whose all nodes are on the mesh boundary:
-- element type is \a SMESH.VOLUME
-- functor type is \a SMESH.FT_OverConstrainedVolume
-- threshold value is not required
-
-\tui_script{filters_ex25.py}
-
-\sa \ref tui_over_constrained_faces
-
-\section filter_belong_to_group Belong to Mesh Group
-
-filters mesh entities (nodes or elements) included in a mesh group
-defined by threshold value:
-- element type can be any, from \a  SMESH.NODE to \a SMESH.BALL
-- functor type should be \a SMESH.FT_BelongToMeshGroup
-- threshold is mesh group object
-
-\tui_script{filters_belong2group.py}
-
-\section filter_belong_to_geom Belong to Geom
-
-filters mesh entities (nodes or elements) which all nodes lie on the
-shape defined by threshold value:
-- element type can be any, from \a  SMESH.NODE to \a SMESH.BALL
-- functor type should be \a SMESH.FT_BelongToGeom
-- threshold is geometrical object
-- tolerance is a distance between a node and the geometrical object;
-it is used if an node is not associated to any geometry.
-
-\tui_script{filters_ex26.py}
-
-\section filter_lying_on_geom Lying on Geom
-
-filters mesh entities (nodes or elements) at least one node of which lies on the
-shape defined by threshold value:
-- element type can be any, from \a  SMESH.NODE to \a SMESH.BALL
-- functor type should be \a SMESH.FT_LyingOnGeom
-- threshold is geometrical object
-- tolerance is a distance between a node and the geometrical object;
-it is used if an node is not associated to any geometry.
-
-\tui_script{filters_ex27.py}
-
-\section filter_belong_to_plane Belong to Plane
-
-filters mesh entities (nodes or elements) which all nodes belong to the
-plane defined by threshold value with the given tolerance:
-- element type can be any except \a  SMESH.VOLUME
-- functor type should be \a SMESH.FT_BelongToPlane
-- threshold is geometrical object (plane)
-- default tolerance is 1.0e-7
-
-\tui_script{filters_ex28.py}
-
-\section filter_belong_to_cylinder Belong to Cylinder
-
-filters mesh entities (nodes or elements) which all nodes belong to the
-cylindrical face defined by threshold value with the given tolerance:
-- element type can be any except \a  SMESH.VOLUME
-- functor type should be \a SMESH.FT_BelongToCylinder
-- threshold is geometrical object (cylindrical face)
-- default tolerance is 1.0e-7
-
-\tui_script{filters_ex29.py}
-
-\section filter_belong_to_surface Belong to Surface
-
-filters mesh entities (nodes or elements) which all nodes belong to the
-arbitrary surface defined by threshold value with the given tolerance:
-- element type can be any except \a  SMESH.VOLUME
-- functor type should be \a SMESH.FT_BelongToGenSurface
-- threshold is geometrical object (arbitrary surface)
-- default tolerance is 1.0e-7
-
-\tui_script{filters_ex30.py}
-
-\section filter_range_of_ids Range of IDs
-
-filters mesh entities elements (nodes or elements) according to the
-specified identifiers range:
-- element type can be any, from \a  SMESH.NODE to \a SMESH.BALL
-- functor type is \a SMESH.FT_RangeOfIds
-- threshold is string listing required IDs and/or ranges of IDs, e.g."1,2,3,50-60,63,67,70-78" 
-
-\tui_script{filters_ex31.py}
-
-\section filter_bad_oriented_volume Badly oriented volume
-
-filters 3D mesh elements (volumes), which are incorrectly oriented from
-the point of view of MED convention. 
-- element type should be \a SMESH.VOLUME
-- functor type is \a SMESH.FT_BadOrientedVolume
-- threshold is not required
-
-\tui_script{filters_ex32.py}
-
-\section filter_linear_or_quadratic Linear / quadratic
-
-filters linear / quadratic mesh elements:
-- element type should be either \a SMESH.EDGE, \a SMESH.FACE or \a SMESH.VOLUME
-- functor type is \a SMESH.FT_LinearOrQuadratic
-- threshold is not required
-- if unary operator is set to SMESH.FT_LogicalNOT, the quadratic
-elements are selected, otherwise (by default) linear elements are selected
-
-\tui_script{filters_ex33.py}
-
-\section filter_group_color Group color
-
-filters mesh entities, belonging to the group with the color defined by the threshold value.
-- element type can be any, from \a  SMESH.NODE to \a SMESH.BALL
-- functor type is \a SMESH.FT_GroupColor
-- threshold should be of SALOMEDS.Color type
-
-\tui_script{filters_ex34.py}
-
-\section filter_geom_type Geometry type
-
-filters mesh elements by the geometric type defined with the threshold
-value. The list of available geometric types depends on the element
-entity type.
-- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
-- functor type should be \a SMESH.FT_ElemGeomType
-- threshold is either of smesh.GeometryType values. Type \a SMESH.GeometryType._items in the Python Console to see all geometric types.
-
-\tui_script{filters_ex35.py}
-
-\section filter_entity_type Entity type
-
-filters mesh elements by the geometric type and number of nodes. 
-- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
-- functor type should be \a SMESH.FT_EntityType
-- threshold is either of SMESH.EntityType values. Type \a SMESH.EntityType._items in the Python Console to see all entity types.
-
-\tui_script{filters_ex37.py}
-
-\section filter_ball_diam Ball diameter
-
-filters ball elements by diameter. 
-- element type should be \a SMESH.BALL
-- functor type should be \a SMESH.FT_BallDiameter
-- threshold is floating point value (ball diameter)
-
-\tui_script{filters_ex38.py}
-
-\section filter_domain Elements of a domain
-
-filters elements of a specified domain. 
-- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
-- functor type should be \a SMESH.FT_ConnectedElements
-- threshold is either (1) node ID or (2)  geometrical vertex or (3) 3 coordinates of a point.
-
-\tui_script{filters_ex39.py}
-
-\section combining_filters How to combine several criteria into a filter?
-
-Several criteria can be combined into a filter.
-
-Example :
-
-\tui_script{filters_ex36.py}
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_filters.rst b/doc/salome/gui/SMESH/input/tui_filters.rst
new file mode 100644 (file)
index 0000000..ac88a34
--- /dev/null
@@ -0,0 +1,790 @@
+.. _tui_filters_page:
+
+*************
+Filters usage
+*************
+
+Filters allow picking only the mesh elements satisfying to a
+specific condition or a set of conditions. Filters can be used to create
+or edit mesh groups, remove elements from the mesh, control
+mesh quality by different parameters, etc.
+
+Several filtering criteria can be combined together by using logical
+operators *AND* and *OR*. In addition, a filtering criterion can
+be reverted using logical operator *NOT*.
+
+Mesh filters can use the functionality of mesh quality controls to filter
+mesh nodes / elements by a specific characteristic (Area, Length, etc).
+
+This page provides a short description of the existing mesh filters,
+describes required parameters and gives simple examples of usage in
+Python scripts.
+
+**See also:** :ref:`tui_quality_controls_page`
+
+.. contents:: `Table of contents`
+
+
+.. _filter_aspect_ratio:
+
+Aspect ratio
+============
+
+filters 2D mesh elements (faces) according to the aspect ratio value:
+
+* element type should be *SMESH.FACE*
+* functor type should be *SMESH.FT_AspectRatio*
+* threshold is floating point value (aspect ratio)
+
+.. literalinclude:: ../../../examples/filters_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex01.py>`
+
+**See also:** :ref:`tui_aspect_ratio`
+
+.. _filter_aspect_ratio_3d:
+
+Aspect ratio 3D
+===============
+
+filters 3D mesh elements (volumes) according to the aspect ratio value:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_AspectRatio3D*
+* threshold is floating point value (aspect ratio)
+
+.. literalinclude:: ../../../examples/filters_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex02.py>`
+
+**See also:** :ref:`tui_aspect_ratio_3d`
+
+.. _filter_warping_angle:
+
+Warping angle
+=============
+
+filters 2D mesh elements (faces) according to the warping angle value:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_Warping*
+* threshold is floating point value (warping angle)
+
+.. literalinclude:: ../../../examples/filters_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex03.py>`
+
+**See also:** :ref:`tui_warping`
+
+.. _filter_minimum_angle:
+
+Minimum angle
+=============
+
+filters 2D mesh elements (faces) according to the minimum angle value:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_MinimumAngle*
+* threshold is floating point value (minimum angle)
+
+.. literalinclude:: ../../../examples/filters_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex04.py>`
+
+**See also:** :ref:`tui_minimum_angle`
+
+.. _filter_taper: 
+
+Taper
+=====
+
+filters 2D mesh elements (faces) according to the taper value:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_Taper*
+* threshold is floating point value (taper)
+
+.. literalinclude:: ../../../examples/filters_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex05.py>`
+
+**See also:** :ref:`tui_taper`
+
+.. _filter_skew: 
+
+Skew
+====
+
+filters 2D mesh elements (faces) according to the skew value:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_Skew*
+* threshold is floating point value (skew)
+
+.. literalinclude:: ../../../examples/filters_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex06.py>`
+
+**See also:** :ref:`tui_skew`
+
+.. _filter_area: 
+
+Area
+====
+
+filters 2D mesh elements (faces) according to the area value:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_Area*
+* threshold is floating point value (area)
+
+.. literalinclude:: ../../../examples/filters_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex07.py>`
+
+**See also:** :ref:`tui_area`
+
+.. _filter_volume: 
+
+Volume
+======
+
+filters 3D mesh elements (volumes) according to the volume value:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_Volume3D*
+* threshold is floating point value (volume)
+
+.. literalinclude:: ../../../examples/filters_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex08.py>`
+
+**See also:** :ref:`tui_volume`
+
+.. _filter_free_borders:
+
+Free borders
+============
+
+filters 1D mesh elements (edges) which represent free borders of a mesh:
+
+* element type is *SMESH.EDGE*
+* functor type is *SMESH.FT_FreeBorders*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex09.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex09.py>`
+
+**See also:** :ref:`tui_free_borders`
+
+.. _filter_free_edges:
+
+Free edges
+==========
+
+filters 2D mesh elements (faces) having edges (i.e. links between
+nodes, not mesh segments) belonging to one face of mesh only:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_FreeEdges*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex10.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex10.py>`
+
+**See also:** :ref:`tui_free_edges`
+
+.. _filter_free_nodes:
+
+Free nodes
+==========
+
+filters free nodes:
+
+* element type is *SMESH.NODE*
+* functor type is *SMESH.FT_FreeNodes*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex11.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex11.py>`
+
+**See also:** :ref:`tui_free_nodes`
+
+.. _filter_free_faces: 
+
+Free faces
+==========
+
+filters free faces:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_FreeFaces*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex12.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex12.py>`
+
+**See also:** :ref:`tui_free_faces`
+
+.. _filter_bare_border_faces: 
+
+Bare border faces
+=================
+
+filters faces with bare borders:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_BareBorderFace*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex13.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex13.py>`
+
+**See also:** :ref:`tui_bare_border_faces`
+
+.. _filter_coplanar_faces:
+
+Coplanar faces
+==============
+
+filters coplanar faces:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_CoplanarFaces*
+* threshold value is the face ID
+* tolerance is in degrees
+
+.. literalinclude:: ../../../examples/filters_ex14.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex14.py>`
+
+.. _filter_over_constrained_faces: 
+
+Over-constrained faces
+======================
+
+filters over-constrained faces:
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_OverConstrainedFace*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex15.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex15.py>`
+
+**See also:** :ref:`tui_over_constrained_faces`
+
+.. _filter_double_elements: 
+
+Double edges, Double faces, Double volumes
+##########################################
+
+filters mesh elements basing on the same set of nodes:
+
+* element type is either *SMESH.EGDE*, *SMESH.FACE* or *SMESH.VOLUME*
+* functor type is either *SMESH.FT_EqualEdges*, *SMESH.FT_EqualFaces* or *SMESH.FT_EqualVolumes*,
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex16.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex16.py>`
+
+.. _tui_double_nodes_control: 
+
+Double nodes
+============
+
+filters mesh nodes which are coincident with other nodes (within a given tolerance):
+
+* element type is *SMESH.NODE*
+* functor type is *SMESH.FT_EqualNodes*
+* threshold value is not required
+* default tolerance is 1.0e-7
+
+.. literalinclude:: ../../../examples/filters_ex17.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex17.py>`
+
+.. _filter_node_nb_conn:
+
+Node connectivity number
+========================
+
+filters nodes according to a number of elements of highest dimension connected to a node:
+
+* element type should be *SMESH.NODE*
+* functor type should be *SMESH.FT_NodeConnectivityNumber*
+* threshold is an integer value (number of elements)
+
+.. literalinclude:: ../../../examples/filters_node_nb_conn.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_node_nb_conn.py>`
+
+.. _filter_borders_multiconnection: 
+
+Borders at multi-connection
+===========================
+
+filters 1D mesh elements (segments) according to the specified number of
+connections (faces and volumes on whose border the segment lies):
+
+* element type is *SMESH.EDGE*
+* functor type is *SMESH.FT_MultiConnection*
+* threshold is integer value (number of connections)
+
+.. literalinclude:: ../../../examples/filters_ex18.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex18.py>`
+
+**See also:** :ref:`tui_borders_at_multiconnection`
+
+.. _filter_borders_multiconnection_2d: 
+
+Borders at multi-connection 2D
+==============================
+
+filters 2D mesh elements (faces) with the specified maximal number of
+faces connected to a border (link between nodes, not mesh segment):
+
+* element type is *SMESH.FACE*
+* functor type is *SMESH.FT_MultiConnection2D*
+* threshold is integer value (number of connections)
+
+.. literalinclude:: ../../../examples/filters_ex19.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex19.py>`
+
+**See also:** :ref:`tui_borders_at_multiconnection_2d`
+
+.. _filter_length: 
+
+Length
+======
+
+filters 1D mesh elements (edges) according to the edge length value:
+
+* element type should be *SMESH.EDGE*
+* functor type should be *SMESH.FT_Length*
+* threshold is floating point value (length)
+
+.. literalinclude:: ../../../examples/filters_ex20.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex20.py>`
+
+**See also:** :ref:`tui_length_1d`
+
+.. _filter_length_2d: 
+
+Length 2D
+=========
+
+filters 2D mesh elements (faces) according to the maximum length of its
+edges (links between nodes):
+
+* element type should be *SMESH.FACE*
+* functor type should be *SMESH.FT_Length2D*
+* threshold is floating point value (edge length)
+
+.. literalinclude:: ../../../examples/filters_ex21.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex21.py>`
+
+**See also:** :ref:`tui_length_2d`
+
+.. _filter_max_element_length_2d: 
+
+Element Diameter 2D
+===================
+
+filters 2D mesh elements (faces) according to the maximum length
+of its edges and diagonals:
+
+* element type should be *SMESH.FACE*
+* functor type should be *SMESH.FT_MaxElementLength2D*
+* threshold is floating point value (length)
+
+.. literalinclude:: ../../../examples/filters_ex22.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex22.py>`
+
+**See also:** :ref:`tui_max_element_length_2d`
+
+.. _filter_max_element_length_3d: 
+
+Element Diameter 3D
+===================
+
+filters 3D mesh elements (volumes) according to the maximum length
+of its edges and diagonals:
+
+* element type should be *SMESH.VOLUME*
+* functor type should be *SMESH.FT_MaxElementLength3D*
+* threshold is floating point value (edge/diagonal length)
+
+.. literalinclude:: ../../../examples/filters_ex23.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex23.py>`
+
+**See also:** :ref:`tui_max_element_length_3d`
+
+.. _filter_bare_border_volumes: 
+
+Bare border volumes
+===================
+
+filters 3D mesh elements with bare borders, i.e. having a facet not
+shared with other volumes and without a face on it:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_BareBorderVolume*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex24.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex24.py>`
+
+**See also:** :ref:`tui_bare_border_volumes`
+
+.. _filter_over_constrained_volumes: 
+
+Over-constrained volumes
+========================
+
+filters over-constrained volumes, whose all nodes are on the mesh boundary:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_OverConstrainedVolume*
+* threshold value is not required
+
+.. literalinclude:: ../../../examples/filters_ex25.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex25.py>`
+
+**See also:** :ref:`tui_over_constrained_faces`
+
+.. _filter_belong_to_group: 
+
+Belong to Mesh Group
+====================
+
+filters mesh entities (nodes or elements) included in a mesh group
+defined by threshold value:
+
+* element type can be any, from *SMESH.NODE* to *SMESH.BALL*
+* functor type should be *SMESH.FT_BelongToMeshGroup*
+* threshold is mesh group object
+
+.. literalinclude:: ../../../examples/filters_belong2group.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_belong2group.py>`
+
+.. _filter_belong_to_geom: 
+
+Belong to Geom
+==============
+
+filters mesh entities (nodes or elements) which all nodes lie on the
+shape defined by threshold value:
+
+* element type can be any, from *SMESH.NODE* to *SMESH.BALL*
+* functor type should be *SMESH.FT_BelongToGeom*
+* threshold is geometrical object
+* tolerance is a distance between a node and the geometrical object; it is used if an node is not associated to any geometry.
+
+.. literalinclude:: ../../../examples/filters_ex26.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex26.py>`
+
+.. _filter_lying_on_geom:
+
+Lying on Geom
+=============
+
+filters mesh entities (nodes or elements) at least one node of which lies on the
+shape defined by threshold value:
+
+* element type can be any, from *SMESH.NODE* to *SMESH.BALL*
+* functor type should be *SMESH.FT_LyingOnGeom*
+* threshold is geometrical object
+* tolerance is a distance between a node and the geometrical object;
+
+it is used if an node is not associated to any geometry.
+
+.. literalinclude:: ../../../examples/filters_ex27.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex27.py>`
+
+.. _filter_belong_to_plane: 
+
+Belong to Plane
+===============
+
+filters mesh entities (nodes or elements) which all nodes belong to the
+plane defined by threshold value with the given tolerance:
+
+* element type can be any except *SMESH.VOLUME*
+* functor type should be *SMESH.FT_BelongToPlane*
+* threshold is geometrical object (plane)
+* default tolerance is 1.0e-7
+
+.. literalinclude:: ../../../examples/filters_ex28.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex28.py>`
+
+.. _filter_belong_to_cylinder: 
+
+Belong to Cylinder
+==================
+
+filters mesh entities (nodes or elements) which all nodes belong to the
+cylindrical face defined by threshold value with the given tolerance:
+
+* element type can be any except *SMESH.VOLUME*
+* functor type should be *SMESH.FT_BelongToCylinder*
+* threshold is geometrical object (cylindrical face)
+* default tolerance is 1.0e-7
+
+.. literalinclude:: ../../../examples/filters_ex29.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex29.py>`
+
+.. _filter_belong_to_surface: 
+
+Belong to Surface
+=================
+
+filters mesh entities (nodes or elements) which all nodes belong to the
+arbitrary surface defined by threshold value with the given tolerance:
+
+* element type can be any except *SMESH.VOLUME*
+* functor type should be *SMESH.FT_BelongToGenSurface*
+* threshold is geometrical object (arbitrary surface)
+* default tolerance is 1.0e-7
+
+.. literalinclude:: ../../../examples/filters_ex30.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex30.py>`
+
+.. _filter_range_of_ids: 
+
+Range of IDs
+============
+
+filters mesh entities elements (nodes or elements) according to the
+specified identifiers range:
+
+* element type can be any, from *SMESH.NODE* to *SMESH.BALL*
+* functor type is *SMESH.FT_RangeOfIds*
+* threshold is string listing required IDs and/or ranges of IDs, e.g."1,2,3,50-60,63,67,70-78"
+
+.. literalinclude:: ../../../examples/filters_ex31.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex31.py>`
+
+.. _filter_bad_oriented_volume:
+
+Badly oriented volume
+=====================
+
+filters 3D mesh elements (volumes), which are incorrectly oriented from
+the point of view of MED convention. 
+
+* element type should be *SMESH.VOLUME*
+* functor type is *SMESH.FT_BadOrientedVolume*
+* threshold is not required
+
+.. literalinclude:: ../../../examples/filters_ex32.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex32.py>`
+
+.. _filter_linear_or_quadratic: 
+
+Linear / quadratic
+==================
+
+filters linear / quadratic mesh elements:
+
+* element type should be either *SMESH.EDGE*, *SMESH.FACE* or *SMESH.VOLUME*
+* functor type is *SMESH.FT_LinearOrQuadratic*
+* threshold is not required
+* if unary operator is set to SMESH.FT_LogicalNOT, the quadratic elements are selected, otherwise (by default) linear elements are selected
+
+.. literalinclude:: ../../../examples/filters_ex33.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex33.py>`
+
+.. _filter_group_color: 
+
+Group color
+===========
+
+filters mesh entities, belonging to the group with the color defined by the threshold value.
+
+* element type can be any, from *SMESH.NODE* to *SMESH.BALL*
+* functor type is *SMESH.FT_GroupColor*
+* threshold should be of SALOMEDS.Color type
+
+.. literalinclude:: ../../../examples/filters_ex34.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex34.py>`
+
+.. _filter_geom_type: 
+
+Geometry type
+=============
+
+filters mesh elements by the geometric type defined with the threshold
+value. The list of available geometric types depends on the element
+entity type.
+
+* element type can be any, e.g.: *SMESH.EDGE*, *SMESH.FACE*, *SMESH.VOLUME*, etc.
+* functor type should be *SMESH.FT_ElemGeomType*
+* threshold is either of smesh.GeometryType values. Type *SMESH.GeometryType._items* in the Python Console to see all geometric types.
+
+.. literalinclude:: ../../../examples/filters_ex35.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex35.py>`
+
+.. _filter_entity_type: 
+
+Entity type
+===========
+
+filters mesh elements by the geometric type and number of nodes. 
+
+* element type can be any, e.g.: *SMESH.EDGE*, *SMESH.FACE*, *SMESH.VOLUME*, etc.
+* functor type should be *SMESH.FT_EntityType*
+* threshold is either of SMESH.EntityType values. Type *SMESH.EntityType._items* in the Python Console to see all entity types.
+
+.. literalinclude:: ../../../examples/filters_ex37.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex37.py>`
+
+.. _filter_ball_diam: 
+
+Ball diameter
+=============
+
+filters ball elements by diameter. 
+
+* element type should be *SMESH.BALL*
+* functor type should be *SMESH.FT_BallDiameter*
+* threshold is floating point value (ball diameter)
+
+.. literalinclude:: ../../../examples/filters_ex38.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex38.py>`
+
+.. _filter_domain: 
+
+Elements of a domain
+====================
+
+filters elements of a specified domain. 
+
+* element type can be any, e.g.: *SMESH.EDGE*, *SMESH.FACE*, *SMESH.VOLUME*, etc.
+* functor type should be *SMESH.FT_ConnectedElements*
+* threshold is either (1) node ID or (2)  geometrical vertex or (3) 3 coordinates of a point.
+
+.. literalinclude:: ../../../examples/filters_ex39.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex39.py>`
+
+.. _combining_filters: 
+
+How to combine several criteria into a filter?
+==============================================
+
+Several criteria can be combined into a filter.
+
+.. literalinclude:: ../../../examples/filters_ex36.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/filters_ex36.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_generate_flat_elements.doc b/doc/salome/gui/SMESH/input/tui_generate_flat_elements.doc
deleted file mode 100644 (file)
index 03f0141..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-
-\page tui_generate_flat_elements_page Generate flat elements
-
-<br>
-\anchor tui_double_nodes_on_group_boundaries
-<h2>Double nodes on groups boundaries</h2>
-
-\n Double nodes on shared faces between groups of volumes and create flat elements on demand.
-\n The list of groups must contain at least two groups. The groups have to be disjoint: no common element into two different groups.
-\n The nodes of the internal faces at the boundaries of the groups are doubled. Optionally, the internal faces are replaced
-by flat elements.
-\n Triangles are transformed into prisms, and quadrangles into hexahedrons.
-\n The flat elements are stored in groups of volumes.
-These groups are named according to the position of the group in the list:
-the group j_n_p is the group of the flat elements that are built between the group \#n and the group \#p in the list.
-If there is no shared faces between the group \#n and the group \#p in the list, the group j_n_p is not created.
-All the flat elements are gathered into the group named "joints3D" (or "joints2D" in 2D situation).
-The flat element of the multiple junctions between the simple junction are stored in a group named "jointsMultiples".
-
-\n
-\n This example represents an iron cable (a thin cylinder) in a concrete bloc (a big cylinder).
-The big cylinder is defined by two geometric volumes.
-
-\tui_script{generate_flat_elements.py}
-
-\n Here, the 4 groups of volumes [Solid_1_1, Solid_2_1, Solid_3_1, Solid_4_1] constitute a partition of the mesh.
-The flat elements on group boundaries and on faces are built with the
-2 last lines of the code above.
-\n If the last argument (Boolean) in DoubleNodesOnGroupBoundaries is set to 1,
-the flat elements are built, otherwise, there is only a duplication of the nodes.
-
-\n To observe flat element groups, save the resulting mesh on a MED file and reload it.
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst b/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst
new file mode 100644 (file)
index 0000000..6a6790e
--- /dev/null
@@ -0,0 +1,47 @@
+.. _tui_generate_flat_elements_page: 
+
+**********************
+Generate flat elements
+**********************
+
+
+.. _tui_double_nodes_on_group_boundaries:
+
+Double nodes on groups boundaries
+#################################
+
+Double nodes on shared faces between groups of volumes and create flat elements on demand.
+
+The list of groups must contain at least two groups. The groups have to be disjoint: no common element into two different groups.
+
+The nodes of the internal faces at the boundaries of the groups are doubled. Optionally, the internal faces are replaced by flat elements.
+
+Triangles are transformed into prisms, and quadrangles into hexahedrons.
+
+The flat elements are stored in groups of volumes.
+
+These groups are named according to the position of the group in the list:
+the group j_n_p is the group of the flat elements that are built between the group \#n and the group \#p in the list.
+If there is no shared faces between the group \#n and the group \#p in the list, the group j_n_p is not created.
+All the flat elements are gathered into the group named "joints3D" (or "joints2D" in 2D situation).
+The flat element of the multiple junctions between the simple junction are stored in a group named "jointsMultiples".
+
+This example represents an iron cable (a thin cylinder) in a concrete bloc (a big cylinder).
+The big cylinder is defined by two geometric volumes.
+
+.. literalinclude:: ../../../examples/generate_flat_elements.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/generate_flat_elements.py>`
+
+Here, the 4 groups of volumes [Solid_1_1, Solid_2_1, Solid_3_1, Solid_4_1] constitute a partition of the mesh.
+The flat elements on group boundaries and on faces are built with the
+2 last lines of the code above.
+
+If the last argument (Boolean) in DoubleNodesOnGroupBoundaries is set to 1,
+the flat elements are built, otherwise, there is only a duplication of the nodes.
+
+To observe flat element groups, save the resulting mesh on a MED file and reload it.
+
+
diff --git a/doc/salome/gui/SMESH/input/tui_grouping_elements.doc b/doc/salome/gui/SMESH/input/tui_grouping_elements.doc
deleted file mode 100644 (file)
index 87a7073..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-
-\page tui_grouping_elements_page Grouping Elements
-
-\tableofcontents
-
-<br>
-\section tui_create_standalone_group Create a Standalone Group
-\tui_script{grouping_elements_ex01.py}
-
-\image html create_group.png
-
-<br>
-\section tui_create_group_on_geometry Create a Group on Geometry
-\tui_script{grouping_elements_ex02.py}
-
-<br>
-\section tui_create_group_on_filter Create a Group on Filter
-\tui_script{grouping_elements_ex03.py}
-
-<br>
-\section tui_edit_group Edit a Group
-\tui_script{grouping_elements_ex04.py}
-
-\image html editing_groups1.png
-
-<br>
-\section tui_union_of_groups Union of groups
-\tui_script{grouping_elements_ex05.py}
-
-\image html union_groups1.png
-
-<br>
-\section tui_intersection_of_groups Intersection of groups
-\tui_script{grouping_elements_ex06.py}
-
-\image html intersect_groups1.png
-
-<br>
-\section tui_cut_of_groups Cut of groups
-\tui_script{grouping_elements_ex07.py}
-
-\image html cut_groups1.png
-
-<br>
-\section tui_create_dim_group Creating groups of entities basing on nodes of other groups
-\tui_script{grouping_elements_ex08.py}
-
-\image html dimgroup_tui1.png
-
-
-
-
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_grouping_elements.rst b/doc/salome/gui/SMESH/input/tui_grouping_elements.rst
new file mode 100644 (file)
index 0000000..1f4dffe
--- /dev/null
@@ -0,0 +1,125 @@
+.. _tui_grouping_elements_page:
+
+*****************
+Grouping Elements
+*****************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_create_standalone_group: 
+
+Create a Standalone Group
+=========================
+
+.. literalinclude:: ../../../examples/grouping_elements_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex01.py>`
+
+.. image:: ../images/create_group.png
+       :align: center
+
+
+.. _tui_create_group_on_geometry: 
+
+Create a Group on Geometry
+==========================
+
+.. literalinclude:: ../../../examples/grouping_elements_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex02.py>`
+
+.. _tui_create_group_on_filter: 
+
+Create a Group on Filter
+========================
+
+.. literalinclude:: ../../../examples/grouping_elements_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex03.py>`
+
+.. _tui_edit_group: 
+
+Edit a Group
+============
+
+.. literalinclude:: ../../../examples/grouping_elements_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex04.py>`
+
+.. image:: ../images/editing_groups1.png
+       :align: center
+
+
+.. _tui_union_of_groups: 
+
+Union of groups
+===============
+
+.. literalinclude:: ../../../examples/grouping_elements_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex05.py>`
+
+.. image:: ../images/union_groups1.png
+       :align: center
+
+
+.. _tui_intersection_of_groups: 
+
+Intersection of groups
+======================
+
+.. literalinclude:: ../../../examples/grouping_elements_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex06.py>`
+
+.. image:: ../images/intersect_groups1.png
+       :align: center
+
+
+.. _tui_cut_of_groups: 
+
+Cut of groups
+=============
+
+.. literalinclude:: ../../../examples/grouping_elements_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex07.py>`
+
+.. image:: ../images/cut_groups1.png
+       :align: center
+
+
+.. _tui_create_dim_group: 
+
+Creating groups of entities basing on nodes of other groups
+===========================================================
+
+.. literalinclude:: ../../../examples/grouping_elements_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/grouping_elements_ex08.py>`
+
+.. image:: ../images/dimgroup_tui1.png
+       :align: center
+
+
+
+
+
+
diff --git a/doc/salome/gui/SMESH/input/tui_measurements.doc b/doc/salome/gui/SMESH/input/tui_measurements.doc
deleted file mode 100644 (file)
index 950cc2a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
-
-\page tui_measurements_page Measurements
-
-\section tui_min_distance Minimum Distance
-\tui_script{measurements_ex01.py}
-
-\section tui_bounding_box Bounding Box
-\tui_script{measurements_ex02.py}
-
-\section tui_bounding_box Basic Properties
-\tui_script{measurements_ex03.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_measurements.rst b/doc/salome/gui/SMESH/input/tui_measurements.rst
new file mode 100644 (file)
index 0000000..06eb255
--- /dev/null
@@ -0,0 +1,38 @@
+.. _tui_measurements_page: 
+
+************
+Measurements
+************
+
+.. _tui_min_distance: 
+
+Minimum Distance
+================
+
+.. literalinclude:: ../../../examples/measurements_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/measurements_ex01.py>`
+
+.. _tui_bounding_box: 
+
+Bounding Box
+============
+
+.. literalinclude:: ../../../examples/measurements_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/measurements_ex02.py>`
+
+.. _tui_basic_properties: 
+
+Basic Properties
+================
+
+.. literalinclude:: ../../../examples/measurements_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/measurements_ex03.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc
deleted file mode 100644 (file)
index a8ca5c9..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*!
-
-\page tui_modifying_meshes_page Modifying Meshes
-
-\tableofcontents
-
-<br>
-\section tui_adding_nodes_and_elements Adding Nodes and Elements
-
-<br>
-\anchor tui_add_node
-<h3>Add Node</h3>
-\tui_script{modifying_meshes_ex01.py}
-
-<br>
-\anchor tui_add_0DElement
-<h3>Add 0D Element</h3>
-\tui_script{modifying_meshes_ex02.py}
-
-<br>
-\anchor tui_add_0DElement_on_all_nodes
-<h3>Add 0D Element on Element Nodes</h3>
-\tui_script{modifying_meshes_ex03.py}
-
-<br>
-\anchor tui_add_edge
-<h3>Add Edge</h3>
-\tui_script{modifying_meshes_ex04.py}
-
-<br>
-\anchor tui_add_triangle
-<h3>Add Triangle</h3>
-\tui_script{modifying_meshes_ex05.py}
-
-<br>
-\anchor tui_add_quadrangle
-<h3>Add Quadrangle</h3>
-\tui_script{modifying_meshes_ex06.py}
-
-<br>
-\anchor tui_add_tetrahedron
-<h3>Add Tetrahedron</h3>
-\tui_script{modifying_meshes_ex07.py}
-
-<br>
-\anchor tui_add_hexahedron
-<h3>Add Hexahedron</h3>
-\tui_script{modifying_meshes_ex08.py}
-
-<br>
-\anchor tui_add_polygon
-<h3>Add Polygon</h3>
-\tui_script{modifying_meshes_ex09.py}
-
-<br>
-\anchor tui_add_polyhedron
-<h3>Add Polyhedron</h3>
-\tui_script{modifying_meshes_ex10.py}
-
-<br>
-\section tui_removing_nodes_and_elements Removing Nodes and Elements
-
-<br>
-\anchor tui_removing_nodes
-<h3>Removing Nodes</h3>
-\tui_script{modifying_meshes_ex11.py}
-
-<br>
-\anchor tui_removing_elements
-<h3>Removing Elements</h3>
-\tui_script{modifying_meshes_ex12.py}
-
-<br>
-\anchor tui_removing_orphan_nodes
-<h3>Removing Orphan Nodes</h3>
-\tui_script{modifying_meshes_ex13.py}
-
-<br>
-\section tui_moving_nodes Moving Nodes
-\tui_script{modifying_meshes_ex15.py}
-
-<br>
-\section tui_diagonal_inversion Diagonal Inversion
-\tui_script{modifying_meshes_ex16.py}
-
-<br>
-\section tui_uniting_two_triangles Uniting two Triangles
-\tui_script{modifying_meshes_ex17.py}
-
-<br>
-\section tui_uniting_set_of_triangles Uniting a Set of Triangles
-\tui_script{modifying_meshes_ex18.py}
-
-<br>
-\section tui_orientation Orientation
-\tui_script{modifying_meshes_ex19.py}
-
-<br>
-\section tui_cutting_quadrangles Cutting Quadrangles
-\tui_script{modifying_meshes_ex20.py}
-
-<br>
-\section tui_smoothing Smoothing
-\tui_script{modifying_meshes_ex21.py}
-
-<br>
-\section tui_extrusion Extrusion
-\tui_script{modifying_meshes_ex22.py}
-
-<br>
-\section tui_extrusion_along_path Extrusion along a Path
-\tui_script{modifying_meshes_ex23.py}
-
-<br>
-\section tui_revolution Revolution
-\tui_script{modifying_meshes_ex24.py}
-
-<br>
-\section tui_pattern_mapping Pattern Mapping
-\tui_script{modifying_meshes_ex25.py}
-
-<br>
-\section tui_quadratic Convert mesh to/from quadratic
-\tui_script{modifying_meshes_ex26.py}
-
-<br>
-\section tui_split_biquad Split bi-quadratic into linear
-\tui_script{split_biquad.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst b/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst
new file mode 100644 (file)
index 0000000..25783ad
--- /dev/null
@@ -0,0 +1,315 @@
+.. _tui_modifying_meshes_page: 
+
+****************
+Modifying Meshes
+****************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_adding_nodes_and_elements: 
+
+Adding Nodes and Elements
+=========================
+
+.. _tui_add_node:
+
+Add Node
+********
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex01.py>`
+
+.. _tui_add_0DElement:
+
+Add 0D Element
+**************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex02.py>`
+
+.. _tui_add_0DElement_on_all_nodes:
+
+Add 0D Element on Element Nodes
+*******************************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex03.py>`
+
+.. _tui_add_edge:
+
+Add Edge
+********
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex04.py>`
+
+.. _tui_add_triangle:
+
+Add Triangle
+************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex05.py>`
+
+.. _tui_add_quadrangle:
+
+Add Quadrangle
+**************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex06.py>`
+
+.. _tui_add_tetrahedron:
+
+Add Tetrahedron
+***************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex07.py>`
+
+.. _tui_add_hexahedron:
+
+Add Hexahedron
+**************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex08.py>`
+
+.. _tui_add_polygon:
+
+Add Polygon
+***********
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex09.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex09.py>`
+
+.. _tui_add_polyhedron:
+
+Add Polyhedron
+**************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex10.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex10.py>`
+
+.. _tui_removing_nodes_and_elements: 
+
+Removing Nodes and Elements
+===========================
+
+.. _tui_removing_nodes:
+
+Removing Nodes
+**************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex11.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex11.py>`
+
+.. _tui_removing_elements:
+
+Removing Elements
+*****************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex12.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex12.py>`
+
+.. _tui_removing_orphan_nodes:
+
+Removing Orphan Nodes
+*********************
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex13.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex13.py>`
+
+.. _tui_moving_nodes: 
+
+Moving Nodes
+============
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex15.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex15.py>`
+
+.. _tui_diagonal_inversion: 
+
+Diagonal Inversion
+==================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex16.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex16.py>`
+
+.. _tui_uniting_two_triangles:
+
+Uniting two Triangles
+=====================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex17.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex17.py>`
+
+.. _tui_uniting_set_of_triangles:
+
+Uniting a Set of Triangles
+==========================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex18.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex18.py>`
+
+.. _tui_orientation: 
+
+Orientation
+===========
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex19.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex19.py>`
+
+.. _tui_cutting_quadrangles: 
+
+Cutting Quadrangles
+===================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex20.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex20.py>`
+
+.. _modifying_meshes_split_vol: 
+
+Split Volumes into Tetrahedra
+=============================
+
+.. literalinclude:: ../../../examples/modifying_meshes_split_vol.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_split_vol.py>`
+
+.. _tui_smoothing: 
+
+Smoothing
+=========
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex21.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex21.py>`
+
+.. _tui_extrusion: 
+
+Extrusion
+=========
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex22.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex22.py>`
+
+.. _tui_extrusion_along_path: 
+
+Extrusion along a Path
+======================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex23.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex23.py>`
+
+.. _tui_revolution: 
+
+Revolution
+==========
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex24.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex24.py>`
+
+.. _tui_pattern_mapping: 
+
+Pattern Mapping
+===============
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex25.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex25.py>`
+
+.. _tui_quadratic: 
+
+Convert mesh to/from quadratic
+==============================
+
+.. literalinclude:: ../../../examples/modifying_meshes_ex26.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/modifying_meshes_ex26.py>`
+
+.. _tui_split_biquad: 
+
+Split bi-quadratic into linear
+==============================
+
+.. literalinclude:: ../../../examples/split_biquad.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/split_biquad.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_notebook_smesh.doc b/doc/salome/gui/SMESH/input/tui_notebook_smesh.doc
deleted file mode 100644 (file)
index 7f34dec..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
-
-\page tui_notebook_smesh_page Using SALOME NoteBook
-
-\anchor tui_notebook_smesh
-\tui_script{notebook_smesh.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst b/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst
new file mode 100644 (file)
index 0000000..9a0fc2f
--- /dev/null
@@ -0,0 +1,17 @@
+.. _tui_notebook_smesh_page: 
+
+
+*********************
+Using SALOME NoteBook
+*********************
+
+.. _tui_notebook_smesh:
+
+Notebook Smesh
+==============
+
+.. literalinclude:: ../../../examples/notebook_smesh.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/notebook_smesh.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc b/doc/salome/gui/SMESH/input/tui_prism_3d_algo.doc
deleted file mode 100644 (file)
index 0bd16a9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
-
-\page tui_prism_3d_algo Use Extrusion 3D meshing algorithm
-\tui_script{prism_3d_algo.py}
-
-The result geometry and mesh is shown below
-\image html prism_tui_sample.png
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst b/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst
new file mode 100644 (file)
index 0000000..6bc69d4
--- /dev/null
@@ -0,0 +1,19 @@
+.. _tui_prism_3d_algo:
+
+**********************************
+Use Extrusion 3D meshing algorithm
+**********************************
+
+.. literalinclude:: ../../../examples/prism_3d_algo.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/prism_3d_algo.py>`
+
+The result geometry and mesh is shown below
+
+.. image:: ../images/prism_tui_sample.png
+       :align: center
+
+
+
diff --git a/doc/salome/gui/SMESH/input/tui_quality_controls.doc b/doc/salome/gui/SMESH/input/tui_quality_controls.doc
deleted file mode 100644 (file)
index cb1632c..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
-
-\page tui_quality_controls_page Quality Controls
-
-\tableofcontents
-
-\section tui_free_borders Free Borders
-\tui_script{quality_controls_ex01.py}
-
-\section tui_borders_at_multiconnection Borders at Multiconnection
-\tui_script{quality_controls_ex02.py}
-
-\section tui_length_1d Length 1D
-\tui_script{quality_controls_ex03.py}
-
-\section tui_free_edges Free Edges
-\tui_script{quality_controls_ex04.py}
-
-\section tui_free_nodes Free Nodes
-\tui_script{quality_controls_ex05.py}
-
-\section tui_free_faces Free Faces
-\tui_script{quality_controls_ex06.py}
-
-\section tui_bare_border_faces Bare border faces
-\tui_script{quality_controls_ex07.py}
-
-\section tui_bare_border_volumes Bare border volumes
-\tui_script{quality_controls_ex08.py}
-
-\section tui_over_constrained_faces Over-constrained faces
-\tui_script{quality_controls_ex09.py}
-
-\section tui_over_constrained_volumes Over-constrained volumes
-\tui_script{quality_controls_ex10.py}
-
-\section tui_length_2d Length 2D
-\tui_script{quality_controls_ex11.py}
-
-\section tui_deflection_2d Deflection 2D
-\tui_script{quality_controls_defl.py}
-
-\section tui_borders_at_multiconnection_2d Borders at Multiconnection 2D
-\tui_script{quality_controls_ex12.py}
-
-\section tui_area Area
-\tui_script{quality_controls_ex13.py}
-
-\section tui_taper Taper
-\tui_script{quality_controls_ex14.py}
-
-\section tui_aspect_ratio Aspect Ratio
-\tui_script{quality_controls_ex15.py}
-
-\section tui_minimum_angle Minimum Angle
-\tui_script{quality_controls_ex16.py}
-
-\section tui_warping Warping
-\tui_script{quality_controls_ex17.py}
-
-\section tui_skew Skew
-\tui_script{quality_controls_ex18.py}
-
-\section tui_max_element_length_2d Element Diameter 2D
-\tui_script{quality_controls_ex19.py}
-
-\section tui_aspect_ratio_3d Aspect Ratio 3D
-\tui_script{quality_controls_ex20.py}
-
-\section tui_volume Volume
-\tui_script{quality_controls_ex21.py}
-
-\section tui_max_element_length_3d Element Diameter 3D
-\tui_script{quality_controls_ex22.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_quality_controls.rst b/doc/salome/gui/SMESH/input/tui_quality_controls.rst
new file mode 100644 (file)
index 0000000..9563bdb
--- /dev/null
@@ -0,0 +1,253 @@
+.. _tui_quality_controls_page: 
+
+****************
+Quality Controls
+****************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_free_borders: 
+
+Free Borders
+============
+
+.. literalinclude:: ../../../examples/quality_controls_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex01.py>`
+
+
+.. _tui_borders_at_multiconnection: 
+
+Borders at Multiconnection
+==========================
+
+.. literalinclude:: ../../../examples/quality_controls_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex02.py>`
+
+
+.. _tui_length_1d: 
+
+Length 1D
+=========
+
+.. literalinclude:: ../../../examples/quality_controls_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex03.py>`
+
+.. _tui_free_edges: 
+
+Free Edges
+==========
+
+.. literalinclude:: ../../../examples/quality_controls_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex04.py>`
+
+.. _tui_free_nodes: 
+
+Free Nodes
+==========
+
+.. literalinclude:: ../../../examples/quality_controls_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex05.py>`
+
+.. _tui_free_faces: 
+
+Free Faces
+==========
+
+.. literalinclude:: ../../../examples/quality_controls_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex06.py>`
+
+.. _tui_bare_border_faces: 
+
+Bare border faces
+=================
+
+.. literalinclude:: ../../../examples/quality_controls_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex07.py>`
+
+.. _tui_bare_border_volumes: 
+
+Bare border volumes
+===================
+
+.. literalinclude:: ../../../examples/quality_controls_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex08.py>`
+
+.. _tui_over_constrained_faces: 
+
+Over-constrained faces
+======================
+
+.. literalinclude:: ../../../examples/quality_controls_ex09.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex09.py>`
+
+.. _tui_over_constrained_volumes: 
+
+Over-constrained volumes
+========================
+
+.. literalinclude:: ../../../examples/quality_controls_ex10.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex10.py>`
+
+.. _tui_length_2d: 
+
+Length 2D
+=========
+
+.. literalinclude:: ../../../examples/quality_controls_ex11.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex11.py>`
+
+
+.. _tui_borders_at_multiconnection_2d: 
+
+Borders at Multiconnection 2D
+=============================
+
+.. literalinclude:: ../../../examples/quality_controls_ex12.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex12.py>`
+
+.. _tui_area: 
+
+Area
+====
+
+.. literalinclude:: ../../../examples/quality_controls_ex13.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex13.py>`
+
+.. _tui_taper: 
+
+Taper
+=====
+
+.. literalinclude:: ../../../examples/quality_controls_ex14.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex14.py>`
+
+.. _tui_aspect_ratio: 
+
+Aspect Ratio
+============
+
+.. literalinclude:: ../../../examples/quality_controls_ex15.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex15.py>`
+
+.. _tui_minimum_angle: 
+
+Minimum Angle
+=============
+
+.. literalinclude:: ../../../examples/quality_controls_ex16.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex16.py>`
+
+.. _tui_warping: 
+
+Warping
+=======
+
+.. literalinclude:: ../../../examples/quality_controls_ex17.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex17.py>`
+
+.. _tui_skew: 
+
+Skew
+====
+
+.. literalinclude:: ../../../examples/quality_controls_ex18.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex18.py>`
+
+.. _tui_max_element_length_2d: 
+
+Element Diameter 2D
+===================
+
+.. literalinclude:: ../../../examples/quality_controls_ex19.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex19.py>`
+
+.. _tui_aspect_ratio_3d: 
+
+Aspect Ratio 3D
+===============
+
+.. literalinclude:: ../../../examples/quality_controls_ex20.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex20.py>`
+
+.. _tui_volume: 
+
+Volume
+======
+
+.. literalinclude:: ../../../examples/quality_controls_ex21.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex21.py>`
+
+.. _tui_max_element_length_3d:
+
+Element Diameter 3D
+===================
+
+.. literalinclude:: ../../../examples/quality_controls_ex22.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/quality_controls_ex22.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc
deleted file mode 100644 (file)
index 9837176..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-
-\page tui_transforming_meshes_page Transforming Meshes
-
-\tableofcontents
-
-<br>
-\section tui_translation Translation
-\tui_script{transforming_meshes_ex01.py}
-
-<br>
-\section tui_rotation Rotation
-\tui_script{transforming_meshes_ex02.py}
-
-<br>
-\section tui_scale Scale
-\tui_script{transforming_meshes_ex03.py}
-
-<br>
-\section tui_symmetry Symmetry
-\tui_script{transforming_meshes_ex04.py}
-
-<br>
-\section tui_merging_nodes Merging Nodes
-\tui_script{transforming_meshes_ex05.py}
-
-<br>
-\section tui_merging_elements Merging Elements
-\tui_script{transforming_meshes_ex06.py}
-
-<br>
-\section tui_sew_meshes_border_to_side Sew Meshes Border to Side
-\tui_script{transforming_meshes_ex07.py}
-
-<br>
-\section tui_sew_conform_free_borders Sew Conform Free Borders
-\tui_script{transforming_meshes_ex08.py}
-
-<br>
-\section tui_sew_free_borders Sew Free Borders
-\tui_script{transforming_meshes_ex09.py}
-
-<br>
-\section tui_sew_side_elements Sew Side Elements
-\tui_script{transforming_meshes_ex10.py}
-
-<br>
-\section tui_duplicate_nodes Duplicate nodes or/and elements
-\tui_script{transforming_meshes_ex11.py}
-
-<br>
-\section tui_make_2dmesh_from_3d Create boundary elements
-\tui_script{transforming_meshes_ex12.py}
-
-<br>
-\section tui_reorient_faces Reorient faces
-\tui_script{transforming_meshes_ex13.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst b/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst
new file mode 100644 (file)
index 0000000..0be8e0a
--- /dev/null
@@ -0,0 +1,151 @@
+.. _tui_transforming_meshes_page: 
+
+*******************
+Transforming Meshes
+*******************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_translation: 
+
+Translation
+===========
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex01.py>`
+
+.. _tui_rotation: 
+
+Rotation
+========
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex02.py>`
+
+.. _tui_scale: 
+
+Scale
+=====
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex03.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex03.py>`
+
+.. _tui_symmetry: 
+
+Symmetry
+========
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex04.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex04.py>`
+
+.. _tui_merging_nodes: 
+
+Merging Nodes
+=============
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex05.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex05.py>`
+
+.. _tui_merging_elements: 
+
+Merging Elements
+================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex06.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex06.py>`
+
+.. _tui_sew_meshes_border_to_side: 
+
+Sew Meshes Border to Side
+=========================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex07.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex07.py>`
+
+.. _tui_sew_conform_free_borders: 
+
+Sew Conform Free Borders
+========================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex08.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex08.py>`
+
+.. _tui_sew_free_borders: 
+
+Sew Free Borders
+================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex09.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex09.py>`
+
+.. _tui_sew_side_elements: 
+
+Sew Side Elements
+=================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex10.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex10.py>`
+
+.. _tui_duplicate_nodes: 
+
+Duplicate nodes or/and elements
+===============================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex11.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex11.py>`
+
+.. _tui_make_2dmesh_from_3d: 
+
+Create boundary elements
+========================
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex12.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex12.py>`
+
+.. _tui_reorient_faces: 
+
+Reorient faces
+==============
+
+.. literalinclude:: ../../../examples/transforming_meshes_ex13.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/transforming_meshes_ex13.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_use_existing_faces.doc b/doc/salome/gui/SMESH/input/tui_use_existing_faces.doc
deleted file mode 100644 (file)
index 03928c3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
-
-\page tui_use_existing_faces Usage of "Use Faces to be Created Manually" algorithm
-
-This sample demonstrates how to use <b>Use Faces to be Created Manually</b> algorithm,
-which is actually just a stub allowing to use your own 2D algorithm
-implemented in Python.
-
-\tui_script{use_existing_faces.py}
-
-Resulting mesh:
-\image html use_existing_face_sample_mesh.png
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst b/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst
new file mode 100644 (file)
index 0000000..baaf81a
--- /dev/null
@@ -0,0 +1,20 @@
+.. _tui_use_existing_faces: 
+
+*****************************************************
+Usage of "Use Faces to be Created Manually" algorithm
+*****************************************************
+
+This sample demonstrates how to use **Use Faces to be Created Manually** algorithm,
+which is actually just a stub allowing to use your own 2D algorithm
+implemented in Python.
+
+.. literalinclude:: ../../../examples/use_existing_faces.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/use_existing_faces.py>`
+
+Resulting mesh:
+
+.. image:: ../images/use_existing_face_sample_mesh.png
+       :align: center
diff --git a/doc/salome/gui/SMESH/input/tui_viewing_meshes.doc b/doc/salome/gui/SMESH/input/tui_viewing_meshes.doc
deleted file mode 100644 (file)
index 2f3c4b4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-
-\page tui_viewing_meshes_page Viewing Meshes
-
-<br>
-\anchor tui_viewing_mesh_infos
-<h2>Viewing Mesh Infos</h2>
-\tui_script{viewing_meshes_ex01.py}
-
-<br>
-\anchor tui_find_element_by_point
-<h2>Find Element by Point</h2>
-\tui_script{viewing_meshes_ex02.py}
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst b/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst
new file mode 100644 (file)
index 0000000..c1c3bfd
--- /dev/null
@@ -0,0 +1,29 @@
+
+.. _tui_viewing_meshes_page: 
+
+**************
+Viewing Meshes
+**************
+
+.. _tui_viewing_mesh_infos:
+
+Viewing Mesh Infos
+##################
+
+.. literalinclude:: ../../../examples/viewing_meshes_ex01.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/viewing_meshes_ex01.py>`
+
+.. _tui_find_element_by_point:
+
+
+Find Element by Point
+#####################
+
+.. literalinclude:: ../../../examples/viewing_meshes_ex02.py
+    :linenos:
+    :language: python
+
+:download:`Download this script <../../../examples/viewing_meshes_ex02.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.doc b/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.doc
deleted file mode 100644 (file)
index ddd1658..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-
-\page tui_work_on_objects_from_gui How to work with objects from the GUI ?
-
-It is sometimes useful to work alternatively in the GUI of SALOME and in the Python Console. To fetch an object from the TUI simply type:
-
-\code{.py}
-myMesh_ref = salome.IDToObject( ID )
-# were ID is a string looking like "0:1:2:3" that appears in the Object Browser in the Entry column.
-# ( If hidden, show it by right clicking and checking the checkbox Entry )
-myMesh = smesh.Mesh(myMesh_ref)
-\endcode
-or 
-\code{.py}
-myMesh_ref = salome.myStudy.FindObjectByPath("/Mesh/myMesh").GetObject() 
-#'/Mesh/myMesh' is a path to the desired object in the Object Browser
-myMesh = smesh.Mesh(myMesh_ref)
-\endcode
-or 
-\code{.py}
-# get a selected mesh
-from salome.gui import helper
-myMesh_ref = helper.getSObjectSelected()[0].GetObject() 
-myMesh = smesh.Mesh(myMesh_ref)
-\endcode
-
-All the methods documented in these pages can then be used on myMesh
-
-\note The first statement only gives you access to a reference to the object created via the GUI. 
-\n But the methods available on this reference are not exactly the same as those documented in these help pages. 
-This Python API is meant to be used on smesh.Mesh instances. 
-\n That's why you'll have to create such an instance with the second statement. 
-
-*/
diff --git a/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst b/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst
new file mode 100644 (file)
index 0000000..d908627
--- /dev/null
@@ -0,0 +1,30 @@
+
+.. _tui_work_on_objects_from_gui: 
+
+***************************************
+How to work with objects from the GUI ?
+***************************************
+
+It is sometimes useful to work alternatively in the GUI of SALOME and in the Python Console. To fetch an object from the TUI simply type::
+
+  myMesh_ref = salome.IDToObject( ID )
+  # were ID is a string looking like "0:1:2:3" that appears in the Object Browser in the Entry column.
+  # ( If hidden, show it by right clicking and checking the checkbox Entry )
+  myMesh = smesh.Mesh(myMesh_ref)
+
+or:: 
+
+  myMesh_ref = salome.myStudy.FindObjectByPath("/Mesh/myMesh").GetObject() 
+  #'/Mesh/myMesh' is a path to the desired object in the Object Browser
+  myMesh = smesh.Mesh(myMesh_ref)
+
+or::
+
+  # get a selected mesh
+  from salome.gui import helper
+  myMesh_ref = helper.getSObjectSelected()[0].GetObject() 
+  myMesh = smesh.Mesh(myMesh_ref)
+
+A result myMesh is an object of :class:`Mesh <smeshBuilder.Mesh>` class.
+
+.. note:: The first statement only gives you access to a reference to the object created via the GUI (`myMesh_ref`). But the methods available on this reference differ from those of :class:`Mesh <smeshBuilder.Mesh>` class documented in these help pages. That's why you have to create an instance of :class:`Mesh <smeshBuilder.Mesh>` class with the last statement. 
diff --git a/doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc b/doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc
deleted file mode 100644 (file)
index b9704a4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-
-\page uniting_set_of_triangles_page Uniting a set of triangles
-
-\n It is possible to unite many neighboring triangles into
-quadrangles by deletion of the common edge.
-
-<em>To union several triangles:</em>
-<ol>
-<li>Select a mesh (and display it in the 3D Viewer if you are going to
-  pick elements by mouse).</li>
-<li>In the \b Modification menu select the <b>Union of triangles</b>
-  item or click <em>"Union of triangles"</em> button in the tool-bar.
-
-\image html image80.png
-<center><em>"Union of triangles" button</em></center>
-
-The following dialog box will appear:
-
-\image html a-unionoftriangles.png
-
-<ul>
-<li><b>The main list</b> shall contain the triangles which will be
-  united. You can click on a triangle in the 3D viewer and it will be
-  highlighted. After that click the \b Add button and the ID of this
-  triangle will be added to the list. To remove a selected element or
-  elements from the list click the \b Remove button. The \b Sort button allows
-  to sort the list of IDs. The <b>Filter</b> button allows to apply a
-  definite \ref filtering_elements "filter" to selection of triangles.</li>
-<li><b>Apply to all</b> radio button allows to apply the operation to
-  all triangles of the selected mesh.</li>
-<li><b>Preview</b> provides a preview in the viewer.</li>
-<li>\b Criterion menu allows to choose a quality criterion,
-  which will be optimized to select triangles to unite.</li>
-<li><b>Select from</b> set of fields allows to choose a sub-mesh or an
-  existing group whose triangle elements then can be added to the
-  list.</li>
-</ul>
-
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ol>
-
-If some selected triangle elements have no adjacent edges with one of
-the others, the operation on these elements shall take no effect.
-
-\image html uniting_a_set_of_triangles1.png "The chosen triangles"
-
-\image html uniting_a_set_of_triangles2.png "The union of several triangles - several quadrangular cells are created"
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_uniting_set_of_triangles "Uniting a Set of Triangles" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst b/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst
new file mode 100644 (file)
index 0000000..53a0322
--- /dev/null
@@ -0,0 +1,49 @@
+.. _uniting_set_of_triangles_page: 
+
+**************************
+Uniting a set of triangles
+**************************
+
+It is possible to unite many neighboring triangles into
+quadrangles by deletion of the common edge.
+
+*To union several triangles:*
+
+.. |img| image:: ../images/image80.png
+
+#. Select a mesh (and display it in the 3D Viewer if you are going to pick elements by mouse).
+#. In the **Modification** menu select the **Union of triangles** item or click *"Union of triangles"* button |img| in the tool-bar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/a-unionoftriangles.png
+               :align: center
+
+
+       * **The main list** shall contain the triangles which will be united. You can click on a triangle in the 3D viewer and it will be highlighted. After that click the **Add** button and the ID of this triangle will be added to the list. To remove a selected element or elements from the list click the **Remove** button. The **Sort** button allows to sort the list of IDs. The **Filter** button allows to apply a definite :ref:`filter <filtering_elements>` to selection of triangles.
+       * **Apply to all** radio button allows to apply the operation to all triangles of the selected mesh.
+       * **Preview** provides a preview in the viewer.
+       * **Criterion** menu allows to choose a quality criterion, which will be optimized to select triangles to unite.
+       * **Select from** set of fields allows to choose a sub-mesh or an existing group whose triangle elements then can be added to the list.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+If some selected triangle elements have no adjacent edges with one of
+the others, the operation on these elements shall take no effect.
+
+.. image:: ../images/uniting_a_set_of_triangles1.png 
+       :align: center
+
+.. centered::
+       The chosen triangles
+
+.. image:: ../images/uniting_a_set_of_triangles2.png 
+       :align: center
+
+.. centered::
+       The union of several triangles - several quadrangular cells are created
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_uniting_set_of_triangles` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/uniting_two_triangles.doc b/doc/salome/gui/SMESH/input/uniting_two_triangles.doc
deleted file mode 100644 (file)
index f965a01..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-
-\page uniting_two_triangles_page Uniting two triangles
-
-\n In MESH you can union two neighboring triangles by deletion
-of the common edge.
-
-<em>To unite two triangles:</em>
-<ol>
-<li>From the \b Modification menu choose the <b>Union of two
-triangles</b> item or click <em>"Union of two triangles"</em> button
-in the tool-bar.
-
-\image html image71.png
-<center><em>"Union of two triangles" button</em></center>
-
-The following dialog box shall appear:
-
-\image html unionoftwotriangles.png
-
-</li>
-<li>Enter IDs of nodes forming the required edge in the \b Edge field
-  (a couple of node IDs separated by a dash) or select this edge in
-  the 3D viewer.</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
-</ol>
-
-\image html uniting_two_triangles1.png "The selected triangles"
-
-\image html uniting_two_triangles2.png "The union of two triangles" 
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_uniting_two_triangles "Uniting Two Triangles" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/uniting_two_triangles.rst b/doc/salome/gui/SMESH/input/uniting_two_triangles.rst
new file mode 100644 (file)
index 0000000..dfc4236
--- /dev/null
@@ -0,0 +1,40 @@
+.. _uniting_two_triangles_page: 
+
+*********************
+Uniting two triangles
+*********************
+
+In MESH you can union two neighboring triangles by deletion of the common edge.
+
+*To unite two triangles:*
+
+.. |img| image:: ../images/image71.png
+
+#. From the **Modification** menu choose the **Union of two triangles** item or click *"Union of two triangles"* button |img| in the tool-bar.
+
+   The following dialog box shall appear:
+
+       .. image:: ../images/unionoftwotriangles.png
+               :align: center
+
+
+#. Enter IDs of nodes forming the required edge in the **Edge** field (a couple of node IDs separated by a dash) or select this edge in the 3D viewer.
+#. Click the **Apply** or **Apply and Close** button.
+
+.. image:: ../images/uniting_two_triangles1.png 
+       :align: center
+
+.. centered::
+       "The selected triangles"
+
+
+.. image:: ../images/uniting_two_triangles2.png 
+       :align: center
+
+.. centered::
+       "The union of two triangles" 
+
+**See Also** a sample TUI Script of a 
+:ref:`tui_uniting_two_triangles` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/use_existing_algos.doc b/doc/salome/gui/SMESH/input/use_existing_algos.doc
deleted file mode 100644 (file)
index bdb4151..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-
-\page import_algos_page Import Elements from Another Mesh Algorithms
-
-\n <b>Import Elements from Another Mesh</b> algorithms allow to
-define the mesh of a geometrical 
-object by importing suitably located mesh elements from another
-mesh. The mesh elements to import from the other mesh should be contained in
-groups. If several groups are used to mesh the same geometry, validity of
-nodal connectivity of result mesh must be assured by connectivity of
-the source mesh; no geometrical checks are performed to merge
-different nodes at same locations.
-<br> The source elements must totally cover the meshed geometry.
-The source elements lying partially over the geometry will not be used.
-<br>
-These algorithms can be used to mesh a very complex geometry part by
-part, by storing meshes of parts in files and then fusing them
-together using these algorithms.
-<br>
-
-<b>Import 1D Elements from Another Mesh</b> algorithm allows to define
-the mesh of a geometrical edge (or group of edges)
-by importing mesh edges contained in a group (or groups) from another mesh.
-<br> 
-To apply this algorithm select the edge to be meshed (indicated in
-the field \b Geometry of <b>Create mesh</b> dialog box),
-<b>Import 1D Elements from Another Mesh</b> in the list of 1D
-algorithms and click the <em>"Add Hypothesis"</em> button.
-The following dialog box will appear:
-
-\image html hyp_source_edges.png
-
-In this dialog box you can define 
-<ul>
-<li>The \b Name of the algorithm. </li>
-<li>The <b>Groups of Edges</b> to import 1D elements from.
-<li><b>To copy mesh</b> checkbox allows to import not only the edges of
-the selected <b>Groups of Edges</b>, but the whole source
-mesh. In this case <b>To copy groups</b> checkbox allows to create
-the same groups as in the imported source mesh.</li>
-</ul>
-
-<b>Import 1D-2D Elements from Another Mesh</b> algorithm allows to define
-the mesh of a geometrical face (or group of faces) 
-by importing mesh faces contained in a group (or groups) from another
-(or this) mesh. 1D elements on the boundary of the geometrical face
-(if not yet present) are also created by the algorithm in conformity 
-with the created 2D elements.<br>
-To apply this algorithm select the geometrical face to be meshed (indicated in
-the field \b Geometry of <b>Create mesh</b> dialog box),
-<b>Import 1D-2D Elements from Another Mesh</b> in the list of 2D
-algorithms and click the <em>"Add Hypothesis"</em> button.
-The following dialog box will appear:
-
-\image html hyp_source_faces.png
-
-In this dialog box you can define 
-<ul>
-<li>The \b Name of the algorithm. </li>
-<li>The <b>Groups of Faces</b> to import 2D elements from.
-<li><b>To copy mesh</b> checkbox allows to import not only the faces of
-the selected <b>Groups of Faces</b>, but the whole source
-mesh. In this case <b>To copy groups</b> checkbox allows to create
-the same groups as in the imported source mesh.</li>
-</ul>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_import "Import 2D Elements from Another Mesh".
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/use_existing_algos.rst b/doc/salome/gui/SMESH/input/use_existing_algos.rst
new file mode 100644 (file)
index 0000000..267ea46
--- /dev/null
@@ -0,0 +1,60 @@
+.. _import_algos_page: 
+
+********************************************
+Import Elements from Another Mesh Algorithms
+********************************************
+
+**Import Elements from Another Mesh** algorithms allow to
+define the mesh of a geometrical 
+object by importing suitably located mesh elements from another
+mesh. The mesh elements to import from the other mesh should be contained in
+groups. If several groups are used to mesh the same geometry, validity of
+nodal connectivity of result mesh must be assured by connectivity of
+the source mesh; no geometrical checks are performed to merge
+different nodes at same locations.
+
+The source elements must totally cover the meshed geometry.
+The source elements lying partially over the geometry will not be used.
+
+These algorithms can be used to mesh a very complex geometry part by
+part, by storing meshes of parts in files and then fusing them
+together using these algorithms.
+
+
+**Import 1D Elements from Another Mesh** algorithm allows to define
+the mesh of a geometrical edge (or group of edges)
+by importing mesh edges contained in a group (or groups) from another mesh.
+To apply this algorithm select the edge to be meshed (indicated in
+the field **Geometry** of **Create mesh** dialog box),
+**Import 1D Elements from Another Mesh** in the list of 1D
+algorithms and click the *"Add Hypothesis"* button.
+The following dialog box will appear:
+
+.. image:: ../images/hyp_source_edges.png
+       :align: center                                                 
+
+In this dialog box you can define 
+
+* The **Name** of the algorithm. 
+* The **Groups of Edges** to import 1D elements from.
+* **To copy mesh** checkbox allows to import not only the edges of the selected **Groups of Edges**, but the whole source mesh. In this case **To copy groups** checkbox allows to create the same groups as in the imported source mesh.
+
+
+**Import 1D-2D Elements from Another Mesh** algorithm allows to define the mesh of a geometrical face (or group of faces) by importing mesh faces contained in a group (or groups) from another (or this) mesh. 1D elements on the boundary of the geometrical face (if not yet present) are also created by the algorithm in conformity with the created 2D elements.
+
+To apply this algorithm select the geometrical face to be meshed (indicated in the field **Geometry** of **Create mesh** dialog box), **Import 1D-2D Elements from Another Mesh** in the list of 2D algorithms and click the *"Add Hypothesis"* button.
+
+The following dialog box will appear:
+
+.. image:: ../images/hyp_source_faces.png
+       :align: center                                                 
+
+In this dialog box you can define 
+
+* The **Name** of the algorithm. 
+* The **Groups of Faces** to import 2D elements from.
+* **To copy mesh** checkbox allows to import not only the faces of the selected **Groups of Faces**, but the whole source mesh. In this case **To copy groups** checkbox allows to create the same groups as in the imported source mesh.
+
+
+**See Also** a sample TUI Script of :ref:`Import 2D Elements from Another Mesh <tui_import>`.
diff --git a/doc/salome/gui/SMESH/input/using_notebook_smesh_page.doc b/doc/salome/gui/SMESH/input/using_notebook_smesh_page.doc
deleted file mode 100644 (file)
index aac0c90..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*!
-
-\page using_notebook_mesh_page Using SALOME NoteBook
-
-<b>SALOME NoteBook</b> allows defining variables to be used for
-creation and modification of objects.
-
-\image html using_notebook_smesh.png "Setting of variables in SALOME NoteBook"
-
-\image html addnode_notebook.png "Use of variables to add a node in MESH module"
-
-The following limitations on the use of variables still exist:
-
-<ul>
-<li> \ref radial_prism_algo_page "Distribution of Layers" hypothesis -
-     parametrical values are correctly applied, but they are not restored
-     after "Update study" operation.
-<li> \ref a1d_meshing_hypo_page "Number of Segments" hypothesis, Distribution
-     with Table Density and Distribution with Analytic Density - parametrical
-     values are not applicable.
-<li> \ref translation_page "Translation" dialog box, default mode
-     (translation by two points) - parametrical values are correctly applied,
-     but they are not restored after "Update study" operation.
-<li> \ref merging_nodes_page "Merging nodes" dialog box - parametrical value
-     (tolerance of coincident nodes detection) is correctly applied,
-     but it is not restored after "Update study" operation.
-<li> \ref revolution_page "Revolution" dialog box - it is impossible to
-     use the angle of revolution as "total angle" if it is defined as variable.
-<li> \ref extrusion_along_path_page "Extrusion along a path" dialog box - it is
-     impossible to use "Linear variation of the angles" mode if at least one of
-     those angles is defined as variable.
-<li> \ref pattern_mapping_page "Pattern mapping" dialog box - parametrical
-     values (indices of nodes) are correctly applied, but they are not restored
-     after "Update study" operation.
-<li> \ref clipping_page "Clipping" dialog box.
-<li> <b>Properties</b> dialog box.
-</ul>
-
-Our <b>TUI Scripts</b> provide you with useful examples of 
-\ref tui_notebook_smesh "Using SALOME NoteBook".
-
-*/
diff --git a/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst b/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst
new file mode 100644 (file)
index 0000000..71eea1b
--- /dev/null
@@ -0,0 +1,37 @@
+.. _using_notebook_mesh_page: 
+
+*********************
+Using SALOME NoteBook
+*********************
+
+**SALOME NoteBook** allows defining variables to be used for
+creation and modification of objects.
+
+.. image:: ../images/using_notebook_smesh.png 
+       :align: center
+
+.. centered::
+       Setting of variables in SALOME NoteBook
+
+.. image:: ../images/addnode_notebook.png 
+       :align: center
+
+.. centered::
+       Use of variables to add a node in MESH module
+
+The following limitations on the use of variables still exist:
+
+* :ref:`Distribution of Layers <radial_prism_algo_page>` hypothesis - parametrical values are correctly applied, but they are not restored after "Update study" operation.
+* :ref:`Number of Segments <a1d_meshing_hypo_page>` hypothesis, Distribution with Table Density and Distribution with Analytic Density - parametrical values are not applicable.
+* :ref:`Translation <translation_page>` dialog box, default mode (translation by two points) - parametrical values are correctly applied, but they are not restored after "Update study" operation.
+* :ref:`Merging nodes <merging_nodes_page>` dialog box - parametrical value (tolerance of coincident nodes detection) is correctly applied, but it is not restored after "Update study" operation.
+* :ref:`Revolution <revolution_page>` dialog box - it is impossible to use the angle of revolution as "total angle" if it is defined as variable.
+* :ref:`Extrusion along a path <extrusion_along_path_page>` dialog box - it is impossible to use "Linear variation of the angles" mode if at least one of those angles is defined as variable.
+* :ref:`Pattern mapping <pattern_mapping_page>` dialog box - parametrical values (indices of nodes) are correctly applied, but they are not restored after "Update study" operation.
+* :ref:`Clipping <clipping_page>` dialog box.
+* :ref:`Properties <colors_size_page>` dialog box.
+
+
+Our **TUI Scripts** provide you with useful examples of :ref:`Using SALOME NoteBook <tui_notebook_smesh>`.
+
+
diff --git a/doc/salome/gui/SMESH/input/using_operations_on_groups.doc b/doc/salome/gui/SMESH/input/using_operations_on_groups.doc
deleted file mode 100644 (file)
index a380581..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*!
-
-\page using_operations_on_groups_page Boolean operations on groups
-
-\n In MESH you can perform some Boolean operations on groups, which
-belong to one and the same mesh.
-<ul>
-<li>\ref union_anchor "Union"</li>
-<li>\ref intersection_anchor "Intersection"</li>
-<li>\ref cut_anchor "Cut"</li>
-</ul>
-
-
-<br>
-\anchor union_anchor
-<h2>Union of groups</h2>
-
-This operation allows to create a new group in such a way that all
-mesh elements that are present in the initial groups will be added to
-the new one.
-
-<em>To union groups:</em>
-<ol>
-<li>In the \b Mesh menu select the <b>Union Groups</b> item. The following
-dialog box will appear:
-
-\image html uniongroups.png
-
-In this dialog box you should specify the name of the resulting group
-and set of groups which will be united.
-
-For example, we have two groups Group1 and Group2. 
-\n The result of their \b Union will be Group12:
-
-\image html image133.gif
-<center>Group1</center>
-
-\image html image134.gif
-<center>Group2</center>
-
-\image html image135.gif
-<center>Group12</center>
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm creation of the group.</li>
-</ol>
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_union_of_groups "Union of Groups" operation.
-
-<br>
-\anchor intersection_anchor
-<h2>Intersection of groups</h2>
-
-This operation allows to create a new group in such a way that all
-mesh elements that are present in all initial groups together are added to the
-new one.
-
-<em>To intersect groups:</em>
-<ol>
-<li>In the \b Mesh menu select the <b>Intersect Groups</b> item. The
-following dialog box will appear:
-
-\image html intersectgroups.png
-
-In this dialog box you should specify the name of the resulting group
-and set of groups which will be intersected.
-
-For example, we have two groups Group1 and Group2. 
-\n The result of their \b Intersection will be Group12a:
-
-\image html image133.gif
-<center>Group1</center>
-
-\image html image134.gif
-<center>Group2</center>
-
-\image html image136.gif
-<center>Group12a</center>
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm creation of the group.</li>
-</ol>
-
-<b>See Also</b> a sample TUI Script of an  
-\ref tui_intersection_of_groups "Intersection of Groups" operation.  
-
-<br>
-\anchor cut_anchor
-<h2>Cut of groups</h2>
-
-This operation allows to create a new group in such a way that all
-mesh elements that are present in the main groups but are absent in the
-tool groups are added to the new one.
-
-<em>To cut groups:</em>
-<ol>
-<li>In the \b Mesh menu select the <b>Cut Groups</b> item. The
-following dialog box will appear:
-
-\image html cutgroups.png
-
-In this dialog box you should specify the name of the resulting group
-and groups which will be cut.
-
-For example, we have two groups Group1 and Group2. 
-\n The result of their \b Cut will be Group12b:
-
-\image html image133.gif
-<center>Group1</center>
-
-\image html image134.gif
-<center>Group2</center>
-
-\image html image137.gif
-<center>Group12b</center>
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm creation of the
-group.</li>
-</ol>
-
-<b>See Also</b> a sample TUI Script of a 
-\ref tui_cut_of_groups "Cut of Groups" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/using_operations_on_groups.rst b/doc/salome/gui/SMESH/input/using_operations_on_groups.rst
new file mode 100644 (file)
index 0000000..717901d
--- /dev/null
@@ -0,0 +1,150 @@
+.. _using_operations_on_groups_page: 
+
+****************************
+Boolean operations on groups
+****************************
+
+In MESH you can perform some Boolean operations on groups, which belong to one and the same mesh.
+
+* :ref:`union_anchor`
+* :ref:`intersection_anchor`
+* :ref:`cut_anchor` 
+
+
+
+
+.. _union_anchor:
+
+Union of groups
+###############
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in the initial groups will be added to
+the new one.
+
+*To union groups:*
+
+#. In the **Mesh** menu select the **Union Groups** item. The following dialog box will appear:
+
+       .. image:: ../images/uniongroups.png
+               :align: center                                                 
+
+   In this dialog box you should specify the name of the resulting group and set of groups which will be united.
+
+   For example, we have two groups Group1 and Group2. 
+   The result of their **Union** will be Group12:
+
+       .. image:: ../images/image133.gif
+               :align: center
+
+       .. centered::
+               Group1
+
+       .. image:: ../images/image134.gif
+               :align: center
+
+       .. centered::
+               Group2
+
+       .. image:: ../images/image135.gif
+               :align: center
+
+       .. centered::
+               Group12
+
+#. Click the **Apply** or **Apply and Close** button to confirm creation of the group.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_union_of_groups` operation.
+
+
+.. _intersection_anchor:
+
+Intersection of groups
+######################
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in all initial groups together are added to the
+new one.
+
+*To intersect groups:*
+
+#. In the **Mesh** menu select the **Intersect Groups** item. The following dialog box will appear:
+
+       .. image:: ../images/intersectgroups.png
+               :align: center                                                 
+
+   In this dialog box you should specify the name of the resulting group and set of groups which will be intersected.
+
+   For example, we have two groups Group1 and Group2. 
+   The result of their **Intersection** will be Group12a:
+
+       .. image:: ../images/image133.gif
+               :align: center
+
+       .. centered::
+               Group1
+
+       .. image:: ../images/image134.gif
+               :align: center
+
+       .. centered::
+               Group2
+
+       .. image:: ../images/image136.gif
+               :align: center
+
+       .. centered::
+               Group12a
+
+#. Click the **Apply** or **Apply and Close** button to confirm creation of the group.
+
+
+**See Also** a sample TUI Script of an :ref:`tui_intersection_of_groups` operation.  
+
+
+.. _cut_anchor:
+
+Cut of groups
+#############
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in the main groups but are absent in the
+tool groups are added to the new one.
+
+*To cut groups:*
+
+#. In the **Mesh** menu select the **Cut Groups** item. The following dialog box will appear:
+
+       .. image:: ../images/cutgroups.png
+               :align: center                                                 
+
+   In this dialog box you should specify the name of the resulting group and groups which will be cut.
+
+   For example, we have two groups Group1 and Group2. 
+   The result of their **Cut** will be Group12b:
+
+       .. image:: ../images/image133.gif
+               :align: center
+
+       .. centered::
+               Group1
+
+       .. image:: ../images/image134.gif
+               :align: center
+
+       .. centered::
+               Group2
+
+       .. image:: ../images/image137.gif
+               :align: center
+
+       .. centered::
+               Group12b
+
+#. Click the **Apply** or **Apply and Close** button to confirm creation of the group.
+
+
+**See Also** a sample TUI Script of a :ref:`tui_cut_of_groups` operation.  
+
+
diff --git a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc
deleted file mode 100644 (file)
index c4831c0..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*!
-
-\page viewing_meshes_overview_page Viewing meshes
-
-By default a just \ref compute_anchor "computed" mesh will be
-automatically displayed in the <b>VTK 3D Viewer</b>. (You can switch
-off \ref automatic_update_pref "Automatic Update" preference parameter
-to prevent this.)
-Click <b>Display only</b> to hide all other objects at the same time.
-
-<b>VTK 3D Viewer</b> is described in detail in the documentation on <b>GUI module</b>.
-
-Use the following \ref mesh_preferences_page "preference parameters"
-to adjust how the mesh is displayed by default:
-- \ref automatic_update_pref "Automatic Update"
-- \ref display_mode_pref "Default display mode"
-- \ref quadratic_2d_mode_pref "Representation of the 2D quadratic elements"
-- All parameters of \ref mesh_tab_preferences "Mesh" tab page of the
-Preferences dialog.
-
-After the mesh has appeared in the Viewer, you can select it with
-left mouse click and  get information about it, change its
-presentation parameters and access to other useful options by
-right-clicking on the selected mesh.
-
-\image html dialog.png
-
-<ul>
-<li><b>Rename</b> - allows to rename the object in the Object browser.</li>
-<li><b>Hide all</b> - allows to hide all objects in the viewer.</li>
-<li><b>Update</b> - refreshes the presentation of your mesh in the
-  Object Browser, applying all recent changes. </li>
-<li>\subpage mesh_infos_page "Mesh Information" -  provides
-  information about the mesh.</li>
-<li>\subpage find_element_by_point_page "Find Element by Point" -
-  allows to find all mesh elements, to which belongs a point with the
-given coordinates.</li>
-<li><b>Auto Color</b> - switch on / off auto-assigning colors for the
-  groups. If switched on, a default color of a new group in 
-  \ref creating_groups_page "Create Group" dialog is chosen
-  randomly. </li>
-<li>\subpage numbering_page "Numbering" - allows to display the ID
-  numbers of all meshing elements or nodes composing your mesh in the
-  viewer.</li>
-<li>\subpage display_mode_page "Display Mode" - allows to select between
-  Wireframe, Shading and Nodes presentation.</li>
-<li>\subpage display_entity_page "Display Entity" - allows to display
-  entities by types (Faces, Edges, Volumes etc.).</li>
-\anchor quadratic_2d_mode
-<li><b>2D Quadratic</b> - allows to select between the representation
-  of quadratic edges as broken \b lines or as \b arcs. A default
-  representation can be set in \ref quadratic_2d_mode_pref "Preferences".
-  Arc representation applies to 1D and 2D elements only.
-</li>
-<li><b>Orientation of faces</b> - shows vectors of orientation of
-  faces of the selected mesh. The orientation vector is shown for each
-  2D mesh element and for each free facet of a 3D mesh element. The
-  vector direction is calculated by the first three nodes of the face
-  produced by vectors n1-n2 and n1-n3.</li>
-<li>\subpage colors_size_page "Properties" - allows to define several
-  visual properties, including color of elements, shrink size, ...</li>
-<li>\subpage transparency_page "Transparency" - allows to change the
-  transparency of mesh elements.</li>
-<li>\ref quality_page "Controls" - graphically presents various
-  information about the mesh.</li> 
-<li><b>Hide</b> - allows to hide the selected mesh from the viewer.</li>
-<li><b>Show Only</b> - allows to display only the selected mesh,
-  hiding all others from the viewer.</li>
-<li>\subpage clipping_page "Clipping" - allows to create
-  cross-sections of the displayed objects.</li>
-<li><b>Dump view</b> - exports an object from the viewer in bmp, png
-  or jpeg image format.</li>
-<li><b>Change background</b> - allows to redefine the background
-  color. By default it is black.</li>
-<li><b>View Operations</b> - allows to show/hide the
-  visualization toolbar in the Viewer window.</li>
-<li><b>Recording Operations</b> - allows to show/hide the recording
-  toolbar in the Viewer window.</li>
-</ul>
-
-*/
-
diff --git a/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst b/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst
new file mode 100644 (file)
index 0000000..44cb388
--- /dev/null
@@ -0,0 +1,70 @@
+.. _viewing_meshes_overview_page: 
+
+**************
+Viewing meshes
+**************
+
+By default a just :ref:`computed <compute_anchor>` mesh will be
+automatically displayed in the **VTK 3D Viewer**. (You can switch
+off :ref:`Automatic Update <automatic_update_pref>` preference parameter
+to prevent this.)
+Click **Display only** to hide all other objects at the same time.
+
+**VTK 3D Viewer** is described in detail in the documentation on **GUI module**.
+
+Use the following :ref:`preference parameters <mesh_preferences_page>` 
+to adjust how the mesh is displayed by default:
+
+* :ref:`Automatic Update <automatic_update_pref>` 
+* :ref:`Default display mode <display_mode_pref>` 
+* :ref:`Representation of the 2D quadratic elements <quadratic_2d_mode_pref>` 
+* All parameters of :ref:`Mesh <mesh_tab_preferences>` tab page of Preferences dialog.
+
+After the mesh has appeared in the Viewer, you can select it with
+left mouse click and  get information about it, change its
+presentation parameters and access to other useful options by
+right-clicking on the selected mesh.
+
+.. image:: ../images/dialog.png
+       :align: center
+
+
+* **Rename** - allows to rename the object in the Object browser.
+* **Hide all** - allows to hide all objects in the viewer.
+* **Update** - refreshes the presentation of your mesh in the Object Browser, applying all recent changes. 
+* :ref:`Mesh Information <mesh_infos_page>` -  provides information about the mesh.
+* :ref:`Find Element by Point <find_element_by_point_page>` - allows to find all mesh elements, to which belongs a point with the given coordinates.
+* **Auto Color** - switch on / off auto-assigning colors for the groups. If switched on, a default color of a new group in :ref:`Create Group <creating_groups_page>` dialog is chosen randomly. 
+* :ref:`Numbering <numbering_page>` - allows to display the ID numbers of all meshing elements or nodes composing your mesh in the viewer.
+* :ref:`Display Mode <display_mode_page>` - allows to select between Wireframe, Shading and Nodes presentation.
+* :ref:`Display Entity <display_entity_page>` - allows to display entities by types (Faces, Edges, Volumes etc.).
+
+.. _quadratic_2d_mode:
+
+* **2D Quadratic** - allows to select between the representation of quadratic edges as broken **lines** or as **arcs**. A default representation can be set in :ref:`Preferences <quadratic_2d_mode_pref>`. Arc representation applies to 1D and 2D elements only.
+* **Orientation of faces** - shows vectors of orientation of faces of the selected mesh. The orientation vector is shown for each 2D mesh element and for each free facet of a 3D mesh element. The vector direction is calculated by the first three nodes of the face produced by vectors n1-n2 and n1-n3.
+* :ref:`Properties <colors_size_page>` - allows to define several visual properties, including color of elements, shrink size, ...
+* :ref:`Transparency <transparency_page>` - allows to change the transparency of mesh elements.
+* :ref:`Controls <quality_page>` - graphically presents various information about the mesh. 
+* **Hide** - allows to hide the selected mesh from the viewer.
+* **Show Only** - allows to display only the selected mesh, hiding all others from the viewer.
+* :ref:`Clipping <clipping_page>` - allows to create cross-sections of the displayed objects.
+* **Dump view** - exports an object from the viewer in bmp, png or jpeg image format.
+* **Change background** - allows to redefine the background color. By default it is black.
+* **View Operations** - allows to show/hide the  visualization toolbar in the Viewer window.
+* **Recording Operations** - allows to show/hide the recording toolbar in the Viewer window.
+
+**Table of Contents**
+
+.. toctree::
+   :maxdepth: 2
+   :titlesonly:
+
+   mesh_infos.rst
+   find_element_by_point.rst
+   numbering.rst
+   display_mode.rst
+   display_entity.rst
+   colors_size.rst
+   transparency.rst
+   clipping.rst
diff --git a/doc/salome/gui/SMESH/input/volume.doc b/doc/salome/gui/SMESH/input/volume.doc
deleted file mode 100644 (file)
index 4d74fcb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
-
-\page volume_page Volume
-
-\n \b Volume mesh quality criterion reflects the volume of meshes of a
-3D object.
-
-<em>To apply the Volume quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Volume Controls > Volume</b> or click
-<em>"Volume"</em> button in the toolbar.
-
-\image html image145.png
-<center><em>"Volume" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image143.gif
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_volume "Volume quality control" operation.  
-
-*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/volume.rst b/doc/salome/gui/SMESH/input/volume.rst
new file mode 100644 (file)
index 0000000..f49b3bd
--- /dev/null
@@ -0,0 +1,22 @@
+.. _volume_page: 
+
+******
+Volume
+******
+
+**Volume** mesh quality criterion reflects the volume of meshes of a 3D object.
+
+*To apply the Volume quality criterion to your mesh:*
+
+.. |img| image:: ../images/image145.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Volume Controls > Volume** or click *"Volume"* button |img| in the toolbar.
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image143.gif
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_volume` filter.
diff --git a/doc/salome/gui/SMESH/input/warping.doc b/doc/salome/gui/SMESH/input/warping.doc
deleted file mode 100644 (file)
index 86ba0c9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*!
-
-\page warping_page Warping
-
-\image html image24.gif
-
-\n \b Warping indicates that a face is not planar and is applied only to
-2D elements with 4 nodes. This quality control criterion is based on a
-projection plane created by:
-<ol>
-<li>bisecting the four element edges,</li>
-<li>creating a point on the plane at the vector average of the
-corners, where the x-axis extends from the point to the bisector on
-edge 2.</li>
-</ol>
-The plane normal is in the direction of the cross product of the
-x-axis and the vector from the origin to the bisector of edge 3. Every
-corner of the quad will then be a distance ?h? from the plane. The
-length of each half edge is measured and the shortest length is
-assigned ?l?. The warp angle is the arcsine of the ratio of the
-projection height ?h? to the half edge length ?l?.
-
-<em>To apply the Warping quality criterion to your mesh:</em>
-<ol>
-<li>Display your mesh in the viewer.</li>
-
-<li>Choose <b>Controls > Face Controls > Warping Angle</b> or click
-<em>"Warping angle"</em> button of the toolbar.
-
-\image html image39.png
-<center><em>"Warping angle" button</em></center>
-
-Your mesh will be displayed in the viewer with its elements colored
-according to the applied mesh quality control criterion:
-
-\image html image97.jpg
-</li>
-</ol>
-
-<br><b>See Also</b> a sample TUI Script of a 
-\ref tui_warping "Warping quality control" operation.  
-
-*/
diff --git a/doc/salome/gui/SMESH/input/warping.rst b/doc/salome/gui/SMESH/input/warping.rst
new file mode 100644 (file)
index 0000000..3cb47f7
--- /dev/null
@@ -0,0 +1,37 @@
+.. _warping_page: 
+
+*******
+Warping
+*******
+
+.. image:: ../images/image24.gif
+       :align: center
+
+**Warping** indicates that a face is not planar and is applied only to
+2D elements with 4 nodes. This quality control criterion is based on a
+projection plane created by:
+
+#. bisecting the four element edges,
+#. creating a point on the plane at the vector average of the corners, where the x-axis extends from the point to the bisector on edge 2.
+
+The plane normal is in the direction of the cross product of the
+x-axis and the vector from the origin to the bisector of edge 3. Every
+corner of the quad will then be a distance *h* from the plane. The
+length of each half edge is measured and the shortest length is
+assigned *l*. The warp angle is the arcsine of the ratio of the
+projection height *h* to the half edge length *l*.
+
+*To apply the Warping quality criterion to your mesh:*
+
+.. |img| image:: ../images/image39.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Warping Angle** or click *"Warping angle"* button |img| of the toolbar.
+
+   Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+       .. image:: ../images/image97.jpg
+                       :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_warping` filter.
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/1d_meshing_hypo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/1d_meshing_hypo.po
new file mode 100644 (file)
index 0000000..118250f
--- /dev/null
@@ -0,0 +1,565 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 004b45a20a744ffea4d3343da07f3dd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:5
+msgid "1D Meshing Hypotheses"
+msgstr ""
+
+# 86fad262db614ff5b687e6d4575e44b7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:9
+msgid "Basic 1D hypothesis specifies:"
+msgstr ""
+
+# 0cffe55995b14ac2ae702078456fcf8d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:8
+msgid "how a :ref:`a1d_algos_anchor` should divide the edge;"
+msgstr ""
+
+# de1aea28d554437e962353fc3e399251
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:9
+msgid ""
+"how a :ref:`a1d_algos_anchor` should divide the group of C1-continuous "
+"edges."
+msgstr ""
+
+# 4101a67e6d984fdc8894696ae57ad18b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:31
+msgid "1D hypotheses can be categorized by type of nodes distribution as follows:"
+msgstr ""
+
+# dfe0bcbd0def470bab5fd53d3558f173
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:16
+msgid "Uniform distribution:"
+msgstr ""
+
+# b5ef1e537944499bb726f2709de38209
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:13
+msgid ":ref:`average_length_anchor`"
+msgstr ""
+
+# fdc4d53d08c748b4996b24b381922024
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:14
+msgid ":ref:`max_length_anchor`"
+msgstr ""
+
+# 646945b8efff4573b136d27f782b24e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:15
+msgid ":ref:`number_of_segments_anchor` with Equidistant distribution"
+msgstr ""
+
+# 1f2e9941069d468a9007789f5610564b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:16
+msgid ":ref:`automatic_length_anchor`"
+msgstr ""
+
+# b2bcc6a61c5646569499bd49437ba22b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:22
+msgid "Constantly increasing or decreasing length of segments:"
+msgstr ""
+
+# 24a07317698d4f7ca649e76eddab2caa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:19
+msgid ":ref:`arithmetic_1d_anchor`"
+msgstr ""
+
+# f1618d2b2b364cabbf62bfda961a8299
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:20
+msgid ":ref:`geometric_1d_anchor`"
+msgstr ""
+
+# 086be4a5bbaa4ee0b1d6f8c63843fbb7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:21
+msgid ":ref:`start_and_end_length_anchor`"
+msgstr ""
+
+# 09c9820b8a2a4a4d94c980cd3133eab3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:22
+msgid ":ref:`number_of_segments_anchor` with Scale distribution"
+msgstr ""
+
+# ee781ed9a4fd46d08293c6a556068f51
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:26
+msgid "Distribution depending on curvature:"
+msgstr ""
+
+# 6f8fb1c713e24e0c9ab60a883453232d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:25
+msgid ":ref:`adaptive_1d_anchor`"
+msgstr ""
+
+# 71739427858f4114ba7556cb23ae3517
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:26
+msgid ":ref:`deflection_1d_anchor`"
+msgstr ""
+
+# c624c4d51045437da0ac9b8e5f4737ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:31
+msgid "Arbitrary distribution:"
+msgstr ""
+
+# 21a4015c89ab48d79f1839cb441b70da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:29
+msgid ":ref:`fixed_points_1d_anchor`"
+msgstr ""
+
+# edb342ebdafc493badb3df1ffd43d68f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:30
+msgid ""
+":ref:`number_of_segments_anchor` \"Number of Segments\" with "
+":ref:`analyticdensity_anchor` or Table Density Distribution"
+msgstr ""
+
+# f1c27584812f4bf4ba9b7bfc11aa5699
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:36
+msgid "Adaptive hypothesis"
+msgstr ""
+
+# 5f9d7dbbbaae4e858e7ed744834f2133
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:38
+msgid ""
+"**Adaptive** hypothesis allows to split edges into segments with a length"
+" that depends on the curvature of edges and faces and is limited by "
+"**Min. Size** and **Max Size**. The length of a segment also depends on "
+"the lengths of adjacent segments (that can't differ more than twice) and "
+"on the  distance to close geometrical entities (edges and faces) to avoid"
+" creation of narrow 2D elements."
+msgstr ""
+
+# 77a9dd0ad94b42239280ee8477c645ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:43
+msgid "**Min size** parameter limits the minimal segment size."
+msgstr ""
+
+# c65d0ae59eb4430c9cb9dc840c24f008
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:44
+msgid "**Max size** parameter defines the length of segments on straight edges."
+msgstr ""
+
+# c8f35ffc68954c699986f225ad24680d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:45
+msgid ""
+"**Deflection** parameter gives maximal distance of a segment from a "
+"curved edge."
+msgstr ""
+
+# 8074ca7c6943489eb587faca286e1fa8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:53
+msgid "**See Also** a :ref:`tui_1d_adaptive` that uses Adaptive hypothesis."
+msgstr ""
+
+# 6933bfa76bf240d48ac1e86ed2fc3a79
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:58
+msgid "Arithmetic Progression hypothesis"
+msgstr ""
+
+# 67b28a7ed2f44ff59afc61045ed1b8e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:60
+msgid ""
+"**Arithmetic Progression** hypothesis allows to split edges into segments"
+" with a length that changes in arithmetic progression (Lk = Lk-1 + d) "
+"beginning from a given starting length and up to a given end length."
+msgstr ""
+
+# d091f0929168432b8599be4e633b3636
+# d7c3e8d76efb4b6f89ecc243430aca0f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:87
+msgid ""
+"The splitting direction is defined by the orientation of the underlying "
+"geometrical edge. **Reverse Edges** list box allows specifying the edges,"
+" for which the splitting should be made in the direction opposite to "
+"their orientation. This list box is usable only if a geometry object is "
+"selected for meshing. In this case it is possible to select edges to be "
+"reversed either directly picking them in the 3D viewer or by selecting "
+"the edges or groups of edges in the Object Browser. Use **Add** button to"
+" add the selected edges to the list."
+msgstr ""
+
+# b60f2b5edee442ff949282b80a9fe815
+# 5ccffba12a6e4b69ac3fc32709e4abf0
+# 6ad5f607d8c2493eb22c219025b1b163
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:65
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:170
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:227
+msgid ""
+":ref:`reversed_edges_helper_anchor` group assists you in defining "
+"**Reversed Edges** parameter."
+msgstr ""
+
+# 6c4e88f8eecf4733bccec96fd0a6147f
+# 4af587f46e6a4d1fbfe07aed5478fe41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:78
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:96
+msgid "**See Also** a sample TUI Script of a :ref:`tui_1d_arithmetic` operation."
+msgstr ""
+
+# 4cf2061318094f2584bfb1dfcb2faea1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:83
+msgid "Geometric Progression hypothesis"
+msgstr ""
+
+# 8c6e5a2ca49440e9b7fb5fc16a9b9c9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:85
+msgid ""
+"**Geometric Progression** hypothesis allows splitting edges into segments"
+" with a length that changes in geometric progression (Lk = Lk-1 * d) "
+"starting from a given **Start Length** and with a given **Common Ratio**."
+msgstr ""
+
+# b147c2168aef4864ad9445d3e81f545a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:90
+msgid ""
+":ref:'reversed_edges_helper_anchor' group assists you in defining "
+"**Reversed Edges** parameter."
+msgstr ""
+
+# ab382baae6a6429c8cfab692687e8be8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:101
+msgid "Deflection hypothesis"
+msgstr ""
+
+# b0fb0c4995874073a9baf66368b4d2d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:103
+msgid ""
+"**Deflection** hypothesis can be applied for meshing curvilinear edges "
+"composing your geometrical object. It defines only one parameter: the "
+"value of deflection (or chord error)."
+msgstr ""
+
+# 19762b93397c4b29a546c596f90ce809
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:105
+msgid ""
+"A geometrical edge is divided into segments of length depending on edge "
+"curvature. The more curved the edge, the shorter the segment. Nodes on "
+"the edge are placed so that the maximum distance between the edge and a "
+"segment approximating a part of edge between two nodes should not exceed "
+"the value of deflection."
+msgstr ""
+
+# f5e2e15def0c420494fd4a6444cf3f05
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:116
+msgid "**See Also** a sample TUI Script of a :ref:`tui_deflection_1d` operation."
+msgstr ""
+
+# c100ce15e826460c8c6708e5d2e5d260
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:121
+msgid "Local Length hypothesis"
+msgstr ""
+
+# fa23f8b4ed594f6ba03c764fe24001a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:123
+msgid ""
+"**Local Length** hypothesis can be applied for meshing of edges composing"
+" your geometrical object. Definition of this hypothesis consists of "
+"setting the **length** of segments, which will approximate these edges, "
+"and the **precision** of rounding."
+msgstr ""
+
+# 53b1305cc3f04666a7a6ef6edce60db5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:125
+msgid ""
+"The **precision** parameter is used to round a *number of segments*, "
+"calculated by dividing the *edge length* by the specified **length** of "
+"segment, to the higher integer if the *remainder* exceeds the "
+"**precision** and to the lower integer otherwise. Use value 0.5 to "
+"provide rounding to the nearest integer, 1.0 for the lower integer, 0.0 "
+"for the higher integer. Default value is 1e-07."
+msgstr ""
+
+# 72fc0a4076ea4a93b08374e05df59567
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:128
+msgid ""
+"For example: if *edge length* is 10.0 and the segment **length** is 3.0 "
+"then their division gives 10./3. = 3.33(3) and the *remainder* is "
+"0.33(3). If **precision** is less than 0.33(3) then the edge is divided "
+"into 3 segments. If **precision** is more than 0.33(3) then the edge is "
+"divided into 4 segments."
+msgstr ""
+
+# 1c4881233eab426eae3cad02798e9e6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:146
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_average_length` "
+"hypothesis operation."
+msgstr ""
+
+# 195635da2ded4460afce43748b85a522
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:152
+msgid "Max Size"
+msgstr ""
+
+# 51e210538ae64364a24aaa64fe065bf0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:154
+msgid ""
+"**Max Size** hypothesis allows splitting geometrical edges into segments "
+"not longer than the given length. Definition of this hypothesis consists "
+"of setting the maximal allowed **length** of segments. **Use preestimated"
+" length** check box lets you use **length** automatically calculated "
+"basing on size of your geometrical object, namely as diagonal of bounding"
+" box divided by ten. The divider can be changed via "
+":ref:`diagonal_size_ratio_pref` preference parameter. **Use preestimated "
+"length** check box is enabled only if the geometrical object has been "
+"selected before hypothesis definition."
+msgstr ""
+
+# 3ec80bcd3e5d4e389b415192cecd9ded
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:164
+msgid "Number of Segments hypothesis"
+msgstr ""
+
+# 2f5a82b3f0df4f09b9fb863e794011ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:166
+msgid ""
+"**Number of Segments** hypothesis can be applied for approximating edges "
+"by a definite number of mesh segments with length depending on the "
+"selected type of distribution of nodes. The default number of segments "
+"can be set via :ref:`nb_segments_pref` preference parameter."
+msgstr ""
+
+# b4ceedb976fd4cb3ba01bb43d5605dd0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:168
+msgid ""
+"The direction of the splitting is defined by the orientation of the "
+"underlying geometrical edge. **Reverse Edges** list box allows to specify"
+" the edges for which the splitting should be made in the direction "
+"opposing to their orientation. This list box is enabled only if the "
+"geometry object is selected for the meshing. In this case it is possible "
+"to select edges to be reversed either by directly picking them in the 3D "
+"viewer or by selecting the edges or groups of edges in the Object "
+"Browser."
+msgstr ""
+
+# 49a79b130d134cbb8474ca4038c17e5a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:172
+msgid ""
+"You can set the type of node distribution for this hypothesis in the "
+"**Hypothesis Construction** dialog bog :"
+msgstr ""
+
+# 606ec954acf545b1985044f64396c155
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:177
+msgid ""
+"**Equidistant Distribution** - all segments will have the same length, "
+"you define only the **Number of Segments**."
+msgstr ""
+
+# fbed83f6f7ad4bfa96532ccd7d96a0bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:179
+msgid ""
+"**Scale Distribution** - length of segments gradually changes depending "
+"on the **Scale Factor**, which is a ratio of the first segment length to "
+"the last segment length."
+msgstr ""
+
+# f9f0925545cc4dc4a60a2bc2c14e5fbd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:181
+msgid ""
+"Length of segments changes in geometric progression with the common ratio"
+" (A) depending on the **Scale Factor** (S) and **Number of Segments** (N)"
+" as follows: <code> A = S**(1/(N-1))</code>. For an edge of length L, "
+"length of the first segment is"
+msgstr ""
+
+# cb4fd106e14148f9b1067acd152de378
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:192
+msgid ""
+"**Distribution with Analytic Density** - you input the formula, which "
+"will rule the change of length of segments and the module shows in the "
+"plot the density function curve in red and the nodedistribution as blue "
+"crosses."
+msgstr ""
+
+# 2981a618040c455b8a33bc91b0ed133d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:201
+msgid "Analytic Density"
+msgstr ""
+
+# c2415e1dfe4a404f9c7f32e83e5ce0d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:203
+msgid ""
+"The node distribution is computed so that to have the density function "
+"integral on the range between two nodes equal for all segments."
+msgstr ""
+
+# b3be5eda49174bedbde04c3261e7c07e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:208
+msgid ""
+"**Distribution with Table Density** - you input a number of pairs **t - "
+"F(t)**, where **t** ranges from 0 to 1, and the module computes the "
+"formula, which will rule the change of length of segments and shows in "
+"the plot the density function curve in red and the node distribution as "
+"blue crosses. The node distribution is computed in the same way as for "
+":ref:`analyticdensity_anchor`. You can select the **Conversion mode** "
+"from **Exponent** and **Cut negative**."
+msgstr ""
+
+# 2c691371aa3e421bbd47bc5a1f61e756
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:214
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_deflection_1d` hypothesis"
+" operation."
+msgstr ""
+
+# 8fba9bba46a2466081ef68543e3aaa65
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:221
+msgid "Start and End Length hypothesis"
+msgstr ""
+
+# 6923eaee87c74f3a9068e15baa112ce4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:223
+msgid ""
+"**Start and End Length** hypothesis allows to divide a geometrical edge "
+"into segments so that the first and the last segments have a specified "
+"length. The length of medium segments changes with automatically chosen "
+"geometric progression."
+msgstr ""
+
+# b9b5660f27ec4fbd8c2af3c653be6250
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:225
+msgid ""
+"The direction of the splitting is defined by the orientation of the "
+"underlying geometrical edge. **Reverse Edges** list box allows to specify"
+" the edges, for which the splitting should be made in the direction "
+"opposing to their orientation. This list box is enabled only if the "
+"geometry object is selected for the meshing. In this case it is possible "
+"to select edges to be reversed either by directly picking them in the 3D "
+"viewer or by selecting the edges or groups of edges in the Object "
+"Browser."
+msgstr ""
+
+# f8cd39ac36d54c518c08b6cc74cea1c3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:239
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_start_and_end_length` "
+"hypothesis operation."
+msgstr ""
+
+# 4c846b04b34b49fcb87cbfa89cfa7e0a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:245
+msgid "Automatic Length"
+msgstr ""
+
+# 52fc64e5fd41412dbb1945c98092ebb2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:247
+msgid ""
+"The dialog box prompts you to define the quality of the future mesh by "
+"only one parameter, which is **Fineness**, ranging from 0 (coarse mesh, "
+"low number of segments) to 1 (extremely fine mesh, great number of "
+"segments)."
+msgstr ""
+
+# 4c413256d67e4a98aafa8e8b9c98e56b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:252
+msgid ""
+"Compare one and the same object (sphere) meshed with minimum and maximum "
+"value of this parameter."
+msgstr ""
+
+# 85443717ca1240b1becda59b7316192d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:269
+msgid "Fixed Points hypothesis"
+msgstr ""
+
+# ba6121ee533e44fc908101a79a72b5c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:271
+msgid ""
+"**Fixed Points** hypothesis allows splitting edges through a set of "
+"points parametrized on the edge (from 1 to 0) and a number of segments "
+"for each interval limited by the points."
+msgstr ""
+
+# 11d4d0cdcf96464492c236b7131824b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:276
+msgid ""
+"It is possible to check in **Same Nb. Segments for all intervals** option"
+" and to define one value for all intervals."
+msgstr ""
+
+# 32729bb178134117bd5426aa77af8b12
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:278
+msgid ""
+"The splitting direction is defined by the orientation of the underlying "
+"geometrical edge. **Reverse Edges** list box allows to specify the edges "
+"for which the splitting should be made in the direction opposite to their"
+" orientation. This list box is enabled only if the geometrical object is "
+"selected for meshing. In this case it is possible to select the edges to "
+"be reversed either directly picking them in the 3D viewer or selecting "
+"the edges or groups of edges in the Object Browser."
+msgstr ""
+
+# b16d91c1530f4b638bd208ddff660d04
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:280
+msgid ""
+":ref:`reversed_edges_helper_anchor`  group assists in defining **Reversed"
+" Edges** parameter."
+msgstr ""
+
+# f5f9b331c9a64c788d3c37e2743a3587
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:289
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_fixed_points` hypothesis "
+"operation."
+msgstr ""
+
+# 9e5041ec60644fc7a926ce0f6ba229ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:295
+msgid "Reversed Edges Helper"
+msgstr ""
+
+# 7ae7f217195445b399770e626dfe9857
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:300
+msgid ""
+"**Helper** group assists in defining **Reversed Edges** parameter of the "
+"hypotheses depending on edge direction."
+msgstr ""
+
+# 3b468927664d456ab32566aaf29301d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:302
+msgid ""
+"**Show whole geometry** check-box allows seeing the whole geometrical "
+"model in the 3D Viewer, which can help to understand the location of a "
+"set of edges within the model."
+msgstr ""
+
+# 93f2b49b20724274a478612609fc7b1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:304
+msgid ""
+"**Propagation chains** group allows defining **Reversed Edges** for "
+"splitting opposite edges of quadrilateral faces in a logically uniform "
+"direction. When this group is activated, the list is filled with "
+"propagation chains found within the shape on which a hypothesis is "
+"assigned. When a chain is selected in the list its edges are shown in the"
+" Viewer with arrows, which enables choosing a common direction for all "
+"chain edges. **Reverse** button inverts the common direction of chain "
+"edges. **Add** button is active if some edges of a chain have a different"
+" direction, so you can click **Add** button to add them to **Reversed "
+"Edges** list."
+msgstr ""
+
+# 97e86e78b2844d0691ff69afce408f49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst:313
+msgid ""
+"Alternatively, uniform direction of edges of one propagation chain can be"
+" achieved by :ref:`constructing_submeshes_page` on one edge of the chain "
+"and assigning a :ref:`propagation_anchor` additional hypothesis. "
+"Orientation of this edge (and hence of all the rest edges of the chain) "
+"can be controlled by using **Reversed Edges** field."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/2d_meshing_hypo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/2d_meshing_hypo.po
new file mode 100644 (file)
index 0000000..8a6985d
--- /dev/null
@@ -0,0 +1,258 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e09a6a3b97b64b3cb872ab20d9d9432d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:5
+msgid "2D Meshing Hypotheses"
+msgstr ""
+
+# 3c189747271e4baab0a6a8be1ebfe617
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:7
+msgid ":ref:`max_element_area_anchor`"
+msgstr ""
+
+# 626c5252da5d428fa87f21870252b8ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:8
+msgid ":ref:`length_from_edges_anchor`"
+msgstr ""
+
+# 0a330d38fd7a439ebca34824f94ce24a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:9
+msgid ":ref:`hypo_quad_params_anchor`"
+msgstr ""
+
+# e4c3135156f04dc8a7ab755cce1c926e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:14
+msgid "Max Element Area"
+msgstr ""
+
+# bce203b092324a5cae81a8d3cecd0775
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:16
+msgid ""
+"**Max Element Area** hypothesis is applied for meshing of faces composing"
+" your geometrical object. Definition of this hypothesis consists of "
+"setting the **maximum area** of mesh faces, which will compose the mesh "
+"of these faces."
+msgstr ""
+
+# 23f4d39a6f8e41a9afcb638757c9de85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:29
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_max_element_area` "
+"hypothesis operation."
+msgstr ""
+
+# bc9dd7bbc2d84918ae8ed0c766421231
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:34
+msgid "Length from Edges"
+msgstr ""
+
+# 7e64f4443d73462497945de78b7d41b7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:36
+msgid ""
+"**Length from edges** hypothesis defines the maximum linear size of mesh "
+"faces as an average length of mesh edges approximating the meshed face "
+"boundary."
+msgstr ""
+
+# 1b22303db2b146a891123ae5a612fda8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:38
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_length_from_edges` "
+"hypothesis operation."
+msgstr ""
+
+# 27cb49c4b74e42a794fe9cdaf10ba349
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:43
+msgid "Quadrangle parameters"
+msgstr ""
+
+# 726853c1c3f444bb853c961e3766525c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:51
+msgid "**Quadrangle parameters** is a hypothesis for :ref:`quad_ijk_algo_page`."
+msgstr ""
+
+# a22ddb3e0ac443f5b199e4efd2ba09e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:53
+msgid ""
+"**Transition** tab is used to define the algorithm of transition between "
+"opposite sides of the face with a different number of segments on them. "
+"The following types of transition algorithms are available:"
+msgstr ""
+
+# 1c874aacddc04fb283fa3a4baeea4a78
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:55
+msgid ""
+"**Standard** is the default case, when both triangles and quadrangles are"
+" possible in the transition area along the finer meshed sides."
+msgstr ""
+
+# 65541b3950864c14a539742e2cf126af
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:56
+msgid ""
+"**Triangle preference** forces building only triangles in the transition "
+"area along the finer meshed sides."
+msgstr ""
+
+# a5b18b9dbb824e7092954715a0d8bc8e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:59
+msgid ""
+"This type corresponds to **Triangle Preference** additional hypothesis, "
+"which is obsolete now."
+msgstr ""
+
+# cbdd1ae9654e473094535be74f398e2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:61
+msgid ""
+"**Quadrangle preference** forces building only quadrangles in the "
+"transition area along the finer meshed sides. This hypothesis has a "
+"restriction: the total quantity of segments on all four face sides must "
+"be even (divisible by 2)."
+msgstr ""
+
+# 1d2c0415ad6448de9ca8cc4888852887
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:64
+msgid ""
+"This type corresponds to **Quadrangle Preference** additional hypothesis,"
+" which is obsolete now."
+msgstr ""
+
+# 86fed1d6a87d4261a98f062232709402
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:66
+msgid ""
+"**Quadrangle preference (reversed)** works in the same way and with the "
+"same restriction as **Quadrangle preference**, but the transition area is"
+" located along the coarser meshed sides."
+msgstr ""
+
+# f34e676eda8046a189ea5cd908adc1c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:67
+msgid ""
+"**Reduced** type forces building only quadrangles and the transition "
+"between the sides is made gradually, layer by layer. This type has a "
+"limitation on the number of segments: one pair of opposite sides must "
+"have the same number of segments, the other pair must have an even total "
+"number of segments. In addition, the number of rows between sides with "
+"different discretization should be enough for the transition. Following "
+"the fastest transition pattern, three segments become one (see the image "
+"below), hence the least number of face rows needed to reduce from Nmax "
+"segments to Nmin segments is log<sub>3</sub>( Nmax / Nmin ). The number "
+"of face rows is equal to the number of segments on each of equally "
+"discretized sides."
+msgstr ""
+
+# ba8a0131a1ce4d6a8c769c79ca9ccca3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:75
+msgid ""
+"**Base vertex** tab allows using Quadrangle: Mapping algorithm for "
+"meshing of trilateral faces. In this case it is necessary to select the "
+"vertex, which will be used as the forth degenerated side of quadrangle."
+msgstr ""
+
+# ae5ff703b7b241049a1424f8be84add7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:95
+msgid ""
+"This parameter can be also used to mesh a segment of a circular face. "
+"Please, consider that there is a limitation on the selection of the "
+"vertex for the faces built with the angle > 180 degrees (see the "
+"picture)."
+msgstr ""
+
+# 36c47565de424a39bff9f2d3b1b0f2b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:103
+msgid ""
+"In this case, selection of a wrong vertex for the **Base vertex** "
+"parameter will generate a wrong mesh. The picture below shows the good "
+"(left) and the bad (right) results of meshing."
+msgstr ""
+
+# a9b6a86af1fa41bf984f3466076bf2b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:117
+msgid ""
+"**Enforced nodes** tab allows defining points, where the algorithm should"
+" create nodes. There are two ways to define positions of the enforced "
+"nodes."
+msgstr ""
+
+# cefb6744782b466f9c8320db9d4399cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:119
+msgid ""
+"**Vertices** group allows to set up shapes whose vertices will  define "
+"positions of the enforced nodes. Only vertices successfully projected to "
+"the meshed face and located close enough to the meshed face will be used "
+"to create the enforced nodes."
+msgstr ""
+
+# 524446d9898844208f44b2963b1fc521
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:120
+msgid ""
+"**Points** group allows to explicitly define coordinates of points used "
+"to create the enforced nodes. Only points successfully projected to the "
+"meshed face and located close enough to the meshed face will be used to "
+"create the enforced nodes."
+msgstr ""
+
+# 4f40e9dbcb9345d7864be5c424006f41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:123
+msgid "**Enforced nodes** cannot be created at **Reduced** transition type."
+msgstr ""
+
+# f06dce07c1944aeeb641ca1dbc820e5b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:126
+msgid "Let us see how the algorithm works:"
+msgstr ""
+
+# c803bbb4162541b293d406dd2b4830c4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:126
+msgid ""
+"Initially positions of nodes are computed without taking into account the"
+" enforced vertex (yellow point)."
+msgstr ""
+
+# 1ae3092675794e7f8784c2e7aecd9726
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:134
+msgid ""
+"Then the node closest to the enforced vertex is detected. Extreme nodes "
+"of the row and column of the detected node are used to create virtual "
+"edges (yellow lines) ending at the enforced vertex."
+msgstr ""
+
+# 53ca82d63dca4b5f8c582ef147410fff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:141
+msgid ""
+"Consequently, the meshed face is divided by the virtual edges into four "
+"quadrilateral sub-domains each of which is meshed as usually: the nodes "
+"of the row and column of the detected node are moved to the virtual edges"
+" and the quadrilateral elements are constructed."
+msgstr ""
+
+# 2824cf7b8268406f896ffa7b16377973
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:150
+msgid ""
+"If there are several enforced vertices, the algorithm is applied "
+"recursively to the formed sub-domains."
+msgstr ""
+
+# 5a699f46aaf34d3e83d8349558155473
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst:152
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_quadrangle_parameters` "
+"hypothesis."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_filters.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_filters.po
new file mode 100644 (file)
index 0000000..e0d9eac
--- /dev/null
@@ -0,0 +1,75 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4c761ceb3e2b4589b9322427cd60a721
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:5
+msgid "About filters"
+msgstr ""
+
+# 6b9203e61ded4843bca733e95c9506bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:7
+msgid ""
+"**Filters** allow picking only the mesh elements satisfying to a specific"
+" condition or a set of conditions. Filters can be used to create or edit "
+"mesh groups, remove elements from the mesh, control mesh quality by "
+"different parameters, etc."
+msgstr ""
+
+# 2f2442981da04ae390067a60888985b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:9
+msgid ""
+"Several criteria can be combined together by using logical operators "
+"*AND* and *OR*. In addition, a filter criterion can be reverted using "
+"logical operator *NOT*."
+msgstr ""
+
+# b4f41bb37d9b46ada354aec2684e8658
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:11
+msgid ""
+"Some filtering criteria use the functionality of "
+":ref:`quality_page`:\"mesh quality controls\" to filter mesh nodes / "
+"elements by specific characteristic (Area, Length, etc)."
+msgstr ""
+
+# 62a6a4834fcd4a23889013edf25b754f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:13
+msgid "The functinality of mesh filters is available in both GUI and TUI modes:"
+msgstr ""
+
+# f5f025a85355430caf590bf217ce80e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:15
+msgid ""
+"In GUI, filters are available in some dialog boxes via \"Set Filters\" "
+"button, clicking on which opens the dialog box allowing to specify the "
+"list of filter criteria to be applied to the current selection. See "
+":ref:`selection_filter_library_page` page to learn more about selection "
+"filters and their usage in GUI."
+msgstr ""
+
+# 06ad9d5a34d14a1d906a06c5cdfa2dc7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_filters.rst:17
+msgid ""
+"In Python scripts, filters can be used to choose only some mesh entities "
+"(nodes or elements) for the operations, which require the list of "
+"entities as input parameter (create/modify group, remove nodes/elements, "
+"etc) and for the operations, which accept objects (groups, sub-meshes) as"
+" input parameter. The page :ref:`tui_filters_page` provides examples of "
+"the filters usage in Python scripts."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_hypo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_hypo.po
new file mode 100644 (file)
index 0000000..1d1b3e0
--- /dev/null
@@ -0,0 +1,176 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# cf5c5ca41bf34fb1ad6c3de88dd1d060
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:5
+msgid "About Hypotheses"
+msgstr ""
+
+# 81550c4a85c94e458babb3434b2da0f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:7
+msgid ""
+"**Hypotheses** represent boundary conditions which will be taken into "
+"account by meshing algorithms. The hypotheses allow you to manage the "
+"level of detail of the resulting mesh: when applying different hypotheses"
+" with different parameters you can preset the quantity or size of "
+"elements which will compose your mesh. So, it will be possible to "
+"generate a coarse or a more refined mesh."
+msgstr ""
+
+# 8c7553e9086446319f1133e6c2fa42a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:9
+msgid "The choice of a hypothesis depends on the selected algorithm."
+msgstr ""
+
+# 849ac0846ee64c26a9c1bc76c9ce81fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:11
+msgid ""
+"Hypotheses are created during creation and edition of "
+":ref:`constructing_meshes_page`:\"meshes\" and "
+":ref:`constructing_submeshes_page`:\"sub-meshes\". Once created a "
+"hypotheses can be reused during creation and edition of other meshes and "
+"sub-meshes. All created hypotheses and algorithms are present in the "
+"Object Browser in *Hypotheses* and *Algorithms* folders correspondingly. "
+"It is possible to open a dialog to modify the parameters of a hypothesis "
+"from its context menu. This menu also provides  **Unassign** command that"
+" will unassign the hypothesis from all meshes and sub-meshes using it. "
+"Modification of any parameter of a hypothesis and its unassignment leads "
+"to automatic removal of elements generated using it."
+msgstr ""
+
+# 274cef5d5ea04de697c378a00fba0f75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:16
+msgid "In  **MESH** there are the following Basic Hypotheses:"
+msgstr ""
+
+# 71d2e621d7324f0ebb6ceb26cc82ab88
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:28
+msgid ":ref:`a1d_meshing_hypo_page` (for meshing of **edges**):"
+msgstr ""
+
+# 3448a2d7d3d34e969a0c77b659031f3a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:19
+msgid ":ref:`number_of_segments_anchor`"
+msgstr ""
+
+# b7a48255d4e04b40aa8f21ac290aafc7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:20
+msgid ":ref:`average_length_anchor`"
+msgstr ""
+
+# 73bde0a663a74b129cc144e2e6320bad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:21
+msgid ":ref:`max_length_anchor`"
+msgstr ""
+
+# 2ab941e1ce4d43c19545dcef537e3302
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:22
+msgid ":ref:`adaptive_1d_anchor`"
+msgstr ""
+
+# d202e9fcfb904f519d01d6ef62e127c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:23
+msgid ":ref:`arithmetic_1d_anchor`"
+msgstr ""
+
+# d002a42bc00c4198b6848fb367705e1a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:24
+msgid ":ref:`geometric_1d_anchor`"
+msgstr ""
+
+# 08a40e5172de48a796fee45cd666e649
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:25
+msgid ":ref:`start_and_end_length_anchor`"
+msgstr ""
+
+# 46f1c6a5ac664195bce56d33434ddd68
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:26
+msgid ":ref:`deflection_1d_anchor`"
+msgstr ""
+
+# 076afced002441818a1b12f92f8b3108
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:27
+msgid ":ref:`automatic_length_anchor`"
+msgstr ""
+
+# 1424e2ee42694e7ba9ad71610b503d67
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:28
+msgid ":ref:`fixed_points_1d_anchor`"
+msgstr ""
+
+# 9c513d5204534df0a79b9a7f5c635cdc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:30
+msgid ":ref:`a2d_meshing_hypo_page` (for meshing of **faces**):"
+msgstr ""
+
+# 73d34e2054e140ea86e4ad6010c0a78b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:32
+msgid ":ref:`max_element_area_anchor`"
+msgstr ""
+
+# 68b2a01b7abb4ee087a50db8cb7aecf0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:33
+msgid ":ref:`length_from_edges_anchor`"
+msgstr ""
+
+# d22c0f63c7c24df686de9435ba9f30c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:34
+msgid ":ref:`hypo_quad_params_anchor`"
+msgstr ""
+
+# 2d7fb7b4e93f43209fc61f61b5988406
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:36
+msgid "3D Hypothesis (for meshing of **volumes**):"
+msgstr ""
+
+# 302ca3189198469085114e21b9fe769a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:38
+msgid ":ref:`max_element_volume_hypo_page`"
+msgstr ""
+
+# 5207e8583dc9412bbd2b9ac42fb4e0e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:42
+msgid "There also exist :ref:`additional_hypo_page`:"
+msgstr ""
+
+# a02afdc27184497ea23d14034586ed6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:44
+msgid ":ref:`propagation_anchor`"
+msgstr ""
+
+# d9416ba6db414d4ab1550d022658ef2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:45
+msgid ":ref:`propagofdistribution_anchor`"
+msgstr ""
+
+# db07dc3d875244ab8717f460c6a9ed69
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:46
+msgid ":ref:`viscous_layers_anchor`"
+msgstr ""
+
+# 10d4f8d7345041379fcd7107912ff551
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:47
+msgid ":ref:`quadratic_mesh_anchor`"
+msgstr ""
+
+# e4cee0c6f5164f2ebdda479a43ad432a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_hypo.rst:48
+msgid ":ref:`quadrangle_preference_anchor`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_meshes.po
new file mode 100644 (file)
index 0000000..99a6cf7
--- /dev/null
@@ -0,0 +1,265 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 11:57+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# bbd67fcb9bc849ffaa47f4f37c559bf7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:5
+msgid "About meshes"
+msgstr ""
+
+# a6955211ab2a48978a482d711a509878
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:7
+msgid ""
+"**MESH** represents a discrete approximation of a subset of the three-"
+"dimensional space by `elementary geometrical elements`_."
+msgstr ""
+
+# 593925037f2143348fa2405c2abf4c80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:9
+msgid ""
+"A SALOME study can contain multiple meshes, but they do not implicitly "
+"compose one super-mesh, and finally each of them can be used (e.g. "
+"exported) only individually."
+msgstr ""
+
+# 9bbe3f87295e42bba99b865e81ae92b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:11
+msgid "Mesh module provides several ways to create the mesh:"
+msgstr ""
+
+# a8667990ca9a4978985fc15bf31ccd8f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:13
+msgid ""
+"The main way is to :ref:`constructing_meshes_page` on the basis of the "
+"geometrical shape produced in the Geometry module. This way implies "
+"selection of"
+msgstr ""
+
+# b233fa907d3648feb4cd6dc4cc472f7a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:15
+msgid "a geometrical object (**main shape**) and"
+msgstr ""
+
+# ddeb34ea50a141dc86cf5c193550d735
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:16
+msgid ""
+"**meshing parameters** ( :ref:`basic_meshing_algos_page` and "
+"characteristics (e.g. element size) of a required mesh encapsulated in "
+":ref:`about_hypo_page` objects)."
+msgstr ""
+
+# 40217c32a4cf4aebb3e40671f1eada9b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:18
+msgid ""
+"Construction of :ref:`constructing_submeshes_page` allows to discretize "
+"some sub-shapes of the main shape, for example a face, using the meshing "
+"parameters that differ from those used for other sub-shapes. Meshing "
+"parameters of meshes and sub-meshes can be :ref:`editing_meshes_page`. "
+"(Upon edition only mesh entities generated using changed meshing "
+"parameters are removed and will be re-computed)."
+msgstr ""
+
+# 83c44881ecf64a0e83af2dba8c3daeaa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:22
+msgid ""
+"Algorithms and hypotheses used at mesh level are referred to as *global* "
+"ones and those used at sub-mesh level are referred to as *local* ones."
+msgstr ""
+
+# 02df38d2611d4ceca0ec7e13af4300f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:24
+msgid ""
+"Bottom-up way, using :ref:`modifying_meshes_page` operations, especially "
+":ref:`extrusion_page` and :ref:`revolution_page`. To create an empty mesh"
+" not based on geometry, use the same dialog as to "
+":ref:`constructing_meshes_page` but specify neither the geometry nor "
+"meshing algorithms."
+msgstr ""
+
+# e626515a752544a5b5c5aef8b6060b2b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:26
+msgid ""
+"The mesh can be :ref:`importing_exporting_meshes_page` from (and exported"
+" to) the file in MED, UNV, STL, CGNS, DAT, GMF and SAUVE formats."
+msgstr ""
+
+# 885d481a9e524431bce283c16aa9cad0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:28
+msgid ""
+"The 3D mesh can be generated from the 2D mesh not based on geometry, "
+"which was either :ref:`importing_exporting_meshes_page` or created in "
+"other way. To setup the meshing parameters of a mesh not based on "
+"geometry, just invoke :ref:`editing_meshes_page` command on your 2D mesh."
+msgstr ""
+
+# 7132296945a343ee95409e55a308ed71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:30
+msgid "Several meshes can be :ref:`building_compounds_page` into a new mesh."
+msgstr ""
+
+# 18a83115d76142c7b2e10e8b1407993f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:32
+msgid ""
+"The whole mesh or its part (sub-mesh or group) can be "
+":ref:`copy_mesh_page` into a new mesh."
+msgstr ""
+
+# b0ba309fef194333b29189b6995f8eeb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:34
+msgid ""
+"A new mesh can be created from a transformed, e.g. "
+":ref:`translation_page`, part of the mesh."
+msgstr ""
+
+# a9e6fa513d8348a6b3c381daab86e819
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:37
+msgid ""
+"Meshes can be edited using the MESH functions destined for "
+":ref:`modifying_meshes_page` of meshes."
+msgstr ""
+
+# 8a46a1bb6fb248f78f8979a3ad36ad98
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:39
+msgid "Attractive meshing capabilities include:"
+msgstr ""
+
+# 0e136eb5e8894447be7b3ab96cfbc686
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:41
+msgid ""
+"3D and 2D :ref:`viscous_layers_anchor` (boundary layers of highly "
+"stretched elements beneficial for high quality viscous computations);"
+msgstr ""
+
+# 7ef84d1258894100a88cae6cb66735eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:42
+msgid ""
+"automatic conformal transition between tetrahedral and hexahedral sub-"
+"meshes."
+msgstr ""
+
+# e4a96ec14ead4e2f8c4fc6c3140acdfa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:44
+msgid ""
+"The **structure** of a SALOME mesh is described by nodes and elements "
+"based on these nodes. The geometry of an element is defined by the "
+"sequence of nodes constituting it and the :ref:`connectivity_page` "
+"(adopted from MED library). Definition of the element basing on the "
+"elements of a lower dimension is NOT supported."
+msgstr ""
+
+# 056ea079ede346ec8dc2c83e4cb7178a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:48
+msgid "The mesh can include the following entities:"
+msgstr ""
+
+# efdffee80b7340cab48a496d0f4160dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:50
+msgid ""
+"**Node** - a mesh entity defining a position in 3D space with coordinates"
+" (x, y, z)."
+msgstr ""
+
+# f67ab5a07db443269e10005492f88c64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:51
+msgid "**Edge** (or segment) - 1D mesh element linking two nodes."
+msgstr ""
+
+# 945cca5fbefc426bb3a1085eb7f7941c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:52
+msgid ""
+"**Face** - 2D mesh element representing a part of surface bound by links "
+"between face nodes. A face can be a triangle, quadrangle or polygon."
+msgstr ""
+
+# f9a85025f9734dbe86a1d00fc71901ab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:53
+msgid ""
+"**Volume** - 3D mesh element representing a part of 3D space bound by "
+"volume facets. Nodes of a volume describing each facet are defined by the"
+" :ref:`connectivity_page`. A volume can be a tetrahedron, hexahedron, "
+"pentahedron, pyramid, hexagonal prism or polyhedron."
+msgstr ""
+
+# 4225f83b0bd840369cbc2865b6d15192
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:54
+msgid "**0D** element - mesh element defined by one node."
+msgstr ""
+
+# 677f8fe39ee94e6db57f3bf7060717eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:55
+msgid "**Ball** element - discrete mesh element defined by a node and a diameter."
+msgstr ""
+
+# b2bfe06dd8c346dd9afe5838abde53f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:58
+msgid ""
+"Every mesh entity has an attribute associating it to a sub-shape it is "
+"generated on (if any). The node generated on the geometrical edge or "
+"surface in addition stores its position in parametric space of the "
+"associated geometrical entity. This attribute is set up by meshing "
+"algorithms generating elements and nodes."
+msgstr ""
+
+# 4628312683d144fea8212d8214344361
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:60
+msgid ""
+"Mesh entities are identified by integer IDs starting from 1. Nodes and "
+"elements are counted separately, i.e. there can be a node and element "
+"with the same ID."
+msgstr ""
+
+# b1f9d522ea62433ebe533718f1339075
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:63
+msgid ""
+"SALOME supports elements of second order, without a central node "
+"(quadratic triangle, quadrangle, polygon, tetrahedron, hexahedron, "
+"pentahedron and pyramid) and with central nodes (bi-quadratic triangle "
+"and quadrangle and tri-quadratic hexahedron)."
+msgstr ""
+
+# 32aeee3bc51e400cbd796f90ab8ed466
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:66
+msgid "Quadratic mesh can be obtained in three ways:"
+msgstr ""
+
+# c0b41f83bb3c47599d98572d8c2c6ce8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:68
+msgid ""
+"Using a global :ref:`quadratic_mesh_anchor` hypothesis. (Elements with "
+"the central node are not generated in this way)."
+msgstr ""
+
+# d997d078e82f4dbb8b427bfacb344906
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:69
+msgid "Using :ref:`convert_to_from_quadratic_mesh_page` operation."
+msgstr ""
+
+# 5bef51942d2c47148f312db810ab424c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_meshes.rst:70
+msgid ""
+"Using an appropriate option of some meshing algorithms, which generate "
+"elements of several dimensions starting from mesh segments."
+msgstr ""
+
+# e8043eb95dac4ea4a0767e3fa3b58b45
+#~ msgid ""
+#~ "**MESH** represents a discrete approximation"
+#~ " of a subset of the three-"
+#~ "dimensional space by `mesh_entities`_."
+#~ msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_quality_controls.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_quality_controls.po
new file mode 100644 (file)
index 0000000..20d0a90
--- /dev/null
@@ -0,0 +1,252 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1ee8b31425374381af2cfb8401ef4f22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:5
+msgid "About quality controls"
+msgstr ""
+
+# f6ab5ca061f14d87958b45a6eccb1867
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:8
+msgid ""
+"**Mesh quality control** in MESH is destined for visual control of the "
+"generated mesh."
+msgstr ""
+
+# a45fbb955cd7401d9e4a8aae1f14bb08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:10
+msgid ""
+"Application of a definite quality control consists of usage of the "
+"corresponding algorithm, which calculates a value of a definite geometric"
+" characteristic (Area, Length of edges, etc) for all meshing elements, "
+"composing your mesh. Then all meshing elements are colored according the "
+"calculated values. The reference between the coloring of the meshing "
+"elements and these calculated values is shown with the help of a scalar "
+"bar, which is displayed near the presentation of your mesh."
+msgstr ""
+
+# ded5b6f9b30f4033bdf008efac6be875
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:12
+msgid ""
+"There are four types of quality controls, corresponding to node, edge, "
+"face and volume entity type."
+msgstr ""
+
+# 300e980259b048168030a8045bb7ef99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:14
+msgid "Node quality controls:"
+msgstr ""
+
+# a56a842402c748b1a450684ac448f30b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:16
+msgid ":ref:`free_nodes_page`"
+msgstr ""
+
+# 9579927bc68945e7bb57df2cc60bcc7e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:17
+msgid ":ref:`double_nodes_control_page`"
+msgstr ""
+
+# eb9a884d72b84a20a80ef86bd2016aa4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:20
+msgid "Edge quality controls:"
+msgstr ""
+
+# de4c7ad561754197886c465f7ba9b493
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:22
+msgid ":ref:`free_borders_page`"
+msgstr ""
+
+# 514b8747c33343508f22259c2745a0d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:23
+msgid ":ref:`length_page`"
+msgstr ""
+
+# 29ca9e18e3044f728d2bbabd9daf70ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:24
+msgid ":ref:`borders_at_multi_connection_page`"
+msgstr ""
+
+# 1f2a0b4bba2d49938eb08cd4fd88e506
+# 9f94241b84ec424093f789232f7741ca
+# 89e8eaaee4c442cdbef054f7b3e5e80f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:53
+msgid ":ref:`double_elements_page`"
+msgstr ""
+
+# f848afd5310a462dbab6c26cb8a547a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:28
+msgid "Face quality controls:"
+msgstr ""
+
+# 0aa1f1e12ed94d5b8e66db9a11001bf1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:30
+msgid ":ref:`free_edges_page`"
+msgstr ""
+
+# 72064f0d04994068b33a360cdbba28e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:31
+msgid ":ref:`free_faces_page`"
+msgstr ""
+
+# a129a1a3d9264e9bb1c59001e5bd5215
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:32
+msgid ":ref:`bare_border_faces_page`"
+msgstr ""
+
+# ac50d8b3124c4ef4b365f04a6501d770
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:33
+msgid ":ref:`over_constrained_faces_page`"
+msgstr ""
+
+# 518ba97e1b04492e8a65a09fc3e34c36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:34
+msgid ":ref:`length_2d_page`"
+msgstr ""
+
+# 8465eafd82c941db8578142d9c8df8a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:35
+msgid ":ref:`borders_at_multi_connection_2d_page`"
+msgstr ""
+
+# 176553bb796040aeb915efba7fecb379
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:36
+msgid ":ref:`area_page`"
+msgstr ""
+
+# e6254c2642c14e1a9f436dd528e96ff4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:37
+msgid ":ref:`taper_page`"
+msgstr ""
+
+# 3400cf1721384c5784a097bdd5b82e6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:38
+msgid ":ref:`aspect_ratio_page`"
+msgstr ""
+
+# ccdb34f54e5747b7888ae9981b9e450e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:39
+msgid ":ref:`minimum_angle_page`"
+msgstr ""
+
+# 9cd991036b664bc8a1101d022982e5a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:40
+msgid ":ref:`warping_page`"
+msgstr ""
+
+# 41f8256446cc4b1aac9eb970eeda4ce0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:41
+msgid ":ref:`skew_page`"
+msgstr ""
+
+# 78825a0aa02c4988a21bf69e73879db1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:42
+msgid ":ref:`max_element_length_2d_page`"
+msgstr ""
+
+# 5afb46f9acac4a9eb4756abdfc9f27cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:46
+msgid "Volume quality controls:"
+msgstr ""
+
+# a9f0ee19881d492aa3a27ae458c996f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:48
+msgid ":ref:`aspect_ratio_3d_page`"
+msgstr ""
+
+# 4bb9f6eab8164103923c4826e2ecc0f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:49
+msgid ":ref:`volume_page`"
+msgstr ""
+
+# d7afca49a69c41d7ac8abb0299803a21
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:50
+msgid ":ref:`max_element_length_3d_page`"
+msgstr ""
+
+# 18158bdf984a4244844feb0237e2ade9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:51
+msgid ":ref:`bare_border_volumes_page`"
+msgstr ""
+
+# 867e8cad934641798deb2b24ae70e0d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:52
+msgid ":ref:`over_constrained_volumes_page`"
+msgstr ""
+
+# e37bfbc3abe44516bc3624f19c0f361f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:56
+msgid ""
+"To manage the quality controls call pop-up in the VTK viewer and select "
+"\"Controls\" sub-menu"
+msgstr ""
+
+# b511cd0c11694da7880052ef367b4387
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:62
+msgid "**Reset** switches off quality controls;"
+msgstr ""
+
+# 07202335cad14c63aad3f0c725c35022
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:63
+msgid "**Node Controls** provides access to the node quality controls;"
+msgstr ""
+
+# b2fe1e355db74664ac3915b3c71f0213
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:64
+msgid "**Edge Controls** provides access to the edge quality controls;"
+msgstr ""
+
+# 2f26a38df6f2496c9ab9baf9251182f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:65
+msgid "**Face Controls** provides access to the face quality controls;"
+msgstr ""
+
+# 5f6103624b344cf493f1711075e65f45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:66
+msgid "**Volume Controls** provides access to the volume quality controls;"
+msgstr ""
+
+# 96197eb4535d4f8a968ddc916c251213
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:67
+msgid "**Scalar Bar Properties** allows setting :ref:scalar_bar_dlg;"
+msgstr ""
+
+# d75ea00701944ff4bdb5db1347f3e187
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:68
+msgid ""
+"**Distribution -> Export ...** allows saving the distribution of quality "
+"control values in the text file;"
+msgstr ""
+
+# 077eda1f512648b7873804a13d69ce46
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:69
+msgid ""
+"**Distribution -> Show** Shows/Hides the distribution histogram of the "
+"quality control values in the VTK Viewer."
+msgstr ""
+
+# 9ed4e072f8e144cc9ae6c0b2d3df0cc5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/about_quality_controls.rst:70
+msgid ""
+"**Distribution -> Plot** Plots the distribution histogram of the quality "
+"control values in the Plot 2D Viewer."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po
new file mode 100644 (file)
index 0000000..1444e9c
--- /dev/null
@@ -0,0 +1,394 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 9011f6c867d54bab9004db957896dda8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:5
+msgid "Adding nodes and elements"
+msgstr ""
+
+# adfa44bc891e4ffe8e8043724eca539d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:7
+msgid "In MESH you can add to your mesh different elements such as:"
+msgstr ""
+
+# 642ddc8d028c4b1993cdccb23b1dd463
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:9
+msgid ":ref:`adding_nodes_anchor`"
+msgstr ""
+
+# 42da9857dda24c10a50ba14b1e492231
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:10
+msgid ":ref:`adding_0delems_anchor`"
+msgstr ""
+
+# efaeb514592241879792f25c253e797d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:11
+msgid ":ref:`adding_0delems_on_all_nodes_anchor`"
+msgstr ""
+
+# 97fef81c05d94c38a7eda819953100cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:12
+msgid ":ref:`adding_balls_anchor`"
+msgstr ""
+
+# c0c6e29dca2b42099fd41451fc1caefd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:13
+msgid ":ref:`adding_edges_anchor`"
+msgstr ""
+
+# 38d32b86aa904d218b25825b33583ed6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:14
+msgid ":ref:`adding_triangles_anchor`"
+msgstr ""
+
+# 86f67a57ad1a40348aed6ff1044b29c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:15
+msgid ":ref:`adding_quadrangles_anchor`"
+msgstr ""
+
+# 704e5d5a38174b35a93f10be72a0015d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:16
+msgid ":ref:`adding_polygons_anchor`"
+msgstr ""
+
+# 895cea43a2e8413ba004f60066187e1d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:17
+msgid ":ref:`adding_tetrahedrons_anchor`"
+msgstr ""
+
+# a44527882f3d49568a9c62ea73b75593
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:18
+msgid ":ref:`adding_hexahedrons_anchor`"
+msgstr ""
+
+# 2a22f5f9b84b4674b56bfd4b32f70360
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:19
+msgid ":ref:`adding_octahedrons_anchor`"
+msgstr ""
+
+# f4a79505995b4f6d96bff5cc5dea08a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:20
+msgid ":ref:`adding_polyhedrons_anchor`"
+msgstr ""
+
+# 184027c7452945c39b3574a990e9a1af
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:23
+msgid ""
+"The convention of nodal connectivity of elements used in SALOME is the "
+"MED library convention. You can consult the description of nodal "
+"connectivity of elements in the documentation on MED library or "
+":ref:`connectivity_page`."
+msgstr ""
+
+# e99b10cc630d4ac3a21fc651c070a254
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:25
+msgid "**To add a node or an element to your mesh:**"
+msgstr ""
+
+# eb3d5c2d642d42ef9512a155e752f678
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:27
+msgid "Select your mesh in the Object Browser or in the 3D viewer."
+msgstr ""
+
+# 246ede0e2eca4b7bb2834e2777a35748
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:28
+msgid ""
+"From the **Modification** menu choose the **Add** item, the following "
+"associated sub-menu will appear:"
+msgstr ""
+
+# 4fc6d38cf50c428289475de65b222e1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:33
+msgid ""
+"From this sub-menu select the type of element which you would like to add"
+" to your mesh."
+msgstr ""
+
+# 7508561f45bd4fc4bd38623d019e493e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:36
+msgid ""
+"All dialogs for new node or element adding to the mesh provide the "
+"possibility to automatically add a node or element to the specified group"
+" or to create it anew using **Add to group** box, that allows choosing an"
+" existing group for the created node or element or giving the name to a "
+"new group. By default, the **Add to group** check box is switched off. If"
+" the user switches this check box on, the combo box listing all currently"
+" existing groups of the corresponding type becomes available. By default,"
+" no group is selected. In this case, when the user presses **Apply** or "
+"**Apply & Close** button, the warning message box informs the user about "
+"the necessity to input new group name. The combo box lists groups of all "
+"the :ref:`grouping_elements_page`: both :ref:`standalone_group`, "
+":ref:`group_on_filter`, and :ref:`group_on_geom`. If the user chooses a "
+"group on geometry or on filter, he is warned and proposed to convert this"
+" group to standalone."
+msgstr ""
+
+# d82e77a7d51f4ef68fd1790112f5a877
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:42
+msgid ""
+"If the user rejects conversion operation, it is cancelled and a new "
+"node/element is not created!"
+msgstr ""
+
+# 56c1ce8fc400423c9560387c0547461a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:45
+msgid ""
+"**See Also** sample TUI Scripts of :ref:`tui_adding_nodes_and_elements` "
+"operations."
+msgstr ""
+
+# c94d9176d6d340568ce11f03af31828e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:50
+msgid "Adding nodes"
+msgstr ""
+
+# 39207b695ed74e9e8a4aadc52be65796
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:55
+msgid ""
+"In this dialog box set coordinates for your node in the **Coordinates** "
+"set of fields and click the **Apply** or **Apply and Close** button. Your"
+" node will be created:"
+msgstr ""
+
+# a457e82a39134103bd12041f43769061
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:64
+msgid "Adding 0D elements"
+msgstr ""
+
+# 1f49fadf1f5b4509a38683508be50f8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:69
+msgid ""
+"In this dialog box specify nodes which will form your 0D elements by "
+"selecting them in the 3D viewer. Activate **Allow duplicate elements** to"
+" get several 0D elements on a node. Click the **Apply** or **Apply and "
+"Close** button. Your 0D elements will be created:"
+msgstr ""
+
+# 74f45e68dcde4c71844de9cf840a91e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:79
+msgid "Making 0D elements on Element Nodes"
+msgstr ""
+
+# 5fe00d89f3ca4b118a6cde9e352bf619
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:81
+msgid ""
+"There is another way to create 0D elements. It is possible to create 0D "
+"elements on all nodes of the selected mesh, sub-mesh, or a group of "
+"elements or nodes."
+msgstr ""
+
+# bdde90f70f2d42359ae59e4a8e50d5a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:86
+msgid "In this dialog"
+msgstr ""
+
+# 0b37680a44ba45aab10b560e6264c1e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:88
+msgid ""
+"The radio-buttons allow choosing the type of object to create 0D elements"
+" on."
+msgstr ""
+
+# 98c02e71f24043049d821560dd2fa098
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:90
+msgid ""
+"**Mesh, sub-mesh, group** - this button allows selecting a mesh, a sub-"
+"mesh or a group to create 0D elements on the nodes of its elements. The "
+"name of the selected object is shown in the dialog."
+msgstr ""
+
+# 08eff5fd4c084bdf9f5993747ad57fb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:91
+msgid ""
+"**Elements** - this button allows selecting elements in the VTK viewer or"
+" typing their IDs in the dialog."
+msgstr ""
+
+# e98b5fd256a54798baf8596b478295e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:92
+msgid ""
+"**Nodes** - this button allows selecting nodes to create 0D elements on "
+"in the VTK viewer or typing their IDs in the dialog."
+msgstr ""
+
+# d8cbfc19bfc046e8a884bbcd39812eab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:94
+msgid ""
+"**Set Filter** button allows selecting elements or nodes by filtering "
+"mesh elements or nodes with different criteria (see "
+":ref:`filtering_elements`)."
+msgstr ""
+
+# d6406fb702cf41e2b7d6fed2e25ce073
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:95
+msgid ""
+"Activate **Allow duplicate elements** to get several 0D elements on a "
+"node."
+msgstr ""
+
+# 0621972e7e39474c972dd2dcaf8cf3fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:96
+msgid ""
+"Switching on **Add to group** check-box allows specifying the name of the"
+" group to which all created or found (existing) 0D elements will be "
+"added. You can either select an existing group from a drop-down list, or "
+"enter the name of the group to be created. If a selected existing "
+":ref:`grouping_elements_page` is not Standalone (Group On Geometry or "
+"Group On Filter) it will be converted to Standalone."
+msgstr ""
+
+# c93588d10bf8420b9ad16a2adc708750
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:98
+msgid "If **Add to group** is activated it has to be filled in."
+msgstr ""
+
+# bf9fba0f12844b20b3d18c133a0dcbf6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:106
+msgid "Adding ball elements"
+msgstr ""
+
+# 9eb74b7254d74e119ff0f90ad502635a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:111
+msgid ""
+"In this dialog box specify the nodes, which will form your ball elements,"
+" either by selecting them in the 3D viewer or by manually entering their "
+"IDs, specify the ball diameter and click the **Apply** or **Apply and "
+"Close** button."
+msgstr ""
+
+# a59b9c61819c45e786d432cb6a7b7c70
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:120
+msgid "Adding edges"
+msgstr ""
+
+# 25aef23b2cde4322b51a2dd73884391f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:125
+msgid ""
+"In this dialog box specify the nodes which will form your edge by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button. Your edge will be created:"
+msgstr ""
+
+# 29ba16103c444403aa381c6affc205f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:134
+msgid "Adding triangles"
+msgstr ""
+
+# 2d5864296dc542aa8eccd57747e06f7c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:139
+msgid ""
+"In this dialog box specify the nodes which will form your triangle by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button. Your triangle will be created:"
+msgstr ""
+
+# 49fc0b3113ca4b71a249e5c94c2ca8e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:148
+msgid "Adding quadrangles"
+msgstr ""
+
+# f1972b70655047b4b5ae718478b18b9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:153
+msgid ""
+"In this dialog box specify the nodes which will form your quadrangle by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button. Your quadrangle will be created:"
+msgstr ""
+
+# aa9108d8c0f64e1abc0828f7e626f6ac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:162
+msgid "Adding polygons"
+msgstr ""
+
+# c12a68103f8c4a4b8b2ab67c3defb0e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:167
+msgid ""
+"In this dialog box specify the nodes which will form your polygon by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button."
+msgstr ""
+
+# e44cd567fda84be59db2caca77c12cb0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:176
+msgid "Adding tetrahedrons"
+msgstr ""
+
+# e2ff62697945475e973fca7863afa8c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:181
+msgid ""
+"In this dialog box specify the nodes which will form your tetrahedron by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button. Your tetrahedron will be "
+"created:"
+msgstr ""
+
+# c1f8e7a2fb2542a39e83a71074f1ae33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:190
+msgid "Adding hexahedrons"
+msgstr ""
+
+# aeea0dcca6014b878c5255f559e6ac97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:195
+msgid ""
+"In this dialog box specify the nodes which will form your hexahedron by "
+"selecting them in the 3D viewer with pressed Shift button and click the "
+"**Apply** or **Apply and Close** button. Your hexahedron will be created:"
+msgstr ""
+
+# e7808586e846431089bc097d01c8cc05
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:204
+msgid "Adding hexagonal prism"
+msgstr ""
+
+# fd2284a74c4f438bb2be5863215bd473
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:206
+msgid ""
+"In the Add Hexagonal Prism dialog box specify the nodes which will form "
+"your hexagonal prism by selecting them in the 3D viewer with pressed "
+"Shift button and click the **Apply** or **Apply and Close** button. Your "
+"hexagonal prism will be created:"
+msgstr ""
+
+# a78a49d876004836ab2caf1771528327
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:215
+msgid "Adding polyhedrons"
+msgstr ""
+
+# 2dc6829556a34116a0411a28ff01fe2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:220
+msgid "There are two different ways to add polyhedral volumes."
+msgstr ""
+
+# c213d91459524e18903370c3a2fa50d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst:222
+msgid ""
+"If you select **Node** as **Elements Type** you will specify the nodes "
+"which will form the faces of your polyhedron by selecting the nodes in "
+"the 3D viewer with pressed Shift button and clicking the  **Add** button "
+"to add the face in the list of Faces by Nodes, which will form your "
+"polyhedron. Note, that it could be very useful to toggle Polyhedron "
+"Preview checkbox to see the results of your selection. The second way is "
+"somewhat simpler, however, there are cases when it does not provide you "
+"with the necessary level of precision. If you select **Face** as "
+"**Elements Type**, you will be able to select the faces which will form "
+"your polyhedron in the 3D viewer with pressed Shift button. If you've "
+"managed to obtain the necessary result, click the **Apply** or **Apply "
+"and Close** button. Your polyhedron will be created:"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_quadratic_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_quadratic_elements.po
new file mode 100644 (file)
index 0000000..285271f
--- /dev/null
@@ -0,0 +1,141 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 97ca37c48b6a46eab1311e4da92675b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:6
+msgid "Adding Quadratic Elements"
+msgstr ""
+
+# 2733f51dd3e24e8e96f1728a9b943693
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:8
+msgid "MESH module allows you to work with **Quadratic Elements**."
+msgstr ""
+
+# 04076a14890047139f3da74e87925b8d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:10
+msgid ""
+"Quadratic elements are defined by the same corner nodes as the "
+"corresponding linear ones, but in addition they have *midside* nodes "
+"located between the corner nodes on element sides."
+msgstr ""
+
+# 2f08f27e14214b69afbb69d7c6ebc4ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:12
+msgid ""
+"If a quadratic 2D element has an additional node at the element center, "
+"it is a bi-quadratic element (both TRIA7 and QUAD9 elements are "
+"supported). If a quadratic hexahedral element has 7 additional nodes: at "
+"the element center and at the center of each side, it is a tri-quadratic "
+"element (or HEXA27)."
+msgstr ""
+
+# 6b918686e0f34395848c30004d066fe6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:14
+msgid ""
+"The convention of nodal connectivity of elements used in SALOME is the "
+"MED library convention. You can consult the description of nodal "
+"connectivity of elements in the documentation on MED library or "
+":ref:`connectivity_page`."
+msgstr ""
+
+# c0ee8ff909f64400967daa896e9644f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:16
+msgid "There are several ways to create quadratic elements in your mesh:"
+msgstr ""
+
+# 1c5f10266ac54e3c9e762d63fa3684c6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:18
+msgid "manually (this way is described below);"
+msgstr ""
+
+# 2afc5e742de948ca8ded56cca6b1fe6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:19
+msgid ""
+"use :ref:`quadratic_mesh_anchor` hypothesis to generate a quadratic mesh "
+"on your geometry;"
+msgstr ""
+
+# ed047a38d6794df880b1c03db2b8cde4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:20
+msgid ""
+"convert an existing linear mesh to a quadratic one (see "
+":ref:`convert_to_from_quadratic_mesh_page`)."
+msgstr ""
+
+# 08ae2bbebab44a6381ea132a604ced63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:22
+msgid "**To add a quadratic element to your mesh:**"
+msgstr ""
+
+# de31cde3181045cd8041bb1b0c7666e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:24
+msgid "Select your mesh in the Object Browser or in the 3D viewer."
+msgstr ""
+
+# 5198fe6693f64e97b13bce6b42b2fac4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:26
+msgid ""
+"From the **Modification** menu choose the **Add** item and select one of "
+"the following:"
+msgstr ""
+
+# 0057e276f3fc4a95b2d276d3fce8c91d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:32
+msgid ""
+"All dialogs for adding quadratic element to the mesh provide the "
+"possibility to automatically add an element to the specified group or to "
+"create the group anew using **Add to group** box, that allows choosing an"
+" existing group for the created node or element or giving the name to a "
+"new group. By default, the **Add to group** check box is switched off. If"
+" the user switches this check box on, the combo box listing all currently"
+" existing groups of the corresponding type becomes available. By default,"
+" no group is selected. In this case, when the user presses **Apply** or "
+"**Apply & Close** button, the warning message box informs the user about "
+"the necessity to input a new group name. The combo box lists groups of "
+"all the :ref:`grouping_elements_page` both :ref:`standalone_group`, "
+":ref:`group_on_filter`, and :ref:`group_on_geom`. If the user chooses a "
+"group on geometry or on filter, he is warned and proposed to convert this"
+" group to standalone. If the user rejects conversion operation, it is "
+"cancelled and a new quadratic element is not created."
+msgstr ""
+
+# 1fd7382a5f4847499e07416870d8c573
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:40
+msgid ""
+"To create any **Quadratic Element** specify the nodes which will form "
+"your element by selecting them in the 3D viewer with pressed Shift button"
+" and click *Selection* button to the right of **Corner Nodes** label. "
+"Their numbers will appear in the dialog box as **Corner Nodes** "
+"(alternatively you can just input numbers in this field without "
+"selection; note that to use this way the mesh should be selected before "
+"invoking this operation). The edges formed by the corner nodes will "
+"appear in the table. To define the middle nodes for each edge, double-"
+"click on the respective field and input the number of the node (or pick "
+"the node in the viewer). For bi-quadratic and tri-quadratic elements, "
+"your also need to specify central nodes. As soon as all needed nodes are "
+"specified, a preview of a new quadratic element will be displayed in the "
+"3D viewer. Then you will be able to click **Apply** or **Apply and "
+"Close** button to add the element to the mesh."
+msgstr ""
+
+# 7e82eacc03904667b815fbeae8cda8fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst:45
+msgid "**Reverse** button reverses the element."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/additional_hypo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/additional_hypo.po
new file mode 100644 (file)
index 0000000..02ed335
--- /dev/null
@@ -0,0 +1,328 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 21ce6bac6a5e4379b28207f6350faf63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:5
+msgid "Additional Hypotheses"
+msgstr ""
+
+# 3d823676662c4274bc0f890092158f98
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:7
+msgid ""
+"**Additional Hypotheses** can be applied as a supplement to the main "
+"hypotheses, introducing additional concepts to mesh creation."
+msgstr ""
+
+# 94acb0a8af534cd99b6d58f0a65a790c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:9
+msgid ""
+"An **Additional Hypothesis** can be defined in the same way as any main "
+"hypothesis in :ref:`create_mesh_anchor` or "
+":ref:`constructing_submeshes_page` dialog."
+msgstr ""
+
+# 44e1be27062e407297c7265310de5d86
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:11
+msgid "The following additional hypothesis are available:"
+msgstr ""
+
+# c2db6c2d772f4134a5e44cb1263a55de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:13
+msgid ""
+":ref:`propagation_anchor` and :ref:`propagofdistribution_anchor` "
+"hypotheses are useful for creation of quadrangle and hexahedral meshes."
+msgstr ""
+
+# 916c32073e0e421cb0a385e1e9753f18
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:14
+msgid ""
+":ref:`viscous_layers_anchor`  and :ref:`viscous_layers_anchor` hypotheses"
+" allow creation of layers of highly stretched elements near mesh "
+"boundary, which is beneficial for high quality viscous computations."
+msgstr ""
+
+# 446a5b5e1eb0400aad0ff8c27a1d5082
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:15
+msgid ""
+":ref:`quadratic_mesh_anchor` hypothesis allows generation of second order"
+" meshes."
+msgstr ""
+
+# 8bb9e27c47b04d17873cd417f594aed4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:16
+msgid ":ref:`quadrangle_preference_anchor` enables generation of quadrangles."
+msgstr ""
+
+# 43d294e9c96a4aed95bb7e4e883fa806
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:23
+msgid "Propagation of 1D Hypothesis on opposite edges"
+msgstr ""
+
+# f85ded7f8a7b49048b92c0d124b4c639
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:25
+msgid ""
+"**Propagation of 1D Hypothesis on opposite edges** allows to mesh "
+"opposite sides of a quadrangle face and other adjacent quadrangles, using"
+" the same hypothesis assigned to only one edge. Thus you define a sub-"
+"mesh on the edge where you define 1D meshing parameters and the "
+"**Propagation hypothesis**. These local meshing parameters will be "
+"propagated via opposite sides of quadrangles to the whole geometry, and "
+"this propagation stops at an edge with other local meshing parameters."
+msgstr ""
+
+# 23d299b63f6b4df6afbe6482290ee731
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:34
+msgid ""
+"This hypothesis can be taken into account by :ref:`a1d_algos_anchor` and "
+":ref:`a1d_algos_anchor` \"Composite Side Discretization\" algorithms."
+msgstr ""
+
+# cda8f267f0674c1baedcd8432963c055
+# d1492bfb0b8046e79f66894a009d9b94
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:56
+msgid "**See Also** a sample TUI Script of a :ref:`tui_propagation` operation"
+msgstr ""
+
+# 8d25f661ff654a748453a7d263c1288e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:43
+msgid "Propagation of Node Distribution on Opposite Edges"
+msgstr ""
+
+# 17c2e5e1af4744d294aa217c8c803a69
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:45
+msgid ""
+"**Propagation of Node Distribution on Opposite Edges** allows to "
+"propagate distribution of nodes 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 number of nodes and the same "
+"relations between segment lengths, unless another hypothesis has been "
+"locally defined on the opposite edge."
+msgstr ""
+
+# 7bf90153c74e4e27b17402993b37102f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:52
+msgid ""
+"This hypothesis can be taken into account by :ref:`a1d_algos_anchor` "
+"\"Wire Discretization\" and :ref:`a1d_algos_anchor` \"Composite Side "
+"Discretization\" algorithms."
+msgstr ""
+
+# 74ad0ac67c314f3c98e36c1711006ed8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:61
+msgid "Viscous Layers and Viscous Layers 2D"
+msgstr ""
+
+# 28818a66c56e4793ba1162c70ac8157b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:63
+msgid ""
+"**Viscous Layers** and **Viscous Layers 2D** additional hypotheses can be"
+" used by several 3D algorithms, for example Hexahedron(i,j,k), or 2D "
+"algorithms, for example Triangle (MEFISTO), correspondingly. These "
+"hypotheses allow creation of layers of highly stretched elements, prisms "
+"in 3D and quadrilaterals in 2D, near mesh boundary, which is beneficial "
+"for high quality viscous computations."
+msgstr ""
+
+# e572f10f9e014eee840fb93955ac6416
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:78
+msgid "**Name** - allows to define the name of the hypothesis."
+msgstr ""
+
+# cb75b8d96754423686b8366fe91e1e08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:79
+msgid "**Total thickness** - gives the total thickness of element layers."
+msgstr ""
+
+# 63b46ebf10c641d0a5eba40f01dcd543
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:80
+msgid "**Number of layers** - defines the number of element layers."
+msgstr ""
+
+# 413a63f3f74d426ebbd9adbc4c1285eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:81
+msgid ""
+"**Stretch factor** - defines the growth factor of element height from the"
+" mesh boundary inwards."
+msgstr ""
+
+# 9c8388a59cfa4958b4ed94d0508d7dfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:82
+msgid ""
+"**Extrusion method** (available in 3D only) - defines how positions of "
+"nodes are found during prism construction and how the creation of "
+"distorted and intersecting prisms is prevented."
+msgstr ""
+
+# f2f0f76bdd0a4f8381d6543afdb09a40
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:83
+msgid ""
+"**Surface offset + smooth** method extrudes nodes along the normal to the"
+" underlying geometrical surface. Smoothing of the internal surface of "
+"element layers is possible to avoid creation of invalid prisms."
+msgstr ""
+
+# 7c1cc6e7049a427490c6eb5fa0fb2340
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:84
+msgid ""
+"**Face offset** method extrudes nodes along the average normal of "
+"surrounding mesh faces to the intersection with a neighbor mesh face "
+"translated along its own normal by the thickness of layers. The thickness"
+" of layers can be limited to avoid creation of invalid prisms."
+msgstr ""
+
+# 0d52d4c1fff14dfda30416ee5a859000
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:85
+msgid ""
+"**Node offset** method extrudes nodes along the average normal of "
+"surrounding mesh faces by the thickness of layers. The thickness of "
+"layers can be limited to avoid creation of invalid prisms."
+msgstr ""
+
+# 3616587b04724a0da5435e3314c307f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:93
+msgid ""
+"**Specified Faces/Edges are** - defines how the shapes specified by the "
+"next parameter are used."
+msgstr ""
+
+# f7015e9be22748e5b704b316b2ddfe87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:94
+msgid ""
+"**Faces/Edges with/without layers** - defines geometrical faces or edges "
+"on which element layers either should be or should not be constructed, "
+"depending on the value of the previous parameter (**Specified Faces/Edges"
+" are**). Faces (or edges) can be selected either in the Object Browser or"
+" in the VTK Viewer. **Add** button becomes active as soon as a suitable "
+"sub-shape is selected."
+msgstr ""
+
+# 62efa77cc84f4ccfb38199c66c478fd7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:97
+msgid ""
+"A mesh shown in the 3D Viewer can prevent selection of faces and edges, "
+"just hide the mesh to avoid this. If a face, which should be selected, is"
+" hidden by other faces, consider creating a group of faces to be selected"
+" in the Geometry module. To avoid a long wait when a geometry with many "
+"faces (or edges) is displayed, the number of faces (edges) shown at a "
+"time is limited by the value of \"Sub-shapes preview chunk size\" "
+"preference (in Preferences/Mesh/General tab)."
+msgstr ""
+
+# 6373f8512fdd40abbce91d720c507b03
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:108
+msgid "If faces/edges without layers are specified, the element layers are"
+msgstr ""
+
+# 125dc9db375d4d91af01f31dc5b50bde
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:101
+msgid ""
+"not constructed on geometrical faces shared by several solids in 3D case "
+"and edges shared by several faces in 2D case. In other words, in this "
+"mode the element layers can be constructed on boundary faces and edges "
+"only, and are not constructed on internal faces and edges. There is an "
+"exception to this rule: if a hypothesis is assigned to a sub-mesh, the "
+"element layers can be constructed on boundary faces/edges of the shape of"
+" this sub-mesh, at same time possibly being internal faces/edges within "
+"the whole model."
+msgstr ""
+
+# 5ae310c718e9423c84c247965921c94e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:126
+msgid "If you use **several** hypotheses to define viscous layers on faces of"
+msgstr ""
+
+# 5eb0df6c10ab48f1b467d005508bfdbf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:117
+msgid ""
+"one solid, keep in mind the following. Each hypothesis defines a set of "
+"faces with viscous layers (even if you specify faces without layers). The"
+" sets of faces with viscous layers defined by several hypotheses should "
+"not intersect, else the module won't add an hypothesis that is "
+"incompatible with another one. Also you can't define different number of "
+"layers on adjacent faces of a solid. This logic is also valid for the 2D "
+"hypothesis."
+msgstr ""
+
+# 3754387d6a2b4dd1a575ff9c9dcd5a2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:134
+msgid "**See also** a sample TUI script of a :ref:`tui_viscous_layers`."
+msgstr ""
+
+# bc47f9539cea4ba79712b94280f1e632
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:140
+msgid "Quadratic Mesh"
+msgstr ""
+
+# ba83c2c703aa43d583daf55bb192aeb7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:142
+msgid ""
+"Quadratic Mesh hypothesis allows to build a quadratic mesh (in which "
+"links between element nodes are not straight but curved lines due to "
+"presence of an additional mid-side node)."
+msgstr ""
+
+# d689d0d6a0dc4a91b87aab30b4c319db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:146
+msgid ""
+"This 1D hypothesis can be taken into account by :ref:`a1d_algos_anchor` "
+"\"Wire Discretization\" and :ref:`a1d_algos_anchor` \"Composite Side "
+"Discretization\" algorithms. To create a quadratic mes assign this "
+"hypothesis at :ref:`constructing_meshes_page`."
+msgstr ""
+
+# d89df66697c9408db023f0301d6ccafd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:151
+msgid ""
+"See :ref:`adding_quadratic_elements_page` for more information about "
+"quadratic meshes."
+msgstr ""
+
+# 049d52c574fb4e049d4da534026aa905
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:157
+msgid "Quadrangle Preference"
+msgstr ""
+
+# 5bc9e3bdc1424a998a9cf23908454242
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:159
+msgid ""
+"This additional hypothesis can be used together with 2D triangulation "
+"algorithms. It allows 2D triangulation algorithms to build quadrangular "
+"meshes."
+msgstr ""
+
+# dacde0cdc252433ea47143272e826d0a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:162
+msgid ""
+"Usage of this hypothesis with \"Quadrangle: Mapping\" meshing algorithm "
+"is obsolete since introducing :ref:`hypo_quad_params_anchor` \"Quadrangle"
+" parameters\" hypothesis. Usage of this hypothesis with \"Quadrangle: "
+"Mapping\" meshing algorithm corresponds to specifying \"Quadrangle "
+"Preference\" transition type of :ref:`hypo_quad_params_anchor` "
+"\"Quadrangle parameters\" hypothesis."
+msgstr ""
+
+# 578441c1b67846f6a25815a070b31d28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/additional_hypo.rst:166
+msgid ""
+"\"Quadrangle Preference\" transition type can be used only if the total "
+"quantity of segments on all sides of the face is even (divisible by 2), "
+"else \"Standard\" transition type is used."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/area.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/area.po
new file mode 100644 (file)
index 0000000..d5d8081
--- /dev/null
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# db55cbb79de0435090214d3b033d4c3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:6
+msgid "Area"
+msgstr ""
+
+# 8dccc331fadb42f28684db2bd0ba2125
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:8
+msgid ""
+"**Area** mesh quality control is based on the algorithm of area "
+"calculation of mesh faces."
+msgstr ""
+
+# b62f3cc3e4d144a39abf63f3ef1c393e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:11
+msgid "**To apply the Area quality control to your mesh:**"
+msgstr ""
+
+# 1d4a7fa016a74a89971d5200f8ef9b56
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:13
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 705801c6cdba479cbfb4546c4e13583b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:14
+msgid "Choose **Controls > Face Controls > Area** or click  **\"Area\"** button."
+msgstr ""
+
+# f2936084fdc448ffb9d0af1b4325c570
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:22
+msgid ""
+"Your mesh will be displayed in the viewer with its faces colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 34b6e9d9faff413da4a5b4ed05bcb750
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/area.rst:29
+msgid "**See Also** a sample TUI Script of an :ref:`tui_area` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio.po
new file mode 100644 (file)
index 0000000..2c3e7a2
--- /dev/null
@@ -0,0 +1,76 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 8864e747737c4f0e99b4b6b55ea866bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:5
+msgid "Aspect Ratio"
+msgstr ""
+
+# 9fd308cc60b641d59f671994d5c260c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:7
+msgid ""
+"The **Aspect Ratio** quality criterion for mesh elements reveals the "
+"degree of conformity of a mesh element to the regular element of its type"
+" (with all edges having the same length)."
+msgstr ""
+
+# 5d1d18e8f44d496e94a4844eb5b6f29c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:10
+msgid ""
+"The **Aspect Ratio** of a **triangle** 2D element consisting of 3 nodes "
+"is calculated by the formula:"
+msgstr ""
+
+# d3b211f181e541d99b735f09343b9345
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:15
+msgid ""
+"The **Aspect Ratio** of a **quadrangle** 2D element consisting of 4 nodes"
+" is calculated using The Verdict Geometric Quality Library available "
+"within VTK. The calculation formula is:"
+msgstr ""
+
+# e95e73027d274edfb7f807dd9b23135e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:20
+msgid "**To apply the Aspect Ratio quality criterion to your mesh:**"
+msgstr ""
+
+# 26a652d49e734e51845afecec6b3287d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:22
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# b86656d6ad1d4f75b782e9bfdea3b8ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:23
+msgid ""
+"Choose **Controls > Face Controls > Aspect Ratio** or click  **Aspect "
+"Ratio** button in the toolbar."
+msgstr ""
+
+# 275fe710e1a2456a9b6b4e556263e5ce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:32
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# aa48b40c005d41aa92e47b939df4c8e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio.rst:38
+msgid "**See Also** a sample TUI Script of an :ref:`tui_aspect_ratio` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio_3d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio_3d.po
new file mode 100644 (file)
index 0000000..e401227
--- /dev/null
@@ -0,0 +1,77 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 61434f0743c3404cb4e01a3bf84d57cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:5
+msgid "Aspect ratio 3D"
+msgstr ""
+
+# 156046dbe964465684b29538f5cf82f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:7
+msgid ""
+"The **Aspect Ratio 3D** mesh quality criterion calculates the same "
+"parameter as the :ref:`aspect_ratio_page` criterion, but it is applied to"
+" 3D mesh elements: tetrahedrons, pentahedrons, hexahedrons, etc."
+msgstr ""
+
+# d676a6ab44454cdf921790e40a0e16e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:9
+msgid ""
+"The **Aspect Ratio** of a **tetrahedron** 3D element defined by vertices "
+"{a,b,c,d } is calculated by the formula:"
+msgstr ""
+
+# 40ba4ecb72e3463abe86fdda2a486407
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:14
+msgid ""
+"Other element types like polyhedron, pentahedron and hexahedron use the "
+"following formula:"
+msgstr ""
+
+# adbb816c867c40f58ab1c290659b30e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:19
+msgid "**To apply the Aspect Ratio 3D quality criterion to your mesh:**"
+msgstr ""
+
+# c1a14197106745bb92f4ea507ecdb17c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:21
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# bb851272ea6d4a09bcc1ae1f275d14ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:22
+msgid ""
+"Choose **Controls > Volume Controls > Aspect Ratio 3D** or click "
+"**\"Aspect Ratio 3D\"** button of the toolbar."
+msgstr ""
+
+# 6daa4e9e21f5441ebd17641159f25dc1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:31
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 9d800e4d5fb04279952a7960f5c06ce5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst:37
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_aspect_ratio_3d` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_face.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_face.po
new file mode 100644 (file)
index 0000000..54bc35a
--- /dev/null
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4d2a7fab9f7f4f6b99e1e55c1d4c1afa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_face.rst:5
+msgid "Bare border faces"
+msgstr ""
+
+# 127287f59f734105888c3f0ef2c0affe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_face.rst:7
+msgid ""
+"This mesh quality control highlights the faces having the border not "
+"shared with other faces (free border) and missing an edge based on nodes "
+"of the free border. The faces with bare border are shown with a color "
+"different from the color of shared faces."
+msgstr ""
+
+# e82b80f6afed4c5999dc1c076ebdafc0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_face.rst:15
+msgid ""
+"**See also** A sample TUI Script making a group of faces highlighted in "
+"the picture is :ref:`tui_bare_border_faces`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_volumes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_volumes.po
new file mode 100644 (file)
index 0000000..1f74abb
--- /dev/null
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# c54d596b4abd408ba45bb44439fd034e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_volumes.rst:5
+msgid "Bare border volumes"
+msgstr ""
+
+# 2c5b52929f8e4ce08d892863f011f665
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_volumes.rst:7
+msgid ""
+"This mesh quality control highlights the volumes having the border not "
+"shared with other volumes (free border) and missing a face based on nodes"
+" of the free border. The volumes with bare border are shown with a color "
+"different from the color of shared volumes."
+msgstr ""
+
+# 96579bbe562c4cd38e97920f542414f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/bare_border_volumes.rst:15
+msgid ""
+"**See also** A sample TUI Script making a group of volumes highlighted in"
+" the picture is :ref:`tui_bare_border_volumes`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/basic_meshing_algos.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/basic_meshing_algos.po
new file mode 100644 (file)
index 0000000..2654e3a
--- /dev/null
@@ -0,0 +1,194 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# c8be38d4fe804083ad6a598447666cc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:5
+msgid "Basic meshing algorithms"
+msgstr ""
+
+# 9824be8dcf4840d797bdba9ae3cecf81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:7
+msgid ""
+"The MESH module contains a set of meshing algorithms, which are used for "
+"meshing entities (1D, 2D, 3D sub-shapes) composing geometrical objects."
+msgstr ""
+
+# 3b6a763ea0364cdfb1c0ef68894b2ec3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:9
+msgid ""
+"An algorithm represents either an implementation of a certain meshing "
+"technique or an interface to the whole meshing program generating "
+"elements of several dimensions."
+msgstr ""
+
+# 532ed39715344cf7acd0f68ea17ea3a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:14
+msgid "1D Entities"
+msgstr ""
+
+# ae97621ae9b94b4b9fab931327e98d37
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:16
+msgid "For meshing of 1D entities (**edges**):"
+msgstr ""
+
+# 5d251d33c5a04aa9b83ecbb742f418a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:17
+msgid ""
+"**Wire Discretization** meshing algorithm - splits an edge into a number "
+"of mesh segments following an 1D hypothesis."
+msgstr ""
+
+# e56a55bba65b476d9fb29dad45021df5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:18
+msgid ""
+"**Composite Side Discretization** algorithm - allows to apply a 1D "
+"hypothesis to a whole side of a geometrical face even if it is composed "
+"of several edges provided that they form C1 curve in all faces of the "
+"main shape."
+msgstr ""
+
+# d3e7fb14c1f54dcf84b9d7743ddf08c6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:19
+msgid "For meshing of 2D entities (**faces**):"
+msgstr ""
+
+# 96ff3177522e4abbac57c5166724c7db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:22
+msgid ""
+"**Triangle: Mefisto** meshing algorithm - splits faces into triangular "
+"elements."
+msgstr ""
+
+# b8b884f144944a44bf4e6b6eebb78a3e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:23
+msgid ""
+":ref:`quad_ijk_algo_page` meshing algorithm - splits faces into "
+"quadrangular elements."
+msgstr ""
+
+# a13ad16fe701490fbbb2b492842b74ce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:37
+msgid "For meshing of 3D entities (**solid objects**):"
+msgstr ""
+
+# 54752b6339e643ab9796cdba834e8c1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:46
+msgid ""
+"**Hexahedron (i,j,k)** meshing algorithm - solids are split into "
+"hexahedral elements thus forming a structured 3D mesh. The algorithm "
+"requires that 2D mesh generated on a solid could be considered as a mesh "
+"of a box, i.e. there should be eight nodes shared by three quadrangles "
+"and the rest nodes should be shared by four quadrangles."
+msgstr ""
+
+# f6c22808144446399e41ec254795651e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:60
+msgid ""
+":ref:`cartesian_algo_page` meshing algorithm - solids are split into "
+"hexahedral elements forming a Cartesian grid; polyhedra and other types "
+"of elements are generated where the geometrical boundary intersects "
+"Cartesian cells."
+msgstr ""
+
+# c0f194ee2591455e82931c862e55b74b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:62
+msgid ""
+"Some 3D meshing algorithms, such as Hexahedron(i,j,k) also can generate "
+"3D meshes from 2D meshes, working without geometrical objects."
+msgstr ""
+
+# f9af97e91aee474fa52053b426338c65
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:66
+msgid "There is also a number of more specific algorithms:"
+msgstr ""
+
+# ad32f133509846b887e8976e5f34897d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:68
+msgid ""
+":ref:`prism_3d_algo_page` - for meshing prismatic 3D shapes with "
+"hexahedra and prisms."
+msgstr ""
+
+# f2548c6c528c4d198d067572c9d0e1a0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:69
+msgid ""
+":ref:`quad_from_ma_algo_page` - for quadrangle meshing of faces with "
+"sinuous borders and rings."
+msgstr ""
+
+# 69fc8fe1213d400199cbfbfe768c3209
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:70
+msgid ""
+"**Polygon per Face** meshing algorithm - generates one mesh face (either "
+"a triangle, a quadrangle or a polygon) per a geometrical face using all "
+"nodes from the face boundary."
+msgstr ""
+
+# 772e98a27e5143a1b8c2c49e9b2abd33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:71
+msgid ":ref:`projection_algos_page` - for meshing by projection of another mesh."
+msgstr ""
+
+# 9400074a01ad41f8b32156cc5a6cb0c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:72
+msgid ""
+":ref:`import_algos_page` - for meshing by importing elements from another"
+" mesh."
+msgstr ""
+
+# 1de827d6a65a46ccaacec4e084a8dfe6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:73
+msgid ""
+":ref:`radial_prism_algo_page` - for meshing 3D geometrical objects with "
+"cavities with hexahedra and prisms."
+msgstr ""
+
+# 45b998fde8e7426098f4e7ecb3bbd4f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:74
+msgid ""
+":ref:`radial_quadrangle_1D2D_algo_page` - for quadrangle meshing of disks"
+" and parts of disks."
+msgstr ""
+
+# 46d628420f5249d38884a79134a14dc4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:75
+msgid ":ref:`use_existing_page` - to create a 1D or a 2D mesh in a python script."
+msgstr ""
+
+# 8772a29a46164088a85f1a3e7f6de471
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:76
+msgid ""
+":ref:`segments_around_vertex_algo_page` - for defining the length of mesh"
+" segments around certain vertices."
+msgstr ""
+
+# c72125844d894b53b9b111de5675d6c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:79
+msgid ""
+":ref:`constructing_meshes_page` page describes in detail how to apply "
+"meshing algorithms."
+msgstr ""
+
+# dd2e5049652f42cfbca7837a60b05d0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/basic_meshing_algos.rst:81
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_defining_meshing_algos` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection.po
new file mode 100644 (file)
index 0000000..0879902
--- /dev/null
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d2f8fc9fd0cb4b8f97fac18b5b18c7f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst:5
+msgid "Borders at multi-connection"
+msgstr ""
+
+# f889610316e140149cb805bebd9de283
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst:7
+msgid ""
+"This mesh quality control highlights segments according to the number of "
+"elements, faces and volumes, to which the segment belongs."
+msgstr ""
+
+# 76988886f4ab4173a8ac4f5800c0c9b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst:12
+msgid "In this picture the borders at multi-connection are displayed in blue."
+msgstr ""
+
+# 8d4a16bc2dc2420fa668c7b177723575
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst:14
+msgid ""
+"**See Also** a sample TUI Script of a "
+":ref:`tui_borders_at_multiconnection` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po
new file mode 100644 (file)
index 0000000..88b74f9
--- /dev/null
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 77167e3eb2d74d708cb40b566c7b6a00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst:5
+msgid "Borders at multi-connection 2D"
+msgstr ""
+
+# 3d9688fbe2454312936f96dbc032904c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst:7
+msgid ""
+"This mesh quality control highlights borders of faces (links between "
+"nodes) according to the number of faces, to which the link belongs."
+msgstr ""
+
+# e6bded6db48249c99027c3783d9f727b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst:12
+msgid ""
+"**See Also** a sample TUI Script of a "
+":ref:`tui_borders_at_multiconnection_2d`  operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/building_compounds.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/building_compounds.po
new file mode 100644 (file)
index 0000000..c4aad8f
--- /dev/null
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 67e4b2dcef5f44219170b804924a32d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:5
+msgid "Building Compound Meshes"
+msgstr ""
+
+# 343ff5ee2e404c4cacb3701d7e63c355
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:7
+msgid ""
+"Compound Mesh is a combination of several meshes. All elements and groups"
+" present in input meshes are present in the compound mesh. However, it "
+"does not use geometry or hypotheses of the initial meshes. The links "
+"between the input meshes and the compound mesh are not supported, "
+"consequently the modification of an input mesh does not lead to the "
+"update of the compound mesh."
+msgstr ""
+
+# 218176393db0429b83f003c7f27abeb2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:10
+msgid "**To Build a compound mesh:**"
+msgstr ""
+
+# 8ae6eecfc11b4cc4bb362110cec348a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:12
+msgid ""
+"From the **Mesh** menu select **Build Compound** or click **\"Build "
+"Compound Mesh\"** button in the toolbar."
+msgstr ""
+
+# 48ee70b54e184ebfbd5038e12b55e040
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:17
+msgid "**\"Build Compound Mesh\" button**"
+msgstr ""
+
+# f1035bf666d34447a81f354e3abdde43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:20
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 7b2ce5d693c04a7d976032fe2a719fcf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:25
+msgid "**Name** - allows selecting the name of the resulting **Compound** mesh."
+msgstr ""
+
+# 45bb597168cd4515936ab86be4ab002d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:26
+msgid ""
+"**Meshes, sub-meshes, groups** - allows selecting the meshes, sub-meshes "
+"and groups to be concatenated. They can be chosen in the Object Browser "
+"while holding **Ctrl** button."
+msgstr ""
+
+# ada9e86048ff49ec9518d83ed23bcdae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:27
+msgid ""
+"**Processing identical groups** - allows selecting the method of "
+"processing the namesake groups existing in the input meshes. They can be "
+"either"
+msgstr ""
+
+# 5ddde549badf4897bf5c070e00601711
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:29
+msgid ""
+"**United** - all elements of **Group1** of **Mesh_1** and **Group1** of "
+"**Mesh_2** become the elements of **Group1** of the **Compound_Mesh**, or"
+msgstr ""
+
+# cd183fb362f54a8d89255ee5a53fe390
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:30
+msgid ""
+"**Renamed** - **Group1** of **Mesh_1** becomes **Group1_1** and "
+"**Group1** of **Mesh_2** becomes **Group1_2**."
+msgstr ""
+
+# ac06126abbd94f50acff31e923c5e1c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:32
+msgid "See :ref:`grouping_elements_page` for more information about groups."
+msgstr ""
+
+# 253ffe6ee5f044ff9859469e41b73457
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:33
+msgid ""
+"**Create groups from input objects** check-box permits to automatically "
+"create groups corresponding to every initial mesh."
+msgstr ""
+
+# 642a6a491eb54a51a35daf71ec5f8ad4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:41
+msgid ""
+"You can choose to additionally :ref:`merging_nodes_page`, "
+":ref:`merging_elements_page` in the compound mesh, in which case it is "
+"possible to define the **Tolerance** for this operation."
+msgstr ""
+
+# 188a4077b8a34a7c9b5f004b744f31b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/building_compounds.rst:49
+msgid "**See Also** a sample :ref:`tui_building_compound`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cartesian_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cartesian_algo.po
new file mode 100644 (file)
index 0000000..a0b6377
--- /dev/null
@@ -0,0 +1,223 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# a8e930acb63f44f4b997deb515406300
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:5
+msgid "Body Fitting 3D meshing algorithm"
+msgstr ""
+
+# 9910dbcae2b54873a9fbe1949092c565
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:7
+msgid ""
+"Body Fitting algorithm generates hexahedrons of a Cartesian grid in the "
+"internal part of geometry and polyhedrons and other types of elements at "
+"the intersection of Cartesian cells with the geometrical boundary."
+msgstr ""
+
+# d7359f93f6a548bdad23de6ae3d468cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:18
+msgid "The meshing algorithm is as follows."
+msgstr ""
+
+# 40dcc8dc839149ccae3463069ccedc40
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:20
+msgid ""
+"Lines of a Cartesian structured grid defined by "
+":ref:`cartesian_hyp_anchor` hypothesis are intersected with the geometry "
+"boundary, thus nodes lying on the boundary are found. This step also "
+"allows finding out for each node of the Cartesian grid if it is inside or"
+" outside the geometry."
+msgstr ""
+
+# 5086ae5fb11d492588240d7cb7c2ab6e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:21
+msgid ""
+"For each cell of the grid, check how many of its nodes are outside of the"
+" geometry boundary. Depending on a result of this check"
+msgstr ""
+
+# 8f9abd85d3314fbc960850ffc427d32c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:22
+msgid "skip a cell, if all its nodes are outside"
+msgstr ""
+
+# b4a9ee73831a4b78b1beed76ea20ebc3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:23
+msgid "skip a cell, if it is too small according to **Size Threshold** parameter"
+msgstr ""
+
+# a6636e49ee944dc49d1443efe959e6dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:24
+msgid "add a hexahedron in the mesh, if all nodes are inside"
+msgstr ""
+
+# a342af446281426e939081be935cc062
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:25
+msgid ""
+"add a polyhedron or another cell type in the mesh, if some nodes are "
+"inside and some outside."
+msgstr ""
+
+# 1b709cb0a50c4116b737a084946641e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:27
+msgid ""
+"To apply this algorithm when you define your mesh, select **Body "
+"Fitting** in the list of 3D algorithms and add **Body Fitting  "
+"Parameters** hypothesis. The following dialog will appear:"
+msgstr ""
+
+# 43f05e2d944c45a8ba6e9a588efd7a72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:32
+msgid "Body Fitting Parameters hypothesis"
+msgstr ""
+
+# 2b52cecbc75c4291b7c67f8a35b75aa8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:40
+msgid "This dialog allows to define"
+msgstr ""
+
+# d87ae3b140c4486b99566c643801769f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:42
+msgid "**Name** of the algorithm."
+msgstr ""
+
+# ef240d03b53c43c786f69034ea33eff6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:43
+msgid ""
+"Minimal size of a cell truncated by the geometry boundary. If the size of"
+" a truncated grid cell is **Threshold** times less than a initial cell "
+"size, then a mesh element is not created."
+msgstr ""
+
+# bd47ac9350824864aa06382db8ee86bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:44
+msgid ""
+"**Implement Edges** check-box activates incorporation of geometrical "
+"edges in the mesh."
+msgstr ""
+
+# 5baff056db5e4d83a014f9b7ee4870d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:52
+msgid ""
+"**Definition mode** allows choosing how Cartesian structured grid is "
+"defined. Location of nodes along each grid axis is defined individually:"
+msgstr ""
+
+# 04af1c69153943fc94b0eb1559764663
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:55
+msgid ""
+"You can specify the **Coordinates** of grid nodes. **Insert** button "
+"inserts a node at **Step** distance (negative or positive) from the "
+"selected node. **Delete** button removes the selected node. Double click "
+"on a coordinate in the list enables its edition."
+msgstr ""
+
+# 498e3aacb6d049dd9cbf56e2d276d388
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:56
+msgid ""
+"that node coordinates are measured along directions of axes that can "
+"differ from the directions of the Global Coordinate System."
+msgstr ""
+
+# 8e8eb1fa61b84f73b31fbd1309e136bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:57
+msgid ""
+"You can define the **Spacing** of a grid as an algebraic formula **f(t)**"
+" where *t* is a position along a grid axis normalized at [0.0,1.0]. "
+"**f(t)** must be non-negative at 0. <= *t* <= 1. The whole extent of "
+"geometry can be divided into ranges with their own spacing formulas to "
+"apply; a t varies between 0.0 and 1.0 within each **Range**. **Insert** "
+"button divides a selected range into two. **Delete** button adds the "
+"selected sub-range to the previous one. Double click on a range in the "
+"list enables edition of its right boundary. Double click on a function in"
+" the list enables its edition."
+msgstr ""
+
+# 77758a7e751a4659a9b8332760e46d53
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:59
+msgid ""
+"**Fixed Point** group allows defining an exact location of a grid node in"
+" the direction defined by spacing. The following cases are possible:"
+msgstr ""
+
+# 0d7a5b6700b5418b8ecff106ab703ff9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:61
+msgid ""
+"If all three directions are defined by spacing, there will be a mesh node"
+" at the **Fixed Point**."
+msgstr ""
+
+# 780deb00eb6543fe8c3cd80c09cf9f9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:62
+msgid ""
+"If two directions are defined by spacing, there will be at least a link "
+"between mesh nodes passing through the **Fixed Point**."
+msgstr ""
+
+# 9f89cbedc11c4b808087371c5843b502
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:63
+msgid ""
+"If only one direction is defined by spacing, there will be at least an "
+"element facet passing through the **Fixed Point**."
+msgstr ""
+
+# 7c3cfc7fa79448998f6ad6e1c6fcb1a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:64
+msgid "If no directions are defined by spacing, **Fixed Point** is disabled."
+msgstr ""
+
+# 1c1175fe90b24bd5be0f5c3a254698e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:66
+msgid "**Directions of Axes** group allows setting the directions of grid axes."
+msgstr ""
+
+# 45a3134007e2474085d37c880226b945
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:68
+msgid ""
+"If **Orthogonal Axes** check-box is activated the axes remain orthogonal "
+"during their modification."
+msgstr ""
+
+# 5e62f1b6a9da4933b9311638965b67ab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:69
+msgid ""
+"Selection buttons enable snapping corresponding axes to direction of a "
+"geometrical edge selected in the Object Browser. Edge direction is "
+"defined by coordinates of its end points."
+msgstr ""
+
+# 137f0b6c5afa4c35bb2460e208d31705
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:70
+msgid ""
+"**Optimal Axes** button runs an algorithm that tries to set the axes to "
+"maximize the number of generated hexahedra."
+msgstr ""
+
+# 3d3c72fee116466bbe4150c2ed3bbe66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:71
+msgid ""
+"**Reset** button returns the axes in a default position parallel to the "
+"axes of the Global Coordinate System."
+msgstr ""
+
+# bca1ceb497d2487ab725b4d1cb3a4ec3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cartesian_algo.rst:76
+msgid "**See Also** a sample TUI Script of a :ref:`tui_cartesian_algo`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po
new file mode 100644 (file)
index 0000000..5105c8a
--- /dev/null
@@ -0,0 +1,96 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# fe2d10c3ec6b438db0264d47280f4894
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:5
+msgid "Changing orientation of elements"
+msgstr ""
+
+# 4d5617c88bcf43cb8667c686d3bb0649
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:7
+msgid "Orientation of an element is changed by changing the order of its nodes."
+msgstr ""
+
+# 5bd693b83b37438b8a853857526df8a6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:9
+msgid "**To change orientation of elements:**"
+msgstr ""
+
+# 0989cbc9c32b4632b859c1a2b284426f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:11
+msgid ""
+"Select a mesh (and display it in the 3D Viewer if you are going to pick "
+"elements by mouse)."
+msgstr ""
+
+# f516165c8bcb42fcaee35e3aa6f2b5bc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:12
+msgid ""
+"In the **Modification** menu select the **Orientation** item or click "
+"**Orientation** button in the toolbar."
+msgstr ""
+
+# 1e49fcdcf3444562aa6a13fa03a496c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:20
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 03b85e641f264b93ba8db4173acaf1bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:25
+msgid "Select type of elements to reorient: **Face** or **Volume**."
+msgstr ""
+
+# e65a101a42394045b9c9e79e71df9187
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:26
+msgid ""
+"**The main list** shall contain the elements which will be reoriented. "
+"You can click on an element in the 3D viewer and it will be highlighted. "
+"After that click the **Add** button and the ID of this element will be "
+"added to the list. To remove a selected element or elements from the list"
+" click the **Remove** button. The **Sort** button allows to sort the list"
+" of elements IDs. The **Set filter** button allows to apply a definite "
+":ref:`filtering_elements` \"filter\" to the selection of elements."
+msgstr ""
+
+# d715ca1c7caa411ca50d180fa6c0ab80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:27
+msgid ""
+"**Apply to all** radio button allows to modify the orientation of all "
+"elements of the selected mesh."
+msgstr ""
+
+# 7d9a89decc7f41699a18cfe7d0d75f13
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:28
+msgid ""
+"*Select from** set of fields allows to choose a sub-mesh or an existing "
+"group whose elements can be added to the list."
+msgstr ""
+
+# c96eeaddc54c4a48b260b5f7e265fa3a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:30
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm the "
+"operation."
+msgstr ""
+
+# 5fcf6f8346c946a49e70a860cd81931f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst:32
+msgid "**See Also** a sample TUI Script of a :ref:`tui_orientation` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/clipping.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/clipping.po
new file mode 100644 (file)
index 0000000..a2e56f8
--- /dev/null
@@ -0,0 +1,155 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# ceb118d3f4cb467c9ede1c28cacfc0a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:5
+msgid "Clipping"
+msgstr ""
+
+# e19904b1f4e545ccb7382a3fb8372d4a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:7
+msgid ""
+"**Clipping** allows creating cross-section views (clipping planes) of "
+"your mesh. It is available as a sub-item in the context menu of an active"
+" mesh. To create a clipping plane, click on the **New** button in the "
+"dialog and choose how it is  defined: by **Absolute** or **Relative** "
+"coordinates. **Absolute Coordinates**"
+msgstr ""
+
+# 0d52999f90594fedbee68d90b3aab4af
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:15
+msgid ""
+"**Base point** - allows defining the coordinates of the base point for "
+"the clipping plane."
+msgstr ""
+
+# 3ba5b5e4f43d4f4e954bc31d09d62031
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:16
+msgid "**Reset** - returns the base point to coordinate origin."
+msgstr ""
+
+# 2e7752ba55ce4f6885e05619a6991789
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:17
+msgid "**Direction** - allows defining the orientation of the clipping plane."
+msgstr ""
+
+# 28e905d68bb341a68b0beae8da9c86f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:18
+msgid ""
+"**Invert** - allows selecting, which part of the object will be removed "
+"and which will remain after clipping."
+msgstr ""
+
+# 1734f629e76a45d7b278ef60498609bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:20
+msgid "**Relative mode**"
+msgstr ""
+
+# 9f5a256c38f14fde80e06168db416a39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:25
+msgid "**Orientation** ( ||X-Y, ||X-Z or ||Y-Z)."
+msgstr ""
+
+# 933953854d944d4097ac9485693e044e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:26
+msgid ""
+"**Distance** between the opposite extremities of the boundary box of "
+"selected objects, if it is set to 0.5 the boundary box is split in two "
+"halves."
+msgstr ""
+
+# 54f7cd8ae92c486e8567a4d21760e2a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:27
+msgid ""
+"**Rotation** (in angle degrees) **around X** (Y to Z) and **around Y** (X"
+" to Z) (depending on the chosen Orientation)"
+msgstr ""
+
+# d19ba527c11f4ffa8a1acb71d26f97bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:32
+msgid "\"The preview plane and the cut object\""
+msgstr ""
+
+# 77794a5cf0784f70859fcb0327a488d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:34
+msgid "The other parameters are available in both modes :"
+msgstr ""
+
+# 957ea51506dc40b0adc032c5fd0096f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:36
+msgid ""
+"**OpenGL clipping** check-box allows choosing OpenGL native clipping, "
+"which clips the whole presentation. If it is unchecked, the clipping is "
+"done on the dataset i.e. only the visibility of separate mesh cells is "
+"changed (see the examples)."
+msgstr ""
+
+# 639fff4f76f24519854f7e90eff8338b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:37
+msgid ""
+"The List contains **Meshes, sub-meshes and groups** to which the cross-"
+"section will be applied."
+msgstr ""
+
+# f02378bb1d49463dbb09a0b1f9a24a74
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:38
+msgid ""
+"**Select all** check-box allows to selecting and deselecting all "
+"available objects at once."
+msgstr ""
+
+# cf9db5bce38f4659bd092817cf5a32b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:39
+msgid "**Show preview** check-box shows the clipping plane in the **3D Viewer**."
+msgstr ""
+
+# 3f8e80ea656d464c9daa6f17aa70d7b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:40
+msgid ""
+"**Auto Apply** check-box shows button is on, you can preview the cross-"
+"section in the **3D Viewer**."
+msgstr ""
+
+# fe51b17a0ff6427980d17a9e399e40b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:42
+msgid ""
+"It is also possible to interact  with the clipping plane directly in 3D "
+"view using the mouse."
+msgstr ""
+
+# 43e1d59fcd374017a1faddb5ea481ea9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:44
+msgid "To get a new object from **Clipping**, click **Apply**."
+msgstr ""
+
+# 0ca0d76ecbf94a36a2b63b9cadb7470b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:46
+msgid "**Examples:**"
+msgstr ""
+
+# 2b9286e5d01f46be8021b2a959fb9650
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:51
+msgid "\"The cross-section using dataset\""
+msgstr ""
+
+# 5521df28f71943719c6f67617bf9678e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/clipping.rst:56
+msgid "\"The OpenGL cross-section\""
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/colors_size.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/colors_size.po
new file mode 100644 (file)
index 0000000..2e863e0
--- /dev/null
@@ -0,0 +1,189 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 25d2f26ace5b4b829c8a87ada850ddf3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:5
+msgid "Properties"
+msgstr ""
+
+# 2997394fe84a44f88c477482d902c875
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:10
+msgid ""
+"Using this dialog you can customize different properties of the mesh "
+"visualization parameters."
+msgstr ""
+
+# 31ec38d757fc4badb8d42324193fcab7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:12
+msgid ""
+"The GUI elements in the \"Properties\" dialog box are grouped according "
+"to the entity types of mesh data. If some data entities are not present "
+"in the mesh object, the corresponding GUI elements are not shown."
+msgstr ""
+
+# 655c3a41d3fa45b2a7c4b5a535850a84
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:15
+msgid "**Nodes**:"
+msgstr ""
+
+# fcc0e7b140ea49df90de65f407fe638c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:15
+msgid "**Color** - color of nodes."
+msgstr ""
+
+# 2dc38fccf0464b21a18d71a9b469aea9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:16
+msgid ""
+"**Type** and **Scale** - these options allow changing the nodes "
+"representation (see :ref:point_marker_page \"Point Marker\" page for more"
+" details)."
+msgstr ""
+
+# faae687f9e164f03a8714f74be9ff516
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:18
+msgid "**Edges / wireframe**:"
+msgstr ""
+
+# f60f348a1e044ff6881398709e6ddf52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:18
+msgid "**Color** - color of element borders in wireframe mode."
+msgstr ""
+
+# 6adaf5a525794040a264748695570501
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:19
+msgid ""
+"**Width** - width of lines (edges and borders of elements in wireframe "
+"mode)."
+msgstr ""
+
+# e48a7e183557491a9e3fcad995f0b6f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:21
+msgid "**Faces**:"
+msgstr ""
+
+# ef55986094b643f38e984ff14d9a0ef2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:21
+msgid "**Front** - surface color of face elements (seen in shading mode)."
+msgstr ""
+
+# 99746ad5f3b2461aaf22ea0d1f88e4fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:22
+msgid ""
+"**Back** - backside surface color of face elements. Use the slider to "
+"select this color generated on the base of the **Face** color by changing"
+" its brightness and saturation."
+msgstr ""
+
+# 996adee3928449c4844f05c8679d5c10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:24
+msgid "**Volumes**:"
+msgstr ""
+
+# 8b8a404f6c3d49758ded898c5ebf4b28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:24
+msgid ""
+"**Normal** - surface color of normal volume elements (seen in shading "
+"mode)."
+msgstr ""
+
+# 1b4f147aba284490a763af666ee1cf20
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:25
+msgid ""
+"**Reversed** - surface color of volume elements. Use the slider to select"
+" this color generated on the base of the **Normal** color by changing its"
+" brightness and saturation."
+msgstr ""
+
+# 1539339650874bd3960985a85822a812
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:27
+msgid "**Outlines**:"
+msgstr ""
+
+# 68b3ee1f2ef74b1fbf8101a25f1ea553
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:27
+msgid "**Color** - color of element borders in shading mode."
+msgstr ""
+
+# 760937016686488880f8c72c2494a896
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:28
+msgid "**Width** - width of outlines (borders of elements in shading mode)."
+msgstr ""
+
+# dd46341914784677b8cb0951668ce54d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:30
+msgid "**0D elements**:"
+msgstr ""
+
+# 524e211e12034fbca561d87318b9e099
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:30
+msgid "**Color** - color of 0D elements."
+msgstr ""
+
+# dcdae6f65e7e48de8be8b79cb374855b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:31
+msgid "**Size** - size of 0D elements."
+msgstr ""
+
+# db588562142a4bcba130e8f6ff2794ba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:34
+msgid "**Balls**:"
+msgstr ""
+
+# 0bcfd9f2bf4a404598722f088e30324b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:33
+msgid "**Color** - color of discrete ball elements."
+msgstr ""
+
+# ff10af519b734385b6d2f8f04884b912
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:34
+msgid "**Size** - size of discrete ball elements."
+msgstr ""
+
+# edbd1c084f46466798861d0b55f02875
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:35
+msgid "**Scale** - scale factor of discrete ball elements."
+msgstr ""
+
+# 4fa0f7d6cb234b54b436bfdc82b471ac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:38
+msgid "**Orientation vectors**:"
+msgstr ""
+
+# 3b45de37801e459d8f6de945985a070d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:37
+msgid "**Color** - color of orientation vectors."
+msgstr ""
+
+# c2e38c98b8aa4b2a9674bdf474a61ae3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:38
+msgid "**Scale** - size of orientation vectors."
+msgstr ""
+
+# 3faad5944dc640bbaca6ccd2a1db8748
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:39
+msgid "**3D vectors** - allows to choose between 2D planar and 3D vectors."
+msgstr ""
+
+# e5487d6283fc470dba1d0a129808aa9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/colors_size.rst:40
+msgid ""
+"**Shrink coef.** - relative space of elements compared to gaps between "
+"them in shrink mode."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/connectivity.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/connectivity.po
new file mode 100644 (file)
index 0000000..d5bc250
--- /dev/null
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 11:57+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 544556706e884932836455c9bf692b72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:5
+msgid "Nodal connectivity of elements"
+msgstr ""
+
+# dc5442a27c934a238e10c75791d0cdc2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:7
+msgid "The following images show order of nodes in correctly defined elements."
+msgstr ""
+
+# f1759ea9888d42ebad2675a17a089a4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:11
+msgid "Edge (segment): linear and quadratic"
+msgstr ""
+
+# 9d98eb840a9e4d36b2191cc13a42daa1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:15
+msgid "Triangle: linear, quadratic and bi-quadratic"
+msgstr ""
+
+# 800aafe01e504ac4a445ed1daac9d5b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:19
+msgid "Quadrangle: linear, quadratic and bi-quadratic"
+msgstr ""
+
+# e6fc703e57404d77ab85798ac02894be
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:23
+msgid "Polygon: linear and quadratic"
+msgstr ""
+
+# 81e9425d74ae48d6a3ebc41b6cd7ffc4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:27
+msgid "Tetrahedron: linear and quadratic"
+msgstr ""
+
+# b9a391223bd140ea93750191c3571353
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:31
+msgid "Hexahedron: linear, quadratic and tri-quadratic"
+msgstr ""
+
+# 52e941ab57c84d189bbfe581b827deb6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:35
+msgid "Pentahedron: linear and quadratic"
+msgstr ""
+
+# dee6d00802fd40d3aff3809035f795d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:39
+msgid "Pyramid: linear and quadratic"
+msgstr ""
+
+# d68ca0fe106744ccbf4558512d170341
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:43
+msgid "Hexagonal prism"
+msgstr ""
+
+# 8cfa36e50a2f4d2c9a5a7c127610ff66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:64
+msgid "Polyhedron is defined by"
+msgstr ""
+
+# 2f02aa9e96ec42c4a8d6bd7807c29b45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:47
+msgid "a sequence of nodes defining all facets"
+msgstr ""
+
+# 8217a88659df44468bd5a3704f8d0593
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:48
+msgid "a sequence of number of nodes per facet"
+msgstr ""
+
+# 4fc8f1edb7ef425bb5ffe7aa3a421d7d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:50
+msgid ""
+"**Nodes**: Node1_of_Facet1, Node2_of_Facet1, ..., NodeN_of_Facet1, "
+"Node1_of_Facet2, Node2_of_Facet2, ..., NodeN_of_Facet2, Node1_of_FacetM, "
+"Node2_of_FacetM, ..., NodeN_of_FacetM"
+msgstr ""
+
+# e8077aac24b74221871679bd284551d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:55
+msgid ""
+"**Quantity** of nodes per facet: NbNodes_in_Facet1, NbNodes_in_Facet2, "
+"..., NbNodes_in_FacetM"
+msgstr ""
+
+# 0710dc23cbe244a7bc6e9d9c13477ef9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:58
+msgid ""
+"For example the polyhedron shown in the image below is defined by nodes ["
+" 1,2,3, 1,4,5,2, 2,5,6,3, 3,6,4,1, 4,7,9,5, 5,9,8,6, 6,8,7,4, 7,8,9 ] and"
+" quantities [ 3, 4, 4, 4, 4, 4, 4, 3 ]"
+msgstr ""
+
+# d98803aeeded42439f1e54fe5a83db64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/connectivity.rst:65
+msgid "Order of nodes of a facet must assure outward direction of its normal."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_meshes.po
new file mode 100644 (file)
index 0000000..6664de1
--- /dev/null
@@ -0,0 +1,819 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 35a6bce1095b465fabb44dde0652f678
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:5
+msgid "Constructing meshes"
+msgstr ""
+
+# 6799ee6badd440f88c4d2609a7a06b25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:7
+msgid ""
+"To create a mesh on geometry, it is necessary to create a mesh object by "
+"choosing"
+msgstr ""
+
+# 8f06bf03ed5e458782b05086b05406fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:9
+msgid "a geometrical shape produced in the Geometry module (*main shape*);"
+msgstr ""
+
+# 27fc703367ec47c9b3543de9a457d851
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:12
+msgid "*meshing parameters*, including"
+msgstr ""
+
+# 117c209f24f3493b990791363a4ff7a0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:11
+msgid ":ref:`basic_meshing_algos_page` and"
+msgstr ""
+
+# 9aefbc3f841d49908a17917248299c9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:12
+msgid ""
+":ref:`about_hypo_page` specifying constraints to be taken into account by"
+" the chosen meshing algorithms."
+msgstr ""
+
+# 66d9db4d76a2413fb9252948963441c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:14
+msgid ""
+"Then you can launch mesh generation by invoking :ref:`compute_anchor` "
+"command. The generated mesh will be automatically shown in the Viewer. "
+"You can switch off automatic visualization or limit mesh size until which"
+" it is automatically shown in :ref:`mesh_preferences_page` (**Automatic "
+"update** entry)."
+msgstr ""
+
+# 031fef73322d4036bec803d06c213857
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:20
+msgid ""
+"Sometimes *hypotheses* term is used to refer to both algorithms and "
+"hypotheses."
+msgstr ""
+
+# 5b1b5a16624b43aaabf130e214850262
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:22
+msgid ""
+"Mesh generation on the geometry is performed in the bottom-up flow: nodes"
+" on vertices are created first, then edges are divided into segments "
+"using nodes on vertices; the nodes of segments are then used to mesh "
+"faces; then the nodes of faces are used to mesh solids. This "
+"automatically assures the conformity of the mesh."
+msgstr ""
+
+# 01a7a1179d7242489aade2846022bb0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:28
+msgid ""
+"It is required to choose a meshing algorithm for every dimension of sub-"
+"shapes up to the highest dimension to be generated. Note that some "
+"algorithms generate elements of several dimensions, and others of only "
+"one. It is not necessary to define meshing parameters for all dimensions "
+"at once; you can start from 1D meshing parameters only, compute the 1D "
+"mesh, then define 2D meshing parameters and compute the 2D mesh (note "
+"that 1D mesh will not be re-computed)."
+msgstr ""
+
+# db1f1b20a38c4773b327e70c23e7fa87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:37
+msgid ""
+"An algorithm of a certain dimension chosen at mesh creation is applied to"
+" discretize every sub-shape of this dimension. It is possible to specify "
+"a different algorithm or hypothesis to be applied to one or a group of "
+"sub-shapes by creating a :ref:`constructing_submeshes_page`. You can "
+"specify no algorithms at all at mesh object creation and specify the "
+"meshing parameters on sub-meshes only; then only the sub-shapes, for "
+"which an algorithm and a hypothesis (if any) have been defined will be "
+"discretized."
+msgstr ""
+
+# 1cc36153af4b41c2b2e40dcdf79074fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:46
+msgid ""
+"Construction of a mesh on a geometry includes at least two "
+"(:ref:`create_mesh_anchor` and :ref:`compute_anchor`) of the following "
+"steps:"
+msgstr ""
+
+# 3a3ed77dbdc24aea8491fcdf18e36e4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:48
+msgid ""
+":ref:`create_mesh_anchor`, where you can specify meshing parameters to "
+"apply to all sub-shapes of the main shape."
+msgstr ""
+
+# 17d14027f31f4503bafb86c3addeba89
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:49
+msgid ""
+":ref:`constructing_submeshes_page`, (optional) where you can specify "
+"meshing parameters to apply to the selected sub-shapes."
+msgstr ""
+
+# 66722c0909e847459028d210bd99ac98
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:50
+msgid ""
+":ref:`evaluate_anchor` (optional) can be used to know an approximate "
+"number of elements before their actual generation."
+msgstr ""
+
+# 2297f50a14754737bb784d905947b5a6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:51
+msgid ""
+":ref:`preview_anchor` (optional) can be used to generate mesh of only "
+"lower dimension(s) in order to visually estimate it before full mesh "
+"generation, which can be much longer."
+msgstr ""
+
+# 3b4674e6440e48a183b41e5feb5b3881
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:52
+msgid ""
+":ref:`submesh_order_anchor` (optional) can be useful if there are "
+"concurrent sub-meshes defined."
+msgstr ""
+
+# 1fa25cbc35584fd886fea4763c4c72f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:53
+msgid ""
+":ref:`compute_anchor` uses defined meshing parameters to generate mesh "
+"elements."
+msgstr ""
+
+# 45e6866d043e48a8930fe2ace94ed287
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:54
+msgid ""
+":ref:`edit_anchor` (optional) can be used to :ref:`modifying_meshes_page`"
+" the mesh of a lower dimension before :ref:`compute_anchor` elements of "
+"an upper dimension."
+msgstr ""
+
+# 520242a7013c4dd78c6e7772ca553008
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:60
+msgid "Creation of a mesh object"
+msgstr ""
+
+# 9ac62efda06c462199e0bb84bad38740
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:62
+msgid "**To construct a mesh:**"
+msgstr ""
+
+# 7bb8b082000840e3ae1bbf00611dcf19
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:64
+msgid "Select a geometrical object for meshing."
+msgstr ""
+
+# 884454ebff044f98b7f6a815d0ef5ad4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:65
+msgid ""
+"In the **Mesh** menu select **Create Mesh** or click **\"Create Mesh\"** "
+"button in the toolbar."
+msgstr ""
+
+# dfd67b2436424371903f4028dc636ecd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:73
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 3215a25a328e43cea0c717ed5af5a1eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:78
+msgid ""
+"To filter off irrelevant meshing algorithms, you can select **Mesh Type**"
+" in the corresponding list from **Any, Hexahedral, Tetrahedral, "
+"Triangular** and **Quadrilateral** (there can be less items for the "
+"geometry of lower dimensions). Selection of a mesh type hides all meshing"
+" algorithms that cannot generate elements of this type."
+msgstr ""
+
+# 91421ed52fd34f79b3eb4949a699a357
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:80
+msgid ""
+"Apply :ref:`basic_meshing_algos_page` and :ref:`about_hypo_page` which "
+"will be used to compute this mesh."
+msgstr ""
+
+# b04311b3ce03402da2227e8a2aeb22cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:82
+msgid ""
+"\"Create mesh\" dialog box contains several tab pages titled **3D**, "
+"**2D**, **1D** and **0D**. The title of each page reflects the dimension "
+"of the sub-shapes the algorithms listed on this page affect and the "
+"maximal dimension of elements the algorithms generate. For example, "
+"**3D** page lists the algorithms that affect 3D sub-shapes (solids) and "
+"generate 3D mesh elements (tetrahedra, hexahedra etc.)"
+msgstr ""
+
+# a1cd5bdf6585476aa808f1365c919d1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:84
+msgid ""
+"As soon as you have selected an algorithm, you can create a hypothesis "
+"(or select an already created one). A set of accessible hypotheses "
+"includes only the hypotheses that can be used by the selected algorithm."
+msgstr ""
+
+# b7da1d8d2df0427b8e8a42a3ac4cb43b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:87
+msgid ""
+"Some page(s) can be disabled if the geometrical object does not include "
+"shapes (sub-shapes) of the corresponding dimension(s). For example, if "
+"the input object is a geometrical face, **3D** page is disabled."
+msgstr ""
+
+# f8d6c54b422d437385cdf39ea7ff66b7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:88
+msgid ""
+"Some algorithms affect the geometry of several dimensions, i.e. 1D+2D or "
+"1D+2D+3D. If such an algorithm is selected, the dialog pages related to "
+"the corresponding lower dimensions are disabled."
+msgstr ""
+
+# bae8798576284526a61201c4b3bc4852
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:89
+msgid ""
+"**0D** page refers to 0D geometry (vertices) rather than to 0D elements. "
+"Mesh module does not provide algorithms that produce 0D elements. "
+"Currently **0D** page provides only one algorithm \"Segments around "
+"vertex\" that allows specifying the required size of mesh edges about the"
+" selected vertex (or vertices)."
+msgstr ""
+
+# 6d786dbce4a34dd8a8f4c55d29447059
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:91
+msgid "For example, you need to mesh a 3D object."
+msgstr ""
+
+# acc400d18f4d4e3e8233d3ba4c7ee40c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:98
+msgid ""
+"First, you can change a default name of your mesh in the **Name** box. "
+"Then check that the selected geometrical object indicated in **Geometry**"
+" field, is what you wish to mesh; if not, select the correct object in "
+"the Object Browser. Click \"Select\" button near **Geometry** field if "
+"the name of the object has not yet appeared in **Geometry** field."
+msgstr ""
+
+# b3d6b94bf1854d908d55066eff4793c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:105
+msgid ""
+"Now you can define 3D Algorithm and 3D Hypotheses, which will be applied "
+"to discretize the solids of your geometrical object using 3D elements. "
+"Click the **\"Add Hypothesis\"** button to create  and add a hypothesis."
+msgstr ""
+
+# 43aad14857134ff694b57418c2b9c553
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:107
+msgid "Click the **\"Plus\"** button to enable adding more additional hypotheses."
+msgstr ""
+
+# 81bfbd32aedb4c9fa4f4866c44941d47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:114
+msgid ""
+"Click the **\"Edit Hypothesis\"** button to change the values for the "
+"current hypothesis."
+msgstr ""
+
+# 3cf1d63b1511452a937f0afe68fc74cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:116
+msgid ""
+"Most 2D and 3D algorithms can work without hypotheses using default "
+"meshing parameters. Some algorithms do not require any hypotheses. After "
+"selection of an algorithm \"Hypothesis\" field of the dialog can contain:"
+msgstr ""
+
+# e64c32c9aa484aad89b33cedd41b535e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:118
+msgid "**\\<Default\\>** if the algorithm can work using default parameters."
+msgstr ""
+
+# 837bde06cd3b4edda687a8ee03988eff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:119
+msgid ""
+"**\\<None\\>** if the algorithm requires a hypothesis defining its "
+"parameters."
+msgstr ""
+
+# 167fb1f44282436aae9e8168a8d2fc92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:120
+msgid "If the algorithm does not use hypotheses, this field is grayed."
+msgstr ""
+
+# 0eb15e737c2c4807afc1db58d94f31ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:122
+msgid "After selection of an algorithm **Add. Hypothesis** field can contain:"
+msgstr ""
+
+# 7c6acd80061c47aa82b914f790c43b50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:124
+msgid ""
+"**\\<None\\>** if the algorithm can be tuned using an additional "
+"hypothesis."
+msgstr ""
+
+# 3dbebd2338684d7a8ac7e931736488f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:125
+msgid "If the algorithm does not use additional hypotheses, this field is grayed."
+msgstr ""
+
+# a7246cd9501342cc851a57f1225011a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:128
+msgid ""
+"Proceed in the same way with 2D and 1D Algorithms and Hypotheses that "
+"will be used to mesh faces and edges of your geometry. (Note that any "
+"object has edges, even if their existence is not apparent, for example, a"
+" sphere has 4 edges). Note that the choice of hypotheses and lower "
+"dimension algorithms depends on the higher dimension algorithm."
+msgstr ""
+
+# 8ead53be1024488e847e532a9476d06b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:130
+msgid ""
+"If you wish you can select other algorithms and/or hypotheses for meshing"
+" some sub-shapes of your CAD model by :ref:`constructing_submeshes_page`."
+msgstr ""
+
+# 396d01fdc08d473287f072274be2a413
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:132
+msgid ""
+"Some algorithms generate mesh of several dimensions, while others produce"
+" mesh of only one dimension. In the latter case there must be one "
+"Algorithm and zero or several Hypotheses for each dimension of your "
+"object, otherwise you will not get any mesh at all. Of course, if you "
+"wish to mesh a face, which is a 2D object, you do not need to define a 3D"
+" Algorithm and Hypotheses."
+msgstr ""
+
+# ea9666bc33b04d11885e95f751aa40e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:134
+msgid ""
+"In the **Object Browser** the structure of the new mesh is displayed as "
+"follows:"
+msgstr ""
+
+# f7ac7badac6842f79434fcaa9791f7cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:139
+msgid "It contains:"
+msgstr ""
+
+# fb3397d4abdb4b78859a81410ffee107
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:141
+msgid "a mesh name (**Mesh_mechanic**);"
+msgstr ""
+
+# 1167ac91887746d2bcab140eb8280f97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:142
+msgid ""
+"a reference to the geometrical object on the basis of which the mesh has "
+"been constructed (*mechanic*);"
+msgstr ""
+
+# 799d3cc185da4b879bccc4b7f993f12d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:143
+msgid ""
+"**Applied hypotheses** folder containing the references to the hypotheses"
+" chosen at the construction of the mesh;"
+msgstr ""
+
+# 893ccebd1d654ddab671c14b92fca974
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:144
+msgid ""
+"**Applied algorithms** folder containing the references to the algorithms"
+" chosen at the construction of the mesh."
+msgstr ""
+
+# c04a128f95144a5885051b9ea865e54f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:145
+msgid ""
+"**SubMeshes on Face** folder containing the sub-meshes defined on "
+"geometrical faces. There also can be folders for sub-meshes on vertices, "
+"edges, wires, shells, solids and compounds."
+msgstr ""
+
+# dff4c4a8948a442499340b64b19b1221
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:146
+msgid ""
+"**Groups of Faces** folder containing the groups of mesh faces. There "
+"also can be folders for groups of nodes, edges, volumes 0D elements and "
+"balls."
+msgstr ""
+
+# 02316e8c5f54451bbbb1f692ca13778a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:149
+msgid ""
+"There is an alternative way to assign Algorithms and Hypotheses by "
+"clicking **Assign a set of hypotheses** button and selecting among pre-"
+"defined sets of algorithms and hypotheses. In addition to the built-in "
+"sets of hypotheses, it is possible to create custom sets by editing "
+"CustomMeshers.xml file located in the home directory. CustomMeshers.xml "
+"file must describe sets of hypotheses in the same way as "
+"${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml file does "
+"(sets of hypotheses are enclosed between \\<hypotheses-set-group\\> "
+"tags). For example: ::"
+msgstr ""
+
+# aeef8be810624f59be9f0d7834858269
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:162
+msgid ""
+"If the file contents are incorrect, there can be an error at activation "
+"of Mesh module: **\"fatal parsing error: error triggered by consumer in "
+"line ...\"**"
+msgstr ""
+
+# e229cf9561124f7fafba9ae4637112a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:167
+msgid ""
+"List of sets of hypotheses. Tag **[custom]** is automatically added to "
+"the sets defined by the user."
+msgstr ""
+
+# a839bd695c4f4ffc8d7972e4eb743455
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:170
+msgid ""
+"*\"Automatic\"* in the names of predefined sets of hypotheses does not "
+"actually mean that they are suitable for meshing any geometry."
+msgstr ""
+
+# 10c50356cf44475cad554d56daebf771
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:171
+msgid ""
+"The list of sets of hypotheses can be shorter than in the above image "
+"depending on the geometry dimension."
+msgstr ""
+
+# d41cb527e2bc4fe9a5b9a782bf9775c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:174
+msgid ""
+"Consider trying a sample script for construction of a mesh from our "
+":ref:`tui_creating_meshes_page` section."
+msgstr ""
+
+# 35525ecb30bd46fa9e42928143f8ced0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:179
+msgid "Evaluating mesh size"
+msgstr ""
+
+# 51368d5040804dc4b7927584b827f197
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:181
+msgid ""
+"After the mesh object is created and all hypotheses are assigned and "
+"before :ref:`compute_anchor` operation, it is possible to calculate the "
+"eventual mesh size. For this, select the mesh in the **Object Browser** "
+"and from the **Mesh** menu select **Evaluate**. The result of evaluation "
+"will be displayed in the following information box:"
+msgstr ""
+
+# 1fa07ee04a024eba9a896ddac279c8ac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:190
+msgid "Previewing the mesh"
+msgstr ""
+
+# 77c3ec771e6b491aa62e6df1bab0215b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:192
+msgid ""
+"Before :ref:`compute_anchor` , it is also possible to see the mesh "
+"preview. This operation allows to incrementally compute the mesh, "
+"dimension by dimension, and to discard an unsatisfactory mesh."
+msgstr ""
+
+# 02eb9a3faafb465395536def97113eff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:194
+msgid ""
+"For this, select the mesh in the Object Browser. From the **Mesh** menu "
+"select **Preview** or click \"Preview\" button in the toolbar or activate"
+" \"Preview\" item from the pop-up menu."
+msgstr ""
+
+# cae5eac0aaa24cb0bc9edbaf677889b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:202
+msgid "Select **1D mesh** or **2D mesh** preview mode in the Preview dialog."
+msgstr ""
+
+# 430d6d6c0f784909874e9c95c8f9ceb8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:218
+msgid "**Compute** button computes the whole mesh."
+msgstr ""
+
+# d5edccc13ca343c49e62430cbccb1903
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:220
+msgid ""
+"When the Preview dialog is closed, the question about the storage of "
+"temporarily created mesh elements appears:"
+msgstr ""
+
+# 2a13fbef304843fca5b33f991891a670
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:225
+msgid "These elements can be kept in the mesh."
+msgstr ""
+
+# a1e92798cd1f4a54b8ea76440e8cdf63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:231
+msgid "Changing sub-mesh priority"
+msgstr ""
+
+# 004d8f83536b4c54b3738d0d87bb1867
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:233
+msgid ""
+"If the mesh contains concurrent :ref:`constructing_submeshes_page`, it is"
+" possible to change the priority of their computation, i.e. to change the"
+" priority of applying algorithms to the shared sub-shapes of the Mesh "
+"shape."
+msgstr ""
+
+# 75c42caf0e8043dcb989055191e9b406
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:235
+msgid "**To change sub-mesh priority:**"
+msgstr ""
+
+# 41e08c22f2524e14917e99a55da724af
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:237
+msgid ""
+"Choose \"Change sub-mesh priority\" from the Mesh menu or a pop-up menu. "
+"The opened dialog shows a list of sub-meshes in the order of their "
+"priority."
+msgstr ""
+
+# 54a55c30130e4ffeb0c17abe8ad883e5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:239
+msgid ""
+"There is an example of sub-mesh order modifications taking a Mesh created"
+" on a Box shape. The main Mesh object:"
+msgstr ""
+
+# a09339ed609242588c4e1e2e6698dfb4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:241
+msgid "*1D* **Wire discretisation** with **Number of Segments** =20"
+msgstr ""
+
+# 223a2036b61245b9a74d39e766c41171
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:242
+msgid "*2D* **Triangle: Mefisto** with Hypothesis **Max Element Area**"
+msgstr ""
+
+# af68c57a6c6541e4a5ee565e61ce82a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:245
+msgid "The first sub-mesh **Submesh_1** created on **Face_1** is:"
+msgstr ""
+
+# 4191031e23f540e09498f3254a4d2fe5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:247
+msgid "*1D* **Wire discretisation** with **Number of Segments** =4"
+msgstr ""
+
+# 6370ac3a9fb84887b43f8a67bc8af0ae
+# 6d3a07784a6b42609cb8a8d5e067a24b
+# fb1de1eb32ee44638f5eab58a8312570
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:248
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:253
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:259
+msgid "*2D* **Triangle: Mefisto** with Hypothesis **MaxElementArea** =1200"
+msgstr ""
+
+# dae60f1eb8924fd19c98131c2b68967a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:250
+msgid "The second sub-mesh **Submesh_2** created on **Face_2** is:"
+msgstr ""
+
+# 6f7d66913e8846d2820e54b67b2ff311
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:252
+msgid "*1D* **Wire discretisation** with **Number of Segments** =8"
+msgstr ""
+
+# 0075cb1b57944449b460c5cbd84c8462
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:256
+msgid "And the last sub-mesh **Submesh_3** created on **Face_3** is:"
+msgstr ""
+
+# f320f5e7c50e46a6a3e8d991c71b4b05
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:258
+msgid "*1D* **Wire discretisation** with **Number of Segments** =12"
+msgstr ""
+
+# f3f15a180c4a4451a51b242d0471adc8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:262
+msgid ""
+"The sub-meshes become concurrent if they share sub-shapes that can be "
+"meshed with different algorithms (or different hypotheses). In the "
+"example, we have three sub-meshes with concurrent algorithms, because "
+"they have different hypotheses."
+msgstr ""
+
+# 879b05bdc25147548a35291dddc94263
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:264
+msgid "The first mesh computation is made with:"
+msgstr ""
+
+# 53ebc41a65514158af854ea7f525f409
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:279
+msgid "The next mesh computation is made with:"
+msgstr ""
+
+# 629461484abc4517b3a0972549a04cfc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:293
+msgid "And the last mesh computation is made with:"
+msgstr ""
+
+# d0f18c41144744baa9b41f3e2753ddb4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:308
+msgid ""
+"As we can see, each mesh computation has a different number of result "
+"elements and a different mesh discretization on the shared edges (the "
+"edges that are shared between **Face_1**, **Face_2** and **Face_3**)"
+msgstr ""
+
+# 5f57089459974700b9daaa0862b11370
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:312
+msgid ""
+"Additionally, sub-mesh priority (the order of applied algorithms) can be "
+"modified not only in a separate dialog box, but also in the **Preview**. "
+"This helps to preview different mesh results, modifying the order of sub-"
+"meshes."
+msgstr ""
+
+# 22f246ae649948639a3e6371b8288185
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:323
+msgid ""
+"If there are no concurrent sub-meshes under the Mesh object, the user "
+"will see the following information."
+msgstr ""
+
+# bd0286f95d4c43eab2cad76e77ebc982
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:336
+msgid "Computing the mesh"
+msgstr ""
+
+# fadce4968b754a0f9a41afeb7cb48573
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:338
+msgid ""
+"It is equally possible to skip  :ref:`evaluate_anchor` and "
+":ref:`preview_anchor` and to **Compute** the mesh after the hypotheses "
+"are assigned. For this, select your mesh in the **Object Browser**. From "
+"the **Mesh** menu or the context menu select **Compute** or click "
+"*\"Compute\"* button of the toolbar."
+msgstr ""
+
+# 0cc9e0020d0742d380060bc06afdc520
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:350
+msgid ""
+"After the mesh computation finishes, the Mesh Computation information box"
+" appears. If you close this box and click \"Compute\" button again, "
+"without previously changing meshing parameters, the mesh will NOT be re-"
+"computed and the Mesh Computation information box will be shown with the "
+"same contents. (To fully re-compute the mesh, invoke "
+":ref:`clear_mesh_anchor` command before)."
+msgstr ""
+
+# 6a2a4ad2643e4d949abd363984f0c0bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:360
+msgid "Meshing Results"
+msgstr ""
+
+# b93b73178564476197eea31627301e35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:362
+msgid ""
+"If the mesh computation has been a success, the box shows information on "
+"the number of entities of different types in the mesh."
+msgstr ""
+
+# e04fbcc854d94f908dffc46beb04e701
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:370
+msgid "Meshing Failed"
+msgstr ""
+
+# 4212b5c23b1b43dfa0a5a8c4f6ea080a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:372
+msgid ""
+"If the mesh computation has failed, the information about the cause of "
+"the failure is provided in **Errors** table."
+msgstr ""
+
+# 6fdec30e41954175a4a96b60453ae773
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:377
+msgid ""
+"After you select an error in **Errors** table, **Show Sub-shape** button "
+"allows visualizing in magenta the geometrical entity meshing of which "
+"failed (Name of this entity or its ID and type is shown in *Sub-shape* "
+"column)."
+msgstr ""
+
+# 56bdf662a9ba4f9d9b02eeaf5b7e6319
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:387
+msgid ""
+"**Publish Sub-shape** button publishes the sub-shape, whose meshing has "
+"failed, in the Geometry component as a child of the main shape, which "
+"allows analyzing the problematic geometry and creating a sub-mesh on it "
+"in order to locally tune the hypotheses."
+msgstr ""
+
+# 12dd5ffbce32416fb376edbbc2459e28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:392
+msgid ""
+"If the failure is caused by an invalid input mesh and the algorithm has "
+"found which mesh entities are bad, **Show bad Mesh** button appears in "
+"the dialog. Clicked, it shows the bad mesh entities in the Viewer in "
+"magenta. Sometimes the shown mesh entities are too small or/and hidden by"
+" other mesh elements. They can be seen after switching the mesh to "
+"Wireframe visualization mode or switching off the visualization of faces "
+"and volumes (if any)."
+msgstr ""
+
+# 9668bc680047467ebfa64d8a99edf715
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:400
+msgid ""
+"**Bad Mesh to Group** button creates groups of bad mesh entities to "
+"facilitate their analysis."
+msgstr ""
+
+# 3750b205e07d49ae946cd1ee904de0cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:405
+msgid ""
+"Edges bounding a hole in the surface are shown in magenta using **Show "
+"bad Mesh** button"
+msgstr ""
+
+# cf8d66c5929c4fa3953306bf91e563c6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:408
+msgid ""
+"Mesh Computation Information box does not appear if you set "
+":ref:`show_comp_result_pref` preference to the \"Never\" value. This "
+"option gives the possibility to control mesh computation reporting. There"
+" are the following possibilities: always show the information box, show "
+"only if an error occurs or never. By default, the information box is "
+"always shown after mesh computation operation."
+msgstr ""
+
+# e498ca4e2a6848f99d7f37d6bc44857c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:413
+msgid "Editing the mesh"
+msgstr ""
+
+# 6a0b3dfdd3764cba94d01c7854ac28ac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:415
+msgid ""
+"It is possible to :ref:`modifying_meshes_page` of a lower dimension "
+"before generation of the mesh of a higher dimension."
+msgstr ""
+
+# 5cfa5a1b73a247d4a450281973d2e37e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:418
+msgid ""
+"For example you can generate a 2D mesh, modify it using e.g. "
+":ref:`pattern_mapping_page`, and then generate a 3D mesh basing on the "
+"modified 2D mesh. The workflow is as follows:"
+msgstr ""
+
+# d0c505f4dc734c5bb42b132969cac374
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:420
+msgid "Define 1D and 2D meshing algorithms."
+msgstr ""
+
+# 58f9803c1a464650b1a217f141cc9020
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:421
+msgid "Compute the mesh. 2D mesh is generated."
+msgstr ""
+
+# f9ed216a02de432d97a491a91dfded16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:422
+msgid "Apply :ref:`pattern_mapping_page`."
+msgstr ""
+
+# 164f7a63410043e2a98fa695d64d7025
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:423
+msgid ""
+"Define 3D meshing algorithms without modifying 1D and 2D algorithms and "
+"hypotheses."
+msgstr ""
+
+# c02d8786afe94ddc941f3db9b97013c4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:424
+msgid "Compute the mesh. 3D mesh is generated."
+msgstr ""
+
+# 0b39821ac1664579bc0a71abb488d558
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:427
+msgid ""
+"Nodes and elements added :ref:`adding_nodes_and_elements_page` cannot be "
+"used in this workflow because the manually created entities are not "
+"attached to any geometry and thus (usually) cannot be found by the mesher"
+" paving a geometry."
+msgstr ""
+
+# f4c5d8f58ed44c5c94387fccac9eb6d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_meshes.rst:429
+msgid ""
+"**See Also** a sample TUI Script demonstrates the possibility of "
+":ref:`tui_editing_while_meshing`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_submeshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_submeshes.po
new file mode 100644 (file)
index 0000000..85b7b52
--- /dev/null
@@ -0,0 +1,321 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 8dcecf5dd1c545e19147f8ccf3f4be58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:5
+msgid "Constructing sub-meshes"
+msgstr ""
+
+# 6a506f87e68e48e5b7ea7b80010086de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# 9092a8b32515476abde848cfc0ceb439
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:9
+msgid ""
+"By purpose, the sub-mesh is an object used to assign to a sub-shape "
+"different meshing parameters than those assigned to the main shape."
+msgstr ""
+
+# 0ee4acaa2bee42f6b8b3d7c4e68487ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:12
+msgid ""
+"Structurally, the sub-mesh is a mesh on a certain sub-shape, or a group "
+"of sub-shapes, possibly generated using different meshing algorithms "
+"and/or hypotheses than those used to generate the mesh on other sub-"
+"shapes."
+msgstr ""
+
+# a1ef92f87bf14e65ad3cedce5de22b00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:17
+msgid ""
+"Creation of a sub-mesh allows to control individually meshing of a "
+"certain sub-shape, thus to get a locally coarser or finer mesh, to get "
+"elements of different types in the same mesh, etc."
+msgstr ""
+
+# 07a309342d234494bbb4235098782816
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:21
+msgid ""
+"A sub-mesh can be meshed individually. To achieve this, select a sub-mesh"
+" and either invoke **Compute Sub-mesh** vai the contextual menu in the "
+"Object Browser or invoke **Mesh > Compute** menu."
+msgstr ""
+
+# 9a43a2135eb3491b9c31fb6428d18d3c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:28
+msgid "How to get a sub-shape for sub-mesh construction"
+msgstr ""
+
+# 0bb30079b4c746d88498b51858622f24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:30
+msgid ""
+"A sub-shape to create a sub-mesh on should be retrieved from the main "
+"shape in one of the following ways:"
+msgstr ""
+
+# 645bdeb400054a1c99a3604a20aa3369
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:33
+msgid "In Geometry module, via **New Entity > Explode** menu."
+msgstr ""
+
+# 7d3c9eca847f4aa395c002896d23ecac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:34
+msgid ""
+"In Geometry module, by creation of a group (**New Entity > Group > Create"
+" Group** menu)."
+msgstr ""
+
+# 36f54e17062a477e867fc45a66074e7c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:35
+msgid ""
+"In Mesh module, by :ref:`subshape_by_mesh_elem` generated on a sub-shape "
+"of interest. This way is accessible if the mesh is already computed."
+msgstr ""
+
+# 94e83c99a6674985a9ed2f1f03d049d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:36
+msgid ""
+"In Mesh module, by clicking **Publish Sub-shape** button in a dialog "
+"showing :ref:`meshing_failed_anchor`."
+msgstr ""
+
+# c2d5116a1495474b9fdc0d2830a70eb3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:42
+msgid "How hypotheses are selected among sub-meshes"
+msgstr ""
+
+# 208be946d3af4a4f8e7e1c9240b4511f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:44
+msgid ""
+"Internally, definition of meshing parameters to apply for discretization "
+"of a certain sub-shape, for example an edge of a compound of solids, "
+"starts from searching an algorithm, 1D as for the edge. The following "
+"sub-shapes are sequentially checked for presence of a sub-mesh where 1D "
+"algorithm is assigned:"
+msgstr ""
+
+# 554476f1034c4aacaac1b482fb64d3e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:50
+msgid "the **edge** itself"
+msgstr ""
+
+# 944fe41bd1e941f78f84a485934e6265
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:51
+msgid "**groups of edges** containing the edge, if any"
+msgstr ""
+
+# 5c0913b3a7b442fb97490e9c84dcf059
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:52
+msgid "**wires** sharing the edge"
+msgstr ""
+
+# 22e406cc95824e26a54daaa69a53505c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:53
+msgid "**faces** sharing the edge"
+msgstr ""
+
+# b9fe4d05bde64b9ca29e2565c61f3c36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:54
+msgid "**groups of faces** sharing the edge, if any"
+msgstr ""
+
+# 5bb54ee1fa174e20b062d17f0400b768
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:55
+msgid "**shells** sharing the edge"
+msgstr ""
+
+# dcaf3739ff2143a3a49f1f9ac3ff224e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:56
+msgid "**solids** sharing the edge"
+msgstr ""
+
+# 2c5e33f52d2048e48a3094420a361549
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:57
+msgid "**groups of solids** sharing the edge, if any"
+msgstr ""
+
+# a1e363cbd33244ad9f4d437db94f4967
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:58
+msgid "the **main shape**"
+msgstr ""
+
+# 4568223193074961bfbb99aca46ddc10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:60
+msgid ""
+"(This sequence of sub-shapes defines the priority of sub-meshes. Thus "
+"more local, i.e. assigned to sub-shape of lower dimension, algorithms and"
+" hypotheses have higher priority during the search of hypotheses to "
+"apply.)"
+msgstr ""
+
+# e182833e02e642b6bc49abad0a6599da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:65
+msgid ""
+"As soon as a 1D algorithm is found, the search stops and the same "
+"sequence of sub-shapes is checked to find the main and additional 1D "
+"hypotheses, which can be taken into account by the found 1D algorithm."
+msgstr ""
+
+# 7e0073bce488402484927894319d9062
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:69
+msgid ""
+"The multi-dimensional algorithms have a higher priority than uni-"
+"dimensional ones if they are assigned to sub-meshes of the same priority."
+msgstr ""
+
+# 9d39131c3a75497180864dce936d15ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:73
+msgid ""
+"If meshing parameters are defined on sub-meshes of the same priority, for"
+" example, different 1D hypotheses are assigned to two faces sharing an "
+"edge, the hypothesis assigned to a sub-shape with a lower ID will be used"
+" for meshing. You can :ref:`submesh_order_anchor` mutual priority of such"
+" concurrent sub-meshes."
+msgstr ""
+
+# a9fb3d57bf8240b1b5dba59ebbb5ff5d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:82
+msgid "How to construct a sub-mesh"
+msgstr ""
+
+# 44a1e0017c194945a7bd8fce1b79e2fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:84
+msgid ""
+"Construction of a sub-mesh consists of: * Selecting a mesh which will "
+"encapsulate the sub-mesh * Selecting a sub-shape for meshing * Applying "
+"one or several :ref:`about_hypo_page` and :ref:`basic_meshing_algos_page`"
+" which will be used for discretization of this sub-shape."
+msgstr ""
+
+# 26bf66798e54426bba0c67e54f10cd9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:90
+msgid ""
+"**To construct a sub-mesh:** From the **Mesh** menu select **Create Sub-"
+"mesh** or click **\"Create Sum-mesh\"** button in the toolbar."
+msgstr ""
+
+# e7dae80a8baa40a49d8435722a2520f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:99
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# fe95d391d8f0472f95acb32614b037e0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:104
+msgid ""
+"It allows to define the **Name**, the parent **Mesh** and the "
+"**Geometry** (e.g. a face if the parent mesh has been built on box) of "
+"the sub-mesh. You can define meshing algorithms and hypotheses in the "
+"same way as in :ref:`constructing_meshes_page` dialog."
+msgstr ""
+
+# 47d9633bad064ecb8b5553aa565161b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:106
+msgid ""
+"Later you can change the applied hypotheses or their parameters in "
+":ref:`editing_meshes_page` dialog. Mesh entities generated using changed "
+"hypotheses are automatically removed."
+msgstr ""
+
+# 935c4b2c834d4d98b3a2d2217f866043
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:111
+msgid "Subshape by mesh element"
+msgstr ""
+
+# 77f7de1583334f138b5f0b110ae7d51a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:113
+msgid ""
+"If the parent mesh is already computed, then you can define the "
+"**Geometry** by picking mesh elements computed on a sub-shape of interest"
+" in the 3D Viewer, i.e. you do not have to extract this sub-shape in "
+"Geometry module beforehand. To start element selection, press *Selection*"
+" button to the right of **Geometry** label. If this button is already "
+"down, then click it to release and then click it again. The following "
+"pop-up menu allowing to choose a way of geometry definition will appear."
+msgstr ""
+
+# 4c0c21e696c847999c8d837184fe4b4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:118
+msgid ""
+"**Direct geometry selection** enables selecting the sub-shape in the "
+"Objec Browser. **Find geometry by mesh element selection** activates the "
+"following dialog."
+msgstr ""
+
+# bf06f2f5f21e459eb03cdbe983f5a4a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:124
+msgid ""
+"In this dialog, **Element Type** defines a kind of element to pick in the"
+" Viewer. Instead of picking an element in the Viewer, you can type its ID"
+" in **Element ID** field. **Geometry name** field allows defining a name "
+"of the sub-shape, with which the sub-shape will appear in the Object "
+"Browser (if not yet there)."
+msgstr ""
+
+# 2b4738b5522c4e0c82797291770e76f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:130
+msgid "Sub-mesh in the Object Browser"
+msgstr ""
+
+# 2ab4cc4af2cd419988c9bdb513d5bbc7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:132
+msgid ""
+"In the Object Browser the structure of the new sub-mesh will be displayed"
+" as follows:"
+msgstr ""
+
+# 84f4608ace094812a010ebc1e84b5d82
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:142
+msgid "It contains:"
+msgstr ""
+
+# 7d9cbfdf8cba4abfb1778fc5df746ff7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:138
+msgid "a sub-mesh name (*SubMeshFace1*)"
+msgstr ""
+
+# 92749880d92b40f188c986380776ff14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:139
+msgid ""
+"a reference to the geometrical object on the basis of which the sub-mesh "
+"has been constructed (**Cylindrical Face_1**);"
+msgstr ""
+
+# b5aaa4b4a5f44ff985247f6517eb58b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:140
+msgid ""
+"**Applied hypotheses** folder containing references to hypotheses "
+"assigned to the sub-mesh;"
+msgstr ""
+
+# c0e5a092c190496da996f8482ad11733
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:141
+msgid ""
+"**Applied algorithms** folder containing references to algorithms "
+"assigned to the sub-mesh."
+msgstr ""
+
+# fefc6a0043d24f1a9fcc14b8e8e031b7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/constructing_submeshes.rst:144
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_construction_submesh` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po
new file mode 100644 (file)
index 0000000..0582e24
--- /dev/null
@@ -0,0 +1,102 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 437a3b67c9b74dbeb3d875e7c0e8b1d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:5
+msgid "Convert to/from Quadratic Mesh"
+msgstr ""
+
+# c001a095307b42058c85f22ceb9fe2ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:7
+msgid ""
+"This functionality allows transforming linear meshes (or sub-meshes) to "
+"quadratic and vice versa."
+msgstr ""
+
+# 0f85f2f27d3043d1adfaae24d89e5f06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:10
+msgid ""
+"that conversion of a sub-mesh most probably will produce a non-conformal "
+"mesh. Elements on the boundary between quadratic and linear sub-meshes "
+"become (or remain) quadratic."
+msgstr ""
+
+# b529473bb5364b7b9b76ee74355b2c10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:12
+msgid ""
+"See :ref:`adding_quadratic_elements_page` for more information about "
+"quadratic meshes."
+msgstr ""
+
+# b9b265c493d54d278f7f2ade025246c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:14
+msgid "**To produce a conversion:**"
+msgstr ""
+
+# b7568e5f42ba4c0b98fda5b26036bc07
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:16
+msgid "Select a mesh or a sub-mesh in the Object Browser or in the Viewer."
+msgstr ""
+
+# 40d3bc8d12ed4c5e98f368db94916b52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:17
+msgid ""
+"From the Modification menu or from the contextual menu in the Object "
+"Browser choose **Convert to/from Quadratic Mesh** item, or click "
+"**\"Convert to/from quadratic\"** button in the toolbar."
+msgstr ""
+
+# 5730d84d6bcb41c89c4817e13e541674
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:25
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 55c98ecd42a84163931c4b731039438d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:30
+msgid "In this dialog box specify:"
+msgstr ""
+
+# f098a3dabcb24e3b97f890bddf872ee5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:32
+msgid ""
+"If it is necessary to convert a linear mesh to quadratic or a quadratic "
+"mesh to linear. **Convert to bi-quadratic** creates some types of "
+"quadratic elements with additional central nodes: TRIA7, QUAD9 and HEXA27"
+" elements instead of TRIA6, QUAD8, and HEXA20 elements respectively."
+msgstr ""
+
+# b8247159e5a34709a2e87fae094405a0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:33
+msgid ""
+"If it is necessary to place **medium nodes** of the quadratic mesh **on "
+"the geometry** (meshed shape). This option is relevant for conversion to "
+"quadratic provided that the mesh is based on a geometry (not imported "
+"from file)."
+msgstr ""
+
+# 825d7f71de5d48d28132a2499de90f29
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:49
+msgid "Click the **Apply** or **Apply and Close** button."
+msgstr ""
+
+# 992225f722ce406c8df8b165ff5fe521
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst:52
+msgid "**See Also** a sample TUI Script of a :ref:`tui_quadratic` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/copy_mesh.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/copy_mesh.po
new file mode 100644 (file)
index 0000000..f434c5c
--- /dev/null
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e7cd2a18c59c4648a1faaed666fd84b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:5
+msgid "Copy Mesh"
+msgstr ""
+
+# cbc50f1b60a6483bb6e2e89bca786e62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:7
+msgid "A mesh can be created by copying a part of or the whole other mesh."
+msgstr ""
+
+# 3781b11c6beb432c8d056ac6f6fcf99d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:9
+msgid "**To make a copy of a mesh:**"
+msgstr ""
+
+# 6e8c46cb80674215bbf3161c454f3661
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:11
+msgid ""
+"From the contextual menu in the Object Browser of from the **Mesh** menu "
+"select **Copy Mesh** or click **\"Copy Mesh\"** button in the toolbar."
+msgstr ""
+
+# 2bb71b2fbf554441aa9251c03c930ccb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:19
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# dabcb5bb2bef4d118b89bcd4a8dc0826
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:25
+msgid "In the dialog:"
+msgstr ""
+
+# 059682ffde4e4f088720752990795816
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:27
+msgid "specify the part of mesh to copy:"
+msgstr ""
+
+# 3f339c70213b4eeaa304464cf3db00a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:29
+msgid ""
+"**Select whole mesh, sub-mesh or group** by mouse activating this "
+"checkbox; or"
+msgstr ""
+
+# 650efe9c14c74143a119a5ebf11a55f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:30
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# 0358c0af28bb4938a6ac4b37c426ca12
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:31
+msgid ""
+"input the **Source Element IDs** directly in this field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# 29ed8815de9b476b8e09e3e59d28fa46
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:32
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`selection_filter_library_page` \"Selection filter library\" page."
+msgstr ""
+
+# 48cd5b14e17a4565bf59566249673382
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:34
+msgid "specify the **New Mesh Name**;"
+msgstr ""
+
+# f6122dd4855b4c228b945b0c2148dc6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:35
+msgid "specify the conditions of copying:"
+msgstr ""
+
+# 5c5832137f004dfca00c8a4c2789b60e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:37
+msgid ""
+"activate **Generate groups** checkbox to copy the groups of the source "
+"mesh to the newly created mesh."
+msgstr ""
+
+# 9051de3d4349497fab059d46049e6a77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:39
+msgid "Click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 814e98a0b5f14d8f9aa10e9effedb459
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/copy_mesh.rst:42
+msgid "**See Also** a sample :ref:`tui_copy_mesh`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/create_groups_from_geometry.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/create_groups_from_geometry.po
new file mode 100644 (file)
index 0000000..fab7c45
--- /dev/null
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 0d6e06249e844e90a8496e29693c6ff2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:5
+msgid "Create Groups from Geometry"
+msgstr ""
+
+# 8cc71365dcc747bc96ae9a3b535de3b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:7
+msgid ""
+"This operation allows creating groups on geometry on all selected shapes."
+" Only the main shape of the mesh and its sub-shapes can be selected."
+msgstr ""
+
+# 512e020e985b49aba22a17772ddeea52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:9
+msgid ""
+"The type of each new group is defined automatically by the nature of the "
+"**Geometry**. The group names will be the same as the names of "
+"geometrical objects."
+msgstr ""
+
+# de5b54e7574a4b909af8aca4d5a6515d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:12
+msgid ""
+"It's impossible to create a group of **0D elements** or **ball elements**"
+" with this operation. For this, it is necessary to use "
+":ref:`creating_groups_page` operation."
+msgstr ""
+
+# ef8a182d030b4f7584d9e8fb5d3042d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:14
+msgid ""
+"To use this operation, select in the **Mesh** menu or in the contextual "
+"menu in the Object browser **Create Groups from Geometry** item."
+msgstr ""
+
+# 448911b29b4d485a81fc2410aacd2258
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst:19
+msgid ""
+"In this dialog **Elements** group contains a list of shapes, on which  "
+"groups of elements will be created; **Nodes** group contains a list of "
+"shapes, on which groups of nodes will be created."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/creating_groups.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/creating_groups.po
new file mode 100644 (file)
index 0000000..f9830e7
--- /dev/null
@@ -0,0 +1,305 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7b54f64d1af4421d998f1fc6b018c4bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:5
+msgid "Creating groups"
+msgstr ""
+
+# 1a2bbb3796fe4d36a772b0c1923ab67e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:7
+msgid ""
+"In MESH you can create a :ref:`grouping_elements_page` of elements of a "
+"certain type. The main way to create a group, is to select in the "
+"**Mesh** menu **Create Group** item (also available in the context menu "
+"of the mesh). To create a group you should define the following:"
+msgstr ""
+
+# 9906a31c304346f0b167da2af922969a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:11
+msgid ""
+"**Mesh** - the mesh whose elements will form your group. You can select "
+"your mesh in the Objet Browser or in the 3D viewer."
+msgstr ""
+
+# 0643fcb5542c451190449bdcce19c077
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:17
+msgid ""
+"**Elements Type** - set of radio buttons allows to select the type of "
+"elements which will form your group:"
+msgstr ""
+
+# b669022b14074985840f2ec7a5f1b490
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:13
+msgid "**Nodes**"
+msgstr ""
+
+# 104815f6fcd6414cb630858f4aeb9155
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:14
+msgid "**0D Element**"
+msgstr ""
+
+# 16f9f2ac46844060b018663a48b0f49a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:15
+msgid "**Ball**"
+msgstr ""
+
+# d772a17c8bb7406b827b0d9986fd7760
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:16
+msgid "**Edges**"
+msgstr ""
+
+# a97b302e3d624ceb942cf29c101131a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:17
+msgid "**Faces**"
+msgstr ""
+
+# 9e041daf0b254f09bead8e8505ccef71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:18
+msgid "**Volumes**"
+msgstr ""
+
+# 82fcee6546ea49dea69dbd66206fd1ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:19
+msgid "**Name** field allows to enter the name of your new group."
+msgstr ""
+
+# 009935b2e04e48be983cb6ee60d2ebf6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:20
+msgid ""
+"**Color** - allows to assign to the group a certain color. The chosen "
+"color is used to display the elements of the group. Activation of **Auto "
+"Color** item in mesh context menu switches on a random choice of a color "
+"for a new group."
+msgstr ""
+
+# 29f02f4147ad4112a5b0f9cf1725c2d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:22
+msgid ""
+"Mesh module distinguishes between the three Group types: **Standalone "
+"Group**, **Group on Geometry** and **Group on Filter**."
+msgstr ""
+
+# aa77de8a33a44e7c8a05f8be00a8848d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:29
+msgid "\"Standalone Group\""
+msgstr ""
+
+# d28e986c4d66428ab7b6b1bbd28be910
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:31
+msgid ""
+"**Standalone Group** contains a list of mesh elements, which you can "
+"define in the following ways:"
+msgstr ""
+
+# e2a1743ffc8049499f82e8c5a3b866f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:34
+msgid ""
+"By adding all entities of the chosen type existing in the mesh. For this,"
+" turn on the **Select All** check-box. In this mode all controls, which "
+"allow selecting the entities, are disabled."
+msgstr ""
+
+# 0839d03f970444c09025c467b4eb225f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:35
+msgid ""
+"By choosing entities manually with the mouse in the 3D Viewer. For this, "
+"turn on the **Enable manual edition** check box. You can click on an "
+"element in the 3D viewer and it will be highlighted. After that click the"
+" **Add** button and the ID of this element will be added to the list. The"
+" **Set filter** button allows to define the filter for selection of the "
+"elements for your group. See more about filters on the "
+":ref:`selection_filter_library_page` \"Selection filter library\" page."
+msgstr ""
+
+# 0070179b410344168305ec4f8297e9c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:36
+msgid ""
+"By adding entities from either a sub-mesh or another group. For this, "
+"turn on the **Enable manual edition** check box. **Select from** fields "
+"group allows to select a sub-mesh or a group of the appropriate type and "
+"to **Add** their elements to the group."
+msgstr ""
+
+# a57d5e61ea084870a8bfce92c9c4c736
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:38
+msgid "In the **manual edition** mode you can"
+msgstr ""
+
+# c9d0e77cb7f343aebac268ab97ef13aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:40
+msgid "click the **Remove** button to remove the selected items from the list."
+msgstr ""
+
+# 306bfea381614c17bb72e986779f6041
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:41
+msgid "click the **Sort List** button to sort the list of IDs of mesh elements."
+msgstr ""
+
+# e1dba82ca6c248abb9294aac985e0d31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:46
+msgid ""
+"For example, to create a new group containing all faces of an existing "
+"group and some other faces selected in the viewer:"
+msgstr ""
+
+# ad44ce3ae9b84418b4e492c929ad93ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:48
+msgid "Select the **Face** type of entities and input the name of the new group."
+msgstr ""
+
+# be572ffdc7934e85b5ebff340ff36f1a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:49
+msgid "Check the **Group** checkbox in **Select From** group."
+msgstr ""
+
+# 1e06ee64a1754bdd90d04beda8118a1a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:50
+msgid "Select the existing group of faces in the object browser or in the viewer."
+msgstr ""
+
+# 406b703bb7bd47d1b54e34c831d6cf51
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:51
+msgid ""
+"Click **Add** in **Content** group. **Id Elements** list will be filled "
+"with IDs of faces belonging to the selected group."
+msgstr ""
+
+# e8d5b9afe2b04a98b8e72e7773e65984
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:52
+msgid "Select other faces in the viewer."
+msgstr ""
+
+# 3b66eb0e9b284d11a31073d912ce7ea2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:53
+msgid "Click **Add** in **Content** group."
+msgstr ""
+
+# 9752692fb73f49a38a4d093aa566faba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:54
+msgid "Click **Apply** button to create the new group."
+msgstr ""
+
+# fc9eec6d13f54a1d8dd9fe679a653732
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:57
+msgid ""
+"Please note that the new group does not have references to the source "
+"group. It contains only the list of face IDs. So if the source group is "
+"changed, the new one is not updated accordingly."
+msgstr ""
+
+# 692f98b5a544406397a569cd43d229dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:65
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_create_standalone_group` "
+"operation."
+msgstr ""
+
+# 8f305bfbc5da4c4cbba5c2276c8b7b4b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:71
+msgid "\"Group on Geometry\""
+msgstr ""
+
+# d74e73205f87477a86be174722b0d464
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:73
+msgid ""
+"To create a group on geometry check **Group on geometry** in the "
+"**Group** **type** field. The group on geometry contains the elements of "
+"a certain type generated on the selected geometrical object. Group "
+"contents are dynamically updated if the mesh is modified. The group on "
+"geometry can be created only if the mesh is based on geometry."
+msgstr ""
+
+# c35bbf66e64749249b5648e96dac7b24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:75
+msgid "To define a group, click the *Selection* button and choose"
+msgstr ""
+
+# 2637b093a3244394b8189c3922db7f61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:77
+msgid ""
+"**Direct geometry selection** to select a shape in the Object Browser or "
+"in the Viewer;"
+msgstr ""
+
+# f12f05a2338b4868865af8499e4a9b81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:78
+msgid ""
+"**Find geometry by mesh element selection** to activate a dialog which "
+"retrieves a shape by the selected element generated on this shape."
+msgstr ""
+
+# 6b3d4cd3c648491cbfd535924cdc3411
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:81
+msgid ""
+"that this choice is available only if the mesh elements are already "
+"generated."
+msgstr ""
+
+# fb65f6162e60441483b784741d0a41cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:86
+msgid ""
+"After confirmation of the operation a new group of mesh elements will be "
+"created."
+msgstr ""
+
+# 0c16c230c7ce4c2793eb08c312636d8d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:91
+msgid ""
+"In this picture the cells which belong to a certain geometrical face are "
+"selected in green."
+msgstr ""
+
+# a308beb890254bf6badae10ed3fdc309
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:93
+msgid ""
+"**See Also** a sample TUI Script of a  "
+":ref:`tui_create_group_on_geometry` operation."
+msgstr ""
+
+# d5212a8c6d9144abbdd01cedbe1547ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:99
+msgid "\"Group on Filter\""
+msgstr ""
+
+# 9d7c3b6e6af44b62b16e265da59bb6fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:101
+msgid ""
+"To create a group on filter check **Group on filter** in the **Group "
+"type** field. The group on filter contains the elements of a certain type"
+" satisfying the defined filter. Group contents are dynamically updated if"
+" the mesh is modified."
+msgstr ""
+
+# dc10544f89244542a1654346a5f10ded
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:105
+msgid ""
+"To define a group, click the **Set filter** button and define criteria of"
+" the filter in the opened dialog. After the operation is confirmed, a new"
+" group of mesh elements will be created. See more about filters on the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# 36b896624b0843ddacee7d59392b13d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/creating_groups.rst:110
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_create_group_on_filter` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po
new file mode 100644 (file)
index 0000000..d602662
--- /dev/null
@@ -0,0 +1,96 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# af5945204b1f448badc4da3616d663d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:5
+msgid "Cut a tetrahedron mesh by a plane"
+msgstr ""
+
+# c7b3a5e99521490bada8067eeffdd439
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:7
+msgid ""
+"MeshCut works only with MED files and produces MED files, and is a "
+"standalone program. It can be used either directly from a command shell "
+"outside SALOME, or with a GUI interface in SMESH, provided in a python "
+"plugin that needs to be installed in your SALOME application."
+msgstr ""
+
+# 110ba66df0334b55932c69d60d8e056e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:9
+msgid ""
+"MeshCut allows to cut a mesh constituted of linear tetrahedrons by a "
+"plane. The tetrahedrons intersected by the plane are cut and replaced by "
+"elements of various types, (tetrahedron, pyramid, pentahedron)."
+msgstr ""
+
+# 76c56acbd34642e6a35c0336374bf1da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:16
+msgid "Using MeshCut as a standalone program, outside SALOME"
+msgstr ""
+
+# e860a7c125d745bfac69448ca40db92e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:18
+msgid "MeshCut is a standalone program, reading and producing med files."
+msgstr ""
+
+# 95562602aa944727beb91b6c691118b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:20
+msgid "Syntax::"
+msgstr ""
+
+# 323593bb8b9b41ac8e4c58e415639fcd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:24
+msgid "where::"
+msgstr ""
+
+# e8c88d96d6f04485bc837c8fb1cf79e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:40
+msgid "Using MeshCut inside SALOME"
+msgstr ""
+
+# adefbc138ffb43c6b0b3b465af6001b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:42
+msgid ""
+"When the MeshCut plugin is installed, it can be found in the Mesh menu, "
+"sub-menu SMESH_plugins. If the plugin is not installed, the file "
+"meshcut_plugin.py is in SMESH installation in  subdirectory "
+"*bin/salome/meshcut_plugin.py*."
+msgstr ""
+
+# 66e0dbab5f0d4123ab9b08d80341b5bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:46
+msgid ""
+"If there are already plugins defined in a smesh_plugins.py file, this "
+"file should be added at the end. If not, copied as "
+"*${HOME}/Plugins/smesh_plugins.py* or *${APPLI}/Plugins/smesh_plugins.py*"
+" or in *${PLUGINPATH}* directory."
+msgstr ""
+
+# 80ecf33219494f3b839e3b71fd7e0615
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:49
+msgid ""
+"From the Mesh menu, sub-menu SMESH_plugins, choose **\"MeshCut\"** item "
+"The following dialog box will appear:"
+msgstr ""
+
+# d6d1a2389773477c9145c6ad8f4a3577
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst:58
+msgid "See above for the meaning of the parameters."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cutting_quadrangles.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cutting_quadrangles.po
new file mode 100644 (file)
index 0000000..607e69e
--- /dev/null
@@ -0,0 +1,180 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# cdc452a2e6774e6d861087c1cd0d6a49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:5
+msgid "Cutting quadrangles"
+msgstr ""
+
+# 178f194a32ca460e8a97d7e24265fcce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:7
+msgid ""
+"This operation allows cutting one or several quadrangle elements into two"
+" or four triangles."
+msgstr ""
+
+# b88b0d55219447ed957e38cfd39270e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:9
+msgid "**To cut quadrangles:**"
+msgstr ""
+
+# 2eaf8d747bd246489f0973f678ca80a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:11
+msgid ""
+"Select a mesh (and display it in the 3D Viewer if you are going to pick "
+"elements by mouse)."
+msgstr ""
+
+# 55601316ccca4fa0a3fb8843327d8a0a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:12
+msgid ""
+"In the **Modification** menu select the **Cutting of quadrangles** item "
+"or click **\"Cutting of quadrangles\"** button in the toolbar."
+msgstr ""
+
+# c6fc4bd52a504140b22929570d95373d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:20
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# a88495585e7d47c182be1ac590640969
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:29
+msgid ""
+"The main list contains the list of quadrangles selected for cutting. You "
+"can click on a quadrangle in the 3D viewer and it will be highlighted "
+"(lock Shift keyboard button to select several quadrangles):"
+msgstr ""
+
+# 1ab5287e6411489491330eeb2f0fb76f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:27
+msgid ""
+"Click **Add** button and the ID of this quadrangle will be added to the "
+"list."
+msgstr ""
+
+# 270eb065dd33474ba7ec99058b3f6ed4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:28
+msgid ""
+"To remove a selected element or elements from the list click **Remove** "
+"button."
+msgstr ""
+
+# 90cf7268f2f641cb8b950fbb8be22d89
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:29
+msgid "**Sort list** button allows sorting the list of IDs."
+msgstr ""
+
+# 0824ac72ed0e4b97890bd28a222d33f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:30
+msgid ""
+"**Filter** button allows applying a definite :ref:`filtering_elements` "
+"\"filter\" to the selection of quadrangles."
+msgstr ""
+
+# d970753f7b3c4074922954dc9ff13824
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:31
+msgid ""
+"**Apply to all** check box allows cutting all quadrangles of the selected"
+" mesh."
+msgstr ""
+
+# b136f4c18bea4b68a2cfc0130fbec157
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:32
+msgid ""
+"**Preview** provides a preview of cutting in the viewer. It is disabled "
+"for **Cut into 4 triangles** as this cutting way implies no ambiguity."
+msgstr ""
+
+# d84debdc304c476b962913c0a43c09eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:39
+msgid "**Criterion** defines the way of cutting:"
+msgstr ""
+
+# 393ad3ff52cd47e9b824f9b058385174
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:34
+msgid ""
+"**Cut into 4 triangles** allows cutting a quadrangle into four triangles "
+"by inserting a new node at the center of the quadrangle. The other "
+"options allow cutting a quadrangle into two triangles by connecting the "
+"nodes of a diagonal."
+msgstr ""
+
+# 6531eb4390d34c4da2bf582a77a09dfa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:35
+msgid ""
+"**Use diagonal 1-3** and **Use diagonal 2-4** allow specifying the "
+"opposite corners, which will be connected to form two new triangles."
+msgstr ""
+
+# eac79819eb4246b9a6862f68a0bf7ad9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:39
+msgid ""
+"**Use numeric functor** allows selecting in the field below a quality "
+"metric, which will be optimized when choosing a diagonal for cutting a "
+"quadrangle:"
+msgstr ""
+
+# 50994bc4fa624c1da5a9636faa3e6d61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:37
+msgid "**Minimum diagonal** cuts by the shortest diagonal."
+msgstr ""
+
+# c370f34b03f1463cad2ca1d7083bcee9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:38
+msgid ""
+"**Aspect Ratio** cuts by the diagonal splitting the quadrangle into "
+"triangles with :ref:`aspect_ratio_page` \"Aspect Ratio\" closer to 1"
+msgstr ""
+
+# aa75cda04e014f508d4ad3e4c80798dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:39
+msgid ""
+"**Minimum Angle** cuts by the diagonal splitting the quadrangle into "
+"triangles with :ref:`minimum_angle_page` \"Minimum Angle\" closer to 60 "
+"degrees."
+msgstr ""
+
+# 5da246103a434893bca74a0278ebcf63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:40
+msgid ""
+"**Skew** cuts by the diagonal splitting the quadrangle into triangles "
+"with :ref:`skew_page` \"Skew\" closer to 0.0 degrees."
+msgstr ""
+
+# d01638fc455f49359ec17165a915cbf8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:41
+msgid ""
+"**Select from** allows choosing a sub-mesh or an existing group, whose "
+"quadrangle elements then can be added to the main list."
+msgstr ""
+
+# a0527c237dab4bb7b19297594cd2ee50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:43
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm the "
+"operation."
+msgstr ""
+
+# c97b46bf744d4d75868f54274d5b8b41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/cutting_quadrangles.rst:59
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_cutting_quadrangles` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/define_mesh_by_script.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/define_mesh_by_script.po
new file mode 100644 (file)
index 0000000..f1b4594
--- /dev/null
@@ -0,0 +1,86 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7a83ceb457994f0489883d15259eaf09
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:5
+msgid "Use Edges/Faces to be Created Manually"
+msgstr ""
+
+# ddfb94d55abf4777a40b1a0204d3f171
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:7
+msgid ""
+"The algorithms **Use Edges to be Created Manually** and **Use Faces to be"
+" Created Manually** allow  creating a 1D or a 2D mesh in a python script "
+"(using **AddNode, AddEdge** and **AddFace** commands) and then using such"
+" sub-meshes in the construction of a 2D or a 3D mesh."
+msgstr ""
+
+# 97ab6ee01a514db696c51dfc106d7cbb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:9
+msgid ""
+"For example, you want to use standard algorithms to generate 1D and 3D "
+"meshes and to create 2D mesh by your python code. For this, you"
+msgstr ""
+
+# b51c5c631ad54f7ea57be1f01dd6278a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:12
+msgid "create a mesh object, assign a 1D algorithm,"
+msgstr ""
+
+# 1606b74fadb94199897e3e4a0900958c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:13
+msgid "invoke **Compute** command, which computes a 1D mesh,"
+msgstr ""
+
+# 9eff4a607bdf43b8a5c6a70ab0397ca9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:15
+msgid "assign **Use Faces to be Created Manually** and a 3D algorithm,"
+msgstr ""
+
+# 3972a11e34084b7685f90a6f9a37718b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:16
+msgid "run your python code, which creates a 2D mesh,"
+msgstr ""
+
+# ec5b08b76d7d489d990cb8a48be0ca6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:17
+msgid "invoke **Compute** command, which computes a 3D mesh."
+msgstr ""
+
+# bf07fde4deac4f89a7fc0e1dd4fd340d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:19
+msgid ""
+"**Use Edges to be Created Manually** and **Use Faces to be Created "
+"Manually** algorithms should be assigned _before_ mesh generation by the "
+"Python code."
+msgstr ""
+
+# 6778e7ee297443d3a2447643f28b7422
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:21
+msgid ""
+"Consider trying a sample script demonstrating the usage of "
+":ref:`tui_use_existing_faces` algorithm for construction of a 2D mesh "
+"using Python commands."
+msgstr ""
+
+# cd5cbe7268414edb841f7dff26f2d607
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/define_mesh_by_script.rst:26
+msgid "**Mesh computed by** :ref:`tui_use_existing_faces` shown in a Shrink mode."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/deleting_groups.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/deleting_groups.po
new file mode 100644 (file)
index 0000000..f834bde
--- /dev/null
@@ -0,0 +1,50 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# da0c8f0c6eea4ca89f85a0088293b1c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/deleting_groups.rst:5
+msgid "Deleting groups with content"
+msgstr ""
+
+# 595cfb5f81104bceb787165f399b5e92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/deleting_groups.rst:7
+msgid ""
+"To delete groups and their content, in the menu select **Modification -> "
+"Remove -> Delete groups with Contents** and select one or several groups "
+"you wish to delete in the 3D viewer or in the Object Browser."
+msgstr ""
+
+# 27e4c20df5cb437195a61c1305ebbf32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/deleting_groups.rst:9
+msgid ""
+"The selected groups will be listed in **Delete groups with contents** "
+"menu. Then click **Apply and Close** button to remove the selected groups"
+" and close the menu or **Apply** button to remove them and proceed with "
+"the selection."
+msgstr ""
+
+# 660539b2cd4e442fb90d67f16e42cb49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/deleting_groups.rst:16
+msgid ""
+"Please, note that this operation removes groups **with their elements**. "
+"To delete a group and leave its elements intact, right-click on the group"
+" in the Object Browser and select **Delete** in the pop-up menu or select"
+" the group and choose **Edit -> Delete** in the main menu."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po
new file mode 100644 (file)
index 0000000..fd6f7af
--- /dev/null
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 42e4731d2e82498f9916eabbcf5abd95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:5
+msgid "Diagonal inversion of two triangles"
+msgstr ""
+
+# e15d94f75cb844fbb2a7347756e1314d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:7
+msgid ""
+"In MESH you can inverse the diagonal (edge) of a pseudo-quadrangle formed"
+" by two neighboring triangles with one common edge."
+msgstr ""
+
+# e18a7165cf184b9e8478fe7b594bf5d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:10
+msgid "**To inverse the diagonal:**"
+msgstr ""
+
+# cce53a91498d44728049c3ab70921683
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:12
+msgid ""
+"From the **Modification** menu choose the **Diagonal inversion** item or "
+"click **\"Diagonal Inversion\"** button in the toolbar."
+msgstr ""
+
+# fe71e652c0b6416295153408a1a1e23a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:20
+msgid "The following dialog box shall appear:"
+msgstr ""
+
+# bc40291f856d4747b0ee3434ee0c5c42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:25
+msgid ""
+"Enter IDs of nodes forming the required edge in the **Edge** field (the "
+"node IDs must be separated by dashes) or select this edge in the 3D "
+"viewer."
+msgstr ""
+
+# ec9528ded57a4754a7255d0a51517eb8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:26
+msgid "Click the **Apply** or **Apply and Close** button."
+msgstr ""
+
+# dc1e251576e44f75b478608957b4ceab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst:40
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_diagonal_inversion` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_entity.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_entity.po
new file mode 100644 (file)
index 0000000..49ac7d9
--- /dev/null
@@ -0,0 +1,51 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 135c20ba93794e7b807ec22eb6e52268
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_entity.rst:5
+msgid "Display Entity"
+msgstr ""
+
+# 8a6a82fcf8b74d7e9c01b3d73a4b7a90
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_entity.rst:7
+msgid ""
+"In this submenu you can choose to display only volumes, faces or edges or"
+" combine them."
+msgstr ""
+
+# 933a18f4dc8b4213a03dc29e45618189
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_entity.rst:27
+msgid "If the mesh contains a lot of elements, select **Choose...** item,"
+msgstr ""
+
+# 7f1150a0a698424ba4a5891da9ca54cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_entity.rst:35
+msgid ""
+"and **Display Entity** dialog box will provide a way to display only some"
+" entities at the first display instead of displaying all entities, which "
+"can take a long time."
+msgstr ""
+
+# c6ba829de91b4525bf7e30e4acc36e2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_entity.rst:43
+msgid ""
+"This menu item is available from the context menu in both Object browser "
+"and 3D viewer."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_mode.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_mode.po
new file mode 100644 (file)
index 0000000..e60fd7c
--- /dev/null
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# b95fbc8a990f483caaa996472e44c19f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_mode.rst:5
+msgid "Display Mode"
+msgstr ""
+
+# c327b45a291146048f471484f6afb38e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_mode.rst:7
+msgid ""
+"By default your objects are represented as defined in "
+":ref:`mesh_tab_preferences`. However, right-clicking on the mesh in the "
+"**Object Browser**, and selecting **Display Mode**, you can display your "
+"mesh as:"
+msgstr ""
+
+# 9fcd884d284f4b878665e4e2eba85f2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_mode.rst:31
+msgid "**Wireframe** can combine with **Nodes** and **Shading**."
+msgstr ""
+
+# 0b6e084814334ae997c0429dd1c8130c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/display_mode.rst:33
+msgid ""
+"**Shading** and **Wireframe** modes can combine with **Shrink**, however "
+"**Nodes** can't."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_elements_control.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_elements_control.po
new file mode 100644 (file)
index 0000000..c1d03ed
--- /dev/null
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 29180c98e4a743249d7d78b1aeed590c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_elements_control.rst:5
+msgid "Double edge, Double faces and Double volumes"
+msgstr ""
+
+# 59d063c920a0439eabdc80c5a6e09d83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_elements_control.rst:7
+msgid ""
+"These mesh quality controls highlight the mesh elements basing on the "
+"same set of nodes."
+msgstr ""
+
+# d28bb6f9dec048b98ecdf91fa9f056b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_elements_control.rst:12
+msgid ""
+"In this picture some faces are coincident after copying all elements with"
+" translation with subsequent Merge of nodes."
+msgstr ""
+
+# 941183a3377e44e98a9fd65acdba5e32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_elements_control.rst:14
+msgid "*A sample TUI Script of a* :ref:`filter_double_elements`:."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_control.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_control.po
new file mode 100644 (file)
index 0000000..537c955
--- /dev/null
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 88d8c854db4644f6a5b009412db1b608
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_control.rst:5
+msgid "Double nodes"
+msgstr ""
+
+# 22529b5a5a764ab8a59c1f4110f95a06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_control.rst:7
+msgid ""
+"This mesh quality control highlights the nodes which are coincident with "
+"other nodes (within a given tolerance). Distance at which two nodes are "
+"considered coincident is defined by :ref:`dbl_nodes_tol_pref` preference."
+msgstr ""
+
+# 93d2ce3a6fbd44fba9a23d3e38513d3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_control.rst:12
+msgid ""
+"In this picture some nodes are coincident after copying all elements with"
+" translation."
+msgstr ""
+
+# 6342070c6e5748f0a06f3032b1eb7f83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_control.rst:14
+msgid ""
+"**See also**: A sample TUI Script of a :ref:`tui_double_nodes_control` "
+"filter."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_page.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_page.po
new file mode 100644 (file)
index 0000000..4fd023e
--- /dev/null
@@ -0,0 +1,341 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5147fa31ae3b483b8c1072e1e45c0684
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:5
+msgid "Duplicate Nodes or/and Elements"
+msgstr ""
+
+# bee16d2e37f34b0e9a398478b5ef8f3a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:7
+msgid ""
+"This operation allows duplicating mesh nodes or/and elements, which can "
+"be useful to emulate a crack in the model."
+msgstr ""
+
+# 012ca3a95eae461490b79abd136c6321
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:9
+msgid ""
+"Duplication consists in creation of mesh elements \"equal\" to existing "
+"ones."
+msgstr ""
+
+# 14b9d90e49ff464e9daddf7d5d95d55a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:11
+msgid "**To duplicate nodes or/and elements:**"
+msgstr ""
+
+# f3d3df00d1bb4492a58c77e0b45dc6f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:13
+msgid ""
+"From the **Modification** menu choose **Transformation** -> **Duplicate "
+"Nodes or/and Elements** item or click **\"Duplicate Nodes or/and "
+"Elements\"** button in the toolbar."
+msgstr ""
+
+# b4ac34ca4ecf4579b08656c175d92774
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:21
+msgid ""
+"Check in the dialog box one of four radio buttons corresponding to the "
+"type of duplication operation you would like to perform."
+msgstr ""
+
+# 75b05a186ab14690b26409eaf534b482
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:22
+msgid ""
+"Fill the other fields available in the dialog box (depending on the "
+"chosen operation mode)."
+msgstr ""
+
+# 596eb28b911347c2a0926dff4afdccbe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:23
+msgid ""
+"Click the **Apply** or **Apply and Close** button to perform the "
+"operation of duplication."
+msgstr ""
+
+# ffc1a8b8bf904409b6a014fdbd9bd9cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:25
+msgid "\"Duplicate Nodes or/and Elements\" dialog has four working modes:"
+msgstr ""
+
+# 9bf50c98e6724294a8470c6c1543e464
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:27
+msgid ":ref:`mode_without_elem_anchor`"
+msgstr ""
+
+# 2a5a2df31afa4348be54537af6de0bff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:28
+msgid ":ref:`mode_with_elem_anchor`"
+msgstr ""
+
+# e8263574ea36477aa7623c1955f44c89
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:29
+msgid ":ref:`mode_elem_only_anchor`"
+msgstr ""
+
+# f0791cde0a6241538036a1d6ebc102b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:30
+msgid ":ref:`mode_group_boundary_anchor`"
+msgstr ""
+
+# 0551dca570624dc282f98101b99f422b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:37
+msgid "Duplicate nodes only"
+msgstr ""
+
+# 31ef20c3e6a34becbc14fb5049de5fda
+# 404278b79a2d4ac98f2ab3ba7bc24ba6
+# bb33b0bd56ce44bba3940061ccd07195
+# 753f34b88d864324aba9b816fc7b8412
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:118
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:136
+msgid "Parameters to be defined in this mode:"
+msgstr ""
+
+# cd8779af6bf54feabab3a81101c69a0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:45
+msgid ""
+"**Group of nodes to duplicate** (**mandatory**): these nodes will be "
+"duplicated."
+msgstr ""
+
+# 2d4f75955d584bbfb4d867f2c9faa5b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:46
+msgid ""
+"**Group of elements to replace nodes with new ones** (**optional**): the "
+"new nodes will replace the duplicated nodes within these elements."
+msgstr ""
+
+# 7ced7111b7af4ec3a9b624c8b4e3f9bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:47
+msgid ""
+"**Construct group with newly created nodes** option (**checked by "
+"default**): if checked - the group with newly created nodes will be "
+"built."
+msgstr ""
+
+# 2792968de8484dd8a4d0f2cf0a5b5c9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:49
+msgid ""
+"A schema below illustrates how the crack is emulated using the node "
+"duplication."
+msgstr ""
+
+# a5bf3d65e56b4d7f97788208e8dbc4e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:61
+msgid ""
+"This schema shows a virtual crack in a 2D mesh created using this "
+"duplication mode:"
+msgstr ""
+
+# e6fc75f21ea6496198aa0b1e50a1f4cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:59
+msgid "Black balls are **duplicated nodes**."
+msgstr ""
+
+# be004054e8874136bd29e6bad7160377
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:60
+msgid "Red balls are **new nodes**."
+msgstr ""
+
+# 1e6e9fd72cdb48cfbaa0987a2c5bb368
+# fc37f5c61c0e4c538566eb9323b68f1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:99
+msgid "**Elements to replace nodes with new ones** are marked with green."
+msgstr ""
+
+# c38eb7cc23634448b1e7241575aea13b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:64
+msgid "Note that in the reality **duplicated nodes** coincide with **new nodes**."
+msgstr ""
+
+# 8601d651b0a64824b4f18c9378dbac33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:70
+msgid "Duplicate nodes and border elements"
+msgstr ""
+
+# 83f41673be9c483998dd3136d1aa49b5
+# afb0565acf6e4c9f8b7df68e9a8726bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:120
+msgid ""
+"**Group of elements to duplicate** (**mandatory**): these elements will "
+"be duplicated."
+msgstr ""
+
+# 0f9fb6bccd4e40e48897f8bff8b0fe59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:78
+msgid ""
+"**Group of nodes not to duplicate** (**optional**): group of nodes at "
+"crack bottom which will not be duplicated."
+msgstr ""
+
+# 2a23e9b269054e63b9e14ca20067d4b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:79
+msgid ""
+"**Group of elements to replace nodes with new ones** (**mandatory**): the"
+" new nodes will replace the nodes to duplicate within these elements."
+msgstr ""
+
+# 2e757ab99da4412cb9cf995c67938315
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:80
+msgid ""
+"**Construct group with newly created elements** option (**checked by "
+"default**): if checked - the group of newly created elements will be "
+"built."
+msgstr ""
+
+# 763d583bb74f42c0bcae4009e8b52386
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:81
+msgid ""
+"**Construct group with newly created nodes** option (**checked by "
+"default**): if checked - the group of newly created nodes will be built."
+msgstr ""
+
+# e97711ca7147448aacec7cb4cd6301c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:84
+msgid ""
+"A schema below explains the crack emulation using the node duplication "
+"with border elements."
+msgstr ""
+
+# 07af94bbfb21422ca71f32b1349818f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:92
+msgid ""
+"This schema shows a virtual crack in a 2D mesh created using this "
+"duplication mode. In this schema:"
+msgstr ""
+
+# 1830fc51702740339fc80233ee94fc63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:94
+msgid "Black segments are **duplicated elements** (edges in 2D case)."
+msgstr ""
+
+# 441c4fa9022c4218b4fc87e40609c774
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:95
+msgid ""
+"Black balls (except for the lowest one) are duplicated nodes of "
+"**duplicated elements**."
+msgstr ""
+
+# 2bf9789260e1414bb7433c8e9ac53dbd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:96
+msgid "The lowest black ball is the **non-duplicated node**."
+msgstr ""
+
+# 1d1ce816d3bc4ddda2db246ddb4eab51
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:97
+msgid "Red balls are **newly created nodes**."
+msgstr ""
+
+# 50e8b24787c64773a93a0b28d3c8c679
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:98
+msgid "Red segments are **created elements** (edges)."
+msgstr ""
+
+# f32adbca95d34f38857ea4bba74da954
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:101
+msgid ""
+"Note that in the reality **nodes to duplicate** coincide with **new "
+"nodes**."
+msgstr ""
+
+# a36f630e3c774df5b1c653deef9263c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:103
+msgid ""
+"In a 3D case, where **elements to duplicate** are faces, the edges "
+"located at the \"crack\" (if any) are cloned automatically."
+msgstr ""
+
+# fea519884d6f4cee99e7bb95a6a8339d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:110
+msgid "Duplicate elements only"
+msgstr ""
+
+# 703a787a2cb64a18a00ae013af7d2156
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:112
+msgid ""
+"This mode duplicates the given elements, i.e. creates new elements with "
+"the same nodes as the given elements."
+msgstr ""
+
+# 302ef6771b8647b995203c19fcf9251a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:121
+msgid ""
+"**Construct group with newly created elements** option (**checked by "
+"default**): if checked - the group of newly created elements will be "
+"built. The name of the created group starts from \"DoubleElements\"."
+msgstr ""
+
+# 178dd2990df74d3e88c6e21e26c629e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:127
+msgid "Duplicate nodes on group boundaries"
+msgstr ""
+
+# db5d6ad28c224676ab8a8b812415a84a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:129
+msgid ""
+"This mode duplicates nodes located on boundaries between given groups of "
+"volumes."
+msgstr ""
+
+# abda119ffd214b52a8b0f82eddee5a35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:138
+msgid ""
+"**Groups (faces or volumes)** (**mandatory**): list of mesh groups. These"
+" groups should be disjoint, i.e. should not have shared elements."
+msgstr ""
+
+# 04fb78bad6e14785881728cbadbd501f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:139
+msgid ""
+"If **Create joint elements** option is activated, flat elements are "
+"created on the duplicated nodes: a triangular facet shared by two volumes"
+" of two groups generates a flat prism, a quadrangular facet generates a "
+"flat hexahedron. Correspondingly 2D joint elements (null area faces) are "
+"generated where edges are shared by two faces. The created flat volumes "
+"(or faces) are stored in groups. These groups are named according to the "
+"position of the group in the list of groups: group \"j_n_p\" is a group "
+"of flat elements that are built between the group \\#n and the group \\#p"
+" in the group list. All flat elements are gathered into the group named "
+"\"joints3D\" (correspondingly \"joints2D\"). The flat elements of "
+"multiple junctions between the simple junction are stored in a group "
+"named \"jointsMultiples\"."
+msgstr ""
+
+# 9062bb490b184743b1d0695078653fb9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:140
+msgid ""
+"If **On all boundaries** option is activated, the volumes (or faces), "
+"which are not included into **Groups** input, are considered as another "
+"group and thus the nodes on the boundary between **Groups** and the "
+"remaining mesh are also duplicated."
+msgstr ""
+
+# 3ef21a415a784b9f84eceef20ff9221c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/double_nodes_page.rst:143
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_duplicate_nodes` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_groups.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_groups.po
new file mode 100644 (file)
index 0000000..1fb937b
--- /dev/null
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 29f257717b9f47dd83a5976ef374f548
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:5
+msgid "Editing groups"
+msgstr ""
+
+# 97180320e8364896bd43f26e15cbb37f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:7
+msgid "**To edit an existing group of elements:**"
+msgstr ""
+
+# 3b1c90cdecf443b49812a63ca8afa82b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:9
+msgid ""
+"Select your group in the Object Browser and in the **Mesh** menu click "
+"the **Edit Group** item or **\"Edit Group\"** button in the toolbar."
+msgstr ""
+
+# 861e0c9d6f2b4949b3ef72d0a9d9b9a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:19
+msgid ""
+"The following dialog box will appear (if the selected group is "
+"**standalone**, else this dialog looks different):"
+msgstr ""
+
+# 7206da41ad034d9ba2c06616de676708
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:24
+msgid ""
+"In this dialog box you can modify the name and the color of your group "
+"despite of its type. You can add or remove the elements composing a "
+"**standalone group**. You can change criteria of the filter of a **group "
+"on filter**. For more information see "
+":ref:`creating_groups_page`:\"Creating Groups\" page."
+msgstr ""
+
+# f736ea983fd144839115f9c87eff47cc
+# fd5aff08297941ffa9da1f0ec85ac9ba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:47
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm modification"
+" of the group."
+msgstr ""
+
+# fa8ff303c85f4974b5e851f92c96f11b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:32
+msgid "Convert to stanalone group"
+msgstr ""
+
+# 3524bfde667244ec84cf1438818e7057
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:34
+msgid ""
+"**To convert an existing group on geometry or a group on filer into a "
+"standalone group and modify its contents:**"
+msgstr ""
+
+# a51bcc3c5c0e4eda9f50971919f8946f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:36
+msgid ""
+"Select your group on geometry or on filter in the Object Browser and in "
+"the **Mesh** menu click the **Edit Group as Standalone** item."
+msgstr ""
+
+# 7d35ca78670d49d8baddaa74a1251aaf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:45
+msgid ""
+"The selected group will be converted into a standalone group and its "
+"contents can be modified."
+msgstr ""
+
+# 513bce03244d4bc887a30a2d14ec7f5a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_groups.rst:49
+msgid "**See also:** A sample TUI Script of an :ref:`tui_edit_group` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_meshes.po
new file mode 100644 (file)
index 0000000..adffa52
--- /dev/null
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e9c884fc93424691a36a5b5a08908d42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:5
+msgid "Editing Meshes"
+msgstr ""
+
+# 4108e447b8d44bf29f56a5724ab4c803
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:7
+msgid ""
+"After you have created a mesh or sub-mesh with definite applied meshing "
+"algorithms and hypotheses you can edit your mesh by **assigning** other "
+"algorithms and/or hypotheses or **unassigning** the applied hypotheses "
+"and algorithms. The editing proceeds in the same way as "
+":ref:`create_mesh_anchor`:\"Mesh Creation\"."
+msgstr ""
+
+# d86646f92966449492afab0cc02d1f84
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:14
+msgid ""
+"You can also change values for the current hypothesis by clicking the "
+"**\"Edit Hypothesis\"** button."
+msgstr ""
+
+# dc3c4db7324c4e3499d941a4dc820715
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:23
+msgid ""
+"Mesh entities generated before using changed hypotheses are automatically"
+" removed."
+msgstr ""
+
+# 6beaa93e8a474a9a8e5ff92a0036705a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:25
+msgid ""
+"See how the mesh constructed on a geometrical object changes if we apply "
+"different meshing parameters to it."
+msgstr ""
+
+# 15b4f649638048f0b81ba2cb2a899822
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/editing_meshes.rst:41
+msgid "**See Also** a sample TUI Script of an :ref:`tui_editing_mesh` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion.po
new file mode 100644 (file)
index 0000000..f6cb477
--- /dev/null
@@ -0,0 +1,346 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 2364aec5fd98494fa6a3b3bea96909b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:5
+msgid "Extrusion"
+msgstr ""
+
+# ebff233d82a74fcb981c8c470c7219cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:7
+msgid ""
+"Extrusion is used to build mesh elements of plus one dimension than the "
+"input ones. Boundary elements around generated mesh of plus one dimension"
+" are additionally created. All created elements can be automatically "
+"grouped. Extrusion can be used to create a "
+":ref:`extrusion_struct`:\"structured mesh from scratch\"."
+msgstr ""
+
+# bc07284d8f4f4e28b6e5527d32132997
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:15
+msgid ""
+"Any node, segment or 2D element can be extruded. Each type of elements is"
+" extruded into a corresponding type of result elements:"
+msgstr ""
+
+# ee1ba33fc49041b8ae0e3ca45b004ae6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:18
+msgid "**Extruded element**"
+msgstr ""
+
+# 66f55ddccdce468ab1523f3f86a39835
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:18
+msgid "**Result element**"
+msgstr ""
+
+# 38c41b21cf1d40f7b4cd9739fcf5b02d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:20
+msgid "Node"
+msgstr ""
+
+# 632755e4966948b0b6b4193471772513
+# 1d43529b13fe4903a0dad1c935023197
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:20
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:22
+msgid "Segment"
+msgstr ""
+
+# f1ba62dcf07641cba2c6e659df2cc409
+# fc5653560d5f4a6cbbcf5a4e48603537
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:26
+msgid "Quadrilateral"
+msgstr ""
+
+# 8884d612e5f54aec87829e567d81bcc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:24
+msgid "Triangle"
+msgstr ""
+
+# 63ba769c64114e27b40f0a74bd8d3604
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:24
+msgid "Pentahedron"
+msgstr ""
+
+# a322c15c31f142d488551274d60e8a9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:26
+msgid "Hexahedron"
+msgstr ""
+
+# 7eb6eaf57f004d31927ac6eabf97b7cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:28
+msgid "Polygon"
+msgstr ""
+
+# f611530d307e459aa62eefb31be44873
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:28
+msgid "Polyhedron"
+msgstr ""
+
+# de5e6214009d48b0a25cf0e005ac62ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:30
+msgid "Hexagonal polygon"
+msgstr ""
+
+# 54d5dcd07ecb4111bd18c06a6da7be1a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:30
+msgid "Hexagonal prism"
+msgstr ""
+
+# 5783f80db812442fa92882f2cd6ed227
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:34
+msgid ""
+"When 2D elements are extruded, in addition to 3D elements segments are "
+"created on the ribs of the resulting 3D mesh. Free edges of input 2D "
+"elements generate logically horizontal rib segments. Logically vertical "
+"rib segments are generated from the nodes belonging to a sole input 2D "
+"element (the figure below illustrates this rule)."
+msgstr ""
+
+# b1cbf516acca40e5bcb88be731246438
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:43
+msgid "**To use extrusion:**"
+msgstr ""
+
+# e4b0a7aca4d349309ef5d31e63b00a66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:45
+msgid ""
+"From the **Modification** menu choose the **Extrusion** item or click "
+"**\"Extrusion\"** button in the toolbar."
+msgstr ""
+
+# 693752be10014feb9a87762183d890d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:53
+msgid "The following dialog will appear:"
+msgstr ""
+
+# c3703d1aa91c49ba8e99c04e8c52df4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:60
+msgid "In this dialog:"
+msgstr ""
+
+# c30f5aa684394cba8f2b31d58410292f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:67
+msgid ""
+"Use *Selection* button to specify what you are going to  select at a "
+"given moment, **Nodes**, **Edges** or **Faces**."
+msgstr ""
+
+# d0159decd96a479591271a64f8f09a9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:73
+msgid ""
+"Specify **Nodes**, **Edges** and **Faces**, which will be extruded, by "
+"one of following means:"
+msgstr ""
+
+# cf74b51d01e74797a40dcdc6ec5d65a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:70
+msgid ""
+"**Select the whole mesh, sub-mesh or group** activating the corresponding"
+" check-box."
+msgstr ""
+
+# 496ae8d70e244acba70124abc8c6539a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:71
+msgid ""
+"Choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame."
+msgstr ""
+
+# 63c868c12f4a44e3ae22eed9bfb4826e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:72
+msgid ""
+"Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face "
+"IDs** fields. The selected elements will be highlighted in the viewer, if"
+" the mesh is shown there."
+msgstr ""
+
+# c723cfa91f234662a336c6e696edad7c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:73
+msgid ""
+"Apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`filtering_elements`:\"Selection filters\" page."
+msgstr ""
+
+# ee94b752be9d4b75b998a61ef027b8f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:76
+msgid "If the **Extrusion to Distance** radio button is selected"
+msgstr ""
+
+# 80f0a501c039494fa6cdb49a95f3c8b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:76
+msgid "specify the translation vector by which the elements will be extruded."
+msgstr ""
+
+# 46a93739cd43409782f9cc81529f5e6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:78
+msgid "If the **Extrusion Along Vector** radio button is selected"
+msgstr ""
+
+# fefb6a7cb0f749b9953fe4b142909237
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:83
+msgid ""
+"specify the components of the **Vector** along which the elements will be"
+" extruded, either directly or by selecting the mesh face (the normal to "
+"the face will define the vector),"
+msgstr ""
+
+# 43be03535a7a4e1ea9dca1e8b3dc71fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:84
+msgid ""
+"specify the **Distance** of extrusion along the vector (it can be "
+"negative)."
+msgstr ""
+
+# bb5c369c3e7846afbada8631f4c62600
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:88
+msgid ""
+"If the **Extrusion By Normal** radio button is selected, every node of "
+"the selected faces is extruded along the *average* of the *normal* "
+"vectors to the faces sharing the node. (Nodes and edges cannot be "
+"extruded in this mode.)"
+msgstr ""
+
+# 66f8279ea7fd47b3b42c0d87987bc3ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:93
+msgid "Specify the **Distance** of extrusion (it can be negative),"
+msgstr ""
+
+# 5a68a26f70a343b68a8b65c58a0ca736
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:94
+msgid ""
+"Use **Along average normal** check-box to specify along which vector the "
+"distance is measured."
+msgstr ""
+
+# 774f7b697b244ed692daa2e4ea20c506
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:95
+msgid ""
+"If it is *activated* the distance is measured along the average normal "
+"mentioned above."
+msgstr ""
+
+# 141e69fb74d748b3801bb69d53369658
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:96
+msgid ""
+"If it is *deactivated* every node is extruded along the average normal "
+"till its intersection with a virtual plane obtained by translation of the"
+" face sharing the node along its own normal by the **Distance**."
+msgstr ""
+
+# 5a16428f873e499bbb978c871ebda02f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:98
+msgid ""
+"The picture below shows a cross-section of a 2D mesh extruded with "
+"**Along average normal** activated (to the left) and deactivated (to the "
+"right)."
+msgstr ""
+
+# 13537234a1ae43bf87fcc450c709eb58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:108
+msgid ""
+"**Use only input elements** check-box specifies what elements will be "
+"used to compute the average normal."
+msgstr ""
+
+# 1aee516cd243484b96295b8061828dd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:109
+msgid ""
+"If it is *activated* only selected faces, among faces sharing the node, "
+"are used to compute the average normal at the node."
+msgstr ""
+
+# d644b3e115f34653a56f746f7d775170
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:110
+msgid "Else all faces sharing the node are used."
+msgstr ""
+
+# c980870b2226438eb4237b372b558037
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:112
+msgid ""
+"The picture below shows a cross-section of a 2D mesh the upper plane of "
+"which is extruded with **Use only input elements** activated (to the "
+"left) and deactivated (to the right)."
+msgstr ""
+
+# b79e7639a6474f3182a838f2757aa90f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:122
+msgid "Specify the **Number of steps**."
+msgstr ""
+
+# b16bd8b181304246b9bcecf63b4a58cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:141
+msgid ""
+"Optionally specify **Scale Factors**. Each scale factor in the list is "
+"applied to nodes of a corresponding extrusion step unless **Linear "
+"Variation of Scale Factors** is checked, is which case the scale factors "
+"are spread over all extrusion steps."
+msgstr ""
+
+# 68c3f5a414364ee8a09781e956586294
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:124
+msgid ""
+"**Scaling Center** can be defined either using spin boxes or by picking a"
+" node in the Viewer or by picking a geometrical vertex in the Object "
+"Browser."
+msgstr ""
+
+# 836c4b43b7c24aa4aa676a9173dc9e0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:125
+msgid "**Add** button adds a scale factor to the list."
+msgstr ""
+
+# 08a65a077ad74266bb3dc428552672ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:133
+msgid "**Remove** button removes selected scale factors from the list."
+msgstr ""
+
+# 65c23b96ef0c4583af562130852040cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:143
+msgid ""
+"If you activate **Generate Groups** check-box, the **result elements** "
+"created from **selected elements** contained in groups will be included "
+"into new groups named by pattern \"<old group name>_extruded\" and \"<old"
+" group name>_top\". For example if a selected quadrangle is included in "
+"*g_Faces* group (see figures below) then result hexahedra will be "
+"included in *g_Faces_extruded* group and a quadrangle created at the "
+"\"top\" of extruded mesh will be included in *g_Faces_top group*."
+msgstr ""
+
+# 67e7563b3d7e4482a49aa461a724ffa1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:151
+msgid "This check-box is active only if there are some groups in the mesh."
+msgstr ""
+
+# bd6a9b1d09cb4817b044a257b9c221cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:155
+msgid "Click **Apply** or **Apply and Close**  button to confirm the operation."
+msgstr ""
+
+# f08ac327c1d042559c34b64d86c475bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:160
+msgid "Example: creation of a structured mesh from scratch"
+msgstr ""
+
+# 75d97cfe13ff4c22aadf096504c666df
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion.rst:181
+msgid "**See Also** a sample TUI Script of an :ref:`tui_extrusion` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion_along_path.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion_along_path.po
new file mode 100644 (file)
index 0000000..525e613
--- /dev/null
@@ -0,0 +1,250 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 588d53aa2c134a96bf8bc6f57f04dbfc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:5
+msgid "Extrusion along Path"
+msgstr ""
+
+# 4aeec93989e04f0b8a5cd47900688c45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:7
+msgid ""
+"In principle, **Extrusion along Path** works in the same way as "
+":ref:`extrusion_page`, the main difference is that we define not a "
+"vector, but a path of extrusion which must be an 1D mesh or 1D sub-mesh. "
+"To get an idea of how this algorithm works, examine several examples, "
+"starting from the most simple case of extrusion along a straight edge. In"
+" the examples the sample mesh will be extruded along different paths and "
+"with different parameters. This 2D mesh has two quadrangle faces and "
+"seven edges. Look at the picture, where white digits are the node numbers"
+" and green are the element numbers:"
+msgstr ""
+
+# 432bc14cb72f4d5eb8d0da786d0326f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:16
+msgid "Extrusion along a straight edge"
+msgstr ""
+
+# 61ae00ddc63e4843a2b47f96ac7b23b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:17
+msgid "(not using base point or angles)"
+msgstr ""
+
+# 3da83113d7064ebc94c32998cdfe1fd4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:31
+msgid "Node #1 of path mesh has been selected as Start node."
+msgstr ""
+
+# dbeb00b92d90425eb0d14084c6f2fa49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:34
+msgid "Extrusion along a curvilinear edge"
+msgstr ""
+
+# 09c57ebbbd7d4cea88a63192af3991bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:35
+msgid "(with and without angles)"
+msgstr ""
+
+# acf8f5192c864441883b3ecb898363cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:49
+msgid "Node #1 of path mesh has been selected as **Start node**."
+msgstr ""
+
+# 3ec6691bd161445593511faff96e9bb4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:58
+msgid "Extrusion of a 2D face along a mesh built on a wire"
+msgstr ""
+
+# 4e26b95dea014ad79ce8a6b7e00ca07b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:60
+msgid ""
+"In this example the path mesh has been built on a wire containing 3 "
+"edges. Node 1 is a start node. Linear angle variation by 180 degrees has "
+"also been applied."
+msgstr ""
+
+# beba5dd38ec446dbba901980a6d730b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:75
+msgid "Extrusion of 2d elements along a closed path"
+msgstr ""
+
+# 542a40ad28784840813301cd37adfb95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:89
+msgid ""
+"Note, that no sewing has been done, so, there are six coincident nodes "
+"and two coincident faces in the resulting mesh."
+msgstr ""
+
+# ae6ed7ef04af4adf8c16d7c73551dd17
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:98
+msgid "**To use Extrusion along Path:**"
+msgstr ""
+
+# 972d0d7b8e2d4757a2bbb9204041a949
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:100
+msgid ""
+"From the **Modification** menu choose the **Extrusion along a path** item"
+" or click **\"Extrusion along a path\"** button in the toolbar."
+msgstr ""
+
+# 73d0abac14d740f3ad742d87e6f41e5c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:108
+msgid "The following dialog will appear:"
+msgstr ""
+
+# 76894b1abc2d4beda37f23172ad80977
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:113
+msgid "In this dialog:"
+msgstr ""
+
+# c0873410c52f4d3fa8c537276e27d53a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:115
+msgid ""
+"Use *Selection* button to specify what you are going to select at a given"
+" moment, **Nodes**, **Edges** or **Faces**."
+msgstr ""
+
+# 6778b72713654449bfc388a7513d6919
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:123
+msgid ""
+"Specify **Nodes**, **Edges** and **Faces**, which will be extruded, by "
+"one of following means:"
+msgstr ""
+
+# 32617b683fb443608c76c82457e647e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:125
+msgid "**Select the whole mesh, sub-mesh or group** activating this check-box."
+msgstr ""
+
+# eb8f59b7bdfb4f6fb93d7060290737b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:126
+msgid ""
+"Choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame."
+msgstr ""
+
+# d6b66337ef8d49bf902de528b4b63f5d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:127
+msgid ""
+"Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face "
+"IDs** fields. The selected elements will be highlighted in the viewer, if"
+" the mesh is shown there."
+msgstr ""
+
+# fdd735e466c94dc58e0ba134a190976d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:128
+msgid ""
+"Apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`filtering_elements` page."
+msgstr ""
+
+# bf5ac45174b54265a04afd558fa641ce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:130
+msgid ""
+"Define the **Path** along which the elements will be extruded.Path "
+"definition consists of several elements:"
+msgstr ""
+
+# 1e63128e7c254a54be66ec3a0780fcc7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:132
+msgid ""
+"**Mesh or sub-mesh** - 1D mesh or sub-mesh, along which proceeds the "
+"extrusion."
+msgstr ""
+
+# c126f4fd09a942ca93778a4201572569
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:133
+msgid ""
+"**Start node** - the start node of the Path. It is used to define the "
+"direction of extrusion."
+msgstr ""
+
+# c81a11bc397d41aaa19c546989e03c5c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:136
+msgid ""
+"If you activate **Generate Groups** check-box, the **result elements** "
+"created from **selected elements** contained in groups will be included "
+"into new groups named by pattern \"<old group name>_extruded\" and \"<old"
+" group name>_top\". For example if a  selected quadrangle is included in "
+"*g_Faces* group (see figures below) then result hexahedra will be "
+"included in *g_Faces_extruded* group and a quadrangle created at the "
+"\"top\" of extruded mesh will be included in *g_Faces_top group*."
+msgstr ""
+
+# 3f041a51d0094365a3f3d036df4f2edb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:144
+msgid "This check-box is active only if there are some groups in the mesh."
+msgstr ""
+
+# d770e6d7fbd3438b99983300c7578f2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:149
+msgid "There are two optional parameters, which can be very useful:"
+msgstr ""
+
+# 854e4054a12f473785e0d111bd04bb38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:151
+msgid ""
+"If the path of extrusion is curvilinear, at each iteration the extruded "
+"elements are rotated to keep its initial angularity to the curve. By "
+"default, the **Base Point** around which the elements are rotated is the "
+"mass center of the elements (note that it can differ from the gravity "
+"center computed by *Geometry* module for the  underlying shape), however,"
+" you can specify any point as the **Base Point** and the elements will be"
+" rotated with respect to this point. Note that only the displacement of "
+"the **Base Point** exactly equals to the path, and all other extruded "
+"elements simply keep their position relatively to the **Base Point** at "
+"each iteration."
+msgstr ""
+
+# 8cda2b8fd95e4e55894e0c5ba64189d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:153
+msgid ""
+"The elements can also be rotated around the path to get the resulting "
+"mesh in a helical fashion. You can set the values of angles at the right,"
+" add them to the list of angles at the left by pressing the **\"Add\"** "
+"button and remove them from the list by pressing the **\"Remove\"** "
+"button."
+msgstr ""
+
+# 73808985fda548e8b32349d633ce9c61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:167
+msgid ""
+"**Linear variation of the angles** option allows defining the angle of "
+"gradual rotation for the whole path. At each step the elements will be "
+"rotated by *( angle / nb. of steps )*."
+msgstr ""
+
+# 13433694aaea4fd0ba18f3b9d35d08c3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:171
+msgid ""
+"Click **Apply** or **Apply and Close**  button to confirm the operation. "
+"Mesh edges will be extruded into faces, faces into volumes. The external "
+"surface of the resulting 3d mesh (if faces have been extruded) is covered"
+" with faces, and corners with edges. If the path is closed, the resulting"
+" mesh can contain duplicated nodes and faces, because no sewing is done."
+msgstr ""
+
+# 8c7e5234ca904017953ca8e334796d25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/extrusion_along_path.rst:174
+msgid ""
+"**See Also** a sample TUI Script of an :ref:`tui_extrusion_along_path` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/find_element_by_point.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/find_element_by_point.po
new file mode 100644 (file)
index 0000000..6081c19
--- /dev/null
@@ -0,0 +1,73 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4dc0f3e4fe6748a0a6ce1f0e9807ce9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:5
+msgid "Find Element by Point"
+msgstr ""
+
+# 073b2bfeb80f44cca499fa25b7521de3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:7
+msgid ""
+"This functionality allows you to find all mesh elements to which belongs "
+"a certain point."
+msgstr ""
+
+# 95619f5461e542d38f9ec4798818c2eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:9
+msgid ""
+"**To find the elements:** #. Select a mesh or a group #. Select from the "
+"Mesh menu or from the context menu the Find Element by Point item."
+msgstr ""
+
+# 808cd972a4064043ab3b4519afbd56bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:19
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# a552b96c818645748f81db671bcd62b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:26
+msgid "In this dialog box you should select:"
+msgstr ""
+
+# 936ef9f5e4974b3bbb3ea1fb48943b6e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:26
+msgid "the coordinates of the point;"
+msgstr ""
+
+# 8000622bf5b54cc782de0ecaf6ffe524
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:27
+msgid ""
+"the type of elements to be found; it is also possible to find elements of"
+" all types related to the reference point. Choose type \"All\" to find "
+"elements of any type except for nodes and 0D elements."
+msgstr ""
+
+# 468a7c6589434779ae54692db6406554
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:28
+msgid "Click the **Find** button."
+msgstr ""
+
+# cd9815de90004e28830104b04231c2b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/find_element_by_point.rst:37
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_find_element_by_point` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_borders.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_borders.po
new file mode 100644 (file)
index 0000000..49ea459
--- /dev/null
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e744aed8ef694ea99b7130e99217c15d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_borders.rst:5
+msgid "Free borders"
+msgstr ""
+
+# 2f1cd2b0475b478096f3af6e60704e7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_borders.rst:7
+msgid ""
+"This mesh quality control highlights 1D elements (segments) belonging to "
+"one element (face or volume) only."
+msgstr ""
+
+# 8548d598dbbd4a05812f4d4c733374bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_borders.rst:12
+msgid ""
+"In this picture the free borders are displayed in red. (Faces are "
+"explicitly shown via **Display Entity** menu as all elements but segments"
+" are hidden upon this control activation)."
+msgstr ""
+
+# fa891d3c4c794a4f94e45d3169e528ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_borders.rst:14
+msgid "**See Also** a sample TUI Script of a :ref:`tui_free_borders` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_edges.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_edges.po
new file mode 100644 (file)
index 0000000..a435d5f
--- /dev/null
@@ -0,0 +1,36 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5da48859829f4e028b17c84942927153
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_edges.rst:5
+msgid "Free edges"
+msgstr ""
+
+# a897c07e770b49948d19a31018ff06d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_edges.rst:7
+msgid ""
+"This mesh quality control highlights borders of faces (links between "
+"nodes, not mesh segments) belonging to one face only."
+msgstr ""
+
+# 5e656e8b86c647f49fdeead239e846c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_edges.rst:15
+msgid "**See Also** a sample TUI Script of a :ref:`tui_free_edges` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_faces.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_faces.po
new file mode 100644 (file)
index 0000000..e420c8a
--- /dev/null
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 37b63c6f8c2947a98e5027ee26e62a36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_faces.rst:5
+msgid "Free faces"
+msgstr ""
+
+# b2eed9e5bb4742d09ea37734a74b1e54
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_faces.rst:7
+msgid ""
+"This mesh quality control highlights the faces connected to less than two"
+" mesh volume elements. The free faces are shown with a color different "
+"from the color of shared faces."
+msgstr ""
+
+# f2ddd55c17c24a6c8d3987369b20200f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_faces.rst:12
+msgid ""
+"In this picture some volume mesh elements have been removed, as a result "
+"some faces became connected only to one volume. i.e. became free."
+msgstr ""
+
+# f88c4d87e5aa48c989ca51b9d1541761
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_faces.rst:14
+msgid "**See also:** A sample TUI Script of a :ref:`tui_free_faces` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_nodes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_nodes.po
new file mode 100644 (file)
index 0000000..9817126
--- /dev/null
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 00de523f05fb4028973b57a1043944ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_nodes.rst:5
+msgid "Free nodes"
+msgstr ""
+
+# 02fa9d9f90b14ce6acd7da029ef05cbc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_nodes.rst:7
+msgid ""
+"This mesh quality control highlights the nodes which are not connected to"
+" any  mesh element."
+msgstr ""
+
+# 1e3a78f5ddba4dd8959674d7be0dfb25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_nodes.rst:12
+msgid ""
+"In this picture some nodes are not connected to any mesh element after "
+"deleting some elements and adding several isolated nodes."
+msgstr ""
+
+# 1c239db808994ddca40b15e4acefaa4b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/free_nodes.rst:14
+msgid "**See also:** A sample TUI Script of a :ref:`tui_free_nodes` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/generate_flat_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/generate_flat_elements.po
new file mode 100644 (file)
index 0000000..a3e6f44
--- /dev/null
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 89411e86108a40ff9ef699aa212edc20
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/generate_flat_elements.rst:5
+msgid "Generate flat elements on group boundaries or on faces"
+msgstr ""
+
+# 4d4976b61bf94a46b7add0d0a5acd818
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/generate_flat_elements.rst:7
+msgid ""
+"These functionalities, used in some mechanics calculations, allow to "
+"generate flat volume elements on the boundaries of a list of groups of "
+"volumes, or on a list of groups of faces."
+msgstr ""
+
+# 7b495da34061472ab6f9cb826c9d8879
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/generate_flat_elements.rst:10
+msgid "These functionalities are only available in python scripts."
+msgstr ""
+
+# 93ea46b0809d42a3b7a9807af09e7282
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/generate_flat_elements.rst:12
+msgid ""
+"**See** a sample TUI Script of "
+":ref:`tui_double_nodes_on_group_boundaries` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/group_of_underlying_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/group_of_underlying_elements.po
new file mode 100644 (file)
index 0000000..f4296a1
--- /dev/null
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d607987c56ae4ed888b4297c350d3cc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:5
+msgid "Group Based on Nodes of Other Groups"
+msgstr ""
+
+# a92ce49dadd64b8f8eebc759bfed0b4c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:8
+msgid ""
+"To create a standalone group of entities basing on nodes of existing "
+"reference groups, in the **Mesh** menu select **Group of underlying "
+"entities**."
+msgstr ""
+
+# 8e6c856a77a6408e98ef8a22b42366ce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:10
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 6fdd3d27da334237a0819be8ce25c2f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:15
+msgid "In this dialog box specify"
+msgstr ""
+
+# 050d2fa8e0464b7a9bf49dddf09dd567
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:17
+msgid "the resulting **Group name**,"
+msgstr ""
+
+# cbc2c083b9254ae882b884f29cbb6fd4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:18
+msgid "the **Elements Type** of entities of the resulting group,"
+msgstr ""
+
+# e736defec9594c3aaf6fd65946e9b99b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:23
+msgid ""
+"the criterion of inclusion of a mesh entity to the result group, which is"
+" **Number of common nodes** of the entity and the reference groups:"
+msgstr ""
+
+# 4cb2886461674203b41470240952239a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:20
+msgid "**All** - include if all nodes are common;"
+msgstr ""
+
+# a948a443916841f5b9524653fc818827
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:21
+msgid ""
+"**Main** - include if all corner nodes are common (meaningful for a "
+"quadratic mesh)"
+msgstr ""
+
+# 8fabb8b4593e459ca24be8d29bd23d0a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:22
+msgid "**At least one** - include if one or more nodes are common"
+msgstr ""
+
+# 0801c9881b4d47ddb06da1e1eb374992
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:23
+msgid "**Majority** - include if half or more nodes are common"
+msgstr ""
+
+# 459841bfa1294ebf8e57a1577481e8e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:25
+msgid "select reference groups,"
+msgstr ""
+
+# ac28c573d20143b4a10943d3569086d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:26
+msgid ""
+"If **Include underlying entities only** option is activated an entity can"
+" be included if it is based on nodes of one element of a reference group."
+msgstr ""
+
+# f7212700b64f4017b7d411a4e862d964
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:29
+msgid "In the figure below, there are two reference Volume groups:"
+msgstr ""
+
+# 235e2411c07745e88d01d050fec69080
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:37
+msgid ""
+"In this case the following results for Faces, Edges and Nodes are "
+"obtained:"
+msgstr ""
+
+# 72befc0b56d94ee881b69420b3f361b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst:57
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_create_dim_group` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/grouping_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/grouping_elements.po
new file mode 100644 (file)
index 0000000..20e0abd
--- /dev/null
@@ -0,0 +1,185 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# c054b7a14c9042f8baa4816281a43d06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:5
+msgid "Grouping elements"
+msgstr ""
+
+# 1783fde7b458439598ddf51139a28a13
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:7
+msgid ""
+"In Mesh module it is possible to create groups of mesh entities: nodes, "
+"edges, faces, volumes, 0D elements or balls. One group contains elements "
+"of only one type. Groups, unlike sub-meshes, are exported along with mesh"
+" entities into the files of following formats: MED, UNV, and CGNS. The "
+"group has a color attribute which is used for visualization only and is "
+"not exported."
+msgstr ""
+
+# 1886e7e9a93946fb9e44e3830cc6cc43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:9
+msgid "There are three types of groups different by their internal organization:"
+msgstr ""
+
+# 8a37933afc084fbc8c2bcafbbda74046
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:12
+msgid ""
+"**Standalone group** is a static set of mesh entities. Its contents can "
+"be explicitly controlled by the user. Upon removal of the entities "
+"included into the group, e.g. due to modification of  meshing parameter, "
+"the group becomes empty and its content can be restored only manually. "
+"Hence it is reasonable to create standalone groups when the mesh "
+"generation is finished and mesh quality is verified."
+msgstr ""
+
+# dc50a15a6ae94ca19fefca74f810b38b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:12
+msgid ""
+"Creation and edition of large standalone groups in "
+":ref:`creating_groups_page` dialog using manual edition is problematic "
+"due to poor performance of the dialog."
+msgstr ""
+
+# f59ed29ed1034010af2b9d983b45b1ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:14
+msgid ""
+"**Group on geometry** is associated to a sub-shape or a group of sub-"
+"shapes of the main shape and includes mesh entities generated on these "
+"geometrical entities. The association to a geometry is established at "
+"group construction and cannot be changed. The group contents are always "
+"updated automatically, hence the group can be created even before mesh "
+"elements generation."
+msgstr ""
+
+# 436b9beb403f412c839cd9a89387c2b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:15
+msgid ""
+"**Group on filter** encapsulates a :ref:`filters_page`, which is used to "
+"select mesh entities composing the group from the whole mesh. Criteria of"
+" the filter can be changed at any time. The group contents are always "
+"updated automatically, hence the group can be created even before mesh "
+"elements generation."
+msgstr ""
+
+# 2be721ade5a44ee8bd7699bd9a575ea3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:17
+msgid ""
+"The group on geometry and group on filter can be converted to a "
+"standalone group."
+msgstr ""
+
+# f54c459f93f5487dae0f85a72b5cbec1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:25
+msgid "The following ways of group creation are possible:"
+msgstr ""
+
+# c8177f2484ed4978adc64ac213c52cc5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:29
+msgid ":ref:`creating_groups_page` dialog allows creation of a group of any type:"
+msgstr ""
+
+# af3bd9c89f79492986f94cfadef74c57
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:28
+msgid ""
+":ref:`standalone_group`, :ref:`group_on_geom` and :ref:`group_on_filter` "
+"using dedicated tabs."
+msgstr ""
+
+# ea80b2d5ab544b319053510bcc9db387
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:31
+msgid ""
+":ref:`create_groups_from_geometry_page` dialog allows creation of several"
+" groups on geometry at once."
+msgstr ""
+
+# e1679917bf7442ef9961ada8446ae345
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:32
+msgid ""
+"Standalone groups of all nodes and elements of the chosen sub-mesh (type "
+"of elements depends on dimension of sub-mesh geometry) can be created "
+"using **Mesh -> Construct Group** menu item (available from the context "
+"menu as well)."
+msgstr ""
+
+# fdefd2688724460c9bc0225a193654e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:33
+msgid ""
+"Standalone groups of any element type can be created basing on nodes of "
+"other groups - using :ref:`group_of_underlying_elements_page` dialog."
+msgstr ""
+
+# 5c01af8b22004819bf427db0d75ed41f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:34
+msgid ""
+"Standalone groups can be created by applying "
+":ref:`using_operations_on_groups_page` to other groups."
+msgstr ""
+
+# 02613856191a4626b7d68300684bd947
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:35
+msgid ""
+"Creation of standalone groups is an option of many "
+":ref:`modifying_meshes_page` operations."
+msgstr ""
+
+# 360436afa0e74f84b35a359b6204ed41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:37
+msgid "The created groups can be later:"
+msgstr ""
+
+# 7d2bb01ba5f24c36971cadd38569fdc1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:39
+msgid ":ref:`editing_groups_page`"
+msgstr ""
+
+# 13739bd0dfd949e8874c483bfcd38ec6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:40
+msgid ""
+":ref:`deleting_groups_page`, either as an object or together with "
+"contained elements."
+msgstr ""
+
+# b729c98c1cbc40b890e982742ee7f96f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:41
+msgid ""
+"The group on geometry and group on filter can be "
+":ref:`convert_to_standalone` group."
+msgstr ""
+
+# 6944ca9fd13942869ba1e32184ba5829
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:42
+msgid ":ref:`importing_exporting_meshes_page` into a file as a whole mesh."
+msgstr ""
+
+# aeec28fb28344beaac90d9e5916c0aaf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:44
+msgid ""
+"In the Object Browser, if an item contains more than one child group, it "
+"is possible to sort the groups by name in ascending order using **Sort "
+"children** context menu item."
+msgstr ""
+
+# 453af779ec47485d9204318e5810a6ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/grouping_elements.rst:52
+msgid ""
+"An important tool, providing filters for creation of standalone groups "
+"and groups on filter is :ref:`selection_filter_library_page`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/importing_exporting_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/importing_exporting_meshes.po
new file mode 100644 (file)
index 0000000..e17bbf6
--- /dev/null
@@ -0,0 +1,146 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 35714d67b5be489cb11ba9ff9345f570
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:6
+msgid "Importing and exporting meshes"
+msgstr ""
+
+# f62b0a75ed2b42e0a839deed88db6c75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:8
+msgid ""
+"In MESH there is a functionality allowing import/export of meshes from/to"
+" **MED**, **UNV** (I-DEAS 10), **DAT** (simple ascii format), **STL**, "
+"**GMF** (internal format of DISTENE products, namely MG-CADSurf, MG-Tetra"
+" and MG-Hexa algorithms) and **CGNS** format files. You can also export a"
+" group as a whole mesh."
+msgstr ""
+
+# ff7a3149aefa4099a3db3a805c993434
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:10
+msgid "**To import a mesh:**"
+msgstr ""
+
+# f3055de8329a49c79a396b1e166c5cee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:12
+msgid ""
+"From the **File** menu choose the **Import** item, from its sub-menu "
+"select the corresponding format (MED, UNV, STL, GMF and CGNS) of the file"
+" containing your mesh."
+msgstr ""
+
+# 9465b08bc9e94b5d8e10cbf9ab684fb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:13
+msgid ""
+"In the standard **Search File** dialog box find the file for import. It "
+"is possible to select multiple files to be imported all at once."
+msgstr ""
+
+# 799d071d6cde41179a6532a68f7dee2d
+# b9228a967592466bb7980eeace4010ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:24
+msgid "Click the **OK** button."
+msgstr ""
+
+# 0210e8579daa406cacf59960fc2c4fa7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:19
+msgid "**To export a mesh or a group:**"
+msgstr ""
+
+# e276963d75cd49fb93b2e9c6801b13d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:21
+msgid "Select the object you wish to export."
+msgstr ""
+
+# 322c037300b54a30951303d98339ed50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:22
+msgid ""
+"From the **File** menu choose the **Export** item, from its sub-menu "
+"select the format (MED, UNV, DAT, STL, GMF and CGNS) of the file which "
+"will contain your exported mesh."
+msgstr ""
+
+# bdf58ac99b8b4145b3e50307c0a5ff10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:23
+msgid ""
+"In the standard **Search File** select a location for the exported file "
+"and enter its name."
+msgstr ""
+
+# 74a3fbc92aff45169859966b91e6b514
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:29
+msgid "If you try to export a group, the warning will be shown:"
+msgstr ""
+
+# 05edbd49b0854025ad97e15ad771d66f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:34
+msgid ""
+"**Don't show this warning anymore** check-box allows to switch off the "
+"warning. You can re-activate the warning in "
+":ref:`group_export_warning_pref`."
+msgstr ""
+
+# fee92e4eeceb43e3af929fd29deaf3c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:36
+msgid ""
+"There are additional parameters available at export to MED and SAUV "
+"format files."
+msgstr ""
+
+# 6cd0b8de3c734386afe00b2849cae3b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:41
+msgid "Auto Groups"
+msgstr ""
+
+# 343b2853b0ec4ef89cfc8c04f7e0361c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:43
+msgid ""
+"**Automatically create groups** check-box specifies whether to create "
+"groups of all mesh entities of available dimensions or not. The created "
+"groups have names like \"Group_On_All_Nodes\", \"Group_On_All_Faces\", "
+"etc. A default state of this check-box can be set in "
+":ref:`export_auto_groups_pref`."
+msgstr ""
+
+# 6befc5c462c14a5aa26387ad27a18b90
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:46
+msgid ""
+"**Automatically define space dimension** check-box specifies whether to "
+"define space dimension for export by mesh configuration or not. Usually "
+"the mesh is exported as a mesh in 3D space, just as it is in Mesh module."
+" The mesh can be exported as a mesh of a lower dimension in the following"
+" cases, provided that this check-box is checked:"
+msgstr ""
+
+# b985c52d03974cf096693ae06b59d265
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:45
+msgid "**1D**: if all mesh nodes lie on OX coordinate axis."
+msgstr ""
+
+# 683ece3abaee480187790486f255c7bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:46
+msgid "**2D**: if all mesh nodes lie in XOY coordinate plane."
+msgstr ""
+
+# fa935c1bda3b4e76b8b6ea623fa4dfb7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst:48
+msgid "**See Also** a sample TUI Script of an :ref:`tui_export_mesh` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/index.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/index.po
new file mode 100644 (file)
index 0000000..524e83f
--- /dev/null
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7a782e28ee2747b0bf7eb0f71407f51e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/index.rst:7
+msgid "Welcome to SMESH's documentation!"
+msgstr "Bienvenue dans la documentation de SMESH!"
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/introduction.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/introduction.po
new file mode 100644 (file)
index 0000000..0d247e3
--- /dev/null
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 11:57+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 0bdabc52b48a44c1b7833e2c080c8fc7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:3
+msgid "Introduction to Mesh module"
+msgstr ""
+
+# 1eab875349524c43807a6e067ef1001d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:8
+msgid "**Mesh** module of SALOME is destined for:"
+msgstr ""
+
+# f2265307afc24e5dab8b9d21393d91e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:13
+msgid ":ref:`creating meshes <about_meshes_page>` in different ways:"
+msgstr ""
+
+# 76a6036c50fc422a9be2ffa57b5b5424
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:11
+msgid ""
+"by meshing geometrical models previously created or imported by the "
+"Geometry component;"
+msgstr ""
+
+# e65b12af95174deaa457c0d7ab33b729
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:12
+msgid ""
+"bottom-up, using :ref:`modifying_meshes_page`, especially "
+":ref:`extrusion_page` and :ref:`revolution_page`;"
+msgstr ""
+
+# 0a6123fd41e24e07a907de9e5e3b3557
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:13
+msgid ""
+"by generation of the 3D mesh from the 2D mesh not based on the geometry "
+"(:ref:`importing_exporting_meshes_page` for example);"
+msgstr ""
+
+# 11f6d462475e49488c6c7f9947d4206f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:15
+msgid ":ref:`importing_exporting_meshes_page` in various formats;"
+msgstr ""
+
+# 5a0fdbb470b04bf99fe49aa780f18fd4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:16
+msgid ":ref:`modifying_meshes_page` with a vast array of dedicated operations;"
+msgstr ""
+
+# 50b4f8f5a5244ef39ec17255f10c665f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:17
+msgid ":ref:`grouping_elements_page` of mesh elements;"
+msgstr ""
+
+# 4ec2919033934d18a852857bd8148fbb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:18
+msgid ""
+"filtering mesh entities (nodes or elements) using :ref:`filters_page` "
+"functionality for :ref:`grouping_elements_page` and applying "
+":ref:`modifying_meshes_page`;"
+msgstr ""
+
+# 03efffcd260f40e185a2884eaf563a3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:19
+msgid ""
+":ref:`viewing_meshes_overview_page` in the VTK viewer and "
+":ref:`mesh_infos_page` on mesh and its sub-objects;"
+msgstr ""
+
+# e5718414f14243cdadbaa06b45ec5acc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:20
+msgid ""
+"applying to meshes :ref:`quality_page`, allowing to highlight important "
+"elements;"
+msgstr ""
+
+# 8b99877b0d4549d1abb078f50f6f33cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:21
+msgid "taking various :ref:`measurements_page` of the mesh objects."
+msgstr ""
+
+# 73b3d1abfbf549b394bcb42bff5bd696
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/introduction.rst:24
+msgid ""
+"It is possible to use the variables predefined in "
+":ref:`using_notebook_mesh_page` to set parameters of operations. Mesh "
+"module preferences are described in the :ref:`mesh_preferences_page` "
+"section of SALOME Mesh Help. Almost all mesh module functionalities are "
+"accessible via :ref:`smeshpy_interface_page`. There is a set of "
+":ref:`tools_page` plugged-in the module to extend the basic functionality"
+" listed above."
+msgstr ""
+
+# d2c36cd2c8c443edab9f9e5683075b8b
+#~ msgid ":ref:`about_meshes_page` in different ways:"
+#~ msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length.po
new file mode 100644 (file)
index 0000000..35a06b7
--- /dev/null
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 11cf0c544c364ac2952c99cf4e2c3530
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length.rst:5
+msgid "Length"
+msgstr ""
+
+# ed3d15c365174cf6a3183be3d3c6eb59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length.rst:7
+msgid "Length quality control criterion returns a value of length of edge."
+msgstr ""
+
+# 88ba97200f8d4f9bbdeb5aafb3652a22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length.rst:12
+msgid "**See Also** a sample TUI Script of a :ref:`tui_length_1d` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length_2d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length_2d.po
new file mode 100644 (file)
index 0000000..d622f98
--- /dev/null
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 95b4af8ed0b2420ba49b9edfe08eba0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:5
+msgid "Length 2D"
+msgstr ""
+
+# 7f6f65cbea6749148c469fe81c9ff0ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:7
+msgid ""
+"This quality control criterion consists of calculation of length of the "
+"links between corner nodes of mesh faces."
+msgstr ""
+
+# 4e76fceae6094126b072a470a4805ad8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:9
+msgid "**To apply the Length 2D quality criterion to your mesh:**"
+msgstr ""
+
+# 1e7e63a037cd428fbc91417e209aa19c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:11
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 94070e60503e47b785da82b2e1090cb3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:12
+msgid ""
+"Choose **Controls > Face Controls > Length 2D** or click **\"Length "
+"2D\"** button in the toolbar."
+msgstr ""
+
+# 036a92ddf9bb460597dffcb929388121
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:20
+msgid ""
+"Your mesh will be displayed in the viewer with links colored according to"
+" the applied mesh quality control criterion:"
+msgstr ""
+
+# e35eabd4b75e4ff1ae503171382a3e5d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/length_2d.rst:26
+msgid "**See Also** a sample TUI Script of a :ref:`tui_length_2d` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po
new file mode 100644 (file)
index 0000000..3aa6219
--- /dev/null
@@ -0,0 +1,144 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 45e7bb44985d4a939a0893b7c72f64b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:5
+msgid "Generate boundary elements"
+msgstr ""
+
+# 81dcd600380c4cedae1ad528c8312cd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:7
+msgid ""
+"This functionality allows to generate mesh elements on the borders of "
+"elements of a higher dimension, for example, to create 2D elements around"
+" a block of 3D elements as in the following figure."
+msgstr ""
+
+# 230845ffba19429e8bb03f2f2727e88b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:16
+msgid "**To generate border elements:**"
+msgstr ""
+
+# 4a243378956441699e4dae772e14a9b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:18
+msgid "Select a mesh or group in the Object Browser or in the 3D Viewer"
+msgstr ""
+
+# 4523e944e6a64901b5b06fe3e4ec2515
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:19
+msgid ""
+"From the Modification menu choose \"Create boundary elements\" item, or "
+"click \"Create boundary elements\" button in the toolbar"
+msgstr ""
+
+# 63f9d61107064b78a617115009fb8ba5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:28
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 4d42e6e23f114646ae9e4dcfa643f2b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:37
+msgid ""
+"Check in the dialog box one of two radio buttons corresponding to the "
+"type of operation you would like to perform."
+msgstr ""
+
+# 3a27e67ac6214278aa7298a993e72c0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:38
+msgid "Fill the other fields available in the dialog box."
+msgstr ""
+
+# 44af91b085e04bfb8cee97be95a2bac7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:39
+msgid ""
+"Click the **Apply** or **Apply and Close** button to perform the "
+"operation."
+msgstr ""
+
+# e2f22c2cf1bc4bdaaa28c4ab85e405ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:41
+msgid ""
+"\"Create boundary elements\" dialog allows creation of boundary elements "
+"of two types."
+msgstr ""
+
+# bd438ed627bf43f0b4be802727f6603a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:43
+msgid ""
+"**2D from 3D** creates missing mesh faces on free facets of volume "
+"elements"
+msgstr ""
+
+# 3834e909e5ff4d6a8445aa188ea3d079
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:44
+msgid "**1D from 2D** creates missing mesh edges on free edges of mesh faces"
+msgstr ""
+
+# 0679ee21fde8464b88060eed26eb23f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:46
+msgid ""
+"Here a **free facet** means a facet shared by only one volume, a **free "
+"edge** means an edge shared by only one mesh face."
+msgstr ""
+
+# ab132c23ffad42e28e68bcf5b353d166
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:49
+msgid "In this dialog:"
+msgstr ""
+
+# 325ea2589ed24f91afdc9bc4d123e3ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:51
+msgid "specify the **Target** mesh, where the boundary elements will be created."
+msgstr ""
+
+# 58e483eeffa74cd3bb20054d19589c2e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:53
+msgid "**This mesh** adds elements in the selected mesh."
+msgstr ""
+
+# 4cd1d5e6c9fd45ccb6110cff9dcf48f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:54
+msgid ""
+"**New mesh** adds elements to a new mesh. The new mesh appears in the "
+"Object Browser with the name that you can change in the adjacent box."
+msgstr ""
+
+# 99093f54748c4b05afda91533baf132a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:56
+msgid ""
+"activate **Copy source mesh** checkbox to copy all elements of the "
+"selected mesh to the new mesh, else the new mesh will contain only "
+"boundary elements (old and created by this operation)."
+msgstr ""
+
+# 4e85dfc4233e4db080fdde756adf6aec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:57
+msgid ""
+"activate **Create group** checkbox to create a group to which all the "
+"boundary elements (old and new) are added. The new group appears in the "
+"Object Browser with the name that you can change in the adjacent box."
+msgstr ""
+
+# 649910b8deaf4b1684654f55e91496fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst:59
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_make_2dmesh_from_3d` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_2d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_2d.po
new file mode 100644 (file)
index 0000000..3aa1829
--- /dev/null
@@ -0,0 +1,63 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 18d5fec451fc4bec8e3bef94502ddf15
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:5
+msgid "Element Diameter 2D"
+msgstr ""
+
+# 8a1bb7fc885d4639a1851fdb7f3954ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:7
+msgid ""
+"This quality control criterion consists in calculation of the maximal "
+"length of edges and diagonals of 2D mesh elements (triangles and "
+"quadrangles). For polygons the value is always zero."
+msgstr ""
+
+# 598c6758c6794caead22d02d1d22e930
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:9
+msgid "**To apply the Element Diameter 2D quality criterion to your mesh:**"
+msgstr ""
+
+# 8871ae25af5a4df8b72f0afe00a04b67
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:11
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 1d9cea8722f341ba88c488744b22592d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:12
+msgid ""
+"Choose **Controls > Face Controls > Element Diameter 2D** or click "
+"**\"Element Diameter 2D\"** button in the toolbar."
+msgstr ""
+
+# 6f9b96ffef0d4c879310362f2c00ed4c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:20
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 11b56c89c3e4454cb19ceaf0973bf052
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_2d.rst:25
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_max_element_length_2d` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_3d.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_3d.po
new file mode 100644 (file)
index 0000000..67d5734
--- /dev/null
@@ -0,0 +1,63 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 12508cdad0f0423fafaf17bc9c8f378a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:5
+msgid "Element Diameter 3D"
+msgstr ""
+
+# 76def95f4aca4cc98b3288305dc01fbc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:7
+msgid ""
+"This quality control criterion consists in calculation of the maximal "
+"length of edges and diagonals of 3D mesh elements (tetrahedrons, "
+"pyramids, etc). For polyhedra the value is always zero."
+msgstr ""
+
+# 568b7a64cb374f168fa585b5771ec419
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:9
+msgid "**To apply the Element Diameter 3D quality criterion to your mesh:**"
+msgstr ""
+
+# 6dfd01f191d84de7afd67327d52827ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:11
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# e9f0faa61067408b99223bdc6864b806
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:12
+msgid ""
+"Choose **Controls > Volume Controls > Element Diameter 3D** or click "
+"**\"Element Diameter 3D\"** button in the toolbar."
+msgstr ""
+
+# 41baa3271ea844e0bd78095589febfa4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:20
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 42b48187fab0442dba02a4ab5a8ac103
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_length_3d.rst:26
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_max_element_length_3d` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_volume_hypo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_volume_hypo.po
new file mode 100644 (file)
index 0000000..6d79654
--- /dev/null
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 08b2b54fd0774b3696f319f6ceca5da3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_volume_hypo.rst:5
+msgid "Max Element Volume hypothesis"
+msgstr ""
+
+# 0457ac97e64c486ba51dca3fef86ef8a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_volume_hypo.rst:7
+msgid ""
+"**Max Element Volume** hypothesis is applied for meshing of 3D objects "
+"composing your geometrical object. Definition of this hypothesis consists"
+" of setting the **maximum volume** of 3D meshing elements (depending on "
+"the chosen meshing algorithm it can be **hexahedrons** or "
+"**tetrahedrons**), which will compose the mesh of these 3D objects."
+msgstr ""
+
+# 9d33c4d96b7c4e14a7a446a2cc78d0c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/max_element_volume_hypo.rst:12
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_max_element_volume` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/measurements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/measurements.po
new file mode 100644 (file)
index 0000000..2379bf1
--- /dev/null
@@ -0,0 +1,229 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# fc322395f3114a83adb58370f446f95f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:5
+msgid "Measurements"
+msgstr ""
+
+# 5602a5a07c844159a417072a006f34d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:7
+msgid ""
+"Mesh module provides the possibility to perform different measurements of"
+" the selected mesh data."
+msgstr ""
+
+# ca57bc0c665840db9be756b5f53834f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:9
+msgid ""
+"All measurement operations are available via **Measurements** top-level "
+"menu. Access to the measurements operations is implemented via a single "
+"dialog box, where each operation is represented as a separate tab page."
+msgstr ""
+
+# f3defa3bd44e4c6e8c67384d1c7ce878
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:14
+msgid "Minimum Distance"
+msgstr ""
+
+# cda8821e60574c028b59127f8b5c1420
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:16
+msgid ""
+"This operation allows measuring the distance between two objects. "
+"Currently only node-to-node and node-to-origin operations are available, "
+"but this operation will be extended in the future to support other mesh "
+"objects - elements, meshes, sub-meshes and groups."
+msgstr ""
+
+# d58990a267a6467289d1c24c72d17bb1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:18
+msgid ""
+"To start **Minimum Distance** operation, select **Minimum Distance** tab "
+"in **Measurements** dialog."
+msgstr ""
+
+# f43b6ff99b8e479cb1afde93f509c84b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:23
+msgid ""
+"Choose the first and the second target by switching the corresponding "
+"radio buttons, then select the objects the distance between which is to "
+"be calculated (or input their IDs directly in case of nodes/elements) and"
+" press **Compute** button."
+msgstr ""
+
+# 0672e2abea29499f8ee4bf6f6cea1989
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:25
+msgid "The following targets are supported:"
+msgstr ""
+
+# da713fad99714e7188634cba70b2fd5d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:27
+msgid "**Node:** single mesh node;"
+msgstr ""
+
+# a9f97eb4ee2141b1bf3e286171e01028
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:28
+msgid "**Element:** single mesh element (not available in this version);"
+msgstr ""
+
+# b09e4ea655c24f0c87101b2ae1cd0322
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:29
+msgid ""
+"**Object:** mesh, sub-mesh or group object (not available in this "
+"version);"
+msgstr ""
+
+# 591c17d6e4794e4b9f26fcbee026ea1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:30
+msgid "**Origin:** origin of the global co-ordinate system."
+msgstr ""
+
+# 5003e44fc8c0476e882b706cc7dc432c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:32
+msgid ""
+"The result will be shown in the bottom area of the dialog. In addition, a"
+" simple preview will be shown in the 3D viewer."
+msgstr ""
+
+# 3ad37ba999964ff3a6b7a1e88e984770
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:40
+msgid "Bounding Box"
+msgstr ""
+
+# da5bdcea8e5a49308d61c9e12ecca419
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:42
+msgid ""
+"This operation allows calculating the bounding box of the selected "
+"object(s)."
+msgstr ""
+
+# 4f60b9cfbf7a4f19968029f505ec96e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:44
+msgid ""
+"To start **Bounding Box** operation, select **Bounding Box** tab in "
+"**Measurements** dialog."
+msgstr ""
+
+# 9a3d5692ef8e47b5a03c060ac103bb38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:49
+msgid ""
+"Choose the required type of the object by switching the corresponding "
+"radio button, select the object(s) and press *Compute* button."
+msgstr ""
+
+# 6003a5bb337b4ac4b36dfedff847fc92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:51
+msgid "The following types of input are available:"
+msgstr ""
+
+# afe2b77d7ec34faf981b09ec9c6ffcc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:53
+msgid "**Objects:** one or several mesh, sub-mesh or group objects;"
+msgstr ""
+
+# 44f599f7d67d4e39bf4b91f9b980090c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:54
+msgid "**Nodes:** a set of mesh nodes;"
+msgstr ""
+
+# 11fef5ea64e6465e97e804f548f6b58f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:55
+msgid "**Elements:** a set of mesh elements."
+msgstr ""
+
+# 038b1e48ec5747f3973ef6c599bd3881
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:57
+msgid ""
+"The result of calculation will be shown in the bottom area of the dialog."
+" In addition, a simple preview will be shown in the 3D viewer."
+msgstr ""
+
+# 7cc54603cadd42a4841f479edf2facb3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:65
+msgid "Basic Properties"
+msgstr ""
+
+# 5b9cc739e81f4463a60775f822ac6d66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:67
+msgid ""
+"This operation provides calculation of length, area or volume for the the"
+" selected object:"
+msgstr ""
+
+# 7c75bcf01add43d9848c2758084caa73
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:69
+msgid "**Length** is calculated as a sum of lengths of all 1D elements;"
+msgstr ""
+
+# bbb98a9329f14fdb8c678b837e5f3633
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:70
+msgid "**Area** is a sum of areas of all 2D elements"
+msgstr ""
+
+# b7ae3f6bc9764b319d3433773d047f94
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:71
+msgid "**Volume** is a sum of volumes of all 3D elements."
+msgstr ""
+
+# d1331a969e75457b99dbfe68629a44d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:73
+msgid ""
+"To start a **Basic Properties** calculation, select **Length**, **Area** "
+"or **Volume** item."
+msgstr ""
+
+# 4893de06f03b48a3ada2aaddaa0cda4d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:78
+msgid ""
+"In the dialog box select the required type of calculation (length, area "
+"or volume) and the object (mesh, sub-mesh or group) and press **Compute**"
+" button."
+msgstr ""
+
+# 47114ce539c94a6e909d19dc534989f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:80
+msgid "The result of calculation will be shown in the bottom area of the dialog."
+msgstr ""
+
+# 263c60be188e4fdea91b20b8baf75215
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:83
+msgid ""
+"If the mesh consists of 3D elements only, its \"length\" and \"area\" "
+"will be 0."
+msgstr ""
+
+# b9aed2df15ca451fb2a046b12b2cd1f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:84
+msgid ""
+"As calculation result is a sum of lengths, areas and volumes of all mesh "
+"elements, the duplication is not taken into account; i.e. all duplicated "
+"elements (elements built on the same set of nodes) will be included into "
+"the result."
+msgstr ""
+
+# c83732dc863246aebcd686b2d67c5586
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:85
+msgid "Similarly, intersection of elements is not taken into account."
+msgstr ""
+
+# 1f23367c476649a6ad4e6a02af31278d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/measurements.rst:87
+msgid "**See Also** a sample TUI Script of :ref:`tui_measurements_page`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_elements.po
new file mode 100644 (file)
index 0000000..b6f95a7
--- /dev/null
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4d342a1a88494139abfd4eee43cd2342
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:5
+msgid "Merging Elements"
+msgstr ""
+
+# cb13ca6428bb483ba5e92301548d7898
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:7
+msgid ""
+"This functionality allows to merge coincident elements of a mesh. Two "
+"elements are considered coincident if they are based on the same set of "
+"nodes."
+msgstr ""
+
+# 21ca56be96e745baaa45970e787e1623
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:15
+msgid ""
+"To merge elements choose in the main menu **Modification** -> "
+"**Transformation** -> **Merge elements** item. The following dialog box "
+"shall appear:"
+msgstr ""
+
+# e0df42b78b6e4d75a945f60e3cbb99bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:20
+msgid "In this dialog:"
+msgstr ""
+
+# 0c5f4a7c5f854892ae22b6deae36ec6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:22
+msgid "Name is the name of the mesh object whose elements will be merged."
+msgstr ""
+
+# 029510ba8a04488a8d964493ba6c91a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:56
+msgid ""
+"**Automatic** or **Manual** Mode allows choosing how the elements are "
+"processed. In the **Automatic** Mode all elements created on the same "
+"nodes will be merged. In **Manual** mode you can adjust groups of "
+"coincident elements detected by the program."
+msgstr ""
+
+# e7f34bed11b54bee84d4698b250acf5f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:24
+msgid "If the **Manual** Mode is selected, additional controls are available:"
+msgstr ""
+
+# 78e2e2a85f554ce2bcb53a70fe6a5695
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:30
+msgid ""
+"**Detect** button generates the list of coincident elements found in the "
+"selected object."
+msgstr ""
+
+# 372b8fa63cf8418e943c01a1dda35d5e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:31
+msgid ""
+"**Coincident elements** is a list of groups of elements for merging. "
+"After the operation all elements of each group will be united into one "
+"element. The first element of a group is kept and the others are removed."
+msgstr ""
+
+# d5ea870ea665439284d4a4307bce646f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:32
+msgid "**Remove** button deletes the selected group from the list."
+msgstr ""
+
+# 5601dbe1cc144ef7a4f045a552635c9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:33
+msgid ""
+"**Add** button adds to the list a group of elements selected in the "
+"viewer with pressed \"Shift\" key."
+msgstr ""
+
+# fe8d239588e84806bc36e51099174e8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:34
+msgid "**Select all** check-box selects all groups."
+msgstr ""
+
+# 9845355362054dfaab8861e408fae237
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:35
+msgid ""
+"**Show double elements IDs** check-box shows/hides identifiers of "
+"elements of the selected groups in the 3D viewer."
+msgstr ""
+
+# c85c581433994456a264035acbd45287
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:36
+msgid ""
+"**Edit selected group of coincident elements** list allows editing the "
+"selected group:"
+msgstr ""
+
+# d09a69d7214340dd8dabfb42d5bd6fc5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:58
+msgid "To confirm your choice click **Apply** or **Apply and Close** button."
+msgstr ""
+
+# 56640a257385465b929f11a82b5e4fa7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:61
+msgid ""
+"In this picture you see a triangle which coincides with one of the "
+"elements of the mesh. After we apply **Merge Elements** functionality, "
+"the triangle will be completely merged with the mesh."
+msgstr ""
+
+# 2f7267831b3b45ed8c2356fb8940555d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_elements.rst:66
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_merging_elements` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_nodes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_nodes.po
new file mode 100644 (file)
index 0000000..1c76c47
--- /dev/null
@@ -0,0 +1,200 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 033566c4a91542a2bf913af827ba2fdf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:5
+msgid "Merging nodes"
+msgstr ""
+
+# 60bc4d8f71ac4807b7b0e8abc8c1bbfd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:7
+msgid ""
+"This functionality allows user to detect groups of coincident nodes with "
+"specified tolerance; each group of the coincident nodes can be then "
+"converted to the single node."
+msgstr ""
+
+# abf1019f274748b79cee33454902e06b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:15
+msgid "**To merge nodes of your mesh:**"
+msgstr ""
+
+# b9c33077e980439594561dcb5a89092f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:17
+msgid ""
+"Choose **Modification** -> **Transformation** -> **Merge nodes** menu "
+"item. The following dialog box shall appear:"
+msgstr ""
+
+# b5f31aaf0fd24a05b4ba5f14f4983d25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:22
+msgid "**Name** is the name of the mesh whose nodes will be merged."
+msgstr ""
+
+# 068d08e8fbc441e0abe0f09e3bfaa863
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:23
+msgid ""
+"**Automatic** or **Manual** mode allows choosing how the nodes are "
+"processed. In **Manual** mode you can adjust groups of coincident nodes "
+"detected by the program and/or select any nodes to be merged."
+msgstr ""
+
+# d301ba18189443b286c7ca56a419a0f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:24
+msgid "**Tolerance** is a maximum distance between nodes sufficient for merging."
+msgstr ""
+
+# 94d17edfe1b145e0a02c53cfa81ad4a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:25
+msgid ""
+"Activation of **No merge of corner and medium nodes of quadratic cells** "
+"check-box prevents merging medium nodes of quadratic elements with corner"
+" nodes. This check-box is enabled provided that the selected mesh "
+"includes quadratic elements."
+msgstr ""
+
+# c0158f38e00543259da3f6c7075f1526
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:26
+msgid ""
+"Activation of **Avoid making holes** check-box prevents merging nodes "
+"that make elements invalid (but not degenerated) and hence removed. Thus,"
+" no holes in place of removed elements appear."
+msgstr ""
+
+# 1149123f535e4635ab06c10cc8f34826
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:27
+msgid ""
+"**Exclude groups from detection** group allows to ignore the nodes which "
+"belong to the specified mesh groups. This control is active provided that"
+" the mesh includes groups."
+msgstr ""
+
+# ca3d828d0b26461dade69760a26f5515
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:28
+msgid ""
+"**Nodes to keep during the merge** group allows to specify nodes to keep "
+"in the mesh. (By default a node being the first in a group of coincident "
+"nodes is kept.) It is possible to either select nodes in the Viewer or "
+"select groups of any element type whose nodes will be kept."
+msgstr ""
+
+# 7f0358cfb8084b21978e14a6f1696f32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:30
+msgid "*Selection* button activates selection of nodes to keep."
+msgstr ""
+
+# a2776b8b7f3a4cf38f931d404e447523
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:31
+msgid "**Nodes** button activates selection of nodes in the Viewer."
+msgstr ""
+
+# 93619e16b7be492189784bc929141601
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:32
+msgid ""
+"**Groups and sub-meshes** button activates selection of groups and sub-"
+"meshes."
+msgstr ""
+
+# 93e33bcfae1d46e39eba7c2eb9ceaa87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:33
+msgid "**Add** button adds selected nodes or groups to the list."
+msgstr ""
+
+# 04aa746a15af43eabc7946b31105c2f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:34
+msgid ""
+"Nodes or groups selected in the list can be removed using **Remove** "
+"button."
+msgstr ""
+
+# b2323b67d3304401b4619872da0af4ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:36
+msgid "**Automatic mode:**"
+msgstr ""
+
+# 438ef8a64eea4ab9b57982ab34522546
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:38
+msgid ""
+"In the **Automatic** Mode all nodes within the indicated tolerance will "
+"be merged. The nodes which belong to the groups specified in **Exclude "
+"groups from detection** will NOT be taken into account."
+msgstr ""
+
+# 113aa0679afe4c629bc55f1aaff30250
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:40
+msgid ""
+"The **Manual** mode gives you full control of what the operation will do."
+" In this mode additional controls are available:"
+msgstr ""
+
+# 74faf350ab90407ca867c8994ce95b37
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:42
+msgid ""
+"**Detect** button generates the list of coincident nodes for the given "
+"**Tolerance**."
+msgstr ""
+
+# 77344d7fdd4349258d0907932fab9cf4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:43
+msgid ""
+"**Coincident nodes** is a list of groups of nodes for merging. Upon "
+"**Apply** all nodes of each group will be united into one node. The first"
+" node of a group is kept and the others are removed. By default the first"
+" node has a lowest ID within the group."
+msgstr ""
+
+# c3993ce0ebf34ae2a3d8be122e80d412
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:45
+msgid "**Remove** button deletes the selected group from the list."
+msgstr ""
+
+# 4215b623a9bc4448b59f0e2c06b522a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:46
+msgid "**Add** button adds to the list a group of nodes selected in the viewer."
+msgstr ""
+
+# b43143e8ac2f4696a4aa7ef2d4dadae8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:47
+msgid "**Select all** check-box selects all groups."
+msgstr ""
+
+# 9944a0f029844d2e97324b9e128e94b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:48
+msgid ""
+"**Show double nodes IDs** check-box shows/hides identifiers of nodes of "
+"selected groups in the 3D viewer."
+msgstr ""
+
+# c2b3b7f1a2254beaa1125d16b862c301
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:54
+msgid ""
+"**Edit selected group of coincident nodes** list allows editing the "
+"selected group:"
+msgstr ""
+
+# 6d897aa5954b4aa49b4b5a64b5ac813f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:74
+msgid "To confirm your choice click **Apply** or **Apply and Close** button."
+msgstr ""
+
+# 00c92d262c8c442694dc4c48cdb9153b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/merging_nodes.rst:89
+msgid "**See Also** a sample TUI Script of a :ref:`tui_merging_nodes` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_infos.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_infos.po
new file mode 100644 (file)
index 0000000..5db2f81
--- /dev/null
@@ -0,0 +1,436 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7d81cefb54f44eccabd8805a64feaa52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:5
+msgid "Mesh Information"
+msgstr ""
+
+# 89889e72c9494bc9bab03d542b54668d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:7
+msgid ""
+"The user can obtain information about the selected mesh object (mesh, "
+"sub-mesh or group) using **Mesh Information** dialog box."
+msgstr ""
+
+# ff1da796963248c6b9138f85926677c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:9
+msgid ""
+"To view the **Mesh Information**, select your mesh, sub-mesh or group in "
+"the **Object Browser** and invoke **Mesh Information** item from the "
+"**Mesh** menu or from the context menu, or click **\"Mesh Information\"**"
+" button in the toolbar."
+msgstr ""
+
+# d3ce5678ec72425ab844167351ba1a35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:17
+msgid "The **Mesh Information** dialog box provides three tab pages:"
+msgstr ""
+
+# 4c2a7d70e1174e1bbcb9c90c391dd3a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:19
+msgid ""
+":ref:`advanced_mesh_infos_anchor` - to show base and quantitative "
+"information about the selected mesh object."
+msgstr ""
+
+# a8ff1a77f1b5478581b8215a4dc6b2ba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:20
+msgid ""
+":ref:`mesh_element_info_anchor` - to show detailed information about the "
+"selected mesh nodes or elements."
+msgstr ""
+
+# cd9b845363d44e9fae8876cd3d670173
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:21
+msgid ""
+":ref:`mesh_addition_info_anchor` - to show additional information "
+"available for the selected mesh, sub-mesh or group object."
+msgstr ""
+
+# 7f7d5011ce48497f88dfc0e839c2e965
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:22
+msgid ""
+":ref:`mesh_quality_info_anchor` - to show overall quality information "
+"about the selected mesh, sub-mesh or group object."
+msgstr ""
+
+# 1e4e551877a5439d8f08ed509126a198
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:27
+msgid "Dump Mesh Infos"
+msgstr ""
+
+# 5fb38a9c54b24ebca3cc605d9aff7232
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:29
+msgid ""
+"The button **Dump** allows printing the information displayed in the "
+"dialog box to a .txt file. The dialog for choosing a file also allows to "
+"select which tab pages to dump via four check-boxes. The default state of"
+" the check-boxes can be changed via :ref:`mesh_information_pref` "
+"preferences."
+msgstr ""
+
+# c1c44a7afe60443b8efacb99b20d59f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:34
+msgid "Base Information"
+msgstr ""
+
+# eff63d29c1cf4713a8ffd71cc3fabb41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:36
+msgid ""
+"The **Base Info** tab page of the dialog box provides general information"
+" on the selected object - mesh, sub-mesh or mesh group: name, type, total"
+" number of nodes and elements separately for each type: 0D elements, "
+"edges, faces, volumes, balls."
+msgstr ""
+
+# b1c4af2d0db64aa88fa72e5684a82c56
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:47
+msgid "Mesh Element Information"
+msgstr ""
+
+# f0b643284c0f4b45891e9c5fa9aa004f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:49
+msgid ""
+"The **Element Info** tab page of the dialog box gives detailed "
+"information about the selected mesh node(s) or element(s), namely:"
+msgstr ""
+
+# 5b960ae15bcd42db9ff97b7a344bbf1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:63
+msgid "For a node:"
+msgstr ""
+
+# 94bed98445e74cfca9dd6ff743401364
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:52
+msgid "Node ID;"
+msgstr ""
+
+# 5415384b459d4fa7afcee1758b0922e4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:53
+msgid "Coordinates (X, Y, Z);"
+msgstr ""
+
+# 1b08c9f6f3944697bc525dd4215a3f2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:54
+msgid ""
+"Connectivity information (connected elements); double click in this line "
+"reveals information about these elements;"
+msgstr ""
+
+# 0f627abab9b744728eb4ad5bb8c58b9d
+# 9d9a93666d544376abb1cad2805a36ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:55
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:71
+msgid "Position on a shape (for meshes built on a geometry);"
+msgstr ""
+
+# 8597b257b7854a6f9f4f0ee8406f1a57
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:56
+msgid "Groups information (names of groups the node belongs to)."
+msgstr ""
+
+# dd2bb96aa28d4ee9b0ecdc9324126484
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:78
+msgid "For an element:"
+msgstr ""
+
+# 9d20e03209e242aba37bd93975152f26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:66
+msgid "Element ID;"
+msgstr ""
+
+# e43c243e3eb3444c9baf282b618c7b83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:67
+msgid "Type (triangle, quadrangle, etc.);"
+msgstr ""
+
+# d4914e3826f248578a726208013df6b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:68
+msgid "Gravity center (X, Y, Z coordinates);"
+msgstr ""
+
+# 6949234f920a486cb906d114eaf7cbe5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:69
+msgid ""
+"Connectivity information (connected nodes); double click in a line of a "
+"node reveals the information about this node;"
+msgstr ""
+
+# d01ae8daf8f6432392513fb4d5500c11
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:70
+msgid "Quality controls (area, aspect ratio, volume, etc.);"
+msgstr ""
+
+# 9cca653ec3a6480a8cce35f662566c21
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:72
+msgid "Groups information (names of groups the element belongs to)."
+msgstr ""
+
+# dd33bf5a33a5462fa39bf74dc8d3d546
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:80
+msgid ""
+"The user can either input the ID of a node or element he wants to analyze"
+" directly in the dialog box or select the node(s) or element(s) in the 3D"
+" viewer. If **Show IDs** is activated, IDs of selected nodes or elements "
+"are displayed in the 3D viewer."
+msgstr ""
+
+# cb077e2a6ceb4ebe8802bc582d157afa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:84
+msgid ""
+"The information about the groups, to which the node or element belongs, "
+"can be shown in a short or in a detailed form. By default, for "
+"performance rasons, this information is shown in a short form (group "
+"names only). The detailed information on groups can be switched on via "
+":ref:`group_detail_info_pref` option of :ref:`mesh_preferences_page`."
+msgstr ""
+
+# 923342b3ad7e41fab497b255dc88ae9a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:89
+msgid "Additional Information"
+msgstr ""
+
+# 34666d2627364d1b8ff0349498ad6e57
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:91
+msgid ""
+"The **Additional Info** tab page of the dialog box provides an additional"
+" information on the selected object: mesh, sub-mesh or group."
+msgstr ""
+
+# 49f856bfc49c47d1b5de64631e7fe99e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:93
+msgid "For a mesh object, the following information is shown:"
+msgstr ""
+
+# 72d5242b71b249c18ccb7c9d408c8a81
+# 1e3737d61dc9484ab536f8ab9965688f
+# 253b54618e784dcf88395abdb8604b2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:111
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:129
+msgid "Name"
+msgstr ""
+
+# bcd90f5cf56f4a579276960c64730cbe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:96
+msgid "Type: based on geomerty, imported, standalone"
+msgstr ""
+
+# 6d9220fc431d4f4588e1afe817726d26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:97
+msgid "Shape (if mesh is based on geometry)"
+msgstr ""
+
+# 634b1cb624254513af618f9651367165
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:98
+msgid "File (if mesh is imported from the file)"
+msgstr ""
+
+# 8fcef07cbd8e4c8e959110e25468684f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:99
+msgid "Groups"
+msgstr ""
+
+# 9dcc32d82d3f44ad93eea1172ee7fb40
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:100
+msgid "Sub-meshes"
+msgstr ""
+
+# 298123d371c84c8a9d3ec9b471d7bff7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:109
+msgid "For a sub-mesh object, the following information is shown:"
+msgstr ""
+
+# 1a263fbe0d5745e4bc68112252fbdbdb
+# 06eb31f75ff14b43a3b49ce8a677bbee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:112
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:130
+msgid "Parent mesh"
+msgstr ""
+
+# 73bd15df7e464f2ead8317d2cf2f8a56
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:113
+msgid "Shape"
+msgstr ""
+
+# ee1c32811a5049a3962557099124d789
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:125
+msgid "Additional info for Group"
+msgstr ""
+
+# 7753f2da8b704cf9b333ba51a9b40072
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:127
+msgid "For a group object, the following information is shown:"
+msgstr ""
+
+# d5e8c5de0daa4e9fb8c20dec46f70746
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:131
+msgid "Type: standalone, group on geometry, group on filter"
+msgstr ""
+
+# 96565ccb377740d895ab72f79ac15d87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:132
+msgid "Entity type: node, edge, face, volume"
+msgstr ""
+
+# 9419ea2f0d5a4b32bb4717b4b10a6a9c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:133
+msgid "Size"
+msgstr ""
+
+# 4080fb1e1e0b4825816dbbe625f6c169
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:134
+msgid "Color"
+msgstr ""
+
+# 12b372eddf8149c0898bf18d651d7b07
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:135
+msgid "Number of underlying nodes (for non-nodal groups)"
+msgstr ""
+
+# e3558e0ab22d4028884b8c596684ecae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:145
+msgid ""
+"For the performance reasons, the number of underlying nodes is computed "
+"only by demand. For this, the user should press the \"Compute\" button "
+"(see picture). Also, the number of underlying nodes is automatically "
+"calculated if the size of the group does not exceed the "
+":ref:`nb_nodes_limit_pref` preference value (zero value means no limit)."
+msgstr ""
+
+# 81192f0c71c2410782e931f954c62c3f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:150
+msgid "Quality Information"
+msgstr ""
+
+# a282f45cc58848c083e6fbd45260f34a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:152
+msgid ""
+"The **Quality Info** tab provides overall information about mesh quality "
+"controls  on the selected object - mesh, sub-mesh or mesh group:"
+msgstr ""
+
+# 29935d09cde24625aba1b0b9c81982b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:154
+msgid "Name;"
+msgstr ""
+
+# c72c541d0e6f4bf5a502ae2d8b2acd53
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:157
+msgid "Nodes information:"
+msgstr ""
+
+# a8ca55f1558d4ed3be30a014467f1b1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:156
+msgid "Number of free nodes;"
+msgstr ""
+
+# 61b9d1bf812448fd88d3dc10eb10bed3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:157
+msgid "Maximal number of elements connected to a node;"
+msgstr ""
+
+# 3442981518a4477baa330bbd7114d368
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:158
+msgid "Number of double nodes;"
+msgstr ""
+
+# 860bb75731654f308b0cff31d797a392
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:159
+msgid "Edges information:"
+msgstr ""
+
+# 18711f162ef241b19597cc663953188f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:160
+msgid "Number of double edges;"
+msgstr ""
+
+# d93fad97bf7149879d0f97abc3a4c762
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:163
+msgid "Faces information:"
+msgstr ""
+
+# 675e5690562d4bed8785e768ce37af80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:162
+msgid "Number of double faces;"
+msgstr ""
+
+# 848b64f01b644b1b80df295406bb5324
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:163
+msgid "Number of over-constrained faces;"
+msgstr ""
+
+# 09cb4878ffdd4c928bb97ddee5520f53
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:164
+msgid "Aspect Ratio histogram;"
+msgstr ""
+
+# a6de74e7efeb4f7c89136c5f342d0014
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:168
+msgid "Volume information:"
+msgstr ""
+
+# 41046f4beb214cce946a7f7cf6b3ee69
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:166
+msgid "Number of double volumes;"
+msgstr ""
+
+# 9d0915c8f6a74c3fb94863f1864492e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:167
+msgid "Number of over-constrained volumes;"
+msgstr ""
+
+# f26e5055bb3d4fc7acc4a31088a47548
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:168
+msgid "Aspect Ratio 3D histogram."
+msgstr ""
+
+# 54b7bdc3b32740b0b0bd4383e05f6401
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:177
+msgid ""
+"It is possible to change **Double nodes tolerance**, which will be used "
+"upon consequent pressing *Compute* button. The default value of the "
+"tolerance can be set via the :ref:`dbl_nodes_tol_pref` preferences."
+msgstr ""
+
+# e726dde442ef4e099274cf3a8c4901e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:180
+msgid ""
+"For performance reasons, all quality control values for big meshes are "
+"computed only by demand. For this, press the *Compute* button. Also, "
+"values are automatically computed if the number of nodes / elements does "
+"not exceed the :ref:`auto_control_limit_pref` set via the "
+":ref:`mesh_information_pref` preferences (zero value means that there is "
+"no limit)."
+msgstr ""
+
+# 9dfb329bf1f740798ff18de7dab8728e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:183
+msgid ""
+"The plot functionality is available only if the GUI module is built with "
+"Plot 2D Viewer (option SALOME_USE_PLOT2DVIEWER is ON when building GUI "
+"module)."
+msgstr ""
+
+# 84fc0f1732a04cec94d12b8c0e36d41e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_infos.rst:185
+msgid "See the :ref:`tui_viewing_mesh_infos`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_preferences.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_preferences.po
new file mode 100644 (file)
index 0000000..4cda6ac
--- /dev/null
@@ -0,0 +1,792 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 86666e2cbeb4408eb608046a56bae1e4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:5
+msgid "Mesh preferences"
+msgstr ""
+
+# 1080a16d80af4f6698fcb587a5fb5edc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:7
+msgid ""
+"In the Mesh module you can set mesh preferences, which can be used right "
+"now or in later sessions with this module according to the preferences."
+msgstr ""
+
+# 0beca22f58e243ceb993d751a1a8944f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:10
+msgid "General Preferences"
+msgstr ""
+
+# b9d4edb0921f4a61a58226e0d1a62e62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:18
+msgid "Automatic Update"
+msgstr ""
+
+# 2995e42634114a558ecf5246edc4cc3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:20
+msgid "**Automatic Update**"
+msgstr ""
+
+# fba4cac0c7c947fb8146017a961bce44
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:22
+msgid ""
+"**Automatic Update** - if activated, the mesh in your viewer will be "
+"automatically updated after it's computation, depending on values of "
+"additional preferences specified below."
+msgstr ""
+
+# 708bc74a30ca48e4ada06ca8cc8ba142
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:23
+msgid ""
+"**Size limit (elements)** - allows specifying the maximum number of "
+"elements in the resulting mesh for which the automatic updating of the "
+"presentation is performed. This option affects only :ref:`compute_anchor`"
+" operation. Zero value means \"no limit\". Default value is 500 000 mesh "
+"elements."
+msgstr ""
+
+# 1480b086d8e2407d906f5478dd1bc3c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:24
+msgid ""
+"**Incremental limit check** - if activated, the mesh size limit check is "
+"not applied to the total number of elements in the resulting mesh, it is "
+"applied iteratively to each entity type in the following order: 0D "
+"elements, edges, faces, volumes, balls. At each step the number of "
+"entities of a certain type is added to the total number of elements "
+"computed at the previous step - if the resulting number of elements does "
+"not exceed the size limit, the entities of this type are shown, otherwise"
+" the user is warned that some entities are not shown."
+msgstr ""
+
+# aff351500d1544bd97d70f959eaa383c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:29
+msgid "Display mode"
+msgstr ""
+
+# cb809edafa364c38b8433aee1e6bc506
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:32
+msgid "**Display mode**"
+msgstr ""
+
+# 8782e3f4895442dbb2ab8cb838c2ccca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:32
+msgid ""
+"**Default display mode** - allows to set Wireframe, Shading, Nodes or "
+"Shrink :ref:`display_mode_page` as default."
+msgstr ""
+
+# 9c42d83b94c442a09353a74341f831b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:37
+msgid "Quadratic 2D preferences"
+msgstr ""
+
+# 318d91232eab4675954fbf1c3c974649
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:41
+msgid "**Representation of the 2D quadratic elements**"
+msgstr ""
+
+# 4c5aa0543e0342e38e350eb599c73ffb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:40
+msgid ""
+"**Default mode of the 2D quadratic elements** - allows to select either "
+"*Lines* or *Arcs* as a default :ref:`quadratic_2d_mode` of 1D and 2D "
+":ref:`adding_quadratic_elements_page`."
+msgstr ""
+
+# 56b3c10d5a8243108db4b2c7ab50746b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:41
+msgid ""
+"**Maximum Angle** - maximum deviation angle used by the application to "
+"build arcs."
+msgstr ""
+
+# 82228d4240b24ab68f24d51af55a793b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:45
+msgid "**Quality Controls**"
+msgstr ""
+
+# db8abc18e3534199a5d1b7637945461b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:44
+msgid ""
+"**Display entity** - if activated, only currently :ref:`quality_page` "
+"entities are displayed in the viewer and other entities are temporarily "
+"hidden. For example if you activate :ref:`length_page` quality control, "
+"which controls the length of mesh segments, then only mesh segments are "
+"displayed and faces and volumes are hidden."
+msgstr ""
+
+# c7b8e4c2e550496c8dac1f4caaf238a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:45
+msgid ""
+"**Use precision** - if activated, all quality controls will be computed "
+"at precision defined by **Number of digits after point** - as integers by"
+" default."
+msgstr ""
+
+# 825d67a587814e6ea3c73c46eea7ed63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:50
+msgid "Double nodes tolerance"
+msgstr ""
+
+# c70001dcf1f642d38c6af2a7d997f4c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:52
+msgid ""
+"**Double nodes tolerance** - defines the maximal distance between two "
+"mesh nodes, at which they are considered coincident by "
+":ref:`double_nodes_control_page` quality control. This value is also used"
+" in :ref:`mesh_quality_info_anchor` tab page of :ref:`mesh_infos_page` "
+"dialog."
+msgstr ""
+
+# 4c4a17a5d4464095bcfe63781192d2f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:54
+msgid "**Mesh export**"
+msgstr ""
+
+# 5fad6433ed53451b800b0c057c951690
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:59
+msgid "Automatically create groups for MED export"
+msgstr ""
+
+# c00091fc9baa4238a97022d3bcc6c18d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:61
+msgid ""
+"**Automatically create groups for MED export** - defines a default state "
+"of a corresponding check-box in :ref:`export_auto_groups` dialog."
+msgstr ""
+
+# ae723b72a0064cd28894c59ab665457f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:66
+msgid "Show warning when exporting group"
+msgstr ""
+
+# 42789c858cf34959972e15e8ad73f74f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:68
+msgid ""
+"**Show warning when exporting group** - if activated, a warning is "
+"displayed when exporting a group."
+msgstr ""
+
+# 0e2314ebbb334c68b12b9424c20cad0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:73
+msgid "Mesh computation"
+msgstr ""
+
+# 7660c985d55f4181a7dd4279285eca77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:79
+msgid "**Mesh computation**"
+msgstr ""
+
+# 9db0838c8be64ab2adc3e575f76db3e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:79
+msgid ""
+"**Show a computation result notification** - allows to select the "
+"notification mode about a :ref:`compute_anchor` result. There are 3 "
+"possible modes:"
+msgstr ""
+
+# cb70e77f347542c99f23f77235d63a7a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:77
+msgid "**Never** - not to show the :ref:`meshing_result_anchor` at all;"
+msgstr ""
+
+# 94b3a98b34a443a89dccea360d3fa397
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:78
+msgid ""
+"**Errors only** - the result dialog will be shown if there were some "
+"errors during a mesh computation;"
+msgstr ""
+
+# 867b39f49b4144a989ec2d53243880b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:79
+msgid ""
+"**Always** - show the result dialog after each mesh computation. This is "
+"a default mode."
+msgstr ""
+
+# 40ae40b44bbc4809b2941b3a54c6de85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:84
+msgid "Mesh information"
+msgstr ""
+
+# 8d70173df44042f48eaf242561e71f77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:86
+msgid "**Mesh information**"
+msgstr ""
+
+# ddcdcb25a8b24745ad2f53287c0e7a2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:90
+msgid ""
+"**Mesh element information** - allows changing the way "
+":ref:`mesh_element_info_anchor` is shown:"
+msgstr ""
+
+# a21c91e8ff0749a69a614b8a40094dfc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:89
+msgid "**Simple** - as a plain text"
+msgstr ""
+
+# 013890ff591d4fd5865a19533973a33e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:90
+msgid "**Tree** - in a tree-like form"
+msgstr ""
+
+# 7c139ca861ca4049842f3c636bfb3431
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:95
+msgid "Automatic nodes compute limit"
+msgstr ""
+
+# 73e888098e1f45dc90e2341559fc519e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:97
+msgid ""
+"**Automatic nodes compute limit** - allows defining the size limit for "
+"the :ref:`mesh_addition_info_group_anchor` for which the number of "
+"underlying nodes is calculated automatically. If the group size exceeds "
+"the value set in the preferences, the user will have to press \\em "
+"Compute button explicitly. Zero value means \"no limit\". By default the "
+"value is set to 100 000 mesh elements."
+msgstr ""
+
+# 55c0542ffcca4b22845f0dd00e60c78e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:102
+msgid "Automatic controls compute limit"
+msgstr ""
+
+# 02bd6a9486f640c1a5fcf04248e8c6a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:104
+msgid ""
+"**Automatic controls compute limit** - allows defining a maximal number "
+"of mesh elements for which the quality controls in the "
+":ref:`mesh_quality_info_anchor` tab page are calculated automatically. If"
+" the number of mesh elements exceeds the value set in the preferences, it"
+" is necessary to press **Compute** button explicitly to calculate a "
+"quality measure. Zero value means \"no limit\". By default the value is "
+"set to 3 000 mesh elements."
+msgstr ""
+
+# 4ad8373601e4438cb7c1b466a6cf0bce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:109
+msgid "Detailed info for groups"
+msgstr ""
+
+# 929ce657c75a430d9d2062a1fb848115
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:111
+msgid ""
+"**Show details on groups in element information tab** - when this option "
+"is switched off (default), only the names of groups, to which the node or"
+" element belongs, are shown in the :ref:`mesh_element_info_anchor` tab of"
+" \"Mesh Information\" dialog box. If this option is switched on, the "
+"detailed information on groups is shown."
+msgstr ""
+
+# 5534e2107e3740178ba5377cc16f9c58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:112
+msgid ""
+"**Dump base information** - allows dumping base mesh information to the "
+"file, see :ref:`dump_mesh_infos`."
+msgstr ""
+
+# fa4b7f6a853540eb8a9e7becaec5e016
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:113
+msgid ""
+"**Dump element information** - allows dumping element information to the "
+"file, see :ref:`dump_mesh_infos`."
+msgstr ""
+
+# 4e9ca690ccb54fd19ec634e2313d24f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:114
+msgid ""
+"**Dump additional information** - allows dumping additional mesh "
+"information to the file, see :ref:`dump_mesh_infos`."
+msgstr ""
+
+# 87a71ab143a44b168da433268838ea1d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:115
+msgid ""
+"**Dump controls information** - allows dumping quality mesh information "
+"to the file, see :ref:`dump_mesh_infos`."
+msgstr ""
+
+# ade975dfa7e242f99d48dcc46b238234
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:117
+msgid "**Automatic Parameters**"
+msgstr ""
+
+# b5aa47a535b84964835dc569d29580a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:122
+msgid "Ratio Bounding Box Diagonal"
+msgstr ""
+
+# 7b436c68a4264dc3af6e68c7a2b3ace8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:124
+msgid ""
+"**Ratio Bounding Box Diagonal / Max Size** - defines the ratio between "
+"the bounding box of the meshed object and the Max Size of segments. It is"
+" used as a default value of :ref:`a1d_meshing_hypo_page` defining length "
+"of segments, especially by :ref:`max_length_anchor` hypothesis."
+msgstr ""
+
+# 3e2cd3f669414850ba68c3b68b8c7060
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:129
+msgid "Default Number of Segments"
+msgstr ""
+
+# d92bd97cf1394bef94493ef5a53459c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:131
+msgid ""
+"**Default Number of Segments** - defines the default number of segments "
+"in :ref:`number_of_segments_anchor` hypothesis."
+msgstr ""
+
+# 40606083e2c74dc2a0057ea0531e70b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:133
+msgid "**Mesh loading**"
+msgstr ""
+
+# 45553581d5f94aba9984043324a7a671
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:135
+msgid ""
+"**No mesh loading from study file at hypothesis modification** - if "
+"activated, the mesh data will not be loaded from the study file when a "
+"hypothesis is modified. This allows saving time by omitting loading data "
+"of a large mesh that is planned to be recomputed with other parameters."
+msgstr ""
+
+# aebbff71e88c47f6bf7544d54cb08225
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:137
+msgid ""
+"**Input fields precision** - allows to adjust input precision of "
+"different parameters. The semantics of the precision values is described "
+"in detail in **Using input widgets** chapter of GUI documentation "
+"(Introduction to Salome Platform / Introduction to GUI / Using input "
+"widgets). In brief: **positive** precision value is the maximum allowed "
+"number of digits after the decimal point in the fixed-point format; "
+"**negative** precision value is the maximum allowed number of significant"
+" digits in mantissa in either the fixed-point or scientific format."
+msgstr ""
+
+# 14aab516533d41d4a050872afd2d7129
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:139
+msgid ""
+"**Length precision** - allows to adjust input precision of coordinates "
+"and dimensions."
+msgstr ""
+
+# d5405bdf6e5d4627b8d964d6d5db2eba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:140
+msgid "**Angular precision** - allows to adjust input precision of angles."
+msgstr ""
+
+# da60439d8a894f129cd270e031753a32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:141
+msgid ""
+"**Length tolerance precision** - allows to adjust input precision of "
+"tolerance of coordinates and dimensions."
+msgstr ""
+
+# aac59c84886147de8d919059baef91f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:142
+msgid ""
+"**Parametric precision** - allows to adjust input precision of parametric"
+" values."
+msgstr ""
+
+# 79555e19934a49abb6b1930101562e5a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:143
+msgid ""
+"**Area precision** - allows to adjust input precision of mesh element "
+"area."
+msgstr ""
+
+# dad33cd69f6e4ef88426e1acc4832395
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:144
+msgid ""
+"**Volume precision** - allows to adjust input precision of mesh element "
+"volume."
+msgstr ""
+
+# 5c78cd7db6cb401baffbf93527d8064d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:147
+msgid "**Preview**"
+msgstr ""
+
+# 8997363a1c8a4603baf5a97a12552ae7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:147
+msgid ""
+"**Sub-shapes preview chunk size** - allows to limit the number of "
+"previewed sub-shapes shown in the hypotheses creation dialog boxes, for "
+"example \"Reverse Edges\" parameter of :ref:`number_of_segments_anchor` "
+"hypothesis."
+msgstr ""
+
+# 00aa69a7e22d438da665287e8b618f32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:152
+msgid "**Python Dump**"
+msgstr ""
+
+# 584a9e84ca8647beadbce1de3ebd1061
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:150
+msgid ""
+"**Historical python dump** - allows switching between *Historical* and "
+"*Snapshot* dump mode:"
+msgstr ""
+
+# e1f2a1c1f1fb4b66b71e7537f91396f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:151
+msgid ""
+"In *Historical* mode, Python Dump script includes all commands performed "
+"by SMESH engine."
+msgstr ""
+
+# a95234780277478ea6f39395723b2274
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:152
+msgid ""
+"In *Snapshot* mode, the commands relating to objects removed from the "
+"Study as well as the commands not influencing the current state of meshes"
+" are excluded from the script."
+msgstr ""
+
+# e6208c776c314ae4bf5c7eac60b8fa14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:157
+msgid "Mesh Preferences"
+msgstr ""
+
+# e29f953dd0ba4dc58ada2a9a6cc9dba1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:159
+msgid ""
+"**Mesh** tab page contains parameters defining the way the mesh is "
+"displayed in the 3D Viewer."
+msgstr ""
+
+# 6ecf85af43074d048a114c9ba06dc688
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:167
+msgid ""
+"**Nodes** - allows to define default parameters for nodes, which will be "
+"applied for a newly created mesh only. Existing meshes can be customized "
+"using :ref:`colors_size_page` available from the context menu of a mesh."
+msgstr ""
+
+# 8ccf649b8dc047868f28f3c3f0a9fd8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:165
+msgid ""
+"**Color** -  allows to select the color of nodes. Click on the downward "
+"arrow near the colored line to access to the **Select Color** dialog box."
+msgstr ""
+
+# 62bc2f26045b48bc8a871b94c4594b91
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:166
+msgid "**Type of marker** - allows to define the shape of nodes."
+msgstr ""
+
+# b9edba04c49941fa9f94800bbbf57555
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:167
+msgid "**Scale of marker** - allows to define the size of nodes."
+msgstr ""
+
+# e3763e6d2df14a87a0ca9ed3390988d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:184
+msgid ""
+"**Elements** - allows to define default parameters for different "
+"elements, which will be applied to a newly created mesh only. Existing "
+"meshes can be customized using :ref:`colors_size_page` available from the"
+" context menu of a mesh."
+msgstr ""
+
+# d4ced05a884144578beee7b41b229ac3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:170
+msgid ""
+"**Surface color**  - allows to select the surface color of 2D elements "
+"(seen in Shading mode). Click on the downward arrow near the colored line"
+" to access to the **Select Color** dialog box."
+msgstr ""
+
+# 4eb13db66ad340ef81e58ca2006dc05c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:171
+msgid ""
+"**Back surface color** - allows to select the back surface color of 2D "
+"elements. This is useful to differ 2d elements with reversed orientation."
+" Use the slider to select the color generated basing on the **Surface "
+"color** by changing its brightness and saturation."
+msgstr ""
+
+# 4ecb31a377fe40e884507dbb19654b59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:172
+msgid ""
+"**Volume color** - allows to select the surface color of 3D elements "
+"(seen in Shading mode)."
+msgstr ""
+
+# 59054eccfc91434aaab74f4a4b673676
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:173
+msgid ""
+"**Reversed volume color** - allows to select the surface color of "
+"reversed 3D elements. Use the slider to select the color generated basing"
+" on the **Volume color** by changing its brightness and saturation."
+msgstr ""
+
+# 0eadab3ea42642a9ac2817e7ec68c13d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:174
+msgid "**0D element color** - allows to choose color of 0D mesh elements."
+msgstr ""
+
+# 12d2ced353384e17af983bbec65ec603
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:175
+msgid "**Ball color** - allows to choose color of discrete mesh elements (balls)."
+msgstr ""
+
+# 94058859794c4f1296afd0b57c603c7a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:176
+msgid "**Outline color** - allows to select the color of element borders."
+msgstr ""
+
+# 8d9ea519244d4eee81d556ae26af1a92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:177
+msgid ""
+"**Wireframe color** - allows to select the color of borders of elements "
+"in the wireframe mode."
+msgstr ""
+
+# f0f6be573148448fb96233cfdbd68662
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:178
+msgid ""
+"**Preview color** - allows to select the preview color of the elements, "
+"which is used while :ref:`adding_nodes_and_elements_page`."
+msgstr ""
+
+# 128aa6ccf3974c04b0b1134b910f8714
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:179
+msgid "**Size of 0D elements** - specifies default size of 0D elements."
+msgstr ""
+
+# 9fae69316c3d4c2cb0866c29a81431c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:180
+msgid ""
+"**Size of ball elements** - specifies default size of discrete elements "
+"(balls)."
+msgstr ""
+
+# bd02ccc8220b4310aef9dea39e221c3d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:181
+msgid ""
+"**Scale factor of ball elements** - specifies default scale factor of "
+"discrete elements (balls) allowing to adjust their size in the Viewer."
+msgstr ""
+
+# 1fe534c8fe2f48478a08a1e23f47d422
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:182
+msgid "**Line width** - allows to define the width of 1D elements (segments)."
+msgstr ""
+
+# d7ed3f0888834f70ac90d0c9a1746c7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:183
+msgid ""
+"**Outline width** - allows to define the width of borders of 2D and 3D "
+"elements (shown in the Shading mode)."
+msgstr ""
+
+# f4445e8d16274349b65ffe42160b0b3d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:184
+msgid ""
+"**Shrink coef.** - allows to define relative size of a shrunk element "
+"compared a non-shrunk element in percents in the shrink mode."
+msgstr ""
+
+# ba8af4c61186416783c75abdddc55376
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:188
+msgid "**Groups**"
+msgstr ""
+
+# 2c3d1d895bce4fe4b0b9c64eef9b92e0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:187
+msgid ""
+"**Names color** - specifies color of group names to be used in the 3D "
+"viewer."
+msgstr ""
+
+# 3e367d8eb83041889295781fb9fb8b6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:188
+msgid ""
+"**Default color** - specifies the default group color, which is used to "
+"create a new mesh group (see :ref:`creating_groups_page`)."
+msgstr ""
+
+# 9f28d514b76740b49b11f67f2abdd6e5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:192
+msgid "**Numbering** allows to define properties of numbering functionality:"
+msgstr ""
+
+# 13d5c7e6d97c4d6ca9ba3c3b47933c08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:191
+msgid ""
+"**Nodes** - specifies text properties of nodes numbering (font family, "
+"size, attributes, color)."
+msgstr ""
+
+# fbb6f98ae4674d69a98679b3c0bf077f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:192
+msgid "**Elements** - same for elements."
+msgstr ""
+
+# 3b2821cfde164510b8f21340ab99d08d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:197
+msgid ""
+"**Orientation of Faces** - allows to define default properties of "
+"orientation vectors. These preferences will be applied to the newly "
+"created meshes only; properties of existing meshes can be customized "
+"using :ref:`colors_size_page` available from the context menu of a mesh."
+msgstr ""
+
+# b2873f76b99346cfbf7a9efa3725af30
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:195
+msgid "**Color** - allows to define the color of orientation vectors;"
+msgstr ""
+
+# b61f06ec5d92434fa51281eb9079901e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:196
+msgid "**Scale** - allows to define the size of orientation vectors;"
+msgstr ""
+
+# 0fe597ecf6414d71a73f4a2e081a534d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:197
+msgid "**3D Vector** - allows to choose between 2D planar and 3D vectors."
+msgstr ""
+
+# b8dd01b3567d42b4853155edd5b19938
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:200
+msgid "Selection Preferences"
+msgstr ""
+
+# 377d4d6db9bb4ecd909888cf3523a985
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:207
+msgid ""
+"**Selection** - performed with mouse-indexing (preselection) and left-"
+"clicking on an object, whose appearance changes as defined in the "
+"**Preferences**."
+msgstr ""
+
+# 37571072b8d84447ae82974380147c6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:206
+msgid ""
+"**Object color** - allows to select the color of mesh (edges and borders "
+"of meshes) of the selected entity. Click on the colored line to access to"
+" the **Select Color** dialog box."
+msgstr ""
+
+# 014792f5a1bf478abe88ffa8a1d96fc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:207
+msgid ""
+"**Element color** - allows to select the color of surface of selected "
+"elements (seen in Shading mode). Click on the colored line to access to "
+"the **Select Color** dialog box."
+msgstr ""
+
+# 875ecdc81187472c97afabdb3c0e1d99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:210
+msgid ""
+"**Preselection** - performed with mouse-indexing on an object, whose "
+"appearance changes as defined in the **Preferences**."
+msgstr ""
+
+# 27f032e718204b42b067f9fc493ff400
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:210
+msgid ""
+"**Highlight color** - allows to select the color of mesh (edges and "
+"borders of meshes) of the entity. Click on the colored line to access to "
+"the **Select Color** dialog box."
+msgstr ""
+
+# e89697cf348d4119a626cb206ae809bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:212
+msgid ""
+"**Precision** - in this menu you can set the value of precision used for "
+"**Nodes**, **Elements** and **Objects**."
+msgstr ""
+
+# b4e87347f0b5498a94add401c03f54d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:215
+msgid "Scalar Bar Preferences"
+msgstr ""
+
+# 7fe95cdce3254c25b6066673b910d3c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:221
+msgid ""
+"The following settings are default and will be applied to a newly created"
+" mesh only. Existing meshes can be customized using local "
+":ref:`scalar_bar_dlg` available from the context menu of a mesh."
+msgstr ""
+
+# 08f246d4c49f4f67b6c1a92ed2a56b13
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:223
+msgid ""
+"**Font** - in this menu you can set type, face and color of the font of "
+"**Title** and **Labels**."
+msgstr ""
+
+# b7bf0da17d79446c98c3a5cae06670fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:225
+msgid ""
+"**Colors & Labels** - in this menu you can set the **number of colors** "
+"and the **number of labels** in use."
+msgstr ""
+
+# c425048b5ce148fd95e42f0b11ea5602
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:227
+msgid ""
+"**Orientation** - here you can choose between vertical and horizontal "
+"orientation of the **Scalar Bar**."
+msgstr ""
+
+# 54a8c11082074ffc84fd6480d3189cf3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:231
+msgid ""
+"**Origin & Size Vertical & Horizontal** - allows to define placement "
+"(**X** and **Y**) and lookout (**Width** and **Height**) of Scalar Bars."
+msgstr ""
+
+# 64390fb45cd844b2a17a9a19ee25c59b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:230
+msgid "**X** - abscissa of the point of origin (from the left side)."
+msgstr ""
+
+# ccd005065b8c4940b3945cac2d4645d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:231
+msgid "**Y** - ordinate of the origin of the bar (from the bottom)."
+msgstr ""
+
+# 7bbe2195abfa475692d47d40581f2903
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:236
+msgid ""
+"**Distribution** in this menu you can Show/Hide distribution histogram of"
+" the values of the **Scalar Bar** and specify the **Coloring Type** of "
+"the histogram:"
+msgstr ""
+
+# 89b1d9cc918d4094bfc53d242697b1da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:234
+msgid "**Multicolor** - the histogram is colored as **Scalar Bar**."
+msgstr ""
+
+# 5776b1b6f872431f9c3095827c9e6a69
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_preferences.rst:235
+msgid ""
+"**Monocolor** - the histogram is colored as selected with **Distribution "
+"color** selector."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_through_point.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_through_point.po
new file mode 100644 (file)
index 0000000..6ba529d
--- /dev/null
@@ -0,0 +1,88 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1ffc38982adf47fcade31b8e5e698da0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:5
+msgid "Moving nodes"
+msgstr ""
+
+# a52fe3efbbf5414fb82bac9d49344fe7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:7
+msgid ""
+"In mesh you can define a node at a certain point either * by movement of "
+"the node closest to the point or * by movement of a selected node to the "
+"point."
+msgstr ""
+
+# 9b2db2d4c63c43d684267300f72cccb8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:11
+msgid "**To displace a node:**"
+msgstr ""
+
+# f2bbc2696ae54993aa4d87bef3570106
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:13
+msgid ""
+"From the **Modification** menu choose the **Move node** item or click "
+"**\"Move Node\"** button in the toolbar."
+msgstr ""
+
+# e388044d0bb6426d9b919415688b6bed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:21
+msgid "The following dialog will appear:"
+msgstr ""
+
+# cc660e1218ff408091d02886affe3b76
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:38
+msgid ""
+"Specify the way of node selection: manually (the first radio button) or "
+"automatically (the second radio button)."
+msgstr ""
+
+# 220607f94c2446048817a084caad5621
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:39
+msgid ""
+"If the manual method is selected, select a node to move (X, Y, Z fields "
+"show the original coordinates of the node) or type the node ID."
+msgstr ""
+
+# e5409113789b411f8764353f9e31ed70
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:40
+msgid ""
+"Enter the coordinates of the destination point. You can click **Update "
+"Destination** button to set the coordinates of the destination point "
+"equal to the coordinates of the node to move."
+msgstr ""
+
+# 43d89a1d7ac94e65a87b159f7b846ece
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:41
+msgid "Activate **Preview** check-box to show the result of move in the viewer."
+msgstr ""
+
+# 1d61a59cc3074d3c8517729005d4c586
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:42
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm the "
+"operation."
+msgstr ""
+
+# 93d94c236da04a568845b1ed95848ee9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/mesh_through_point.rst:56
+msgid "**See Also** a sample TUI Script of a :ref:`tui_moving_nodes` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/minimum_angle.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/minimum_angle.po
new file mode 100644 (file)
index 0000000..18eb025
--- /dev/null
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 8c9833a8c4b34b6686d275f35ce51cb8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:5
+msgid "Minimum angle"
+msgstr ""
+
+# e2969f989b9d425da09b6e9415958e2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:7
+msgid ""
+"**Minimum angle** mesh quality criterion consists of calculation of the "
+"minimum value of angle between two adjacent sides of a 2D meshing element"
+" (triangle or quadrangle)."
+msgstr ""
+
+# 3bc1eb4dd5ae4d6bbd8573ff0fcfa5fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:9
+msgid "**To apply the Minimum angle quality criterion to your mesh:**"
+msgstr ""
+
+# 52f131a28705437fa82b4ef6268be568
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:11
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 503b3b09b790497bacc2a83d60f5fc06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:12
+msgid ""
+"Choose **Controls > Face Controls > Minimum angle** or click **\"Minimum "
+"Angle\"** button."
+msgstr ""
+
+# 69fc068d689f4ad9b58d3ddffd5cd835
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:20
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 1b79a35974814c9bba550884b6f6e2c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/minimum_angle.rst:25
+msgid "**See Also** a sample TUI Script of a :ref:`tui_minimum_angle` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modifying_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modifying_meshes.po
new file mode 100644 (file)
index 0000000..58ad3e3
--- /dev/null
@@ -0,0 +1,216 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 766444ec7ead4382bf9a9624b129e90c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:5
+msgid "Modifying meshes"
+msgstr ""
+
+# b99424d3a44043c289ea11b4c5b4d71d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:7
+msgid ""
+"Salome provides a vast specter of mesh modification and transformation "
+"operations, giving the possibility to:"
+msgstr ""
+
+# 27b4caab85ab4022b129e2ce9e794246
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:9
+msgid ""
+":ref:`adding_nodes_and_elements_page` mesh elements from nodes to "
+"polyhedrons at an arbitrary place in the mesh."
+msgstr ""
+
+# 908e3ed5a71c4ae59dce473a7a0107ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:10
+msgid ""
+":ref:`adding_quadratic_elements_page` mesh elements from quadratic "
+"segments to quadratic hexahedrons at an arbitrary place in the mesh."
+msgstr ""
+
+# b343ea63a1f2423aabb45a296d82569b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:11
+msgid ""
+":ref:`removing_nodes_and_elements_page` any existin\" mesh elements and "
+"nodes."
+msgstr ""
+
+# d2890a80488d44a3b4bd107dbde60fd4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:12
+msgid ""
+":ref:`translation_page` in the indicated direction the mesh or some of "
+"its elements."
+msgstr ""
+
+# a99da6a135bf4032baf8b18f813237d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:13
+msgid ""
+":ref:`rotation_page` by the indicated axis and angle the mesh or some of "
+"its elements."
+msgstr ""
+
+# b8a081a280be48a2b51ef68ee3df88d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:14
+msgid ":ref:`scale_page` the mesh or some of its elements."
+msgstr ""
+
+# b559388bd7d947cf8e7575002ad2f316
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:15
+msgid ""
+":ref:`symmetry_page` the mesh through a point, a vector or a plane of "
+"symmetry."
+msgstr ""
+
+# a2573fe7b4cd4282b21f0ba208d19109
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:16
+msgid ""
+":ref:`double_nodes_page`. Duplication of nodes can be useful to emulate a"
+" crack in the model."
+msgstr ""
+
+# 8a13df333f3442479415aefa0bcb6d9c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:17
+msgid ""
+"Unite meshes by :ref:`sewing_meshes_page` free borders, border to side or"
+" side elements."
+msgstr ""
+
+# 19f0c2af911c4967974bee39cc3cab16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:18
+msgid ":ref:`merging_nodes_page`, coincident within the indicated tolerance."
+msgstr ""
+
+# 15e001da164c49089b3ef370f7dd4c13
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:19
+msgid ":ref:`merging_elements_page` based on the same nodes."
+msgstr ""
+
+# a8f8b84148e142adb9c83a0f217b6622
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:20
+msgid ""
+":ref:`mesh_through_point_page` to an arbitrary location with consequent "
+"transformation of all adjacent elements."
+msgstr ""
+
+# ca7ee1d4df254c4bbd77cadcfa91d8b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:21
+msgid ":ref:`diagonal_inversion_of_elements_page` between neighboring triangles."
+msgstr ""
+
+# 9cebbde1db824710b713cc4d69e85b1f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:22
+msgid ":ref:`uniting_two_triangles_page`."
+msgstr ""
+
+# 137a90a9bb2f4814a5b7cf6b24779cf4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:23
+msgid ":ref:`uniting_set_of_triangles_page`."
+msgstr ""
+
+# db6f2ee5a1a04f7daffa3b6aa71d3bac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:24
+msgid ":ref:`changing_orientation_of_elements_page` of the selected elements."
+msgstr ""
+
+# 80f3f3ab13eb43febe9c059190c95bbf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:25
+msgid ":ref:`reorient_faces_page` by several means."
+msgstr ""
+
+# aed703cfc9ff45a7b270e7076f1c60db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:26
+msgid ":ref:`cutting_quadrangles_page` into two triangles."
+msgstr ""
+
+# f349265200824d7e8e3584c4af8f698d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:27
+msgid ":ref:`split_to_tetra_page` volumic elements into tetrahedra or prisms."
+msgstr ""
+
+# 7799482f6ae34a23b5da41d5da7b6609
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:28
+msgid ""
+":ref:`split_biquad_to_linear_page` elements into linear ones without "
+"creation of additional nodes."
+msgstr ""
+
+# 82bae0fef4244cc4b142353235b5396b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:29
+msgid ""
+":ref:`smoothing_page` elements, reducung distortions in them by adjusting"
+" the locations of nodes."
+msgstr ""
+
+# e7247ed2cd3749e98530ebc18b727a6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:30
+msgid ""
+"Create an :ref:`extrusion_page` along a vector or by normal to a "
+"discretized surface."
+msgstr ""
+
+# 60b895357efe4a218b2e541b17b66fa2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:31
+msgid "Create an :ref:`extrusion_along_path_page`."
+msgstr ""
+
+# 5f2876a7d88c4811ade4f18f430af9d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:32
+msgid ""
+"Create elements by :ref:`revolution_page` of the selected nodes and "
+"elements."
+msgstr ""
+
+# 918249030bc648e88c6c8630a11f1524
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:33
+msgid "Apply :ref:`pattern_mapping_page`."
+msgstr ""
+
+# ced0d6b7e4864f8dac1921be77245e8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:34
+msgid ":ref:`convert_to_from_quadratic_mesh_page`, or vice versa."
+msgstr ""
+
+# 35a85820daf940c0a5397a64a5c2c0f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:35
+msgid ":ref:`make_2dmesh_from_3d_page`."
+msgstr ""
+
+# 5fd1fc86df7a4a178e56e5d9291d64a0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:36
+msgid ":ref:`generate_flat_elements_page`."
+msgstr ""
+
+# c6750c45022d4ad0b3ebca52813ec41f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:37
+msgid ":ref:`cut_mesh_by_plane_page`."
+msgstr ""
+
+# f4f3aad385cc4ca6bf93008ef0b474a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:41
+msgid ""
+"It is possible to :ref:`edit_anchor` of a lower dimension before "
+"generation of the mesh of a higher dimension."
+msgstr ""
+
+# 3fb1488f7c8d4cc7a7c33a989b0d0568
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modifying_meshes.rst:45
+msgid ""
+"It is possible to use the variables defined in the SALOME **NoteBook** to"
+" specify the numerical parameters used for modification of any object."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modules.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modules.po
new file mode 100644 (file)
index 0000000..afadf65
--- /dev/null
@@ -0,0 +1,2262 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.4.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-29 19:04+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e41e3c671aa54728b4e5f5ca6bddbf86
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:5
+msgid "Modules"
+msgstr ""
+
+# aebf98fd861d4330b03ef7b64056fa02
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:9
+msgid "Auxiliary methods and structures"
+msgstr ""
+
+# 811bc64367414a5e9ff781cf8554a052
+# a0d581078ae54c05b39be45170c4ae0a
+# 833f3ba9a22943d1921a681210df069d
+# f705209abf3943bcb0a2e09c4a540f92
+# e601d074e02742daaae08693703243b8
+# 5037ee543108413b8ec8a2de598111a5
+# 05449a7321cd48fb94e0f1be9de0fb32
+# db8f2686329e4652953758af4947ece8
+# 4cb751468e10471e93d61039402100fd
+# 13970cfb87434b04a32db9eecfb903a5
+# 4033255d507a452aa311ae5473f7dc7a
+# d80bfa3e0976405f923273ec99aa2d32
+# 3ad42612015247b4bdb16b3e49e3e43e
+# 48dffecd658e401abb436f0cb8ee9418
+# 17ee12b84391457d8813dff553c9e848
+# f8f6b38cdf87402ebf89c6323e3310d1
+# 0bc2f8de0d494fa993a816fc52fadcde
+# f2082e2c86904a56bb80a3f631166244
+# a44d1f363dec46d780a728aa2d4273c6
+# 1132bc4b1642403ca7d5a215870d9975
+# 7987824601644f049d6f3e1f502c7c3c
+# e974e569b598409e8ae0982bfac3fbf2
+# 84e5f6e90539423abda4f8a842a8b445
+# b76ec16a72f74b488b47cd9d98a471d4
+# 264bfb3ce9974cf59bd283d458093656
+# 294f1c8a01084d1aaebc6c741c5ba9e5
+# 9bcc9b34bead4b80ae7dfaff61a97164
+# 44272bb07e564f4f9e86895a04480a07
+# fbd275b4f6bb40afbd87bf6d8f3fcccc
+# 093b90cc9407408faabdaad9815a1e63
+# a57c9921cd714979b517a9b1874fe079
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:11
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:90
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:124
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:187
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:213
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:239
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:269
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:279
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:296
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:312
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:325
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:342
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:483
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:507
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:519
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:551
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:573
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:584
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:594
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:644
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:670
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:680
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:739
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:752
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:785
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:800
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:815
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:858
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:869
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:905
+msgid "Functions:"
+msgstr ""
+
+# 90d7d9c366264e3cb33de218f9746a35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:13
+msgid ":meth:`def ParseParameters <smeshBuilder.ParseParameters>`"
+msgstr ""
+
+# dff21f5a6faf431f85c1310c07d165f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:15
+msgid ":meth:`def ParseAngles <smeshBuilder.ParseAngles>`"
+msgstr ""
+
+# 131d4ac6295a4a08b0354384a78fed31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:17
+msgid ":meth:`def __initPointStruct <smeshBuilder.__initPointStruct>`"
+msgstr ""
+
+# 594dc5118b6e47f4a48eab53ca6ec2cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:19
+msgid ":meth:`def __initAxisStruct <smeshBuilder.__initAxisStruct>`"
+msgstr ""
+
+# d8dd52dbcac94904af5331430d882ea8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:21
+msgid ":meth:`def IsEqual <smeshBuilder.IsEqual>`"
+msgstr ""
+
+# 5c241e5788bb496188e0da7d3ae7e675
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:23
+msgid ":meth:`def GetName <smeshBuilder.GetName>`"
+msgstr ""
+
+# 073745b0d49a44228c12d376085d0e50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:25
+msgid ":meth:`def TreatHypoStatus <smeshBuilder.TreatHypoStatus>`"
+msgstr ""
+
+# 60a4a00c8fb140a7a8138c2ba80a0cd9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:27
+msgid ":meth:`def AssureGeomPublished <smeshBuilder.AssureGeomPublished>`"
+msgstr ""
+
+# e0d3b809865e4952938ce5cbbb6f05a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:29
+msgid ":meth:`def FirstVertexOnCurve <smeshBuilder.FirstVertexOnCurve>`"
+msgstr ""
+
+# 4570428a6bb64ebdb16d35716cee8851
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:31
+msgid ":meth:`def DumpPython <smeshBuilder.smeshBuilder.DumpPython>`"
+msgstr ""
+
+# 07dd4d93980941c58f01921a273f450a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:33
+msgid ""
+":meth:`def SetDumpPythonHistorical "
+"<smeshBuilder.smeshBuilder.SetDumpPythonHistorical>`"
+msgstr ""
+
+# 54aea7ee63a447b78baf263a2fb67a45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:35
+msgid ":meth:`def init_smesh <smeshBuilder.smeshBuilder.init_smesh>`"
+msgstr ""
+
+# d867ca13d77146db80d0116ffd8364f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:37
+msgid ":meth:`def EnumToLong <smeshBuilder.smeshBuilder.EnumToLong>`"
+msgstr ""
+
+# b358173ebc07437abd819fc4fc66eb42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:39
+msgid ":meth:`def ColorToString <smeshBuilder.smeshBuilder.ColorToString>`"
+msgstr ""
+
+# bd7f4d82ae644c6780db68f4a46ff570
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:41
+msgid ":meth:`def GetPointStruct <smeshBuilder.smeshBuilder.GetPointStruct>`"
+msgstr ""
+
+# 2090d4b1e0c84c81ad0481932b4633b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:43
+msgid ":meth:`def GetDirStruct <smeshBuilder.smeshBuilder.GetDirStruct>`"
+msgstr ""
+
+# 70dac38e98f14d5cbe0ff0ee25c7b975
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:45
+msgid ":meth:`def MakeDirStruct <smeshBuilder.smeshBuilder.MakeDirStruct>`"
+msgstr ""
+
+# bbbe42f4edeb42a19355501cb85b45f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:47
+msgid ":meth:`def GetAxisStruct <smeshBuilder.smeshBuilder.GetAxisStruct>`"
+msgstr ""
+
+# 22e3e252f0b94814a8c2addc678a2293
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:49
+msgid ":meth:`def SetName <smeshBuilder.smeshBuilder.SetName>`"
+msgstr ""
+
+# 32475d1ca7674396ba6cb634910d0850
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:51
+msgid ":meth:`def SetEmbeddedMode <smeshBuilder.smeshBuilder.SetEmbeddedMode>`"
+msgstr ""
+
+# 03385dd886c24fb6b92ddf0a436a4ce6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:53
+msgid ":meth:`def IsEmbeddedMode <smeshBuilder.smeshBuilder.IsEmbeddedMode>`"
+msgstr ""
+
+# 0d69434db52a486f964328ffce6173b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:55
+msgid ":meth:`def SetCurrentStudy <smeshBuilder.smeshBuilder.SetCurrentStudy>`"
+msgstr ""
+
+# ddc249302ea34d25ba0d14c8160061b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:57
+msgid ":meth:`def GetCurrentStudy <smeshBuilder.smeshBuilder.GetCurrentStudy>`"
+msgstr ""
+
+# 7bfb9cb67ee64872b6622ba365432dfd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:59
+msgid ":meth:`def GetSubShapesId <smeshBuilder.smeshBuilder.GetSubShapesId>`"
+msgstr ""
+
+# bb345a3a49834096bc496c663c98d0d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:61
+msgid ""
+":meth:`def SetBoundaryBoxSegmentation "
+"<smeshBuilder.smeshBuilder.SetBoundaryBoxSegmentation>`"
+msgstr ""
+
+# d1b4f3f8b52a43c7b5c49b86630ff525
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:63
+msgid ":meth:`def GetSubShapeName <smeshBuilder.Mesh.GetSubShapeName>`"
+msgstr ""
+
+# f4612f5aa6f24f88ba2db64c4ac546de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:65
+msgid ":meth:`def GetLog <smeshBuilder.Mesh.GetLog>`"
+msgstr ""
+
+# d8762a58cfda46a388041959f6d36997
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:67
+msgid ":meth:`def ClearLog <smeshBuilder.Mesh.ClearLog>`"
+msgstr ""
+
+# 26c352b4467b4740912f04a036f2b4b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:69
+msgid ":meth:`def GetId <smeshBuilder.Mesh.GetId>`"
+msgstr ""
+
+# eedad0f5bf634ae59fe53170bc3ea2ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:71
+msgid ":meth:`def GetStudyId <smeshBuilder.Mesh.GetStudyId>`"
+msgstr ""
+
+# af879cf7b64d42c690626af6f1ab445c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:73
+msgid ":meth:`def GetIDSource <smeshBuilder.Mesh.GetIDSource>`"
+msgstr ""
+
+# 073eb7535d8a4e928e9265895e21d19c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:79
+msgid "Creating Meshes"
+msgstr ""
+
+# 09e09d0d59d4427a9921e756d792d29d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:83
+msgid ":meth:`def Concatenate <smeshBuilder.smeshBuilder.Concatenate>`"
+msgstr ""
+
+# 322db18922f94b97bc77a091b2638883
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:85
+msgid ":meth:`def CopyMesh <smeshBuilder.smeshBuilder.CopyMesh>`"
+msgstr ""
+
+# f342c057d7014cc4a434b6334e4c72fd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:88
+msgid "Importing and exporting meshes"
+msgstr ""
+
+# 8bdbcc46f3c74735b19555ab43020932
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:92
+msgid ""
+":meth:`def CreateMeshesFromUNV "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromUNV>`"
+msgstr ""
+
+# 62f1d7ae5d05468982a2e90912cd623f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:94
+msgid ""
+":meth:`def CreateMeshesFromMED "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromMED>`"
+msgstr ""
+
+# 77a8b8ceb0114334a3e00ed3fb55e46e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:96
+msgid ""
+":meth:`def CreateMeshesFromSAUV "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromSAUV>`"
+msgstr ""
+
+# 1812c824f8e046efb21b0b6b592cbc1a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:98
+msgid ""
+":meth:`def CreateMeshesFromSTL "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromSTL>`"
+msgstr ""
+
+# c1e1c96d625246cba7c0ca455f3c70bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:100
+msgid ""
+":meth:`def CreateMeshesFromCGNS "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromCGNS>`"
+msgstr ""
+
+# 2f3b3d70b8d1423ba1ac125eb4f1705a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:102
+msgid ""
+":meth:`def CreateMeshesFromGMF "
+"<smeshBuilder.smeshBuilder.CreateMeshesFromGMF>`"
+msgstr ""
+
+# 91cb65d7c24a4e708418f70306cab7aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:104
+msgid ":meth:`def ExportMED <smeshBuilder.Mesh.ExportMED>`"
+msgstr ""
+
+# e8f1566fabc643dfa22e9c46e764aaa4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:106
+msgid ":meth:`def ExportSAUV <smeshBuilder.Mesh.ExportSAUV>`"
+msgstr ""
+
+# 3070a5a1cef34fb3ac18a0ef1e93ff62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:108
+msgid ":meth:`def ExportDAT <smeshBuilder.Mesh.ExportDAT>`"
+msgstr ""
+
+# 5d6fb5d0bc4f4fd4977fab31880b32b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:110
+msgid ":meth:`def ExportUNV <smeshBuilder.Mesh.ExportUNV>`"
+msgstr ""
+
+# 3bef8c6c3906485faaa7556904ca9f91
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:112
+msgid ":meth:`def ExportSTL <smeshBuilder.Mesh.ExportSTL>`"
+msgstr ""
+
+# c1ed1d11d65a4f3cbbc10d9f41a23bf8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:114
+msgid ":meth:`def ExportCGNS <smeshBuilder.Mesh.ExportCGNS>`"
+msgstr ""
+
+# c1785d8ab26b4b46a22e82b5c25ac092
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:116
+msgid ":meth:`def ExportGMF <smeshBuilder.Mesh.ExportGMF>`"
+msgstr ""
+
+# a6e7032bfd0845cf8b9635dcef3c8ff1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:118
+msgid ":meth:`def ExportToMED <smeshBuilder.Mesh.ExportToMED>`"
+msgstr ""
+
+# 08e10ce37d254a75b17ad8f7b03245f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:122
+msgid "Constructing meshes"
+msgstr ""
+
+# 7f80816f45cb427d86cd48312b85d454
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:126
+msgid ":meth:`def Mesh <smeshBuilder.smeshBuilder.Mesh>`"
+msgstr ""
+
+# 3570d5cef38140eab58ae7358e13155f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:128
+msgid ":meth:`def __init__ <smeshBuilder.Mesh.__init__>`"
+msgstr ""
+
+# 6c356fd86ca14d85ad70edb72f8f3280
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:130
+msgid ":meth:`def SetMesh <smeshBuilder.Mesh.SetMesh>`"
+msgstr ""
+
+# 1eec8d6fd56d4c00aaaf9c9f8fc4018d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:132
+msgid ":meth:`def GetMesh <smeshBuilder.Mesh.GetMesh>`"
+msgstr ""
+
+# d0ab7abc61a84800978083a708a8a3cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:134
+msgid ":meth:`def SetName <smeshBuilder.Mesh.SetName>`"
+msgstr ""
+
+# 11854ab7467e44c9a85f9b5a02d75026
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:136
+msgid ":meth:`def GetShape <smeshBuilder.Mesh.GetShape>`"
+msgstr ""
+
+# 532b9f9ec8f54f159bdf2cba70ce60c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:138
+msgid ":meth:`def SetShape <smeshBuilder.Mesh.SetShape>`"
+msgstr ""
+
+# b1e0499e07aa43739118022c31da07a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:140
+msgid ":meth:`def IsReadyToCompute <smeshBuilder.Mesh.IsReadyToCompute>`"
+msgstr ""
+
+# 972c7173efca41ada77ca446bf67a4bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:142
+msgid ":meth:`def GetAlgoState <smeshBuilder.Mesh.GetAlgoState>`"
+msgstr ""
+
+# 1bde60ad100e4364aefa49e3af9e5e26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:144
+msgid ":meth:`def Evaluate <smeshBuilder.Mesh.Evaluate>`"
+msgstr ""
+
+# 77d84e818e4740bd88215858492a70a7
+# 552eaeaa3ffc496bb31c50ed8bd82cf7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:146
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:318
+msgid ":meth:`def Compute <smeshBuilder.Mesh.Compute>`"
+msgstr ""
+
+# 2a44df70cbfe4f589ee8d49facbe179b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:148
+msgid ":meth:`def GetComputeErrors <smeshBuilder.Mesh.GetComputeErrors>`"
+msgstr ""
+
+# 23f41325df7e47948c17cee6c046e070
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:150
+msgid ":meth:`def GetFailedShapes <smeshBuilder.Mesh.GetFailedShapes>`"
+msgstr ""
+
+# b3b68ca1b4c843c8835c266b631d5b9a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:152
+msgid ":meth:`def GetMeshOrder <smeshBuilder.Mesh.GetMeshOrder>`"
+msgstr ""
+
+# d59031835d3049e6856d66247321b127
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:154
+msgid ":meth:`def SetMeshOrder <smeshBuilder.Mesh.SetMeshOrder>`"
+msgstr ""
+
+# 0485a1cd38d847d6aad4ffa75e311793
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:156
+msgid ":meth:`def Clear <smeshBuilder.Mesh.Clear>`"
+msgstr ""
+
+# 2181954fca7242c6a25d119b4a67f00f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:160
+msgid "Defining Algorithms"
+msgstr ""
+
+# 2e0a6a7fa3cb4749a282f3d65f5b05fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:163
+msgid "Basic meshing algorithms"
+msgstr ""
+
+# 82cc814736ee4f8a8898524b83a784c6
+# 7eb1d475c69141a7a86ef31e16de4ce7
+# ee2746236c2446019689dcfa6d1af203
+# 3d1bcf3b332848ca955b252c7047e982
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:165
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:199
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:220
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:961
+msgid "Data Structures:"
+msgstr ""
+
+# 4d3775c80aa84eb5a9784a3c5b66da23
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:167
+msgid ""
+":class:`class StdMeshersBuilder_Segment "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment>`"
+msgstr ""
+
+# a3f57976149d4bc789a124d482de506d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:169
+msgid ""
+":class:`class StdMeshersBuilder_Segment_Python "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment_Python>`"
+msgstr ""
+
+# b6808242be2242988b35bec91f2de31d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:171
+msgid ""
+":class:`class StdMeshersBuilder_Triangle_MEFISTO "
+"<StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO>`"
+msgstr ""
+
+# 573a1c516cf346dd90494b51060a74ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:173
+msgid ""
+":class:`class StdMeshersBuilder_Quadrangle "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle>`"
+msgstr ""
+
+# d7bd792aa45c41c68cc326557392147a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:175
+msgid ""
+":class:`class StdMeshersBuilder_Hexahedron "
+"<StdMeshersBuilder.StdMeshersBuilder_Hexahedron>`"
+msgstr ""
+
+# c523efa55c0d49b4b9d22a6c5fc95c97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:177
+msgid ""
+":class:`class StdMeshersBuilder_UseExistingElements_1D "
+"<StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D>`"
+msgstr ""
+
+# fccec022af6546739ebb61f95b173e23
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:179
+msgid ""
+":class:`class StdMeshersBuilder_UseExistingElements_1D2D "
+"<StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D>`"
+msgstr ""
+
+# 0ef9264751cb4f3fb47a0d70c74bbc99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:181
+msgid ""
+":class:`class StdMeshersBuilder_Cartesian_3D "
+"<StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D>`"
+msgstr ""
+
+# 9fde0b802f9b4d82b4ef7c5e8bd814a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:183
+msgid ""
+":class:`class StdMeshersBuilder_UseExisting_1D "
+"<StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D>`"
+msgstr ""
+
+# 6a68789b8da44b73a6608bfabc3c1cb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:185
+msgid ""
+":class:`class StdMeshersBuilder_UseExisting_2D "
+"<StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D>`"
+msgstr ""
+
+# 789c897757a34167ad0d5a317706f72f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:189
+msgid ""
+":meth:`def AutomaticTetrahedralization "
+"<smeshBuilder.Mesh.AutomaticTetrahedralization>`"
+msgstr ""
+
+# b9f75aa73ed1416db9ece9233006b3e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:191
+msgid ""
+":meth:`def AutomaticHexahedralization "
+"<smeshBuilder.Mesh.AutomaticHexahedralization>`"
+msgstr ""
+
+# 45da06286cc8461281e6b31185600563
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:197
+msgid "Projection algorithms"
+msgstr ""
+
+# 45a100c2190d4dada6265984f58a9530
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:201
+msgid ""
+":class:`class StdMeshersBuilder_Projection1D "
+"<StdMeshersBuilder.StdMeshersBuilder_Projection1D>`"
+msgstr ""
+
+# 9640587e49e14b779ca8e2c0e0263ea1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:203
+msgid ""
+":class:`class StdMeshersBuilder_Projection2D "
+"<StdMeshersBuilder.StdMeshersBuilder_Projection2D>`"
+msgstr ""
+
+# 7a9fdc711da0407ab38489b2593dbb28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:205
+msgid ""
+":class:`class StdMeshersBuilder_Projection1D2D "
+"<StdMeshersBuilder.StdMeshersBuilder_Projection1D2D>`"
+msgstr ""
+
+# 50a150525d0c454d96dd0689f930e112
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:207
+msgid ""
+":class:`class StdMeshersBuilder_Projection3D "
+"<StdMeshersBuilder.StdMeshersBuilder_Projection3D>`"
+msgstr ""
+
+# d32354a66a414814b0a324e0bbe26815
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:211
+msgid "Segments around vertex"
+msgstr ""
+
+# 4f8b799d533e4f959ce45f7f35690c8a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:215
+msgid ""
+":meth:`def LengthNearVertex "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.LengthNearVertex>`"
+msgstr ""
+
+# 29a3b64774c24ff3b8406959c58ebd72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:218
+msgid "3D extrusion meshing algorithms"
+msgstr ""
+
+# 7688de0666fd494bbcac9429c63df307
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:222
+msgid ""
+":class:`class StdMeshersBuilder_Prism3D "
+"<StdMeshersBuilder.StdMeshersBuilder_Prism3D>`"
+msgstr ""
+
+# e03cb08ed072472bb321b42e253ae4ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:224
+msgid ""
+":class:`class StdMeshersBuilder_RadialPrism3D "
+"<StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D>`"
+msgstr ""
+
+# 8e95711c2e614fceb1d30efcde1d660a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:228
+msgid "Mesh_Algorithm"
+msgstr ""
+
+# 784fb8424a394648947541d019b4eb90
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:230
+msgid ":class:`class Mesh_Algorithm <smesh_algorithm.Mesh_Algorithm>`"
+msgstr ""
+
+# cd6dc62a15e345ff8698f4d305e28599
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:234
+msgid "Defining hypotheses"
+msgstr ""
+
+# e3222cec51754113a7c63c6a07a85d14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:237
+msgid "1D Meshing Hypotheses"
+msgstr ""
+
+# e160300eab7e40a490db844edc1d129d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:241
+msgid ""
+":meth:`def ReversedEdgeIndices "
+"<smesh_algorithm.Mesh_Algorithm.ReversedEdgeIndices>`"
+msgstr ""
+
+# fda4e0e314b9462e97fb97420d34681c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:243
+msgid ""
+":meth:`def LocalLength "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength>`"
+msgstr ""
+
+# a43d1314e3d243ec8d37e0017ac5a80e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:245
+msgid ":meth:`def MaxSize <StdMeshersBuilder.StdMeshersBuilder_Segment.MaxSize>`"
+msgstr ""
+
+# 1ac3613850f8427fa1c1bdc7d345b743
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:247
+msgid ""
+":meth:`def NumberOfSegments "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments>`"
+msgstr ""
+
+# 3c41ce408a3e4bafb25cc5e301531183
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:249
+msgid ""
+":meth:`def Adaptive "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive>`"
+msgstr ""
+
+# c617340303ec4a7b9206b4f6d00d539e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:251
+msgid ""
+":meth:`def Arithmetic1D "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D>`"
+msgstr ""
+
+# e49a13a09dad4f00a9d967ec833decc4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:253
+msgid ""
+":meth:`def GeometricProgression "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression>`"
+msgstr ""
+
+# 290f0d2f9d1c4167aa864bdf3943cd82
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:255
+msgid ""
+":meth:`def FixedPoints1D "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D>`"
+msgstr ""
+
+# 99ae57b41f5d4d138715db6a2ff6088b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:257
+msgid ""
+":meth:`def StartEndLength "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength>`"
+msgstr ""
+
+# 02dc50745d4a43aba8dcdecef7bed2aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:259
+msgid ""
+":meth:`def Deflection1D "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.Deflection1D>`"
+msgstr ""
+
+# 954928c224d24145b2fd1088db142bf4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:261
+msgid ""
+":meth:`def AutomaticLength "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.AutomaticLength>`"
+msgstr ""
+
+# 905bcc87101e4f6581ea1ea69e5fb4b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:263
+msgid ""
+":meth:`def PythonSplit1D "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment_Python.PythonSplit1D>`"
+msgstr ""
+
+# 141d450ce1c343069eaaa806ec964150
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:267
+msgid "2D Meshing Hypotheses"
+msgstr ""
+
+# 72267422f8d84d33bbc586872f988d24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:271
+msgid ""
+":meth:`def MaxElementArea "
+"<StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.MaxElementArea>`"
+msgstr ""
+
+# 2375cc9407614359858e4688deb91feb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:273
+msgid ""
+":meth:`def LengthFromEdges "
+"<StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.LengthFromEdges>`"
+msgstr ""
+
+# 352ded15f52c41648176439a6c728b09
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:277
+msgid "Quadrangle Hypotheses"
+msgstr ""
+
+# 24564408c2314fd39fd3fdb482c80de1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:281
+msgid ""
+":meth:`def QuadrangleParameters "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters>`"
+msgstr ""
+
+# df2f16d7acdb47a5a6e62770fde58ca9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:283
+msgid ""
+":meth:`def QuadranglePreference "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference>`"
+msgstr ""
+
+# 477b7334b8e6459b8afefab61f81494c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:285
+msgid ""
+":meth:`def TrianglePreference "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TrianglePreference>`"
+msgstr ""
+
+# b4e8d5b6d0654d70a414985f2ec14982
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:287
+msgid ""
+":meth:`def Reduced "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle.Reduced>`"
+msgstr ""
+
+# 0222925902964a719bd740a908df1c40
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:289
+msgid ""
+":meth:`def TriangleVertex "
+"<StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex>`"
+msgstr ""
+
+# 333de62a8d074c2c9cf562b29955da75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:294
+msgid "Additional Hypotheses"
+msgstr ""
+
+# 50e24034e723406a837308c0485dedd6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:298
+msgid ":meth:`def ViscousLayers <smesh_algorithm.Mesh_Algorithm.ViscousLayers>`"
+msgstr ""
+
+# 0780d4f66eb94546846a97e166306190
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:300
+msgid ""
+":meth:`def ViscousLayers2D "
+"<smesh_algorithm.Mesh_Algorithm.ViscousLayers2D>`"
+msgstr ""
+
+# c55f790b8d114d51860f7d09a9b0428e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:302
+msgid ""
+":meth:`def Propagation "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.Propagation>`"
+msgstr ""
+
+# 589dde07b9fc49dd864c61694d0d7b5a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:304
+msgid ""
+":meth:`def PropagationOfDistribution "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.PropagationOfDistribution>`"
+msgstr ""
+
+# 662f59f313a1498c989856b07829c8ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:306
+msgid ""
+":meth:`def QuadraticMesh "
+"<StdMeshersBuilder.StdMeshersBuilder_Segment.QuadraticMesh>`"
+msgstr ""
+
+# 6cf0c71b952044728b2d3a9fc7c5c09b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:310
+msgid "Constructing sub-meshes"
+msgstr ""
+
+# cfd057aa90b34826ad29c0a7ddac1829
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:314
+msgid ":meth:`def GetSubMesh <smeshBuilder.Mesh.GetSubMesh>`"
+msgstr ""
+
+# 8e48623eae2844edbd39655bb2e4c5f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:316
+msgid ":meth:`def ClearSubMesh <smeshBuilder.Mesh.ClearSubMesh>`"
+msgstr ""
+
+# 6cc7defcbee94020b151cbaa5b7b2eb9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:323
+msgid "Editing meshes"
+msgstr ""
+
+# 51f75e073b484fa7aa578be23342b1b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:327
+msgid ":meth:`def AddHypothesis <smeshBuilder.Mesh.AddHypothesis>`"
+msgstr ""
+
+# 038a297979fb4c578cbf75507e4662cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:329
+msgid ":meth:`def IsUsedHypothesis <smeshBuilder.Mesh.IsUsedHypothesis>`"
+msgstr ""
+
+# 5dcc2cb2b10648ceb9fdb9a48013f88b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:331
+msgid ":meth:`def RemoveHypothesis <smeshBuilder.Mesh.RemoveHypothesis>`"
+msgstr ""
+
+# e1f482aa007b4bb5aa380e8f1ff7f546
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:333
+msgid ":meth:`def GetHypothesisList <smeshBuilder.Mesh.GetHypothesisList>`"
+msgstr ""
+
+# 92e6a6758ec94509b44d79e73bab869e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:335
+msgid ""
+":meth:`def RemoveGlobalHypotheses "
+"<smeshBuilder.Mesh.RemoveGlobalHypotheses>`"
+msgstr ""
+
+# 6c917e64889a4f0c8251d4b327d04c0f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:340
+msgid "Mesh Information"
+msgstr ""
+
+# c76db93a4c5b49b4ad8025a9d3b09e7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:344
+msgid ":meth:`def GetMeshInfo <smeshBuilder.smeshBuilder.GetMeshInfo>`"
+msgstr ""
+
+# 43b487b08ef0490f8cd368a4f98eccc6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:346
+msgid ""
+":meth:`def GetGeometryByMeshElement "
+"<smeshBuilder.Mesh.GetGeometryByMeshElement>`"
+msgstr ""
+
+# 68b8092a4a8d470fa8eda8d8e16dbdf7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:348
+msgid ":meth:`def MeshDimension <smeshBuilder.Mesh.MeshDimension>`"
+msgstr ""
+
+# a8ae9becbd3e460fb1720d37f17bfdb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:350
+msgid ":meth:`def GetMeshInfo <smeshBuilder.Mesh.GetMeshInfo>`"
+msgstr ""
+
+# 1f768de43b5c4149b5cc31f8f548690b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:352
+msgid ":meth:`def NbNodes <smeshBuilder.Mesh.NbNodes>`"
+msgstr ""
+
+# 954f4ea4947d41339b5c0697315ae2d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:354
+msgid ":meth:`def NbElements <smeshBuilder.Mesh.NbElements>`"
+msgstr ""
+
+# 99840649cf174b6fb9df85babf5f791f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:356
+msgid ":meth:`def Nb0DElements <smeshBuilder.Mesh.Nb0DElements>`"
+msgstr ""
+
+# 00ae407333a74cebba243c9285822a24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:358
+msgid ":meth:`def NbBalls <smeshBuilder.Mesh.NbBalls>`"
+msgstr ""
+
+# 4f98d77cd16d4963b2541702a2c38b64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:360
+msgid ":meth:`def NbEdges <smeshBuilder.Mesh.NbEdges>`"
+msgstr ""
+
+# a66478403ed54b148f49be6276cbe3a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:362
+msgid ":meth:`def NbEdgesOfOrder <smeshBuilder.Mesh.NbEdgesOfOrder>`"
+msgstr ""
+
+# a4dbc4ea31344be1ac3f6dcb73c52030
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:364
+msgid ":meth:`def NbFaces <smeshBuilder.Mesh.NbFaces>`"
+msgstr ""
+
+# 36e3ef6e66914db1a5ec72be05f287ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:366
+msgid ":meth:`def NbFacesOfOrder <smeshBuilder.Mesh.NbFacesOfOrder>`"
+msgstr ""
+
+# eb5677ee000f49898342fbcd1de47a75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:368
+msgid ":meth:`def NbTriangles <smeshBuilder.Mesh.NbTriangles>`"
+msgstr ""
+
+# 9f4cde40e15843eb87394059e3125ee4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:370
+msgid ":meth:`def NbTrianglesOfOrder <smeshBuilder.Mesh.NbTrianglesOfOrder>`"
+msgstr ""
+
+# 24c0622b6f2240c88cddfae7e49b0e61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:372
+msgid ":meth:`def NbBiQuadTriangles <smeshBuilder.Mesh.NbBiQuadTriangles>`"
+msgstr ""
+
+# d4dc3b2edb1f400c8e9ad717c1f706d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:374
+msgid ":meth:`def NbQuadrangles <smeshBuilder.Mesh.NbQuadrangles>`"
+msgstr ""
+
+# dba0d61b72fa4857a483ed61b75d7626
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:376
+msgid ":meth:`def NbQuadranglesOfOrder <smeshBuilder.Mesh.NbQuadranglesOfOrder>`"
+msgstr ""
+
+# 8c32f6cd75fa4f0fad55ec3112db66fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:378
+msgid ":meth:`def NbBiQuadQuadrangles <smeshBuilder.Mesh.NbBiQuadQuadrangles>`"
+msgstr ""
+
+# ca5317db87e342b099898411f64a8c6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:380
+msgid ":meth:`def NbPolygons <smeshBuilder.Mesh.NbPolygons>`"
+msgstr ""
+
+# 0bacba5c96004b4a98214bfd724ff178
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:382
+msgid ":meth:`def NbVolumes <smeshBuilder.Mesh.NbVolumes>`"
+msgstr ""
+
+# 4b685ff130574fa8ba6dfd07d55d9142
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:384
+msgid ":meth:`def NbVolumesOfOrder <smeshBuilder.Mesh.NbVolumesOfOrder>`"
+msgstr ""
+
+# 2c897a5f0dc04c91ba17c87e45eb96f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:386
+msgid ":meth:`def NbTetras <smeshBuilder.Mesh.NbTetras>`"
+msgstr ""
+
+# 0a8310de5d624249be63362b43fbf5db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:388
+msgid ":meth:`def NbTetrasOfOrder <smeshBuilder.Mesh.NbTetrasOfOrder>`"
+msgstr ""
+
+# 04a5850ba04f4aa28f57ec1dacf47d38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:390
+msgid ":meth:`def NbHexas <smeshBuilder.Mesh.NbHexas>`"
+msgstr ""
+
+# a60ad57141f1498ba25460cf40f8c888
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:392
+msgid ":meth:`def NbHexasOfOrder <smeshBuilder.Mesh.NbHexasOfOrder>`"
+msgstr ""
+
+# a3256c58d04f4ee3983814ad7f40625b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:394
+msgid ":meth:`def NbTriQuadraticHexas <smeshBuilder.Mesh.NbTriQuadraticHexas>`"
+msgstr ""
+
+# f172dd6198d7481191541ca3413eb9c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:396
+msgid ":meth:`def NbPyramids <smeshBuilder.Mesh.NbPyramids>`"
+msgstr ""
+
+# 76f711639d1546c494681cf375fdd28b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:398
+msgid ":meth:`def NbPyramidsOfOrder <smeshBuilder.Mesh.NbPyramidsOfOrder>`"
+msgstr ""
+
+# 503e7b5252da4fb4ae9cbde6c51b96b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:400
+msgid ":meth:`def NbPrisms <smeshBuilder.Mesh.NbPrisms>`"
+msgstr ""
+
+# 238c818e887c4bcf955f2bd88704ea98
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:402
+msgid ":meth:`def NbPrismsOfOrder <smeshBuilder.Mesh.NbPrismsOfOrder>`"
+msgstr ""
+
+# f9c2a5ec351949ca84196ff81ace34e5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:404
+msgid ":meth:`def NbHexagonalPrisms <smeshBuilder.Mesh.NbHexagonalPrisms>`"
+msgstr ""
+
+# 751765671b034dc5bf0fbb7513d2ce06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:406
+msgid ":meth:`def NbPolyhedrons <smeshBuilder.Mesh.NbPolyhedrons>`"
+msgstr ""
+
+# db8c6392653845a08bf83991f2b03e36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:408
+msgid ":meth:`def NbSubMesh <smeshBuilder.Mesh.NbSubMesh>`"
+msgstr ""
+
+# 03924bc78b4545dbb6c7d56f211e4863
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:410
+msgid ":meth:`def GetElementsId <smeshBuilder.Mesh.GetElementsId>`"
+msgstr ""
+
+# 3c1aa5db6a984b3fbe3301404618abae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:412
+msgid ":meth:`def GetElementsByType <smeshBuilder.Mesh.GetElementsByType>`"
+msgstr ""
+
+# 1827a79be5b2491fbaf7af844e732506
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:414
+msgid ":meth:`def GetNodesId <smeshBuilder.Mesh.GetNodesId>`"
+msgstr ""
+
+# bfbb4deb474b4edaa8eda767a56bdcf0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:416
+msgid ":meth:`def GetElementType <smeshBuilder.Mesh.GetElementType>`"
+msgstr ""
+
+# 380b0241657b4706b6a5516674895f10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:418
+msgid ":meth:`def GetElementGeomType <smeshBuilder.Mesh.GetElementGeomType>`"
+msgstr ""
+
+# a2e56fdc555e4821b1d6c496adf48684
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:420
+msgid ":meth:`def GetElementShape <smeshBuilder.Mesh.GetElementShape>`"
+msgstr ""
+
+# addea412ef13465b9d05fdffcf9cc4b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:422
+msgid ":meth:`def GetSubMeshElementsId <smeshBuilder.Mesh.GetSubMeshElementsId>`"
+msgstr ""
+
+# 7df8e273cad647aeb73d465346f6e7e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:424
+msgid ":meth:`def GetSubMeshNodesId <smeshBuilder.Mesh.GetSubMeshNodesId>`"
+msgstr ""
+
+# 9020037c46694af999e88d5d07c816e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:426
+msgid ""
+":meth:`def GetSubMeshElementType "
+"<smeshBuilder.Mesh.GetSubMeshElementType>`"
+msgstr ""
+
+# 69130589b557470281b5903f260affd8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:428
+msgid ":meth:`def Dump <smeshBuilder.Mesh.Dump>`"
+msgstr ""
+
+# b5f49f2df8904ff29222430605c3bc94
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:430
+msgid ":meth:`def GetNodeXYZ <smeshBuilder.Mesh.GetNodeXYZ>`"
+msgstr ""
+
+# c7d092db70ca422196290e502d2e7979
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:432
+msgid ""
+":meth:`def GetNodeInverseElements "
+"<smeshBuilder.Mesh.GetNodeInverseElements>`"
+msgstr ""
+
+# 4f9d3f65dc3648b09df64110ed5cf556
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:434
+msgid ":meth:`def GetNodePosition <smeshBuilder.Mesh.GetNodePosition>`"
+msgstr ""
+
+# 10c9dbd9f0924888a68ba51eb522da5e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:436
+msgid ":meth:`def GetElementPosition <smeshBuilder.Mesh.GetElementPosition>`"
+msgstr ""
+
+# 0539225d7f004145a6babe9bf75e68d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:438
+msgid ":meth:`def GetShapeID <smeshBuilder.Mesh.GetShapeID>`"
+msgstr ""
+
+# 5e65e2e29cf9462b973c9967ee040034
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:440
+msgid ":meth:`def GetShapeIDForElem <smeshBuilder.Mesh.GetShapeIDForElem>`"
+msgstr ""
+
+# 49e95d91198645528ef66089459ca493
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:442
+msgid ":meth:`def GetElemNbNodes <smeshBuilder.Mesh.GetElemNbNodes>`"
+msgstr ""
+
+# b79913eff730480e9e242fb7f83f2ac6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:444
+msgid ":meth:`def GetElemNode <smeshBuilder.Mesh.GetElemNode>`"
+msgstr ""
+
+# c9899e9d096d47ba87fb0790e54d601c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:446
+msgid ":meth:`def GetElemNodes <smeshBuilder.Mesh.GetElemNodes>`"
+msgstr ""
+
+# c1c3eddb04de4ae4b80b02dce08782c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:448
+msgid ":meth:`def IsMediumNode <smeshBuilder.Mesh.IsMediumNode>`"
+msgstr ""
+
+# 16820b1b996d47e0ae61f618c3e98e5b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:450
+msgid ""
+":meth:`def IsMediumNodeOfAnyElem "
+"<smeshBuilder.Mesh.IsMediumNodeOfAnyElem>`"
+msgstr ""
+
+# f9b41aff38f74d9cb673b3800591125a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:452
+msgid ":meth:`def ElemNbEdges <smeshBuilder.Mesh.ElemNbEdges>`"
+msgstr ""
+
+# 6780db8e9eb7424aa6c43a481af532a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:454
+msgid ":meth:`def ElemNbFaces <smeshBuilder.Mesh.ElemNbFaces>`"
+msgstr ""
+
+# 99a23c156b124bb1abe5d7e479ddfc03
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:456
+msgid ":meth:`def GetElemFaceNodes <smeshBuilder.Mesh.GetElemFaceNodes>`"
+msgstr ""
+
+# aca35efb8db74b1588943f779371a20a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:458
+msgid ":meth:`def GetFaceNormal <smeshBuilder.Mesh.GetFaceNormal>`"
+msgstr ""
+
+# 323b4e444cbf45e68eb7509f287c9df2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:460
+msgid ":meth:`def FindElementByNodes <smeshBuilder.Mesh.FindElementByNodes>`"
+msgstr ""
+
+# 28a1af510c5948f990bff38d7e9db58b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:462
+msgid ":meth:`def GetElementsByNodes <smeshBuilder.Mesh.GetElementsByNodes>`"
+msgstr ""
+
+# 1ecc8de04b0f47c3b034d001b61559ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:464
+msgid ":meth:`def IsPoly <smeshBuilder.Mesh.IsPoly>`"
+msgstr ""
+
+# bd6b88ee9dc648a784d7059b01253a4c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:466
+msgid ":meth:`def IsQuadratic <smeshBuilder.Mesh.IsQuadratic>`"
+msgstr ""
+
+# 48adf66c10844d2390146a8b1dd0ae16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:468
+msgid ":meth:`def GetBallDiameter <smeshBuilder.Mesh.GetBallDiameter>`"
+msgstr ""
+
+# 5764e34980c447a4abeba3c760979853
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:470
+msgid ":meth:`def BaryCenter <smeshBuilder.Mesh.BaryCenter>`"
+msgstr ""
+
+# cf6d71caf33e4cb2b0c8c32e614ae44b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:472
+msgid ":meth:`def FindNodeClosestTo <smeshBuilder.Mesh.FindNodeClosestTo>`"
+msgstr ""
+
+# ac85be2785674b55aa0d1d6f9aaaffff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:474
+msgid ":meth:`def FindElementsByPoint <smeshBuilder.Mesh.FindElementsByPoint>`"
+msgstr ""
+
+# 1d1d88770b364847bd44cb47868fde1d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:476
+msgid ":meth:`def GetPointState <smeshBuilder.Mesh.GetPointState>`"
+msgstr ""
+
+# dcd08ac271c146b88b2656967be6ccdb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:481
+msgid "Quality controls and Filtering"
+msgstr ""
+
+# fa2cb7ad03b54185925961b0d5977b38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:485
+msgid ""
+":meth:`def GetEmptyCriterion "
+"<smeshBuilder.smeshBuilder.GetEmptyCriterion>`"
+msgstr ""
+
+# 43ff82d0338242f382b9359f4deb1f60
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:487
+msgid ":meth:`def GetCriterion <smeshBuilder.smeshBuilder.GetCriterion>`"
+msgstr ""
+
+# 0e0572b2e9d3445387b9cf60aad1bf25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:489
+msgid ":meth:`def GetFilter <smeshBuilder.smeshBuilder.GetFilter>`"
+msgstr ""
+
+# d6d7c9fad5c04313a2a0727c5fdeaac1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:491
+msgid ""
+":meth:`def GetFilterFromCriteria "
+"<smeshBuilder.smeshBuilder.GetFilterFromCriteria>`"
+msgstr ""
+
+# 06e86322085c42a49cc8fcbffcba596e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:493
+msgid ":meth:`def GetFunctor <smeshBuilder.smeshBuilder.GetFunctor>`"
+msgstr ""
+
+# 364133b01cf244d68debd89ff78e203e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:495
+msgid ":meth:`def GetIdsFromFilter <smeshBuilder.Mesh.GetIdsFromFilter>`"
+msgstr ""
+
+# 14efcd4479ab4c5897492823160c73d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:497
+msgid ":meth:`def IsManifold <smeshBuilder.Mesh.IsManifold>`"
+msgstr ""
+
+# 47949f78e0874c80bc948974d34678b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:499
+msgid ""
+":meth:`def IsCoherentOrientation2D "
+"<smeshBuilder.Mesh.IsCoherentOrientation2D>`"
+msgstr ""
+
+# 7619e057b99142aea7ceddba0a2697b2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:505
+msgid "Grouping elements"
+msgstr ""
+
+# e1ddf65f695b444580732c0bfbf3420e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:509
+msgid ":meth:`def SetAutoColor <smeshBuilder.Mesh.SetAutoColor>`"
+msgstr ""
+
+# 43c393b9ce7a432db32738accfbb4479
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:511
+msgid ":meth:`def GetAutoColor <smeshBuilder.Mesh.GetAutoColor>`"
+msgstr ""
+
+# 7fcc1ad4de454a7cac102032b8a6d461
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:513
+msgid ""
+":meth:`def HasDuplicatedGroupNamesMED "
+"<smeshBuilder.Mesh.HasDuplicatedGroupNamesMED>`"
+msgstr ""
+
+# dc3bcded96994f2683443bf8f36789d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:517
+msgid "Creating groups"
+msgstr ""
+
+# c1e4318a3e6a41339c9f925820b553e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:521
+msgid ":meth:`def CreateEmptyGroup <smeshBuilder.Mesh.CreateEmptyGroup>`"
+msgstr ""
+
+# 7f59b73c5a034124bed02fe7a80aa1a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:523
+msgid ":meth:`def Group <smeshBuilder.Mesh.Group>`"
+msgstr ""
+
+# 526937197efb4aa0ba5bc5117451db63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:525
+msgid ":meth:`def GroupOnGeom <smeshBuilder.Mesh.GroupOnGeom>`"
+msgstr ""
+
+# afbd9e404c4142c58a910f71f5b42940
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:527
+msgid ":meth:`def GroupOnFilter <smeshBuilder.Mesh.GroupOnFilter>`"
+msgstr ""
+
+# b59a15e6bb8b4cc2804c8db67fcb3878
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:529
+msgid ":meth:`def MakeGroupByIds <smeshBuilder.Mesh.MakeGroupByIds>`"
+msgstr ""
+
+# b4fd00be80b94b7c95bf561e34be9f1d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:531
+msgid ":meth:`def MakeGroup <smeshBuilder.Mesh.MakeGroup>`"
+msgstr ""
+
+# dea817c333ea4921ac122bfe2258ad8a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:533
+msgid ":meth:`def MakeGroupByCriterion <smeshBuilder.Mesh.MakeGroupByCriterion>`"
+msgstr ""
+
+# 9ea5d2a9469947fa9a46e517f0546ddc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:535
+msgid ":meth:`def MakeGroupByCriteria <smeshBuilder.Mesh.MakeGroupByCriteria>`"
+msgstr ""
+
+# 6af590a3c4304e14ab438b9bf8fc38ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:537
+msgid ":meth:`def MakeGroupByFilter <smeshBuilder.Mesh.MakeGroupByFilter>`"
+msgstr ""
+
+# 3505dc6f56e04ddfa49953788330911d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:539
+msgid ":meth:`def GetGroups <smeshBuilder.Mesh.GetGroups>`"
+msgstr ""
+
+# 4ec6990ada494c00b604aa67bf5c2f5c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:541
+msgid ":meth:`def NbGroups <smeshBuilder.Mesh.NbGroups>`"
+msgstr ""
+
+# 5bf02958c3ed4323affefb4a87e216e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:543
+msgid ":meth:`def GetGroupNames <smeshBuilder.Mesh.GetGroupNames>`"
+msgstr ""
+
+# 76206598280549248ed7cc370d413377
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:545
+msgid ":meth:`def GetGroupByName <smeshBuilder.Mesh.GetGroupByName>`"
+msgstr ""
+
+# 9d3ac80899df4bb4809c73351f46f7fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:549
+msgid "Using operations on groups"
+msgstr ""
+
+# ea0222a6d2764631838be50b926307b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:553
+msgid ":meth:`def UnionGroups <smeshBuilder.Mesh.UnionGroups>`"
+msgstr ""
+
+# d8c432df42a640e7a9227e38de0cfd2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:555
+msgid ":meth:`def UnionListOfGroups <smeshBuilder.Mesh.UnionListOfGroups>`"
+msgstr ""
+
+# 1cad96c02561499094bf37d0bac8ed38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:557
+msgid ":meth:`def IntersectGroups <smeshBuilder.Mesh.IntersectGroups>`"
+msgstr ""
+
+# 06a8959f158443a2b7686c3c3e2a0497
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:559
+msgid ""
+":meth:`def IntersectListOfGroups "
+"<smeshBuilder.Mesh.IntersectListOfGroups>`"
+msgstr ""
+
+# 06d24d6fff774547af488e3d58597afa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:561
+msgid ":meth:`def CutGroups <smeshBuilder.Mesh.CutGroups>`"
+msgstr ""
+
+# 6cc2630aae9e4368a78bc41cfd016f8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:563
+msgid ":meth:`def CutListOfGroups <smeshBuilder.Mesh.CutListOfGroups>`"
+msgstr ""
+
+# 1ac1dd8f5d474d3a977ae209a22d2d6e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:565
+msgid ":meth:`def CreateDimGroup <smeshBuilder.Mesh.CreateDimGroup>`"
+msgstr ""
+
+# 5a314bffaeae4756a5af4293f5cb4806
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:567
+msgid ":meth:`def ConvertToStandalone <smeshBuilder.Mesh.ConvertToStandalone>`"
+msgstr ""
+
+# 8d5ec94d536c4b5d97909b4723a3d54f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:571
+msgid "Deleting groups"
+msgstr ""
+
+# b6c2d50d6e7b4a9a881ef1f9957a1a08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:575
+msgid ":meth:`def RemoveGroup <smeshBuilder.Mesh.RemoveGroup>`"
+msgstr ""
+
+# 12886886c20f48aaa1ef06a3e0eedb91
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:577
+msgid ""
+":meth:`def RemoveGroupWithContents "
+"<smeshBuilder.Mesh.RemoveGroupWithContents>`"
+msgstr ""
+
+# db8216644ddb498d920616a88d964d44
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:582
+msgid "Modifying meshes"
+msgstr ""
+
+# fc9163a484d44811b09b7691af8917c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:586
+msgid ":meth:`def GetPattern <smeshBuilder.smeshBuilder.GetPattern>`"
+msgstr ""
+
+# 1ca825356b6049d49779fda241585440
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:588
+msgid ":meth:`def GetMeshEditor <smeshBuilder.Mesh.GetMeshEditor>`"
+msgstr ""
+
+# 23d3f0b765364481af9352faa320c1df
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:592
+msgid "Adding nodes and elements"
+msgstr ""
+
+# 7a48ed64d3bf4268ba874d987232ffb0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:596
+msgid ":meth:`def AddNode <smeshBuilder.Mesh.AddNode>`"
+msgstr ""
+
+# 8e5db9e3a5fd4094a46e63d1d8a38ebd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:598
+msgid ":meth:`def Add0DElement <smeshBuilder.Mesh.Add0DElement>`"
+msgstr ""
+
+# 9ae4ac435eae4e0c9799797f70dab2e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:600
+msgid ""
+":meth:`def Add0DElementsToAllNodes "
+"<smeshBuilder.Mesh.Add0DElementsToAllNodes>`"
+msgstr ""
+
+# 8e1607e1b4e44a358d83a2b601802ac9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:602
+msgid ":meth:`def AddBall <smeshBuilder.Mesh.AddBall>`"
+msgstr ""
+
+# 1681b79b28b64e45bc4fcef1d3b7f59c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:604
+msgid ":meth:`def AddEdge <smeshBuilder.Mesh.AddEdge>`"
+msgstr ""
+
+# 4532f45d09cb497a92e1fc8fb6b61e27
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:606
+msgid ":meth:`def AddFace <smeshBuilder.Mesh.AddFace>`"
+msgstr ""
+
+# b2259a8903ae44f3ac518ba7feb1e03e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:608
+msgid ":meth:`def AddPolygonalFace <smeshBuilder.Mesh.AddPolygonalFace>`"
+msgstr ""
+
+# ec5492e82bdc4cafbc8944bbb25d1aaa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:610
+msgid ":meth:`def AddQuadPolygonalFace <smeshBuilder.Mesh.AddQuadPolygonalFace>`"
+msgstr ""
+
+# 2e0296655d864cccb38c09f627595aa9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:612
+msgid ":meth:`def AddVolume <smeshBuilder.Mesh.AddVolume>`"
+msgstr ""
+
+# d7f163ff1f7642d9b7de09847b059f8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:614
+msgid ":meth:`def AddPolyhedralVolume <smeshBuilder.Mesh.AddPolyhedralVolume>`"
+msgstr ""
+
+# a51315a53ba3474cb2229a96bf9e6022
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:616
+msgid ""
+":meth:`def AddPolyhedralVolumeByFaces "
+"<smeshBuilder.Mesh.AddPolyhedralVolumeByFaces>`"
+msgstr ""
+
+# 0ea3fae8f16444b1a647d45334981d2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:618
+msgid ":meth:`def SetNodeOnVertex <smeshBuilder.Mesh.SetNodeOnVertex>`"
+msgstr ""
+
+# 1a9700a129354a86b4cf96e6185e66e0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:620
+msgid ":meth:`def SetNodeOnEdge <smeshBuilder.Mesh.SetNodeOnEdge>`"
+msgstr ""
+
+# f4c054f968f04bb584c52039f32d9e48
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:622
+msgid ":meth:`def SetNodeOnFace <smeshBuilder.Mesh.SetNodeOnFace>`"
+msgstr ""
+
+# 84d892a26de84848b69c9dada7132c7a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:624
+msgid ":meth:`def SetNodeInVolume <smeshBuilder.Mesh.SetNodeInVolume>`"
+msgstr ""
+
+# 63b28ca6e7eb410ca2b3623db87db04f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:626
+msgid ""
+":meth:`def SetMeshElementOnShape "
+"<smeshBuilder.Mesh.SetMeshElementOnShape>`"
+msgstr ""
+
+# c67ed93d1bd24cf6b5cb159a09baa71c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:628
+msgid ":meth:`def Make2DMeshFrom3D <smeshBuilder.Mesh.Make2DMeshFrom3D>`"
+msgstr ""
+
+# ab02c4c770ed41d398927abaea2dec53
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:630
+msgid ":meth:`def MakeBoundaryMesh <smeshBuilder.Mesh.MakeBoundaryMesh>`"
+msgstr ""
+
+# 330c552912024f259d8907e86251be24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:632
+msgid ":meth:`def MakeBoundaryElements <smeshBuilder.Mesh.MakeBoundaryElements>`"
+msgstr ""
+
+# ebf6aad9b717442ebf64cdd3d48f208e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:634
+msgid ":meth:`def GetLastCreatedNodes <smeshBuilder.Mesh.GetLastCreatedNodes>`"
+msgstr ""
+
+# a04cc5c028a54d03861ece9fad317d41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:636
+msgid ":meth:`def GetLastCreatedElems <smeshBuilder.Mesh.GetLastCreatedElems>`"
+msgstr ""
+
+# e9cc0fc3baa748718c0e1b9565d78fe5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:638
+msgid ":meth:`def ClearLastCreated <smeshBuilder.Mesh.ClearLastCreated>`"
+msgstr ""
+
+# 8f1aafa6c1cd4ef1b09d5e2731200a2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:642
+msgid "Removing nodes and elements"
+msgstr ""
+
+# f3771c9094924a18abfbd1fd322b7332
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:646
+msgid ":meth:`def RemoveElements <smeshBuilder.Mesh.RemoveElements>`"
+msgstr ""
+
+# 2052ac8112504711a295bba532dd96a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:648
+msgid ":meth:`def RemoveNodes <smeshBuilder.Mesh.RemoveNodes>`"
+msgstr ""
+
+# dab20ca75d0e41a1a84dd38d7ec55898
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:650
+msgid ":meth:`def RemoveOrphanNodes <smeshBuilder.Mesh.RemoveOrphanNodes>`"
+msgstr ""
+
+# 2affc8ab488f46208c25b84e320446dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:654
+msgid "Modifying nodes and elements"
+msgstr ""
+
+# 3b56d50a33ce418ea0a42f50845cf428
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:656
+msgid "functions:"
+msgstr ""
+
+# 0b23874b7dea4f1cbeebff7c8fdf2781
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:658
+msgid ":meth:`def MoveNode <smeshBuilder.Mesh.MoveNode>`"
+msgstr ""
+
+# 87157a9a3b6242d0951e4a444db4e236
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:660
+msgid ""
+":meth:`def MoveClosestNodeToPoint "
+"<smeshBuilder.Mesh.MoveClosestNodeToPoint>`"
+msgstr ""
+
+# bbb8094228b540679b4dda8c2afa2061
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:662
+msgid ""
+":meth:`def MeshToPassThroughAPoint "
+"<smeshBuilder.Mesh.MeshToPassThroughAPoint>`"
+msgstr ""
+
+# 5cefaf2967764ad38f8bf3fe6545e1c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:664
+msgid ":meth:`def ChangeElemNodes <smeshBuilder.Mesh.ChangeElemNodes>`"
+msgstr ""
+
+# b9fc90e122ae49b39407a81343b5a34f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:668
+msgid "Renumbering nodes and elements"
+msgstr ""
+
+# 79117ce1b05046eab44d776f7cdd3fc9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:672
+msgid ":meth:`def RenumberNodes <smeshBuilder.Mesh.RenumberNodes>`"
+msgstr ""
+
+# cb0bbc96cc174dc59f442fd1071d502c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:674
+msgid ":meth:`def RenumberElements <smeshBuilder.Mesh.RenumberElements>`"
+msgstr ""
+
+# c52bcd7c63374e8a8a809d46fccc6f07
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:678
+msgid "Transforming meshes (Translation, Rotation, Symmetry, Sewing, Merging)"
+msgstr ""
+
+# 52491266a8704bc8b19dfd0ca72f34e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:682
+msgid ":meth:`def Mirror <smeshBuilder.Mesh.Mirror>`"
+msgstr ""
+
+# 156b889faa49438f9f5a1cbdd74560de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:684
+msgid ":meth:`def MirrorMakeMesh <smeshBuilder.Mesh.MirrorMakeMesh>`"
+msgstr ""
+
+# d8cad3abefd346a7838a8bac25c45d4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:686
+msgid ":meth:`def MirrorObject <smeshBuilder.Mesh.MirrorObject>`"
+msgstr ""
+
+# b80a51a5b08e475c955b74b18b25ce33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:688
+msgid ":meth:`def MirrorObjectMakeMesh <smeshBuilder.Mesh.MirrorObjectMakeMesh>`"
+msgstr ""
+
+# cf6aa3d2564c4ee585c60755790c6d39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:690
+msgid ":meth:`def Translate <smeshBuilder.Mesh.Translate>`"
+msgstr ""
+
+# 6477a78623b348598ff2c60ebded4af2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:692
+msgid ":meth:`def TranslateMakeMesh <smeshBuilder.Mesh.TranslateMakeMesh>`"
+msgstr ""
+
+# 0bec18ac771545adb8a9e2522cca87af
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:694
+msgid ":meth:`def TranslateObject <smeshBuilder.Mesh.TranslateObject>`"
+msgstr ""
+
+# dfe798659d3845bb9473d6dd05f92f62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:696
+msgid ""
+":meth:`def TranslateObjectMakeMesh "
+"<smeshBuilder.Mesh.TranslateObjectMakeMesh>`"
+msgstr ""
+
+# 44934955eea347a49c7d6e0c924d11fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:698
+msgid ":meth:`def Rotate <smeshBuilder.Mesh.Rotate>`"
+msgstr ""
+
+# 0f11692135754a8cb7e4b5c75156c9ac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:700
+msgid ":meth:`def RotateMakeMesh <smeshBuilder.Mesh.RotateMakeMesh>`"
+msgstr ""
+
+# 0ae561bc02d845cd968efbb0e4922dcd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:702
+msgid ":meth:`def RotateObject <smeshBuilder.Mesh.RotateObject>`"
+msgstr ""
+
+# e17fc29d010e47ee8e892fd87383c9d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:704
+msgid ":meth:`def RotateObjectMakeMesh <smeshBuilder.Mesh.RotateObjectMakeMesh>`"
+msgstr ""
+
+# 8bf17ed272fd42518c78e38e0b837058
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:706
+msgid ":meth:`def FindCoincidentNodes <smeshBuilder.Mesh.FindCoincidentNodes>`"
+msgstr ""
+
+# 4f00e1e07330450e9936d5cabfdf8f06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:708
+msgid ""
+":meth:`def FindCoincidentNodesOnPart "
+"<smeshBuilder.Mesh.FindCoincidentNodesOnPart>`"
+msgstr ""
+
+# b7d412d18b2d4d718a8b64ba8bc0e91d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:710
+msgid ":meth:`def MergeNodes <smeshBuilder.Mesh.MergeNodes>`"
+msgstr ""
+
+# fc7ba0fe671a4280823c3e73ca014808
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:712
+msgid ":meth:`def FindEqualElements <smeshBuilder.Mesh.FindEqualElements>`"
+msgstr ""
+
+# 81a42d4e1f3b446fa353b41336b9aa47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:714
+msgid ":meth:`def MergeElements <smeshBuilder.Mesh.MergeElements>`"
+msgstr ""
+
+# 3a267717d10e4a3b8490766360a90eb6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:716
+msgid ":meth:`def MergeEqualElements <smeshBuilder.Mesh.MergeEqualElements>`"
+msgstr ""
+
+# ab91a1c63aa7423ea4f56f147369e5ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:718
+msgid ":meth:`def FindFreeBorders <smeshBuilder.Mesh.FindFreeBorders>`"
+msgstr ""
+
+# bf5a5c514e3a47fbb7a39672c0bf9268
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:720
+msgid ":meth:`def FillHole <smeshBuilder.Mesh.FillHole>`"
+msgstr ""
+
+# 9ebfd371264846fd93d66da4209af34e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:722
+msgid ""
+":meth:`def FindCoincidentFreeBorders "
+"<smeshBuilder.Mesh.FindCoincidentFreeBorders>`"
+msgstr ""
+
+# 854cdfbc46dd46adbed52889be4b0961
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:724
+msgid ""
+":meth:`def SewCoincidentFreeBorders "
+"<smeshBuilder.Mesh.SewCoincidentFreeBorders>`"
+msgstr ""
+
+# 2952bf3fb43a49fc9c67818cf07bf3d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:726
+msgid ":meth:`def SewFreeBorders <smeshBuilder.Mesh.SewFreeBorders>`"
+msgstr ""
+
+# a99e40b848264e7ca390eb4c52c72c17
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:728
+msgid ""
+":meth:`def SewConformFreeBorders "
+"<smeshBuilder.Mesh.SewConformFreeBorders>`"
+msgstr ""
+
+# 70e5c7cfce404fd6a69b8f327d0b4738
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:730
+msgid ":meth:`def SewBorderToSide <smeshBuilder.Mesh.SewBorderToSide>`"
+msgstr ""
+
+# a3e58b93634e4bbb8b6e70db7344793b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:732
+msgid ":meth:`def SewSideElements <smeshBuilder.Mesh.SewSideElements>`"
+msgstr ""
+
+# f19f69caa06d4df7bf33c51d0278bb14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:737
+msgid "Uniting triangles"
+msgstr ""
+
+# afe2ce2d2f1443ebabb0a4f7f6860598
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:741
+msgid ":meth:`def DeleteDiag <smeshBuilder.Mesh.DeleteDiag>`"
+msgstr ""
+
+# 4c03aa5fedad421a9f0581d9602bcef8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:743
+msgid ":meth:`def TriToQuad <smeshBuilder.Mesh.TriToQuad>`"
+msgstr ""
+
+# b2a4a85adc744066ba34e7f63b42ca2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:745
+msgid ":meth:`def TriToQuadObject <smeshBuilder.Mesh.TriToQuadObject>`"
+msgstr ""
+
+# bbf7eac775cb45a689f227964a979dc2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:750
+msgid "Cutting elements"
+msgstr ""
+
+# 92ea318045ff46b8b4eaf49171e75f31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:754
+msgid ":meth:`def InverseDiag <smeshBuilder.Mesh.InverseDiag>`"
+msgstr ""
+
+# 9e4170fd36f0401bab37ec3cfe57c868
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:756
+msgid ":meth:`def QuadToTri <smeshBuilder.Mesh.QuadToTri>`"
+msgstr ""
+
+# 023be8af89b7452fb59b1f46881c7639
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:758
+msgid ":meth:`def QuadToTriObject <smeshBuilder.Mesh.QuadToTriObject>`"
+msgstr ""
+
+# 940bdd067de04b9c95aa86b571b07055
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:760
+msgid ":meth:`def QuadTo4Tri <smeshBuilder.Mesh.QuadTo4Tri>`"
+msgstr ""
+
+# e63a1d9a987d4e03afa474bd0ed2a078
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:762
+msgid ":meth:`def SplitQuad <smeshBuilder.Mesh.SplitQuad>`"
+msgstr ""
+
+# ff3671a6290b41d9afb3bfa7c608693c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:764
+msgid ":meth:`def SplitQuadObject <smeshBuilder.Mesh.SplitQuadObject>`"
+msgstr ""
+
+# c29477f93ce549568696b7cb0fb4bdb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:766
+msgid ":meth:`def BestSplit <smeshBuilder.Mesh.BestSplit>`"
+msgstr ""
+
+# 9ca81aa1146f43a7a1984ee8ad125511
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:768
+msgid ""
+":meth:`def SplitVolumesIntoTetra "
+"<smeshBuilder.Mesh.SplitVolumesIntoTetra>`"
+msgstr ""
+
+# 5d2262b2b4514a099ce7d74a012108c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:770
+msgid ""
+":meth:`def SplitBiQuadraticIntoLinear "
+"<smeshBuilder.Mesh.SplitBiQuadraticIntoLinear>`"
+msgstr ""
+
+# 573170162eac4e5e883119812daa935f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:772
+msgid ""
+":meth:`def SplitHexahedraIntoPrisms "
+"<smeshBuilder.Mesh.SplitHexahedraIntoPrisms>`"
+msgstr ""
+
+# 4138c66fa27d40d1aa162e2617d3ad1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:774
+msgid ""
+":meth:`def SplitQuadsNearTriangularFacets "
+"<smeshBuilder.Mesh.SplitQuadsNearTriangularFacets>`"
+msgstr ""
+
+# cc61ba036c614a758cdb7bb96ca0203d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:776
+msgid ":meth:`def SplitHexaToTetras <smeshBuilder.Mesh.SplitHexaToTetras>`"
+msgstr ""
+
+# 1785c80335ba43edb7e621f0be17a09f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:778
+msgid ":meth:`def SplitHexaToPrisms <smeshBuilder.Mesh.SplitHexaToPrisms>`"
+msgstr ""
+
+# ef498fe64e9e4d1e980b62181c38df73
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:783
+msgid "Changing orientation of elements"
+msgstr ""
+
+# 021ec661a4e8415a940c810c165d5314
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:787
+msgid ":meth:`def Reorient <smeshBuilder.Mesh.Reorient>`"
+msgstr ""
+
+# 965fdd6ed4034fc792ae6c5c10ce94e5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:789
+msgid ":meth:`def ReorientObject <smeshBuilder.Mesh.ReorientObject>`"
+msgstr ""
+
+# d98cbd13f00445449dbbce77ea01109d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:791
+msgid ":meth:`def Reorient2D <smeshBuilder.Mesh.Reorient2D>`"
+msgstr ""
+
+# cd030f23da584d63be3dbd1d3cb3ec9c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:793
+msgid ":meth:`def Reorient2DBy3D <smeshBuilder.Mesh.Reorient2DBy3D>`"
+msgstr ""
+
+# 6577aae1aa8c4c6b9a7dcaee56e03ac0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:798
+msgid "Smoothing"
+msgstr ""
+
+# 2dceedca7f2b4b928100ad7ecdf9730c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:802
+msgid ":meth:`def Smooth <smeshBuilder.Mesh.Smooth>`"
+msgstr ""
+
+# 60d8cc4f3f844039b28e6f20fac77818
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:804
+msgid ":meth:`def SmoothObject <smeshBuilder.Mesh.SmoothObject>`"
+msgstr ""
+
+# 407ef83cb149412e9a0d793aeb886e3c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:806
+msgid ":meth:`def SmoothParametric <smeshBuilder.Mesh.SmoothParametric>`"
+msgstr ""
+
+# 7f4b74f8ee6444a796c878e07c3c1c0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:808
+msgid ""
+":meth:`def SmoothParametricObject "
+"<smeshBuilder.Mesh.SmoothParametricObject>`"
+msgstr ""
+
+# 0561311ab1ec49b9bbf9ad43315e2ffa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:813
+msgid "Extrusion and Revolution"
+msgstr ""
+
+# b35f910325f94984a743685362d08967
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:817
+msgid ":meth:`def RotationSweepObjects <smeshBuilder.Mesh.RotationSweepObjects>`"
+msgstr ""
+
+# 1ce1f751992340f399961195f4f9f4d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:819
+msgid ":meth:`def RotationSweep <smeshBuilder.Mesh.RotationSweep>`"
+msgstr ""
+
+# 0bda5290f2424c7aae39ffb6e78e45d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:821
+msgid ":meth:`def RotationSweepObject <smeshBuilder.Mesh.RotationSweepObject>`"
+msgstr ""
+
+# bc677fcce521411db428433277b64bd9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:823
+msgid ""
+":meth:`def RotationSweepObject1D "
+"<smeshBuilder.Mesh.RotationSweepObject1D>`"
+msgstr ""
+
+# eabd288217db466a947aeefc138d48b5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:825
+msgid ""
+":meth:`def RotationSweepObject2D "
+"<smeshBuilder.Mesh.RotationSweepObject2D>`"
+msgstr ""
+
+# 57d64c25131c4b5b8fb2b69cf0d12330
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:827
+msgid ""
+":meth:`def ExtrusionSweepObjects "
+"<smeshBuilder.Mesh.ExtrusionSweepObjects>`"
+msgstr ""
+
+# 0158d23af530444397a3d6f10fb12059
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:829
+msgid ":meth:`def ExtrusionSweep <smeshBuilder.Mesh.ExtrusionSweep>`"
+msgstr ""
+
+# 867072ab3ce344029cd8ec07cbeaba43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:831
+msgid ":meth:`def ExtrusionByNormal <smeshBuilder.Mesh.ExtrusionByNormal>`"
+msgstr ""
+
+# 6947db5c2f2040c4914549fa963fc251
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:833
+msgid ":meth:`def ExtrusionSweepObject <smeshBuilder.Mesh.ExtrusionSweepObject>`"
+msgstr ""
+
+# 9c10d33f9c7545d2b74bce4e5af10c4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:835
+msgid ""
+":meth:`def ExtrusionSweepObject1D "
+"<smeshBuilder.Mesh.ExtrusionSweepObject1D>`"
+msgstr ""
+
+# cec00539b219405ebd95d14fac5fd20e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:837
+msgid ""
+":meth:`def ExtrusionSweepObject2D "
+"<smeshBuilder.Mesh.ExtrusionSweepObject2D>`"
+msgstr ""
+
+# 12a0e9f769aa487aa0e24e1f1be7dfcd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:839
+msgid ":meth:`def AdvancedExtrusion <smeshBuilder.Mesh.AdvancedExtrusion>`"
+msgstr ""
+
+# 39ac68db390949f1af51567f7ad6022c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:841
+msgid ""
+":meth:`def ExtrusionAlongPathObjects "
+"<smeshBuilder.Mesh.ExtrusionAlongPathObjects>`"
+msgstr ""
+
+# 153036bcd18442afb5f80202cc8df2a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:843
+msgid ":meth:`def ExtrusionAlongPathX <smeshBuilder.Mesh.ExtrusionAlongPathX>`"
+msgstr ""
+
+# 4089ff73c66f42ebbab51b1440ba8dee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:845
+msgid ":meth:`def ExtrusionAlongPath <smeshBuilder.Mesh.ExtrusionAlongPath>`"
+msgstr ""
+
+# a803a9e0f9dc4d20bbde0cf23870c48b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:847
+msgid ""
+":meth:`def ExtrusionAlongPathObject "
+"<smeshBuilder.Mesh.ExtrusionAlongPathObject>`"
+msgstr ""
+
+# 296bd20c43124438b3d992ce449e687b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:849
+msgid ""
+":meth:`def ExtrusionAlongPathObject1D "
+"<smeshBuilder.Mesh.ExtrusionAlongPathObject1D>`"
+msgstr ""
+
+# 1ae49f032c0843d1b6b33fccf6edb66d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:851
+msgid ""
+":meth:`def ExtrusionAlongPathObject2D "
+"<smeshBuilder.Mesh.ExtrusionAlongPathObject2D>`"
+msgstr ""
+
+# ebdddf705f594ae9b198a6c8b42ed733
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:856
+msgid "Convert to/from Quadratic Mesh"
+msgstr ""
+
+# 082d34e5587a4de1af651d1c2200d4cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:860
+msgid ":meth:`def ConvertToQuadratic <smeshBuilder.Mesh.ConvertToQuadratic>`"
+msgstr ""
+
+# 903b038e90554c6383d4fe5b57ccdf77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:862
+msgid ":meth:`def ConvertFromQuadratic <smeshBuilder.Mesh.ConvertFromQuadratic>`"
+msgstr ""
+
+# c90b906ed17147e38eed9d95dfbd0156
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:867
+msgid "Duplication of nodes and elements (to emulate cracks)"
+msgstr ""
+
+# 443144e7223a495896fda9a019a54c89
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:871
+msgid ":meth:`def DoubleElements <smeshBuilder.Mesh.DoubleElements>`"
+msgstr ""
+
+# 177d508a7b6b4450afbbd69d1c8e2f47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:873
+msgid ":meth:`def DoubleNodes <smeshBuilder.Mesh.DoubleNodes>`"
+msgstr ""
+
+# 565067fc88f64bd79c87db855cceb9d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:875
+msgid ":meth:`def DoubleNode <smeshBuilder.Mesh.DoubleNode>`"
+msgstr ""
+
+# a4ba2d6b744543df90ac95bc3a71803d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:877
+msgid ":meth:`def DoubleNodeGroup <smeshBuilder.Mesh.DoubleNodeGroup>`"
+msgstr ""
+
+# d09a6b85b2f440bda3d76d558bb85aef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:879
+msgid ":meth:`def DoubleNodeGroups <smeshBuilder.Mesh.DoubleNodeGroups>`"
+msgstr ""
+
+# 6ab0e0a9de4f47b58db11c9712f85510
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:881
+msgid ":meth:`def DoubleNodeElem <smeshBuilder.Mesh.DoubleNodeElem>`"
+msgstr ""
+
+# 745308aff91f4f74a5448462bdb0d268
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:883
+msgid ""
+":meth:`def DoubleNodeElemInRegion "
+"<smeshBuilder.Mesh.DoubleNodeElemInRegion>`"
+msgstr ""
+
+# e3a6b9baa7bb4fcb935ffbd705d695e0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:885
+msgid ":meth:`def DoubleNodeElemGroup <smeshBuilder.Mesh.DoubleNodeElemGroup>`"
+msgstr ""
+
+# 30af0bf0d14847c9868ae41f8d390caf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:887
+msgid ""
+":meth:`def DoubleNodeElemGroupInRegion "
+"<smeshBuilder.Mesh.DoubleNodeElemGroupInRegion>`"
+msgstr ""
+
+# ad4b709f35db437d9729704a400cfeb8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:889
+msgid ":meth:`def DoubleNodeElemGroups <smeshBuilder.Mesh.DoubleNodeElemGroups>`"
+msgstr ""
+
+# 0c85d6856abd4f0e869efd3c0319fcae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:891
+msgid ""
+":meth:`def DoubleNodeElemGroupsInRegion "
+"<smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion>`"
+msgstr ""
+
+# f4e3cd4e0d3b427b9f84253d4f7547cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:893
+msgid ""
+":meth:`def AffectedElemGroupsInRegion "
+"<smeshBuilder.Mesh.AffectedElemGroupsInRegion>`"
+msgstr ""
+
+# 3bd0bc3edb4d40db97c1ce1904b95a5c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:895
+msgid ""
+":meth:`def DoubleNodesOnGroupBoundaries "
+"<smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries>`"
+msgstr ""
+
+# 4bae5a9fa9224b4e83739225df7f26e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:897
+msgid ""
+":meth:`def CreateFlatElementsOnFacesGroups "
+"<smeshBuilder.Mesh.CreateFlatElementsOnFacesGroups>`"
+msgstr ""
+
+# aa9625f8cc0c4f98a10c561807b0fd45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:903
+msgid "Measurements"
+msgstr ""
+
+# ff946f026b284d88b6d33ba681bec784
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:908
+msgid ":meth:`def MinDistance <smeshBuilder.smeshBuilder.MinDistance>`"
+msgstr ""
+
+# f1597e5b1ace4148a543e81d917e16ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:910
+msgid ":meth:`def GetMinDistance <smeshBuilder.smeshBuilder.GetMinDistance>`"
+msgstr ""
+
+# 8c061732c84243e4999c791d5013c457
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:912
+msgid ":meth:`def BoundingBox <smeshBuilder.smeshBuilder.BoundingBox>`"
+msgstr ""
+
+# cb9496005d9e4bd08374be8da5b6d955
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:914
+msgid ":meth:`def GetBoundingBox <smeshBuilder.smeshBuilder.GetBoundingBox>`"
+msgstr ""
+
+# ab581091987f47edb3536661186299d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:916
+msgid ":meth:`def GetLength <smeshBuilder.smeshBuilder.GetLength>`"
+msgstr ""
+
+# ff8cba895f7e45c1b6a4125f7d2e6292
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:918
+msgid ":meth:`def GetArea <smeshBuilder.smeshBuilder.GetArea>`"
+msgstr ""
+
+# ac5dd4739c6349df9e30e171ba2112f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:920
+msgid ":meth:`def GetVolume <smeshBuilder.smeshBuilder.GetVolume>`"
+msgstr ""
+
+# c1b1cf4ab290495c9c7b6fb25c9964be
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:922
+msgid ":meth:`def GetFreeBorders <smeshBuilder.Mesh.GetFreeBorders>`"
+msgstr ""
+
+# 7fc75b85d5444815a8949d02a41ff011
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:924
+msgid ":meth:`def MinDistance <smeshBuilder.Mesh.MinDistance>`"
+msgstr ""
+
+# 7f62a709e8114689b264f1e22222e72f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:926
+msgid ":meth:`def GetMinDistance <smeshBuilder.Mesh.GetMinDistance>`"
+msgstr ""
+
+# 9f7b563371434850ba91c4076e1e7d47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:928
+msgid ":meth:`def BoundingBox <smeshBuilder.Mesh.BoundingBox>`"
+msgstr ""
+
+# 8dacd3983a9b4fe5abe7aeb8d1a3abd1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:930
+msgid ":meth:`def GetBoundingBox <smeshBuilder.Mesh.GetBoundingBox>`"
+msgstr ""
+
+# 49f25d14f1a8477b8e6634c2df06c9b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:932
+msgid ":meth:`def GetFunctor <smeshBuilder.Mesh.GetFunctor>`"
+msgstr ""
+
+# 40708bb5cb564f7386340e94bb58097f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:934
+msgid ":meth:`def FunctorValue <smeshBuilder.Mesh.FunctorValue>`"
+msgstr ""
+
+# 0852d20741c34483bdf302ae17b9d6cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:936
+msgid ":meth:`def GetLength <smeshBuilder.Mesh.GetLength>`"
+msgstr ""
+
+# 329b0f363aa14f87a300b439ce45950b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:938
+msgid ":meth:`def GetArea <smeshBuilder.Mesh.GetArea>`"
+msgstr ""
+
+# b67a175962b048b3a089e0cf1d4adce4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:940
+msgid ":meth:`def GetVolume <smeshBuilder.Mesh.GetVolume>`"
+msgstr ""
+
+# 8d7ea48673fb4afb828461ea52e24a51
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:942
+msgid ":meth:`def GetMaxElementLength <smeshBuilder.Mesh.GetMaxElementLength>`"
+msgstr ""
+
+# 9429fe5fd98f48e286ef1302ed70b7a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:944
+msgid ":meth:`def GetAspectRatio <smeshBuilder.Mesh.GetAspectRatio>`"
+msgstr ""
+
+# 70f0db05da184f5d8bede2bc579da788
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:946
+msgid ":meth:`def GetWarping <smeshBuilder.Mesh.GetWarping>`"
+msgstr ""
+
+# 3923e5251d964e39b30978e8603d0bfc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:948
+msgid ":meth:`def GetMinimumAngle <smeshBuilder.Mesh.GetMinimumAngle>`"
+msgstr ""
+
+# dfc93a88fbbb413f8823bc2638fe9f44
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:950
+msgid ":meth:`def GetTaper <smeshBuilder.Mesh.GetTaper>`"
+msgstr ""
+
+# 41be6e44395240ab88848d50ad80a7ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:952
+msgid ":meth:`def GetSkew <smeshBuilder.Mesh.GetSkew>`"
+msgstr ""
+
+# 6c64d11fb1b44b7d849aa9230061297f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:954
+msgid ":meth:`def GetMinMax <smeshBuilder.Mesh.GetMinMax>`"
+msgstr ""
+
+# d3a8a9a4e3a8464082cb87f04506af4b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:959
+msgid "Accessing SMESH object in study"
+msgstr ""
+
+# a4f60f9a61a548678577ca804acca3f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/modules.rst:963
+msgid ":class:`SMeshStudyTools <smeshstudytools.SMeshStudyTools>`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/numbering.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/numbering.po
new file mode 100644 (file)
index 0000000..f991868
--- /dev/null
@@ -0,0 +1,79 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7d95f1ef3f0043dc91d5d1fcd1bc2944
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:5
+msgid "Numbering"
+msgstr ""
+
+# 55030336e52e4a75b6de75c17d34234a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:8
+msgid "Displaying node numbers"
+msgstr ""
+
+# 41a96e3d00214dc1a02d8738d1614d86
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:10
+msgid ""
+"In MESH you can display the ID numbers of all nodes of your mesh in the "
+"viewer."
+msgstr ""
+
+# 14db4614a8be43f2930a7a8076b8c79c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:12
+msgid "**To display ID numbers of nodes:**"
+msgstr ""
+
+# 44fad65bf5834169aac7bc005875f768
+# c832343967d146d386a35f0c8d810f36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:31
+msgid "Display your mesh in the viewer"
+msgstr ""
+
+# 4e95ad9e84984429a8efda3ac16bcd06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:15
+msgid ""
+"Right-click on the mesh in the 3D viewer and from the associated pop-up "
+"menu choose **Numbering > Display Nodes #**."
+msgstr ""
+
+# fea8ed3d37404dfe891fca4f6f4e0100
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:25
+msgid "Displaying element numbers"
+msgstr ""
+
+# d8cbb7e23d5445bda5eb5162a8295072
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:27
+msgid ""
+"In MESH you can display the ID numbers of all meshing elements composing "
+"your mesh in the viewer."
+msgstr ""
+
+# f4e486d693f2479dad2992508f50dd17
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:29
+msgid "**To display ID numbers of elements:**"
+msgstr ""
+
+# 09f8d1e8761b4eb48e2ca099c2fd4d9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/numbering.rst:32
+msgid ""
+"Right-click on the mesh in the 3D viewer and from the associated pop-up "
+"menu choose **Numbering > Display Elements #**."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_faces.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_faces.po
new file mode 100644 (file)
index 0000000..90891f6
--- /dev/null
@@ -0,0 +1,47 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7fdfea347e1d4091902dadb3d3a0c400
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_faces.rst:5
+msgid "Over-constrained faces"
+msgstr ""
+
+# 6709c7e9a6414872af4c0b7160eea96c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_faces.rst:7
+msgid ""
+"This mesh quality control highlights faces sharing only one border with "
+"other faces. In other words, the faces having all their nodes on the free"
+" border of the 2D mesh are highlighted."
+msgstr ""
+
+# 13eece5073274b6eb53dedc1b6afb106
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_faces.rst:12
+msgid ""
+"The highlighted faces are actually over-constrained only if, at the "
+"computation time, the boundary conditions on the borders where the nodes "
+"are located are all Dirichlet boundary conditions."
+msgstr ""
+
+# 5da724c689594f42a4628042beacd200
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_faces.rst:20
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_over_constrained_faces` "
+"filter."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_volumes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_volumes.po
new file mode 100644 (file)
index 0000000..dec1720
--- /dev/null
@@ -0,0 +1,47 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1c76f867b1bd4081b8b10575d65b85d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_volumes.rst:5
+msgid "Over-constrained volumes"
+msgstr ""
+
+# 1ceac26032bb4804bf5dc6931e08b4f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_volumes.rst:7
+msgid ""
+"This mesh quality control highlights volumes sharing only one border with"
+" other volumes. In other words, the volumes having all their nodes on the"
+" external border of the mesh are highlighted."
+msgstr ""
+
+# c0c65d21a1cb48cca3707891a34f48e5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_volumes.rst:11
+msgid ""
+"The highlighted volumes are actually over-constrained only if, at the "
+"computation time, the boundary conditions on the borders where the nodes "
+"are located are all Dirichlet boundary conditions."
+msgstr ""
+
+# ae9f662b35ed4e059827aae378ff704a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/over_constrained_volumes.rst:19
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_over_constrained_volumes`"
+" filter."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/pattern_mapping.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/pattern_mapping.po
new file mode 100644 (file)
index 0000000..124763f
--- /dev/null
@@ -0,0 +1,355 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# c83938bf26c24f74be1043ebf14552d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:5
+msgid "Pattern mapping"
+msgstr ""
+
+# 8a5e89284905421995a2dfa8ab8b636f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:8
+msgid "About patterns"
+msgstr ""
+
+# 3550a3c3a90d4388bdc4d9a0e4db5435
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:10
+msgid ""
+"The pattern describes a mesh to generate: positions of nodes within a "
+"geometrical domain and nodal connectivity of elements. A pattern also "
+"specifies the so-called key-points, i.e. the nodes that will be located "
+"at geometrical vertices. The pattern description is stored in "
+"\\<pattern_name\\>.smp file."
+msgstr ""
+
+# 4009fa606e1c4c5b822b21dff8638900
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:16
+msgid "The smp file contains 4 sections:"
+msgstr ""
+
+# ff829ae0fb1b425f9cbc0ce1072a1e18
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:18
+msgid "The first line indicates the total number of pattern nodes (N)."
+msgstr ""
+
+# aeaaf04620194050a73e3d8250d3c138
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:19
+msgid ""
+"The next N lines describe nodes coordinates. Each line contains 2 node "
+"coordinates for a 2D pattern or 3 node coordinates for a 3D pattern. "
+"Note, that node coordinates of a 3D pattern can be defined only by "
+"relative values in range [0;1]."
+msgstr ""
+
+# fe96e67b421d4104beb3804802893513
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:20
+msgid ""
+"The key-points line contains the indices of the nodes to be mapped on "
+"geometrical vertices (for a 2D pattern only). Index n refers to the node "
+"described on the n-th line of section 2. The index of the first node is "
+"zero. For a 3D pattern the key points are not specified."
+msgstr ""
+
+# 929bbb6294a1412f8bf8a2da1370656c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:21
+msgid ""
+"The remaining lines describe nodal connectivity of elements, one line for"
+" each element. Each line holds indices of nodes forming an element. Index"
+" n refers to the node described on the n-th line of section 2. The first "
+"node index is zero. There must be 3 or 4 indices on each line for a 2D "
+"pattern (only liner 2d elements are allowed) and 4, 5, 6 or 8 indices for"
+" a 3D pattern (only linear 3d elements are allowed)."
+msgstr ""
+
+# 8d99602f52b64ed0b964677bbc0298dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:23
+msgid ""
+"A 2D pattern must contain at least one element and at least one key-"
+"point. All key-points must lie on boundaries."
+msgstr ""
+
+# 2d2b937722444868af3eecb314c6ffb2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:25
+msgid "A 3D pattern must contain at least one element."
+msgstr ""
+
+# 9fcf969a83554a03ac70a6c524e0b891
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:27
+msgid "An example of a simple 2D pattern smp file: ::"
+msgstr ""
+
+# e5d838bf9c4749f28f49887d4fc67251
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:53
+msgid "The image below provides a preview of the above pattern:"
+msgstr ""
+
+# 969369d4f4064f74b5dc08f623b51c2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:86
+msgid "Application of pattern mapping"
+msgstr ""
+
+# 13b96cae026945919cf0928e43d3a874
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:88
+msgid "**To apply pattern mapping to a geometrical object or mesh elements:**"
+msgstr ""
+
+# 2226092c305a4eb5b6e41c7a3e6f5364
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:90
+msgid ""
+"From the **Modification** menu choose the **Pattern Mapping** item or "
+"click **\"Pattern mapping\"** button in the toolbar."
+msgstr ""
+
+# a66db0a308a7471ebfe82759dfabc1b2
+# c5f77be0bb7945e4b192e923b3ff90de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:156
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 3833efecb3e34cfeb6abf4fcd97f6259
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:101
+msgid "For a **2D pattern**"
+msgstr ""
+
+# 327bfc771bd5449694eed60d94a3ab2b
+# 3a2a189ac97545edb3db1141f22eb91a
+# bb339f32b064419a8e6a36706724d88f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:107
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:132
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:161
+msgid "In this dialog you should specify:"
+msgstr ""
+
+# f3386e602bcc430199fd6750086acfda
+# 00d0e63ddd69486c8a050016482cb58c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:109
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:134
+msgid ""
+"**Pattern**, which can be loaded from .smp pattern file previously "
+"created manually or generated automatically from an existing mesh or sub-"
+"mesh."
+msgstr ""
+
+# d273cb2447914ebf8a2e7a45f89dc8c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:110
+msgid ""
+"**Face** with the number of vertices equal to the number of key-points in"
+" the pattern; the number of key-points on internal boundaries of the "
+"pattern must also be equal to the number of vertices on internal "
+"boundaries of the face;"
+msgstr ""
+
+# 9f35137dce154a16a95f2f049d5b906b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:111
+msgid "**Vertex** to which the first key-point should be mapped;"
+msgstr ""
+
+# ae8e1ab88d1d4e61b531267dfd113382
+# e743a5b4079947159adfb93032f4e82e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:114
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:139
+msgid ""
+"Alternatively, it is possible to select **Refine selected mesh elements**"
+" check-box and apply the pattern to"
+msgstr ""
+
+# b3e08b4388a049599b91cf902f892ce9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:116
+msgid "**Mesh Face** instead of a geometric Face"
+msgstr ""
+
+# a8e8314bc7cc4f16a36f549f4e86269f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:117
+msgid "and select **Node** instead of vertex."
+msgstr ""
+
+# f22bda8580604a1e935ba3dc6e2fd8d1
+# ae2fdff186ac4cae9048e55b25f781e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:120
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:144
+msgid "Additionally it is possible to:"
+msgstr ""
+
+# 570ae6cfabd3444d9ef4e6a5551fe8ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:122
+msgid ""
+"**Reverse the order of key-points**. By default, the vertices of a face "
+"are ordered counterclockwise."
+msgstr ""
+
+# 8fcd7c5b92f848259c2e2bf00700a498
+# fcd34acf310642af88b94d08ad830de1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:123
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:146
+msgid "Enable to **Create polygons near boundary**"
+msgstr ""
+
+# 85e13224561c48a596162c654b5a0ff1
+# 8833494d15ec41c19fd516ea914c9a6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:124
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:147
+msgid "and **Create polyhedrons near boundary**"
+msgstr ""
+
+# ab6bcc13f4324048a57537f0f6746707
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:127
+msgid "For a **3D pattern**"
+msgstr ""
+
+# 160ac2d750994567915eb090f16f67bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:135
+msgid "A 3D block (Solid) object."
+msgstr ""
+
+# 3087f731ee27452fba7f533a95d5402d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:136
+msgid "Two vertices that specify the order of nodes in the resulting mesh."
+msgstr ""
+
+# ab6ec47757184294ba600a3b5423dbe8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:141
+msgid "One or several **Mesh volumes** instead of a geometric 3D object"
+msgstr ""
+
+# b63f393d8fc94c34997745086bb0aae0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:142
+msgid "and select two **Nodes** instead of vertices."
+msgstr ""
+
+# 93ac12e1c9fe447da2eeb1cc9d1ac7a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:152
+msgid "Automatic Pattern Generation"
+msgstr ""
+
+# cd73e34977b247d8b807653626c727d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:154
+msgid ""
+"To generate a pattern automatically from an existing mesh or sub-mesh, "
+"click **New** button."
+msgstr ""
+
+# ba136583468742a4a003239056493edd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:164
+msgid ""
+"**Mesh or Sub-mesh**, which is a meshed geometrical face (for a 2D "
+"pattern) or a meshed solid block (for a 3D pattern). Mesh nodes lying on "
+"the face vertices become key-points of the pattern."
+msgstr ""
+
+# 3bc616cb8d0e4c2bb081863c545bcb59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:165
+msgid "A custom **Pattern Name**"
+msgstr ""
+
+# 05b4e73b55284d6fa4149d4bce33c4bc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:166
+msgid ""
+"Additionally, for a 2D pattern you may choose to **Project nodes on the "
+"face** to get node coordinates instead of using \"positions on face\" "
+"generated by the mesher (if there is any). The faces having a seam edge "
+"cannot be used for automatic pattern creation."
+msgstr ""
+
+# 5aa226ad57004fe883eb82ea6f121854
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:169
+msgid "When a pattern is created from an existing mesh, two cases are possible:"
+msgstr ""
+
+# 08018221e5e74d6fa964e3a1a86f3c55
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:171
+msgid ""
+"A sub-mesh on a face/solid is selected. The pattern is created from the "
+"2d/3d elements bound to the face/solid by the mesher. For a 2D pattern, "
+"the node coordinates are either \"positions on face\" computed by the "
+"mesher, or coordinates got by node projection on a geometrical surface, "
+"according to the user choice. For a 3D pattern, the node coordinates "
+"correspond to the nodes computed by the mesher."
+msgstr ""
+
+# 713cef75be124b7e867053d26fb54ca4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:172
+msgid ""
+"A mesh, where the main shape is a face/solid, is selected. The pattern is"
+" created from all 2d/3d elements in a mesh. In addition, if all mesh "
+"elements of a 2D pattern are built by the mesher, the user can select how"
+" to get node coordinates, otherwise all nodes are projected on a face "
+"surface."
+msgstr ""
+
+# c7724306e7b24801be95bf03e1b97916
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:176
+msgid "Mapping algorithm"
+msgstr ""
+
+# 589adef6a42f4539a64abcdb531fc54a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:178
+msgid "The mapping algorithm for a 2D case is as follows:"
+msgstr ""
+
+# b2c261010c374a469817645f0ff7db76
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:180
+msgid ""
+"The key-points are set counterclockwise in the order corresponding to "
+"their location on the pattern boundary. The first key-point is preserved."
+msgstr ""
+
+# dd71560977c54212a3888b9130bdabe5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:181
+msgid ""
+"The geometrical vertices corresponding to the key-points are found on "
+"face boundary. Here, \"Reverse order of key-points\" flag is set."
+msgstr ""
+
+# 9a9ccb3ee6154f5da4056cbcafd8db97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:186
+msgid ""
+"The boundary nodes of the pattern are mapped onto the edges of the face: "
+"a node located between two key-points on the pattern boundary is mapped "
+"on the geometrical edge limited by the corresponding geometrical "
+"vertices. The node position on the edge depends on its distance from the "
+"key-points."
+msgstr ""
+
+# d440ef0d237a48368183cd94c02ec404
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:191
+msgid ""
+"The coordinates of a non-boundary node in the parametric space of the "
+"face are defined in the following way. In the parametric space of the "
+"pattern, the  node lies at the intersection of two iso-lines. Both of "
+"them intersect the pattern boundary at two points at least. If the mapped"
+" positions of boundary nodes are known, it is possible to find, where the"
+" points at the intersection of iso-lines and boundaries are mapped. Then "
+"it is possible to find the direction of mapped iso-line section and, "
+"finally, the positions of two nodes on two mapped isolines. The eventual "
+"mapped position of the node is found as an average of the positions on "
+"mapped iso-lines."
+msgstr ""
+
+# e10562bb4b5c4b8085517de679144722
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:196
+msgid "The 3D algorithm is similar."
+msgstr ""
+
+# f6d719e6414d40dfa409606b1f05e1f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/pattern_mapping.rst:198
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_pattern_mapping` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/point_marker.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/point_marker.po
new file mode 100644 (file)
index 0000000..78e3ba8
--- /dev/null
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 963e7da94a48431d9383310f5d9ea57a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:5
+msgid "Point Marker"
+msgstr ""
+
+# 10cc3fcf74624111a0478fc8b51ab83d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:7
+msgid ""
+"You can change the representation of points in the 3D viewer either by "
+"selecting one of the predefined shapes or by loading a custom texture "
+"from an external file."
+msgstr ""
+
+# 203e3a9b996846788a38cad64719931d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:11
+msgid "Standard point markers"
+msgstr ""
+
+# a18ec3d475b94b0780689f91c460df62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:13
+msgid ""
+"The Mesh module provides a set of predefined point marker shapes 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)."
+msgstr ""
+
+# 13ebf72623394864a00b4e6fa3197834
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:28
+msgid "Custom point markers"
+msgstr ""
+
+# e899af8d220045a48bd59af333ba576e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:30
+msgid ""
+"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 a sequence of \"0\" and \"1\" symbols,"
+" where \"1\" symbol means an opaque pixel and \"0\" symbol means a "
+"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\"."
+msgstr ""
+
+# ceac257a415b40cdba2e44cb9637115a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/point_marker.rst:39
+msgid "Here is a texture file sample: ::"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/prism_3d_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/prism_3d_algo.po
new file mode 100644 (file)
index 0000000..e9bbc69
--- /dev/null
@@ -0,0 +1,155 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5883c75425df4f2c89c1427bfb185d89
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:5
+msgid "Extrusion 3D meshing algorithm"
+msgstr ""
+
+# 35b4ce80b6cb4ed6bd932df431fce354
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:7
+msgid ""
+"Extrusion 3D algorithm can be used for meshing prisms, i.e. 3D shapes "
+"defined by two opposing faces having the same number of vertices and "
+"edges. These two faces should be connected by quadrangle \"side\" faces."
+msgstr ""
+
+# 55f761ace9d54d8b9373b6a3f76e397b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:17
+msgid ""
+"The prism is allowed to have sides composed of several faces. (A prism "
+"side is a row of faces (or one face) connecting the corresponding edges "
+"of the top and base faces). However, a prism side can be split only "
+"vertically as indicated in the picture below."
+msgstr ""
+
+# bbcb105e95fd459db17209c5bb48d9d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:29
+msgid ""
+"In this picture, the left prism is suitable for meshing with 3D extrusion"
+" algorithm: it has six sides, two of which are split vertically. The "
+"right prism cannot be meshed with this algorithm because one of the prism"
+" sides is split horizontally (the splitting edge is highlighted)."
+msgstr ""
+
+# 9be47428a7a241ab88225a19cecbf013
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:35
+msgid ""
+"The algorithm can propagate 2D mesh not only between horizontal (i.e. "
+"base and top) faces of one prism but also between faces of prisms "
+"organized in a stack and between stacks sharing prism sides."
+msgstr ""
+
+# 4d04532881c84454a01e611fcddc14b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:45
+msgid ""
+"This picture shows four neighboring prism stacks, each comprising two "
+"prisms. The shown sub-mesh is used by the algorithm to mesh all eight "
+"prisms in the stacks."
+msgstr ""
+
+# 2913e96162ad409d937a3ece24f82772
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:49
+msgid ""
+"To use **Extrusion 3D** algorithm you need to assign algorithms and "
+"hypotheses of lower dimensions as follows. (A sample picture below shows "
+"algorithms and hypotheses used to mesh a cylinder with prismatic "
+"volumes)."
+msgstr ""
+
+# 4298d75d354f476b9551fc957558c147
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:57
+msgid ""
+"The **Global** algorithms and hypotheses to be chosen at "
+":ref:`create_mesh_anchor` are:"
+msgstr ""
+
+# 4e8e07e8e04741ffb136789ec959529e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:60
+msgid ""
+"1D algorithm and hypothesis that will be applied for meshing (logically) "
+"vertical edges of the prism (which connect the top and the base faces of "
+"the prism). In the sample picture above these are \"Regular_1D\" "
+"algorithm and \"Number of Segments\" hypothesis named \"Vertical Nb. "
+"Segments\"."
+msgstr ""
+
+# 1f459693925c48f8a6baeb2d3bea849b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:63
+msgid ""
+"The **Local** algorithms and hypotheses to be chosen at "
+":ref:`constructing_submeshes_page` are:"
+msgstr ""
+
+# 932d6d79dd0e493f865729fbb157f225
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:66
+msgid ""
+"1D and 2D algorithms and hypotheses that will be applied for meshing the "
+"top and the base prism :ref:`submesh_shape_section`. These faces can be "
+"meshed with any type of 2D elements: quadrangles, triangles, polygons or "
+"their mix. It is enough to define a sub-mesh on either the top or the "
+"base face. In the sample picture above, \"NETGEN_1D2D\" algorithm meshes "
+"\"bottom disk\" face with triangles. (1D algorithm is not assigned as "
+"\"NETGEN_1D2D\" does not require divided edges to create a 2D mesh.)"
+msgstr ""
+
+# e719ad1211954d938af134a7dbf6ae6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:68
+msgid ""
+"Optionally you can define a 1D sub-mesh on some vertical "
+":ref:`submesh_shape_section` of stacked prisms, which will override the "
+"global 1D hypothesis mentioned above. In the **Prism stacks** picture, "
+"the vertical division is not equidistant on the whole length because a "
+"\"Number Of Segments\" hypothesis with Scale Factor=3 is assigned to the "
+"highlighted edge."
+msgstr ""
+
+# 9d61602dd3b04b098d4c05e67c0eff66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:71
+msgid ""
+"If **Extrusion 3D** algorithm is assigned to a sub-mesh in a mesh with "
+"multiple sub-meshes, the described above approach may not work as "
+"expected. For example the bottom face may be meshed by other algorithm "
+"before **Extrusion 3D** have a chance to project a mesh from the base "
+"face. This thing can happen with vertical edges as well. All these can "
+"lead to either a meshing failure or to an incorrect meshing."
+msgstr ""
+
+# 0c81ba62aa31454f993160eff234b096
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:78
+msgid ""
+"In such a case, it's necessary to explicitly define algorithms that "
+"**Extrusion 3D** implicitly applies in a simple case:"
+msgstr ""
+
+# 532bac07503e476fa2a036de893f18f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:81
+msgid "assign :ref:`projection_1D2D` algorithm to the top face and"
+msgstr ""
+
+# 6ad4f99c143242ba9e518b5d726bf011
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:82
+msgid "assign a 1D algorithm to a group of all vertical edges."
+msgstr ""
+
+# e9c2922ee00c4aa1aefcc15a3d35e940
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/prism_3d_algo.rst:90
+msgid "**See Also** a sample TUI Script of :ref:`tui_prism_3d_algo`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/projection_algos.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/projection_algos.po
new file mode 100644 (file)
index 0000000..2c81855
--- /dev/null
@@ -0,0 +1,220 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# fc4d677b1c234a72b7e97451677ac8e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:5
+msgid "Projection Algorithms"
+msgstr ""
+
+# d55142e76e1a47fea92de81fe9bed3d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# cfa42355ba754e59aab936e85b474397
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:9
+msgid ""
+"Projection algorithms allow to define the mesh of a geometrical object by"
+" the projection of another already meshed geometrical object."
+msgstr ""
+
+# 374f2a20d98141a2a59f36b59b41defb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:13
+msgid ""
+"Source and target geometrical objects mush be topologically equal, i.e. "
+"they must have same number of sub-shapes, connected to corresponding "
+"counterparts."
+msgstr ""
+
+# d983865fc5a3497191fe16a3840ed44e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:25
+msgid "Projection 1D"
+msgstr ""
+
+# 0f52c911e7b04ab5b8f8190c5ebabdca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:27
+msgid ""
+"**Projection 1D** algorithm allows to define the mesh of an edge (or "
+"group of edges) by the projection of another already meshed edge (or "
+"group of edges)."
+msgstr ""
+
+# 77d34de361694c3fbc2a08934d6dbf6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:30
+msgid ""
+"To apply this algorithm select the edge to be meshed (indicated in the "
+"field **Geometry** of **Create mesh** dialog box), **Projection1D** in "
+"the list of 1D algorithms and click the **\"Add Hypothesis\"** button. "
+"The following dialog box will appear:"
+msgstr ""
+
+# 1050b73647ab4a068240b00b53a16e6b
+# ff3a3f91ceba41c4878ea2269f4e603b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:72
+msgid "In this dialog you can define"
+msgstr ""
+
+# 88fc0a02fd614150a1c8a42ebd1657d2
+# 939901da1425440cb61fccb741ae2d0f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:74
+msgid "the **Name** of the algorithm,"
+msgstr ""
+
+# bf02e08c729244fbac7ce0f14296fbed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:42
+msgid "the already meshed **Source Edge** and"
+msgstr ""
+
+# e3b6c7a5b7474f9789d0c62aff066ddf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:43
+msgid ""
+"the **Source Mesh** (It can be omitted only when projecting a sub-mesh on"
+" another one of the same Mesh)."
+msgstr ""
+
+# 6e32fb2a4af54f8582770d9d82d6317b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:44
+msgid ""
+"It could also be necessary to define the orientation of edges,  which is "
+"done by indicating the **Source Vertex** being the first point of the "
+"**Source Edge **and the **Target Vertex** being the first point of the "
+"edge being meshed."
+msgstr ""
+
+# c8e46baa569e4fffac0fa4394f58c333
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:47
+msgid ""
+"For a group of edges, **Source** and **Target** vertices should be shared"
+" by only one edge of the group. If **Source** and **Target** vertices are"
+" specified, the edges in the group must be connected. The source and "
+"target groups must contain equal number of edges and they must form "
+"topologically equal structures."
+msgstr ""
+
+# 622a00ba8f4d447a91e77ef24176f5f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:56
+msgid "Projection 2D"
+msgstr ""
+
+# f605d32ab7c8408380a00d5e24819df4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:59
+msgid ""
+"**Projection 2D** algorithm allows to define the mesh of a face (or group"
+" of faces) by the projection of another already meshed face (or group of "
+"faces). This algorithm works only if all edges of the target face have "
+"been discretized into the same number of segments as corresponding edges "
+"of the source face."
+msgstr ""
+
+# 7749ef98485b4e888475caa3e0b5f039
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:65
+msgid ""
+"To apply this algorithm select the face to be meshed (indicated in the "
+"field **Geometry** of **Create mesh** dialog box), **Projection 2D** in "
+"the list of 2D algorithms and click the **\"Add Hypothesis\"** button. "
+"The following dialog box will appear:"
+msgstr ""
+
+# e595e34f95eb4107a297b4194571b45f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:75
+msgid "the already meshed **Source Face** and"
+msgstr ""
+
+# cee42924eb494f4f8bba1b8d361d4e0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:76
+msgid ""
+"the **Source Mesh** (It can be omitted only when projecting a submesh on "
+"another one of the same Mesh)."
+msgstr ""
+
+# 592531ecb23d420991fa14c5b6e3ce1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:77
+msgid ""
+"It could also be necessary to define the orientation of mesh on the face,"
+" which is done by indicating two **Source Vertices**, which belong to the"
+" same edge of the **Source Face**, and two **Target Vertices**, which "
+"belong to the same edge of the face being meshed."
+msgstr ""
+
+# 40281f2e1c644a2daf59590833252903
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:80
+msgid ""
+"The groups of faces are suitable for this algorithm only if they contain "
+"an equal number of faces and form topologically equal structures."
+msgstr ""
+
+# eb51034c0f7548ebbd6794f8781377fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:87
+msgid "Projection 1D-2D"
+msgstr ""
+
+# 270173b13abd41daa4da8aa451695821
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:89
+msgid ""
+"**Projection 1D-2D** algorithm differs from :ref:`projection_2D` "
+"algorithm in one aspect: it generates mesh segments on edges of the face "
+"according to the projected 2D elements; thus it does not require the "
+"edges to be meshed by any other 1D algorithm; moreover it does not allow "
+"to mesh edges of the face using another algorithm via definition of sub-"
+"meshes."
+msgstr ""
+
+# 18d2ad31445f443c8292a8a3f1cf2b57
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:100
+msgid "Projection 3D"
+msgstr ""
+
+# bc8aac3fdc3c49b0bbd892361a56a049
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:102
+msgid ""
+"**Projection 3D** algorithm allows to define the mesh of a shape by the "
+"projection of another already meshed shape.  This algorithm works only if"
+" all faces and edges of the target shape have been meshed as 1D-2D "
+"Projections of the faces and edges of the source shape. Another "
+"limitation is that this algorithm currently works only on boxes."
+msgstr ""
+
+# a87c8f7ba61147e487a8da138be2c8ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:108
+msgid ""
+"To apply this algorithm select the solid to be meshed (indicated in the "
+"field **Geometry** of **Create mesh** dialog box), **Projection 3D** in "
+"the list of 3D algorithms and click the  button. The following dialog box"
+" will appear:"
+msgstr ""
+
+# 8e914dde7b6a4ebfb52d07991cfe52ab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:116
+msgid ""
+"In this menu you can define the **Name** of the algorithm, the already "
+"meshed source **3D shape** and the **Mesh** (It can be omitted only when "
+"projecting a submesh on another one from the same global Mesh). It could "
+"also be necessary to define the orientation of mesh on the shape, which "
+"is done by indicating two **Source Vertices**, which belong to the same "
+"edge of the source **3D Shape**, and two **Target Vertices**, which "
+"belong to the same edge of the source **3D Shape**."
+msgstr ""
+
+# 1b6d95a37c65466a872b4c90a5fb9b3d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/projection_algos.rst:124
+msgid "**See Also** a sample TUI Script of a :ref:`tui_projection`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/python_api.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/python_api.po
new file mode 100644 (file)
index 0000000..35fcb88
--- /dev/null
@@ -0,0 +1,8132 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 12:23+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 2ef015f4431d4aaea1f2248de4ecc737
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/python_api.rst:3
+msgid "Mesh Python interface"
+msgstr ""
+
+# bbc4e9fc55b649848fbdd0df0797e2a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/python_api.rst:6
+msgid "smeshstudytools module"
+msgstr ""
+
+# ed9efba7c29145e39b70545482dbec85
+#: smeshstudytools:1
+msgid ""
+"This module provides a new class :class:`SMeshStudyTools` to facilitate "
+"the use of mesh objects in Salome study."
+msgstr ""
+
+# 4bf86efe0029421ca8a9a090942174cb
+#: smeshstudytools.SMeshStudyTools:1
+msgid ""
+"This class provides several methods to manipulate mesh objects in Salome "
+"study. The parameter `studyEditor` defines a "
+":class:`~salome.kernel.studyedit.StudyEditor` object used to access the "
+"study. If :const:`None`, the method returns a "
+":class:`~salome.kernel.studyedit.StudyEditor` object on the current "
+"study."
+msgstr ""
+
+# 8842f72e1a054df99360c3d498d937b1
+#: smeshstudytools.SMeshStudyTools:9
+msgid ""
+"This instance attribute contains the underlying "
+":class:`~salome.kernel.studyedit.StudyEditor` object. It can be used to "
+"access the study but the attribute itself should not be modified."
+msgstr ""
+
+# 1aedc3f5c12c4e2482182c3f695e759c
+#: smeshstudytools.SMeshStudyTools.displayMeshObjectFromEntry:1
+msgid ""
+"Display the SMESH object associated to the specified entry (the entry is "
+"the identifier of an item in the objects browser)."
+msgstr ""
+
+# 767320f300c941829cdab8826ba737a4
+#: smeshstudytools.SMeshStudyTools.getMeshFromGroup:1
+msgid "Get the mesh item owning the mesh group `meshGroupItem`."
+msgstr ""
+
+# 578bef1d04fe424ab5b31f933f807e5d
+#: smeshstudytools.SMeshStudyTools.getMeshFromGroup:4
+msgid "Mesh group belonging to the searched mesh."
+msgstr ""
+
+# 7de81fdef5d447bbae53423ee5f0f56e
+#: smeshstudytools.SMeshStudyTools.getMeshFromGroup:6
+msgid "The SObject corresponding to the mesh, or None if it was not found."
+msgstr ""
+
+# e6b3f183ebd24795aa6d2a4ea3bd22ca
+#: smeshstudytools.SMeshStudyTools.getMeshObjectFromEntry:1
+msgid ""
+"Returns the MESH object associated to the specified entry, (the entry is "
+"the identifier of an item in the objects browser)."
+msgstr ""
+
+# 905792f5b717452eabd930cc0777474a
+#: smeshstudytools.SMeshStudyTools.getMeshObjectFromSObject:1
+msgid ""
+"Returns the SMESH object associated to the specified SObject, (the "
+"SObject is an item in the objects browser)."
+msgstr ""
+
+# 1c4a9e28c832436998b711f22b4c643b
+#: smeshstudytools.SMeshStudyTools.getMeshObjectSelected:1
+msgid "Returns the MESH object currently selected in the active study."
+msgstr ""
+
+# 8a023271efbf42799c4bf55b0e8c949d
+#: smeshstudytools.SMeshStudyTools.updateStudy:1
+msgid "This function updates the tools so that it works on the specified study."
+msgstr ""
+
+# d7d286c06a7f4a50b7dbc0742c19d1be
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/python_api.rst:11
+msgid "StdMeshersBuilder module"
+msgstr ""
+
+# 14d1354258c9401a981c9be32e8e34d3
+#: StdMeshersBuilder:1
+msgid "Python API for the standard meshing plug-in module."
+msgstr ""
+
+# c037456965c641c0874108d03f7c9cc1
+#: StdMeshersBuilder.COMPOSITE:1
+msgid ""
+"*Algorithm type* -- Composite segment 1D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_CompositeSegment`"
+msgstr ""
+
+# 069368fb1fbb4bf1bece225879596430
+#: StdMeshersBuilder.Hexa:1
+msgid ""
+"*Algorithm type* -- Hexahedron 3D (i-j-k) algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Hexahedron`"
+msgstr ""
+
+# 5d5613278457472fbf4dd155ba325791
+#: StdMeshersBuilder.MEFISTO:1
+msgid ""
+"*Algorithm type* -- Triangle MEFISTO 2D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO`"
+msgstr ""
+
+# 9ed7ab464ff54af0bf59f8eead6186bc
+#: StdMeshersBuilder.POLYGON:1
+msgid ""
+"*Algorithm type* -- Polygon Per Face 2D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace`"
+msgstr ""
+
+# fce9cff890cc49a996697568695d5a80
+#: StdMeshersBuilder.PYTHON:1
+msgid ""
+"*Algorithm type* -- Python 1D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Segment_Python`"
+msgstr ""
+
+# 5e3e3ba96e7d4af2887f07a1cd96c9a7
+#: StdMeshersBuilder.QUADRANGLE:1
+msgid ""
+"*Algorithm type* -- Quadrangle 2D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Quadrangle`"
+msgstr ""
+
+# 9fb47e7815f44ecca66aa4f0c8a6a0e1
+#: StdMeshersBuilder.QUAD_MA_PROJ:1
+msgid ""
+"*Algorithm type* -- Quadrangle (Medial Axis Projection) 1D-2D algorithm, "
+"see :class:`~StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D`"
+msgstr ""
+
+# 6f1e112163754794a2a4636b49d2a895
+#: StdMeshersBuilder.RADIAL_QUAD:1
+msgid ""
+"*Algorithm type* -- Radial Quadrangle 1D-2D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D`"
+msgstr ""
+
+# 0d5c44493e974442b4fdb8ae6827f35a
+#: StdMeshersBuilder.REGULAR:1
+msgid ""
+"*Algorithm type* -- Regular 1D algorithm, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Segment`"
+msgstr ""
+
+# 1555ec093ec040a08ead66e85210c3a5
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D:1
+msgid "Defines a Body Fitting 3D algorithm"
+msgstr ""
+
+# 489b5c63be6541a0b239bb24d5ae06a9
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D:3
+msgid "It is created by calling smeshBuilder.Mesh.BodyFitted(geom=0)"
+msgstr ""
+
+# 24b4181b87a6431494682f0b88a07fb0
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetAxesDirs:1
+msgid "Defines custom directions of axes of the grid"
+msgstr ""
+
+# 98e67b0873f84c7faaf31a098cc14659
+# ad1226c21ca74356b25a1dc07f6a4719
+# 2fbfb2a064724f5184895f4954412761
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetAxesDirs:3
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetAxesDirs:4
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetAxesDirs:5
+msgid "either SMESH.DirStruct or a vector, or 3 vector components"
+msgstr ""
+
+# 4fde3b6a79344887a11d096c9e63c9b1
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetFixedPoint:3
+msgid "Sets/unsets a fixed point. The algorithm makes a plane of the grid pass"
+msgstr ""
+
+# ed881006b0804ad28bca303e80f6d1c8
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetFixedPoint:2
+msgid ""
+"through the fixed point in each direction at which the grid is defined by"
+" spacing"
+msgstr ""
+
+# e86b5231264b45d7a64a7722a227e99e
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetFixedPoint:5
+msgid ""
+"coordinates of the fixed point. Either SMESH.PointStruct or a vertex or 3"
+" components of coordinates."
+msgstr ""
+
+# 1679f83b51154bb9b4ff9688e6eb4d0d
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetFixedPoint:7
+msgid "defines whether the fixed point is defined or removed."
+msgstr ""
+
+# 19774136c1a34fbca187a90a3d992470
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:1
+msgid "Defines \"Body Fitting parameters\" hypothesis"
+msgstr ""
+
+# 528fa380458f4ee59724509d0bad2a3c
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:3
+msgid ""
+"is definition of the grid along the X asix. It can be in either of two "
+"following forms:      - Explicit coordinates of nodes, e.g. [-1.5, 0.0, "
+"3.1] or range( -100,200,10)     - Functions f(t) defining grid spacing at"
+" each point on grid axis. If there are         several functions, they "
+"must be accompanied by relative coordinates of         points dividing "
+"the whole shape into ranges where the functions apply; points         "
+"coodrinates should vary within (0.0, 1.0) range. Parameter *t* of the "
+"spacing         function f(t) varies from 0.0 to 1.0 within a shape "
+"range."
+msgstr ""
+
+# 19d5f5799fe0407cac969556cf5cc0cd
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:3
+msgid ""
+"is definition of the grid along the X asix. It can be in either of two "
+"following forms:"
+msgstr ""
+
+# 8eb97e76efcd4732bbd655feb41428f8
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:6
+msgid ""
+"Explicit coordinates of nodes, e.g. [-1.5, 0.0, 3.1] or range( "
+"-100,200,10)"
+msgstr ""
+
+# 5a5a5efc092e4b518fe511905c966c2e
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:11
+msgid ""
+"Functions f(t) defining grid spacing at each point on grid axis. If there"
+" are"
+msgstr ""
+
+# 6dcd86c5872a4d90a278b65171e15733
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:8
+msgid ""
+"several functions, they must be accompanied by relative coordinates of "
+"points dividing the whole shape into ranges where the functions apply; "
+"points coodrinates should vary within (0.0, 1.0) range. Parameter *t* of "
+"the spacing function f(t) varies from 0.0 to 1.0 within a shape range."
+msgstr ""
+
+# 9d031be415dd4224ae105799ff0fefba
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:14
+msgid "Examples"
+msgstr ""
+
+# 4bc251f264234042bc0176b03e4d1e59
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:15
+msgid ""
+"\"10.5\" - defines a grid with a constant spacing [[\"1\", \"1+10*t\", "
+"\"11\"] [0.1, 0.6]] - defines different spacing in 3 ranges."
+msgstr ""
+
+# 4cdcf4cfd97a411681fc5928086c827d
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:18
+msgid "defines the grid along the Y asix the same way as *xGridDef* does."
+msgstr ""
+
+# e3c78486447147e5bffe6b3ace4dbff1
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:19
+msgid "defines the grid along the Z asix the same way as *xGridDef* does."
+msgstr ""
+
+# eb405d2b72b647768ad32cdc80b89f69
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:20
+msgid ""
+"(> 1.0) defines a minimal size of a polyhedron so that a polyhedron of "
+"size less than hexSize/sizeThreshold is not created."
+msgstr ""
+
+# ab249b66961a47ffae8a0a9b3242dca5
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetGrid:22
+msgid "enables implementation of geometrical edges into the mesh."
+msgstr ""
+
+# 597b5f6b282f4c688e02e6d94cb521f4
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetOptimalAxesDirs:2
+msgid "Automatically defines directions of axes of the grid at which"
+msgstr ""
+
+# fe9bd0b826504f30970704144590763c
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetOptimalAxesDirs:2
+msgid "a number of generated hexahedra is maximal"
+msgstr ""
+
+# 41c32111139540f8ad9f6e8e97b94bec
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.SetOptimalAxesDirs:4
+msgid "defines whether the axes mush be orthogonal"
+msgstr ""
+
+# b5977df3c9b34221a7b34b65c51c382b
+# 2d6e31719f8f45448f48eb1d08cb75ed
+# f3f3f886ba1e44e09ffd3acfe578f14a
+# 0bfd980eaf6143b098003ce84f131228
+# 7a5d4afc77c24756ac3e078ce200cbc5
+# 1a9c8760326d4be08d37b105e0a4901c
+# e44cc04123a54dbdb3a16de77f445cc6
+# a4ae24248ed24f4cbd151b881efe6b13
+# a667301ef2f14eccbe3f7b80cc8645d1
+# 5c937ed63fa24bbb8953b1b499082642
+# 07f0abdd67a5452ebeb9604876954b83
+# 119386cffc634ee696a66929e1867782
+# fb58c42e77ba4c78b3b787abe9d3d1bd
+# 78e68eeb6d4c47d18d3a7eb41123f3cf
+# bc8f743578a8425eb287a1da1acff67d
+# 7cb3f53e7b384655ad122dfaef02492c
+# f9baf387774b4316b673c0d4a6e875cb
+# 50257160ecac479d8a82001fa8a50dcb
+# 8974edaf26c440beb5f2ea7543a033eb
+# 687173152bf846de915d0be2a17d08f9
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Hexahedron.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D2D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D.algoType:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D.algoType:1
+msgid "type of algorithm used with helper function in smeshBuilder.Mesh class"
+msgstr ""
+
+# 5fa5c87d44df4075b887effd24d3f8f0
+# 4f5f35aa045240f4a0a99d568886824e
+# ea38f70d47df4178bee66407e0325e90
+# 77f759d51d914472a2cbe0d0422f1ae1
+# 245d546ae4b34d3e992c64a274c74d34
+# b4a11081a71d49b684630afb6aa1dbd2
+# 6526543d54e14b658fe1674c7cf6092a
+# 66b93e1e2d1144f68115d9f969e47e49
+# a5b4fc6a27124f939e5db6d192bcbbfe
+# 606c7fc57d0548f993f721abb42e0236
+# c68d559f17b64c409be7abef55f110a9
+# 1e22633f039c49d8b1090257bf783ad8
+# 428d8c2980954c06950b289f1f9e598a
+# d3d503d7916a4ed3a99468ff0cab172d
+# 36e2151181ae4a3994856081b3ca8082
+# 7b8cf061e3984b0db14f986afaa46c69
+# 8ae63a3d30034676b6021214173a0ecf
+# f9c50f9b9605499a88da85b80ed52b58
+# 1602fe29b9c3412e80c4b14703a706f2
+# f0105b5ffa414cddabe9c33781258b31
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Hexahedron.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D2D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D.docHelper:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D.docHelper:1
+msgid "doc string of the method"
+msgstr ""
+
+# cf21588ccbc44798b458afb5f2b8394c
+# b998b58ae8f044aea451440e04094b5f
+# 8325219c7f9a4a98ae084f70fadfa46e
+# adda49aa877844488e77d0605d355669
+# c64af4253ffb445482694eba627c30ad
+# 037a9ff6dfa2499b958916cba0d31176
+# 50047d4dc5374587bfc1ca0e00d7efea
+# bcdf79df7078434184998c122f338d6a
+# 2403cd8cc4444dc7a291d40849cc71e8
+# 48c253d8fd084dba95d4fb522d25c1f3
+# b3b749858c314d4b9b9aa0dff002a307
+# 426e0d58af19419c83a877b3b4f7f234
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Hexahedron.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.isDefault:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.isDefault:1
+msgid ""
+"flag pointing whether this algorithm should be used by default in dynamic"
+" method of smeshBuilder.Mesh class"
+msgstr ""
+
+# 0b18906968da4079b1af63be4a2e7b81
+# 3879fbe99c9845e8ab964adbc5df17d6
+# 08737636e4eb46b5bfe492ddffa49c80
+# cb03b7ea05ae47efb52abd7e1a1cc324
+# 16f978af0b7446229ae4903154c870ac
+# a3b8f08fa397436f98717fead6272d2d
+# 86f0ae833cba4e7491bc4ede0554a2db
+# 6ab22b97addc4001b28072b837bca18b
+# 5700dee3f2e64f1184b6804b2f0fc922
+# dd7dc71fb6b64f51aaad4ca5cc63ffcd
+# b6a2101571384400910780a60452430c
+# 3ff00695291d4f4eab59d16a85f4ebd8
+# b0f793ba186041e785c3ce052152845d
+# 82c82bdd8f9c4cf195ba8b13349e8b35
+# 903e4632fd6f4e23acc4805c9d4131af
+# 3a4f2b62668b4760953ba8bded0d349f
+# 3d24a6d566104fd2982f42ce7178531b
+# 1e7e4bf1350d404c91f9ff069554b317
+# 0955f46bc1b0469c8a93fbf95861e82a
+# 6f25fd896b614b0d98474e0d107e2cb9
+#: StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Hexahedron.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D2D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D.meshMethod:1
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D.meshMethod:1
+msgid "name of the dynamic method in smeshBuilder.Mesh class"
+msgstr ""
+
+# 660763b7fced4a79b721d1ce9ac2ba3c
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment:1
+msgid ""
+"Segment 1D algorithm for discretization of a set of adjacent edges as one"
+" edge."
+msgstr ""
+
+# c50e31b225db467995066bd190c19e8e
+#: StdMeshersBuilder.StdMeshersBuilder_CompositeSegment:3
+msgid ""
+"It is created by calling "
+"smeshBuilder.Mesh.Segment(smeshBuilder.COMPOSITE,geom=0)"
+msgstr ""
+
+# 00a93632a1a1478c919c15360f9d4c41
+#: StdMeshersBuilder.StdMeshersBuilder_Hexahedron:1
+msgid ""
+"Defines a hexahedron 3D algorithm It is created by calling "
+"smeshBuilder.Mesh.Hexahedron(geom=0)"
+msgstr ""
+
+# ec46269843334022a29b62e9e7d3fb50
+#: StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace:1
+msgid ""
+"Defines a Polygon Per Face 2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Polygon(geom=0)"
+msgstr ""
+
+# 3f12e061a32040cb8ff271361a23e2ba
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D:1
+msgid ""
+"Defines a Prism 3D algorithm, which is either \"Extrusion 3D\" or "
+"\"Radial Prism\" depending on geometry It is created by calling "
+"smeshBuilder.Mesh.Prism(geom=0)"
+msgstr ""
+
+# 069ae33e583045a481f20c5f4c544f30
+# 23b3635e31664613b36449f2f44e7325
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.Arithmetic1D:3
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.Arithmetic1D:2
+msgid ""
+"Defines \"Arithmetic1D\" hypothesis, specifying the distribution of "
+"segments"
+msgstr ""
+
+# b0f64972de2d4ce69d3fe62c8dc48a04
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.Arithmetic1D:2
+msgid ""
+"to build between the inner and the outer shells with a length that "
+"changes in arithmetic progression"
+msgstr ""
+
+# 012cc6b2beb9414c8d92328828138f48
+# b4334cb9ff8145aaaf8da5f0e9f19ab0
+# 457ef31114974bdca1c1def2af35c485
+# 109c30031ec54621afcc910ae4fc01c8
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.Arithmetic1D:5
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.GeometricProgression:5
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.Arithmetic1D:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.GeometricProgression:4
+msgid "the length of the first segment"
+msgstr ""
+
+# 63fd345964da48688689da16cbf13125
+# 9a667508a5f64eb3b7478632ddc60c80
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.Arithmetic1D:6
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.Arithmetic1D:5
+msgid "the length of the last  segment"
+msgstr ""
+
+# 8eb135abd79540c282bc3db8a3c9922c
+# 53158a24aa4e4ddd86dfc8681da5dad1
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.AutomaticLength:2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.AutomaticLength:1
+msgid "Defines \"AutomaticLength\" hypothesis, specifying the number of segments"
+msgstr ""
+
+# 1de40475b008489f97b750e06f6cb46d
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.AutomaticLength:2
+msgid "to build between the inner and outer shells"
+msgstr ""
+
+# 672c8824d4a945d6a93f4d2ea709697a
+# 07da7825c9044c6b896c2afeb2798d1c
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.AutomaticLength:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.AutomaticLength:3
+msgid "defines the quality of the mesh within the range [0-1]"
+msgstr ""
+
+# 3d9473c4376547a5843503fd455315ee
+# 04d6648fdc044deab12b866a1f501cda
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.GeometricProgression:3
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.GeometricProgression:2
+msgid ""
+"Defines \"GeometricProgression\" hypothesis, specifying the distribution "
+"of segments"
+msgstr ""
+
+# d47e7f80b9ae4fbd9a8a6637b0a75f80
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.GeometricProgression:2
+msgid ""
+"to build between the inner and the outer shells with a length that "
+"changes in Geometric progression"
+msgstr ""
+
+# be6a7df81d454f5581235b624f817ce3
+# 533f531d15864d0d8924565c23b0e76b
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.GeometricProgression:6
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.GeometricProgression:5
+msgid "the common ratio of the geometric progression"
+msgstr ""
+
+# 0185eacdeefc4eb8bc35bc854e1a90ba
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.Get3DHypothesis:1
+msgid "3D hypothesis holding the 1D one"
+msgstr ""
+
+# 5e7b2928acb24e09820e1ac5368d9675
+# ae20835d81754a18bfcd26ef04e77920
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.LocalLength:2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.LocalLength:1
+msgid "Defines \"LocalLength\" hypothesis, specifying the segment length"
+msgstr ""
+
+# bf0860e4097246efb7900768f84f9156
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.LocalLength:2
+msgid "to build between the inner and the outer shells"
+msgstr ""
+
+# 70a21b2de07f4d0498527dd3a51f1a6b
+# fd09ee05eb8f40fb94a78a477f65420d
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.LocalLength:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.LocalLength:3
+msgid "the length of segments"
+msgstr ""
+
+# 4026d4fe780d4375aa35de017fe96ef8
+# 5863851f91a64bf894e64f69100792d2
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.LocalLength:5
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.LocalLength:4
+msgid "the precision of rounding"
+msgstr ""
+
+# 28329b84bde84ed7be9f74aef6574050
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfLayers:2
+msgid "Defines \"NumberOfLayers\" hypothesis, specifying the number of layers of"
+msgstr ""
+
+# ab8c5517ac6c44b0a42f733601aa29a7
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfLayers:2
+msgid "prisms to build between the inner and outer shells"
+msgstr ""
+
+# 577855c5d49e4d8aa3597a07be1e10dd
+# 68e5f7cc173e4100b8328c919a580621
+# 632a1d31d2674e4382220ac674e71e42
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfLayers:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfLayers:3
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:6
+msgid "number of layers"
+msgstr ""
+
+# fff61d4d527a49d2b46cf9431fb392b5
+# 4f387f2359a44f50a4c351f81013e98c
+# 7d1be84be0c4498e8a87141b45945066
+# 3a2ca7ae174543379856b9aa34715fec
+# 0e367d0dc4624a5eb2da9347fbb2c5f2
+# 3f7c50c28a264e7ab2fec3f1a8c59653
+# 12724e3a60294848b53347ba40baa8ef
+# 3172e1c1e302447e8da313d644145a9b
+# d36ce58d743a4cf48311c4b292c61293
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfLayers:5
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:9
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:11
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.Reduced:7
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TrianglePreference:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfLayers:4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.PythonSplit1D:5
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.SourceEdges:6
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.SourceFaces:6
+msgid ""
+"if ==true - searches for the existing hypothesis created with the same "
+"parameters, else (default) - creates a new one"
+msgstr ""
+
+# df20255a7e98437d8e0d4fe64facab50
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfSegments:2
+msgid ""
+"Defines \"NumberOfSegments\" hypothesis, specifying the number of layers "
+"of"
+msgstr ""
+
+# 12d150dd0e6c4988a59e9edf107f505e
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfSegments:2
+msgid "prisms to build between the inner and the outer shells."
+msgstr ""
+
+# 874031bd8de247f5b4682e643f57966a
+# 176b474c831642a7b0480e2b8587f138
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfSegments:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfSegments:3
+msgid "the number of layers"
+msgstr ""
+
+# 086496a24a8e4f35a897ae6ee90a01f9
+# 5a8bbbf8bcde4a9ea62233c859878a93
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.NumberOfSegments:5
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfSegments:4
+msgid "the scale factor (optional)"
+msgstr ""
+
+# 8f162d69a2ac48d9ac15bf1ee0364097
+# f57c55e81e53407390e9b82ca6053e56
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.OwnHypothesis:2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.OwnHypothesis:2
+msgid ""
+"Private method creating a 1D hypothesis and storing it in the "
+"LayerDistribution"
+msgstr ""
+
+# 4de48505f4f14ee086b10305e704770f
+# 9440f79c7a1c47e88e714965c2bdac8e
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.OwnHypothesis:2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.OwnHypothesis:2
+msgid "hypothesis."
+msgstr ""
+
+# 8ad4bed0d4544240b5f99d10b67af58f
+# 82b41dad8d24482cb0a81c5c25116991
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.OwnHypothesis:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.OwnHypothesis:4
+msgid "the created hypothesis"
+msgstr ""
+
+# fb365e2dcbee439ca8510b8675657c89
+# a4374ebedf6c4967955173726bb9776f
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.StartEndLength:2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.StartEndLength:2
+msgid "Defines \"StartEndLength\" hypothesis, specifying distribution of segments"
+msgstr ""
+
+# 199b0d5a9688402f8256b447e3eb5322
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.StartEndLength:2
+msgid ""
+"to build between the inner and the outer shells as geometric length "
+"increasing"
+msgstr ""
+
+# d26e8cfbb9c4408b962a1606f4c74299
+# fba557a6a35d47f085916f45207cb5d3
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.StartEndLength:4
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.StartEndLength:4
+msgid "for the length of the first segment"
+msgstr ""
+
+# 8722f12d6cdd41439ceb61155607c53a
+#: StdMeshersBuilder.StdMeshersBuilder_Prism3D.StartEndLength:6
+msgid "end:   for the length of the last  segment"
+msgstr ""
+
+# 8fbda3fbec7a4362bee0060655bfacec
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D:1
+msgid ""
+"Defines a projection 1D algorithm It is created by calling "
+"smeshBuilder.Mesh.Projection1D(geom=0)"
+msgstr ""
+
+# ed249ba2591e4138b9553b4b5225ee91
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:3
+msgid "Defines \"Source Edge\" hypothesis, specifying a meshed edge, from where"
+msgstr ""
+
+# 6ea9b8697a3943019ee2e0deb95818ae
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:2
+msgid ""
+"a mesh pattern is taken, and, optionally, the association of vertices "
+"between the source edge and a target edge (to which a hypothesis is "
+"assigned)"
+msgstr ""
+
+# 9cdfb4c7c52d4013ab435bfda66b388b
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:5
+msgid "from which nodes distribution is taken"
+msgstr ""
+
+# 31f75e47791d4fb6b3c668023c55545e
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:6
+msgid "from which nodes distribution is taken (optional)"
+msgstr ""
+
+# 646c7992b13840d286d24cec8d3b851a
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:7
+msgid "a vertex of *edge* to associate with *tgtV* (optional)"
+msgstr ""
+
+# 3ecd4e462e8d4271b5623fd18f666943
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D.SourceEdge:8
+msgid ""
+"a vertex of *the edge* to which the algorithm is assigned, to associate "
+"with *srcV* (optional)"
+msgstr ""
+
+# 928bf523e3644512bdfa71e89f222435
+#: StdMeshersBuilder.StdMeshersBuilder_Projection1D2D:1
+msgid ""
+"Defines a projection 1D-2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Projection1D2D(geom=0)"
+msgstr ""
+
+# 6a497e950af74ec997a01f9fb19f5dab
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D:1
+msgid ""
+"Defines a projection 2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Projection2D(geom=0)"
+msgstr ""
+
+# 1f3bad678e6e4851923e59b5d2e7f98f
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:3
+msgid "Defines \"Source Face\" hypothesis, specifying a meshed face, from where"
+msgstr ""
+
+# cbed61d7d7e64acfbfde147e55e5cd65
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:2
+msgid ""
+"a mesh pattern is taken, and, optionally, the association of vertices "
+"between the source face and the target face (to which a hypothesis is "
+"assigned)"
+msgstr ""
+
+# 9fc4e83c61cf4616acc6a62919173fb8
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:5
+msgid "from which the mesh pattern is taken"
+msgstr ""
+
+# b3a8fafaacfa4fc588dd592a513f43d4
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:6
+msgid "from which the mesh pattern is taken (optional)"
+msgstr ""
+
+# 56436fd874694c69b2a376c776f92d2c
+# b51dfc6d85904d368192663886201890
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:7
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:9
+msgid "a vertex of *face* to associate with *tgtV1* (optional)"
+msgstr ""
+
+# aebe5b25727143ca97e4154801574c9f
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:8
+msgid ""
+"a vertex of *the face* to which the algorithm is assigned, to associate "
+"with *srcV1* (optional)"
+msgstr ""
+
+# f45c152fdf3e41dba5e0b48b319f548d
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:10
+msgid ""
+"a vertex of *the face* to which the algorithm is assigned, to associate "
+"with *srcV2* (optional)"
+msgstr ""
+
+# b35291648af14fe6a7969f5d08247201
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:11
+msgid ""
+"if ==true - forces the search for the existing hypothesis created with he"
+" same parameters, else (default) - forces the creation a new one"
+msgstr ""
+
+# 0eef2c30ecfd4abea0fe8e79115ad974
+#: StdMeshersBuilder.StdMeshersBuilder_Projection2D.SourceFace:14
+msgid "all association vertices must belong to one edge of a face"
+msgstr ""
+
+# 4b8e499e377546ddb38706142bc0abe8
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D:1
+msgid ""
+"Defines a projection 3D algorithm It is created by calling "
+"smeshBuilder.Mesh.Projection3D(geom=0)"
+msgstr ""
+
+# b3aa612b349e46b4a2ef112db3534708
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:3
+msgid ""
+"Defines the \"Source Shape 3D\" hypothesis, specifying a meshed solid, "
+"from where"
+msgstr ""
+
+# a91c77fc64bd470daaebbcc144b5ff9f
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:2
+msgid ""
+"the mesh pattern is taken, and, optionally, the  association of vertices "
+"between the source and the target solid  (to which a hipothesis is "
+"assigned)"
+msgstr ""
+
+# b149d21ec3db4cab9301eb78c5f7f558
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:5
+msgid "from where the mesh pattern is taken"
+msgstr ""
+
+# 59b893e4a3044b2ebae9630b8a6064bb
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:6
+msgid "from where the mesh pattern is taken (optional)"
+msgstr ""
+
+# d3bee3e64a29496ea1475439362a59fd
+# 187249c6995c41a6b47306030fa9692f
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:7
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:9
+msgid "a vertex of *solid* to associate with *tgtV1* (optional)"
+msgstr ""
+
+# 64e9350553f14bd988eba175791144c6
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:8
+msgid ""
+"a vertex of *the solid* where the algorithm is assigned, to associate "
+"with *srcV1* (optional)"
+msgstr ""
+
+# d214d3eab1c34164b85851eb27d01dee
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:10
+msgid ""
+"a vertex of *the solid* to which the algorithm is assigned,to associate "
+"with *srcV2* (optional)"
+msgstr ""
+
+# 4827589880604b1c8c041b40a8c65078
+#: StdMeshersBuilder.StdMeshersBuilder_Projection3D.SourceShape3D:14
+msgid "association vertices must belong to one edge of a solid"
+msgstr ""
+
+# 8a1326c1fc114cb7a95de009b080a028
+#: StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D:1
+msgid ""
+"Defines a Quadrangle (Medial Axis Projection) 1D-2D algorithm It is "
+"created by calling "
+"smeshBuilder.Mesh.Quadrangle(smeshBuilder.QUAD_MA_PROJ,geom=0)"
+msgstr ""
+
+# 0848dd488fd1434fbb0664f5efafbf60
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle:1
+msgid ""
+"Defines a quadrangle 2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Quadrangle(geom=0)"
+msgstr ""
+
+# fc6106bb30694dc881b2ea4d409344a0
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:18
+msgid "Defines \"QuadrangleParameters\" hypothesis"
+msgstr ""
+
+# 973af7bbf1c64f72ab40cbfa05b6735e
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:2
+msgid ""
+"quadType defines the algorithm of transition between differently "
+"descretized sides of a geometrical face:"
+msgstr ""
+
+# 95b3e7b0acf54bd48af535714cafd880
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:5
+msgid ""
+"QUAD_STANDARD - both triangles and quadrangles are possible in the "
+"transition"
+msgstr ""
+
+# f667dc2ae0a84e3d9df89aa392109990
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:6
+msgid "area along the finer meshed sides."
+msgstr ""
+
+# 145316c2a44a4455961c9969c02e429f
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:7
+msgid ""
+"QUAD_TRIANGLE_PREF - only triangles are built in the transition area "
+"along the"
+msgstr ""
+
+# 12f8d92615b54e55acf984f8878f4bf2
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:8
+msgid "finer meshed sides."
+msgstr ""
+
+# b2a158f284a0436090693da4a11b6ae3
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:10
+msgid ""
+"QUAD_QUADRANGLE_PREF - only quadrangles are built in the transition area "
+"along"
+msgstr ""
+
+# b3518f1b7a7748a2bd39a84aee6ad43d
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:10
+msgid ""
+"the finer meshed sides, iff the total quantity of segments on all four "
+"sides of the face is even (divisible by 2)."
+msgstr ""
+
+# d802c2cecaff4abc889f3909cfce8a13
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:12
+msgid ""
+"QUAD_QUADRANGLE_PREF_REVERSED - same as QUAD_QUADRANGLE_PREF but the "
+"transition"
+msgstr ""
+
+# ef1e1adb12d74b288e2690363cbaac34
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:13
+msgid "area is located along the coarser meshed sides."
+msgstr ""
+
+# 06fd1634905f46fa9136e4309080c1de
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:18
+msgid ""
+"QUAD_REDUCED - only quadrangles are built and the transition between the "
+"sides"
+msgstr ""
+
+# 498e8ac813de4fb08372ece12bdf1e79
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:15
+msgid ""
+"is made gradually, layer by layer. This type has a limitation on the "
+"number of segments: one pair of opposite sides must have the same number "
+"of segments, the other pair must have an even difference between the "
+"numbers of segments on the sides."
+msgstr ""
+
+# 9a237a78a95a45dba303c8be2266d4fb
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:20
+msgid ""
+"vertex of a trilateral geometrical face, around which triangles will be "
+"created while other elements will be quadrangles. Vertex can be either a "
+"GEOM_Object or a vertex ID within the shape to mesh"
+msgstr ""
+
+# 7a32e34ae7714c8bb3112103653b6a88
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:24
+msgid ""
+"list of shapes defining positions where nodes (enforced nodes) must be "
+"created by the mesher. Shapes can be of any type, vertices of given "
+"shapes define positions of enforced nodes. Only vertices successfully "
+"projected to the face are used."
+msgstr ""
+
+# a23fe1e20c3f4e4abd13b8961ebd987b
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:28
+msgid ""
+"list of points giving positions of enforced nodes. Point can be defined "
+"either as SMESH.PointStruct's ([SMESH.PointStruct(x1,y1,z1), "
+"SMESH.PointStruct(x2,y2,z2),...]) or triples of values ([[x1,y1,z1], "
+"[x2,y2,z2], ...]). In the case if the defined QuadrangleParameters() "
+"refer to a sole face, all given points must lie on this face, else the "
+"mesher fails."
+msgstr ""
+
+# f5bb3e0440e0450ebd40a8f033e04712
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadrangleParameters:34
+msgid ""
+"if *True* - searches for the existing hypothesis created with the same "
+"parameters, else (default) - creates a new one"
+msgstr ""
+
+# 147ffb0b66184ee8accdf622d2b1db7b
+# fd7155dad5ea49fab74874f748d416b5
+# 2d64aadeb06e4b91bac4d8b0dad91e47
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference:3
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.Reduced:5
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TrianglePreference:2
+msgid ""
+"Defines \"QuadrangleParams\" hypothesis with a type of quadrangulation "
+"that only"
+msgstr ""
+
+# f20a22af0b544a3395707d2ad0d1fafa
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference:2
+msgid ""
+"quadrangles are built in the transition area along the finer meshed "
+"sides, if the total quantity of segments on all four sides of the face is"
+" even."
+msgstr ""
+
+# 735743340e2e4df99f3f7184c35dc4ba
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference:5
+msgid "if True, transition area is located along the coarser meshed sides."
+msgstr ""
+
+# f3b1feba43a34214904f4c791c4f3add
+# db969b8a9ea141c38f31dd3f8fb33114
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference:7
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:8
+msgid "UseExisting: if ==true - searches for the existing hypothesis created with"
+msgstr ""
+
+# c79ad9d0018b4bd1996d49a2ca8922e2
+# bfdad63e73d24b2abe85ea3e16518951
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.QuadranglePreference:8
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:9
+msgid "the same parameters, else (default) - creates a new one"
+msgstr ""
+
+# 0a56f79b791345cda705921e6151629a
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.Reduced:2
+msgid ""
+"quadrangles are built and the transition between the sides is made "
+"gradually, layer by layer. This type has a limitation on the number of "
+"segments: one pair of opposite sides must have the same number of "
+"segments, the other pair must have an even difference between the numbers"
+" of segments on the sides."
+msgstr ""
+
+# 5390a906611c40049091b7f5eee5e51c
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TrianglePreference:2
+msgid "triangles are built in the transition area along the finer meshed sides."
+msgstr ""
+
+# ca8073e348894d6487fefbc93f8c5f24
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:1
+msgid ""
+"Defines \"QuadrangleParams\" hypothesis with QUAD_STANDARD type of "
+"quadrangulation"
+msgstr ""
+
+# 3fe1b7fd806243ee88841484c2ed53f2
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:3
+msgid ""
+"vertex of a trilateral geometrical face, around which triangles    will "
+"be created while other elements will be quadrangles.    Vertex can be "
+"either a GEOM_Object or a vertex ID within the    shape to mesh "
+"UseExisting: if ==true - searches for the existing hypothesis created "
+"with    the same parameters, else (default) - creates a new one"
+msgstr ""
+
+# e85cfc2f2b4847adb110ba6df4a46670
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:6
+msgid "vertex of a trilateral geometrical face, around which triangles"
+msgstr ""
+
+# c36e8e15e39e46d8a222956faf4c6a75
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.TriangleVertex:5
+msgid ""
+"will be created while other elements will be quadrangles. Vertex can be "
+"either a GEOM_Object or a vertex ID within the shape to mesh"
+msgstr ""
+
+# 650e50089e8d4043bba03174ac0b41d4
+#: StdMeshersBuilder.StdMeshersBuilder_Quadrangle.params:1
+msgid "hypothesis associated with algorithm"
+msgstr ""
+
+# 8bd3109ee4374afe846f966d31d8c3bc
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm:1
+msgid "Base class for algorithms supporting radial distribution hypotheses"
+msgstr ""
+
+# f2fdaec0c8e74c1da7a2e1e9e1498c11
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.Arithmetic1D:2
+msgid "with a length that changes in arithmetic progression"
+msgstr ""
+
+# 63482f5bfb534d38b466032de9566a3a
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.GeometricProgression:2
+msgid "with a length that changes in Geometric progression"
+msgstr ""
+
+# db1df12d4d3a4a61b265e9cf7f06aeed
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.Get2DHypothesis:1
+msgid "2D hypothesis holding the 1D one"
+msgstr ""
+
+# 3af1b93a4e6549ecafd97b0dfd5e561c
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfLayers:1
+msgid "Defines \"NumberOfLayers\" hypothesis, specifying the number of layers"
+msgstr ""
+
+# a962228395d24300830ff0a5b69bc794
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.NumberOfSegments:1
+msgid "Defines \"NumberOfSegments\" hypothesis, specifying the number of layers"
+msgstr ""
+
+# 499206fe78264ea3b7a8d8a4f6d924a2
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.StartEndLength:2
+msgid "as geometric length increasing"
+msgstr ""
+
+# 343b5b95079343a39c8f505d3b1c9d6a
+#: StdMeshersBuilder.StdMeshersBuilder_RadialAlgorithm.StartEndLength:5
+msgid "for the length of the last  segment"
+msgstr ""
+
+# 12cac955d7ca4b90a4cc42020e4e280e
+#: StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D:1
+msgid ""
+"Defines Radial Prism 3D algorithm It is created by calling "
+"smeshBuilder.Mesh.Prism(geom=0)"
+msgstr ""
+
+# f6a8b9b5f568422bb15ec887dc1846e5
+#: StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D:1
+msgid ""
+"Defines a Radial Quadrangle 1D-2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Quadrangle(smeshBuilder.RADIAL_QUAD,geom=0)"
+msgstr ""
+
+# 99d0e13bef93450aa7a8299d0965eaaf
+#: StdMeshersBuilder.StdMeshersBuilder_Segment:1
+msgid "Defines segment 1D algorithm for edges discretization."
+msgstr ""
+
+# 970ee9227fef41c7824025ff7680979a
+#: StdMeshersBuilder.StdMeshersBuilder_Segment:3
+msgid "It can be created by calling smeshBuilder.Mesh.Segment(geom=0)"
+msgstr ""
+
+# 609776fee061450ebfe16070dff05dba
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:1
+msgid ""
+"Defines \"Adaptive\" hypothesis to cut an edge into segments keeping "
+"segment size within the given range and considering (1) deflection of "
+"segments from the edge and (2) distance from segments to closest edges "
+"and faces to have segment length not longer than two times shortest "
+"distances to edges and faces."
+msgstr ""
+
+# f53a1f34e419466cadb0fd4480be9946
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:6
+msgid "defines the minimal allowed segment length"
+msgstr ""
+
+# 0fdb63f57f7f473a99d3f3b35fd576bf
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:7
+msgid "defines the maximal allowed segment length"
+msgstr ""
+
+# 36aa33bffd27452e9bac24dd74713296
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:8
+msgid "defines the maximal allowed distance from a segment to an edge"
+msgstr ""
+
+# 3a3ae88793894745a0b973e0516ce9dc
+# 87841599c67545c1bb2e19a93dfce20f
+# f0fb67290dfe4b7f8123e1a47baa859d
+# 4f2623e5c2d84ae6b25fa841ee64f675
+# e14bef6d6643447ab39a8658ced663f8
+# f06ff12259f946d5966e7d06485e904a
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:9
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:8
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:11
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:8
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.MaxSize:5
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:7
+msgid ""
+"if ==true - searches for an existing hypothesis created with the same "
+"parameters, else (default) - creates a new one"
+msgstr ""
+
+# 0fc4ee81c2f844b498b123a783269719
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Adaptive:12
+msgid "an instance of StdMeshers_Adaptive1D hypothesis"
+msgstr ""
+
+# 94afc121014a468c9155d45c9b29736b
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:2
+msgid ""
+"Defines \"Arithmetic1D\" hypothesis to cut an edge in several segments "
+"with a length"
+msgstr ""
+
+# c3e023bebc98411bacc7549ffa477e8c
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:2
+msgid "that changes in arithmetic progression"
+msgstr ""
+
+# 4b3d82b06cd04438985dc9efbe8df04f
+# a276ed1cbaa7430c91f33b0d31f9f24c
+# 3050f0f5302d4acf9e0bc79d096e3f81
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:3
+msgid "defines the length of the first segment"
+msgstr ""
+
+# 08814a9c67a44b43834fc131fb0f5489
+# 7f7a73ed5c964953b6770da2846877aa
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:5
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:4
+msgid "defines the length of the last  segment"
+msgstr ""
+
+# c3ab24f25a3e4cf5bfc68a222ffe885f
+# 2f962cbece3e4d6781f43716efebd0e3
+# a1b1b46e36534cb6b82b2e5123b874a0
+# 1b4d3125a718498d8ea0b21888887cf5
+# 89520ab22ca246f0906906e32cf18e90
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:6
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:9
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:6
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:5
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:5
+msgid ""
+"is a list of edges to mesh using reversed orientation. A list item can "
+"also be a tuple (edge, 1st_vertex_of_edge)"
+msgstr ""
+
+# 3690bfa5dce74043addff7bb1c041a70
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Arithmetic1D:11
+msgid "an instance of StdMeshers_Arithmetic1D hypothesis"
+msgstr ""
+
+# 7d260e53cb9f40d18bd1d8368cdbecb0
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.AutomaticLength:1
+msgid "Defines \"AutomaticLength\" hypothesis"
+msgstr ""
+
+# 201934b5f38146979568a5885c51b4f7
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.AutomaticLength:3
+msgid "for the fineness [0-1]"
+msgstr ""
+
+# 97e8effc2b624d4a94905a190f1bd67e
+# 5ed9f5774ecc4a45812ef67e447c41fa
+# 5993b765453348a4aa21453352a2012b
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.AutomaticLength:4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Deflection1D:4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:7
+msgid ""
+"if ==true - searches for an existing hypothesis created with the same "
+"parameters, else (default) - create a new one"
+msgstr ""
+
+# e3a3c7b43a5a4ddeb4483a9663b2df12
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Deflection1D:1
+msgid "Defines \"Deflection1D\" hypothesis"
+msgstr ""
+
+# 72bf1a0354654fbfb5ccef5bbb3c72a8
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Deflection1D:3
+msgid "for the deflection"
+msgstr ""
+
+# dfe341c50e3e445e86f4b41ed65e1800
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:5
+msgid "Defines \"FixedPoints1D\" hypothesis to cut an edge using parameter"
+msgstr ""
+
+# 34fa6464289844a6b746b277e2ba9c73
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:2
+msgid ""
+"on curve from 0 to 1 (additionally it is neecessary to check orientation "
+"of edges and create list of reversed edges if it is needed) and sets "
+"numbers of segments between given points (default values are 1)"
+msgstr ""
+
+# 5848451129f64329829c09777a8868bf
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:7
+msgid "defines the list of parameters on curve"
+msgstr ""
+
+# 2dbf581ce8c3498e8663e2fc4ea49369
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:8
+msgid "defines the list of numbers of segments"
+msgstr ""
+
+# 2cdc44aa178a4833a16fb23623bfe9dc
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.FixedPoints1D:14
+msgid "an instance of StdMeshers_FixedPoints1D hypothesis"
+msgstr ""
+
+# 5b4e22e058204f9cadea131d53f42c03
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:2
+msgid "Defines \"GeometricProgression\" hypothesis to cut an edge in several"
+msgstr ""
+
+# 42e4996269b04e7f8742cd6cb181a985
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:2
+msgid "segments with a length that changes in Geometric progression"
+msgstr ""
+
+# fc6fa2f8b58844708c91590c5c1b95ea
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:5
+msgid "defines the common ratio of the geometric progression"
+msgstr ""
+
+# 7c1ad7b2e1714292aef7988654b40bf3
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.GeometricProgression:11
+msgid "an instance of StdMeshers_Geometric1D hypothesis"
+msgstr ""
+
+# c29969643d26492ea8ed995b736e473d
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LengthNearVertex:1
+msgid "Defines \"SegmentLengthAroundVertex\" hypothesis"
+msgstr ""
+
+# 420996982ca64cbeb0ca8cd3e72ad0dc
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LengthNearVertex:3
+msgid "for the segment length"
+msgstr ""
+
+# 89bfcfc225ad436dba9b389c1ed6be4e
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LengthNearVertex:4
+msgid ""
+"for the length localization: the vertex index [0,1] | vertex object. Any "
+"other integer value means that the hypothesis will be set on the whole 1D"
+" shape, where Mesh_Segment algorithm is assigned."
+msgstr ""
+
+# c6bb5482ab4045f8b05a83d5d9d8f2b2
+# 911fea1f0c7b48b69b1e6c55fb7bac6a
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LengthNearVertex:7
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.MaxElementArea:4
+msgid ""
+"if ==true - searches for an  existing hypothesis created with the same "
+"parameters, else (default) - creates a new one"
+msgstr ""
+
+# 61a0d38373d643d29b4c1c7a6e3cf7dd
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength:1
+msgid ""
+"Defines \"LocalLength\" hypothesis to cut an edge in several segments "
+"with the same length"
+msgstr ""
+
+# cee1d02857ff4081ae5b105b7bc8c932
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength:3
+msgid "for the length of segments that cut an edge"
+msgstr ""
+
+# 68d68cc8d3564b02ba0c43c69e3f5784
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength:4
+msgid ""
+"if == true - searches for an  existing hypothesis created with the same "
+"parameters, else (default) - creates a new one"
+msgstr ""
+
+# df4ef495103f479fbedd9f336167b7cb
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength:6
+msgid ""
+"precision, used for calculation of the number of segments. The precision "
+"should be a positive, meaningful value within the range [0,1]. In "
+"general, the number of segments is calculated with the formula: nb = "
+"ceil((edge_length / l) - p) Function ceil rounds its argument to the "
+"higher integer. So, p=0 means rounding of (edge_length / l) to the higher"
+" integer, p=0.5 means rounding of (edge_length / l) to the nearest "
+"integer, p=1 means rounding of (edge_length / l) to the lower integer. "
+"Default value is 1e-07."
+msgstr ""
+
+# ef6c282c98d24218b24a3f3f7160863d
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.LocalLength:16
+msgid "an instance of StdMeshers_LocalLength hypothesis"
+msgstr ""
+
+# 229636a1df2a49e5a13cc84fa4788573
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.MaxSize:1
+msgid ""
+"Defines \"MaxSize\" hypothesis to cut an edge into segments not longer "
+"than given value"
+msgstr ""
+
+# d9c3678ca1954492b796aca8c500dcf9
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.MaxSize:3
+msgid ""
+"is optional maximal allowed length of segment, if it is omitted the "
+"preestimated length is used that depends on geometry size"
+msgstr ""
+
+# 686cd7e99504480ebad58c83eb451e54
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.MaxSize:8
+msgid "an instance of StdMeshers_MaxLength hypothesis"
+msgstr ""
+
+# b3504be92e0a48178b8c3c7f730d6abe
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:1
+msgid ""
+"Defines \"NumberOfSegments\" hypothesis to cut an edge in a fixed number "
+"of segments"
+msgstr ""
+
+# 66398640cbef42b68e0b31a4d2df880a
+# f3fc233d3ed54a14bfe9cb70b9d47d1a
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:3
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.PythonSplit1D:3
+msgid "for the number of segments that cut an edge"
+msgstr ""
+
+# 7fdadb1ea4ec4b579b32129b627a4283
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:4
+msgid "for the scale factor (optional)"
+msgstr ""
+
+# 3ba5cb734c314b9ea29aa4b502dcc7d8
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.NumberOfSegments:10
+msgid "an instance of StdMeshers_NumberOfSegments hypothesis"
+msgstr ""
+
+# 55dd594182f84885874e7df59fe0ae1e
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Propagation:3
+msgid "Defines \"Propagation\" hypothesis that propagates 1D hypotheses"
+msgstr ""
+
+# 03b256b99db64e04b8124e831752ff4b
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.Propagation:2
+msgid ""
+"from an edge where this hypothesis is assigned to on all other edges that"
+" are at the opposite side in case of quadrangular faces This hypothesis "
+"should be assigned to an edge to propagate a hypothesis from."
+msgstr ""
+
+# 15a171464d3a402fa876e1290b31a500
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.PropagationOfDistribution:3
+msgid "Defines \"Propagation of Node Distribution\" hypothesis that propagates"
+msgstr ""
+
+# 75668c86fff64871a69a5f84bd0a9827
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.PropagationOfDistribution:2
+msgid ""
+"distribution of nodes from an edge where this hypothesis is assigned to, "
+"to opposite edges of quadrangular faces, so that number of segments on "
+"all these edges will be the same, as well as relations between segment "
+"lengths."
+msgstr ""
+
+# 3a2d3e5b5a9448f9a2ae1a596e412005
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.QuadraticMesh:1
+msgid ""
+"Defines \"QuadraticMesh\" hypothesis, forcing construction of quadratic "
+"edges. If the 2D mesher sees that all boundary edges are quadratic, it "
+"generates quadratic faces, else it generates linear faces using medium "
+"nodes as if they are vertices. The 3D mesher generates quadratic volumes "
+"only if all boundary faces are quadratic, else it fails."
+msgstr ""
+
+# 2cb9226802bd4df887bc1a0d087cc914
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:1
+msgid ""
+"Defines \"StartEndLength\" hypothesis to cut an edge in several segments "
+"with increasing geometric length"
+msgstr ""
+
+# be274772b8454a658d31e07baf544de9
+#: StdMeshersBuilder.StdMeshersBuilder_Segment.StartEndLength:10
+msgid "an instance of StdMeshers_StartEndLength hypothesis"
+msgstr ""
+
+# 76012d3d2ff9448bb42fd5b4d8c313a5
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python:3
+msgid ""
+"Defines a segment 1D algorithm for discretization of edges with Python "
+"function"
+msgstr ""
+
+# b4b0cc44082d4aa69fd763e834e25baa
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python:2
+msgid ""
+"It is created by calling "
+"smeshBuilder.Mesh.Segment(smeshBuilder.PYTHON,geom=0)"
+msgstr ""
+
+# 78d1d00125904ec19e9e48c275a798c4
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.PythonSplit1D:1
+msgid "Defines \"PythonSplit1D\" hypothesis"
+msgstr ""
+
+# c7c88639db24496786080452e0d0307f
+#: StdMeshersBuilder.StdMeshersBuilder_Segment_Python.PythonSplit1D:4
+msgid "for the python function that calculates the length of all segments"
+msgstr ""
+
+# d547c98271ce4546853aef52f20e3c2e
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO:1
+msgid ""
+"Triangle MEFISTO 2D algorithm It is created by calling "
+"smeshBuilder.Mesh.Triangle(smeshBuilder.MEFISTO,geom=0)"
+msgstr ""
+
+# e09f098933e640e594676b483b1f314a
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.LengthFromEdges:1
+msgid "Defines \"LengthFromEdges\" hypothesis to build triangles"
+msgstr ""
+
+# 8cab223170024a7f9a113d5beb719693
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.LengthFromEdges:2
+msgid "based on the length of the edges taken from the wire"
+msgstr ""
+
+# a4f164e3e41146f5aa8c93217aa0266a
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.MaxElementArea:1
+msgid ""
+"Defines \"MaxElementArea\" hypothesis basing on the definition of the "
+"maximum area of each triangle"
+msgstr ""
+
+# 935dbd26fbb14373bb55ceef0689372e
+#: StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO.MaxElementArea:3
+msgid "for the maximum area of each triangle"
+msgstr ""
+
+# 9c32c3ef9a1149a494f005bca9b856a3
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D:1
+msgid "Defines a Use Existing Elements 1D algorithm"
+msgstr ""
+
+# d9c2f9be5b784a94ad003a5c7b628c12
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D:3
+msgid "It is created by calling smeshBuilder.Mesh.UseExisting1DElements(geom=0)"
+msgstr ""
+
+# f628365f70954e14a77619f2991faadf
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.SourceEdges:1
+msgid "Defines \"Source edges\" hypothesis, specifying groups of edges to import"
+msgstr ""
+
+# 4f51b380628747fd88b09fcd6cf3f709
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.SourceEdges:3
+msgid "list of groups of edges"
+msgstr ""
+
+# cbcbc778a830426ab731e10e24a499b0
+# ec351565be5e46d38b8104a90bb1d2a3
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.SourceEdges:4
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.SourceFaces:4
+msgid "if True, the whole mesh *groups* belong to is imported"
+msgstr ""
+
+# e373701fd07944a1a2f6695faa5d33d4
+# 4e89d75d8bff4774a21d474780c8b66e
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D.SourceEdges:5
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.SourceFaces:5
+msgid "if True, all groups of the mesh *groups* belong to are imported"
+msgstr ""
+
+# f2a4783105a1468c896366e921f82c24
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D:1
+msgid "Defines a Use Existing Elements 1D-2D algorithm"
+msgstr ""
+
+# 02835b5e0db4452f8a6652939b7e8499
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D:3
+msgid "It is created by calling smeshBuilder.Mesh.UseExisting2DElements(geom=0)"
+msgstr ""
+
+# 68e8e033208f41f19ada5fbe63eaea6f
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.SourceFaces:1
+msgid "Defines \"Source faces\" hypothesis, specifying groups of faces to import"
+msgstr ""
+
+# 6bdd3e9edf8a4a85a62df90980081ff7
+# 1a49fe0005324b5cb01e5d10dc5a7dbc
+#: StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D.SourceFaces:3
+#: smeshBuilder.Mesh.CreateFlatElementsOnFacesGroups:7
+msgid "list of groups of faces"
+msgstr ""
+
+# 27f09c2f23e44582b957b084e60a8440
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D:2
+msgid ""
+"Defines a stub 1D algorithm, which enables \"manual\" creation of nodes "
+"and"
+msgstr ""
+
+# 61bc9e0d4ad74bc8af3b1b84205bda80
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D:2
+msgid "segments usable by 2D algorithms"
+msgstr ""
+
+# 5385e1e5545d401f99640d5fae587267
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D:4
+msgid "It is created by calling smeshBuilder.Mesh.UseExistingSegments(geom=0)"
+msgstr ""
+
+# 7725a7ff60204f82b1b51f56af093f7a
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D:1
+msgid ""
+"Defines a stub 2D algorithm, which enables \"manual\" creation of nodes "
+"and faces usable by 3D algorithms"
+msgstr ""
+
+# ab7091440d8542789135e3a82c21fd8c
+#: StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D:4
+msgid "It is created by calling smeshBuilder.Mesh.UseExistingFaces(geom=0)"
+msgstr ""
+
+# 81eaaacb448e4a04931eaca4de3423d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/python_api.rst:16
+msgid "smeshBuilder module"
+msgstr ""
+
+# cc2071077fe7431699ced61701f4ad90
+#: smeshBuilder.AssureGeomPublished:1
+msgid ""
+"Private method. Add geom (sub-shape of the main shape) into the study if "
+"not yet there"
+msgstr ""
+
+# 8b642226be2443dcb380e3fdac9ece98
+#: smeshBuilder.DegreesToRadians:1
+msgid "Convert an angle from degrees to radians"
+msgstr ""
+
+# e874800d804942e9b7d50c64ad9af697
+#: smeshBuilder.FirstVertexOnCurve:1
+msgid "the first vertex of a geometrical edge by ignoring orientation"
+msgstr ""
+
+# 7231cf03559d4f64b82ad3042a31bbc7
+#: smeshBuilder.GetName:1
+msgid "object name"
+msgstr ""
+
+# a77bdb1e2d8f4359b37daf00c64ba995
+#: smeshBuilder.IsEqual:1
+msgid "Compare real values using smeshPrecisionConfusion as tolerance"
+msgstr ""
+
+# 663399986db64e6e812e471434476b83
+#: smeshBuilder.Mesh:1
+msgid ""
+"This class allows defining and managing a mesh. It has a set of methods "
+"to build a mesh on the given geometry, including the definition of sub-"
+"meshes. It also has methods to define groups of mesh elements, to modify "
+"a mesh (by addition of new nodes and elements and by changing the "
+"existing entities), to get information about a mesh and to export a mesh "
+"in different formats."
+msgstr ""
+
+# ad856877010c437c9b2ea37b045a077f
+#: smeshBuilder.Mesh.Add0DElement:1
+msgid "Create a 0D element on a node with given number."
+msgstr ""
+
+# 60413216d35244c7bec4973081678057
+# e7605f48221b439997dce94bfd738362
+#: smeshBuilder.Mesh.Add0DElement:3 smeshBuilder.Mesh.AddBall:3
+msgid "the ID of node for creation of the element."
+msgstr ""
+
+# 9395c6efc27b4a98ae6617ee78e448b8
+# 88506b1106ed4e06b3671ca983c14afa
+#: smeshBuilder.Mesh.Add0DElement:4 smeshBuilder.Mesh.Add0DElementsToAllNodes:9
+msgid "to add one more 0D element to a node or not"
+msgstr ""
+
+# d8645964a6034cd5b3ce2f1b1b0a0fff
+#: smeshBuilder.Mesh.Add0DElement:6
+msgid "the Id of the new 0D element"
+msgstr ""
+
+# 62d8c976c8ac48ba9b465510ab3f5e0f
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:1
+msgid ""
+"Create 0D elements on all nodes of the given elements except those nodes "
+"on which a 0D element already exists."
+msgstr ""
+
+# 6cdb298387ca47bbae25e38c6ff66678
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:4
+msgid ""
+"an object on whose nodes 0D elements will be created. It can be mesh, "
+"sub-mesh, group, list of element IDs or a holder of nodes IDs created by "
+"calling mesh.GetIDSource( nodes, SMESH.NODE )"
+msgstr ""
+
+# a8550a9c97c24e2c98d79129c263e6cd
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:7
+msgid ""
+"optional name of a group to add 0D elements created and/or found on nodes"
+" of *theObject*."
+msgstr ""
+
+# 725c19156e4345d8bba58ad5eb821051
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:11
+msgid ""
+"an object (a new group or a temporary SMESH_IDSource) holding     IDs of "
+"new and/or found 0D elements. IDs of 0D elements     can be retrieved "
+"from the returned object by calling GetIDs()"
+msgstr ""
+
+# 1294a3f90fe0496da7e2340f812693c3
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:14
+msgid "an object (a new group or a temporary SMESH_IDSource) holding"
+msgstr ""
+
+# d8371b5915714dbf8d5f4303ed3c9578
+#: smeshBuilder.Mesh.Add0DElementsToAllNodes:14
+msgid ""
+"IDs of new and/or found 0D elements. IDs of 0D elements can be retrieved "
+"from the returned object by calling GetIDs()"
+msgstr ""
+
+# 986599817f9b4d428d339e3888b5cf74
+#: smeshBuilder.Mesh.AddBall:1
+msgid "Create a ball element on a node with given ID."
+msgstr ""
+
+# 3a1a898c732b42bebc222f1581b3bc94
+#: smeshBuilder.Mesh.AddBall:4
+msgid "the bal diameter."
+msgstr ""
+
+# a266a51e143949ccbf89b5f8eb98be6f
+#: smeshBuilder.Mesh.AddBall:6
+msgid "the Id of the new ball element"
+msgstr ""
+
+# 0e88eaabfc234f348754af5a2515be72
+#: smeshBuilder.Mesh.AddEdge:2
+msgid "Create a linear or quadratic edge (this is determined"
+msgstr ""
+
+# 987f704a6ffa49d3a38a601b40437b91
+# 2f2d2a074b0a4071a4b17b7282295950
+#: smeshBuilder.Mesh.AddEdge:2 smeshBuilder.Mesh.AddVolume:2
+msgid "by the number of given nodes)."
+msgstr ""
+
+# ec7cba7b8fff4456aba5a1612816383e
+# ee2cec319e194274b091a06cfe633e91
+# 7e308293a4ed4078aa92853af22c32b0
+#: smeshBuilder.Mesh.AddEdge:4 smeshBuilder.Mesh.AddFace:4
+#: smeshBuilder.Mesh.AddVolume:4
+msgid ""
+"the list of node IDs for creation of the element. The order of nodes in "
+"this list should correspond to the description of MED. This description "
+"is located by the following link: http://www.code-"
+"aster.org/outils/med/html/modele_de_donnees.html#3."
+msgstr ""
+
+# 730956ad747c4ded9ca18b2372842859
+#: smeshBuilder.Mesh.AddEdge:10
+msgid "the Id of the new edge"
+msgstr ""
+
+# 049b31edb32e4776a89ea1349562d4c5
+#: smeshBuilder.Mesh.AddFace:1
+msgid ""
+"Create a linear or quadratic face (this is determined by the number of "
+"given nodes)."
+msgstr ""
+
+# 4d2df362600c4708b108fe726b3846ca
+# dca738271b57451d85713a558e1caf8b
+# 246efe2daae84905b1b7815c7fe64b10
+#: smeshBuilder.Mesh.AddFace:10 smeshBuilder.Mesh.AddPolygonalFace:5
+#: smeshBuilder.Mesh.AddQuadPolygonalFace:6
+msgid "the Id of the new face"
+msgstr ""
+
+# 3e5c902b4e2347eb9033954a846cd0e8
+#: smeshBuilder.Mesh.AddHypothesis:1
+msgid "Assign a hypothesis"
+msgstr ""
+
+# 8dc4a5a7de60448f859fd1e297bc811d
+#: smeshBuilder.Mesh.AddHypothesis:3
+msgid "a hypothesis to assign"
+msgstr ""
+
+# 4b629d89a2b44431996f840feb04a33f
+# 8d060d067ee44c12be90935348d9b339
+#: smeshBuilder.Mesh.AddHypothesis:4 smeshBuilder.Mesh.IsUsedHypothesis:4
+msgid "a subhape of mesh geometry"
+msgstr ""
+
+# 05cd8f67373b4ab580fa4b1249682bcc
+# 06b1f6b7863b4240a15936e4a530afa0
+#: smeshBuilder.Mesh.AddHypothesis:6 smeshBuilder.Mesh.RemoveHypothesis:6
+msgid "SMESH.Hypothesis_Status"
+msgstr ""
+
+# 62f74e1e74d34b02a7bab914bf3a9240
+#: smeshBuilder.Mesh.AddNode:1
+msgid "Add a node to the mesh by coordinates"
+msgstr ""
+
+# 733c72c6fa654be7908e3a5c46cab95b
+#: smeshBuilder.Mesh.AddNode:3
+msgid "Id of the new node"
+msgstr ""
+
+# 14cd480b28b0442e9fbe0ab728ed04d8
+#: smeshBuilder.Mesh.AddPolygonalFace:1
+msgid "Add a polygonal face to the mesh by the list of node IDs"
+msgstr ""
+
+# fa8909fa2e9e45b196356a1df3532fd4
+#: smeshBuilder.Mesh.AddPolygonalFace:3
+msgid "the list of node IDs for creation of the element."
+msgstr ""
+
+# 7d51e18ef5ba468ea6f751cba3ba30f9
+#: smeshBuilder.Mesh.AddPolyhedralVolume:1
+msgid "Create a volume of many faces, giving nodes for each face."
+msgstr ""
+
+# 32267ae5120743d78f91be2a0742c046
+#: smeshBuilder.Mesh.AddPolyhedralVolume:3
+msgid "the list of node IDs for volume creation face by face."
+msgstr ""
+
+# 8d2ad0e6ce7243e19fff852ac541a862
+#: smeshBuilder.Mesh.AddPolyhedralVolume:4
+msgid ""
+"the list of integer values, Quantities[i] gives the quantity of nodes in "
+"face number i."
+msgstr ""
+
+# 3065d36ca90f4299b990b9996ef3a2ac
+# bb3de0cd385f4bb5a9efe0d6af783e82
+# f6e92a05ff104a06aad5864b04dc8a00
+#: smeshBuilder.Mesh.AddPolyhedralVolume:7
+#: smeshBuilder.Mesh.AddPolyhedralVolumeByFaces:10
+#: smeshBuilder.Mesh.AddVolume:10
+msgid "the Id of the new volumic element"
+msgstr ""
+
+# f4eda9e76d1e454396f2c8d0645d4d41
+#: smeshBuilder.Mesh.AddPolyhedralVolumeByFaces:1
+msgid "Create a volume of many faces, giving the IDs of the existing faces."
+msgstr ""
+
+# 92326582283f47a98bae3857a6421cbc
+#: smeshBuilder.Mesh.AddPolyhedralVolumeByFaces:3
+msgid "the list of face IDs for volume creation."
+msgstr ""
+
+# e80671be78fc4c1392d6c29b65813355
+#: smeshBuilder.Mesh.AddPolyhedralVolumeByFaces:7
+msgid "The created volume will refer only to the nodes"
+msgstr ""
+
+# 7e3cd453d04c45718687615ae66cde3a
+#: smeshBuilder.Mesh.AddPolyhedralVolumeByFaces:8
+msgid "of the given faces, not to the faces themselves."
+msgstr ""
+
+# afd203f2f3684c238ee4c0c90ed1d411
+#: smeshBuilder.Mesh.AddQuadPolygonalFace:1
+msgid "Add a quadratic polygonal face to the mesh by the list of node IDs"
+msgstr ""
+
+# e13fb095ec554b1b9337259d149494e1
+#: smeshBuilder.Mesh.AddQuadPolygonalFace:3
+msgid ""
+"the list of node IDs for creation of the element; corner nodes follow "
+"first."
+msgstr ""
+
+# a770667503ba4eca81855dcbb5d2b586
+#: smeshBuilder.Mesh.AddVolume:2
+msgid "Create both simple and quadratic volume (this is determined"
+msgstr ""
+
+# 208483686cfa4c9c92866829bb8e3243
+# c62a3da1280445b9b27a158862301835
+#: smeshBuilder.Mesh.AdvancedExtrusion:1 smeshBuilder.Mesh.ExtrusionSweep:1
+msgid "Generate new elements by extrusion of the elements with given ids"
+msgstr ""
+
+# 35bd856f413e4e738d33aa2cb9523681
+#: smeshBuilder.Mesh.AdvancedExtrusion:3
+msgid "is ids of elements"
+msgstr ""
+
+# d2862da4e0ac4aa684f442b2ed61c0cd
+# 28b8bfd1077e4b10ab880af7d84a7dad
+# aa804cd9b4634a14b6057964b4201f22
+# 6f264ffc94fc44a79b9b0826aa119a79
+# e85d7a46e8ad4c11bc9b06a58a3e545c
+# 8bf7d912be8f4afcae5b425245b196b4
+#: smeshBuilder.Mesh.AdvancedExtrusion:4 smeshBuilder.Mesh.ExtrusionSweep:4
+#: smeshBuilder.Mesh.ExtrusionSweepObject:5
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:5
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:5
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:6
+msgid ""
+"vector or DirStruct or 3 vector components, defining the direction and "
+"value of extrusion for one step (the total extrusion length will be "
+"NbOfSteps * ||StepVector||)"
+msgstr ""
+
+# f23d7a88a8b945c481cb856136bd2784
+# 0146c97c22f245cbbe1893d939f70934
+# e46074c958094299802aecf36d27a553
+# 194ba16f7c8e474dba09cbdcfeaf5232
+# c8adb6f065a64a379e8c313a91ac4aeb
+# dec766ec1f234d80936249a2ab1d3035
+# 8f779544ff804cc1817497f92ea60c60
+# bb72277356a34d4da384f4faed738066
+#: smeshBuilder.Mesh.AdvancedExtrusion:7 smeshBuilder.Mesh.ExtrusionSweep:7
+#: smeshBuilder.Mesh.ExtrusionSweepObject:8
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:8
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:8
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:9 smeshBuilder.Mesh.RotationSweep:6
+#: smeshBuilder.Mesh.RotationSweepObjects:9
+msgid "the number of steps"
+msgstr ""
+
+# 205918ed37d843b9a20096d21f9b3ab7
+#: smeshBuilder.Mesh.AdvancedExtrusion:8
+msgid "sets flags for extrusion"
+msgstr ""
+
+# 2704c41547f84da788c318499518d6df
+#: smeshBuilder.Mesh.AdvancedExtrusion:9
+msgid "uses for comparing locations of nodes if flag EXTRUSION_FLAG_SEW is set"
+msgstr ""
+
+# c04ea863ca7b468a87e8c5dc89275dd3
+# 370e5b3d072a4cdfa182dcce2f1407a7
+# 78017bd134e9483282d1b542b08a3fc6
+# bd1d5fc7478347609e72bdd5ddf30ca7
+# 76cc3ae0a39642be87994eabda0599be
+# c2e7845111fa4263be289504f4493c36
+# 285387af061d497db1d09d819f5194b8
+# 15ec0ee8f9aa4a749c6545520a85c788
+# d6de86de5b3e4422a0b05b591511e04d
+# 2b4a19674e844d16b1abefb74135574e
+# 827eeff6455f4443ac5cb632460bee37
+# 1c6b6fff80d442baa3fad442f79270cf
+# 616870a33e384c1fb0638d2f85df10b2
+# bfe7d69eee0345e9955f4f8f1b245a5d
+# 1b63309c346d42de91d2aba9c7e58b1f
+# a87087c6c8014cfeb833a3a1861cbab3
+# 802799109bb54bc28e73f7c4bffd4ea3
+# becf266811084a739e4e1fe2e57cbca6
+# e094930dfa3a47c3945c52949d8d0643
+# d6aebd9f9b4e47caaef84974dec43b88
+# 37cfc21b3b3d4e599a5806028fac545a
+# 5b0ad9bcbf65477aab4f767d404ca848
+# d4a89dcfbb7f42d599f0633cd2304ab7
+#: smeshBuilder.Mesh.AdvancedExtrusion:11
+#: smeshBuilder.Mesh.ExtrusionAlongPath:14
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:15
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:15
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:15
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:19
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:17 smeshBuilder.Mesh.ExtrusionSweep:8
+#: smeshBuilder.Mesh.ExtrusionSweepObject:9
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:9
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:10
+#: smeshBuilder.Mesh.MirrorObjectMakeMesh:7 smeshBuilder.Mesh.Offset:5
+#: smeshBuilder.Mesh.RotateMakeMesh:6 smeshBuilder.Mesh.RotateObjectMakeMesh:6
+#: smeshBuilder.Mesh.RotationSweep:8 smeshBuilder.Mesh.RotationSweepObject:9
+#: smeshBuilder.Mesh.RotationSweepObject1D:9
+#: smeshBuilder.Mesh.RotationSweepObject2D:9
+#: smeshBuilder.Mesh.RotationSweepObjects:11 smeshBuilder.Mesh.ScaleMakeMesh:6
+#: smeshBuilder.Mesh.TranslateMakeMesh:5
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:5
+msgid "forces the generation of new groups from existing ones"
+msgstr ""
+
+# c6f08d5f4d2746e2a696c9e6db55f8e8
+# 558ff7b544d5494fa43f970f3a9195fb
+# 9fc69effeb484d66add307c83c675b92
+# 4bb433b1e84b43dd91abb7fdd98896bb
+# d45fcb2ba8af4e4da0cd98d5845a0a91
+# e578d79a91c24fd4b07d009e69499da6
+# 9f47a2ab0b9a494b96c96e2873185556
+# 3ebc0bf3cf3c4b34832b83990f4aae8c
+# 64bd4d8e7610400eaa23f10d3814710f
+# 3b7a097ca7c74d9c89a77e5ad4b83f82
+#: smeshBuilder.Mesh.AdvancedExtrusion:13
+#: smeshBuilder.Mesh.ExtrusionSweepObject:12
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:11
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:11 smeshBuilder.Mesh.Mirror:10
+#: smeshBuilder.Mesh.MirrorObject:10 smeshBuilder.Mesh.Rotate:9
+#: smeshBuilder.Mesh.RotateObject:9 smeshBuilder.Mesh.Translate:8
+#: smeshBuilder.Mesh.TranslateObject:8
+msgid ""
+"list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list "
+"otherwise"
+msgstr ""
+
+# 81e6d6937b1842b5bfa1065acef9ea45
+#: smeshBuilder.Mesh.AffectedElemGroupsInRegion:1
+msgid ""
+"Identify the elements that will be affected by node duplication (actual "
+"duplication is not performed. This method is the first step of "
+"DoubleNodeElemGroupsInRegion."
+msgstr ""
+
+# b2fa45d9e7194cbe88722361e4176810
+#: smeshBuilder.Mesh.AffectedElemGroupsInRegion:4
+msgid "list of groups of nodes or elements (edges or faces) to be replicated"
+msgstr ""
+
+# 23fdc41ddf1e4246beff663a7c5ce0d2
+# 6a6472c194f842c98727495d860a7958
+# 50994ed3605a4a08afc725520aecee85
+#: smeshBuilder.Mesh.AffectedElemGroupsInRegion:5
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:5
+#: smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion:5
+msgid "list of groups of nodes not to replicated"
+msgstr ""
+
+# 6e931eba709143eeb542202273071c28
+# 4b0e9a4278ea40aabceab43c628e3179
+# 6f4c549402ba47d2969c4a28c08a4cd0
+# ca3f0b93034542f8b464ed614d350c0d
+#: smeshBuilder.Mesh.AffectedElemGroupsInRegion:6
+#: smeshBuilder.Mesh.DoubleNodeElemGroupInRegion:6
+#: smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion:6
+#: smeshBuilder.Mesh.DoubleNodeElemInRegion:6
+msgid ""
+"shape to detect affected elements (element which geometric center located"
+" on or inside shape). The replicated nodes should be associated to "
+"affected elements."
+msgstr ""
+
+# 65733cda5abd4cffb7115656079b1d14
+#: smeshBuilder.Mesh.AffectedElemGroupsInRegion:10
+msgid "groups of affected elements in order:: volumes, faces, edges"
+msgstr ""
+
+# 129fd6650cd8407ab0a73f9f3f6fe9a2
+#: smeshBuilder.Mesh.AutomaticHexahedralization:1
+msgid "Compute an hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron"
+msgstr ""
+
+# f1298ac9818d4a1f97299f7aa0bf2900
+# 194f27be622c411082cab20fc7be4325
+# 12935433ee6441b7a69c9a2ceb37c93f
+# 5afd0837c7d448ae9ba3c62c17db4750
+# 6b507e7db209403f88a0cc6715bfdbb0
+# e1393127b658483eb344d6cd77f4211b
+# 56b6015520414f7fac373e5efb6b914c
+# d7105e675dec46458d384c48f893229f
+# a59bec7fe0574c4b89687886a9f7d6b1
+#: smeshBuilder.Mesh.AutomaticHexahedralization:5
+#: smeshBuilder.Mesh.AutomaticTetrahedralization:5 smeshBuilder.Mesh.Compute:9
+#: smeshBuilder.Mesh.GetAutoColor:3
+#: smeshBuilder.Mesh.HasDuplicatedGroupNamesMED:4
+#: smeshBuilder.Mesh.IsReadyToCompute:5 smeshBuilder.Mesh.RemoveElements:5
+#: smeshBuilder.Mesh.RemoveNodes:5 smeshBuilder.submeshProxy.Compute:4
+msgid "True or False"
+msgstr ""
+
+# 26212aecfcc643fb9dc511431753921d
+#: smeshBuilder.Mesh.AutomaticTetrahedralization:1
+msgid "Compute a tetrahedral mesh using AutomaticLength + MEFISTO + Tetrahedron"
+msgstr ""
+
+# 44e5e6a62ba648ed8136c051484bce9d
+#: smeshBuilder.Mesh.AutomaticTetrahedralization:3
+msgid "[0.0,1.0] defines mesh fineness"
+msgstr ""
+
+# bae80c6186134cc9aa30bfdd59e31a1d
+#: smeshBuilder.Mesh.BaryCenter:1
+msgid ""
+"Return XYZ coordinates of the barycenter of the given element If there is"
+" no element for the given ID - return an empty list"
+msgstr ""
+
+# 0bbaf5af89d14deeb47b5499201c2f69
+#: smeshBuilder.Mesh.BaryCenter:4
+msgid "a list of three double values"
+msgstr ""
+
+# 710c39a5976f45859c95931eb4b8e0fc
+#: smeshBuilder.Mesh.BestSplit:1
+msgid "Find a better splitting of the given quadrangle."
+msgstr ""
+
+# 2ffb2485312249b4963f7514252eba53
+#: smeshBuilder.Mesh.BestSplit:3
+msgid "the ID of the quadrangle to be splitted."
+msgstr ""
+
+# 5877680b443b4873b2cb7693a76e6d3d
+#: smeshBuilder.Mesh.BestSplit:4
+msgid ""
+"is a numerical functor, in terms of enum SMESH.FunctorType, used to "
+"choose a diagonal for splitting. Type SMESH.FunctorType._items in the "
+"Python Console to see all items. Note that not all items correspond to "
+"numerical functors."
+msgstr ""
+
+# 2f8f2d5c7e8444f9b253ca53546b0a71
+#: smeshBuilder.Mesh.BestSplit:9
+msgid ""
+"1 if 1-3 diagonal is better, 2 if 2-4     diagonal is better, 0 if error "
+"occurs."
+msgstr ""
+
+# fcacc9b664724d379dc230741a3aa4ca
+#: smeshBuilder.Mesh.BestSplit:11
+msgid "1 if 1-3 diagonal is better, 2 if 2-4"
+msgstr ""
+
+# 016ae8b51ea6484d8b1f463995d5e671
+#: smeshBuilder.Mesh.BestSplit:12
+msgid "diagonal is better, 0 if error occurs."
+msgstr ""
+
+# 4cfdc35358e04b03a6f610a05388e612
+#: smeshBuilder.Mesh.BodyFitted:1
+msgid "Creates Body Fitting 3D algorithm for volumes"
+msgstr ""
+
+# 5dd540f0b37e4a3a947339a0f9920658
+# edb3cb9c6f314d45983a230e671971c8
+# fa8543d4e97740008275f1a5b5ca5872
+# 80459811afc2464da2595e4a8aa3b322
+# f105c80638934ebcb2040d7f55b0e44c
+# 27debb5144924e0aa280b72fab12bbee
+# dd653fcc21104565a4b08d2f0f74f324
+# b5d21aefc36944c0927e692e545bc520
+# 77c5da85385e4e1ca749f784315c2c2c
+# 9df47d73e8db4356a0bb16cad4562032
+# 72ed269405ab44059aa1ee7c6ca2fca0
+# 40857df81e694809b1cffa69005a8da5
+# d6f56ada726d4c71bcbe98db7d9566b4
+# 0fa764e452294a2d83c31e768c024d10
+# 990e65e6aeec468eb2ce8baf7d4959e6
+#: smeshBuilder.Mesh.BodyFitted:3 smeshBuilder.Mesh.Hexahedron:3
+#: smeshBuilder.Mesh.Polygon:3 smeshBuilder.Mesh.Prism:3
+#: smeshBuilder.Mesh.Projection1D:3 smeshBuilder.Mesh.Projection1D2D:3
+#: smeshBuilder.Mesh.Projection2D:3 smeshBuilder.Mesh.Projection3D:3
+#: smeshBuilder.Mesh.Quadrangle:3 smeshBuilder.Mesh.Segment:3
+#: smeshBuilder.Mesh.Triangle:3 smeshBuilder.Mesh.UseExisting1DElements:3
+#: smeshBuilder.Mesh.UseExisting2DElements:3
+#: smeshBuilder.Mesh.UseExistingFaces:3 smeshBuilder.Mesh.UseExistingSegments:3
+msgid ""
+"This method is dynamically added to **Mesh** class by the meshing plug-"
+"in(s)."
+msgstr ""
+
+# c2326df2e38c44f792b1b4cc6173ec9d
+# b79f4d6f219444399fb7e4908e82a075
+# d48adec0cbdc4d04a3cba80df5d6186e
+# 97a323aefc0f46ec84e74ed2083b7588
+# 870d3b6a66144ef388a1aa5636e67bf2
+# a095e3c123a146e6b7f3a16e4eb6028a
+# b86b2ed95f3a40e1894ee32163fc07da
+# d2a650ca64044462ad220c516b40f043
+# b60f5d4904e546279a3e57b14a24acd1
+# 212c61ae591f4427a4337c661e22bbb8
+# 377bcd20c1174714b00014b54e40e236
+# 81ec2db20ce7416bb0f3f8263096964e
+# d883fe92afc54ce18106481085743645
+# fd6e90827c4f448fb0cd5b37b42cfa5d
+# 2100dfb147af491ea03c94eef666a4de
+#: smeshBuilder.Mesh.BodyFitted:5 smeshBuilder.Mesh.Hexahedron:5
+#: smeshBuilder.Mesh.Polygon:5 smeshBuilder.Mesh.Prism:5
+#: smeshBuilder.Mesh.Projection1D:5 smeshBuilder.Mesh.Projection1D2D:5
+#: smeshBuilder.Mesh.Projection2D:5 smeshBuilder.Mesh.Projection3D:5
+#: smeshBuilder.Mesh.Quadrangle:5 smeshBuilder.Mesh.Segment:5
+#: smeshBuilder.Mesh.Triangle:5 smeshBuilder.Mesh.UseExisting1DElements:5
+#: smeshBuilder.Mesh.UseExisting2DElements:5
+#: smeshBuilder.Mesh.UseExistingFaces:5 smeshBuilder.Mesh.UseExistingSegments:5
+msgid ""
+"If the optional *geom_shape* parameter is not set, this algorithm is "
+"global (applied to whole mesh). Otherwise, this algorithm defines a "
+"submesh based on *geom_shape* subshape."
+msgstr ""
+
+# 1c903af0d39e4e3dad0c89b24be600cf
+# 58396f2c5d0941808502ecef3fdfa39d
+# 89e592e157b4477caeb92232948f1ee1
+# 9d480752853848a0975cf50d917af9dd
+# 8952f9f790ed416e8073f2f784a910cc
+# 810dd5c8d89945398a14d2ce6071d84e
+# d75c3f72149e413486fdf000aa540ef4
+# 3e32bc095e654494ae946e404ffffaea
+# d192056b6a0f4dcead5f276380a204e0
+# 8466e4cb15d74dcd93ddc525071f2a39
+# 9f1105dcab2f4061acedf712134948ff
+# cbcbe6bfa6e441779d81d0c2b53e43cb
+# 82121354f04041dd84e87a8a5c8e75b6
+# 4a697e38b4bb4b95bc5d634c3bbc9210
+# 61780de35bdc4e849766a8665c0cec94
+#: smeshBuilder.Mesh.BodyFitted:8 smeshBuilder.Mesh.Hexahedron:8
+#: smeshBuilder.Mesh.Polygon:8 smeshBuilder.Mesh.Prism:8
+#: smeshBuilder.Mesh.Projection1D:8 smeshBuilder.Mesh.Projection1D2D:8
+#: smeshBuilder.Mesh.Projection2D:8 smeshBuilder.Mesh.Projection3D:8
+#: smeshBuilder.Mesh.Quadrangle:8 smeshBuilder.Mesh.Segment:8
+#: smeshBuilder.Mesh.Triangle:8 smeshBuilder.Mesh.UseExisting1DElements:8
+#: smeshBuilder.Mesh.UseExisting2DElements:8
+#: smeshBuilder.Mesh.UseExistingFaces:8 smeshBuilder.Mesh.UseExistingSegments:8
+msgid ""
+"type of algorithm to be created; allowed values are specified by classes "
+"implemented by plug-in (see below)"
+msgstr ""
+
+# 9cc61e07d7164d87b5d894d54a0cc782
+# 225e3dd1a4d34ff9804a8a8690ac8a52
+# fe2617948f4f44009d81e6dc6b823bf0
+# ca0e6f92e7cf4b2492f6f57ab2f8a8be
+# 1caa4eba59c04f328b6a91b3c6c2903c
+# d1cbbd0bc3a1477bb218e1c4dc23b787
+# c803ec4f57e64383bd32983ece1efdf0
+# 61b0a1d62b824d0bbf916119b23fc905
+# 8deb105c48cd47b580901ee4b25d6e98
+# ce90bc283fdb4c2daf034909b0e4f064
+# 9bbac7c78bed4cdcbcb98cefa0afcba1
+# 0ac28ae1e5f1492ebf0bc8dd7ad5fdd7
+# 50e5196960fc43088d3ab29772ca161c
+# 765bfab6521d4d7eb0e4e3be1c42fa61
+# e1af8429e2e545e28eec21489d532e5c
+#: smeshBuilder.Mesh.BodyFitted:9 smeshBuilder.Mesh.Hexahedron:9
+#: smeshBuilder.Mesh.Polygon:9 smeshBuilder.Mesh.Prism:9
+#: smeshBuilder.Mesh.Projection1D:9 smeshBuilder.Mesh.Projection1D2D:9
+#: smeshBuilder.Mesh.Projection2D:9 smeshBuilder.Mesh.Projection3D:9
+#: smeshBuilder.Mesh.Quadrangle:9 smeshBuilder.Mesh.Segment:9
+#: smeshBuilder.Mesh.Triangle:9 smeshBuilder.Mesh.UseExisting1DElements:9
+#: smeshBuilder.Mesh.UseExisting2DElements:9
+#: smeshBuilder.Mesh.UseExistingFaces:9 smeshBuilder.Mesh.UseExistingSegments:9
+msgid "if defined, the subshape to be meshed"
+msgstr ""
+
+# 68f911ad512042b4a6285aa88f8fca17
+#: smeshBuilder.Mesh.BodyFitted:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Cartesian_3D`"
+msgstr ""
+
+# 4085d3c0f2b848109948aee1e9cc7bb6
+# a9486953e6b7402baadeb49a7c5e0fd7
+#: smeshBuilder.Mesh.BoundingBox:1 smeshBuilder.smeshBuilder.BoundingBox:1
+msgid "Get bounding box of the specified object(s)"
+msgstr ""
+
+# 71b17d18ce6b4f3f97d0d21de438263b
+# 8235fb4f2a644850b2dbe3cce65e4989
+#: smeshBuilder.Mesh.BoundingBox:3 smeshBuilder.Mesh.GetBoundingBox:3
+msgid ""
+"single source object or list of source objects or list of nodes/elements "
+"IDs"
+msgstr ""
+
+# 8d64e7f2053847088f4f127b1ae04a71
+#: smeshBuilder.Mesh.BoundingBox:4
+msgid ""
+"if *objects* is a list of IDs, *True* value in this parameters specifies "
+"that *objects* are elements, *False* specifies that *objects* are nodes"
+msgstr ""
+
+# 59b8d41e9b2049efb00c98b745767f7a
+# 77aeda9898a04e12bf147fffc6e75fbe
+#: smeshBuilder.Mesh.BoundingBox:7 smeshBuilder.smeshBuilder.BoundingBox:5
+msgid ""
+"tuple of six values (minX, minY, minZ, maxX, maxY, maxZ) "
+"**GetBoundingBox()**"
+msgstr ""
+
+# a537005a5b9d47979929c05f8eaeda15
+#: smeshBuilder.Mesh.ChangeElemNodes:1
+msgid "Set new nodes for the given element."
+msgstr ""
+
+# 36898169610340a18bf9a620e210ce2e
+#: smeshBuilder.Mesh.ChangeElemNodes:3
+msgid "the element id"
+msgstr ""
+
+# 21b6219a1e944f449257d19dd1ca0f02
+#: smeshBuilder.Mesh.ChangeElemNodes:4
+msgid "nodes ids"
+msgstr ""
+
+# d33c68dbe23e4006ad1956f0b6bbac23
+#: smeshBuilder.Mesh.ChangeElemNodes:6
+msgid ""
+"If the number of nodes does not correspond to the type of element - "
+"return false"
+msgstr ""
+
+# e731f2bf01644c4ebface29a1d5eb581
+#: smeshBuilder.Mesh.Clear:1
+msgid ""
+"Remove all nodes and elements generated on geometry. Imported elements "
+"remain."
+msgstr ""
+
+# 43d4bb85669342ec965afe9692af55cf
+#: smeshBuilder.Mesh.ClearLastCreated:1
+msgid ""
+"Forget what nodes and elements were created by the last mesh edition "
+"operation"
+msgstr ""
+
+# 337f6843fdf848bf81ccb8161b213da6
+#: smeshBuilder.Mesh.ClearLog:1
+msgid ""
+"Clear the log of nodes and elements added or removed since the previous "
+"clear. Must be used immediately after GetLog if clearAfterGet is false."
+msgstr ""
+
+# 69dc1a51cd0d40118941c517bca60295
+#: smeshBuilder.Mesh.ClearSubMesh:1
+msgid "Remove all nodes and elements of indicated shape"
+msgstr ""
+
+# ef5f4ddea02f482c880cbe8e5828f8cf
+# 1f83fe014ef54d45975dcc4035acdcc2
+#: smeshBuilder.Mesh.ClearSubMesh:3 smeshBuilder.Mesh.Compute:7
+msgid "if *True*, Object browser is automatically updated (when running in GUI)"
+msgstr ""
+
+# 857622f9b8164097ba8110880cc6a93e
+#: smeshBuilder.Mesh.ClearSubMesh:4
+msgid "the ID of a sub-shape to remove elements on"
+msgstr ""
+
+# bcf73c75711a44ac8ac2ff512325f48c
+#: smeshBuilder.Mesh.Compute:1
+msgid "Compute the mesh and return the status of the computation"
+msgstr ""
+
+# 043ddc61ba9d4e48adcdc7b1b94d666f
+#: smeshBuilder.Mesh.Compute:3
+msgid "geomtrical shape on which mesh data should be computed"
+msgstr ""
+
+# 8624bb7c060e4ecd81652d8c183fd92c
+#: smeshBuilder.Mesh.Compute:4
+msgid ""
+"if True and the mesh has been edited since a last total re-compute and "
+"that may prevent successful partial re-compute, then the mesh is cleaned "
+"before Compute()"
+msgstr ""
+
+# 639212e7b82a4ea4974c145288eb20f7
+#: smeshBuilder.Mesh.ConvertFromQuadratic:1
+msgid ""
+"Convert the mesh from quadratic to ordinary, deletes old quadratic "
+"elements, replacing them with ordinary mesh elements with the same id."
+msgstr ""
+
+# 6356163ae0b444c4899d91dde3590811
+#: smeshBuilder.Mesh.ConvertFromQuadratic:5
+msgid "a group or a sub-mesh to convert;"
+msgstr ""
+
+# 9343f4e468834c27948b431b1bbf9f65
+#: smeshBuilder.Mesh.ConvertFromQuadratic:7
+msgid "in this case the mesh can become not conformal"
+msgstr ""
+
+# 8a0643b208294ea093f1bf00dfac82a3
+#: smeshBuilder.Mesh.ConvertToQuadratic:2
+msgid ""
+"Convert the mesh to quadratic or bi-quadratic, deletes old elements, "
+"replacing"
+msgstr ""
+
+# 1266098d1ddb431bbe98d81729523637
+#: smeshBuilder.Mesh.ConvertToQuadratic:2
+msgid "them with quadratic with the same id."
+msgstr ""
+
+# f91480b1b96e45b68054e7ba6eaab85a
+#: smeshBuilder.Mesh.ConvertToQuadratic:4
+msgid ""
+"new node creation method: 0 - the medium node lies at the geometrical "
+"entity from which the mesh element is built 1 - the medium node lies at "
+"the middle of the line segments connecting two nodes of a mesh element"
+msgstr ""
+
+# 60da272828e2459da819b5a92387d16b
+#: smeshBuilder.Mesh.ConvertToQuadratic:7
+msgid ""
+"a group or a sub-mesh to convert; WARNING: in this case the mesh can "
+"become not conformal"
+msgstr ""
+
+# 2523e755b6924455a14dc793e7b8a0f2
+#: smeshBuilder.Mesh.ConvertToQuadratic:8
+msgid "If True, converts the mesh to bi-quadratic"
+msgstr ""
+
+# 5b4f5ff6007844a7a82ba357e14f033b
+#: smeshBuilder.Mesh.ConvertToQuadratic:10
+msgid "SMESH.ComputeError which can hold a warning"
+msgstr ""
+
+# da979298e8cd4b2f8a65c04388250143
+#: smeshBuilder.Mesh.ConvertToStandalone:1
+msgid "Convert group on geom into standalone group"
+msgstr ""
+
+# d4f04129796648f78d2790c31c3eaa69
+#: smeshBuilder.Mesh.CreateDimGroup:1
+msgid "Create a standalone group of entities basing on nodes of other groups."
+msgstr ""
+
+# 144de1ecf04545f898e18b2d29454486
+#: smeshBuilder.Mesh.CreateDimGroup:3
+msgid "list of reference groups, sub-meshes or filters, of any type."
+msgstr ""
+
+# 9b13adffcc684c80ae8584212b0d33b9
+#: smeshBuilder.Mesh.CreateDimGroup:4
+msgid ""
+"a type of elements to include to the new group; either of (SMESH.NODE, "
+"SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)."
+msgstr ""
+
+# f597206b09c64cf3ab3bad4706e6242a
+#: smeshBuilder.Mesh.CreateDimGroup:6
+msgid "a name of the new group."
+msgstr ""
+
+# bf2b551a066446aeb28e677cefae27d1
+#: smeshBuilder.Mesh.CreateDimGroup:7
+msgid ""
+"a criterion of inclusion of an element to the new group basing on number "
+"of element nodes common with reference *groups*. Meaning of possible "
+"values are:          - SMESH.ALL_NODES - include if all nodes are common,"
+"         - SMESH.MAIN - include if all corner nodes are common "
+"(meaningful for a quadratic mesh),         - SMESH.AT_LEAST_ONE - include"
+" if one or more node is common,         - SMEHS.MAJORITY - include if "
+"half of nodes or more are common."
+msgstr ""
+
+# 160037f6ec2c4beb93482b4874860e56
+#: smeshBuilder.Mesh.CreateDimGroup:7
+msgid ""
+"a criterion of inclusion of an element to the new group basing on number "
+"of element nodes common with reference *groups*. Meaning of possible "
+"values are:"
+msgstr ""
+
+# f2d61b5aa0254a579de3098d213f93e8
+#: smeshBuilder.Mesh.CreateDimGroup:11
+msgid "SMESH.ALL_NODES - include if all nodes are common,"
+msgstr ""
+
+# 7656f2f899da49d4aac9e5f9b487a642
+#: smeshBuilder.Mesh.CreateDimGroup:12
+msgid ""
+"SMESH.MAIN - include if all corner nodes are common (meaningful for a "
+"quadratic mesh),"
+msgstr ""
+
+# 419c54fccd834e8ea7e060ea296cb9c5
+#: smeshBuilder.Mesh.CreateDimGroup:13
+msgid "SMESH.AT_LEAST_ONE - include if one or more node is common,"
+msgstr ""
+
+# ec67a22f44d54ebb8938845517125249
+#: smeshBuilder.Mesh.CreateDimGroup:14
+msgid "SMEHS.MAJORITY - include if half of nodes or more are common."
+msgstr ""
+
+# ff069aa6a01d4822a522a850b132c046
+#: smeshBuilder.Mesh.CreateDimGroup:15
+msgid ""
+"if *True* (default), an element is included to the new group provided "
+"that it is based on nodes of an element of *groups*; in this case the "
+"reference *groups* are supposed to be of higher dimension than "
+"*elemType*, which can be useful for example to get all faces lying on "
+"volumes of the reference *groups*."
+msgstr ""
+
+# 00931333da47448a8ad7a048843c7ef3
+# 9a39086a4ebc46a4902f20b2faa06528
+# 4b84520336ae4c8bb85bb502f81466dc
+# 9d6acb565eff420193f1c51fafe0eb00
+# 66803841112b4774b9348c1eb9bb785f
+# b6127fbe4b27486887f9dac52b32e0ea
+#: smeshBuilder.Mesh.CreateDimGroup:21 smeshBuilder.Mesh.CutGroups:5
+#: smeshBuilder.Mesh.CutListOfGroups:5 smeshBuilder.Mesh.IntersectGroups:5
+#: smeshBuilder.Mesh.IntersectListOfGroups:5
+#: smeshBuilder.Mesh.UnionListOfGroups:6
+msgid "an instance of SMESH_Group"
+msgstr ""
+
+# 6ac41cebc6194553a64e046f4f91fae1
+#: smeshBuilder.Mesh.CreateEmptyGroup:1
+msgid "Create an empty mesh group"
+msgstr ""
+
+# 6a617353eb5d4905b43a00659c0f36f0
+#: smeshBuilder.Mesh.CreateEmptyGroup:3
+msgid ""
+"the type of elements in the group; either of (SMESH.NODE, SMESH.EDGE, "
+"SMESH.FACE, SMESH.VOLUME)"
+msgstr ""
+
+# f9b29b2ce899431c8d37c81d7ff6f5db
+# afc694cbebae4d16bda1b8ed5f0af04f
+# 6685b1ee1cfe4ff68f0e2067413509d9
+# b6508bf014c04b0d843782cc27da1d33
+# 96065c4c2c4d4d4b85cb322927f152fa
+# 4480735602644f88a2b4579474c38946
+# 3f964e2ed4654075a157483af78fa2b0
+# 340cbc73380b49289bac4786915eb2f2
+# 5e083f891e3e45469891eba52670ef4b
+#: smeshBuilder.Mesh.CreateEmptyGroup:5 smeshBuilder.Mesh.Group:9
+#: smeshBuilder.Mesh.GroupOnFilter:7 smeshBuilder.Mesh.GroupOnGeom:6
+#: smeshBuilder.Mesh.MakeGroup:3 smeshBuilder.Mesh.MakeGroupByCriteria:3
+#: smeshBuilder.Mesh.MakeGroupByCriterion:3
+#: smeshBuilder.Mesh.MakeGroupByFilter:3 smeshBuilder.Mesh.MakeGroupByIds:3
+msgid "the name of the mesh group"
+msgstr ""
+
+# 278619c06dd34c5dbc8b2b8217886875
+# 2b6ed0ea3bab43f2b31f6f723ab98466
+#: smeshBuilder.Mesh.CreateEmptyGroup:7 smeshBuilder.Mesh.MakeGroupByIds:8
+msgid "SMESH_Group"
+msgstr ""
+
+# 559a2c9dd5f2420c897d007cafc7d58c
+#: smeshBuilder.Mesh.CreateFlatElementsOnFacesGroups:1
+msgid ""
+"Double nodes on some external faces and create flat elements. Flat "
+"elements are mainly used by some types of mechanic calculations."
+msgstr ""
+
+# 9f76557a0e5e4d2d998fc917c94c28ae
+#: smeshBuilder.Mesh.CreateFlatElementsOnFacesGroups:4
+msgid ""
+"Each group of the list must be constituted of faces. Triangles are "
+"transformed in prisms, and quadrangles in hexahedrons."
+msgstr ""
+
+# acd039e48ef5492b988af1c831ee86a0
+# e2ed2814c91c458b96f91741ecc3ed1b
+# 3e80a436104f454fba282642777c7d04
+# efdb004e5c5144c2953061024bafbd43
+# 5e145a5cf8454db2b58cc48814cd8932
+# 82746e360dce4c11a0517e80c26751b8
+# 039afa4632bb440db5e1bcf4192eef50
+# 293864ca2acc44b2a24c35b6c2276de8
+# d6643ae8b86b4d11bc504b9cac2bdfdd
+#: smeshBuilder.Mesh.CreateFlatElementsOnFacesGroups:9
+#: smeshBuilder.Mesh.DoubleNode:7 smeshBuilder.Mesh.DoubleNodeElem:9
+#: smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion:10
+#: smeshBuilder.Mesh.DoubleNodeElemInRegion:10
+#: smeshBuilder.Mesh.DoubleNodeGroups:8 smeshBuilder.Mesh.DoubleNodes:8
+#: smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries:12
+#: smeshBuilder.Mesh.Make2DMeshFrom3D:3
+msgid "TRUE if operation has been completed successfully, FALSE otherwise"
+msgstr ""
+
+# 6f8a1db7c6b544ad8c8727f54f1f124c
+#: smeshBuilder.Mesh.CreateHoleSkin:1
+msgid ""
+"identify all the elements around a geom shape, get the faces delimiting "
+"the hole"
+msgstr ""
+
+# 71ccdb1234cb4632bb023f04da9a3f4f
+#: smeshBuilder.Mesh.CutGroups:1
+msgid ""
+"Produce a cut of two groups. A new group is created. All mesh elements "
+"that are present in the main group but are not present in the tool group "
+"are added to the new one"
+msgstr ""
+
+# 51d77236e4704e1d93d61424836e4309
+#: smeshBuilder.Mesh.CutListOfGroups:1
+msgid ""
+"Produce a cut of groups. A new group is created. All mesh elements that "
+"are present in main groups but do not present in tool groups are added to"
+" the new one"
+msgstr ""
+
+# 18ce85c5064942998890dab69759bda8
+#: smeshBuilder.Mesh.DeleteDiag:1
+msgid ""
+"Replace two neighbour triangles sharing Node1-Node2 link with a "
+"quadrangle built on the same 4 nodes."
+msgstr ""
+
+# be458a25caf64762b486c43a063a9611
+# 46a58970af514f92954af0e8c79b5ec6
+#: smeshBuilder.Mesh.DeleteDiag:4 smeshBuilder.Mesh.InverseDiag:4
+msgid "the ID of the first node"
+msgstr ""
+
+# 8d6e087e79d740ec8d11c4b1494fc35c
+# 51c6ebbea19b412897508a588b468a8b
+#: smeshBuilder.Mesh.DeleteDiag:5 smeshBuilder.Mesh.InverseDiag:5
+msgid "the ID of the second node"
+msgstr ""
+
+# ccfb692252ad4211a4812aab0e331cb8
+# eb8dc4009d4946da92ec5160c05209eb
+#: smeshBuilder.Mesh.DeleteDiag:7 smeshBuilder.Mesh.InverseDiag:7
+msgid "false if proper faces were not found"
+msgstr ""
+
+# e46fee500fbd48c8bb8c55ac98bc1c4e
+#: smeshBuilder.Mesh.DoubleElements:2
+msgid "Create duplicates of given elements, i.e. create new elements based on the"
+msgstr ""
+
+# cc1e48add13c4c139fdae0c1254fa690
+#: smeshBuilder.Mesh.DoubleElements:2
+msgid "same nodes as the given ones."
+msgstr ""
+
+# 502e72c8b5d9421e810c478891cb7869
+#: smeshBuilder.Mesh.DoubleElements:4
+msgid ""
+"container of elements to duplicate. It can be a Mesh, sub-mesh, group, "
+"filter or a list of element IDs. If *theElements* is a Mesh, elements of "
+"highest dimension are duplicated"
+msgstr ""
+
+# 291aa5a8404c4b54ae7c32f646ee53c9
+#: smeshBuilder.Mesh.DoubleElements:7
+msgid ""
+"a name of group to contain the generated elements. If a group with such a"
+" name already exists, the new elements are added to the existng group, "
+"else a new group is created. If *theGroupName* is empty, new elements are"
+" not added in any group."
+msgstr ""
+
+# 618dd7e8c3a744048dd361c7f39f54b4
+#: smeshBuilder.Mesh.DoubleElements:13
+msgid "a group where the new elements are added. None if theGroupName == \"\"."
+msgstr ""
+
+# e56c1b45539c4a34831f86301e94adac
+# eef733654e854eb2ad5014485032afb3
+# 5f3800ca14ab44b79f47c94f6d85ea5f
+# 2985d17463c74477b843914c9daec26b
+# 812b119999204bb9b8aa746d4b1eb4c5
+# 19153c0526574628ab29a70716dd59f9
+# 11d4a9e79b79470083af0f147c0e9483
+#: smeshBuilder.Mesh.DoubleNode:1 smeshBuilder.Mesh.DoubleNodeElemGroup:1
+#: smeshBuilder.Mesh.DoubleNodeElemGroupInRegion:1
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:1
+#: smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion:1
+#: smeshBuilder.Mesh.DoubleNodeGroup:1 smeshBuilder.Mesh.DoubleNodeGroups:1
+msgid ""
+"Create a hole in a mesh by doubling the nodes of some particular elements"
+" This method provided for convenience works as DoubleNodes() described "
+"above."
+msgstr ""
+
+# 259af3a19fd347bf9f8b02035d51dad7
+#: smeshBuilder.Mesh.DoubleNode:4
+msgid "identifiers of node to be doubled"
+msgstr ""
+
+# a4b19d27254e45818a8c1a56ff66a038
+#: smeshBuilder.Mesh.DoubleNode:5
+msgid "identifiers of elements to be updated"
+msgstr ""
+
+# 32ad9a5f0b10469ca7e20335dd182432
+# a1f48415baae43c8a393801c1d4d1240
+# 55544c8546e94bf882d1a75538fd5e90
+#: smeshBuilder.Mesh.DoubleNodeElem:1
+#: smeshBuilder.Mesh.DoubleNodeElemInRegion:1 smeshBuilder.Mesh.DoubleNodes:1
+msgid "Create a hole in a mesh by doubling the nodes of some particular elements"
+msgstr ""
+
+# be335eea39f742ea80e3ab48f93f40f5
+# b2e19fd27a6b4a32bb58fef4c37910b3
+#: smeshBuilder.Mesh.DoubleNodeElem:3
+#: smeshBuilder.Mesh.DoubleNodeElemInRegion:3
+msgid ""
+"the list of elements (edges or faces) to be replicated The nodes for "
+"duplication could be found from these elements"
+msgstr ""
+
+# fce62c58353045b492cb22cdaf2db99b
+# e5db53edbf064cc0825163f4b463e041
+#: smeshBuilder.Mesh.DoubleNodeElem:5
+#: smeshBuilder.Mesh.DoubleNodeElemInRegion:5
+msgid "list of nodes to NOT replicate"
+msgstr ""
+
+# 41bfa10f113044e3aa5032f2cf78dc4e
+#: smeshBuilder.Mesh.DoubleNodeElem:6
+msgid ""
+"the list of elements (cells and edges) to which the replicated nodes "
+"should be associated to."
+msgstr ""
+
+# bf81aed18e674b61802e66d001d02d13
+# 0207a45ad3fe433b8902ae9a3198d10f
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:4
+#: smeshBuilder.Mesh.DoubleNodeElemGroupInRegion:4
+msgid "group of of elements (edges or faces) to be replicated"
+msgstr ""
+
+# adef8bad906d4f13b1cfc6c92e460f07
+# c6316cf12ad74a5f9f72f9cba6af1391
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:5
+#: smeshBuilder.Mesh.DoubleNodeElemGroupInRegion:5
+msgid "group of nodes not to replicated"
+msgstr ""
+
+# 4444addea632450693dfdbe76603848e
+# 88888b76c4024ac8803170c0813ebb36
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:6
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:6
+msgid "group of elements to which the replicated nodes should be associated to."
+msgstr ""
+
+# f716c47d5a2a4306b5f0fb023a9607c0
+# d1696e68ca88437f89d5d97cdfd98b5a
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:8
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:8
+msgid "forces the generation of a group containing new elements."
+msgstr ""
+
+# 2df4449e419440d99db078600fa68f95
+# 980b56a1fe9d4d39a4cea5aefc15eae6
+# 9f11003a43794083a09e13f1063ea8bd
+# 0d6de5c414484b008845830423d408be
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:9
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:9 smeshBuilder.Mesh.DoubleNodeGroup:6
+#: smeshBuilder.Mesh.DoubleNodeGroups:6
+msgid "forces the generation of a group containing new nodes."
+msgstr ""
+
+# 31110dca9a664187942bd9abad329e82
+# 9552785dd86c4586a423a69b3702f979
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:11
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:11
+msgid ""
+"TRUE or created groups (one or two) if operation has been completed "
+"successfully,     FALSE or None otherwise"
+msgstr ""
+
+# 6fbdd03967ae452ab66b9e71f9f0f7db
+# f9d5b26e697b48dda9589b574510684e
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:13
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:13
+msgid ""
+"TRUE or created groups (one or two) if operation has been completed "
+"successfully,"
+msgstr ""
+
+# 6b20fd99375349ce918bc6eaf1179886
+# 9be16c633c2a464e8e3ae404c0c3b1fb
+# 584895001cdc4cd19d20674d8743914b
+#: smeshBuilder.Mesh.DoubleNodeElemGroup:14
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:14
+#: smeshBuilder.Mesh.DoubleNodeGroup:11
+msgid "FALSE or None otherwise"
+msgstr ""
+
+# 1d611d1625784aa69c6452d3f6597960
+# 49bbb073f1e748cb8ba0c3fa704ae8ae
+#: smeshBuilder.Mesh.DoubleNodeElemGroups:4
+#: smeshBuilder.Mesh.DoubleNodeElemGroupsInRegion:4
+msgid "list of groups of elements (edges or faces) to be replicated"
+msgstr ""
+
+# a4a9e63099394548ae2ab96dff284fa3
+#: smeshBuilder.Mesh.DoubleNodeGroup:4
+msgid "group of nodes to be doubled"
+msgstr ""
+
+# 5156192efdd441f8af2015bbf0cfd837
+#: smeshBuilder.Mesh.DoubleNodeGroup:5
+msgid "group of elements to be updated."
+msgstr ""
+
+# 513c59723fc8436d881eaad8855b1005
+#: smeshBuilder.Mesh.DoubleNodeGroup:8
+msgid ""
+"TRUE or a created group if operation has been completed successfully,"
+"     FALSE or None otherwise"
+msgstr ""
+
+# c5f15412e81a4094a187dc0ff94a805d
+#: smeshBuilder.Mesh.DoubleNodeGroup:10
+msgid "TRUE or a created group if operation has been completed successfully,"
+msgstr ""
+
+# 081ef4f15ceb48b59a956ebb491b58de
+#: smeshBuilder.Mesh.DoubleNodeGroups:4
+msgid "list of groups of nodes to be doubled"
+msgstr ""
+
+# 904373e03d75434292d28d381f46ec5b
+#: smeshBuilder.Mesh.DoubleNodeGroups:5
+msgid "list of groups of elements to be updated."
+msgstr ""
+
+# 736ebd7d03ae468c8194d99cdbcdb402
+#: smeshBuilder.Mesh.DoubleNodes:3
+msgid "identifiers of nodes to be doubled"
+msgstr ""
+
+# 191c612e539f45ddaaf695bd7fac77b8
+#: smeshBuilder.Mesh.DoubleNodes:4
+msgid ""
+"identifiers of elements to be updated by the new (doubled) nodes. If list"
+" of element identifiers is empty then nodes are doubled but they not "
+"assigned to elements"
+msgstr ""
+
+# 8f339342bfa14ff1a7beff3f2500a72d
+#: smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries:1
+msgid ""
+"Double nodes on shared faces between groups of volumes and create flat "
+"elements on demand. The list of groups must describe a partition of the "
+"mesh volumes. The nodes of the internal faces at the boundaries of the "
+"groups are doubled. In option, the internal faces are replaced by flat "
+"elements. Triangles are transformed in prisms, and quadrangles in "
+"hexahedrons."
+msgstr ""
+
+# 76ba67f4c60d47618774228879e5fab1
+#: smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries:7
+msgid "list of groups of volumes"
+msgstr ""
+
+# e82b9f2e1cb64b089d3e724218d37b08
+#: smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries:8
+msgid "if TRUE, create the elements"
+msgstr ""
+
+# bc6d7ed43de6437b82fe8ace719f2243
+#: smeshBuilder.Mesh.DoubleNodesOnGroupBoundaries:9
+msgid ""
+"if TRUE, the nodes and elements are also created on the boundary between "
+"*theDomains* and the rest mesh"
+msgstr ""
+
+# a47554f878c6475ab638bcaf14eade3c
+#: smeshBuilder.Mesh.Dump:1
+msgid "Get the mesh description"
+msgstr ""
+
+# 7438e31768d44e7eb0c67b0e86b804bf
+#: smeshBuilder.Mesh.Dump:3
+msgid "string value"
+msgstr ""
+
+# 981c8719728745e5ba18fa3bd74e4d5e
+#: smeshBuilder.Mesh.ElemNbEdges:1
+msgid "Return the number of edges for the given element"
+msgstr ""
+
+# adc711c55c3e4ced978ddee57826cab2
+#: smeshBuilder.Mesh.ElemNbFaces:1
+msgid "Return the number of faces for the given element"
+msgstr ""
+
+# ade0fa9e5c494b39984f55521d35e024
+#: smeshBuilder.Mesh.Evaluate:1
+msgid "Evaluate size of prospective mesh on a shape"
+msgstr ""
+
+# af2257f13a5a484eaec80e404177ae2a
+#: smeshBuilder.Mesh.Evaluate:3
+msgid ""
+"a list where i-th element is a number of elements of i-th "
+"SMESH.EntityType To know predicted number of e.g. edges, inquire it this "
+"way Evaluate()[ EnumToLong( Entity_Edge )]"
+msgstr ""
+
+# ca65c1d873fa419e9f29045188d65355
+#: smeshBuilder.Mesh.ExportCGNS:1
+msgid "Export the mesh in a file in CGNS format"
+msgstr ""
+
+# 4d8730c310014fed95afde1cf16521b5
+# f56f24461f09484f9ae26192bb74dc1b
+# 16cd1ef1f37d4ac7bfb29e0ba1c76644
+# eaabc73aed1440d0b0aaebea0e38bf09
+#: smeshBuilder.Mesh.ExportCGNS:3 smeshBuilder.Mesh.ExportGMF:5
+#: smeshBuilder.Mesh.ExportMED:4 smeshBuilder.Mesh.ExportSAUV:4
+msgid "is the file name"
+msgstr ""
+
+# 0f8575dda55f4807813f5ca70414d422
+# 1b591563a70a41229ffc5e30039dfe57
+# 56a276aac58c4b40abf3c7a0a89cdef6
+#: smeshBuilder.Mesh.ExportCGNS:4 smeshBuilder.Mesh.ExportMED:11
+#: smeshBuilder.Mesh.ExportToMED:11
+msgid "boolean parameter for overwriting/not overwriting the file"
+msgstr ""
+
+# 920c4ef672054e848f0b3b31337093a4
+# d574c15e91a34c858eb6f73b279a38c8
+# 57fe3da10f0940e092be8f03d1b30490
+# 6a116fbdcda3410c9da9af7946679bff
+# f284f32cd9454c598eebfe46554127b4
+# 45870649c3614edd90eec1888b581bf7
+#: smeshBuilder.Mesh.ExportCGNS:5 smeshBuilder.Mesh.ExportDAT:4
+#: smeshBuilder.Mesh.ExportGMF:6 smeshBuilder.Mesh.ExportMED:12
+#: smeshBuilder.Mesh.ExportSTL:5 smeshBuilder.Mesh.ExportUNV:4
+msgid "a part of mesh (group, sub-mesh) to export instead of the mesh"
+msgstr ""
+
+# 81933cbf88a2426e89b6e2bd62be0f55
+#: smeshBuilder.Mesh.ExportCGNS:6
+msgid ""
+"if true all elements of same entity type are exported at ones, else "
+"elements are exported in order of their IDs which can cause creation of "
+"multiple cgns sections"
+msgstr ""
+
+# f81b920c3c38470f97cdc721ad04dd3a
+#: smeshBuilder.Mesh.ExportDAT:1
+msgid "Export the mesh in a file in DAT format"
+msgstr ""
+
+# 91b896bb5f8f4125abbd5c09539db9d0
+# df7d096aea81460185789e29acf21d4f
+# 62142d4bfbfd4e4094ed9b7ee2b0823f
+# ca8da077fc864b249b13b9718704c17c
+#: smeshBuilder.Mesh.ExportDAT:3 smeshBuilder.Mesh.ExportSTL:3
+#: smeshBuilder.Mesh.ExportToMED:5 smeshBuilder.Mesh.ExportUNV:3
+msgid "the file name"
+msgstr ""
+
+# 4215d946f6a84dd98c32799115d981b6
+#: smeshBuilder.Mesh.ExportGMF:1
+msgid ""
+"Export the mesh in a file in GMF format. GMF files must have .mesh "
+"extension for the ASCII format and .meshb for the bynary format. Other "
+"extensions are not allowed."
+msgstr ""
+
+# a59bf671306b4518aeaee39a16ddebb2
+#: smeshBuilder.Mesh.ExportMED:2
+msgid "Export the mesh in a file in MED format"
+msgstr ""
+
+# b423d2791a2f4f2694e3303f1c6b2495
+#: smeshBuilder.Mesh.ExportMED:2
+msgid ""
+"allowing to overwrite the file if it exists or add the exported data to "
+"its contents"
+msgstr ""
+
+# 0ebd88ad2dca48b68c682da54bf193f2
+#: smeshBuilder.Mesh.ExportMED:5
+msgid ""
+"boolean parameter for creating/not creating the groups "
+"Group_On_All_Nodes, Group_On_All_Faces, ... ; the typical use is "
+"auto_groups=False."
+msgstr ""
+
+# d2aa73692400496db744fd2b2d06c4d0
+# 7d550ce3f6c44e45bf1a1fc4242d545d
+#: smeshBuilder.Mesh.ExportMED:8 smeshBuilder.Mesh.ExportToMED:6
+msgid ""
+"MED format version (MED_V2_1 or MED_V2_2, the latter meaning any current "
+"version). The parameter is obsolete since MED_V2_1 is no longer "
+"supported."
+msgstr ""
+
+# 643a70d8af6e4d70b494eb5111940b4e
+#: smeshBuilder.Mesh.ExportMED:13
+msgid ""
+"if *True* (default), a space dimension of a MED mesh can be either  - 1D "
+"if all mesh nodes lie on OX coordinate axis, or - 2D if all mesh nodes "
+"lie on XOY coordinate plane, or - 3D in the rest cases.  If "
+"*autoDimension* is *False*, the space dimension is always 3."
+msgstr ""
+
+# 188fa80ce83d45da90f060958a0b88de
+# 5e86f9b88b524fdea8d335236ed2734b
+#: smeshBuilder.Mesh.ExportMED:13 smeshBuilder.Mesh.ExportToMED:12
+msgid "if *True* (default), a space dimension of a MED mesh can be either"
+msgstr ""
+
+# 4835a670e5f3403c8e8221d89641f4f0
+# 893afb16da9747f8bfae83a2003be1d3
+#: smeshBuilder.Mesh.ExportMED:15 smeshBuilder.Mesh.ExportToMED:14
+msgid "1D if all mesh nodes lie on OX coordinate axis, or"
+msgstr ""
+
+# 35b39341c5164536913fb74a914bf2f3
+# a76ff4051c15455d8d42b5c22febaa53
+#: smeshBuilder.Mesh.ExportMED:16 smeshBuilder.Mesh.ExportToMED:15
+msgid "2D if all mesh nodes lie on XOY coordinate plane, or"
+msgstr ""
+
+# ff1f5dd902d3495082109b1226cf2d33
+# a4a5506f37b14a4884040e679458154a
+#: smeshBuilder.Mesh.ExportMED:17 smeshBuilder.Mesh.ExportToMED:16
+msgid "3D in the rest cases."
+msgstr ""
+
+# b0cfd66cd8be4f65ac79251d8d75c16e
+#: smeshBuilder.Mesh.ExportMED:19
+msgid "If *autoDimension* is *False*, the space dimension is always 3."
+msgstr ""
+
+# dca75586baf544b89856ac34c5696e17
+#: smeshBuilder.Mesh.ExportMED:20
+msgid "list of GEOM fields defined on the shape to mesh."
+msgstr ""
+
+# e2e247a955424178b0f7f69b548091ce
+#: smeshBuilder.Mesh.ExportMED:21
+msgid ""
+"each character of this string means a need to export a corresponding "
+"field; correspondence between fields and characters is following:"
+"          - 'v' stands for \"_vertices _\" field;         - 'e' stands "
+"for \"_edges _\" field;         - 'f' stands for \"_faces _\" field;"
+"         - 's' stands for \"_solids _\" field."
+msgstr ""
+
+# 95f9b27f74fc458296695e9f6d3d7572
+#: smeshBuilder.Mesh.ExportMED:21
+msgid ""
+"each character of this string means a need to export a corresponding "
+"field; correspondence between fields and characters is following:"
+msgstr ""
+
+# bfcb3515f514406fb5a0b20b059083ff
+#: smeshBuilder.Mesh.ExportMED:24
+msgid "'v' stands for \"_vertices _\" field;"
+msgstr ""
+
+# cb193265fa234df590c538de074694bf
+#: smeshBuilder.Mesh.ExportMED:25
+msgid "'e' stands for \"_edges _\" field;"
+msgstr ""
+
+# 1a71b5ea0a6240649e7e801ba8e3594d
+#: smeshBuilder.Mesh.ExportMED:26
+msgid "'f' stands for \"_faces _\" field;"
+msgstr ""
+
+# 235d9c1731c243339a48ee6bbe8707a6
+#: smeshBuilder.Mesh.ExportMED:27
+msgid "'s' stands for \"_solids _\" field."
+msgstr ""
+
+# 4781cafb801a49408ec375e201526617
+#: smeshBuilder.Mesh.ExportSAUV:1
+msgid "Export the mesh in a file in SAUV format"
+msgstr ""
+
+# 05f769d7467e479199475bcffcb9b32a
+#: smeshBuilder.Mesh.ExportSAUV:5
+msgid ""
+"boolean parameter for creating/not creating the groups "
+"Group_On_All_Nodes, Group_On_All_Faces, ... ; the typical use is "
+"auto_groups=false."
+msgstr ""
+
+# e5f4a3c8b68947699e83368accae3169
+#: smeshBuilder.Mesh.ExportSTL:1
+msgid "Export the mesh in a file in STL format"
+msgstr ""
+
+# 4598e0cad2a2490e8f258041d3e5df47
+#: smeshBuilder.Mesh.ExportSTL:4
+msgid "defines the file encoding"
+msgstr ""
+
+# ddcb96f002a443dca1a2dd9e1db10825
+#: smeshBuilder.Mesh.ExportToMED:1
+msgid ""
+"Deprecated, used only for compatibility! Please, use ExportMED() method "
+"instead. Export the mesh in a file in MED format allowing to overwrite "
+"the file if it exists or add the exported data to its contents"
+msgstr ""
+
+# 0f5e467ce7644b728b00a9daafe884f9
+#: smeshBuilder.Mesh.ExportToMED:9
+msgid ""
+"boolean parameter for creating/not creating the groups "
+"Group_On_All_Nodes, Group_On_All_Faces, ..."
+msgstr ""
+
+# 8c6a9e9e643e43ec9c97af15159997f6
+#: smeshBuilder.Mesh.ExportToMED:12
+msgid ""
+"if *True* (default), a space dimension of a MED mesh can be either  - 1D "
+"if all mesh nodes lie on OX coordinate axis, or - 2D if all mesh nodes "
+"lie on XOY coordinate plane, or - 3D in the rest cases.  If "
+"**autoDimension** isc **False**, the space dimension is always 3."
+msgstr ""
+
+# 2988ab28dbc7448a886b66c61cd510d0
+#: smeshBuilder.Mesh.ExportToMED:18
+msgid "If **autoDimension** isc **False**, the space dimension is always 3."
+msgstr ""
+
+# b21cd34f34bf4cd8ab19d657b90f7c84
+#: smeshBuilder.Mesh.ExportUNV:1
+msgid "Export the mesh in a file in UNV format"
+msgstr ""
+
+# 093d969d266f4c669d0f853d5d22f32c
+# 69276d9cc94a482389196453d99cdc56
+#: smeshBuilder.Mesh.ExtrusionAlongPath:1
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:1
+msgid ""
+"Generate new elements by extrusion of the given elements The path of "
+"extrusion must be a meshed edge."
+msgstr ""
+
+# f6db2756c524477f846505296518f8ec
+#: smeshBuilder.Mesh.ExtrusionAlongPath:4
+msgid "ids of elements"
+msgstr ""
+
+# 64e67e10136041e98baedb6952172557
+#: smeshBuilder.Mesh.ExtrusionAlongPath:5
+msgid ""
+"mesh containing a 1D sub-mesh on the edge, along which proceeds the "
+"extrusion"
+msgstr ""
+
+# 156701d78a944f129f5c6a1ba379b79e
+# 9cde29796df24b65833f64144b03a9cf
+# 41abdd3ad90b4ef2ad7b9b79e299010f
+# c9db6c3356c3488b82edbcd4d8c89f7d
+#: smeshBuilder.Mesh.ExtrusionAlongPath:6
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:7
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:7
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:7
+msgid "shape(edge) defines the sub-mesh for the path"
+msgstr ""
+
+# 333e2e688ede4c3cb968aa2f4360d6a9
+# 7a2a4d98fb7e471aa45bdd62738cc7e7
+# 82bbac405e774d159c0c41c096654750
+# 31ebc23a88fc44d8a6efbb11fe655579
+#: smeshBuilder.Mesh.ExtrusionAlongPath:7
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:8
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:8
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:8
+msgid "the first or the last node on the edge. Defines the direction of extrusion"
+msgstr ""
+
+# 39611e7acfd145bda26a03a35014728c
+# 1d18d20fbabf4b89850507afa68ac647
+# 2952fc27cf6f47ed96cbaf1b6fabc3f4
+# 34215bf00645451e8a324ee07d58e90d
+# 93a79b3572ff4d87b0693286947fcc26
+# 3b1f1c0f508d4a70bb1aa1f88c9a327f
+#: smeshBuilder.Mesh.ExtrusionAlongPath:8
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:9
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:9
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:9
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:11
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:7
+msgid ""
+"allows the shape to be rotated around the path to get the resulting mesh "
+"in a helical fashion"
+msgstr ""
+
+# c5d2f4a73ff04cb586d1ddc79ff022b7
+# b7a55c6978ac4c98b4f28b83d030c96e
+#: smeshBuilder.Mesh.ExtrusionAlongPath:10
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:9
+msgid "list of angles in radians"
+msgstr ""
+
+# 3dc31460c71b4b6fbf4fa0b10a55be83
+# e887644b7c0e431b885e56a379ec6025
+# 2f4fca0c56eb421888edc48360791331
+# 5a2cf1f52ec74585a6f18978ba9404f4
+# 617ae0c3319f4a4ba09e3d3afccd3e66
+# 9c5cc8542f6641f786d8cd7e23ea6b14
+#: smeshBuilder.Mesh.ExtrusionAlongPath:11
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:12
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:12
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:12
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:16
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:12
+msgid "allows using the reference point"
+msgstr ""
+
+# aa148f9e0d574512bed28e24c156bf52
+# d98243bd32894e89bde8740826ab7eae
+# b1861a760e3740d1a4fbd75fa7e6d3d7
+# e70c349b4edd4c218c4e1018bd33f460
+#: smeshBuilder.Mesh.ExtrusionAlongPath:12
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:13
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:13
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:17
+msgid ""
+"the point around which the shape is rotated (the mass center of the shape"
+" by default). The User can specify any point as the Reference Point."
+msgstr ""
+
+# a30b1231c30743df8a9c2c793ee2c96e
+# 0957d3fdaec84db89adc2acfba5416b8
+# 7f9393200c1f4254b18de8ee0eb04c08
+# a6407dd18c2444168993652c48b45dde
+# f567908113e341b89a2a3217d16ec42a
+# 6e5b87ad1fcf4cf49667fec460732795
+#: smeshBuilder.Mesh.ExtrusionAlongPath:15
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:16
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:16
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:16
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:14
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:10
+msgid ""
+"forces the computation of rotation angles as linear variation of the "
+"given Angles along path steps"
+msgstr ""
+
+# 1206c33bb3c147b09b980cfdf0ed7874
+# 676452b1ce6d4b5cb39c3683476422fd
+# 062607aadc1640a1a23f75692baadfea
+# 2eadaf19d76d47178239c0bf111b8cd9
+# 2fa67055ed4744898ac7f4036aac4dff
+#: smeshBuilder.Mesh.ExtrusionAlongPath:18
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:19
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:19
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:19
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:20
+msgid ""
+"list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if "
+"MakeGroups=True,     only SMESH::Extrusion_Error otherwise"
+msgstr ""
+
+# d873c12efc834a39911397599d591fd5
+# cf2dd2cbbb08433b911c653669be8d6b
+# ecb56eec71c7495b9c01c87a2677fcde
+# a8aa911029614961be2eaefa5ab67f0f
+# f9e8aaf31ab1449791e0a377563442ae
+#: smeshBuilder.Mesh.ExtrusionAlongPath:21
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:23
+msgid ""
+"list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if "
+"MakeGroups=True,"
+msgstr ""
+
+# b1d41ef62b8c4f41ac8e989d8b6b9494
+# d24d52183b4344d982913f781d682204
+# dfffadcf5592463c8d3fccb9756f60da
+# 32e047bf9b534645b5ca3fe350cc7a72
+# 77f7a6cb85be4727aba96d8fffece278
+#: smeshBuilder.Mesh.ExtrusionAlongPath:21
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:22
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:23
+msgid "only SMESH::Extrusion_Error otherwise"
+msgstr ""
+
+# b8d504d1a24e4a9aa198e232dacfc62f
+# 66b2bcd8b32442b7a9770eabe4217daf
+# d778e730ab6d4dfead5477f7a783d35b
+# 1c9054977e6e443ea7efeffed1a2d486
+# 79af131371b543de937609f742cf539a
+# aeec9462ee554cb88bd41064eb0f9a3d
+#: smeshBuilder.Mesh.ExtrusionAlongPath:23
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:24
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:24
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:24
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:23
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:25
+msgid ":ref:`tui_extrusion_along_path` example"
+msgstr ""
+
+# 29c371341da64c8db612e7f601831198
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:1
+msgid ""
+"Generate new elements by extrusion of the elements which belong to the "
+"object The path of extrusion must be a meshed edge."
+msgstr ""
+
+# 3f1310aa94c54723bbee322d7ed7e219
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:4
+msgid ""
+"the object whose elements should be processed. It can be a mesh, a sub-"
+"mesh or a group."
+msgstr ""
+
+# 43b79770ebff4050921eda2cedcac6d7
+# 566ff1c00def4dc5b1ae465cfc7409d9
+# 7414df614424443dbda0bbdaeef817aa
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:6
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:6
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:6
+msgid ""
+"mesh containing a 1D sub-mesh on the edge, along which the extrusion "
+"proceeds"
+msgstr ""
+
+# 3e4f320cccf24ee986d597e8dea61849
+# f85a2bf4ffea423f91ca3ae11f44d2e3
+# 20517d7ed30c4e349b117753e2cfe9bc
+# 571c7edab1414308909052f04815f10a
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject:11
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:11
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:11
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:13
+msgid "list of angles"
+msgstr ""
+
+# 972a69a8474444949abc9a112391b75b
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:1
+msgid ""
+"Generate new elements by extrusion of mesh segments which belong to the "
+"object The path of extrusion must be a meshed edge."
+msgstr ""
+
+# 1caaf785a01d41119bb7447dad4b4eb5
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:4
+msgid ""
+"the object whose 1D elements should be processed. It can be a mesh, a "
+"sub-mesh or a group."
+msgstr ""
+
+# c989666b20d1410dba1ed497eb5a96c1
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject1D:13
+msgid ""
+"around which the shape is rotated (the mass center of the shape by "
+"default). The User can specify any point as the Reference Point."
+msgstr ""
+
+# fa39b18e6cee4523bdf3b2cc5fad3aa1
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:1
+msgid ""
+"Generate new elements by extrusion of faces which belong to the object "
+"The path of extrusion must be a meshed edge."
+msgstr ""
+
+# f83084b5d3e945b99464839307125cef
+#: smeshBuilder.Mesh.ExtrusionAlongPathObject2D:4
+msgid ""
+"the object whose 2D elements should be processed. It can be a mesh, a "
+"sub-mesh or a group."
+msgstr ""
+
+# 2324f7df315c4af8bb15d1ab33191cea
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:1
+msgid ""
+"Generate new elements by extrusion of the given elements and nodes along "
+"the path. The path of extrusion must be a meshed edge."
+msgstr ""
+
+# fe65fed6746642f684dbff5675c40388
+# a7b6a06933d64d5dbebf9a2e9db994cc
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:4
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:3
+msgid "nodes to extrude: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# 3a8658db54c14b97b54523f9148a9ed1
+# 99541a8fc29c4599897101cb55f5c970
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:5
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:4
+msgid "edges to extrude: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# 4c13442360aa4281aa3b640a41d89aa4
+# 88128559d1614061b2a3c82b5f1325af
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:6
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:5
+msgid "faces to extrude: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# 16eec3e1b2274150bd18951ba8f79fc8
+# 1f4dd5d6e94c41f5afce56157eb730aa
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:7
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:5
+msgid "1D mesh or 1D sub-mesh, along which proceeds the extrusion"
+msgstr ""
+
+# 7bfe51391d404d549fda0d18e54601c9
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:8
+msgid ""
+"shape (edge) defines the sub-mesh of PathMesh if PathMesh contains not "
+"only path segments, else it can be None"
+msgstr ""
+
+# b812a402a960422b961730c1d4ea452f
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:10
+msgid "the first or the last node on the path. Defines the direction of extrusion"
+msgstr ""
+
+# 74b34fecbdb544749b26b494f3df639e
+#: smeshBuilder.Mesh.ExtrusionAlongPathObjects:21
+msgid "list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error"
+msgstr ""
+
+# 87aa29e1d2bd4d1cab62cc6a31d46ccc
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:4
+msgid "mesh or group, or sub-mesh, or list of ids of elements for extrusion"
+msgstr ""
+
+# 324f923bd17a498b9aa75f97bad5de64
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:6
+msgid "the start node from Path. Defines the direction of extrusion"
+msgstr ""
+
+# 6699406d3d8e4ef296b41d603c82db8e
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:13
+msgid ""
+"the point around which the elements are rotated (the mass center of the "
+"elements by default). The User can specify any point as the Reference "
+"Point. RefPoint can be either GEOM Vertex, [x,y,z] or SMESH.PointStruct"
+msgstr ""
+
+# 3fccc986f6d84c16a2e05e2c37abd430
+#: smeshBuilder.Mesh.ExtrusionAlongPathX:18
+msgid "type of elements for extrusion (if param Base is a mesh)"
+msgstr ""
+
+# 409086041d2b48f6ace165b9013b164e
+#: smeshBuilder.Mesh.ExtrusionByNormal:1
+msgid ""
+"Generate new elements by extrusion along the normal to a discretized "
+"surface or wire"
+msgstr ""
+
+# 633d19ebe6eb45018f30ef0596bbe7d1
+#: smeshBuilder.Mesh.ExtrusionByNormal:3
+msgid ""
+"elements to extrude - a list including ids, groups, sub-meshes or a mesh."
+" Only faces can be extruded so far. A sub-mesh should be a sub-mesh on "
+"geom faces."
+msgstr ""
+
+# 5954cfc71b9942219e15327d2498093d
+#: smeshBuilder.Mesh.ExtrusionByNormal:5
+msgid ""
+"length of one extrusion step (the total extrusion length will be "
+"*NbOfSteps* *StepSize*)."
+msgstr ""
+
+# 3bd6b8143cc247e8b0d29569f81c2cd5
+#: smeshBuilder.Mesh.ExtrusionByNormal:7
+msgid "number of extrusion steps."
+msgstr ""
+
+# 0875fc4bcfc24c92aebf1ec02c404cce
+#: smeshBuilder.Mesh.ExtrusionByNormal:8
+msgid ""
+"if True each node is translated by *StepSize* along the average of the "
+"normal vectors to the faces sharing the node; else each node is "
+"translated along the same average normal till intersection with the plane"
+" got by translation of the face sharing the node along its own normal by "
+"*StepSize*."
+msgstr ""
+
+# fa069f90ec5a495ca7409eedf7c45de8
+#: smeshBuilder.Mesh.ExtrusionByNormal:13
+msgid ""
+"to use only *Elements* when computing extrusion direction for every node "
+"of *Elements*."
+msgstr ""
+
+# 189dbea6bb314911b5b27c5a7430d537
+#: smeshBuilder.Mesh.ExtrusionByNormal:15
+msgid "forces generation of new groups from existing ones."
+msgstr ""
+
+# a20c5376192241388610609beb6c68a1
+#: smeshBuilder.Mesh.ExtrusionByNormal:16
+msgid ""
+"dimension of elements to extrude: 2 - faces or 1 - edges. Extrusion of "
+"edges is not yet implemented. This parameter is used if *Elements* "
+"contains both faces and edges, i.e. *Elements* is a Mesh."
+msgstr ""
+
+# bea85b3ff00e443c95211ae90420717b
+#: smeshBuilder.Mesh.ExtrusionByNormal:20
+msgid ""
+"the list of created groups (SMESH_GroupBase) if *MakeGroups=True*,     "
+"empty list otherwise."
+msgstr ""
+
+# 70a29a1069f14f629ae984d59eb6305a
+#: smeshBuilder.Mesh.ExtrusionByNormal:23
+msgid "the list of created groups (SMESH_GroupBase) if *MakeGroups=True*,"
+msgstr ""
+
+# 39f9770896164fbeba5b6b4c08276e89
+#: smeshBuilder.Mesh.ExtrusionByNormal:23
+msgid "empty list otherwise."
+msgstr ""
+
+# 45a8825c374b4533970aac4c215817d2
+# e943d5dc089d40eca3a9b465a446ed73
+# aaa7d5be7ced4f5e82c5612da73ce778
+# 1109984bbb4e44ee8e67d84d80964977
+# be9608518a6b4e518dc93ab2d331ffe4
+# 8a966f83249c4beb8053f6cc5c81a19a
+#: smeshBuilder.Mesh.ExtrusionByNormal:25 smeshBuilder.Mesh.ExtrusionSweep:13
+#: smeshBuilder.Mesh.ExtrusionSweepObject:14
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:13
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:13
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:24
+msgid ":ref:`tui_extrusion` example"
+msgstr ""
+
+# 4116cd0ed61647159eb0490a87298fbb
+#: smeshBuilder.Mesh.ExtrusionSweep:3
+msgid "the list of ids of elements or nodes for extrusion"
+msgstr ""
+
+# d1e652596d5f4ddaaf3455f248b2307c
+#: smeshBuilder.Mesh.ExtrusionSweep:9
+msgid "is True if elements with given ids are nodes"
+msgstr ""
+
+# 32a048c785204455b5d9c022574477db
+# 4a94ca72e61d43b6ae2970dc92afa99f
+# 2ce54d1f8e164d9b95de8cca3e5ff884
+# dfe23afd36a1476781017daabc61d682
+# 1d6da843c9ab4ba2add2133828a783e5
+# 459a919a4a0b4ed1b76067373d9f6b34
+# 76c8fe399461419cbe693b60c8fda184
+#: smeshBuilder.Mesh.ExtrusionSweep:11
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:22
+#: smeshBuilder.Mesh.RotationSweep:12 smeshBuilder.Mesh.RotationSweepObject:13
+#: smeshBuilder.Mesh.RotationSweepObject1D:13
+#: smeshBuilder.Mesh.RotationSweepObject2D:13
+#: smeshBuilder.Mesh.RotationSweepObjects:15
+msgid ""
+"the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty "
+"list otherwise"
+msgstr ""
+
+# 1c5324f6a077431ab6b9ae4eb29663aa
+#: smeshBuilder.Mesh.ExtrusionSweepObject:1
+msgid ""
+"Generate new elements by extrusion of the elements or nodes which belong "
+"to the object"
+msgstr ""
+
+# 6edea75c9be7418b970304f4dfe27bcd
+#: smeshBuilder.Mesh.ExtrusionSweepObject:3
+msgid ""
+"the object whose elements or nodes should be processed. It can be a mesh,"
+" a sub-mesh or a group."
+msgstr ""
+
+# 0f4d92743b644124acc44a3407e936c9
+#: smeshBuilder.Mesh.ExtrusionSweepObject:10
+msgid "is True if elements to extrude are nodes"
+msgstr ""
+
+# 117e2d5cef344ea994570972cd6475f3
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:1
+msgid "Generate new elements by extrusion of edges which belong to the object"
+msgstr ""
+
+# 95122d4fd03f4b83ac97197df03a8e61
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:3
+msgid ""
+"object whose 1D elements should be processed. It can be a mesh, a sub-"
+"mesh or a group."
+msgstr ""
+
+# a9fd4fd64585433688293ed1f14e71d1
+# 18e41dacbea74f02af80309fa4544c6d
+#: smeshBuilder.Mesh.ExtrusionSweepObject1D:9
+#: smeshBuilder.Mesh.MirrorMakeMesh:7
+msgid "to generate new groups from existing ones"
+msgstr ""
+
+# 626f2f387bfd43e5b5c563a8e68d8994
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:1
+msgid "Generate new elements by extrusion of faces which belong to the object"
+msgstr ""
+
+# 3835b1ef78af46099dddf8ffd3749ee7
+#: smeshBuilder.Mesh.ExtrusionSweepObject2D:3
+msgid ""
+"object whose 2D elements should be processed. It can be a mesh, a sub-"
+"mesh or a group."
+msgstr ""
+
+# 2874c97881034b43a417ebe95fb6d666
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:1
+msgid "Generate new elements by extrusion of the given elements and nodes"
+msgstr ""
+
+# bf8d47fedbfe4fd49ca9aca6f7074ac0
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:11
+msgid "optional scale factors to apply during extrusion"
+msgstr ""
+
+# 0c7f9aadd6c146718c840b699f5bf5cd
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:12
+msgid ""
+"if *True*, scaleFactors are spread over all *scaleFactors*, else "
+"scaleFactors[i] is applied to nodes at the i-th extrusion step"
+msgstr ""
+
+# 3b541903f8eb4071af7f80ec4c85d3c8
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:14
+msgid ""
+"optional scaling center; if not provided, a gravity center of nodes and "
+"elements being extruded is used as the scaling center. It can be either"
+"          - a list of tree components of the point or         - a node ID"
+" or         - a GEOM point"
+msgstr ""
+
+# 5019c64c350247c8b446e8a32f82dc8e
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:14
+msgid ""
+"optional scaling center; if not provided, a gravity center of nodes and "
+"elements being extruded is used as the scaling center. It can be either"
+msgstr ""
+
+# 666891c8023e4f38af346f354487557e
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:18
+msgid "a list of tree components of the point or"
+msgstr ""
+
+# c4ad62a1a5dc4f8780d9355a9bc1b957
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:19
+msgid "a node ID or"
+msgstr ""
+
+# 5d7e6fdd9d1e44c4b9e5ea443b28c193
+#: smeshBuilder.Mesh.ExtrusionSweepObjects:20
+msgid "a GEOM point"
+msgstr ""
+
+# c16514f3c26f4ed784b97d9c12cb913b
+#: smeshBuilder.Mesh.FillHole:1
+msgid "Fill with 2D elements a hole defined by a SMESH.FreeBorder."
+msgstr ""
+
+# 527450feb9754d7c990fd2232da6442d
+#: smeshBuilder.Mesh.FillHole:3
+msgid ""
+"either a SMESH.FreeBorder or a list on node IDs. These nodes must "
+"describe all sequential nodes of the hole border. The first and the last "
+"nodes must be the same. Use FindFreeBorders() to get nodes of holes."
+msgstr ""
+
+# ff6d2900fb5b4e719845f70c608156c5
+#: smeshBuilder.Mesh.FindCoincidentFreeBorders:1
+msgid "Return groups of FreeBorder's coincident within the given tolerance."
+msgstr ""
+
+# 6dcbbb32259842a59da9b99826629865
+#: smeshBuilder.Mesh.FindCoincidentFreeBorders:3
+msgid ""
+"the tolerance. If the tolerance <= 0.0 then one tenth of an average size "
+"of elements adjacent to free borders being compared is used."
+msgstr ""
+
+# bd29c83ede0b420581edbfb43ce4afb2
+#: smeshBuilder.Mesh.FindCoincidentFreeBorders:6
+msgid "SMESH.CoincidentFreeBorders structure"
+msgstr ""
+
+# aac72c01877d425a9a214eb2528fbf76
+#: smeshBuilder.Mesh.FindCoincidentNodes:1
+msgid "Find groups of adjacent nodes within Tolerance."
+msgstr ""
+
+# 2d32755b2be94bd0b368d13b248321d1
+# 223b44cdab944b36a06ece8556a117a2
+#: smeshBuilder.Mesh.FindCoincidentNodes:3
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:3
+msgid "the value of tolerance"
+msgstr ""
+
+# 8d2524630f3345df9e8f35913be222fe
+# 0a47cd9f52f9428ca79a7051209ebdda
+#: smeshBuilder.Mesh.FindCoincidentNodes:4
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:6
+msgid ""
+"if *True*, in quadratic mesh puts corner and medium nodes in separate "
+"groups thus preventing their further merge."
+msgstr ""
+
+# 1cdbf2150e29497991ec4a1287453d25
+# 22a4fee6431b446098f2540c1d2782d1
+#: smeshBuilder.Mesh.FindCoincidentNodes:8
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:10
+msgid "the list of groups of nodes IDs (e.g. [[1,12,13],[4,25]])"
+msgstr ""
+
+# 54a9056e90884545b53359ff3ed83834
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:1
+msgid "Find groups of ajacent nodes within Tolerance."
+msgstr ""
+
+# 8614079344054c5d8ac7ea069b68237a
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:4
+msgid "SubMesh, Group or Filter"
+msgstr ""
+
+# 1ffbd227b50c482c8915531361a124c4
+#: smeshBuilder.Mesh.FindCoincidentNodesOnPart:5
+msgid "list of either SubMeshes, Groups or node IDs to exclude from search"
+msgstr ""
+
+# fc63f6cc9bab4804a88320f9bb9600fb
+#: smeshBuilder.Mesh.FindElementByNodes:1
+msgid "Return an element based on all given nodes."
+msgstr ""
+
+# 371a6f262b7d4f33b7de7086898585fb
+#: smeshBuilder.Mesh.FindElementsByPoint:1
+msgid "Find the elements where a point lays IN or ON"
+msgstr ""
+
+# 30b51e3601434245a3eefd35b666ee96
+# 3f2752dee91b40b5be761e444733fa9d
+# 3146cbd7c3cb4028af3e20f145d9d2d0
+# 4c591eb9c579403aab379d9644db4312
+#: smeshBuilder.Mesh.FindElementsByPoint:3
+#: smeshBuilder.Mesh.FindNodeClosestTo:3
+#: smeshBuilder.Mesh.MeshToPassThroughAPoint:3
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:3
+msgid "the X coordinate of a point"
+msgstr ""
+
+# 62fbd1a3dd9f4b67bd67aff4e2c8a885
+# 0fb150c354d64d7c8e91589998fe348b
+# 9bd687ce118f4c47bf8764db3ae6c015
+# 422b3df5c4d34575b38364ab133014b0
+#: smeshBuilder.Mesh.FindElementsByPoint:4
+#: smeshBuilder.Mesh.FindNodeClosestTo:4
+#: smeshBuilder.Mesh.MeshToPassThroughAPoint:4
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:4
+msgid "the Y coordinate of a point"
+msgstr ""
+
+# fb070ad4421545e492af21fb1eddc3ca
+# 5e0218c107494c049616b4c1b6668212
+# 400f4e0ca9e745a698b1b0b276d84579
+# e408b7659e724d95adca035f371af076
+#: smeshBuilder.Mesh.FindElementsByPoint:5
+#: smeshBuilder.Mesh.FindNodeClosestTo:5
+#: smeshBuilder.Mesh.MeshToPassThroughAPoint:5
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:5
+msgid "the Z coordinate of a point"
+msgstr ""
+
+# e3813715abb44fc987676fbea8854c88
+#: smeshBuilder.Mesh.FindElementsByPoint:6
+msgid ""
+"type of elements to find; either of (SMESH.NODE, SMESH.EDGE, SMESH.FACE, "
+"SMESH.VOLUME); SMESH.ALL type means elements of any type excluding nodes,"
+" discrete and 0D elements."
+msgstr ""
+
+# 7dd33cb667a649d5b962ec7a1bfb09f0
+#: smeshBuilder.Mesh.FindElementsByPoint:9
+msgid "a part of mesh (group, sub-mesh) to search within"
+msgstr ""
+
+# 540b448102b746b3879a4126094cd04f
+#: smeshBuilder.Mesh.FindElementsByPoint:11
+msgid "list of IDs of found elements"
+msgstr ""
+
+# 45a45cc8aafd484f9208312cb86f9af6
+#: smeshBuilder.Mesh.FindEqualElements:1
+msgid "Find the elements built on the same nodes."
+msgstr ""
+
+# 4fce3c3eb62c46a096d74c2283373dde
+#: smeshBuilder.Mesh.FindEqualElements:3
+msgid "Mesh or SubMesh, or Group of elements for searching"
+msgstr ""
+
+# 37c974a151ab4801bfef7c7d24f6f388
+#: smeshBuilder.Mesh.FindEqualElements:5
+msgid "the list of groups of equal elements IDs (e.g. [[1,12,13],[4,25]])"
+msgstr ""
+
+# 46ab142b430f4fad8be66b04aa173366
+#: smeshBuilder.Mesh.FindFreeBorders:1
+msgid "Returns all or only closed free borders"
+msgstr ""
+
+# 8eb0fa24ae4049ee9f5c85b7272dc818
+#: smeshBuilder.Mesh.FindFreeBorders:3
+msgid "list of SMESH.FreeBorder's"
+msgstr ""
+
+# 1c0c36da76664a72add79ebb5394fd6a
+#: smeshBuilder.Mesh.FindNodeClosestTo:1
+msgid "Find the node closest to a point"
+msgstr ""
+
+# b1f639be7ee9494791fb516f73403402
+# 68920dfed72e49c1810873d99aa7dec2
+#: smeshBuilder.Mesh.FindNodeClosestTo:7
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:9
+msgid "the ID of a node"
+msgstr ""
+
+# 2651e2b610844f079375fb9dbe7f224e
+#: smeshBuilder.Mesh.FunctorValue:1
+msgid "Return value of a functor for a given element"
+msgstr ""
+
+# 0ba8a013955b4a90a4661b8f980ae09d
+#: smeshBuilder.Mesh.FunctorValue:3
+msgid ""
+"an item of SMESH.FunctorType enum Type \"SMESH.FunctorType._items\" in "
+"the Python Console to see all items."
+msgstr ""
+
+# 32346a098c7041d8b47ee0f51d454de6
+#: smeshBuilder.Mesh.FunctorValue:5
+msgid "element or node ID"
+msgstr ""
+
+# 8a003ccbc9a84a4689dc888e6e16ea00
+#: smeshBuilder.Mesh.FunctorValue:6
+msgid "*elemId* is ID of element or node"
+msgstr ""
+
+# c8e41c5a725840f4b31cace71fdab206
+#: smeshBuilder.Mesh.FunctorValue:8
+msgid "the functor value or zero in case of invalid arguments"
+msgstr ""
+
+# 7cce1c3889854dcca3989702b2259d0c
+#: smeshBuilder.Mesh.GetAlgoState:1
+msgid ""
+"Return errors of hypotheses definition. The list of errors is empty if "
+"everything is OK."
+msgstr ""
+
+# 0576061edca64e5b84786c5dea756805
+# 98d44e05f9ca4125bc430b192429b8b7
+#: smeshBuilder.Mesh.GetAlgoState:4 smeshBuilder.Mesh.IsReadyToCompute:3
+msgid "a sub-shape of a mesh shape"
+msgstr ""
+
+# ac5d534627e64907a1900f4a984411ba
+#: smeshBuilder.Mesh.GetAlgoState:6
+msgid "a list of errors"
+msgstr ""
+
+# 29f19e8c0f654d01953f68d68b204e01
+#: smeshBuilder.Mesh.GetArea:2
+msgid "Get area of 2D element or sum of areas of all 2D mesh elements"
+msgstr ""
+
+# 5edba8f9a8924eb9adf0c5013caf28ac
+#: smeshBuilder.Mesh.GetArea:2
+msgid ""
+"elemId mesh element ID (if not defined - sum of areas of all 2D elements "
+"will be calculated)"
+msgstr ""
+
+# 8197a466527b48a8acd45af8016fe567
+#: smeshBuilder.Mesh.GetArea:4
+msgid ""
+"element's area value if *elemId* is specified or sum of all 2D mesh "
+"elements' areas otherwise"
+msgstr ""
+
+# 8daecbe9a7cb4bf2b0096aaa97519b00
+#: smeshBuilder.Mesh.GetAspectRatio:1
+msgid "Get aspect ratio of 2D or 3D element."
+msgstr ""
+
+# 3eb00d2391ed471dbb4d6f86b79667c0
+#: smeshBuilder.Mesh.GetAspectRatio:5
+msgid "element's aspect ratio value"
+msgstr ""
+
+# 739ec0ec6a6f464d8512013320208b47
+#: smeshBuilder.Mesh.GetAutoColor:1
+msgid "Get flag of object auto color mode."
+msgstr ""
+
+# ab1d8d329e3f4bc9aae6dac918633bfd
+#: smeshBuilder.Mesh.GetBallDiameter:1
+msgid ""
+"Return diameter of a ball discrete element or zero in case of an invalid "
+"*id*"
+msgstr ""
+
+# a807a080206b41838800b920c092a8ed
+# 8b88967abc9544eba2b1dea80b344158
+#: smeshBuilder.Mesh.GetBoundingBox:1
+#: smeshBuilder.smeshBuilder.GetBoundingBox:1
+msgid ""
+"Get measure structure specifying bounding box data of the specified "
+"object(s)"
+msgstr ""
+
+# 2147101885d544aea3f6f3a71eda6cdd
+#: smeshBuilder.Mesh.GetBoundingBox:4
+msgid ""
+"if *IDs* is a list of IDs, *True* value in this parameters specifies that"
+" *objects* are elements, *False* specifies that *objects* are nodes"
+msgstr ""
+
+# 3362a73b19134d82882a53243b3a002d
+# c04e8b5ac4ad4c10ab544e0ec29a44c1
+#: smeshBuilder.Mesh.GetBoundingBox:7
+#: smeshBuilder.smeshBuilder.GetBoundingBox:5
+msgid "Measure structure **BoundingBox()**"
+msgstr ""
+
+# 6a639a7d77604c1ca8c9b4ccc2ebf841
+#: smeshBuilder.Mesh.GetComputeErrors:1
+msgid "Return a list of error messages (SMESH.ComputeError) of the last Compute()"
+msgstr ""
+
+# 2a896de65dc24444912ff70b31138093
+#: smeshBuilder.Mesh.GetElemFaceNodes:1
+msgid "Return nodes of given face (counted from zero) for given volumic element."
+msgstr ""
+
+# a752558def9e41c1978ea78114f06ea2
+#: smeshBuilder.Mesh.GetElemNbNodes:1
+msgid "Return the number of nodes of the given element"
+msgstr ""
+
+# 37598ec881764feba924a2b180e1abeb
+#: smeshBuilder.Mesh.GetElemNbNodes:3
+msgid "an integer value > 0 or -1 if there is no element for the given ID"
+msgstr ""
+
+# 72d5ba1cbdc044f9870d353ce95bfe65
+#: smeshBuilder.Mesh.GetElemNode:1
+msgid ""
+"Return the node ID the given (zero based) index for the given element If "
+"there is no element for the given ID - return -1 If there is no node for "
+"the given index - return -2"
+msgstr ""
+
+# 11016a8d170344099cf358919cdf7a70
+# c79702c20c4542ad9780ec5fdeec9e0f
+# 69975b8a8faa4e7cacdec52b8b854fea
+# c345c75bf5af42cbbe6ba043a4376db4
+# 2092d156aa3849e182c70e4707b50f51
+# 9e48d17b9ebe43cc943b9d13344629d0
+# e8ad657758594b76b279162c2ffff4a1
+# 6d4a1576600e4bb7b58d032d69b167bd
+# 8926c0578174483691a072fe00fb1814
+# 78191756c082457a822e4137ad46eee5
+# 4b09abf6e5d24e07b68345eef201d755
+# d28edeaf041b4616a0dfeb3921ef93ea
+# 5e06226b1c43482788d14fbe38e758a0
+# 87f84c00ea424ef6a5f87ff062ce3c68
+# 0722b74919ac4c3591c548d6f7518c91
+# 8f19baaff3134a18a78b09eafb8dcada
+# c4fc09556fa04658be2cf0a18d7ff6fa
+# c8e469a86a984d5290143a788228c9b7
+# 87cfba8d6a6742ee8fc656f6264d385b
+# 942313a6ef044ce4a1ff677a29cd1ec2
+# 383ac4b701d045788d57e248bcbb8423
+# 5093a07e60d040bababb3f2c9d87abbc
+# a17cbd0c3c244a779f8dd40bee937139
+# 7dcc95e194d243b4a81c28c439af5a2d
+# 56104864a17c400c837bb83f64251f2d
+# 81f75b3336ac482b89544f9a461158dc
+# ac612c6cd39840258a32e81f049674b5
+# 5b55262ad1274ecda104df1859b4673b
+# 588c9c6ac6da4708b6475d56267a861f
+# dc63996b2eaf45a280516c4f7379bd37
+#: smeshBuilder.Mesh.GetElemNode:5 smeshBuilder.Mesh.Nb0DElements:3
+#: smeshBuilder.Mesh.NbBalls:3 smeshBuilder.Mesh.NbBiQuadQuadrangles:3
+#: smeshBuilder.Mesh.NbBiQuadTriangles:3 smeshBuilder.Mesh.NbEdges:3
+#: smeshBuilder.Mesh.NbEdgesOfOrder:6 smeshBuilder.Mesh.NbElements:3
+#: smeshBuilder.Mesh.NbFaces:3 smeshBuilder.Mesh.NbFacesOfOrder:6
+#: smeshBuilder.Mesh.NbHexagonalPrisms:3 smeshBuilder.Mesh.NbHexas:3
+#: smeshBuilder.Mesh.NbHexasOfOrder:6 smeshBuilder.Mesh.NbNodes:3
+#: smeshBuilder.Mesh.NbPolygons:6 smeshBuilder.Mesh.NbPolyhedrons:3
+#: smeshBuilder.Mesh.NbPrisms:3 smeshBuilder.Mesh.NbPrismsOfOrder:6
+#: smeshBuilder.Mesh.NbPyramids:3 smeshBuilder.Mesh.NbPyramidsOfOrder:6
+#: smeshBuilder.Mesh.NbQuadrangles:3 smeshBuilder.Mesh.NbQuadranglesOfOrder:5
+#: smeshBuilder.Mesh.NbSubMesh:3 smeshBuilder.Mesh.NbTetras:3
+#: smeshBuilder.Mesh.NbTetrasOfOrder:6 smeshBuilder.Mesh.NbTriQuadraticHexas:3
+#: smeshBuilder.Mesh.NbTriangles:3 smeshBuilder.Mesh.NbTrianglesOfOrder:6
+#: smeshBuilder.Mesh.NbVolumes:3 smeshBuilder.Mesh.NbVolumesOfOrder:6
+msgid "an integer value"
+msgstr ""
+
+# 3290fda355bf478b9b234734673ba8cf
+#: smeshBuilder.Mesh.GetElemNodes:1
+msgid "Return the IDs of nodes of the given element"
+msgstr ""
+
+# bfe7c3c9fff24777a94ab8e55ef9a73f
+# e584b6f5cdc74cd2aeea533f1e542d5a
+#: smeshBuilder.Mesh.GetElemNodes:3 smeshBuilder.Mesh.GetNodeInverseElements:4
+msgid "a list of integer values"
+msgstr ""
+
+# 8a5cfcdeb86841e2a921fe520ba42987
+#: smeshBuilder.Mesh.GetElementGeomType:1
+msgid "Return the geometric type of mesh element"
+msgstr ""
+
+# e66041a86a2b46f0a0d010fc76d07bae
+#: smeshBuilder.Mesh.GetElementGeomType:3
+msgid ""
+"the value from SMESH::EntityType enumeration     Type "
+"SMESH.EntityType._items in the Python Console to see all possible values."
+msgstr ""
+
+# c4de80da1de6470f8671820ce0bbf1f6
+#: smeshBuilder.Mesh.GetElementGeomType:5
+msgid "the value from SMESH::EntityType enumeration"
+msgstr ""
+
+# 2f85ba210b8e49f1ac0fef6a2fe33883
+#: smeshBuilder.Mesh.GetElementGeomType:6
+msgid ""
+"Type SMESH.EntityType._items in the Python Console to see all possible "
+"values."
+msgstr ""
+
+# 6c63ea8b4c7d4b63a6bc4ac3c780aca2
+#: smeshBuilder.Mesh.GetElementPosition:1
+msgid "Return the position of an element on the shape"
+msgstr ""
+
+# ca525309f1694ba3993d7ee45c180670
+#: smeshBuilder.Mesh.GetElementPosition:3
+msgid "SMESH::ElementPosition"
+msgstr ""
+
+# 6e9121b74c1f48e7bf53fd2fd87c91f4
+#: smeshBuilder.Mesh.GetElementShape:1
+msgid "Return the shape type of mesh element"
+msgstr ""
+
+# 659b85bd91604f559d3f8c5011ee46f6
+#: smeshBuilder.Mesh.GetElementShape:3
+msgid ""
+"the value from SMESH::GeometryType enumeration.     Type "
+"SMESH.GeometryType._items in the Python Console to see all possible "
+"values."
+msgstr ""
+
+# e851e9b286414ce79575b621de65a1b6
+#: smeshBuilder.Mesh.GetElementShape:5
+msgid "the value from SMESH::GeometryType enumeration."
+msgstr ""
+
+# 9956c2283b0f4c4d9ee6906d63711ac6
+#: smeshBuilder.Mesh.GetElementShape:6
+msgid ""
+"Type SMESH.GeometryType._items in the Python Console to see all possible "
+"values."
+msgstr ""
+
+# 18e82d9950794e00933e30d5c2d70929
+#: smeshBuilder.Mesh.GetElementType:1
+msgid "Return the type of mesh element"
+msgstr ""
+
+# 2a147e870f5f492cb84afdef131ba058
+#: smeshBuilder.Mesh.GetElementType:3
+msgid ""
+"the value from SMESH::ElementType enumeration     Type "
+"SMESH.ElementType._items in the Python Console to see all possible "
+"values."
+msgstr ""
+
+# f3d795a2c04a414f8c5916dc40d8c9d7
+#: smeshBuilder.Mesh.GetElementType:5
+msgid "the value from SMESH::ElementType enumeration"
+msgstr ""
+
+# 212db060cf85470b9bab6482e9a463ae
+#: smeshBuilder.Mesh.GetElementType:6
+msgid ""
+"Type SMESH.ElementType._items in the Python Console to see all possible "
+"values."
+msgstr ""
+
+# cc434adc3d45460eb95bfedc4a65b308
+#: smeshBuilder.Mesh.GetElementsByNodes:1
+msgid "Return elements including all given nodes."
+msgstr ""
+
+# 41004c036d294adbbac66a341f41fe06
+#: smeshBuilder.Mesh.GetElementsByType:1
+msgid "Return the list of IDs of mesh elements with the given type"
+msgstr ""
+
+# 9363d47e99a44908b173a981e608e424
+#: smeshBuilder.Mesh.GetElementsByType:3
+msgid ""
+"the required type of elements, either of (SMESH.NODE, SMESH.EDGE, "
+"SMESH.FACE or SMESH.VOLUME)"
+msgstr ""
+
+# c1958ca716614fffafc792953232023e
+#: smeshBuilder.Mesh.GetElementsByType:6
+msgid "list of integer values"
+msgstr ""
+
+# a29539be68854ef98ba640e260d640a1
+#: smeshBuilder.Mesh.GetElementsId:1
+msgid "Return the list of mesh elements IDs"
+msgstr ""
+
+# 9bd190bb06084568a0c917534d0eae10
+# be0054a7a01c4592a073ffb4c1bacf0c
+# fbb192bed78943e58c5ce647d9c1c2a6
+# 51b09592907741e6a29b0e94a426ce35
+# 7f69ab6395814bdd9b9fe08a4e9e1311
+#: smeshBuilder.Mesh.GetElementsId:3 smeshBuilder.Mesh.GetNodesId:3
+#: smeshBuilder.Mesh.GetSubMeshElementsId:6
+#: smeshBuilder.Mesh.GetSubMeshNodesId:7
+#: smeshBuilder.smeshBuilder.GetSubShapesId:3
+msgid "the list of integer values"
+msgstr ""
+
+# d7517dd858ab44ab92f50a1002d14273
+#: smeshBuilder.Mesh.GetFaceNormal:1
+msgid "Return three components of normal of given mesh face"
+msgstr ""
+
+# 687fceddc9ac4cd3b651c6a47296b9cd
+#: smeshBuilder.Mesh.GetFaceNormal:2
+msgid "(or an empty array in KO case)"
+msgstr ""
+
+# 1412506de94e45f1b05405eff9611ad9
+#: smeshBuilder.Mesh.GetFailedShapes:1
+msgid ""
+"Return a list of sub-shapes meshing of which failed, grouped into GEOM "
+"groups by error of an algorithm"
+msgstr ""
+
+# ddaabb92c1ef44a0a269535fef085e3d
+#: smeshBuilder.Mesh.GetFailedShapes:4
+msgid "if *True*, the returned groups will be published in the study"
+msgstr ""
+
+# c88fb7eeaff94a49b8e3db043a0af398
+#: smeshBuilder.Mesh.GetFailedShapes:6
+msgid "a list of GEOM groups each named after a failed algorithm"
+msgstr ""
+
+# c5618f05cbd5474aa9b0eeff3cdeb324
+#: smeshBuilder.Mesh.GetFreeBorders:1
+msgid ""
+"Verify whether a 2D mesh element has free edges (edges connected to one "
+"face only)"
+msgstr ""
+
+# de1289c4aa064546a44e435372d5d992
+#: smeshBuilder.Mesh.GetFreeBorders:3
+msgid "Return a list of special structures (borders)."
+msgstr ""
+
+# 975061fc2efc401096403aaaad97a899
+#: smeshBuilder.Mesh.GetFreeBorders:5
+msgid ""
+"a list of SMESH.FreeEdges. Border structure:: edge id and ids of two its "
+"nodes."
+msgstr ""
+
+# df8eac97931d4b5f9cc346cae7a12ffa
+#: smeshBuilder.Mesh.GetFunctor:1
+msgid "Return a cached numerical functor by its type."
+msgstr ""
+
+# e1b9d4d7a3a0409c96dbb2ce05324615
+#: smeshBuilder.Mesh.GetFunctor:3
+msgid ""
+"an item of SMESH.FunctorType enumeration. Type SMESH.FunctorType._items "
+"in the Python Console to see all items. Note that not all items "
+"correspond to numerical functors."
+msgstr ""
+
+# b37d12aecc534f9e8610b36e090a67ba
+#: smeshBuilder.Mesh.GetFunctor:7
+msgid "SMESH_NumericalFunctor. The functor is already initialized     with a mesh"
+msgstr ""
+
+# f42ca52ddb66432797aa0672ff0226f0
+#: smeshBuilder.Mesh.GetFunctor:9
+msgid "SMESH_NumericalFunctor. The functor is already initialized"
+msgstr ""
+
+# a008dc3939794ff9ba612a9c9f6ceb11
+#: smeshBuilder.Mesh.GetFunctor:10
+msgid "with a mesh"
+msgstr ""
+
+# c6ab738621e842ea9221cbc1f7445ed9
+#: smeshBuilder.Mesh.GetGeometryByMeshElement:1
+msgid ""
+"Return a geometrical object on which the given element was built. The "
+"returned geometrical object, if not nil, is either found in the study or "
+"published by this method with the given name"
+msgstr ""
+
+# 1749be4e1c4d4424aa6b461083e71069
+#: smeshBuilder.Mesh.GetGeometryByMeshElement:5
+msgid "the id of the mesh element"
+msgstr ""
+
+# 1192cb449ef44e9483ed7a6f879a677a
+#: smeshBuilder.Mesh.GetGeometryByMeshElement:6
+msgid "the user-defined name of the geometrical object"
+msgstr ""
+
+# e902e28a08ff4b2cac090e904b33e2d5
+#: smeshBuilder.Mesh.GetGeometryByMeshElement:8
+msgid "GEOM::GEOM_Object instance"
+msgstr ""
+
+# 50ebdfe142d54e3fb503f174ffe96694
+#: smeshBuilder.Mesh.GetGroupByName:1
+msgid "Find groups by name and type"
+msgstr ""
+
+# e0bf267cd076406cb98bc81e223764ef
+#: smeshBuilder.Mesh.GetGroupByName:3
+msgid "name of the group of interest"
+msgstr ""
+
+# 52b75d9634cb41ba8bb10aa70b025935
+#: smeshBuilder.Mesh.GetGroupByName:4
+msgid ""
+"type of elements the groups contain; either of (SMESH.ALL, SMESH.NODE, "
+"SMESH.EDGE, SMESH.FACE, SMESH.VOLUME); by default one group of any type "
+"of elements is returned if elemType == SMESH.ALL then all groups of any "
+"type are returned"
+msgstr ""
+
+# 97ea362068cc4615aff536330e33cdb4
+#: smeshBuilder.Mesh.GetGroupByName:9
+msgid "a list of SMESH_GroupBase's"
+msgstr ""
+
+# 50e3facd53e94198b1db18d7c78f6129
+#: smeshBuilder.Mesh.GetGroupNames:1
+msgid "Get the list of names of groups existing in the mesh"
+msgstr ""
+
+# a05c7af4139541f09c310ec8e6e6a3ea
+#: smeshBuilder.Mesh.GetGroupNames:3
+msgid "list of strings"
+msgstr ""
+
+# 1835c5a0a32043619dacd894ac5e5efc
+#: smeshBuilder.Mesh.GetGroups:1
+msgid ""
+"Get the list of groups existing in the mesh in the order of creation "
+"(starting from the oldest one)"
+msgstr ""
+
+# 10c835b7bd124c03a2b53830e1830b9c
+#: smeshBuilder.Mesh.GetGroups:4
+msgid ""
+"type of elements the groups contain; either of (SMESH.ALL, SMESH.NODE, "
+"SMESH.EDGE, SMESH.FACE, SMESH.VOLUME); by default groups of elements of "
+"all types are returned"
+msgstr ""
+
+# 43b224476cdc4408985aeac2c361bd87
+#: smeshBuilder.Mesh.GetGroups:8
+msgid "a sequence of SMESH_GroupBase"
+msgstr ""
+
+# 795fad6da0984542a2a9ee1269bfe5a4
+#: smeshBuilder.Mesh.GetHypothesisList:1
+msgid "Get the list of hypotheses added on a geometry"
+msgstr ""
+
+# d09e4639b2a54308b6cf80d4efca8082
+# 6c20db5a884740e58c964f46fdca507d
+#: smeshBuilder.Mesh.GetHypothesisList:3 smeshBuilder.Mesh.RemoveHypothesis:4
+msgid "a sub-shape of mesh geometry"
+msgstr ""
+
+# b6b1f11224b749549509b9007dc3b9d0
+#: smeshBuilder.Mesh.GetHypothesisList:5
+msgid "the sequence of SMESH_Hypothesis"
+msgstr ""
+
+# 558f8f24f5cd42849fa409da91d2689a
+#: smeshBuilder.Mesh.GetIDSource:1
+msgid ""
+"Wrap a list of IDs of elements or nodes into SMESH_IDSource which can be "
+"passed as argument to a method accepting mesh, group or sub-mesh"
+msgstr ""
+
+# 61742fe7856f41f49003ea1492ac7b60
+#: smeshBuilder.Mesh.GetIDSource:4
+msgid "list of IDs"
+msgstr ""
+
+# cf65d4dbe01e4b5494ad31458574d616
+#: smeshBuilder.Mesh.GetIDSource:5
+msgid ""
+"type of elements; this parameter is used to distinguish IDs of nodes from"
+" IDs of elements; by default ids are treated as IDs of elements; use "
+"SMESH.NODE if ids are IDs of nodes."
+msgstr ""
+
+# 592b631f4bd6424aa38f429a05919ab3
+#: smeshBuilder.Mesh.GetIDSource:9
+msgid "an instance of SMESH_IDSource"
+msgstr ""
+
+# 43f963b565ff41448c32572766554eb6
+#: smeshBuilder.Mesh.GetIDSource:15
+msgid "call UnRegister() for the returned object as soon as it is no more useful:"
+msgstr ""
+
+# f80671af055e4968b6677abda08ed9ed
+#: smeshBuilder.Mesh.GetIDSource:14
+msgid ""
+"idSrc = mesh.GetIDSource( [1,3,5], SMESH.NODE ) mesh.DoSomething( idSrc )"
+" idSrc.UnRegister()"
+msgstr ""
+
+# 1a9345f86be749fea6025482df7c3584
+#: smeshBuilder.Mesh.GetId:1
+msgid "Get the internal ID"
+msgstr ""
+
+# 4fad2fc6a92f4b65826ae34ec6e11db0
+#: smeshBuilder.Mesh.GetId:3
+msgid "integer value, which is the internal Id of the mesh"
+msgstr ""
+
+# 5038d36c19fa45ff9c456d151b578951
+#: smeshBuilder.Mesh.GetIdsFromFilter:1
+msgid ""
+"Pass mesh elements through the given filter and return IDs of fitting "
+"elements"
+msgstr ""
+
+# 446a54c1a23749e283233fa0d4a2f64a
+# f006491f4414462e822b22d5d893e5a3
+# 5b723c286d72473fb884b611816fae02
+#: smeshBuilder.Mesh.GetIdsFromFilter:3 smeshBuilder.smeshBuilder.GetFilter:14
+#: smeshBuilder.smeshBuilder.GetFilterFromCriteria:6
+msgid "SMESH_Filter"
+msgstr ""
+
+# e6796947add04f8ab0c1a3e2f75721d8
+#: smeshBuilder.Mesh.GetIdsFromFilter:5
+msgid "a list of ids"
+msgstr ""
+
+# 1c2f8df6e7be491e9ae5444d2e62998a
+#: smeshBuilder.Mesh.GetLastCreatedElems:4
+msgid "If during the last operation of MeshEditor some elements were"
+msgstr ""
+
+# 524111c98c0b400eb5950636b086753c
+#: smeshBuilder.Mesh.GetLastCreatedElems:2
+msgid "created this method return the list of their IDs,"
+msgstr ""
+
+# c3385f3d9c5a4c6c858f354958e10aa8
+#: smeshBuilder.Mesh.GetLastCreatedElems:4
+msgid "if new elements were not created - return empty list"
+msgstr ""
+
+# 2935846838ba4a2483e38860edcfa319
+# f828773f5c38492e9dccb49302f7cc05
+#: smeshBuilder.Mesh.GetLastCreatedElems:6
+#: smeshBuilder.Mesh.GetLastCreatedNodes:6
+msgid "the list of integer values (can be empty)"
+msgstr ""
+
+# 63879c2cf4ee47b9b5a1585b63665a27
+#: smeshBuilder.Mesh.GetLastCreatedNodes:4
+msgid "If during the last operation of MeshEditor some nodes were"
+msgstr ""
+
+# f77198d42e124a85bfa2f336e8a109a9
+#: smeshBuilder.Mesh.GetLastCreatedNodes:2
+msgid "created, this method return the list of their IDs,"
+msgstr ""
+
+# 71488b8e5d614bafb130c29b051a393d
+#: smeshBuilder.Mesh.GetLastCreatedNodes:4
+msgid "if new nodes were not created - return empty list"
+msgstr ""
+
+# a9c48c0c947a4049b35081551f99fd36
+#: smeshBuilder.Mesh.GetLength:1
+msgid "Get length of 1D element or sum of lengths of all 1D mesh elements"
+msgstr ""
+
+# 7422de5e006e4188874665fd12649d2c
+#: smeshBuilder.Mesh.GetLength:6
+msgid ""
+"element's length value if *elemId* is specified or sum of all 1D mesh "
+"elements' lengths otherwise"
+msgstr ""
+
+# e320ad5f7c784d13a920d4dbf725daac
+#: smeshBuilder.Mesh.GetLog:1
+msgid ""
+"Return the log of nodes and elements added or removed since the previous "
+"clear of the log."
+msgstr ""
+
+# ce3af55af57d44b5a717af5524264237
+#: smeshBuilder.Mesh.GetLog:4
+msgid "log is emptied after Get (safe if concurrents access)"
+msgstr ""
+
+# 9d52a8be40124bdaac5a2ca588a9ae5d
+#: smeshBuilder.Mesh.GetLog:6
+msgid "commandType number coords indexes"
+msgstr ""
+
+# ea91b60e96d040a5a846ddc7317b60ed
+#: smeshBuilder.Mesh.GetLog:10
+msgid "list of log_block structures"
+msgstr ""
+
+# fecaab4b2bff473e9ee2f3cf15197da6
+#: smeshBuilder.Mesh.GetMaxElementLength:1
+msgid "Get maximum element length."
+msgstr ""
+
+# fb0dad0f2d7d449baac69652c0caaa47
+#: smeshBuilder.Mesh.GetMaxElementLength:5
+msgid "element's maximum length value"
+msgstr ""
+
+# aa6033f659ca420996404e87e20a0e42
+#: smeshBuilder.Mesh.GetMesh:1
+msgid "Return the mesh, that is an instance of SMESH_Mesh interface"
+msgstr ""
+
+# 4d89c9876d6a4943a157657bf6f4f507
+# 22529ebe1e2644bca4150db918fc52e8
+#: smeshBuilder.Mesh.GetMesh:3 smeshBuilder.Mesh.SetMesh:3
+msgid "a SMESH_Mesh object"
+msgstr ""
+
+# 864361c9c1734f9980a7a7e9db65898b
+#: smeshBuilder.Mesh.GetMeshEditor:1
+msgid "Obtain the mesh editor tool"
+msgstr ""
+
+# e8788c5e87d64d51807993ffef2d97f8
+#: smeshBuilder.Mesh.GetMeshEditor:3
+msgid "an instance of SMESH_MeshEditor"
+msgstr ""
+
+# e9b45f13a2cd42239425e5dbbab2cf08
+# 8c2ef6c1733a4630881926f1c04eabbf
+#: smeshBuilder.Mesh.GetMeshInfo:1 smeshBuilder.smeshBuilder.GetMeshInfo:1
+msgid "Get the mesh statistic"
+msgstr ""
+
+# cc1a708538f443eca25cd07fd16f5228
+#: smeshBuilder.Mesh.GetMeshInfo:3
+msgid "dictionary type element - count of elements"
+msgstr ""
+
+# 54a40127ce6d4b0d97aa98493c097ba5
+#: smeshBuilder.Mesh.GetMeshOrder:1
+msgid "Return sub-mesh objects list in meshing order"
+msgstr ""
+
+# f4227c30939e48ddb24a1727bf410692
+#: smeshBuilder.Mesh.GetMeshOrder:3
+msgid "list of lists of sub-meshes"
+msgstr ""
+
+# 1267f1eb16c14a6aa9317cb576d55fb7
+# 3f8eb4106c8744ccb9fb63f9424599e2
+#: smeshBuilder.Mesh.GetMinDistance:1
+#: smeshBuilder.smeshBuilder.GetMinDistance:1
+msgid "Get measure structure specifying minimum distance data between two objects"
+msgstr ""
+
+# cf4dcc5eb8e74ded8c2d46fd120eae3e
+# 14c3fcb433f04d21aea1f1993b9142da
+#: smeshBuilder.Mesh.GetMinDistance:3 smeshBuilder.Mesh.MinDistance:3
+msgid "first node/element id"
+msgstr ""
+
+# 5939c139e0db4d06b389b9d0da043e5f
+# bc76c02af30c41919b9f68768616b919
+#: smeshBuilder.Mesh.GetMinDistance:4 smeshBuilder.Mesh.MinDistance:4
+msgid ""
+"second node/element id (if 0, distance from *id1* to the origin is "
+"computed)"
+msgstr ""
+
+# 171dbd97f5b24a6e9592134a1ff6f175
+# 74c16af31e9741489f4f640c011078f3
+# 35bdad39386e4e58933a939c9fa90b2f
+#: smeshBuilder.Mesh.GetMinDistance:5 smeshBuilder.Mesh.MinDistance:5
+#: smeshBuilder.smeshBuilder.MinDistance:10
+msgid "*True* if *id1* is element id, *False* if it is node id"
+msgstr ""
+
+# 2689e846de0f4abf9f5734e111480855
+# 87f98cdf71c84a6ab619c624ae8c32ad
+# 8db4ec9ae5714a08a18346a4df57d27f
+#: smeshBuilder.Mesh.GetMinDistance:6 smeshBuilder.Mesh.MinDistance:6
+#: smeshBuilder.smeshBuilder.MinDistance:11
+msgid "*True* if *id2* is element id, *False* if it is node id"
+msgstr ""
+
+# da7323a0b6f34b29b7a9b52b90bcb3a7
+#: smeshBuilder.Mesh.GetMinDistance:8
+msgid "Measure structure **MinDistance()**"
+msgstr ""
+
+# a595555385fd428d9078e5206b1d3a15
+#: smeshBuilder.Mesh.GetMinMax:1
+msgid "Return minimal and maximal value of a given functor."
+msgstr ""
+
+# bf64ae948b1944c09c4832e9ad8d6501
+#: smeshBuilder.Mesh.GetMinMax:3
+msgid "(one of SMESH.FunctorType._items)"
+msgstr ""
+
+# d868101dd7d94127b261d5a1cb6c9a7f
+#: smeshBuilder.Mesh.GetMinMax:7
+msgid "tuple (min,max)"
+msgstr ""
+
+# dce0ddbe8e1b40d2a302fa79f82c7b70
+#: smeshBuilder.Mesh.GetMinimumAngle:1
+msgid "Get minimum angle of 2D element."
+msgstr ""
+
+# 24cb750a566c4a9d811b964f419226b4
+#: smeshBuilder.Mesh.GetMinimumAngle:5
+msgid "element's minimum angle value"
+msgstr ""
+
+# a5f77b44bd3c4e79b6d3fbf4df312b2d
+#: smeshBuilder.Mesh.GetName:1
+msgid "Get the name of the mesh"
+msgstr ""
+
+# b9f236a96bb0487b9be14b7b54082265
+#: smeshBuilder.Mesh.GetName:3
+msgid "the name of the mesh as a string"
+msgstr ""
+
+# e8629cc79cdd43f687dbfa2ca947c568
+#: smeshBuilder.Mesh.GetNodeInverseElements:1
+msgid ""
+"Return list of IDs of inverse elements for the given node If there is no "
+"node for the given ID - return an empty list"
+msgstr ""
+
+# 8e9b4b56a3074829b8adaca367067e0b
+#: smeshBuilder.Mesh.GetNodePosition:1
+msgid "Return the position of a node on the shape"
+msgstr ""
+
+# 4b8b5f2b673d44f086a623e6f88c33b8
+#: smeshBuilder.Mesh.GetNodePosition:3
+msgid "SMESH::NodePosition"
+msgstr ""
+
+# 9153409224694ce5831302588b4ee9bd
+#: smeshBuilder.Mesh.GetNodeXYZ:1
+msgid ""
+"Get XYZ coordinates of a node If there is no nodes for the given ID - "
+"return an empty list"
+msgstr ""
+
+# 65656b7d16cc46298b31baebfec67b57
+#: smeshBuilder.Mesh.GetNodeXYZ:4
+msgid "a list of double precision values"
+msgstr ""
+
+# a521f7c383bd4afe8c20f9f5e442c035
+#: smeshBuilder.Mesh.GetNodesId:1
+msgid "Return the list of mesh nodes IDs"
+msgstr ""
+
+# 9cd254c3fb064401aa51d44b2e4fd15f
+#: smeshBuilder.Mesh.GetPointState:1
+msgid ""
+"Return point state in a closed 2D mesh in terms of TopAbs_State "
+"enumeration: 0-IN, 1-OUT, 2-ON, 3-UNKNOWN UNKNOWN state means that either"
+" mesh is wrong or the analysis fails."
+msgstr ""
+
+# a062d062a8a84be3b26df303ef0badb6
+#: smeshBuilder.Mesh.GetShape:1
+msgid "Return the shape associated to the mesh"
+msgstr ""
+
+# ed2a63f026fa435cbdfe821c6d729867
+#: smeshBuilder.Mesh.GetShape:3
+msgid "a GEOM_Object"
+msgstr ""
+
+# cb84d241f9974a49aa3b295ec70a323a
+#: smeshBuilder.Mesh.GetShapeID:1
+msgid "Return the ID of the shape, on which the given node was generated."
+msgstr ""
+
+# ad763776922743029e28916a58649870
+#: smeshBuilder.Mesh.GetShapeID:3
+msgid ""
+"an integer value > 0 or -1 if there is no node for the given     ID or "
+"the node is not assigned to any geometry"
+msgstr ""
+
+# 5720cf450c00491da0bea464bc321644
+#: smeshBuilder.Mesh.GetShapeID:5
+msgid "an integer value > 0 or -1 if there is no node for the given"
+msgstr ""
+
+# 97311ad80e4347a48d7f66fe946aaff4
+#: smeshBuilder.Mesh.GetShapeID:6
+msgid "ID or the node is not assigned to any geometry"
+msgstr ""
+
+# 9c2a8eb03c444c4094dc7e27223f97a9
+#: smeshBuilder.Mesh.GetShapeIDForElem:1
+msgid "Return the ID of the shape, on which the given element was generated."
+msgstr ""
+
+# 1c147b04affd4520b46aafe0fb7e0242
+#: smeshBuilder.Mesh.GetShapeIDForElem:3
+msgid ""
+"an integer value > 0 or -1 if there is no element for the given     ID or"
+" the element is not assigned to any geometry"
+msgstr ""
+
+# 3b30017eea9e4c6b878d333e479fb2bd
+#: smeshBuilder.Mesh.GetShapeIDForElem:5
+msgid "an integer value > 0 or -1 if there is no element for the given"
+msgstr ""
+
+# 11cb84eba2b8466591536a85ae02a734
+#: smeshBuilder.Mesh.GetShapeIDForElem:6
+msgid "ID or the element is not assigned to any geometry"
+msgstr ""
+
+# d3b77648e172466ab39dd3c9681e558d
+#: smeshBuilder.Mesh.GetSkew:1
+msgid "Get skew of 2D element."
+msgstr ""
+
+# 793db66725d441a1802c16c5e5ee1d9e
+#: smeshBuilder.Mesh.GetSkew:5
+msgid "element's skew value"
+msgstr ""
+
+# 4a984ddb44e94d4e8d5373e372f4a8c7
+#: smeshBuilder.Mesh.GetStudyId:1
+msgid "Get the study Id"
+msgstr ""
+
+# ade3b87da0a744d6ba5921234f6b3066
+#: smeshBuilder.Mesh.GetStudyId:3
+msgid "integer value, which is the study Id of the mesh"
+msgstr ""
+
+# 87a56f130476491d9467b974396a40ee
+#: smeshBuilder.Mesh.GetSubMesh:1
+msgid "Get a sub-mesh object associated to a *geom* geometrical object."
+msgstr ""
+
+# 89375d14fa7745c18dda883f24796eee
+#: smeshBuilder.Mesh.GetSubMesh:3
+msgid "a geometrical object (shape)"
+msgstr ""
+
+# 0dd3240bc6c34defa0d0edb7e6d9e18e
+#: smeshBuilder.Mesh.GetSubMesh:4
+msgid "a name for the sub-mesh in the Object Browser"
+msgstr ""
+
+# ee1adf28afc74be882db2a50033d2384
+#: smeshBuilder.Mesh.GetSubMesh:6
+msgid ""
+"an object of type SMESH.SMESH_subMesh, representing a part of mesh,"
+"         which lies on the given shape"
+msgstr ""
+
+# d4aa23bdded6421b8c436c989a98d78a
+#: smeshBuilder.Mesh.GetSubMesh:9
+msgid "an object of type SMESH.SMESH_subMesh, representing a part of mesh,"
+msgstr ""
+
+# fa0723ee67cf40dd89eda6f8af998ff3
+#: smeshBuilder.Mesh.GetSubMesh:9
+msgid "which lies on the given shape"
+msgstr ""
+
+# a8ce8eed620a43e2b6d5515ef45c896d
+#: smeshBuilder.Mesh.GetSubMesh:11
+msgid ""
+"The sub-mesh object gives access to the IDs of nodes and elements. The "
+"sub-mesh object has the following methods:"
+msgstr ""
+
+# 3ffa833443714ce9ba556ee25e4152ab
+#: smeshBuilder.Mesh.GetSubMesh:14
+msgid "SMESH.SMESH_subMesh.GetNumberOfElements()"
+msgstr ""
+
+# b50e04881a0e48598133a06b3a6f5879
+#: smeshBuilder.Mesh.GetSubMesh:15
+msgid "SMESH.SMESH_subMesh.GetNumberOfNodes( all )"
+msgstr ""
+
+# 671d9d4f5bcc4bcbbbd53b764fafb257
+#: smeshBuilder.Mesh.GetSubMesh:16
+msgid "SMESH.SMESH_subMesh.GetElementsId()"
+msgstr ""
+
+# 733a1a481c064324a5dc2fc96d9ba5cf
+#: smeshBuilder.Mesh.GetSubMesh:17
+msgid "SMESH.SMESH_subMesh.GetElementsByType( ElementType )"
+msgstr ""
+
+# 0d3dd16c9ebf48a7b0c813a7d142905e
+#: smeshBuilder.Mesh.GetSubMesh:18
+msgid "SMESH.SMESH_subMesh.GetNodesId()"
+msgstr ""
+
+# 40580e2aaf584de5a0b6c3a7a7c13dbc
+#: smeshBuilder.Mesh.GetSubMesh:19
+msgid "SMESH.SMESH_subMesh.GetSubShape()"
+msgstr ""
+
+# c52c4641b09448ea9c99207aabde8fe8
+#: smeshBuilder.Mesh.GetSubMesh:20
+msgid "SMESH.SMESH_subMesh.GetFather()"
+msgstr ""
+
+# adfa115085ca4137bf36dadff16ac286
+#: smeshBuilder.Mesh.GetSubMesh:21
+msgid "SMESH.SMESH_subMesh.GetId()"
+msgstr ""
+
+# 6223371fbe1b4360821b5ca331e6be3a
+#: smeshBuilder.Mesh.GetSubMesh:28
+msgid "A sub-mesh is implicitly created when a sub-shape is specified at"
+msgstr ""
+
+# 46594d575a4f4c1697ca8e5156dc2757
+#: smeshBuilder.Mesh.GetSubMesh:26
+msgid ""
+"creating an algorithm, for example: algo1D = mesh.Segment(geom=Edge_1) "
+"creates a sub-mesh on *Edge_1* and assign Wire Discretization algorithm "
+"to it. The created sub-mesh can be retrieved from the algorithm: submesh "
+"= algo1D.GetSubMesh()"
+msgstr ""
+
+# 2bab387032f245e0b1fd52c8d81e758c
+#: smeshBuilder.Mesh.GetSubMeshElementType:1
+msgid "Return type of elements on given shape"
+msgstr ""
+
+# 75dd88c9b1b842c79eaeff5890f75e14
+#: smeshBuilder.Mesh.GetSubMeshElementType:3
+msgid "a geom object(sub-shape) Shape must be a sub-shape of a ShapeToMesh()"
+msgstr ""
+
+# 465c269333b54520b04feee47d6a4573
+#: smeshBuilder.Mesh.GetSubMeshElementType:6
+msgid "element type"
+msgstr ""
+
+# f7172c546a4641b9948acacd6a63a699
+#: smeshBuilder.Mesh.GetSubMeshElementsId:1
+msgid "Return the list of submesh elements IDs"
+msgstr ""
+
+# d0e0d971edb640a9a4dcba7cede91d9a
+# da0ad129df0d4b19a3aa90c4e6452d00
+#: smeshBuilder.Mesh.GetSubMeshElementsId:3
+#: smeshBuilder.Mesh.GetSubMeshNodesId:3
+msgid "a geom object(sub-shape) Shape must be the sub-shape of a ShapeToMesh()"
+msgstr ""
+
+# 09360ea0f81c42ce81df00efdb0b66d3
+#: smeshBuilder.Mesh.GetSubMeshNodesId:1
+msgid "Return the list of submesh nodes IDs"
+msgstr ""
+
+# dd5dbb7606e74684b06ad12699533d4b
+#: smeshBuilder.Mesh.GetSubMeshNodesId:5
+msgid ""
+"If true, gives all nodes of submesh elements, otherwise gives only "
+"submesh nodes"
+msgstr ""
+
+# 244234dd1fa245989019ecbcafe4c56b
+#: smeshBuilder.Mesh.GetSubShapeName:1
+msgid "Return a name of a sub-shape by its ID"
+msgstr ""
+
+# 3263b66b7bd54ffdb0eac5e9cc50cff3
+#: smeshBuilder.Mesh.GetSubShapeName:3
+msgid "a unique ID of a sub-shape"
+msgstr ""
+
+# 7c7c6c9b664e407a8838e503323785bc
+#: smeshBuilder.Mesh.GetSubShapeName:5
+msgid ""
+"- \"Face_12\"    (published sub-shape) - FACE #3      (not published sub-"
+"shape) - sub-shape #3 (invalid sub-shape ID) - #3           (error in "
+"this function)"
+msgstr ""
+
+# ae8123e9af90440590d838050f09dc8b
+#: smeshBuilder.Mesh.GetSubShapeName:5
+msgid "\"Face_12\"    (published sub-shape)"
+msgstr ""
+
+# 9ed4c1c5a2734d9693180a5607971d1f
+#: smeshBuilder.Mesh.GetSubShapeName:6
+msgid "FACE #3      (not published sub-shape)"
+msgstr ""
+
+# 15caf3d0d714487492d0af246b17df90
+#: smeshBuilder.Mesh.GetSubShapeName:7
+msgid "sub-shape #3 (invalid sub-shape ID)"
+msgstr ""
+
+# 04f04d244da949c385430e4fc7a72685
+#: smeshBuilder.Mesh.GetSubShapeName:8
+msgid "#3           (error in this function)"
+msgstr ""
+
+# 81db83c759d548c8adcf2dc4e0caab5e
+#: smeshBuilder.Mesh.GetSubShapeName:9
+msgid "a string describing the sub-shape; possible variants"
+msgstr ""
+
+# 82a8e9e3f81d494b8f924cf553598cb1
+#: smeshBuilder.Mesh.GetTaper:1
+msgid "Get taper of 2D element."
+msgstr ""
+
+# 58aad7e5f7114f85a1683536841ac24f
+#: smeshBuilder.Mesh.GetTaper:5
+msgid "element's taper value"
+msgstr ""
+
+# c61b8b114e78472ab593229b5a7a9a41
+#: smeshBuilder.Mesh.GetVolume:2
+msgid "Get volume of 3D element or sum of volumes of all 3D mesh elements"
+msgstr ""
+
+# 6759508bc6254d2b9e2c521c245d171d
+#: smeshBuilder.Mesh.GetVolume:2
+msgid ""
+"elemId mesh element ID (if not defined - sum of volumes of all 3D "
+"elements will be calculated)"
+msgstr ""
+
+# 661cc6bdd3e94c0cac8e910f6ee1fcc0
+#: smeshBuilder.Mesh.GetVolume:4
+msgid ""
+"element's volume value if *elemId* is specified or sum of all 3D mesh "
+"elements' volumes otherwise"
+msgstr ""
+
+# df201da51bca44d1bb3e374a78597384
+#: smeshBuilder.Mesh.GetWarping:1
+msgid "Get warping angle of 2D element."
+msgstr ""
+
+# 555c2f12528b4c199b7d09574dfc84e4
+#: smeshBuilder.Mesh.GetWarping:5
+msgid "element's warping angle value"
+msgstr ""
+
+# b7958548a0034361b2ee1d08e1b28e03
+#: smeshBuilder.Mesh.Group:1
+msgid ""
+"Create a mesh group based on the geometric object *grp* and gives a "
+"*name*, if this parameter is not defined the name is the same as the "
+"geometric group name"
+msgstr ""
+
+# 2e0fd99c6b904a549df63d4c8a36116f
+#: smeshBuilder.Mesh.Group:6
+msgid "Works like GroupOnGeom()."
+msgstr ""
+
+# 4660bb505e6e4e6c8265682cf9283cf4
+#: smeshBuilder.Mesh.Group:8
+msgid "a geometric group, a vertex, an edge, a face or a solid"
+msgstr ""
+
+# 3f32151bce3648739e2b9297039e1249
+# aa104168caf84228b928180da8764115
+#: smeshBuilder.Mesh.Group:11 smeshBuilder.Mesh.GroupOnGeom:11
+msgid "SMESH_GroupOnGeom"
+msgstr ""
+
+# e73610316fd34c5f9f754270f5344f25
+#: smeshBuilder.Mesh.GroupOnFilter:1
+msgid ""
+"Create a mesh group with given *name* based on the *filter* which is a "
+"special type of group dynamically updating it's contents during mesh "
+"modification"
+msgstr ""
+
+# 8e5dc9ae1f7d4970bfdfad57d3f7b203
+# bf75b6a9db4340e4b26045630f3287cf
+#: smeshBuilder.Mesh.GroupOnFilter:5 smeshBuilder.Mesh.MakeGroupByIds:4
+msgid ""
+"the type of elements in the group; either of (SMESH.NODE, SMESH.EDGE, "
+"SMESH.FACE, SMESH.VOLUME)."
+msgstr ""
+
+# cc058633e1994c579f0d01998e3579f2
+#: smeshBuilder.Mesh.GroupOnFilter:8
+msgid "the filter defining group contents"
+msgstr ""
+
+# d94a02362f4c4109a8a97671865f066d
+# d2720efd8bac43c3a0517720d6b290d3
+# b33e96727be74eb58d131848196ef647
+# e91b93a98b844dd0b88364c44a19101a
+# 2bb980669b724504a204854973abd44c
+#: smeshBuilder.Mesh.GroupOnFilter:10 smeshBuilder.Mesh.MakeGroup:14
+#: smeshBuilder.Mesh.MakeGroupByCriteria:7
+#: smeshBuilder.Mesh.MakeGroupByCriterion:6
+#: smeshBuilder.Mesh.MakeGroupByFilter:6
+msgid "SMESH_GroupOnFilter"
+msgstr ""
+
+# ad598822867b4c7f80aeb7d6b6fbd3a1
+#: smeshBuilder.Mesh.GroupOnGeom:1
+msgid ""
+"Create a mesh group based on the geometrical object *grp* and gives a "
+"*name*, if this parameter is not defined the name is the same as the "
+"geometrical group name"
+msgstr ""
+
+# 8715c7c29d7343098a7cd7fa2f2d3c99
+#: smeshBuilder.Mesh.GroupOnGeom:5
+msgid "a geometrical group, a vertex, an edge, a face or a solid"
+msgstr ""
+
+# 28301f527fc843d49107bc9b0248bd32
+#: smeshBuilder.Mesh.GroupOnGeom:7
+msgid ""
+"the type of elements in the group; either of (SMESH.NODE, SMESH.EDGE, "
+"SMESH.FACE, SMESH.VOLUME). If not set, it is automatically detected by "
+"the type of the geometry"
+msgstr ""
+
+# caa73610517e4031bc762cc17a3f9e5d
+#: smeshBuilder.Mesh.HasDuplicatedGroupNamesMED:1
+msgid ""
+"Check the group names for duplications. Consider the maximum group name "
+"length stored in MED file."
+msgstr ""
+
+# e0ab5f97714e49cfaafaa32ded8dcac0
+#: smeshBuilder.Mesh.Hexahedron:1
+msgid "Creates hexahedron 3D algorithm for volumes"
+msgstr ""
+
+# 8d88641bdcb64e63a3c4a1c2b2844e82
+#: smeshBuilder.Mesh.Hexahedron:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Hexahedron`"
+msgstr ""
+
+# 29e43da0ee0d4bf88922194312cd9162
+#: smeshBuilder.Mesh.IntersectGroups:1
+msgid ""
+"Prodice an intersection of two groups. A new group is created. All mesh "
+"elements that are common for the two initial groups are added to the new "
+"one."
+msgstr ""
+
+# 018127875ced44abae96741ee628f168
+#: smeshBuilder.Mesh.IntersectListOfGroups:1
+msgid ""
+"Produce an intersection of groups. New group is created. All mesh "
+"elements that are present in all initial groups simultaneously are added "
+"to the new one"
+msgstr ""
+
+# b11ceec800174ab389abd0150f463383
+#: smeshBuilder.Mesh.InverseDiag:1
+msgid ""
+"Replace two neighbour triangles sharing Node1-Node2 link with the "
+"triangles built on the same 4 nodes but having other common link."
+msgstr ""
+
+# d0e539819a75482ba8a60ec9c707c548
+#: smeshBuilder.Mesh.IsCoherentOrientation2D:1
+msgid "Check if orientation of 2D elements is coherent"
+msgstr ""
+
+# 3a5cc92be55e4e358a967b87f1cc91ae
+#: smeshBuilder.Mesh.IsManifold:1
+msgid "Check if a 2D mesh is manifold"
+msgstr ""
+
+# 7a88a45048d04d8e8d58bb4621bc1307
+#: smeshBuilder.Mesh.IsMediumNode:1
+msgid ""
+"Return true if the given node is the medium node in the given quadratic "
+"element"
+msgstr ""
+
+# 1a3b85be8a384725a61c55d9ecd9ee48
+#: smeshBuilder.Mesh.IsMediumNodeOfAnyElem:1
+msgid ""
+"Return true if the given node is the medium node in one of quadratic "
+"elements"
+msgstr ""
+
+# f6961c3a748f4b2eac63f6fdd76c3bae
+#: smeshBuilder.Mesh.IsMediumNodeOfAnyElem:3
+msgid "ID of the node"
+msgstr ""
+
+# 61af2b540dc44becb1c6a76f1623c76b
+#: smeshBuilder.Mesh.IsMediumNodeOfAnyElem:4
+msgid ""
+"the type of elements to check a state of the node, either of (SMESH.ALL, "
+"SMESH.NODE, SMESH.EDGE, SMESH.FACE or SMESH.VOLUME)"
+msgstr ""
+
+# 249703c715e64c70a5955f545693525c
+#: smeshBuilder.Mesh.IsPoly:1
+msgid "Return true if the given element is a polygon"
+msgstr ""
+
+# 9c07fa29a53f4062aed38d6774823e02
+#: smeshBuilder.Mesh.IsQuadratic:1
+msgid "Return true if the given element is quadratic"
+msgstr ""
+
+# 81b977db4ea6422391e78914390c83d1
+#: smeshBuilder.Mesh.IsReadyToCompute:1
+msgid "Return true if the hypotheses are defined well"
+msgstr ""
+
+# f88a7596dd9147a6a35c8270ac1bb853
+#: smeshBuilder.Mesh.IsUsedHypothesis:1
+msgid "Return True if an algorithm of hypothesis is assigned to a given shape"
+msgstr ""
+
+# 99b9d6d2613b4e3a9a32f26c081169d8
+#: smeshBuilder.Mesh.IsUsedHypothesis:3
+msgid "a hypothesis to check"
+msgstr ""
+
+# d8f81a27392c43bb8ea4cd2207c0f575
+#: smeshBuilder.Mesh.IsUsedHypothesis:6
+msgid "True of False"
+msgstr ""
+
+# 73d043017f0345f8acfcd193ed26ee5b
+#: smeshBuilder.Mesh.Load:1
+msgid "Load mesh from the study after opening the study"
+msgstr ""
+
+# e4826bdeaaf24ed2aea95f46418aa57b
+#: smeshBuilder.Mesh.Make2DMeshFrom3D:1
+msgid "Create 2D mesh as skin on boundary faces of a 3D mesh"
+msgstr ""
+
+# 9a93764148764299901ff84cb9568ff3
+#: smeshBuilder.Mesh.MakeBoundaryElements:2
+msgid "**Create** missing boundary elements around either the whole mesh or"
+msgstr ""
+
+# 3c193d2f82b04fcfab803d6e30c39cf3
+#: smeshBuilder.Mesh.MakeBoundaryElements:2
+msgid "groups of elements"
+msgstr ""
+
+# cb43cd0e13a843168975163c1a621109
+#: smeshBuilder.Mesh.MakeBoundaryElements:4
+msgid ""
+"defines type of boundary elements to create, either of { "
+"SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }"
+msgstr ""
+
+# 38a16fac79d842e89a1407dd14af479c
+#: smeshBuilder.Mesh.MakeBoundaryElements:6
+msgid ""
+"a name of group to store all boundary elements in, \"\" means not to "
+"create the group"
+msgstr ""
+
+# 011acb65638d4176b040bd74e5f1280d
+#: smeshBuilder.Mesh.MakeBoundaryElements:8
+msgid ""
+"a name of a new mesh, which is a copy of the initial mesh + created "
+"boundary elements; \"\" means not to create the new mesh"
+msgstr ""
+
+# 7577b706340840bd9b0805e0509959d9
+#: smeshBuilder.Mesh.MakeBoundaryElements:10
+msgid ""
+"if true, the whole initial mesh will be copied into the new mesh else "
+"only boundary elements will be copied into the new mesh"
+msgstr ""
+
+# cca217aabce54aa1945bd37e1c159538
+#: smeshBuilder.Mesh.MakeBoundaryElements:12
+msgid "groups of elements to make boundary around"
+msgstr ""
+
+# 9d609c784c6d44afa02f8d0bfb07eae3
+#: smeshBuilder.Mesh.MakeBoundaryElements:14
+msgid ""
+"tuple( long, mesh, groups )         long - number of added boundary "
+"elements         mesh - the mesh where elements were added to         "
+"group - the group of boundary elements or None"
+msgstr ""
+
+# 8d027f74bab2465abbdfed0476555460
+#: smeshBuilder.Mesh.MakeBoundaryElements:18
+msgid "tuple( long, mesh, groups )"
+msgstr ""
+
+# adebcdabdd404ff2b2380c3751c0f0c1
+#: smeshBuilder.Mesh.MakeBoundaryElements:17
+msgid ""
+"long - number of added boundary elements mesh - the mesh where elements "
+"were added to group - the group of boundary elements or None"
+msgstr ""
+
+# ae071eda0c29422b99c6d98c4920cd6a
+#: smeshBuilder.Mesh.MakeBoundaryMesh:1
+msgid "Create missing boundary elements"
+msgstr ""
+
+# b1c932b14df54c99a1248a409918a6dc
+#: smeshBuilder.Mesh.MakeBoundaryMesh:3
+msgid ""
+"elements whose boundary is to be checked: mesh, group, sub-mesh or list "
+"of elements if elements is mesh, it must be the mesh whose "
+"MakeBoundaryMesh() is called"
+msgstr ""
+
+# 24358831c2eb462ebd347d7141b9170d
+#: smeshBuilder.Mesh.MakeBoundaryMesh:6
+msgid ""
+"defines type of boundary elements to create, either of { "
+"SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D } "
+"SMESH.BND_1DFROM3D create mesh edges on all borders of free facets of 3D "
+"cells"
+msgstr ""
+
+# 894bfb5336614c4683b8cf4e7a9932e6
+#: smeshBuilder.Mesh.MakeBoundaryMesh:9
+msgid ""
+"a name of group to store created boundary elements in, \"\" means not to "
+"create the group"
+msgstr ""
+
+# f4fc9f2948d3441494054e8745b62c0d
+#: smeshBuilder.Mesh.MakeBoundaryMesh:11
+msgid ""
+"a name of new mesh to store created boundary elements in, \"\" means not "
+"to create the new mesh"
+msgstr ""
+
+# c6ce9ba1a4c84074bb985a997e78f0c0
+#: smeshBuilder.Mesh.MakeBoundaryMesh:13
+msgid ""
+"if true, the checked elements will be copied into the new mesh else only "
+"boundary elements will be copied into the new mesh"
+msgstr ""
+
+# d4847990ea9c42f1923187fed20f8fba
+#: smeshBuilder.Mesh.MakeBoundaryMesh:15
+msgid ""
+"if true, not only new but also pre-existing boundary elements will be "
+"copied into the new mesh"
+msgstr ""
+
+# 8307c137c0e349f6b0ceb687f337ccbe
+#: smeshBuilder.Mesh.MakeBoundaryMesh:18
+msgid "tuple (mesh, group) where boundary elements were added to"
+msgstr ""
+
+# 0c09e443bb904a449fc5989449c015a4
+#: smeshBuilder.Mesh.MakeGroup:1
+msgid "Create a mesh group by the given conditions"
+msgstr ""
+
+# d261dde9ae2a418e8891542422543393
+# 845e83642d7542629bef5b14d53be9a3
+#: smeshBuilder.Mesh.MakeGroup:4 smeshBuilder.smeshBuilder.GetCriterion:4
+msgid "the type of elements(SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)"
+msgstr ""
+
+# cc6ff34108d04fa6ad57c0ca71c61100
+# 74b2a4e8fbe54cd59719585dc091973e
+# 6cd59e1799d14ed79d35b81da8c3a602
+#: smeshBuilder.Mesh.MakeGroup:5 smeshBuilder.smeshBuilder.GetCriterion:5
+#: smeshBuilder.smeshBuilder.GetFilter:4
+msgid ""
+"the type of criterion (SMESH.FT_Taper, SMESH.FT_Area, etc.) Type "
+"SMESH.FunctorType._items in the Python Console to see all values. Note "
+"that the items starting from FT_LessThan are not suitable for CritType."
+msgstr ""
+
+# 9b293a1afc084bbca409c360cfd4943e
+# db5f05c67d924099bf2254cdadc3e80e
+# 1efb271c7f9749c48259a9e5552aca05
+#: smeshBuilder.Mesh.MakeGroup:8 smeshBuilder.smeshBuilder.GetCriterion:8
+#: smeshBuilder.smeshBuilder.GetFilter:7
+msgid "belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}"
+msgstr ""
+
+# 56c6b0819e7649ed91f398f4dac17995
+# 18bc56446fbb4d45887b68086c47a97a
+# 025def87d0094069930e588af2bdfe23
+#: smeshBuilder.Mesh.MakeGroup:9 smeshBuilder.smeshBuilder.GetCriterion:9
+#: smeshBuilder.smeshBuilder.GetFilter:8
+msgid "the threshold value (range of ids as string, shape, numeric)"
+msgstr ""
+
+# 1484d47c52b54922990605b3f8b292c4
+# 5986c162b6044a2a970ec558375eb9d2
+# 69cf181fd3004ea8adafccd51ee4f412
+#: smeshBuilder.Mesh.MakeGroup:10 smeshBuilder.smeshBuilder.GetCriterion:10
+#: smeshBuilder.smeshBuilder.GetFilter:9
+msgid "SMESH.FT_LogicalNOT or SMESH.FT_Undefined"
+msgstr ""
+
+# 089f9db7b1e84bdf8958a47b3af6a4a3
+# 25fae3e3a9ae4a44add94e927977f3dd
+#: smeshBuilder.Mesh.MakeGroup:11 smeshBuilder.smeshBuilder.GetCriterion:13
+msgid ""
+"the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface, "
+"SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces criteria"
+msgstr ""
+
+# c7108bb795e14c758bd4460bcfba750a
+#: smeshBuilder.Mesh.MakeGroupByCriteria:1
+msgid "Create a mesh group by the given criteria (list of criteria)"
+msgstr ""
+
+# e7ac5a66f59045049fb2a63179cbb672
+#: smeshBuilder.Mesh.MakeGroupByCriteria:4
+msgid "the list of criteria"
+msgstr ""
+
+# b42485d614a1425e8a8eccf051dd9f79
+# d7c9e088bcac4b36ad1016e0e8bc228c
+#: smeshBuilder.Mesh.MakeGroupByCriteria:5
+#: smeshBuilder.smeshBuilder.GetFilterFromCriteria:4
+msgid "binary operator used when binary operator of criteria is undefined"
+msgstr ""
+
+# 34e9f5f3630242ec9f88e2fb07f2999f
+#: smeshBuilder.Mesh.MakeGroupByCriterion:1
+msgid "Create a mesh group by the given criterion"
+msgstr ""
+
+# 64654da33977437086e3341ce2e30636
+#: smeshBuilder.Mesh.MakeGroupByCriterion:4
+msgid "the instance of Criterion class"
+msgstr ""
+
+# f358290b80e24febb8992a8bf83bb36c
+#: smeshBuilder.Mesh.MakeGroupByFilter:1
+msgid "Create a mesh group by the given filter"
+msgstr ""
+
+# 503b8b60697e45a696b0c674d01579a2
+#: smeshBuilder.Mesh.MakeGroupByFilter:4
+msgid "the instance of Filter class"
+msgstr ""
+
+# 48d762738f4940bb8ae60094fa306f22
+#: smeshBuilder.Mesh.MakeGroupByIds:1
+msgid "Create a mesh group by the given ids of elements"
+msgstr ""
+
+# 83ccfc4f76fb49afa5801d01bf63dceb
+#: smeshBuilder.Mesh.MakeGroupByIds:6
+msgid "either the list of ids, group, sub-mesh, or filter"
+msgstr ""
+
+# 32e2bab874fc47a0a57609f86a3791c2
+#: smeshBuilder.Mesh.MakePolyLine:1
+msgid ""
+"Create a polyline consisting of 1D mesh elements each lying on a 2D "
+"element of the initial mesh. Positions of new nodes are found by cutting "
+"the mesh by the plane passing through pairs of points specified by each "
+"PolySegment structure. If there are several paths connecting a pair of "
+"points, the shortest path is selected by the module. Position of the "
+"cutting plane is defined by the two points and an optional vector lying "
+"on the plane specified by a PolySegment. By default the vector is defined"
+" by Mesh module as following. A middle point of the two given points is "
+"computed. The middle point is projected to the mesh. The vector goes from"
+" the middle point to the projection point. In case of planar mesh, the "
+"vector is normal to the mesh."
+msgstr ""
+
+# bbfc468ee1ed4e24857acfebc27c04d1
+#: smeshBuilder.Mesh.MakePolyLine:16
+msgid "The used vector which goes from the middle point to its projection."
+msgstr ""
+
+# 2acb6fe0501440089ec9c370c7b944b4
+#: smeshBuilder.Mesh.MergeElements:1
+msgid "Merge elements in each given group."
+msgstr ""
+
+# 476112eae5354e668b8f025854128b99
+#: smeshBuilder.Mesh.MergeElements:3
+msgid ""
+"a list of groups of elements IDs for merging (e.g. [[1,12,13],[25,4]], "
+"then elements 12, 13 and 4 will be removed and replaced by elements 1 and"
+" 25 in all groups)"
+msgstr ""
+
+# 195eeb03d7204bdfb76f8eecf8a59552
+#: smeshBuilder.Mesh.MergeEqualElements:1
+msgid "Leave one element and remove all other elements built on the same nodes."
+msgstr ""
+
+# 221919e0fe904958871ee227e2eb7b6f
+#: smeshBuilder.Mesh.MergeNodes:1
+msgid "Merge nodes"
+msgstr ""
+
+# c8103fe1a26a43978730fb30e96fe408
+#: smeshBuilder.Mesh.MergeNodes:3
+msgid ""
+"a list of groups of nodes IDs for merging (e.g. [[1,12,13],[25,4]], then "
+"nodes 12, 13 and 4 will be removed and replaced by nodes 1 and 25 "
+"correspondingly in all elements and groups"
+msgstr ""
+
+# a36e97897dd54730956d349dec7c7e11
+#: smeshBuilder.Mesh.MergeNodes:6
+msgid ""
+"nodes to keep in the mesh: a list of groups, sub-meshes or node IDs. If "
+"*NodesToKeep* does not include a node to keep for some group to merge, "
+"then the first node in the group is kept."
+msgstr ""
+
+# 787b37de29724f1abe3fa9759f8becc1
+#: smeshBuilder.Mesh.MergeNodes:9
+msgid "prevent merging nodes which cause removal of elements becoming invalid"
+msgstr ""
+
+# a6caaf84dccf4d1a9afbd3d3fe878d9b
+#: smeshBuilder.Mesh.MeshDimension:2
+msgid ""
+"Return the mesh dimension depending on the dimension of the underlying "
+"shape"
+msgstr ""
+
+# d57868c7ebde495e92b2492eb07cbe72
+#: smeshBuilder.Mesh.MeshDimension:2
+msgid ""
+"or, if the mesh is not based on any shape, basing on deimension of "
+"elements"
+msgstr ""
+
+# d9129635a1474adf8c9f734082916b44
+#: smeshBuilder.Mesh.MeshDimension:4
+msgid "mesh dimension as an integer value [0,3]"
+msgstr ""
+
+# 6ec9ff213ba54076a32c70842eb09935
+# 431d585449fb43c5bc90a8c67a0b70c2
+#: smeshBuilder.Mesh.MeshToPassThroughAPoint:1
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:1
+msgid "Find the node closest to a point and moves it to a point location"
+msgstr ""
+
+# 9cdf102e076b45c781513235a257c86a
+#: smeshBuilder.Mesh.MeshToPassThroughAPoint:7
+msgid "the ID of a moved node"
+msgstr ""
+
+# c57e814e4b7b425ba1ea089330ed07be
+#: smeshBuilder.Mesh.MinDistance:1
+msgid "Get minimum distance between two nodes, elements or distance to the origin"
+msgstr ""
+
+# 7d11375edfe041c39f19bedf9bbf109f
+#: smeshBuilder.Mesh.MinDistance:8
+msgid "minimum distance value **GetMinDistance()**"
+msgstr ""
+
+# 6ec3ec4689ee4dfdaf269f701b46dbea
+#: smeshBuilder.Mesh.Mirror:1
+msgid "Create a symmetrical copy of mesh elements"
+msgstr ""
+
+# a745e2a0d2524a479647419a1f4613b3
+# b992b51bbfef488099ebce14cc5389e4
+# bdaf1c3763ec4e14a2e920d83eba804c
+# a4f96ef3620b43dcac78788135672f46
+#: smeshBuilder.Mesh.Mirror:3 smeshBuilder.Mesh.Rotate:3
+#: smeshBuilder.Mesh.Translate:3 smeshBuilder.Mesh.TranslateMakeMesh:3
+msgid "list of elements ids"
+msgstr ""
+
+# 579feadb5f014c7db3d6e5b28808c4e1
+#: smeshBuilder.Mesh.Mirror:4
+msgid "is AxisStruct or geom object(point, line, plane)"
+msgstr ""
+
+# b9f880240f6f4fbeb135d1611837a410
+# d776a146f6d2472faa9495f9e05e4f74
+# b7ecce6233ee4b14ab718490e9300f0c
+# 709450934f9a4558aa09aae415ec8b77
+#: smeshBuilder.Mesh.Mirror:5 smeshBuilder.Mesh.MirrorMakeMesh:5
+#: smeshBuilder.Mesh.MirrorObject:5 smeshBuilder.Mesh.MirrorObjectMakeMesh:5
+msgid ""
+"smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE If the Mirror"
+" is a geom object this parameter is unnecessary"
+msgstr ""
+
+# 34f765b3af464edd8cdeda2af4aac19d
+#: smeshBuilder.Mesh.Mirror:7
+msgid ""
+"allows to copy element (Copy is 1) or to replace with its mirroring (Copy"
+" is 0)"
+msgstr ""
+
+# 43673784b4f74f28aeb1f093267b935d
+# 7f5ee2abe6fc4bb0909bbb201f923fcc
+# 96d08431174e4cf38952ae2a7813856f
+# cebda19b855f47d4beeff530d0983615
+# 36c017f2868e41469b6ebc706527e9bb
+# bebfa499c2544bfc8d74b583dd8d4e82
+# 2989b421baa44a26b45dcecc5475facf
+#: smeshBuilder.Mesh.Mirror:8 smeshBuilder.Mesh.MirrorObject:8
+#: smeshBuilder.Mesh.Rotate:7 smeshBuilder.Mesh.RotateObject:7
+#: smeshBuilder.Mesh.Scale:7 smeshBuilder.Mesh.Translate:6
+#: smeshBuilder.Mesh.TranslateObject:6
+msgid "forces the generation of new groups from existing ones (if Copy)"
+msgstr ""
+
+# 15301a8e3428400a97eb51e6d92b1ace
+#: smeshBuilder.Mesh.MirrorMakeMesh:1
+msgid "Create a new mesh by a symmetrical copy of mesh elements"
+msgstr ""
+
+# 326148ed91084c178cf57202c662eaf6
+#: smeshBuilder.Mesh.MirrorMakeMesh:3
+msgid "the list of elements ids"
+msgstr ""
+
+# c2ac853fcc4a4ff19e2ffb05380b1ee7
+#: smeshBuilder.Mesh.MirrorMakeMesh:4
+msgid "is AxisStruct or geom object (point, line, plane)"
+msgstr ""
+
+# b751df94b8d54b2f84d54e2c5a6d3f7b
+#: smeshBuilder.Mesh.MirrorMakeMesh:8
+msgid "a name of the new mesh to create"
+msgstr ""
+
+# 6ab8e324dc214fcfaabac50f6c653e26
+# eedd8b882a4e40738dcb170f099a6e50
+# 5ae194b1fbe145109a594b9c1b46cecd
+# d422adbf9f7d4b9daad93aef2cd1b76c
+# 5ac22c9f7883474b9382e3f40e6cdeda
+# 52d229ced0e94ba4a112ea6bcb4ef3d8
+# 23e82e3e6d6d477b95660980bbcb9d66
+#: smeshBuilder.Mesh.MirrorMakeMesh:10
+#: smeshBuilder.Mesh.MirrorObjectMakeMesh:10 smeshBuilder.Mesh.RotateMakeMesh:9
+#: smeshBuilder.Mesh.RotateObjectMakeMesh:9 smeshBuilder.Mesh.ScaleMakeMesh:9
+#: smeshBuilder.Mesh.TranslateMakeMesh:8
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:8
+msgid "instance of Mesh class"
+msgstr ""
+
+# 680d63717ed14a6780c35c7fedd7a097
+#: smeshBuilder.Mesh.MirrorObject:1
+msgid "Create a symmetrical copy of the object"
+msgstr ""
+
+# 28d6b4dafb8c43058c2d199b4977e280
+# 2002ab036b6e49879e255cf4e298ffc9
+# feb60938f67546f983e0df8ea48f8419
+# 83eb7316cbc34f15bc742978e8715134
+# fe1613a2e2f14b899fe909eb253cf9b6
+# 045ad88f815a4e549fa7226399939447
+# e824919b8e6a49479297742f38aead04
+#: smeshBuilder.Mesh.MirrorObject:3 smeshBuilder.Mesh.MirrorObjectMakeMesh:3
+#: smeshBuilder.Mesh.ReorientObject:3 smeshBuilder.smeshBuilder.GetArea:3
+#: smeshBuilder.smeshBuilder.GetGravityCenter:3
+#: smeshBuilder.smeshBuilder.GetLength:3 smeshBuilder.smeshBuilder.GetVolume:3
+msgid "mesh, submesh or group"
+msgstr ""
+
+# 2b219079d14b4e29a3b4c60ece0a0071
+# 531f7eefbdb04a159898da6a2637b549
+#: smeshBuilder.Mesh.MirrorObject:4 smeshBuilder.Mesh.MirrorObjectMakeMesh:4
+msgid "AxisStruct or geom object (point, line, plane)"
+msgstr ""
+
+# 07cf3bc5f48a4f04a05204e800e4723d
+#: smeshBuilder.Mesh.MirrorObject:7
+msgid ""
+"allows copying the element (Copy is 1) or replacing it with its mirror "
+"(Copy is 0)"
+msgstr ""
+
+# 406a15954d7a4baab5725a901cca4c3c
+#: smeshBuilder.Mesh.MirrorObjectMakeMesh:1
+msgid "Create a new mesh by a symmetrical copy of the object"
+msgstr ""
+
+# 5b65d5d040644ddb8f1ce307cb197879
+#: smeshBuilder.Mesh.MirrorObjectMakeMesh:8
+msgid "the name of the new mesh to create"
+msgstr ""
+
+# 3b95f0ce8cf04f199b30546d7cc24882
+#: smeshBuilder.Mesh.MoveClosestNodeToPoint:6
+msgid ""
+"if specified (>0), the node with this ID is moved, otherwise, the node "
+"closest to point (*x*, *y*, *z*) is moved"
+msgstr ""
+
+# b7683da5c3274cceb10afc4239d1ecd3
+#: smeshBuilder.Mesh.MoveNode:1
+msgid "Move the node with the given id"
+msgstr ""
+
+# fbbe6aef51e04d118006334f95a046a3
+#: smeshBuilder.Mesh.MoveNode:3
+msgid "the id of the node"
+msgstr ""
+
+# cecdb900b3454cd9be19adea2c4b2e98
+#: smeshBuilder.Mesh.MoveNode:4
+msgid "a new X coordinate"
+msgstr ""
+
+# 1b685bea42de427ea877aa7d0a97940e
+#: smeshBuilder.Mesh.MoveNode:5
+msgid "a new Y coordinate"
+msgstr ""
+
+# 03a472028b274e26bd115804cf2278a3
+#: smeshBuilder.Mesh.MoveNode:6
+msgid "a new Z coordinate"
+msgstr ""
+
+# bec4a6d0fdb249099b01ae60855c777e
+# 731614669b5a418d9fcb87b407b2c8d4
+# 093f16da79c34e5682dac562a02e3ba8
+#: smeshBuilder.Mesh.MoveNode:8 smeshBuilder.Mesh.Reorient:5
+#: smeshBuilder.Mesh.ReorientObject:5
+msgid "True if succeed else False"
+msgstr ""
+
+# 670fa3a8470b4685b4ae0a036e08a59c
+#: smeshBuilder.Mesh.Nb0DElements:1
+msgid "Return the number of 0d elements in the mesh"
+msgstr ""
+
+# d501ceffcd2a4c74998c447ed0c647b1
+#: smeshBuilder.Mesh.NbBalls:1
+msgid "Return the number of ball discrete elements in the mesh"
+msgstr ""
+
+# 0b8c6b5ae0504a94b3c45f3ce3eea77a
+#: smeshBuilder.Mesh.NbBiQuadQuadrangles:1
+msgid "Return the number of biquadratic quadrangles in the mesh"
+msgstr ""
+
+# b3144a02e377499b8b59915e3b4fc185
+#: smeshBuilder.Mesh.NbBiQuadTriangles:1
+msgid "Return the number of biquadratic triangles in the mesh"
+msgstr ""
+
+# 2b30f9f5227343ffabba384a42057809
+#: smeshBuilder.Mesh.NbEdges:1
+msgid "Return the number of edges in the mesh"
+msgstr ""
+
+# dc932452561240c394b2a29b3b61ee8f
+#: smeshBuilder.Mesh.NbEdgesOfOrder:1
+msgid "Return the number of edges with the given order in the mesh"
+msgstr ""
+
+# 6890b9436e794324b31f247ab8d612c3
+# aac02ce9edb54783b761c28317b726ba
+#: smeshBuilder.Mesh.NbEdgesOfOrder:3 smeshBuilder.Mesh.NbVolumesOfOrder:3
+msgid "the order of elements:"
+msgstr ""
+
+# ad3e85312aa54059b1f4fc58ed741222
+#: smeshBuilder.Mesh.NbElements:1
+msgid "Return the number of elements in the mesh"
+msgstr ""
+
+# e198e4380a37401aa1ea8852aef3f68e
+#: smeshBuilder.Mesh.NbFaces:1
+msgid "Return the number of faces in the mesh"
+msgstr ""
+
+# 36cdef1f98ae471c9527b18bd4c3de81
+#: smeshBuilder.Mesh.NbFacesOfOrder:1
+msgid "Return the number of faces with the given order in the mesh"
+msgstr ""
+
+# a6bd2383cc5a49468d25e0bd6a52ee48
+# aa3907815d7342fb82e9c288451bf6a8
+# 8599df36cafc449290cc71cc673ed578
+# 3a4b4c07282e49069ab0afade1abfef9
+# e412b7d13f804b608e98945fa62a616a
+# 6ae31e9dcf084a829994792f03883fae
+#: smeshBuilder.Mesh.NbFacesOfOrder:3 smeshBuilder.Mesh.NbHexasOfOrder:3
+#: smeshBuilder.Mesh.NbPolygons:3 smeshBuilder.Mesh.NbPrismsOfOrder:3
+#: smeshBuilder.Mesh.NbPyramidsOfOrder:3 smeshBuilder.Mesh.NbTetrasOfOrder:3
+msgid ""
+"the order of elements: SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or "
+"SMESH.ORDER_QUADRATIC"
+msgstr ""
+
+# 82e7ba6bcb1a46d7a94c4d6aa60e9ea2
+#: smeshBuilder.Mesh.NbGroups:1
+msgid "Get the number of groups existing in the mesh"
+msgstr ""
+
+# dbdc6f970d1e4c6c8edaa6bed05a6c79
+#: smeshBuilder.Mesh.NbGroups:3
+msgid "the quantity of groups as an integer value"
+msgstr ""
+
+# 79542c5fd7a6423a983e0b2d93103ee1
+#: smeshBuilder.Mesh.NbHexagonalPrisms:1
+msgid "Return the number of hexagonal prisms in the mesh"
+msgstr ""
+
+# d4d8535c80c24d608e03068c4308d057
+#: smeshBuilder.Mesh.NbHexas:1
+msgid "Return the number of hexahedrons in the mesh"
+msgstr ""
+
+# 4847206a982047ee848665c402fbd168
+#: smeshBuilder.Mesh.NbHexasOfOrder:1
+msgid "Return the number of hexahedrons with the given order in the mesh"
+msgstr ""
+
+# 4548aa650fc04928a0ac41d290d393b0
+#: smeshBuilder.Mesh.NbNodes:1
+msgid "Return the number of nodes in the mesh"
+msgstr ""
+
+# e0d773c05c0b4ef6babee05c46d254d2
+#: smeshBuilder.Mesh.NbPolygons:1
+msgid "Return the number of polygons of given order in the mesh"
+msgstr ""
+
+# 3e1ff178f86a43b8807b3979607defdb
+#: smeshBuilder.Mesh.NbPolyhedrons:1
+msgid "Return the number of polyhedrons in the mesh"
+msgstr ""
+
+# 63cc7d5b71514b0f8af00645bf673251
+#: smeshBuilder.Mesh.NbPrisms:1
+msgid "Return the number of prisms in the mesh"
+msgstr ""
+
+# d6699f454dec462399f0d564c532e86e
+#: smeshBuilder.Mesh.NbPrismsOfOrder:1
+msgid "Return the number of prisms with the given order in the mesh"
+msgstr ""
+
+# 80130bf865d8431eb9e61b8086307110
+#: smeshBuilder.Mesh.NbPyramids:1
+msgid "Return the number of pyramids in the mesh"
+msgstr ""
+
+# 2f0fe1ba762e43878339fd3060725853
+#: smeshBuilder.Mesh.NbPyramidsOfOrder:1
+msgid "Return the number of pyramids with the given order in the mesh"
+msgstr ""
+
+# 52f07b311461435a9d497562cc961bae
+#: smeshBuilder.Mesh.NbQuadrangles:1
+msgid "Return the number of quadrangles in the mesh"
+msgstr ""
+
+# d95465267e8347b8a4b2f6af612557ad
+#: smeshBuilder.Mesh.NbQuadranglesOfOrder:1
+msgid "Return the number of quadrangles with the given order in the mesh"
+msgstr ""
+
+# 57de7ad16a0f41eaa957da136fdff65e
+#: smeshBuilder.Mesh.NbQuadranglesOfOrder:3
+msgid "SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC"
+msgstr ""
+
+# 67164544511441b4b0d32c6b9f225962
+#: smeshBuilder.Mesh.NbSubMesh:1
+msgid "Return the number of submeshes in the mesh"
+msgstr ""
+
+# 5cb169c024d04e359ac630a8804c401f
+#: smeshBuilder.Mesh.NbTetras:1
+msgid "Return the number of tetrahedrons in the mesh"
+msgstr ""
+
+# 02a1825526834ac7886a0444e0d2a80f
+#: smeshBuilder.Mesh.NbTetrasOfOrder:1
+msgid "Return the number of tetrahedrons with the given order in the mesh"
+msgstr ""
+
+# d8756ad0b11a4937b18491c584fc02de
+#: smeshBuilder.Mesh.NbTriQuadraticHexas:1
+msgid "Return the number of triquadratic hexahedrons in the mesh"
+msgstr ""
+
+# eeb021ae99fa44d9b11bed70d12094b9
+#: smeshBuilder.Mesh.NbTriangles:1
+msgid "Return the number of triangles in the mesh"
+msgstr ""
+
+# 8c2f12f3eafd4a258de569797fb88336
+#: smeshBuilder.Mesh.NbTrianglesOfOrder:1
+msgid "Return the number of triangles with the given order in the mesh"
+msgstr ""
+
+# 7c40dc1e55824c96a7dae0c6336fab61
+#: smeshBuilder.Mesh.NbTrianglesOfOrder:3
+msgid ""
+"is the order of elements: SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or "
+"SMESH.ORDER_QUADRATIC"
+msgstr ""
+
+# 21a17409cc274a2d98ae1bcbf6cbd0d7
+#: smeshBuilder.Mesh.NbVolumes:1
+msgid "Return the number of volumes in the mesh"
+msgstr ""
+
+# 058e9b8e06604ac38d6ee5a260a85c24
+#: smeshBuilder.Mesh.NbVolumesOfOrder:1
+msgid "Return the number of volumes with the given order in the mesh"
+msgstr ""
+
+# 9ddafb5e414f488c9c1cb5086b25e62a
+#: smeshBuilder.Mesh.Offset:1
+msgid "Create an offset mesh from the given 2D object"
+msgstr ""
+
+# 4a46bf6c49554f599292b8c17912abfa
+#: smeshBuilder.Mesh.Offset:3
+msgid "the source object (mesh, submesh, group or filter)"
+msgstr ""
+
+# 15cd5bab10c14859bf6078d2fde74a3d
+#: smeshBuilder.Mesh.Offset:4
+msgid "signed offset size"
+msgstr ""
+
+# f5a23b39f00a4e22872c0edf1e9f590b
+#: smeshBuilder.Mesh.Offset:6
+msgid ""
+"the name of a mesh to create. If empty, offset elements are added to this"
+" mesh"
+msgstr ""
+
+# a1c918cd955b4249922ca451c7910c1f
+#: smeshBuilder.Mesh.Offset:8
+msgid "A tuple (mesh, list_of_groups)"
+msgstr ""
+
+# a7fed4a9f2564d98b6ff575480dfc9a9
+#: smeshBuilder.Mesh.Polygon:1
+msgid "Creates polygon 2D algorithm for faces"
+msgstr ""
+
+# c4aa966221e6499c866bca842fd41d9a
+#: smeshBuilder.Mesh.Polygon:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace`"
+msgstr ""
+
+# a5efe0036d4d45ca8e76534bd3c34e99
+#: smeshBuilder.Mesh.Prism:1
+msgid "Creates prism 3D algorithm for volumes"
+msgstr ""
+
+# 362f2e883b04436387d8455dcd58b56e
+#: smeshBuilder.Mesh.Prism:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Prism3D`, "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_RadialPrism3D`"
+msgstr ""
+
+# 79e9d89c0fcb40179d8d361ec75b8c07
+#: smeshBuilder.Mesh.Projection1D:1
+msgid "Creates projection 1D algorithm for edges"
+msgstr ""
+
+# 4b46f8cee000405bbbf6232ae78cb494
+#: smeshBuilder.Mesh.Projection1D:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Projection1D`"
+msgstr ""
+
+# 2cdf9d32946f4a77a938bae9c20cd018
+#: smeshBuilder.Mesh.Projection1D2D:1
+msgid "Creates projection 1D-2D algorithm for faces"
+msgstr ""
+
+# 6845ffcf6a0c40a488daeb8a5f884dbe
+#: smeshBuilder.Mesh.Projection1D2D:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Projection1D2D`"
+msgstr ""
+
+# 2ee52187f2864760b5fad2a7711fb059
+#: smeshBuilder.Mesh.Projection2D:1
+msgid "Creates projection 2D algorithm for faces"
+msgstr ""
+
+# 07aaf8e10d5a4d5a95b36c78cda32ef8
+#: smeshBuilder.Mesh.Projection2D:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Projection2D`"
+msgstr ""
+
+# 61c0a07bc3a74ac7b1e2eecb6501a9de
+#: smeshBuilder.Mesh.Projection3D:1
+msgid "Creates projection 3D algorithm for volumes"
+msgstr ""
+
+# 3700a20cd6c44cf2acfb4e15ea3148a1
+#: smeshBuilder.Mesh.Projection3D:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Projection3D`"
+msgstr ""
+
+# 6e01ae3c12aa4ef5a15e45ab44441226
+#: smeshBuilder.Mesh.QuadTo4Tri:2
+msgid ""
+"Split each of given quadrangles into 4 triangles. A node is added at the "
+"center of"
+msgstr ""
+
+# 0a3eb2933fdb4627bd752f7f602158ea
+#: smeshBuilder.Mesh.QuadTo4Tri:2
+msgid "a quadrangle."
+msgstr ""
+
+# 9cbecbb7567c4739a53ef2d5f87eb7e7
+#: smeshBuilder.Mesh.QuadTo4Tri:4
+msgid ""
+"the faces to be splitted. This can be either mesh, sub-mesh, group or a "
+"list of face IDs. By default all quadrangles are split"
+msgstr ""
+
+# df9ab2576d614883a99c8dca3fd6dbd1
+# c4b94dfcec7f41ffaa07a23d24cbb1dc
+# 5f1bd704812d4909966ab8da439102e2
+# 2bb666642c8f4b4e9a1448f2e0cb855b
+#: smeshBuilder.Mesh.QuadToTri:1 smeshBuilder.Mesh.QuadToTriObject:1
+#: smeshBuilder.Mesh.SplitQuad:1 smeshBuilder.Mesh.SplitQuadObject:1
+msgid "Split quadrangles into triangles."
+msgstr ""
+
+# 15fc9dd51f8e4d4eab45e9d08a3846b7
+#: smeshBuilder.Mesh.QuadToTri:3
+msgid "the faces to be splitted."
+msgstr ""
+
+# 5afa14b85fe346d9bded59b81b17cb60
+# 79e120449dcd4c24b568e4070708f20c
+#: smeshBuilder.Mesh.QuadToTri:4 smeshBuilder.Mesh.QuadToTriObject:5
+msgid ""
+"is a numerical functor, in terms of enum SMESH.FunctorType, used to "
+"choose a diagonal for splitting. If *theCriterion* is None, which is a "
+"default value, then quadrangles will be split by the smallest diagonal. "
+"Type SMESH.FunctorType._items in the Python Console to see all items. "
+"Note that not all items correspond to numerical functors."
+msgstr ""
+
+# 1ccaec17af174d5db92836e729aeb1a2
+# de70418984e146f4b8e8d71347166520
+# 5c883b518feb4bbc84d1a0ac15f11bb3
+# d801d5f498f247ffb42fbff6331a88e1
+# c1a8954be77440019b35e39f39eb4d3d
+# 2920afb213d24744b859074ba187f527
+# dd2f831f4baf4003a216b5afbecaa8d7
+# 2d0f87c275cd499bace2f26da5cf1126
+# 687ec889305b4060b91bab8a9d0f4948
+# 3fb5a38d191b4431bc849094d4ad1a6c
+# 396e2002c44048eebdfde2bfc4280f40
+# 04890505277c4149adad367e93f4ef41
+#: smeshBuilder.Mesh.QuadToTri:10 smeshBuilder.Mesh.QuadToTriObject:11
+#: smeshBuilder.Mesh.Smooth:11 smeshBuilder.Mesh.SmoothObject:11
+#: smeshBuilder.Mesh.SmoothParametric:11
+#: smeshBuilder.Mesh.SmoothParametricObject:11
+#: smeshBuilder.Mesh.SplitHexaToPrisms:12
+#: smeshBuilder.Mesh.SplitHexaToTetras:12 smeshBuilder.Mesh.SplitQuad:6
+#: smeshBuilder.Mesh.SplitQuadObject:7 smeshBuilder.Mesh.TriToQuad:12
+#: smeshBuilder.Mesh.TriToQuadObject:11
+msgid "TRUE in case of success, FALSE otherwise."
+msgstr ""
+
+# 28e61878a78742a2a5d24310b9109833
+# 22313872303847759cc7d1886300f035
+#: smeshBuilder.Mesh.QuadToTriObject:3 smeshBuilder.Mesh.SplitQuadObject:3
+msgid ""
+"the object from which the list of elements is taken, this is mesh, "
+"submesh or group"
+msgstr ""
+
+# c1355935a8414929ba8724b020b53106
+#: smeshBuilder.Mesh.Quadrangle:1
+msgid "Creates quadrangle 1D-2D algorithm for faces"
+msgstr ""
+
+# 780c3c191f8c4b4e853503c5e1b03063
+#: smeshBuilder.Mesh.Quadrangle:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D`, "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Quadrangle`, "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D`"
+msgstr ""
+
+# 18aa60aa7dc34d05b24cb6ed8dd69075
+#: smeshBuilder.Mesh.RemoveElements:1
+msgid "Remove the elements from the mesh by ids"
+msgstr ""
+
+# 52497476e77d477f94b6cc7969cdb057
+#: smeshBuilder.Mesh.RemoveElements:3
+msgid "is a list of ids of elements to remove"
+msgstr ""
+
+# 71b6bdb185fa4b2ab85bfa8b9f53ee99
+#: smeshBuilder.Mesh.RemoveGlobalHypotheses:1
+msgid "Remove all global hypotheses"
+msgstr ""
+
+# 531161f35bc14a7485211e8a92da6cbb
+#: smeshBuilder.Mesh.RemoveGroup:1
+msgid "Remove a group"
+msgstr ""
+
+# 944e0f95201e4915adcea8761b15415f
+#: smeshBuilder.Mesh.RemoveGroupWithContents:1
+msgid "Remove a group with its contents"
+msgstr ""
+
+# 0ac7bd59f6b84b169cfe30cc32628fa7
+#: smeshBuilder.Mesh.RemoveHypothesis:1
+msgid "Unassign a hypothesis"
+msgstr ""
+
+# 1840ef4d358e4dc8867165b2e031514a
+#: smeshBuilder.Mesh.RemoveHypothesis:3
+msgid "a hypothesis to unassign"
+msgstr ""
+
+# 9ae559fd4abd4faf8ec97d4bd6220ce2
+#: smeshBuilder.Mesh.RemoveNodes:1
+msgid "Remove nodes from mesh by ids"
+msgstr ""
+
+# 1342bd219b5547698ca12a89dd3f6332
+#: smeshBuilder.Mesh.RemoveNodes:3
+msgid "is a list of ids of nodes to remove"
+msgstr ""
+
+# 5145a93d11024f9b92f00fdf4fa963ce
+#: smeshBuilder.Mesh.RemoveOrphanNodes:1
+msgid "Remove all orphan (free) nodes from mesh"
+msgstr ""
+
+# ba8d703a7bfa437882b1c9eaf3d57e0b
+#: smeshBuilder.Mesh.RemoveOrphanNodes:3
+msgid "number of the removed nodes"
+msgstr ""
+
+# a2c1bf7d413943be9940c65676ca1ef3
+#: smeshBuilder.Mesh.RenumberElements:1
+msgid "Renumber mesh elements (Obsole, does nothing)"
+msgstr ""
+
+# 2f9af83f40614ef99f726ebbb952d745
+#: smeshBuilder.Mesh.RenumberNodes:1
+msgid "Renumber mesh nodes (Obsolete, does nothing)"
+msgstr ""
+
+# 3800946ec831483facc93efc05c64e35
+#: smeshBuilder.Mesh.Reorient:1
+msgid "Reorient elements by ids"
+msgstr ""
+
+# b4ef190fa87340418f91f171cc37acf4
+#: smeshBuilder.Mesh.Reorient:3
+msgid "if undefined reorients all mesh elements"
+msgstr ""
+
+# 4dc2a37a4aa04e0388c5c685b533f954
+#: smeshBuilder.Mesh.Reorient2D:1
+msgid "Reorient faces contained in *the2DObject*."
+msgstr ""
+
+# d8272af15da84f548eda6e142b5c36d5
+#: smeshBuilder.Mesh.Reorient2D:3
+msgid "is a mesh, sub-mesh, group or list of IDs of 2D elements"
+msgstr ""
+
+# b470b8c851584d52b33c9ebb80cb5182
+#: smeshBuilder.Mesh.Reorient2D:4
+msgid ""
+"is a desired direction of normal of *theFace*. It can be either a GEOM "
+"vector or a list of coordinates [x,y,z]."
+msgstr ""
+
+# 1dfe8339852f40c2bc9c14d89f70fd38
+#: smeshBuilder.Mesh.Reorient2D:6
+msgid ""
+"defines a face of *the2DObject* whose normal will be compared with "
+"theDirection. It can be either ID of face or a point by which the face "
+"will be found. The point can be given as either a GEOM vertex or a list "
+"of point coordinates."
+msgstr ""
+
+# f5e76222c9384a80b95e9d6ca96d3d82
+#: smeshBuilder.Mesh.Reorient2D:11
+msgid "number of reoriented faces"
+msgstr ""
+
+# ae586f23352c48d48b1251fe4adf9753
+#: smeshBuilder.Mesh.Reorient2DBy3D:1
+msgid "Reorient faces according to adjacent volumes."
+msgstr ""
+
+# 5637d8472ceb48a5ac09a36dccb6508d
+#: smeshBuilder.Mesh.Reorient2DBy3D:3
+msgid "is a mesh, sub-mesh, group or list of either IDs of faces or face groups."
+msgstr ""
+
+# fbe444904126480189a2b4bff30451cc
+#: smeshBuilder.Mesh.Reorient2DBy3D:5
+msgid "is a mesh, sub-mesh, group or list of IDs of volumes."
+msgstr ""
+
+# 60dbe9aedc35403f8d8874ec23872b78
+#: smeshBuilder.Mesh.Reorient2DBy3D:6
+msgid ""
+"to orient faces to have their normals pointing either *outside* or "
+"*inside* the adjacent volumes."
+msgstr ""
+
+# 9a3f971661f04a978656f650cf470d62
+#: smeshBuilder.Mesh.Reorient2DBy3D:9
+msgid "number of reoriented faces."
+msgstr ""
+
+# 8e1e80ae27d441ebba256e29ad38bd7d
+#: smeshBuilder.Mesh.ReorientObject:1
+msgid "Reorient all elements of the object"
+msgstr ""
+
+# 5ea928bc815a4398a209441663a403f9
+#: smeshBuilder.Mesh.Rotate:1
+msgid "Rotate the elements"
+msgstr ""
+
+# e954892976094ed39e622ccd8ec63101
+# 10562946803448acae999b6f2976f66a
+# 55888f73ab01433f925725524854a2f8
+# 962f6d422de94f06b61d8b6e06c70918
+#: smeshBuilder.Mesh.Rotate:4 smeshBuilder.Mesh.RotateMakeMesh:4
+#: smeshBuilder.Mesh.RotateObject:4 smeshBuilder.Mesh.RotateObjectMakeMesh:4
+msgid "the axis of rotation (AxisStruct or geom line)"
+msgstr ""
+
+# e798b5f0a16f489ea5fe3bd238dedb9d
+# 45432baabead4d679497dba8cc56288e
+# d6094f394259402c985fcac3132cbd40
+#: smeshBuilder.Mesh.Rotate:5 smeshBuilder.Mesh.RotateMakeMesh:5
+#: smeshBuilder.Mesh.RotateObject:5
+msgid ""
+"the angle of rotation (in radians) or a name of variable which defines "
+"angle in degrees"
+msgstr ""
+
+# 7e244b1bc35a4b249902750e33fa262e
+# ab5609c4ae0543feb12e3a9859e6acfb
+#: smeshBuilder.Mesh.Rotate:6 smeshBuilder.Mesh.RotateObject:6
+msgid "allows copying the rotated elements"
+msgstr ""
+
+# c578891480344a5c9172e6bc52881e86
+#: smeshBuilder.Mesh.RotateMakeMesh:1
+msgid "Create a new mesh of rotated elements"
+msgstr ""
+
+# a7fe90db49234210a481c8840bd8d35f
+#: smeshBuilder.Mesh.RotateMakeMesh:3
+msgid "list of element ids"
+msgstr ""
+
+# 5392a24799aa46688fe6f744b0087926
+# 9c22c1ee008847ae8d82e9597d23f3b2
+# 0267bee47be141fea39f30df4b681134
+# 85d8ed7906774892a8a14539dfd79551
+# 39269db1a0c848c5bfe786ae85a90506
+#: smeshBuilder.Mesh.RotateMakeMesh:7 smeshBuilder.Mesh.RotateObjectMakeMesh:7
+#: smeshBuilder.Mesh.ScaleMakeMesh:7 smeshBuilder.Mesh.TranslateMakeMesh:6
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:6
+msgid "the name of the newly created mesh"
+msgstr ""
+
+# d3e52e486673421a9ea6e8f4b694acbd
+#: smeshBuilder.Mesh.RotateObject:1
+msgid "Rotate the object"
+msgstr ""
+
+# 95c57a2024e54d0988fdcde1ca100d67
+#: smeshBuilder.Mesh.RotateObject:3
+msgid "the object to rotate( mesh, submesh, or group)"
+msgstr ""
+
+# 96b9049d72ab4f9d86c5713ef9bb9951
+#: smeshBuilder.Mesh.RotateObjectMakeMesh:1
+msgid "Create a new mesh from the rotated object"
+msgstr ""
+
+# 0ba9e4936617484ca1544bdde3e358b0
+#: smeshBuilder.Mesh.RotateObjectMakeMesh:3
+msgid "the object to rotate (mesh, submesh, or group)"
+msgstr ""
+
+# 09760b1db434420ab3e961a9fd4fb7b4
+#: smeshBuilder.Mesh.RotateObjectMakeMesh:5
+msgid ""
+"the angle of rotation (in radians)  or a name of variable which defines "
+"angle in degrees"
+msgstr ""
+
+# fe557e8c67a148b58253f81d8d0538cc
+#: smeshBuilder.Mesh.RotationSweep:1
+msgid "Generate new elements by rotation of the elements around the axis"
+msgstr ""
+
+# d1e4e9b1519844f9acc592f489d8fcd5
+#: smeshBuilder.Mesh.RotationSweep:3
+msgid "the list of ids of elements to sweep"
+msgstr ""
+
+# 9211a84e790b4419902c42436351c846
+# d5f675a069314f15ac736657d8cf9444
+# c88319f350e84125a9df83c0aad9690c
+# 6cd9136f76cf4aa8b5897c13b67d376b
+#: smeshBuilder.Mesh.RotationSweep:4 smeshBuilder.Mesh.RotationSweepObject:5
+#: smeshBuilder.Mesh.RotationSweepObject1D:5
+#: smeshBuilder.Mesh.RotationSweepObject2D:5
+msgid "the axis of rotation, AxisStruct or line(geom object)"
+msgstr ""
+
+# c6ffb46f19e44786944747f834051cc0
+# e8df8bc96e2d4fceb187e5969dafd975
+#: smeshBuilder.Mesh.RotationSweep:5 smeshBuilder.Mesh.RotationSweepObjects:7
+msgid ""
+"the angle of Rotation (in radians) or a name of variable which defines "
+"angle in degrees"
+msgstr ""
+
+# ca822c2e5f9c4462b4a80b58014e2a37
+# c142b057b52d4fb3879369ca5db72d7d
+# eeddbd9d68014ae594339a2082b26077
+# 0c5a26aa8a37439e83ba944d3489d28d
+# 96280e8fbd3d4a71904640bd12d1e61c
+#: smeshBuilder.Mesh.RotationSweep:7 smeshBuilder.Mesh.RotationSweepObject:8
+#: smeshBuilder.Mesh.RotationSweepObject1D:8
+#: smeshBuilder.Mesh.RotationSweepObject2D:8
+#: smeshBuilder.Mesh.RotationSweepObjects:10
+msgid "tolerance"
+msgstr ""
+
+# e8509709ee544b34abe00c1057b16b07
+# 5085fcbc4a944b7c8fc2811f1d345f71
+# 348f89957de441f0a2c549ebe199e7cf
+# b45308058f394e82b1b25a958770df86
+# cc49391df0ed4ff6b1264ae74382b8db
+#: smeshBuilder.Mesh.RotationSweep:9 smeshBuilder.Mesh.RotationSweepObject:10
+#: smeshBuilder.Mesh.RotationSweepObject1D:10
+#: smeshBuilder.Mesh.RotationSweepObject2D:10
+#: smeshBuilder.Mesh.RotationSweepObjects:12
+msgid ""
+"gives meaning of AngleInRadians: if True then it is an angular size of "
+"all steps, else - size of each step"
+msgstr ""
+
+# 3e521d72e9b54647956f4998b9bc0840
+# 38ed78d4c6384975a31150a167a7200e
+# 39e9331e693d43feb9064f38bd62b5af
+#: smeshBuilder.Mesh.RotationSweepObject:3
+#: smeshBuilder.Mesh.RotationSweepObject1D:3
+#: smeshBuilder.Mesh.RotationSweepObject2D:3
+msgid ""
+"Generate new elements by rotation of the elements of object around the "
+"axis"
+msgstr ""
+
+# 6ff4a11fa8254d849ea6a6f450ad14b7
+#: smeshBuilder.Mesh.RotationSweepObject:3
+msgid "theObject object which elements should be sweeped."
+msgstr ""
+
+# 83137c2b41aa4987a2ac3b710b34ba39
+#: smeshBuilder.Mesh.RotationSweepObject:3
+msgid "It can be a mesh, a sub mesh or a group."
+msgstr ""
+
+# c2da4840d98a474db629486e051739a5
+# 03c1653e504e4c63baa5308e290066b1
+# 9b064e635b1b47afae1cf78d3bd06a4e
+#: smeshBuilder.Mesh.RotationSweepObject:6
+#: smeshBuilder.Mesh.RotationSweepObject1D:6
+#: smeshBuilder.Mesh.RotationSweepObject2D:6
+msgid "the angle of Rotation"
+msgstr ""
+
+# 42a1b003000b4db59e9059a225054d33
+# 7365124f63a1490e928f494a6b33544e
+# c79a165ad4eb41f3bef3656052bd44a1
+#: smeshBuilder.Mesh.RotationSweepObject:7
+#: smeshBuilder.Mesh.RotationSweepObject1D:7
+#: smeshBuilder.Mesh.RotationSweepObject2D:7
+msgid "number of steps"
+msgstr ""
+
+# 1ef2426d19214a939ebeeacd22d1fcce
+# a0ed37cee1934ff690659176a69546bb
+#: smeshBuilder.Mesh.RotationSweepObject1D:2
+#: smeshBuilder.Mesh.RotationSweepObject2D:2
+msgid ""
+"theObject object which elements should be sweeped. It can be a mesh, a "
+"sub mesh or a group."
+msgstr ""
+
+# 175eb1156d0b4d8e939bf5e38beab96d
+#: smeshBuilder.Mesh.RotationSweepObjects:1
+msgid ""
+"Generate new elements by rotation of the given elements and nodes around "
+"the axis"
+msgstr ""
+
+# 6a195e01b87c4606a7251857ab2ec93c
+#: smeshBuilder.Mesh.RotationSweepObjects:3
+msgid "nodes to revolve: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# a50ab2030df843489629d6fa3cccf965
+#: smeshBuilder.Mesh.RotationSweepObjects:4
+msgid "edges to revolve: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# ddbef521730744c8b6085191aef64171
+#: smeshBuilder.Mesh.RotationSweepObjects:5
+msgid "faces to revolve: a list including ids, groups, sub-meshes or a mesh"
+msgstr ""
+
+# 1a38daae3d774ca6b93bb94500bd7438
+#: smeshBuilder.Mesh.RotationSweepObjects:6
+msgid "the axis of rotation: AxisStruct, line (geom object) or [x,y,z,dx,dy,dz]"
+msgstr ""
+
+# d485b5e3d56a4605a5ee381e343e9af5
+#: smeshBuilder.Mesh.Scale:1
+msgid "Scale the object"
+msgstr ""
+
+# 9349610dc317409a94bb4636d8f3ac63
+# e86292bb047f46bc8df75ad2a36a1c76
+# 097cd26b2a6c4a84872f83ca5289dadb
+# f1c57c7f726348e1b93baf9df40effd9
+#: smeshBuilder.Mesh.Scale:3 smeshBuilder.Mesh.ScaleMakeMesh:3
+#: smeshBuilder.Mesh.TranslateObject:3
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:3
+msgid "the object to translate (mesh, submesh, or group)"
+msgstr ""
+
+# c3ffaa87871c4f31b8ee204f1576e269
+# c4d7c82dfb6d417196eab97dba7115b2
+#: smeshBuilder.Mesh.Scale:4 smeshBuilder.Mesh.ScaleMakeMesh:4
+msgid "base point for scale (SMESH.PointStruct or list of 3 coordinates)"
+msgstr ""
+
+# 4baa1ceacd5f42069f7a7962b37d8fc4
+# 315b80ffc63c420e9fc5a6ab6ec45e7d
+#: smeshBuilder.Mesh.Scale:5 smeshBuilder.Mesh.ScaleMakeMesh:5
+msgid "list of 1-3 scale factors for axises"
+msgstr ""
+
+# 9e3df2ff23b5437fb6333c2b7d2695cb
+# cb4f6388baba40d584079a9e9d1cea41
+# 69d4d2544a814039ac7c35a470a817d5
+#: smeshBuilder.Mesh.Scale:6 smeshBuilder.Mesh.Translate:5
+#: smeshBuilder.Mesh.TranslateObject:5
+msgid "allows copying the translated elements"
+msgstr ""
+
+# b0cf7c8ebe434810b5873f3aff0bff81
+#: smeshBuilder.Mesh.Scale:10
+msgid ""
+"list of created groups (SMESH_GroupBase) if MakeGroups=True,     empty "
+"list otherwise"
+msgstr ""
+
+# d2cb4ab4f1ae42a2920330e679e3b7fa
+#: smeshBuilder.Mesh.Scale:12
+msgid "list of created groups (SMESH_GroupBase) if MakeGroups=True,"
+msgstr ""
+
+# 57fde673f9504e969e0987a1252948dc
+#: smeshBuilder.Mesh.Scale:13
+msgid "empty list otherwise"
+msgstr ""
+
+# 1200247e0a624a838e3bf6d74bef3c4b
+# effc1b5bf6ca449799137ed686f365e4
+#: smeshBuilder.Mesh.ScaleMakeMesh:1
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:1
+msgid "Create a new mesh from the translated object"
+msgstr ""
+
+# 2c1d2182a39644cc88b9d9122f0dc258
+#: smeshBuilder.Mesh.Segment:1
+msgid "Creates segment 1D algorithm for edges"
+msgstr ""
+
+# 303a9c89b17a4e02baced43d644c89d7
+#: smeshBuilder.Mesh.Segment:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_CompositeSegment`, "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Segment`, "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Segment_Python`"
+msgstr ""
+
+# 661e60226aaa41c79290fc109259f9ae
+#: smeshBuilder.Mesh.SetAutoColor:1
+msgid "Toggle auto color mode on the object."
+msgstr ""
+
+# ec7a121d4c67443d8076e360fb4bd67c
+#: smeshBuilder.Mesh.SetAutoColor:3
+msgid "the flag which toggles auto color mode."
+msgstr ""
+
+# e77ac0bcdb734859813e04aaa87a666b
+#: smeshBuilder.Mesh.SetAutoColor:5
+msgid ""
+"If switched on, a default color of a new group in Create Group dialog is "
+"chosen randomly."
+msgstr ""
+
+# 08a82d364f3a4464b28731243b47626a
+#: smeshBuilder.Mesh.SetMesh:1
+msgid "Initialize the Mesh object from an instance of SMESH_Mesh interface"
+msgstr ""
+
+# 63e36ea4c5f8437ea6e9ffa779851d50
+#: smeshBuilder.Mesh.SetMeshElementOnShape:1
+msgid "**Bind** an element to a shape"
+msgstr ""
+
+# 7a881589da124ec2916e73996f3990cb
+#: smeshBuilder.Mesh.SetMeshElementOnShape:3
+msgid "an element ID"
+msgstr ""
+
+# e2b27a38a0214b2f839dac8c803e2adf
+#: smeshBuilder.Mesh.SetMeshElementOnShape:4
+msgid "a shape or shape ID"
+msgstr ""
+
+# 403967f5bc554908ba47c9f40ea04ff9
+# 46fe30741b9443cca403648eda1c5736
+# f31170811fc84bf5bcc942d418443269
+# 5ef6df96a6204edb9eccc5b3339edfe1
+# 6e9e7b0e2f4f4674ae1155e966be7ba0
+#: smeshBuilder.Mesh.SetMeshElementOnShape:6
+#: smeshBuilder.Mesh.SetNodeInVolume:6 smeshBuilder.Mesh.SetNodeOnEdge:7
+#: smeshBuilder.Mesh.SetNodeOnFace:8 smeshBuilder.Mesh.SetNodeOnVertex:6
+msgid "True if succeed else raises an exception"
+msgstr ""
+
+# 89da82c2d185491ba1b3438ffd4bcd0f
+#: smeshBuilder.Mesh.SetMeshOrder:1
+msgid "Set order in which concurrent sub-meshes should be meshed"
+msgstr ""
+
+# 811de34c15c44eb68bdbf9c986369fa8
+#: smeshBuilder.Mesh.SetName:1
+msgid "Set a name to the mesh"
+msgstr ""
+
+# fd48e24790f64bf797557a046edd4f69
+#: smeshBuilder.Mesh.SetName:3
+msgid "a new name of the mesh"
+msgstr ""
+
+# fe130067b4aa46ad9ae22380b3fdbca8
+#: smeshBuilder.Mesh.SetNodeInVolume:1
+msgid "**Binds** a node to a solid"
+msgstr ""
+
+# 03d2c18b66664faf8c079cd58635393a
+# 8a43f5a0707246e8bd0a60eda6633710
+# 2b309e8431bd4c83b0f0cd19e83aa86a
+# 99f40985ffdb4a349a3aad9abe4d1ff9
+#: smeshBuilder.Mesh.SetNodeInVolume:3 smeshBuilder.Mesh.SetNodeOnEdge:3
+#: smeshBuilder.Mesh.SetNodeOnFace:3 smeshBuilder.Mesh.SetNodeOnVertex:3
+msgid "a node ID"
+msgstr ""
+
+# 2b4c61df89e04b01847397f8b2c82df5
+#: smeshBuilder.Mesh.SetNodeInVolume:4
+msgid "a solid or solid ID"
+msgstr ""
+
+# 0ff7d43597fc44538393c0999a1cecca
+#: smeshBuilder.Mesh.SetNodeOnEdge:1
+msgid "**Stores** the node position on an edge"
+msgstr ""
+
+# d4ddcede81c2471a8fac785855ca77e0
+#: smeshBuilder.Mesh.SetNodeOnEdge:4
+msgid "an edge or edge ID"
+msgstr ""
+
+# 117ddee40f9a4e3c9aec1f900c06f18f
+#: smeshBuilder.Mesh.SetNodeOnEdge:5
+msgid "a parameter on the edge where the node is located"
+msgstr ""
+
+# 9c35fc3be1664fa5a0b91fe86487d477
+#: smeshBuilder.Mesh.SetNodeOnFace:1
+msgid "**Stores** node position on a face"
+msgstr ""
+
+# 1e0300ec5db64dcb97fd9b250d6408c2
+#: smeshBuilder.Mesh.SetNodeOnFace:4
+msgid "a face or face ID"
+msgstr ""
+
+# f47c78dd5618421fbbac1a243ee20bcc
+#: smeshBuilder.Mesh.SetNodeOnFace:5
+msgid "U parameter on the face where the node is located"
+msgstr ""
+
+# 522e881bacb446eab4d56e76219740a5
+#: smeshBuilder.Mesh.SetNodeOnFace:6
+msgid "V parameter on the face where the node is located"
+msgstr ""
+
+# 66aa045902f645528ae9bcede1f131f2
+#: smeshBuilder.Mesh.SetNodeOnVertex:1
+msgid "**Binds** a node to a vertex"
+msgstr ""
+
+# 34fd1639b2954718b9e54e77581243f5
+#: smeshBuilder.Mesh.SetNodeOnVertex:4
+msgid "a vertex or vertex ID"
+msgstr ""
+
+# 23fe317488f44517b67558e687218654
+#: smeshBuilder.Mesh.SetShape:1
+msgid "Associate the given shape to the mesh (entails the recreation of the mesh)"
+msgstr ""
+
+# 71ac1481f61142d9b91596e761583f26
+#: smeshBuilder.Mesh.SetShape:3
+msgid "the shape to be meshed (GEOM_Object)"
+msgstr ""
+
+# c180cee81aa8405cbc15aed055ef3ad8
+#: smeshBuilder.Mesh.SewBorderToSide:1
+msgid "Sew border to side"
+msgstr ""
+
+# 247d4b291c5e489fa6d6b0f9fc3a32ae
+# db3be725c2354b6daa302e520daa3b3f
+# 54b2a73647c74c72b6fdda61e0edc573
+# dac7dc6664694b85892bc570a3a3ebd4
+#: smeshBuilder.Mesh.SewBorderToSide:3
+#: smeshBuilder.Mesh.SewConformFreeBorders:3 smeshBuilder.Mesh.SewFreeBorders:3
+#: smeshBuilder.Mesh.SewSideElements:8
+msgid "SMESH::Sew_Error"
+msgstr ""
+
+# 9581a6589d2b49cbb7b7efa5430ad85f
+#: smeshBuilder.Mesh.SewCoincidentFreeBorders:1
+msgid "Sew FreeBorder's of each group"
+msgstr ""
+
+# 00151bb72d41477aaf45c78e70c4a6c2
+#: smeshBuilder.Mesh.SewCoincidentFreeBorders:3
+msgid ""
+"either a SMESH.CoincidentFreeBorders structure or a list of lists where "
+"each enclosed list contains node IDs of a group of coincident free "
+"borders such that each consequent triple of IDs within a group describes "
+"a free border in a usual way: n1, n2, nLast - i.e. 1st node, 2nd node and"
+" last node of a border. For example [[1, 2, 10, 20, 21, 40], [11, 12, 15,"
+" 55, 54, 41]] describes two groups of coincident free borders, each group"
+" including two borders."
+msgstr ""
+
+# 6a9559e8500e407cba61089e55f942a0
+#: smeshBuilder.Mesh.SewCoincidentFreeBorders:10
+msgid ""
+"if :code:`True` faces adjacent to free borders are converted to polygons "
+"if a node of opposite border falls on a face edge, else such faces are "
+"split into several ones."
+msgstr ""
+
+# b47cc13c966547fbbc8d41a665052df0
+#: smeshBuilder.Mesh.SewCoincidentFreeBorders:13
+msgid ""
+"if :code:`True` volumes adjacent to free borders are converted to "
+"polyhedra if a node of opposite border falls on a volume edge, else such "
+"volumes, if any, remain intact and the mesh becomes non-conformal."
+msgstr ""
+
+# 706b5650355b4680aa31397eefeb062b
+#: smeshBuilder.Mesh.SewCoincidentFreeBorders:17
+msgid "a number of successfully sewed groups"
+msgstr ""
+
+# 4faf414d9f6247478f655942a32e226b
+#: smeshBuilder.Mesh.SewConformFreeBorders:1
+msgid "Sew conform free borders"
+msgstr ""
+
+# 6989a27e9d7144f6bf6024e5b7976964
+#: smeshBuilder.Mesh.SewFreeBorders:1
+msgid "Sew free borders"
+msgstr ""
+
+# abe4dc973c4c45289e323636555f783d
+#: smeshBuilder.Mesh.SewSideElements:6
+msgid "Sew two sides of a mesh. The nodes belonging to Side1 are"
+msgstr ""
+
+# 7f02e00eeacc4238a2e839413f4d161b
+#: smeshBuilder.Mesh.SewSideElements:2
+msgid ""
+"merged with the nodes of elements of Side2. The number of elements in "
+"theSide1 and in theSide2 must be equal and they should have similar nodal"
+" connectivity. The nodes to merge should belong to side borders and the "
+"first node should be linked to the second."
+msgstr ""
+
+# 02ef543e86a84d878888c6557d270aa5
+#: smeshBuilder.Mesh.Smooth:1
+msgid "Smooth elements"
+msgstr ""
+
+# 154cfe14533541fa8a9dc5d094d18134
+# 681b85e0f9b34ff38a8bded1c5e57b3f
+#: smeshBuilder.Mesh.Smooth:3 smeshBuilder.Mesh.SmoothParametric:3
+msgid "the list if ids of elements to smooth"
+msgstr ""
+
+# 6043c44f91d440ff8e3c5876e05bc21d
+# ecca2e50c4e44801bf3eb0b1700f9aa1
+# 37944ec3c2a142cd874370885d827588
+# 6632d80e7d6046a383142af30915c493
+#: smeshBuilder.Mesh.Smooth:4 smeshBuilder.Mesh.SmoothObject:4
+#: smeshBuilder.Mesh.SmoothParametric:4
+#: smeshBuilder.Mesh.SmoothParametricObject:4
+msgid ""
+"the list of ids of fixed nodes. Note that nodes built on edges and "
+"boundary nodes are always fixed."
+msgstr ""
+
+# 3cb948f7af214de08854f38efab9635e
+# 17b452585e294d2ca832a7da9309c6f1
+# ab788dc8758e47918488e51a8e8b58a9
+# ac9daca9714b4418b5359f235ca22730
+#: smeshBuilder.Mesh.Smooth:6 smeshBuilder.Mesh.SmoothObject:6
+#: smeshBuilder.Mesh.SmoothParametric:6
+#: smeshBuilder.Mesh.SmoothParametricObject:6
+msgid "the maximum number of iterations"
+msgstr ""
+
+# 9e006112d0df4780a0e225569a1d899e
+# 0f2f3ce4e96149018785a0e0f3ca2fb8
+# d2eef6dce8004e329fb5c508a4e1f74c
+# a456d0c936334517ba0eab92d7e0b0e1
+#: smeshBuilder.Mesh.Smooth:7 smeshBuilder.Mesh.SmoothObject:7
+#: smeshBuilder.Mesh.SmoothParametric:7
+#: smeshBuilder.Mesh.SmoothParametricObject:7
+msgid "varies in range [1.0, inf]"
+msgstr ""
+
+# 0c9cb6954b814290856ded0aeca3e4ca
+# 1a61a34c795e45ba9fedce22dcc5a05b
+# 5902aed0839640a08634ab11ae1a1e84
+# b14aff06b3c84f00a098ff176c3f7fec
+#: smeshBuilder.Mesh.Smooth:8 smeshBuilder.Mesh.SmoothObject:8
+#: smeshBuilder.Mesh.SmoothParametric:8
+#: smeshBuilder.Mesh.SmoothParametricObject:8
+msgid ""
+"is either Laplacian (smesh.LAPLACIAN_SMOOTH) or Centroidal "
+"(smesh.CENTROIDAL_SMOOTH)"
+msgstr ""
+
+# 665ad5c99b10496fa48cbd504d8942f8
+#: smeshBuilder.Mesh.SmoothObject:1
+msgid "Smooth elements which belong to the given object"
+msgstr ""
+
+# 52fb4c0b32b64cfcaa055f6cccc7578e
+# 48bb8ef9d7d14429ab25b85ed928e1d0
+#: smeshBuilder.Mesh.SmoothObject:3 smeshBuilder.Mesh.SmoothParametricObject:3
+msgid "the object to smooth"
+msgstr ""
+
+# 41e15641f0b349cfae899721a9dd3cbe
+#: smeshBuilder.Mesh.SmoothParametric:1
+msgid "Parametrically smooth the given elements"
+msgstr ""
+
+# b1c05f2c1fa04bafbdb3257c1213b729
+#: smeshBuilder.Mesh.SmoothParametricObject:1
+msgid "Parametrically smooth the elements which belong to the given object"
+msgstr ""
+
+# a740780fc50b40ef81571682246bb7cf
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:1
+msgid ""
+"Split bi-quadratic elements into linear ones without creation of "
+"additional nodes:"
+msgstr ""
+
+# f83f2305134d44c78660269e7d0378f8
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:3
+msgid "bi-quadratic triangle will be split into 3 linear quadrangles;"
+msgstr ""
+
+# a800e199e96b4e00a5241f51f75bf642
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:4
+msgid "bi-quadratic quadrangle will be split into 4 linear quadrangles;"
+msgstr ""
+
+# bface8f27ea84bdd86616b8d7d71a075
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:5
+msgid "tri-quadratic hexahedron will be split into 8 linear hexahedra."
+msgstr ""
+
+# cd418caf39ce43fa8540a4e0dc8659ac
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:7
+msgid ""
+"Quadratic elements of lower dimension  adjacent to the split bi-quadratic"
+" element will be split in order to keep the mesh conformal."
+msgstr ""
+
+# 3a97c9f46ccf425680f436217f047e2b
+#: smeshBuilder.Mesh.SplitBiQuadraticIntoLinear:10
+msgid ""
+"elements to split\\: sub-meshes, groups, filters or element IDs; if None "
+"(default), all bi-quadratic elements will be split"
+msgstr ""
+
+# cc505fa534224e9d8b4f80b41f2be0e7
+#: smeshBuilder.Mesh.SplitHexaToPrisms:1
+msgid "**Split** hexahedrons into prisms."
+msgstr ""
+
+# 7d04e14dbdd34951b016b072522f9569
+#: smeshBuilder.Mesh.SplitHexaToPrisms:3
+msgid "Uses the pattern mapping functionality for splitting."
+msgstr ""
+
+# 87b2a6cf6287400cbf0f45e8e033cbd4
+#: smeshBuilder.Mesh.SplitHexaToPrisms:5
+msgid ""
+"the object (mesh, submesh or group) from where the list of hexahedrons is"
+" taken;"
+msgstr ""
+
+# 60c437066eb046f89a6ba4e40bd89374
+#: smeshBuilder.Mesh.SplitHexaToPrisms:6
+msgid ""
+"(within the range [0,7]) gives the orientation of the pattern relatively "
+"each hexahedron: keypoint (0,0,0) of the pattern will be mapped into the "
+"<VAR>theNode000</VAR>-th node of each volume, keypoint (0,0,1) will be "
+"mapped into the <VAR>theNode001</VAR>-th node of each volume. Edge "
+"(0,0,0)-(0,0,1) of used pattern connects two not split corners."
+msgstr ""
+
+# 74d4750929614a67a47630cfa8324541
+#: smeshBuilder.Mesh.SplitHexaToTetras:1
+msgid "**Splits** hexahedrons into tetrahedrons."
+msgstr ""
+
+# f95d0b324b9c41ce99e3bdb06217ea90
+#: smeshBuilder.Mesh.SplitHexaToTetras:3
+msgid "This operation uses pattern mapping functionality for splitting."
+msgstr ""
+
+# 6de4292735084605b8a54dcbaaab810a
+#: smeshBuilder.Mesh.SplitHexaToTetras:5
+msgid ""
+"the object from which the list of hexahedrons is taken; this is mesh, "
+"submesh or group."
+msgstr ""
+
+# 2e6f9bcf5ddc457c876fc9dbd8b839d7
+#: smeshBuilder.Mesh.SplitHexaToTetras:6
+msgid ""
+"within the range [0,7]; gives the orientation of the pattern relatively "
+"each hexahedron: the (0,0,0) key-point of the pattern will be mapped into"
+" <VAR>theNode000</VAR>-th node of each volume, the (0,0,1) key-point will"
+" be mapped into <VAR>theNode001</VAR>-th node of each volume. The (0,0,0)"
+" key-point of the used pattern corresponds to a non-split corner."
+msgstr ""
+
+# 8c5bf0905fee40d29c07f8c5ea24100b
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:1
+msgid "Split hexahedra into prisms"
+msgstr ""
+
+# dbdac7c3e3034a468cc73af0fd28d38a
+# eb37988219d9422a966ea68316144aa0
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:3
+#: smeshBuilder.Mesh.SplitVolumesIntoTetra:3
+msgid "either a list of elements or a mesh or a group or a submesh or a filter"
+msgstr ""
+
+# 5f9fd3a9e4914d1ea27e05164068c614
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:4
+msgid ""
+"a point used to find a hexahedron for which *facetNormal* gives a normal "
+"vector defining facets to split into triangles. **startHexPoint** can be "
+"either a triple of coordinates or a vertex."
+msgstr ""
+
+# 08dba551989f433791994a24c8c966c1
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:7
+msgid ""
+"a normal to a facet to split into triangles of a hexahedron found by "
+"*startHexPoint*. **facetNormal** can be either a triple of coordinates or"
+" an edge."
+msgstr ""
+
+# 824949766ae74cd986ff7c9c7c4f2944
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:10
+msgid ""
+"flags passing splitting method: smesh.Hex_2Prisms, smesh.Hex_4Prisms. "
+"smesh.Hex_2Prisms - to split the hexahedron into 2 prisms, etc."
+msgstr ""
+
+# a7fbbd0272e148d2bf71e176576f545e
+#: smeshBuilder.Mesh.SplitHexahedraIntoPrisms:12
+msgid ""
+"if :code:`False`, only hexahedra adjacent to one closest to "
+"**startHexPoint** are split, else **startHexPoint** is used to find the "
+"facet to split in all domains present in *elems*."
+msgstr ""
+
+# dec6057e41b240d6a894bac2c30304b1
+#: smeshBuilder.Mesh.SplitQuad:3
+msgid "the faces to be splitted"
+msgstr ""
+
+# e90d4cb2da8f4245ac44439bea87890f
+# 3feee83dce3947008c4887cc0f962b6f
+#: smeshBuilder.Mesh.SplitQuad:4 smeshBuilder.Mesh.SplitQuadObject:5
+msgid "is used to choose a diagonal for splitting."
+msgstr ""
+
+# 211e2e41bbf0491d9b5523d116449169
+#: smeshBuilder.Mesh.SplitQuadsNearTriangularFacets:1
+msgid "Split quadrangle faces near triangular facets of volumes"
+msgstr ""
+
+# 65fed148a8214637a39898c5319b83c0
+#: smeshBuilder.Mesh.SplitVolumesIntoTetra:1
+msgid "Split volumic elements into tetrahedrons"
+msgstr ""
+
+# 047a84737f3c42d1a547b8229e4562a7
+#: smeshBuilder.Mesh.SplitVolumesIntoTetra:4
+msgid ""
+"flags passing splitting method: smesh.Hex_5Tet, smesh.Hex_6Tet, "
+"smesh.Hex_24Tet. smesh.Hex_5Tet - to split the hexahedron into 5 "
+"tetrahedrons, etc."
+msgstr ""
+
+# 4c4f9a13ac6a46a1813fa0f95b5c88a4
+#: smeshBuilder.Mesh.Translate:1
+msgid "Translate the elements"
+msgstr ""
+
+# ecd1e254d5a146eba642dbb09e5722a7
+# 9f605349b8194637a8f9746cf7f34e43
+#: smeshBuilder.Mesh.Translate:4 smeshBuilder.Mesh.TranslateMakeMesh:4
+msgid "the direction of translation (DirStruct or vector or 3 vector components)"
+msgstr ""
+
+# faa7af32c5184623be4468f7760dd1b8
+#: smeshBuilder.Mesh.TranslateMakeMesh:1
+msgid "Create a new mesh of translated elements"
+msgstr ""
+
+# d7d150dcc20b432ab01773092f4b59d3
+#: smeshBuilder.Mesh.TranslateObject:1
+msgid "Translate the object"
+msgstr ""
+
+# 8a72aae394014837a177fa48fd31bb5d
+#: smeshBuilder.Mesh.TranslateObject:4
+msgid "direction of translation (DirStruct or geom vector or 3 vector components)"
+msgstr ""
+
+# ddaa8920204f48eb939f7b3b22fc3365
+#: smeshBuilder.Mesh.TranslateObjectMakeMesh:4
+msgid ""
+"the direction of translation (DirStruct or geom vector or 3 vector "
+"components)"
+msgstr ""
+
+# 6bce4504ca9e4daea70edde81b4d2596
+#: smeshBuilder.Mesh.TriToQuad:1
+msgid "Fuse the neighbouring triangles into quadrangles."
+msgstr ""
+
+# 7af80b79bcf844ccb374d3e2523dfd56
+#: smeshBuilder.Mesh.TriToQuad:3
+msgid "The triangles to be fused."
+msgstr ""
+
+# 94ee1b86f7d34880bed9e7d07b92d64f
+#: smeshBuilder.Mesh.TriToQuad:4
+msgid ""
+"a numerical functor, in terms of enum SMESH.FunctorType, used to applied "
+"to possible quadrangles to choose a neighbour to fuse with. Type "
+"SMESH.FunctorType._items in the Python Console to see all items. Note "
+"that not all items correspond to numerical functors."
+msgstr ""
+
+# 7e1382ca1e9d41859b24c6d81732ab8b
+#: smeshBuilder.Mesh.TriToQuad:8
+msgid ""
+"is the maximum angle between element normals at which the fusion is still"
+" performed; theMaxAngle is measured in radians. Also it could be a name "
+"of variable which defines angle in degrees."
+msgstr ""
+
+# b34994fed8794da1bb73bbd1b8adf13b
+#: smeshBuilder.Mesh.TriToQuadObject:1
+msgid "Fuse the neighbouring triangles of the object into quadrangles"
+msgstr ""
+
+# d4ef940bb2f24445b30382edfd7ade66
+#: smeshBuilder.Mesh.TriToQuadObject:3
+msgid "is mesh, submesh or group"
+msgstr ""
+
+# 4c44af95b75d45ec876b473b558e5bd4
+#: smeshBuilder.Mesh.TriToQuadObject:4
+msgid ""
+"is a numerical functor, in terms of enum SMESH.FunctorType, applied to "
+"possible quadrangles to choose a neighbour to fuse with. Type "
+"SMESH.FunctorType._items in the Python Console to see all items. Note "
+"that not all items correspond to numerical functors."
+msgstr ""
+
+# 82a6c6a0ff30457b9a223d55d78cc931
+#: smeshBuilder.Mesh.TriToQuadObject:8
+msgid ""
+"a max angle between element normals at which the fusion is still "
+"performed; theMaxAngle is measured in radians."
+msgstr ""
+
+# 187f6f8220fb4725b6330e22f23cbbe8
+#: smeshBuilder.Mesh.Triangle:1
+msgid "Creates triangle 2D algorithm for faces"
+msgstr ""
+
+# 2d3a24207b2b48e69f036f4e193d164f
+#: smeshBuilder.Mesh.Triangle:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO`"
+msgstr ""
+
+# 4c010a6d0ecc4cf0ba1e405f04c4ec30
+#: smeshBuilder.Mesh.UnionGroups:1
+msgid ""
+"Produce a union of two groups. A new group is created. All mesh elements "
+"that are present in the initial groups are added to the new one"
+msgstr ""
+
+# 30a14aec46224f4ca16b7cc531d826a6
+#: smeshBuilder.Mesh.UnionListOfGroups:1
+msgid ""
+"Produce a union list of groups. New group is created. All mesh elements "
+"that are present in initial groups are added to the new one"
+msgstr ""
+
+# df7bbb4623c24aaf8186bacd0d932720
+#: smeshBuilder.Mesh.UseExisting1DElements:1
+msgid "Creates 1D algorithm for edges with reusing of existing mesh elements"
+msgstr ""
+
+# 21f34ffe54d046c19cb17a42f952688b
+#: smeshBuilder.Mesh.UseExisting1DElements:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D`"
+msgstr ""
+
+# 2ba4e8c8724e4de697081d0832d4f821
+#: smeshBuilder.Mesh.UseExisting2DElements:1
+msgid "Creates 1D-2D algorithm for faces with reusing of existing mesh elements"
+msgstr ""
+
+# 906024c7ecef4c39b879884b797aa350
+#: smeshBuilder.Mesh.UseExisting2DElements:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_UseExistingElements_1D2D`"
+msgstr ""
+
+# 04532071962f47a7812b1c1faa014f5e
+#: smeshBuilder.Mesh.UseExistingFaces:1
+msgid "Creates 2D algorithm allowing batch meshing of faces"
+msgstr ""
+
+# 188cc698814641f094e55117737fa024
+#: smeshBuilder.Mesh.UseExistingFaces:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_UseExisting_2D`"
+msgstr ""
+
+# c09f5483a7874c1286a42cb8f73ca468
+#: smeshBuilder.Mesh.UseExistingSegments:1
+msgid "Creates 1D algorithm allowing batch meshing of edges"
+msgstr ""
+
+# 52f46a62b6eb452bb532648086b8acb3
+#: smeshBuilder.Mesh.UseExistingSegments:12
+msgid ""
+"An instance of Mesh_Algorithm sub-class according to the specified "
+"*algo_type*, see "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_UseExisting_1D`"
+msgstr ""
+
+# 4da8d5b0601f4e58bc1848560fa79f8f
+#: smeshBuilder.MeshMeta:1
+msgid ""
+"Private class used to workaround a problem that sometimes isinstance(m, "
+"Mesh) returns False"
+msgstr ""
+
+# 9e97c1dcf44a4bb78ffe41dea937c994
+#: smeshBuilder.New:1
+msgid ""
+"Create a new smeshBuilder instance.The smeshBuilder class provides the "
+"Python interface to create or load meshes."
+msgstr ""
+
+# ed3b6649b8ac4b0dbb83317d4b65c8f3
+#: smeshBuilder.New:8
+msgid "Typical use is:"
+msgstr ""
+
+# 22922498b0d3417daa17b17538594655
+#: smeshBuilder.New:5
+msgid ""
+"import salome salome.salome_init() from salome.smesh import smeshBuilder "
+"smesh = smeshBuilder.New(salome.myStudy)"
+msgstr ""
+
+# 5462d268961749c997c368999d5e68ba
+#: smeshBuilder.New:10
+msgid "SALOME study, generally obtained by salome.myStudy."
+msgstr ""
+
+# 03e6121aa1234366aecac9235fe0c0e6
+#: smeshBuilder.New:11
+msgid "CORBA proxy of SMESH Engine. If None, the default Engine is used."
+msgstr ""
+
+# 90dc03cd87e24db49827cb092044d558
+#: smeshBuilder.New:12
+msgid "CORBA proxy of GEOM  Engine. If None, the default Engine is used."
+msgstr ""
+
+# 81eaaacb448e4a04931eaca4de3423d7
+#: smeshBuilder.New:14
+msgid "smeshBuilder instance"
+msgstr ""
+
+# 886ccd689b794c09b0eb2bbf774f1cfa
+#: smeshBuilder.ParseAngles:1
+msgid "Parse parameters while converting variables to radians"
+msgstr ""
+
+# 53d8d96d589b497ea699b4ecb6d0380a
+#: smeshBuilder.ParseParameters:1
+msgid ""
+"Return list of variable values from salome notebook. The last argument, "
+"if is callable, is used to modify values got from notebook"
+msgstr ""
+
+# 2a9a65e99c3345fcbdd9dc9c9f111324
+#: smeshBuilder.Pattern:1
+msgid ""
+"Private class wrapping SMESH.SMESH_Pattern CORBA class in order to treat "
+"Notebook variables in some methods"
+msgstr ""
+
+# ed98b3537b0e4785a5f2355d1de41f14
+#: smeshBuilder.TreatHypoStatus:1
+msgid "Print error message if a hypothesis was not assigned."
+msgstr ""
+
+# 40c345d587c547488bc365f530a1ae5a
+#: smeshBuilder.algoCreator:1
+msgid "Private class used to bind methods creating algorithms to the class Mesh"
+msgstr ""
+
+# 352b047395684578b1c9c26ffaf5fe5c
+#: smeshBuilder.algoCreator.add:1
+msgid "Store a python class of algorithm"
+msgstr ""
+
+# 1019e62e1384419e8fdf95c16bd2ca26
+#: smeshBuilder.algoCreator.copy:1
+msgid "Create a copy of self and assign mesh to the copy"
+msgstr ""
+
+# 03de87b640a24ad19edffefb18a959a1
+#: smeshBuilder.genObjUnRegister:1
+msgid ""
+"A helper class that calls UnRegister() of SALOME.GenericObj'es stored in "
+"it"
+msgstr ""
+
+# 3b14d26a35c841ad9e077431311950a8
+#: smeshBuilder.genObjUnRegister.set:1
+msgid "Store one or a list of of SALOME.GenericObj'es"
+msgstr ""
+
+# 2449b4a64d8742c297211a453cf59645
+#: smeshBuilder.hypMethodWrapper:1
+msgid ""
+"Private class used to substitute and store variable parameters of "
+"hypotheses."
+msgstr ""
+
+# 5b8dc58dd3094efca74aab9fc1d9dec3
+#: smeshBuilder.meshEditor:1
+msgid ""
+"Private class used to compensate change of CORBA API of SMESH_MeshEditor "
+"for backward compatibility with old dump scripts which call "
+"SMESH_MeshEditor directly and not via smeshBuilder.Mesh"
+msgstr ""
+
+# cce8483f9b8d42fa9cdf34374e5c6a6e
+#: smeshBuilder.meshProxy:1
+msgid ""
+"Private class used to compensate change of CORBA API of SMESH_Mesh for "
+"backward compatibility with old dump scripts which call SMESH_Mesh "
+"directly and not via smeshBuilder.Mesh"
+msgstr ""
+
+# 50bb10f7ca4341a19a2dd356854fe60b
+#: smeshBuilder.smeshBuilder:1
+msgid ""
+"This class allows to create, load or manipulate meshes. It has a set of "
+"methods to create, load or copy meshes, to combine several meshes, etc. "
+"It also has methods to get infos and measure meshes."
+msgstr ""
+
+# ce8522ea80eb4ff8857f668cf225c7df
+# 954a31fd73ec46c59ecabc0e5868c6a7
+#: smeshBuilder.smeshBuilder.BoundingBox:3
+#: smeshBuilder.smeshBuilder.GetBoundingBox:3
+msgid "single source object or list of source objects"
+msgstr ""
+
+# 46aae021f7274a008048d7ac0a25b8f4
+#: smeshBuilder.smeshBuilder.ColorToString:1
+msgid "a string representation of the color."
+msgstr ""
+
+# e3e45db48984486f8984111398966743
+#: smeshBuilder.smeshBuilder.ColorToString:3
+msgid "To be used with filters."
+msgstr ""
+
+# 11b574b638f245208f1ecd021badb70b
+#: smeshBuilder.smeshBuilder.ColorToString:5
+msgid "Parametrs:"
+msgstr ""
+
+# 106c4740c6ba4d33b1201cdbf0ca8556
+#: smeshBuilder.smeshBuilder.ColorToString:6
+msgid "c: color value (SALOMEDS.Color)"
+msgstr ""
+
+# 43e55a0b1433462ab0ec9acc95092ab5
+#: smeshBuilder.smeshBuilder.Concatenate:2
+msgid ""
+"Concatenate the given meshes into one mesh. All groups of input meshes "
+"will be"
+msgstr ""
+
+# ba5402cdb7084614bec07409765b61c1
+#: smeshBuilder.smeshBuilder.Concatenate:2
+msgid "present in the new mesh."
+msgstr ""
+
+# 5ee6643f042f4e84bc7511db99d75c78
+#: smeshBuilder.smeshBuilder.Concatenate:4
+msgid "the meshes, sub-meshes and groups to combine into one mesh"
+msgstr ""
+
+# 2bb7fb5773c44c9a9d55e318f4ac0368
+#: smeshBuilder.smeshBuilder.Concatenate:5
+msgid "if true, groups with same names are united, else they are renamed"
+msgstr ""
+
+# 09efa2c38a3e4a9cb995d226822ac1cb
+#: smeshBuilder.smeshBuilder.Concatenate:6
+msgid "if true, equal nodes and elements are merged"
+msgstr ""
+
+# e72e7f2265744287b155ce30f2c76a59
+#: smeshBuilder.smeshBuilder.Concatenate:7
+msgid "tolerance for merging nodes"
+msgstr ""
+
+# e2641468104b4904ba14fecf0734fdbb
+#: smeshBuilder.smeshBuilder.Concatenate:8
+msgid "forces creation of groups corresponding to every input mesh"
+msgstr ""
+
+# f5647be3291546bb8acbf447cfb7d87d
+#: smeshBuilder.smeshBuilder.Concatenate:9
+msgid "name of a new mesh"
+msgstr ""
+
+# 1d7942a5ff684243bb082721bc400957
+# 53b9c3e234b346aab5f0208271af71de
+# a5c3ada4e4024218ab35653e02543ce1
+# 2a559b26d3594192a9a85ea8e3adc707
+#: smeshBuilder.smeshBuilder.Concatenate:11
+#: smeshBuilder.smeshBuilder.CopyMesh:10
+#: smeshBuilder.smeshBuilder.CreateMeshesFromSTL:3
+#: smeshBuilder.smeshBuilder.CreateMeshesFromUNV:3
+msgid "an instance of Mesh class"
+msgstr ""
+
+# cde6cd0a4e61480e91f539c0d405c969
+#: smeshBuilder.smeshBuilder.CopyMesh:1
+msgid "Create a mesh by copying a part of another mesh."
+msgstr ""
+
+# afce97c673994f6bbec91f13cf3d2837
+#: smeshBuilder.smeshBuilder.CopyMesh:3
+msgid ""
+"a part of mesh to copy, either a Mesh, a sub-mesh or a group; to copy "
+"nodes or elements not contained in any mesh object, pass result of "
+"Mesh.GetIDSource( list_of_ids, type ) as meshPart"
+msgstr ""
+
+# b9e706ed7ff74f0a84958604b6e54624
+#: smeshBuilder.smeshBuilder.CopyMesh:6
+msgid "a name of the new mesh"
+msgstr ""
+
+# 693150e3ba0b45bc90632fbd8d50d648
+#: smeshBuilder.smeshBuilder.CopyMesh:7
+msgid "to create in the new mesh groups the copied elements belongs to"
+msgstr ""
+
+# e70c4022cbdc4d5096c107eb7ad0634d
+#: smeshBuilder.smeshBuilder.CopyMesh:8
+msgid "to preserve order of the copied elements or not"
+msgstr ""
+
+# eae0ce9a1b7242ee90392e9a10a57d8c
+#: smeshBuilder.smeshBuilder.CreateHypothesis:1
+msgid "Create hypothesis"
+msgstr ""
+
+# 3c11986e69504e148d4e288cdc40847b
+#: smeshBuilder.smeshBuilder.CreateHypothesis:3
+msgid "mesh hypothesis type (string)"
+msgstr ""
+
+# 48350ff1faea441f8e0a15005a345bb1
+#: smeshBuilder.smeshBuilder.CreateHypothesis:4
+msgid "mesh plug-in library name"
+msgstr ""
+
+# f408cd8fb1cb4208866670a4b5f7de44
+#: smeshBuilder.smeshBuilder.CreateHypothesis:6
+msgid "created hypothesis instance"
+msgstr ""
+
+# 3ca15020381b4ef481d8526cb01a366d
+#: smeshBuilder.smeshBuilder.CreateMeshesFromCGNS:1
+msgid "Create Mesh objects importing data from the given CGNS file"
+msgstr ""
+
+# 7cd97d8119ee47bd9f599c57c2d358bd
+# dce25ed252fe4bf7b02cb19c39591cc0
+# 715f827a4e314892980e89800ed04dc8
+#: smeshBuilder.smeshBuilder.CreateMeshesFromCGNS:3
+#: smeshBuilder.smeshBuilder.CreateMeshesFromMED:3
+#: smeshBuilder.smeshBuilder.CreateMeshesFromSAUV:3
+msgid "a tuple ( list of Mesh class instances, SMESH.DriverMED_ReadStatus )"
+msgstr ""
+
+# 766566edc5014fc8babcd3ab7e0d7135
+#: smeshBuilder.smeshBuilder.CreateMeshesFromGMF:1
+msgid ""
+"Create a Mesh object importing data from the given GMF file. GMF files "
+"must have .mesh extension for the ASCII format and .meshb for the binary "
+"format."
+msgstr ""
+
+# a55518b82b3641fcadc1edec755dae9c
+#: smeshBuilder.smeshBuilder.CreateMeshesFromGMF:5
+msgid "[ an instance of Mesh class, SMESH.ComputeError ]"
+msgstr ""
+
+# 52151d47eff44cd9b5ca5786d5dce0ac
+#: smeshBuilder.smeshBuilder.CreateMeshesFromMED:1
+msgid "Create a Mesh object(s) importing data from the given MED file"
+msgstr ""
+
+# b425a23c3c34479fb34e78e62cf696af
+#: smeshBuilder.smeshBuilder.CreateMeshesFromSAUV:1
+msgid "Create a Mesh object(s) importing data from the given SAUV file"
+msgstr ""
+
+# 93960dc05e2a4e4287a377ef64049f36
+#: smeshBuilder.smeshBuilder.CreateMeshesFromSTL:1
+msgid "Create a Mesh object importing data from the given STL file"
+msgstr ""
+
+# 77fa47d89f184da392134cf8f791df4b
+#: smeshBuilder.smeshBuilder.CreateMeshesFromUNV:1
+msgid "Create a Mesh object importing data from the given UNV file"
+msgstr ""
+
+# 5e8674053b254209a9dba20a8184a985
+#: smeshBuilder.smeshBuilder.DumpPython:1
+msgid "Dump component to the Python script"
+msgstr ""
+
+# ca2faaf70c9a47b5bebb3701a71967df
+#: smeshBuilder.smeshBuilder.DumpPython:2
+msgid ""
+"This method overrides IDL function to allow default values for the "
+"parameters."
+msgstr ""
+
+# 18f91099adfe4c21b060e3b7268b9098
+#: smeshBuilder.smeshBuilder.EnumToLong:1
+msgid "Return a long value from enumeration"
+msgstr ""
+
+# 52fa8d4cee1b4819ad81f85ce48478f9
+#: smeshBuilder.smeshBuilder.GetArea:1
+msgid "Get sum of areas of all 2D elements in the mesh object."
+msgstr ""
+
+# c9f2ae81cb7240faa65550e95b484ec1
+#: smeshBuilder.smeshBuilder.GetArea:5
+msgid "sum of areas of all 2D elements"
+msgstr ""
+
+# 6d6c7e7379b64c6e8a8b8308816e19fa
+#: smeshBuilder.smeshBuilder.GetAxisStruct:1
+msgid "Get AxisStruct from object"
+msgstr ""
+
+# d6b5f4db3bcd42c0976287ae93a63dfd
+#: smeshBuilder.smeshBuilder.GetAxisStruct:3
+msgid "a GEOM object (line or plane)"
+msgstr ""
+
+# 07bf01fed379438e8c4222289269c0ad
+#: smeshBuilder.smeshBuilder.GetAxisStruct:5
+msgid "SMESH.AxisStruct"
+msgstr ""
+
+# 2aeeeddc77b841d5b8b8905ba47c5e6e
+#: smeshBuilder.smeshBuilder.GetCriterion:1
+msgid ""
+"Create a criterion by the given parameters Criterion structures allow to "
+"define complex filters by combining them with logical operations (AND / "
+"OR) (see example below)"
+msgstr ""
+
+# 71d59eee3fc140168279f26ef77877be
+#: smeshBuilder.smeshBuilder.GetCriterion:11
+msgid ""
+"a binary logical operation SMESH.FT_LogicalAND, SMESH.FT_LogicalOR or "
+"SMESH.FT_Undefined"
+msgstr ""
+
+# ae303d1213d840ecb0347f17d925bdd0
+#: smeshBuilder.smeshBuilder.GetCriterion:16
+msgid ""
+"SMESH.Filter.Criterion  "
+"href=\"../tui_filters_page.html#combining_filters\""
+msgstr ""
+
+# cf83985ae73b433798c924fb71cee38d
+# fd8f9324ee3f4e9fbb35bb8923af7fb6
+#: smeshBuilder.smeshBuilder.GetCriterion:16
+#: smeshBuilder.smeshBuilder.GetEmptyCriterion:3
+msgid "SMESH.Filter.Criterion"
+msgstr ""
+
+# df4d459dda594b949154225f52260dd1
+#: smeshBuilder.smeshBuilder.GetCriterion:18
+msgid "href=\"../tui_filters_page.html#combining_filters\""
+msgstr ""
+
+# c861c5d0daad4179bac56100e2e34c27
+#: smeshBuilder.smeshBuilder.GetCurrentStudy:1
+msgid "Get the current study"
+msgstr ""
+
+# 9e73926cf3ea4098be27d380303d3286
+#: smeshBuilder.smeshBuilder.GetDirStruct:1
+msgid "Get DirStruct from vector"
+msgstr ""
+
+# 6edaeacb5a1f415f8799dc19a1fc66a5
+#: smeshBuilder.smeshBuilder.GetDirStruct:3
+msgid "a GEOM object(vector)"
+msgstr ""
+
+# c4c99c4d2091498f99bb52de92ee3632
+# cc2d0236feb24943a2e33158f7a067c4
+#: smeshBuilder.smeshBuilder.GetDirStruct:5
+#: smeshBuilder.smeshBuilder.MakeDirStruct:5
+msgid "SMESH.DirStruct"
+msgstr ""
+
+# 8ffbefb4140e4c93bc6fa4a817555f23
+#: smeshBuilder.smeshBuilder.GetEmptyCriterion:1
+msgid "Create an empty criterion"
+msgstr ""
+
+# 5d621efe3be1420ebd1a6514097fd1dc
+#: smeshBuilder.smeshBuilder.GetFilter:1
+msgid "Create a filter with the given parameters"
+msgstr ""
+
+# 48c118ee71224bba945db89dad017d21
+#: smeshBuilder.smeshBuilder.GetFilter:3
+msgid "the type of elements (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)"
+msgstr ""
+
+# 800a55dc4b4c413780b67806e2f8d664
+#: smeshBuilder.smeshBuilder.GetFilter:10
+msgid ""
+"the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface, "
+"SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces and SMESH.FT_EqualNodes "
+"criteria"
+msgstr ""
+
+# ef8b0b6eb6154b13af29e8ca0a207b92
+#: smeshBuilder.smeshBuilder.GetFilter:12
+msgid "the mesh to initialize the filter with"
+msgstr ""
+
+# d6952d6fad784844a4fba5fdf3d67ec4
+# d161702c8dfb439badc203083b490ded
+#: smeshBuilder.smeshBuilder.GetFilter:16
+#: smeshBuilder.smeshBuilder.GetFilterFromCriteria:8
+msgid "`Example of Filters usage <../tui_filters_page.html#tui_filters>`_"
+msgstr ""
+
+# 12e8b50cd5be409ba99064f5e545b455
+#: smeshBuilder.smeshBuilder.GetFilterFromCriteria:1
+msgid "Create a filter from criteria"
+msgstr ""
+
+# 3603c02a4f694d2980f9877260ce8656
+#: smeshBuilder.smeshBuilder.GetFilterFromCriteria:3
+msgid "a list of criteria"
+msgstr ""
+
+# 297f1360b9504eab828af6d311cfb852
+#: smeshBuilder.smeshBuilder.GetFunctor:1
+msgid "Create a numerical functor by its type"
+msgstr ""
+
+# ca7e6b50d14f45e2b6f86f07701d18d9
+#: smeshBuilder.smeshBuilder.GetFunctor:3
+msgid ""
+"functor type - an item of SMESH.FunctorType enumeration. Type "
+"SMESH.FunctorType._items in the Python Console to see all items. Note "
+"that not all items correspond to numerical functors."
+msgstr ""
+
+# 29de585997b741d5b1f8a95e1d39092c
+#: smeshBuilder.smeshBuilder.GetFunctor:7
+msgid "SMESH_NumericalFunctor"
+msgstr ""
+
+# 724b0d3b748b4754b993cbf59e7d2d73
+#: smeshBuilder.smeshBuilder.GetGravityCenter:1
+msgid "Get gravity center of all nodes of the mesh object."
+msgstr ""
+
+# dfddc853a879495f8a83880f31784f23
+#: smeshBuilder.smeshBuilder.GetGravityCenter:5
+msgid "x,y,z"
+msgstr ""
+
+# 6df85880f6884d4f89bc8163309f7a2a
+#: smeshBuilder.smeshBuilder.GetGravityCenter:6
+msgid "Three components of the gravity center"
+msgstr ""
+
+# 18b13a0defe845458b58f68e1b6d491c
+#: smeshBuilder.smeshBuilder.GetLength:1
+msgid "Get sum of lengths of all 1D elements in the mesh object."
+msgstr ""
+
+# 08acfced5d874ffebab16adedab9d4a1
+#: smeshBuilder.smeshBuilder.GetLength:5
+msgid "sum of lengths of all 1D elements"
+msgstr ""
+
+# ac1baede1f5b49589be960b7945433a2
+#: smeshBuilder.smeshBuilder.GetMeshInfo:3
+msgid "dictionary \"element type\" - \"count of elements\""
+msgstr ""
+
+# 830b8e3ad14341dda43213c997ee2361
+#: smeshBuilder.smeshBuilder.GetMinDistance:3
+msgid ""
+"If *src2* is None, and *id2*  = 0, distance from *src1* / *id1* to the "
+"origin is computed. If *src2* is None, and *id2* != 0, it is assumed that"
+" both *id1* and *id2* belong to *src1*."
+msgstr ""
+
+# 6972030bf4f4451ea8b90175852df277
+# 20ba4154c905438a8b0918c5cf33bc95
+#: smeshBuilder.smeshBuilder.GetMinDistance:7
+#: smeshBuilder.smeshBuilder.MinDistance:6
+msgid "first source object"
+msgstr ""
+
+# 347afdeb64e44da6b92c0c0cd2ec386d
+# de9d0682ee684d6fb563808e3e0026bb
+#: smeshBuilder.smeshBuilder.GetMinDistance:8
+#: smeshBuilder.smeshBuilder.MinDistance:7
+msgid "second source object"
+msgstr ""
+
+# c2b05bfef14e4171abb5d4da1d9f6422
+# 8dcebee2093c4ec5ab017b3f0895a1b8
+#: smeshBuilder.smeshBuilder.GetMinDistance:9
+#: smeshBuilder.smeshBuilder.MinDistance:8
+msgid "node/element id from the first source"
+msgstr ""
+
+# b6a9490429704ebc96530cb9915f47a3
+# faa64b7589224a0fa2800b4d4df23258
+#: smeshBuilder.smeshBuilder.GetMinDistance:10
+#: smeshBuilder.smeshBuilder.MinDistance:9
+msgid "node/element id from the second (or first) source"
+msgstr ""
+
+# a7ae42d0e6b945b28f50571fc190014d
+#: smeshBuilder.smeshBuilder.GetMinDistance:11
+msgid "*True* if **id1** is element id, *False* if it is node id"
+msgstr ""
+
+# 856a2198830849b1b7e0e57f29ba84d5
+#: smeshBuilder.smeshBuilder.GetMinDistance:12
+msgid "*True* if **id2** is element id, *False* if it is node id"
+msgstr ""
+
+# 6047fe7e713e4819ad50ff2d7ca06f2b
+#: smeshBuilder.smeshBuilder.GetMinDistance:14
+msgid "Measure structure or None if input data is invalid **MinDistance()**"
+msgstr ""
+
+# 22c25c0f6f204f4d8e82d104014f268d
+#: smeshBuilder.smeshBuilder.GetPattern:1
+msgid "Create a pattern mapper."
+msgstr ""
+
+# d591946b500f435cb1bd411292aea1bb
+#: smeshBuilder.smeshBuilder.GetPattern:3
+msgid "an instance of SMESH_Pattern"
+msgstr ""
+
+# 19a23431f6124be3a12fa9dee330d4c5
+#: smeshBuilder.smeshBuilder.GetPattern:5
+msgid ""
+"`Example of Patterns usage "
+"<../tui_modifying_meshes_page.html#tui_pattern_mapping>`_"
+msgstr ""
+
+# 275f542f467c4757bcd181a38f085ca2
+#: smeshBuilder.smeshBuilder.GetPointStruct:1
+msgid "Get PointStruct from vertex"
+msgstr ""
+
+# 0dbe9267749e407e8c9e23afd63235b8
+#: smeshBuilder.smeshBuilder.GetPointStruct:3
+msgid "a GEOM object(vertex)"
+msgstr ""
+
+# 4489a8db1d5f4c7b8ea9a2728558ff63
+#: smeshBuilder.smeshBuilder.GetPointStruct:5
+msgid "SMESH.PointStruct"
+msgstr ""
+
+# 93208b834df64f3aada2b339134b0649
+#: smeshBuilder.smeshBuilder.GetSubShapesId:1
+msgid "Return IDs of sub-shapes"
+msgstr ""
+
+# 4317e35c4916444facef14ca15de9a74
+#: smeshBuilder.smeshBuilder.GetVolume:1
+msgid "Get sum of volumes of all 3D elements in the mesh object."
+msgstr ""
+
+# 1cfe646de2ca43de86b018756695c0ba
+#: smeshBuilder.smeshBuilder.GetVolume:5
+msgid "sum of volumes of all 3D elements"
+msgstr ""
+
+# 13963f343c6b496c9d6f1b0596fa17c9
+#: smeshBuilder.smeshBuilder.IsEmbeddedMode:1
+msgid "Get the current mode"
+msgstr ""
+
+# f389fdc3ccf5486685b2fb8c33bd84a8
+#: smeshBuilder.smeshBuilder.MakeDirStruct:1
+msgid "Make DirStruct from a triplet"
+msgstr ""
+
+# 53dec3e5cd344ff78a2b7dce8ce55794
+#: smeshBuilder.smeshBuilder.MakeDirStruct:3
+msgid "vector components"
+msgstr ""
+
+# 8efe66568aad4342b30757cee7c3c8c2
+#: smeshBuilder.smeshBuilder.Mesh:1
+msgid ""
+"Create a mesh. This can be either an empty mesh, possibly having an "
+"underlying geometry, or a mesh wrapping a CORBA mesh given as a "
+"parameter."
+msgstr ""
+
+# 3069de99891541b99aa27a58c9432fdb
+#: smeshBuilder.smeshBuilder.Mesh:4
+msgid ""
+"either (1) a CORBA mesh: (SMESH._objref_SMESH_Mesh) got e.g. by calling "
+"salome.myStudy.FindObjectID(\"0:1:2:3\").GetObject() or (2) a Geometrical"
+" object: for meshing or (3) none:."
+msgstr ""
+
+# add53f6aa7db45afb072ff9f87435088
+#: smeshBuilder.smeshBuilder.Mesh:7
+msgid "the name for the new mesh."
+msgstr ""
+
+# cd99f49a549b4c2784b90a029baf5dd0
+#: smeshBuilder.smeshBuilder.Mesh:9
+msgid "an instance of Mesh class."
+msgstr ""
+
+# a08747d9a0ff4b00b151f8ead4c6e23b
+#: smeshBuilder.smeshBuilder.MinDistance:1
+msgid "Get minimum distance between two objects"
+msgstr ""
+
+# 7982f36dd250432e8d576d03f22fc892
+#: smeshBuilder.smeshBuilder.MinDistance:3
+msgid ""
+"If *src2* is None, and *id2* = 0, distance from *src1* / *id1* to the "
+"origin is computed. If *src2* None, and *id2* != 0, it is assumed that "
+"both *id1* and *id2* belong to *src1*."
+msgstr ""
+
+# 8247bc3e90ee4bc880b0a94b8b3d2005
+#: smeshBuilder.smeshBuilder.MinDistance:13
+msgid "minimum distance value *GetMinDistance()*"
+msgstr ""
+
+# 3433b570e9c84b91a1d9e5fa2c41b5cd
+#: smeshBuilder.smeshBuilder.SetBoundaryBoxSegmentation:1
+msgid ""
+"Set number of segments per diagonal of boundary box of geometry, by which"
+" default segment length of appropriate 1D hypotheses is defined in GUI. "
+"Default value is 10."
+msgstr ""
+
+# e25fa41c75164b37bfb9f6fb163af35e
+#: smeshBuilder.smeshBuilder.SetCurrentStudy:1
+msgid "Set the current study. Calling SetCurrentStudy( None ) allows to"
+msgstr ""
+
+# 4d6d0511e66c450ba9b539da433e8028
+#: smeshBuilder.smeshBuilder.SetCurrentStudy:2
+msgid "switch OFF automatic pubilishing in the Study of mesh objects."
+msgstr ""
+
+# ea553b6b94bc4efe98e522e7b61c1fe0
+#: smeshBuilder.smeshBuilder.SetDumpPythonHistorical:4
+msgid "Set mode of DumpPython(), *historical* or *snapshot*."
+msgstr ""
+
+# 66f6a973954745369e2906f697d74d91
+#: smeshBuilder.smeshBuilder.SetDumpPythonHistorical:2
+msgid ""
+"In the *historical* mode, the Python Dump script includes all commands "
+"performed by SMESH engine. In the *snapshot* mode, commands relating to "
+"objects removed from the Study are excluded from the script as well as "
+"commands not influencing the current state of meshes"
+msgstr ""
+
+# d7d286c06a7f4a50b7dbc0742c19d1be
+#: smeshBuilder.smeshBuilder.SetEmbeddedMode:1
+msgid "Set the current mode"
+msgstr ""
+
+# db5ffbd6091146bab826a685c084b504
+#: smeshBuilder.smeshBuilder.SetName:1
+msgid "Set the given name to the object"
+msgstr ""
+
+# 65646129f4c6497b90246005ffcf99b1
+#: smeshBuilder.smeshBuilder.SetName:3
+msgid "the object to rename"
+msgstr ""
+
+# ddeccdda92ab46c494cb51d761fdf0ad
+#: smeshBuilder.smeshBuilder.SetName:4
+msgid "a new object name"
+msgstr ""
+
+# bf92183390384cc8a6d2454847f1fa52
+#: smeshBuilder.smeshBuilder.init_smesh:1
+msgid "Set the current study and Geometry component"
+msgstr ""
+
+# 8177e229556b41258ca96424e31c7f21
+#: smeshBuilder.smeshInst:1
+msgid "*Warning* -- smeshInst is a singleton"
+msgstr ""
+
+# 21ba20d294bc46b8a1d7fb6e4b0d44c4
+#: smeshBuilder.submeshProxy:1
+msgid "Private class wrapping SMESH.SMESH_SubMesh in order to add Compute()"
+msgstr ""
+
+# fa5d5cdc176c42c891ba2d44b2e159f1
+#: smeshBuilder.submeshProxy.Compute:2
+msgid "Compute the sub-mesh and return the status of the computation"
+msgstr ""
+
+# 830e9cb502014f90924a513955dbe67e
+#: smeshBuilder.submeshProxy.Compute:2
+msgid ""
+"refresh if *True*, Object browser is automatically updated (when running "
+"in GUI)"
+msgstr ""
+
+# 4938de1092114b069b646e90d1bb7784
+#: smeshBuilder.submeshProxy.Compute:6
+msgid ""
+"This is a method of SMESH.SMESH_submesh that can be obtained via "
+"Mesh.GetSubMesh() or :meth:`smeshBuilder.Mesh.GetSubMesh`."
+msgstr ""
+
+# fbbe6aef51e04d118006334f95a046a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/python_api.rst:21
+msgid "smesh_algorithm module"
+msgstr ""
+
+# fa2ada56caab49819deb456b7d5b2dd2
+#: smesh_algorithm.Mesh_Algorithm:1
+msgid "The base class to define meshing algorithms"
+msgstr ""
+
+# f4460fce199e4ba59393cc0ad32caadf
+#: smesh_algorithm.Mesh_Algorithm:3
+msgid "This class should not be used directly, it is supposed to be sub-classed"
+msgstr ""
+
+# 2c6c6a357b97412ea66b85c7c0190d13
+#: smesh_algorithm.Mesh_Algorithm:5
+msgid "for implementing Python API for specific meshing algorithms"
+msgstr ""
+
+# bc5b345770f249f9bb50873b606e19dc
+#: smesh_algorithm.Mesh_Algorithm:7
+msgid ""
+"For each meshing algorithm, a python class inheriting from class "
+"%Mesh_Algorithm should be defined. This descendant class should have two "
+"attributes defining the way it is created by class Mesh (see e.g. class "
+":class:`~StdMeshersBuilder.StdMeshersBuilder_Segment` in "
+"StdMeshersBuilder package):"
+msgstr ""
+
+# af1608f8aa09422aad9dae5fc09fa642
+#: smesh_algorithm.Mesh_Algorithm:23
+msgid ""
+":code:`meshMethod` attribute defines name of method of class smesh.Mesh "
+"by calling which the"
+msgstr ""
+
+# 56d9fb20f42844108641f222020f3170
+#: smesh_algorithm.Mesh_Algorithm:13
+msgid ""
+"python class of algorithm is created; this method is dynamically added to"
+" the smesh.Mesh class in runtime. For example, if in :code:`class "
+"MyPlugin_Algorithm` this attribute is defined as ::"
+msgstr ""
+
+# 4a0f1ebc21fe4eb189b3ac8eccc38f79
+#: smesh_algorithm.Mesh_Algorithm:19
+msgid ""
+"then an instance of :code:`MyPlugin_Algorithm` can be created by the "
+"direct invocation of the function of smesh.Mesh class: ::"
+msgstr ""
+
+# bbf7bf4a61af415bbb7e24d158acbe6a
+#: smesh_algorithm.Mesh_Algorithm:36
+msgid ""
+":code:`algoType` defines type of algorithm and is used mostly to "
+"discriminate"
+msgstr ""
+
+# 92e2b40c8bc64e74958e5bbaa72156ef
+#: smesh_algorithm.Mesh_Algorithm:26
+msgid ""
+"algorithms that are created by the same method of class smesh.Mesh. For "
+"example, if this attribute is specified in :code:`MyPlugin_Algorithm` "
+"class as ::"
+msgstr ""
+
+# 4f3b493cedcd4fb58af45ac2ea4da361
+#: smesh_algorithm.Mesh_Algorithm:32
+msgid "then it's creation code can be: ::"
+msgstr ""
+
+# 82f7681d46144e41bbc7f9cc5a22c832
+# 094ab44d154e4956b5048365c4496418
+#: smesh_algorithm.Mesh_Algorithm.Assign:1
+#: smesh_algorithm.Mesh_Algorithm.Hypothesis:1
+msgid "Private method"
+msgstr ""
+
+# 0b0ec5ce4d304ffca5476fca6c0a4f76
+#: smesh_algorithm.Mesh_Algorithm.Create:1
+msgid "Private method."
+msgstr ""
+
+# c517a611369f4133ba71870835363a86
+#: smesh_algorithm.Mesh_Algorithm.FindAlgorithm:1
+msgid ""
+"Finds the algorithm in the study by its type name. Finds only the "
+"algorithms, which have been created in smeshpyD engine."
+msgstr ""
+
+# e59158bcf7e94f6c837d720a65e5f60d
+#: smesh_algorithm.Mesh_Algorithm.FindAlgorithm:4
+msgid "SMESH.SMESH_Algo"
+msgstr ""
+
+# 94541113c40a40b0be62eb5e6f99ad39
+#: smesh_algorithm.Mesh_Algorithm.FindHypothesis:1
+msgid ""
+"Finds a hypothesis in the study by its type name and parameters. Finds "
+"only the hypotheses created in smeshpyD engine. :returns: "
+"SMESH.SMESH_Hypothesis"
+msgstr ""
+
+# c932e1be8d0248838cd36de6b3aff80b
+#: smesh_algorithm.Mesh_Algorithm.GetAlgorithm:1
+msgid "Returns the wrapped mesher."
+msgstr ""
+
+# 98c14c5645d944bf88ad332dfdc95dae
+#: smesh_algorithm.Mesh_Algorithm.GetCompatibleHypothesis:1
+msgid "Gets the list of hypothesis that can be used with this algorithm"
+msgstr ""
+
+# 75938efff8e1459786a93b4fe77ded53
+#: smesh_algorithm.Mesh_Algorithm.GetId:1
+msgid "Gets the id of the algorithm"
+msgstr ""
+
+# 04a6a6ba80704b51ac9602559e33a0b5
+#: smesh_algorithm.Mesh_Algorithm.GetName:1
+msgid "Gets the name of the algorithm"
+msgstr ""
+
+# c90ba340cab8406e884a6d3e055a5310
+#: smesh_algorithm.Mesh_Algorithm.GetSubMesh:1
+msgid ""
+"If the algorithm is global, returns 0; else returns the submesh "
+"associated to this algorithm."
+msgstr ""
+
+# b5b8ed3249684be69dd705d253374177
+#: smesh_algorithm.Mesh_Algorithm.MainShapeEntry:1
+msgid "Returns entry of the shape to mesh in the study"
+msgstr ""
+
+# 7fa0cbb7a51f4f9ab86acfe72dd070ce
+#: smesh_algorithm.Mesh_Algorithm.ReversedEdgeIndices:1
+msgid ""
+"Transform a list of either edges or tuples (edge, 1st_vertex_of_edge) "
+"into a list acceptable to SetReversedEdges() of some 1D hypotheses"
+msgstr ""
+
+# 2725a48346674bc89778578f29666ee1
+#: smesh_algorithm.Mesh_Algorithm.SetName:1
+msgid "Sets the name to the algorithm"
+msgstr ""
+
+# 0933ed112eda445a9f081dfdc4e9e34d
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:1
+msgid ""
+"Defines \"ViscousLayers\" hypothesis to give parameters of layers of "
+"prisms to build near mesh boundary. This hypothesis can be used by "
+"several 3D algorithms: NETGEN 3D, MG-Tetra, Hexahedron(i,j,k)"
+msgstr ""
+
+# 958f2e8b6a0b4995b5303493380ab157
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:5
+msgid "total thickness of layers of prisms"
+msgstr ""
+
+# cc2a53444a554b709ff99b40ef31eb99
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:6
+msgid "number of layers of prisms"
+msgstr ""
+
+# cd2ff9a6db4642528a3f18b4327a40e3
+# 3abb8121d8d74546ae21dcd6999490b3
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:7
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:7
+msgid "factor (>1.0) of growth of layer thickness towards inside of mesh"
+msgstr ""
+
+# 72d0e3b9cbd14050bfc72889d07c262a
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:8
+msgid ""
+"list of geometrical faces (or their ids). Viscous layers are either "
+"generated on these faces or not, depending on the value of "
+"**isFacesToIgnore** parameter."
+msgstr ""
+
+# 07c446c9fa154d458de112cae93676fc
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:11
+msgid ""
+"if *True*, the Viscous layers are not generated on the faces specified by"
+" the previous parameter (**faces**)."
+msgstr ""
+
+# 0abc5cc7f9f94c52a67347cc6def63ac
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:13
+msgid ""
+"extrusion method defines how position of new nodes are found during prism"
+" construction and how creation of distorted and intersecting prisms is "
+"prevented. Possible values are:  - StdMeshers.SURF_OFFSET_SMOOTH "
+"(default) method extrudes nodes along normal         to underlying "
+"geometrical surface. Smoothing of internal surface of         element "
+"layers can be used to avoid creation of invalid prisms. - "
+"StdMeshers.FACE_OFFSET method extrudes nodes along average normal of"
+"         surrounding mesh faces till intersection with a neighbor mesh "
+"face         translated along its own normal by the layers thickness. "
+"Thickness         of layers can be limited to avoid creation of invalid "
+"prisms. - StdMeshers.NODE_OFFSET method extrudes nodes along average "
+"normal of         surrounding mesh faces by the layers thickness. "
+"Thickness of         layers can be limited to avoid creation of invalid "
+"prisms."
+msgstr ""
+
+# ff10b55d0a224530ad8103a6f9a8943f
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:13
+msgid ""
+"extrusion method defines how position of new nodes are found during prism"
+" construction and how creation of distorted and intersecting prisms is "
+"prevented. Possible values are:"
+msgstr ""
+
+# 4b5efce50cdd4d36b26ce026e9edc7fb
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:18
+msgid "StdMeshers.SURF_OFFSET_SMOOTH (default) method extrudes nodes along normal"
+msgstr ""
+
+# a1bea658588441489437f1c8c2034149
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:18
+msgid ""
+"to underlying geometrical surface. Smoothing of internal surface of "
+"element layers can be used to avoid creation of invalid prisms."
+msgstr ""
+
+# bf92c2f615e541258cd6f8a0cd02c445
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:22
+msgid "StdMeshers.FACE_OFFSET method extrudes nodes along average normal of"
+msgstr ""
+
+# 78d1ea03383645c3a0dbfa83ec7fffeb
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:21
+msgid ""
+"surrounding mesh faces till intersection with a neighbor mesh face "
+"translated along its own normal by the layers thickness. Thickness of "
+"layers can be limited to avoid creation of invalid prisms."
+msgstr ""
+
+# a2c618bcb90443faa6c7a933f6dfebd1
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:25
+msgid "StdMeshers.NODE_OFFSET method extrudes nodes along average normal of"
+msgstr ""
+
+# f125fe84d6e040ffa7c4de753a4f40cc
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers:25
+msgid ""
+"surrounding mesh faces by the layers thickness. Thickness of layers can "
+"be limited to avoid creation of invalid prisms."
+msgstr ""
+
+# 9e250899701a48feb23a6233958d2774
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:1
+msgid ""
+"Defines \"ViscousLayers2D\" hypothesis to give parameters of layers of "
+"quadrilateral elements to build near mesh boundary. This hypothesis can "
+"be used by several 2D algorithms: NETGEN 2D, NETGEN 1D-2D, Quadrangle "
+"(mapping), MEFISTO, MG-CADSurf"
+msgstr ""
+
+# 2a312e7d4f4c429b95d205b7d1e6b821
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:5
+msgid "total thickness of layers of quadrilaterals"
+msgstr ""
+
+# 090b7189f8184fafbd1ffc0d26c4ef5e
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:8
+msgid ""
+"list of geometrical edges (or their ids). Viscous layers are either "
+"generated on these edges or not, depending on the value of "
+"**isEdgesToIgnore** parameter."
+msgstr ""
+
+# ac6e4d0957954ee895f5808142f1b025
+#: smesh_algorithm.Mesh_Algorithm.ViscousLayers2D:11
+msgid ""
+"if *True*, the Viscous layers are not generated on the edges specified by"
+" the previous parameter (**edges**)."
+msgstr ""
+
+# 412ee7aacf90484ba9fefdfbdbb356b9
+#~ msgid ""
+#~ msgstr ""
+
+# 2fb6bab3f93e4bd9b3cb56843e11aaa7
+#~ msgid "Get the mesh item owning the mesh group `meshGroupItem`."
+#~ msgstr ""
+
+# 76a67fdaec2a45fd9be9965c45821d08
+#~ msgid "Mesh group belonging to the searched mesh."
+#~ msgstr ""
+
+# f25ed2b8104645bca1624bda2840ceb0
+#~ msgid "The SObject corresponding to the mesh, or None if it was not found."
+#~ msgstr ""
+
+# 694eb90b071c40f79a2f904620a958da
+#~ msgid "Returns the MESH object currently selected in the active study."
+#~ msgstr ""
+
+# bb78c7a9963849d386b88cd613093288
+#~ msgid "Python API for the standard meshing plug-in module."
+#~ msgstr ""
+
+# 42407d8a7213496d942e11721dad9587
+#~ msgid "Defines segment 1D algorithm for edges discretization."
+#~ msgstr ""
+
+# 4bdfd953126b46b88c49bc9af12563f5
+#~ msgid "It can be created by calling smeshBuilder.Mesh.Segment(geom=0)"
+#~ msgstr ""
+
+# eb6d876d4b794e90a7612e7b1f8973ea
+#~ msgid "for the length of segments that cut an edge"
+#~ msgstr ""
+
+# d12a452026ee4517a34db36ae76ff0c9
+#~ msgid "an instance of StdMeshers_LocalLength hypothesis"
+#~ msgstr ""
+
+# e17402a497624b7eb8f814b7641ff838
+#~ msgid "an instance of StdMeshers_MaxLength hypothesis"
+#~ msgstr ""
+
+# bdd902df1eca44c8a50a336b3efdba69
+#~ msgid "type of algorithm used with helper function in smeshBuilder.Mesh class"
+#~ msgstr ""
+
+# 3cddccd977ca4724b74b108d49a486b6
+#~ msgid "doc string of the method"
+#~ msgstr ""
+
+# 2416bd6f91d1499b8e30f976a8963aeb
+#~ msgid "name of the dynamic method in smeshBuilder.Mesh class"
+#~ msgstr ""
+
+# 1f0be11ffa9f4c79ba388930b237db4b
+#~ msgid "Typical use is:"
+#~ msgstr ""
+
+# d9872284b77a459aa017e4baf9318ba5
+#~ msgid "smeshBuilder instance"
+#~ msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_from_ma_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_from_ma_algo.po
new file mode 100644 (file)
index 0000000..dad657b
--- /dev/null
@@ -0,0 +1,67 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5ff0bcfebb72410a8732dc46e1e34e6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:5
+msgid "Medial Axis Projection Quadrangle meshing algorithm"
+msgstr ""
+
+# b63656f8703a4217af551d3ed9d1bc4a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:7
+msgid ""
+"Medial Axis Projection algorithm can be used for meshing faces with "
+"sinuous borders and a channel-like shape, for which it can be difficult "
+"to define 1D hypotheses such that to obtain a good shape of resulting "
+"quadrangles. The algorithm can be also applied to faces with ring "
+"topology, which can be viewed as a closed 'channel'. In the latter case "
+"radial discretization of a ring can be specified by using **Number of "
+"Layers** or **Distribution of Layers** hypothesis."
+msgstr ""
+
+# 54d7dbc1a0924e2b99df8f005e06c131
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:22
+msgid ""
+"The algorithm provides proper shape of quadrangles by constructing Medial"
+" Axis between sinuous borders of the face and using it to discretize the "
+"borders. (Shape of quadrangles can be not perfect at locations where "
+"opposite sides of a 'channel' are far from being parallel.)"
+msgstr ""
+
+# 01adeb096fec4346af71b4c1d954e111
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:33
+msgid "The Medial Axis is used in two ways:"
+msgstr ""
+
+# ba840a59868c4f29a0ef420de7678f08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:35
+msgid ""
+"If there is a sub-mesh on a sinuous border, then the nodes of this border"
+" are mapped to the opposite border via the Medial Axis."
+msgstr ""
+
+# 237fafa93b8b424595b99dc70e23c04d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst:36
+msgid ""
+"If there are no sub-meshes on sinuous borders, then the part of the "
+"Medial Axis that can be mapped to both borders is discretized using a 1D "
+"hypothesis assigned to the face or its ancestor shapes, and the division "
+"points are mapped from the Medial Axis to both borders to find positions "
+"of nodes."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_ijk_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_ijk_algo.po
new file mode 100644 (file)
index 0000000..ebdbbda
--- /dev/null
@@ -0,0 +1,102 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1f1188e97555415db825c3d926377f34
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:5
+msgid "Quadrangle: Mapping meshing algorithm"
+msgstr ""
+
+# dadf07f382854ed18ab98565c378b217
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:7
+msgid ""
+"**Quadrangle: Mapping** meshing algorithm is intended for creating all-"
+"quadrangle and quad-dominant meshes on faces without holes and bound by "
+"at least three edges."
+msgstr ""
+
+# 15dcc95a5ec04d22b9df0a08cae3e856
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:11
+msgid ""
+"The algorithm can create mesh on any face but its quality and validity "
+"depend on two factors:"
+msgstr ""
+
+# 0cb07bafd0464d0782e45485439cfd88
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:14
+msgid "face shape (number of edges and boundary concavity);"
+msgstr ""
+
+# 545423d279ee462082dffc1f7b9abf0e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:15
+msgid "discretization of edges."
+msgstr ""
+
+# ecfd4360393e48beb0dd40dd718617b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:23
+msgid ""
+"The algorithm uses **Transfinite Interpolation** technique in the "
+"parametric space of a face to locate nodes inside the face."
+msgstr ""
+
+# df0aff26c2db42468cf183bfd89de561
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:26
+msgid ""
+"The algorithm treats any face as quadrangle. If a face is bound by more "
+"than four edges, four most sharp vertices are considered as corners of "
+"the quadrangle and all edges between these vertices are treated as "
+"quadrangle sides. In the case of three edges, the vertex specified by the"
+" user is considered as a fourth degenerated side of the quadrangle."
+msgstr ""
+
+# 2f0bd59f2f544705aefe466f31315edc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:39
+msgid ""
+"To get an all-quadrangle mesh you have to carefully define 1D hypotheses "
+"on edges of a face. To get a **structured** mesh you have to provide "
+"equal number of segments on opposite sides of the quadrangle. If this "
+"condition is not respected, the algorithm by default (without a "
+"hypothesis) creates a **quad-dominant** mesh with triangles located near "
+"the side with the maximal number of segments. However, you can get an "
+"**all-quadrangle** mesh in this case by using "
+":ref:`hypo_quad_params_anchor` hypothesis to specify how to make "
+"transition mesh between opposite sides with different number of segments,"
+" provided that certain conditions are respected. In any case the total "
+"number of segments must be even. To use *Reduced* transition method, "
+"there must be an equal number of segments on one pair of opposite sides."
+msgstr ""
+
+# 1d4970aee4684396862a47d46a66b360
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:52
+msgid "The following hypotheses help to create quadrangle meshes."
+msgstr ""
+
+# 78034d06a148414dad332e76304f6a2b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:54
+msgid ""
+":ref:`propagation_anchor` additional 1D hypotheses help to get an equal "
+"number of segments on the opposite sides of a quadrilateral face."
+msgstr ""
+
+# 99c0a64c5fd44ab1b9d3b6d6b85e256a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/quad_ijk_algo.rst:55
+msgid ""
+":ref:`a1d_algos_anchor` algorithm is useful to discretize several C1 "
+"continuous edges as one quadrangle side."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_prism_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_prism_algo.po
new file mode 100644 (file)
index 0000000..6aae274
--- /dev/null
@@ -0,0 +1,53 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# cde549b2f48246d5bd491c75e3963e56
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_prism_algo.rst:5
+msgid "Radial Prism"
+msgstr ""
+
+# fbd0194a244f4859ab3d4dee4ad8a5fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_prism_algo.rst:7
+msgid ""
+"This algorithm applies to the meshing of a hollow 3D shape, i.e. such "
+"shape should be composed of two meshed shells: an outer shell and an "
+"internal shell without intersection with the outer shell. One of the "
+"shells should be a 2D Projection of the other shell. The meshes of the "
+"shells can consist both of triangles and quadrangles."
+msgstr ""
+
+# cbcb0680641c42c5b044cdcccd917c14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_prism_algo.rst:14
+msgid ""
+"The Radial Prism algorithm would fill the space between the two shells "
+"with prisms."
+msgstr ""
+
+# 78f5dae2c9004b208036a4c2f6092d08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_prism_algo.rst:23
+msgid ""
+"This algorithm also needs the information concerning the number and "
+"distribution of mesh layers between the inner and the outer shapes."
+msgstr ""
+
+# 68409354b4ad4343b9bceb87b30ae966
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_prism_algo.rst:29
+msgid "Distribution of layers can be set with any of 1D Hypotheses."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po
new file mode 100644 (file)
index 0000000..302d65b
--- /dev/null
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# f0ac03aa977749fbbd906fdab24b64be
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:5
+msgid "Radial Quadrangle 1D-2D"
+msgstr ""
+
+# fa9894d81bb64b7e8ca471ffe1d0a458
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:7
+msgid ""
+"This algorithm applies to the meshing of 2D shapes under the following "
+"conditions: the face must be a full ellipse or a part of ellipse (i.e. "
+"the number of edges is less or equal to 3 and one of them is an ellipse "
+"curve). The resulting mesh consists of triangles (near the center point) "
+"and quadrangles."
+msgstr ""
+
+# 259b8a9a3c9148a18cf68c58c3d597ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:13
+msgid ""
+"This algorithm is optionally parametrized by the hypothesis indicating "
+"the number of mesh layers along the radius. The distribution of layers "
+"can be set with any 1D Hypothesis. If the face boundary includes radial "
+"edges, this distribution is applied to the longest radial edge. If the "
+"face boundary does not include radial edges, this distribution is applied"
+" to the longest virtual radial edge. The distribution is applied to the "
+"longest radial edge starting from its end lying on the elliptic curve."
+msgstr ""
+
+# 7ee304ad57e440008cffc634c3739734
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:23
+msgid ""
+"If no own hypothesis of the algorithm is assigned, any local or global "
+"hypothesis is used by the algorithm to discretize edges."
+msgstr ""
+
+# 9a87ad2f50a1473385f55fd5593ba561
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:26
+msgid ""
+"If no 1D hypothesis is assigned to an edge, :ref:`nb_segments_pref` "
+"preferences parameter is used to discretize the edge."
+msgstr ""
+
+# f69a04ca46b746e284f55cb575200996
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst:45
+msgid "**See also** A sample :ref:`tui_radial_quadrangle`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po
new file mode 100644 (file)
index 0000000..56e97c4
--- /dev/null
@@ -0,0 +1,251 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5bc7dc5777f24bb9b187bd099ff28cd0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:5
+msgid "Removing nodes and elements"
+msgstr ""
+
+# 72d9643c2e1843739eba26c4b9ffd548
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:7
+msgid "In MESH you can remove nodes and all types of cells of your mesh."
+msgstr ""
+
+# 6c120c5024824b06b409cb2d9707307d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:9
+msgid ":ref:`removing_nodes_anchor`"
+msgstr ""
+
+# b94a14aa44e34edcbbcfdf5798f373f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:10
+msgid ":ref:`removing_orphan_nodes_anchor`"
+msgstr ""
+
+# 54fa4702bf9f4320bd97cf7eb53f7070
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:11
+msgid ":ref:`removing_elements_anchor`"
+msgstr ""
+
+# 38d728956d7c4ac2b19f303e2c52bd85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:12
+msgid ":ref:`clear_mesh_anchor`"
+msgstr ""
+
+# 016116887ef14c6e9174da9c59d47a76
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:19
+msgid "Removing nodes"
+msgstr ""
+
+# 57ad24bd52ea469fa85af40dd5dfd1b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:21
+msgid "**To remove a node:**"
+msgstr ""
+
+# c7eb84e300ef41fe93752ba59e373e69
+# 79f4873f63d5416e9f6571f2ef5034b7
+# ce977e7f17f346db9c0c09e27b72229f
+# 7a282dec068b4c6a821624de51ddcbff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:23
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:84
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:125
+msgid "Select your mesh in the Object Browser or in the 3D viewer."
+msgstr ""
+
+# 7678c235cd8547c89d951b970d8ace6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:24
+msgid ""
+"From the **Modification** menu choose **Remove** and from the associated "
+"submenu select the **Nodes**, or just click **\"Remove nodes\"** button "
+"in the toolbar."
+msgstr ""
+
+# 0267cfd3bcae4e9f84eb3f2f2b5ae258
+# 1b82a2273df744148619d94afe8a5a47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:32
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:93
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# b427bef390e1489a98cef5eb02163c31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:38
+msgid "In this dialog box you can specify one or several nodes:"
+msgstr ""
+
+# 81e5d18bf8ef436fa514d40d8551ccad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:40
+msgid ""
+"choose mesh nodes with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# e64a50ee07e74706a3d62080bbcb7b67
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:41
+msgid ""
+"input the node IDs directly in **ID Elements** field. The selected nodes "
+"will be highlighted in the viewer; or"
+msgstr ""
+
+# 9c5970a21b3d41a5a269d8dd6a875a45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:42
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of nodes. See more about filters in the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# 0890d7d353644c938fc72636f7030e88
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:47
+msgid ""
+"Be careful while removing nodes because if you remove a definite node of "
+"your mesh all adjacent elements will be also deleted."
+msgstr ""
+
+# 54ad34c6a9ed434a9d2588f1db54f328
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:53
+msgid "Removing orphan nodes"
+msgstr ""
+
+# 1253e8f9c7324245a87dd8c4bb5aa3ea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:55
+msgid "There is a quick way to remove all orphan (free) nodes."
+msgstr ""
+
+# dfbd7c24f58043e79102e027e312886e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:57
+msgid "**To remove orphan nodes:**"
+msgstr ""
+
+# de76854beb0349e0985c0ce382afff76
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:60
+msgid ""
+"From the **Modification** menu choose **Remove** and from the associated "
+"submenu select **Orphan Nodes**, or just click **\"Remove orphan "
+"nodes\"** button in the toolbar."
+msgstr ""
+
+# 2c3104701da94d61a3dbd9a6110a66c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:68
+msgid "The following Warning message box will appear:"
+msgstr ""
+
+# b501f2a03e2c4f658a77e33b479d6193
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:74
+msgid "Confirm nodes removal by pressing \"Yes\" button."
+msgstr ""
+
+# 249781e7a71d461bbc538489102a3514
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:80
+msgid "Removing elements"
+msgstr ""
+
+# 7fb72900c9d0489db8399914fd06e937
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:82
+msgid "**To remove an element:**"
+msgstr ""
+
+# f6e9315ba99644708f439b8c3b31ee1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:85
+msgid ""
+"From the **Modification** menu choose **Remove** and from the associated "
+"submenu select the **Elements**, or just click **\"Remove elements\"** "
+"button in the toolbar."
+msgstr ""
+
+# 860f4cfb7782422a9ddb136cdd942de3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:98
+msgid "In this dialog box you can specify one or several elements"
+msgstr ""
+
+# 672b8cdbf4d04abab64e4fa301db0bb6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:100
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# 654a3e3f58ca4b62ad9365d5878c82d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:101
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# 09bca0568e934c38946363aa0cfb32a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:102
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# 395b19a0baa942079082c4e0f3dbba79
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:103
+msgid ""
+"Click **Apply** or **Apply and Close** to confirm deletion of the "
+"specified elements."
+msgstr ""
+
+# 8066994c98c549d39f8ef5b6df3b95c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:121
+msgid "Clearing Mesh Data"
+msgstr ""
+
+# f8e71f16cdfd4e188166f38518e3809e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:123
+msgid "**To remove all nodes and all types of cells in your mesh at once:**"
+msgstr ""
+
+# d3362805418f4ffab732f86853506068
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:126
+msgid ""
+"From the Modification menu choose Remove and from the associated submenu "
+"select the Clear Mesh Data, or just click **\"Clear Mesh Data\"** button "
+"in the toolbar. You can also right-click on the mesh in the Object "
+"Browser and select Clear Mesh Data in the pop-up menu."
+msgstr ""
+
+# 5015bce04d8e4ba6bc30dfe750dedb66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:136
+msgid "This command works in a different way in different situations:"
+msgstr ""
+
+# 63492c65ecb944a4b580d28c4a501fb6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:136
+msgid ""
+"if the mesh is computed on a geometry, then \"Clear Mesh Data\" removes "
+"all elements and nodes."
+msgstr ""
+
+# 638a8b45bb4b4ae994f61a0718ee6a87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:137
+msgid ""
+"if the mesh is not based on a geometry (imported, compound, created from "
+"scratch etc.), then \"Clear Mesh Data\" removes only the elements and "
+"nodes computed by algorithms. If no such elements or nodes have been "
+"created, can remove nothing."
+msgstr ""
+
+# 6e8673cbfc2647b7994ac8448464c3d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst:139
+msgid ""
+"**See Also** a sample TUI Script of a "
+":ref:`tui_removing_nodes_and_elements` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/reorient_faces.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/reorient_faces.po
new file mode 100644 (file)
index 0000000..3b40b49
--- /dev/null
@@ -0,0 +1,164 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 0bdea21e0d144d2ead6f84abbbed4c46
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:6
+msgid "Orient faces"
+msgstr ""
+
+# 9859e23d791e4e9eac9c94018b8c6e71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:8
+msgid ""
+"This operation allows fixing the orientation of a set of faces in the "
+"following ways:"
+msgstr ""
+
+# 90ed66a8fd9c4803966fa046e987a0dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:11
+msgid ""
+"The required orientation of a set of neighboring faces can be defined by "
+"a vector giving the direction of a normal to a certain face. Since the "
+"direction of face normals in the set can be even opposite, it is "
+"necessary to specify a *control* face, the normal to which will be "
+"compared with the vector. This face can be either:"
+msgstr ""
+
+# 110f3e31151e451ab47b718dcd8a1187
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:11
+msgid "found by proximity to a given point, or"
+msgstr ""
+
+# c5177627b34a4943a52e8c155942d641
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:12
+msgid "specified explicitly."
+msgstr ""
+
+# b9467622883843bfbe5d5430a2111a4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:13
+msgid ""
+"Alternatively, the faces can be oriented relatively to the adjacent "
+"volumes."
+msgstr ""
+
+# 09763a05394b4d2e969fb4fa4f268d5e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:15
+msgid "The orientation of a face is changed by reverting the order of its nodes."
+msgstr ""
+
+# 396f84a7a6b14a028f326e3073506a45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:17
+msgid "**To set orientation of faces:**"
+msgstr ""
+
+# 37aad076460d4729afd3fbba7c52cdf6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:19
+msgid ""
+"In the **Modification** menu select **Reorient faces** item or click "
+"**Reorient faces** button in the toolbar."
+msgstr ""
+
+# 3c75a02cea294006b8261737abda28f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:29
+msgid "In the \"Reorient faces\" dialog box"
+msgstr ""
+
+# 49d9250fdcbf47f19b76f7fd85250ff1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:30
+msgid ""
+"Select the **Object** (mesh, sub-mesh or group) containing faces to "
+"reorient, in the Object Browser or in the 3D Viewer."
+msgstr ""
+
+# 30cddddfd28a46469db3a832e59a35f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:31
+msgid "To reorient by direction of the face normal:"
+msgstr ""
+
+# 188bd9f881a24557bf2791572b5d5b22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:33
+msgid ""
+"Specify the coordinates of the **Point** by which the control face will "
+"be found. You can specify the **Point** by picking a node in the 3D "
+"Viewer or selecting a vertex in the Object Browser."
+msgstr ""
+
+# 868aa922269446629ea346b7273b0324
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:34
+msgid ""
+"Set up the **Direction** vector to be compared with the normal of the "
+"control face. There are following options:"
+msgstr ""
+
+# c84d68c428f74ee7acd733c114a11824
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:36
+msgid "adjust vector components directly;"
+msgstr ""
+
+# cc9edfb98e5744dba3f2dc4c05d87934
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:37
+msgid ""
+"select a vertex in the Object Browser or a node in the 3D Viewer; their "
+"coordinates will define vector components;"
+msgstr ""
+
+# bf70425a377f4818954be246e9851872
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:38
+msgid ""
+"pick two nodes (holding Shift button), the **Direction** vector will go "
+"from the first to the second node."
+msgstr ""
+
+# 6be73a1744414a939e04e424053bd71a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:46
+msgid ""
+"In the second mode it is possible to pick the **Face** by mouse in the 3D"
+" Viewer or directly input the **Face** ID in the corresponding field."
+msgstr ""
+
+# e03af85346da481bae91f969e3a516b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:55
+msgid "In the third mode, the faces can be reoriented according to volumes:"
+msgstr ""
+
+# bc81a8fd80a94482a3eaabb3a3d842bc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:57
+msgid ""
+"Select an object (mesh, sub-mesh or group) containing reference "
+"**Volumes**, in the Object Browser or in the 3D Viewer."
+msgstr ""
+
+# 8cdac663c228432a958c3cbcdc24af81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:58
+msgid ""
+"Specify whether face normals should point outside or inside the reference"
+" volumes using **Face normal outside volume** check-box."
+msgstr ""
+
+# 8f80a1f281634632900bb376721a726f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:66
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm the "
+"operation."
+msgstr ""
+
+# aacdcc31b3454a4892adc33edff88c2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/reorient_faces.rst:68
+msgid "**See Also** a sample TUI Script of a :ref:`tui_reorient_faces` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/revolution.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/revolution.po
new file mode 100644 (file)
index 0000000..efaa17e
--- /dev/null
@@ -0,0 +1,200 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 6ac789b6770b4001ba9a2d569e8cd5f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:5
+msgid "Revolution"
+msgstr ""
+
+# ab9940fdedc243edb2b4ee309e9f969e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:7
+msgid ""
+"Revolution is used to build mesh elements of plus one dimension than the "
+"input ones.  Boundary elements around generated mesh of plus one "
+"dimension are additionally created. All created elements can be "
+"automatically grouped. Revolution can be used to create a "
+":ref:`extrusion_struct`. See :ref:`extrusion_page` page for general "
+"information on Revolution, which can be viewed as extrusion along a "
+"circular path."
+msgstr ""
+
+# 104b920b73084454b555a42d29aecf2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:15
+msgid "**To apply revolution:**"
+msgstr ""
+
+# 59caed10ca8144f0aace21eefbde3bfa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:17
+msgid ""
+"From the **Modification** menu choose the **Revolution** item or click  "
+"**\"Revolution\"** button in the toolbar."
+msgstr ""
+
+# 9fef083959254db9821bee5bfb06f9d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:25
+msgid "The following dialog will appear:"
+msgstr ""
+
+# 0c0fb5d5710c4ca096f75d7097c313a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:31
+msgid "In this dialog:"
+msgstr ""
+
+# 5a8da583e6fa46b4893d5ce61ecdef22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:33
+msgid ""
+"Use *Selection* button to specify what you are going to select at a given"
+" moment, **Nodes**, **Edges** or **Faces**."
+msgstr ""
+
+# ef79794a371e474b8ccc2d3e4dbf83fd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:44
+msgid ""
+"Specify **Nodes**, **Edges** and **Faces**, which will be revolved, by "
+"one of following means:"
+msgstr ""
+
+# 6d264df6a869443fa232e69226a8bad5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:42
+msgid "**Select the whole mesh, sub-mesh or group** activating this check-box."
+msgstr ""
+
+# 56588b162f7d4805b892c2ee8a3e5b26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:43
+msgid ""
+"Choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame."
+msgstr ""
+
+# 96d1ec2172234d0cb6badd1c6622f44a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:44
+msgid ""
+"Input the element IDs directly in **Node IDs**, **Edge IDs** and **Face "
+"IDs** fields. The selected elements will be highlighted in the viewer, if"
+" the mesh is shown there."
+msgstr ""
+
+# 5c797feb032349d2ad83aee9b2b34fdb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:45
+msgid ""
+"Apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`filtering_elements` page."
+msgstr ""
+
+# c9998bdb16c24a22b7572f7ab936bc00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:50
+msgid "Specify the **Axis** of revolution:"
+msgstr ""
+
+# 93c18e08e2104004b1edc0088a8dd4f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:47
+msgid ""
+"Specify the coordinates of the start **Point** of the axis of revolution;"
+" either directly or by picking a node in the Viewer (selection of nodes "
+"is activated as you click the *Selection* button)."
+msgstr ""
+
+# 2e0fdecb971b474aa133dc4d5d09ef64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:50
+msgid "Specify the **Vector** of the axis in either of three ways:"
+msgstr ""
+
+# 8e407adfd68b4ca1b7741cf23c64ba80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:49
+msgid "directly adjust vector components;"
+msgstr ""
+
+# 9eabcb1646d4482db9ae710be3c1b36e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:50
+msgid ""
+"click *Selection* button, choose **From Origin to selected Point** in the"
+" opened menu and pick a node in the Viewer;"
+msgstr ""
+
+# 178a26fc0011439bb9898807d2f8a1d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:51
+msgid ""
+"click *Selection* button, chose **Normal to selected Face** in the opened"
+" menu and pick a mesh face in the Viewer."
+msgstr ""
+
+# ba1537f0e50149cd8522ec63a94428cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:69
+msgid ""
+"Specify the **Angle** of revolution and the **Number of steps** of "
+"revolution,"
+msgstr ""
+
+# 70e4ba78bbbd404cad2a51bf425db034
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:53
+msgid ""
+"**Angle by Step** - the elements are revolved by the specified angle at "
+"each step (i.e. for Angle=30 and Number of Steps=3, the elements will be "
+"extruded by 30 degrees twice for a total of 30*3=90)"
+msgstr ""
+
+# a1b9aadc072e48b0bc80d0b6534097cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:61
+msgid ""
+"**Total Angle** - the elements are revolved by the specified angle only "
+"once and the number of steps defines the number of iterations (i.e. for "
+"Angle=30 and Number of Steps=3, the elements will be revolved by 30/3=10 "
+"degrees twice for a total of 30)."
+msgstr ""
+
+# 9c2d8f6996d14050af5f0132ca066fd5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:71
+msgid ""
+"Specify the **Tolerance**, which is used to detect nodes lying on the "
+"axis of revolution."
+msgstr ""
+
+# 1e0b5219aa40468ea7d1c932fe70bbfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:72
+msgid "Activate  **Preview** check-box to see the result mesh in the viewer."
+msgstr ""
+
+# b3486204cbf44474acc0252faf8e3b14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:73
+msgid ""
+"If you activate **Generate Groups** check-box, the **result elements** "
+"created from **selected elements** contained in groups will be included "
+"into new groups named by pattern \"<old group name>_rotated\" and \"<old "
+"group name>_top\". For example if a selected quadrangle is included in "
+"*g_Faces* group (see figures below) then result hexahedra will be "
+"included in *g_Faces_rotated* group and a quadrangle created at the "
+"\"top\" of revolved mesh will be included in *g_Faces_top* group."
+msgstr ""
+
+# 8ec480305a2747b2b2c5a516354d672a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:82
+msgid "This check-box is active only if there are some groups in the mesh."
+msgstr ""
+
+# 0e2f1e95c686473e94392283cfbe39e6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:84
+msgid "Click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 06b0f7f7794a487eb6b4c6219186ea1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/revolution.rst:86
+msgid "**See Also** a sample TUI Script of a :ref:`tui_revolution` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/rotation.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/rotation.po
new file mode 100644 (file)
index 0000000..7ccf99c
--- /dev/null
@@ -0,0 +1,160 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 3eb9d57562994caaa94e9953e98e2bc1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:5
+msgid "Rotation"
+msgstr ""
+
+# bc73581315ba4779a00ea3c885277127
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:7
+msgid "This operation allows to rotate in space the mesh or some of its elements."
+msgstr ""
+
+# cfb02e83b2c043ff971b9dd3d43d20c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:9
+msgid "**To rotate the mesh:**"
+msgstr ""
+
+# f1722428e06e47c894e2278d3825abb0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:11
+msgid ""
+"From the **Modification** menu choose **Transformation** -> **Rotation** "
+"item  or click **\"Rotation\"** button in the toolbar."
+msgstr ""
+
+# d7c9eeadb119438197cb8816f237bc92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:19
+msgid "The following dialog will appear:"
+msgstr ""
+
+# f3b8e39357ed41c5ab97d573ec21ff42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:24
+msgid "In this dialog:"
+msgstr ""
+
+# b7be9cd5867144ffabf77890d50ecf35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:26
+msgid "specify the IDs of the elements which will be rotated:"
+msgstr ""
+
+# 36838092b54a4d068cb1b8a1c464aab7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:28
+msgid "**Select the whole mesh, submesh or group** activating this checkbox; or"
+msgstr ""
+
+# 0e62984febc34a5c982f6616e6119121
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:29
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# 907470a5dc324ec3aef4e0d59411f38d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:30
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# e5b7a86186084d4383e3a53b9cebcf7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:31
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# f849780da2d54925a39b1b368f513ce8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:35
+msgid "specify the axis of rotation:"
+msgstr ""
+
+# 38585ef1d6f44a35b54bf789f04920b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:34
+msgid "specify the cooordinates of the start **Point** of the vector of rotation;"
+msgstr ""
+
+# 3b3dbcebc8b94e34bf9736dcd7153339
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:35
+msgid ""
+"specify the **Vector** of rotation through the coordinates of its end "
+"point with respect to the coordinates of the start point;"
+msgstr ""
+
+# b33fb11b21144354ac42f28cdcbf892f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:37
+msgid "specify the **Angle** of rotation"
+msgstr ""
+
+# 9e55761562b143799baa51c67436291a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:39
+msgid "specify the conditions of rotation:"
+msgstr ""
+
+# 6fac6e8141cb416da498e891f9e80c3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:41
+msgid ""
+"activate **Move elements** radio button to create  the source mesh (or "
+"elements) at the new location and erase it from the previous location;"
+msgstr ""
+
+# 1956319341624ef899aa47cb565dde65
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:42
+msgid ""
+"activate **Copy elements** radio button to create the source mesh (or "
+"elements) at the new location, but leave it at the previous location, the"
+" source mesh will be considered one and single mesh with the result of "
+"the rotation;"
+msgstr ""
+
+# d531bcb2281544fb9cf8b7182fe2ef78
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:43
+msgid ""
+"activate **Create as new mesh** radio button to leave the source mesh (or"
+" elements) at its previous location and create a new mesh at the new "
+"location, the new mesh appears in the Object Browser with the default "
+"name MeshName_rotated (it is possible to change this name in the adjacent"
+" box);"
+msgstr ""
+
+# bfc597d8f46f4bc89628ab4474e05108
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:44
+msgid ""
+"activate **Copy groups** checkbox to copy the groups of elements of the "
+"source mesh to the newly created mesh."
+msgstr ""
+
+# 6dba19eadb894b8f99a9e4605a37974c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:46
+msgid ""
+"activate **Preview** checkbox to show the result of transformation in the"
+" viewer"
+msgstr ""
+
+# 407bbc2d9e554da29cb8cfa5fe4d0d96
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:47
+msgid "click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 0dea9b0910534ea2ab63434488817657
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/rotation.rst:62
+msgid "**See Also** a sample TUI Script of a :ref:`tui_rotation` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scalar_bar.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scalar_bar.po
new file mode 100644 (file)
index 0000000..448ac93
--- /dev/null
@@ -0,0 +1,101 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1156d5c7cd8b4ce1a3df82e82a707119
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:5
+msgid "Scalar Bar properties"
+msgstr ""
+
+# 4611908037724a82beac0a0b227692bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:7
+msgid "In this dialog you can specify the properties of the scalar bar"
+msgstr ""
+
+# 27e42760cf0343ab852c0448815e1e95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:13
+msgid ""
+"**Scalar Range** - in this menu you can specify **Min value** and **Max "
+"value** of the **Scalar Bar**, and turn on/off **Logarithmic** scaling of"
+" the scalar bar."
+msgstr ""
+
+# b5dabecd5af340298fae16f653e29ec6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:16
+msgid ""
+"**Logarithmic scale** is not applicable in case of negative and zero "
+"values in the range. In such cases it is disabled."
+msgstr ""
+
+# f8bbd34463744e8a939fae79d70564eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:18
+msgid ""
+"**Font** - in this menu you can set type, face and color for the font of "
+"**Title** and **Labels** of the **Scalar Bar**"
+msgstr ""
+
+# 664c9633f415405e805f78afe06b4c9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:20
+msgid ""
+"**Colors & Labels** - in this menu you can set the **number of colors** "
+"and the **number of labels** of the **Scalar Bar**"
+msgstr ""
+
+# ed868968ad2e488f90dbbbb34d38edcb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:22
+msgid ""
+"**Orientation** - allows choosing between vertical and horizontal "
+"orientation of the **Scalar Bar**."
+msgstr ""
+
+# 39360fa91ca54a70a9d489574fa1d4ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:25
+msgid ""
+"**Origin & Size Vertical & Horizontal** - allows defining the location "
+"(**X** and **Y**) and size (**Width** and **Height**) of **Scalar Bar**"
+msgstr ""
+
+# 79463d1d8df54ec0b4b64d7c5b54e0cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:25
+msgid "**X**: abscissa of the origin (from the left side)"
+msgstr ""
+
+# 3dc2795dc89f47639ec6050cdc0a8da8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:26
+msgid "**Y**: ordinate of the origin (from the bottom)"
+msgstr ""
+
+# 03322a6dfedc42c09a9a078cd601e76b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:33
+msgid ""
+"**Distribution** - in this menu you can Show/Hide distribution histogram "
+"of the values of the **Scalar Bar** and specify histogram properties"
+msgstr ""
+
+# c10bd60eabd54a5f9d58bf7d23c80ffd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:28
+msgid "**Multicolor** the histogram is colored as **Scalar Bar**"
+msgstr ""
+
+# adcd8b4b90834ef1b259f5723ae5588a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scalar_bar.rst:29
+msgid ""
+"**Monocolor** the histogram is colored as selected with **Distribution "
+"color** selector"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scale.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scale.po
new file mode 100644 (file)
index 0000000..0cdcf0c
--- /dev/null
@@ -0,0 +1,211 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 976649347dc04341ae9ba242b046a63f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:5
+msgid "Scale"
+msgstr ""
+
+# aa6151bc0ee9433c86ad127eb2accce5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:7
+msgid ""
+"This geometrical operation allows to scale in space your mesh or some of "
+"its elements."
+msgstr ""
+
+# 7c93fc0bfad147c388e6f8288ea113a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:9
+msgid "**To scale a mesh:**"
+msgstr ""
+
+# 516f478f73cf4c57b83ebbd9c5abda5e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:22
+msgid ""
+"From the **Modification** menu choose **Transformation** -> **Scale "
+"Transform** item."
+msgstr ""
+
+# 592174632303487d8ce9c13810433a54
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:12
+msgid "One of the following dialogs will appear:"
+msgstr ""
+
+# b3abf3343d4e4614b82fd4471bef6f23
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:14
+msgid "With one scale factor:"
+msgstr ""
+
+# 1727f2fa7cf14d689c8d20b9b7fb5fa4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:19
+msgid "Or with different scale factors for axes:"
+msgstr ""
+
+# f6d8459879304805a1f76ac536164444
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:44
+msgid "In the dialog:"
+msgstr ""
+
+# 0c332aca8bd949ec80c5867c1787a603
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:29
+msgid "specify the IDs of the translated elements:"
+msgstr ""
+
+# f7cda11020c543ff8fea7ad971549c8d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:26
+msgid "**Select the whole mesh, submesh or group** activating this checkbox; or"
+msgstr ""
+
+# f9b333cbe5ac44e9acd16c790192e3db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:27
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# e1518aed969b48f8a270e5f08cf051e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:28
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# 0c0b04720a4143e88071e45d47be2573
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:29
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# 0dff07c6312e4602a6d73eab27f77b16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:31
+msgid "specify the base point for scale"
+msgstr ""
+
+# cb38c5456f3a420fa73112e558383d4c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:33
+msgid "specify the scale factor"
+msgstr ""
+
+# 207ff7432d104971920e94f1a1489058
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:35
+msgid "specify the conditions of scale:"
+msgstr ""
+
+# ae76fd3de0e145cbae97b2557a1ae1b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:37
+msgid ""
+"activate **Move elements** radio button to scale the selected mesh (or "
+"elements) without creating a copy;"
+msgstr ""
+
+# 2b45e07b65e5447c81a5a9fa7a730813
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:38
+msgid ""
+"activate **Copy elements** radio button to duplicate the selected mesh "
+"(or elements) and to apply scaling to the copy within the same mesh;"
+msgstr ""
+
+# cfe3fb629ea3424a91a18cb3c2c343db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:39
+msgid ""
+"activate **Create as new mesh** radio button to leave the selected mesh "
+"(or elements) at its previous location and create a new mesh of the "
+"scaled copy of the selected elements; the new mesh appears in the Object "
+"Browser with the default name MeshName_scaled (it is possible to change "
+"this name in the adjacent box);"
+msgstr ""
+
+# 7991c68193e24dc29f5a406dee204dd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:40
+msgid ""
+"activate **Copy groups** checkbox to copy the groups of elements existing"
+" in the source mesh to the newly created mesh."
+msgstr ""
+
+# bf35cd9cb59e4b18b39740b76ef4e40f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:42
+msgid ""
+"activate **Preview** checkbox to show the result of transformation in the"
+" viewer"
+msgstr ""
+
+# eab666d03f084db59220125c74308d29
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:43
+msgid "click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 30a53807813c440680fd35fe9e1fa820
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:46
+msgid "**Example of using:**"
+msgstr ""
+
+# e1be3e4a68d9473c99099a90dfeaae68
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:48
+msgid "Create quandrangle mesh 3x3 on a simple planar face (200x200)"
+msgstr ""
+
+# c9c9dec075ba4cad992dde2f2bdc5155
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:53
+msgid "and union 3 faces (along axis Z) to group \"gr_faces\""
+msgstr ""
+
+# ccee25b07af74515b94b5d27c3be58de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:60
+msgid "Perform scale operation for the whole mesh and create a new mesh:"
+msgstr ""
+
+# 8d1cc8863f5645ca872ec1934ea72f82
+# 7c4b36782d234b55b1b5d4ea505b3fe1
+# 11937ca304cb451bbcb27a93701a01ce
+# 01da8b1362bb4532bc2a36e54870acdf
+# da6c180ec04043119602a6e5bb6f7e4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:65
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:75
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:109
+msgid "result after operation:"
+msgstr ""
+
+# 95e75f754ac247448c9da13196a037f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:70
+msgid "Perform scale operation for the whole mesh and copy elements:"
+msgstr ""
+
+# 09834714eb3540e1a254907302799225
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:80
+msgid "Perform scale operation for a group of faces and copy elements:"
+msgstr ""
+
+# 9b1c18e6ff8c4001bab9401ec88179f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:92
+msgid "Perform scale operation for two edges and move elements:"
+msgstr ""
+
+# 6aee0052fed448c8b135b26af4479692
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:104
+msgid "Perform scale operation for one face and move elements:"
+msgstr ""
+
+# e5db8678a3a4415eaa2ef2096cc1e865
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/scale.rst:115
+msgid "**See Also** a sample TUI Script of a :ref:`tui_scale` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po
new file mode 100644 (file)
index 0000000..14a9b3d
--- /dev/null
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d4f6292a512f44e0949ebb0af600ae1b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst:5
+msgid "Segments around Vertex"
+msgstr ""
+
+# 1d1fe0e867d64d81b399c9952109111f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst:7
+msgid ""
+"**Segments around Vertex** algorithm is considered to be a 0D meshing "
+"algorithm, but, of course, it doesn't mesh vertices. It allows to define "
+"the local size of the segments in the neighborhood of a certain vertex. "
+"If we assign this algorithm to a geometrical object of higher dimension, "
+"it applies to all its vertices."
+msgstr ""
+
+# 958bbf124dab4412a71acd09cbcfc2ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst:13
+msgid ""
+"Length of segments near vertex is defined by **Length Near Vertex** "
+"hypothesis. This hypothesis is used by :ref:`a1d_algos_anchor` \"Wire "
+"Discretization\" or :ref:`a1d_algos_anchor` \"Composite Side "
+"Discretization\" algorithms as follows: a geometrical edge is discretized"
+" according to a 1D hypotheses and then nodes near vertices are modified "
+"to assure the segment length required by **Length Near Vertex** "
+"hypothesis."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/selection_filter_library.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/selection_filter_library.po
new file mode 100644 (file)
index 0000000..37e910d
--- /dev/null
@@ -0,0 +1,517 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1c1fce2364eb4d10a0b9ef75f005a204
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:5
+msgid "Selection filter library"
+msgstr ""
+
+# 8bdbe1ebe74b443e9f379fcd3769a610
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:7
+msgid ""
+"Selection filter library allows creating and storing in files the filters"
+" that can be later reused for operations on meshes. You can access it "
+"from the Main Menu via **Tools / Selection filter library**. It is also "
+"possible to save/load a filter by invoking the filter library from "
+":ref:`filtering_elements` launched from any mesh operation."
+msgstr ""
+
+# 0e734e3b76c941b8ab1cdc3cd2278263
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:16
+msgid ""
+"**Library file name** shows the path and the file name where your filters"
+" will be stored. By clicking the **Browse** button you can load an "
+"existing filter library."
+msgstr ""
+
+# 3e3d1001ef1e4596b81c61efe31f259d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:20
+msgid ""
+"**Names of filters** lists the filters created or uploaded for the "
+"current study. You can **Add** or **Delete** filters."
+msgstr ""
+
+# 1d12f5c73eb145f58cf4d80c15b808fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:23
+msgid ""
+"In **Filter name** box you can specify the name for your filter. By "
+"default it is prefixed with the corresponding entity type."
+msgstr ""
+
+# 8b3e05ba20e54cf9ae42610cb3b64bb9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:29
+msgid "Filter Dialog"
+msgstr ""
+
+# f8535670e6fc4c5893d9a7a134c6235a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:31
+msgid ""
+"When we use filters during group creation or another operation (by "
+"clicking **Set Filter** button in the corresponding dialog), the dialog "
+"for setting filters looks as shown below."
+msgstr ""
+
+# c8cad5728ed64f47a139515c0aac843c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:38
+msgid ""
+"The **Add** button creates a new criterion at the end of the list of "
+"criteria. The **Insert** button creates a new criterion before the "
+"selected criterion. The **Remove** button deletes the selected criterion."
+" The **Clear** button deletes all criteria."
+msgstr ""
+
+# c7be8ffe336742d8893887bd7ed12199
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:43
+msgid ""
+"If there is a choice of **Entity type** in the dialog, only criteria of "
+"currently selected type are used to create or change a filter, and "
+"criteria of hidden types (if were specified) are ignored."
+msgstr ""
+
+# 5df645a139e14ef0a5ab935cc2822f4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:47
+msgid ""
+"Each **Entity type** has its specific list of criteria, however all "
+"filters have common syntax. The **Threshold Value** should be specified "
+"for most criteria. For numerical criteria it is necessary to indicate if "
+"the found elements should be **More**, **Less** or **Equal** to this "
+"**Value**. You can also reverse the sense of a criterion using **Unary** "
+"operator *Not* and you should specify logical relations between criteria "
+"using **Binary** operators *Or* and *And*."
+msgstr ""
+
+# 8550bb068c514fa4b58594b758559fb4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:55
+msgid ""
+"Some criteria have the additional parameter of **Tolerance**. Switching "
+"on **Insert filter in viewer** check-box limits selection of elements in "
+"the Viewer to the current filter."
+msgstr ""
+
+# 9acf2cc77b6245ce931c1ed13dff672d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:59
+msgid ""
+"In the **Source** field you choose if the filter will be applied to the "
+"whole **Mesh**, the **Initial Selection** or the **Current Dialog**. If "
+"**Mesh** is chosen, the elements satisfying the filter will be selected "
+"in the 3D Viewer. If **Initial Selection** is chosen, the filter will be "
+"applied to the selected elements and the elements rejected by the filter "
+"will be deselected. If **Current Dialog** is chosen, the filter will be "
+"applied to the list of elements in the current dialog and the elements "
+"rejected by the filter will be removed from the list."
+msgstr ""
+
+# e1610c78c0ed4b2794086eb144acd6a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:69
+msgid ""
+"**Copy from...** button gives you a possibility to load an existing "
+"filter from **Selection filter library** and **Add to...** button gives "
+"you a possibility to save your current filter in the Library."
+msgstr ""
+
+# 490fe36e117e4c8886f86f11483197ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:74
+msgid ""
+"If the button **Apply and Close** is disabled, there is no selected mesh "
+"in the Object Browser and the filter can not be created. You have to "
+"select the mesh and the button will be enabled."
+msgstr ""
+
+# 80cfefe334de4e478d2ee70d122f722c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:76
+msgid "Some criteria are applicable to all **Entity types**:"
+msgstr ""
+
+# eac45a6080c545e09c8b0ab33992aad6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:78
+msgid ""
+"**Belong to Geom** selects entities whose all nodes lie on the shape "
+"defined by **Threshold Value**. If the threshold shape is a sub-shape of "
+"the main shape of the mesh, the filtering algorithm works faster because "
+"node-to-shape association is used instead of measuring distance between "
+"nodes and the shape, and **Tolerance** is not used. If the threshold "
+"shape is any other shape, the algorithm works slower because distance "
+"between nodes and the shape is measured and is compared with "
+"**Tolerance**. The latter approach (distance measurement) is also used if"
+" an element is not associated to any shape."
+msgstr ""
+
+# f67124ffdff24567bf5b03fdb1444f8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:79
+msgid ""
+"**Lying on Geom** selects entities whose at least one node lies on the "
+"shape defined by the **Threshold Value**. If the threshold shape is a "
+"sub-shape of the main shape of the mesh, the filtering algorithm works "
+"faster because node-to-shape association is used instead of measuring "
+"distance between nodes and the shape, and **Tolerance** is not used. If "
+"the threshold shape is any other shape, the algorithm works slower "
+"because distance between nodes and the shape is measured and is compared "
+"with **Tolerance**. The latter approach (distance measurement) is also "
+"used if an element is not associated to any shape."
+msgstr ""
+
+# 34e0eb39ce7649eba97c55fc8f783642
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:80
+msgid ""
+"**Belong to Mesh Group** selects entities included into the mesh group "
+"defined by the **Threshold Value**."
+msgstr ""
+
+# 1b2d26b182b3419abb3716a5a0fe4f59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:81
+msgid ""
+"**Range of IDs** allows selection of entities with the specified IDs. "
+"**Threshold Value** can be, for example: \"1,2,3,50-60,63,67,70-78\""
+msgstr ""
+
+# e70b62585c804d82b8264c362e698a17
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:82
+msgid ""
+"**Color of Group** allows selection of entities belonging to the Group "
+"with the color defined by the **Threshold Value**."
+msgstr ""
+
+# 6a95643f6bac4e24b3b429add57f7105
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:86
+msgid ""
+"**Elements of a domain** allows selection of entities belonging to one "
+"domain of a mesh. The domain is mesh part not connected to other parts. "
+"**Threshold Value** locating any element of the domain can be either"
+msgstr ""
+
+# 38ca148d1a304511b5076a28fc54c9d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:84
+msgid "node ID (that you can pick in the Viewer) or"
+msgstr ""
+
+# 9d0c424b3fa74c0a84b5fa14e67f1c20
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:85
+msgid ""
+"geometrical vertex (that you can pick either in the Viewer or in the "
+"Object Browser) or"
+msgstr ""
+
+# 8608ebd9c96e46c69ef2b8df43773378
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:86
+msgid "3 coordinates of a point (that you can enter in TUI mode only)."
+msgstr ""
+
+# ffea7f37121c4268b43ad9de9c20f421
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:88
+msgid ""
+"Some criteria are applicable to entities of dimension more than zero, "
+"i.e. to **Edges**, **Faces** and **Volumes**:"
+msgstr ""
+
+# 6aaffed45ef64e24b05096a94cc3afdc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:90
+msgid ""
+"**Linear** allows selection of Linear or Quadratic elements (if Unary is "
+"set to \"Not\")"
+msgstr ""
+
+# 8ec1110320cb485eae13c1a6c0d6c0f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:91
+msgid ""
+"**Geometry type** allows selection of elements by their geometric type "
+"defined by the **Threshold Value**. The list of available geometric types"
+" depends on the current entity type."
+msgstr ""
+
+# 90b622d6c35944278f201fba7b79613f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:92
+msgid ""
+"**Entity type** allows selection of elements by their type defined as a "
+"combination of geometry type and the number of nodes."
+msgstr ""
+
+# 5c03d3620bf545c38cd2d0b7d079147c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:94
+msgid ""
+"The following criteria are applicable to Entities of **all** types except"
+" for *Volumes*:"
+msgstr ""
+
+# 829402e4a6284e6ab74ad292a98c4aab
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:96
+msgid ""
+"**Belong to Plane** selects entities whose all nodes belong to a "
+"specified plane within a given **Tolerance**."
+msgstr ""
+
+# 9a39d5991dd540e9a3402abcb53a1db0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:97
+msgid ""
+"**Belong to Cylinder** selects entities whose all nodes belong to a "
+"specified cylinder within a given **Tolerance**."
+msgstr ""
+
+# 5d4d7fbecf60482d8193729fd7f8c521
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:98
+msgid ""
+"**Belong to Surface** selects entities whose all nodes belong to a "
+"specified arbitrary surface within a given **Tolerance**."
+msgstr ""
+
+# 6336c1a5033e4f089d2c13133098a8e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:100
+msgid "The following criteria allow selecting mesh **Nodes**:"
+msgstr ""
+
+# 837b8b1702c54744b16871a48fa37416
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:102
+msgid "**Free nodes** selects nodes not belonging to any mesh element."
+msgstr ""
+
+# cd6b965ce6ae41a08b73d5dd60bcec1f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:103
+msgid ""
+"**Double nodes** selects a node coincident with other nodes (within a "
+"given **Tolerance**). See also :ref:`tui_double_nodes_control`."
+msgstr ""
+
+# 6dea00644fa34febac6e86d56513001a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:104
+msgid ""
+"**Connectivity number** selects nodes with a number of connected "
+"elements, which is more, less or equal to the predefined **Threshold "
+"Value**. Elements of the highest dimension are countered only."
+msgstr ""
+
+# 4f3328b1ea8e4c808b3a2f00fc8566d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:106
+msgid "The following criteria allow selecting mesh **Edges**:"
+msgstr ""
+
+# 70450e00d5ac49d2b4e3944fdf08dd77
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:108
+msgid ""
+"**Free Borders** selects free 1D mesh elements, i.e. edges belonging to "
+"one element (face or volume) only. See also a :ref:`free_borders_page`."
+msgstr ""
+
+# 0589aa44cbfc4646b09f1118227b42d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:109
+msgid ""
+"**Double edges** selects 1D mesh elements basing on the same set of "
+"nodes. See also :ref:`filter_double_elements` ."
+msgstr ""
+
+# d8d8b9d1e788415ea6abdab073967ff3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:110
+msgid ""
+"**Borders at Multi-Connections** selects edges belonging to several "
+"faces. The number of faces should be more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**. See also a "
+":ref:`borders_at_multi_connection_page`."
+msgstr ""
+
+# c56be1de25a24c178460e748f230c825
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:111
+msgid ""
+"**Length** selects edges with a value of length, which is more, less or "
+"equal (within a given **Tolerance**) to the predefined **Threshold "
+"Value**. See also a :ref:`length_page` ."
+msgstr ""
+
+# 460916cdcb2f4597b398daf937a0bddb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:113
+msgid "The following criteria allow selecting mesh **Faces**:"
+msgstr ""
+
+# 36bcbcf2e34b4819b3e97c9c12c631cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:115
+msgid ""
+"**Aspect ratio** selects 2D mesh elements with an aspect ratio (see also "
+"an :ref:`aspect_ratio_page`), which is more, less or equal (within a "
+"given **Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 31f11a8d74564ae293786fb388dd11f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:116
+msgid ""
+"**Warping** selects quadrangles with warping angle (see also a "
+":ref:`warping_page`), which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 59f4575a06874c57af5eab922fb54487
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:117
+msgid ""
+"**Minimum angle** selects triangles and quadrangles with minimum angle "
+"(see also a :ref:`minimum_angle_page`), which is more, less or equal "
+"(within a given **Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 18d26e933cea4cc683cfc077b606146c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:118
+msgid ""
+"**Taper** selects quadrangles cells with taper value (see also a "
+":ref:`taper_page`), which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 30abd621800c45d0831eb72eb648274a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:119
+msgid ""
+"**Skew** selects triangles and quadrangles with skew value (see also a "
+":ref:`skew_page`), which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 053853c3eb7849f9b26d5f711c8e11f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:120
+msgid ""
+"**Area** selects triangles and quadrangles with a value of area (see also"
+" an :ref:`area_page`), which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 02534930c9c74ffaa5819494e3a64911
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:121
+msgid ""
+"**Free edges** selects 2D mesh elements having at least one edge, which "
+"is not shared with other faces. See also a :ref:`free_edges_page`."
+msgstr ""
+
+# 9cf5e8a3b05f483dbbcb0789374f8c71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:122
+msgid ""
+"**Free faces** selects 2D mesh elements, which belong to less than two "
+"volumes."
+msgstr ""
+
+# b9f5cfe961a6466c8d56e56395e197db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:123
+msgid ""
+"**Double faces** selects 2D mesh elements basing on the same set of "
+"nodes. See also :ref:`filter_double_elements`."
+msgstr ""
+
+# 677dfbddc4364500b20b32752b20d483
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:124
+msgid ""
+"**Faces with bare border** selects 2D mesh elements having a free border "
+"without an edge on it. See also :ref:`bare_border_faces_page`."
+msgstr ""
+
+# 5b75d13db4a74770a725f1cd09c8b42e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:125
+msgid ""
+"**Over-constrained faces** selects 2D mesh elements having only one "
+"border shared with other 2D elements. See also "
+":ref:`over_constrained_faces_page`."
+msgstr ""
+
+# 8a8c1a6a9e444441bfbc48773d261806
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:126
+msgid ""
+"**Borders at Multi-Connections 2D** selects cells consisting of edges "
+"belonging to several elements of mesh. The number of mesh elements should"
+" be more, less or equal (within a given **Tolerance**) to the predefined "
+"**Threshold Value**. See also a "
+":ref:`borders_at_multi_connection_2d_page`."
+msgstr ""
+
+# a84ed7f236924d9dbb8438ffecafeba5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:127
+msgid ""
+"**Length 2D** selects triangles and quadrangles combining of the edges "
+"with a value of length, which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**. See also a "
+":ref:`length_2d_page`."
+msgstr ""
+
+# 54627dbe712540b3b3a85bc9eee7a24b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:128
+msgid ""
+"**Coplanar faces** selects mesh faces neighboring the one selected by ID "
+"in **Threshold Value** field, if the angle between the normal to the "
+"neighboring face and the normal to the selected face is less then the "
+"angular tolerance (defined in degrees). Selection continues among all "
+"neighbor faces of already selected ones."
+msgstr ""
+
+# df8bbc089d434f3eb71da4c6f0649904
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:129
+msgid ""
+"**Element Diameter 2D** selects triangles and quadrangles composed of the"
+" edges and diagonals with a value of length, which is more, less or equal"
+" (within a given **Tolerance**) to the predefined **Threshold Value**. "
+"See also a :ref:`max_element_length_2d_page`."
+msgstr ""
+
+# 6d7236a630c142ea9f0d30873c5f3b61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:131
+msgid "The following criteria allow selecting mesh **Volumes**:"
+msgstr ""
+
+# c6462d3a7074480a99546e2823b5e310
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:133
+msgid ""
+"**Aspect ratio 3D** selects 3D mesh elements with an aspect ratio (see "
+"also an :ref:`aspect_ratio_3d_page`), which is more, less or equal "
+"(within a given **Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 1664adf90bb841bc9d0d712f5a2bd4f9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:134
+msgid ""
+"**Volume** selects 3D mesh elements with a value of volume (see also a "
+":ref:`volume_page`), which is more, less or equal (within a given "
+"**Tolerance**) to the predefined **Threshold Value**."
+msgstr ""
+
+# 4b238fb593444b72b69e50a0b009ac67
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:135
+msgid ""
+"**Element Diameter 3D** selects 3D mesh elements composed of the edges "
+"and diagonals with a value of length, which is more, less or equal "
+"(within a given **Tolerance**) to the predefined **Threshold Value**. See"
+" also a :ref:`max_element_length_3d_page`."
+msgstr ""
+
+# 2826aa3f994a45db95cf817efd5e85c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:136
+msgid ""
+"**Double volumes** selects 3D mesh elements basing on the same set of "
+"nodes. See also :ref:`filter_double_elements`."
+msgstr ""
+
+# 6921b6529e1240858542b679f0db83b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:137
+msgid ""
+"**Bad oriented volume** selects mesh volumes, which are incorrectly "
+"oriented from the point of view of MED convention."
+msgstr ""
+
+# 0d6876d7b2304932a550c4dfabca7b71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:138
+msgid ""
+"**Over-constrained volumes** selects mesh volumes having only one facet "
+"shared with other volumes. See also :ref:`over_constrained_volumes_page`."
+msgstr ""
+
+# 5a3b01dc76d3443381382446e3ab2d7d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/selection_filter_library.rst:139
+msgid ""
+"**Volumes with bare border** selects 3D mesh elements having a free "
+"border without a face on it. See also :ref:`bare_border_volumes_page`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/sewing_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/sewing_meshes.po
new file mode 100644 (file)
index 0000000..d431b08
--- /dev/null
@@ -0,0 +1,404 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 0427a840a4e84ac6989aa0c77bfac249
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:5
+msgid "Sewing meshes"
+msgstr ""
+
+# 0f75e9f4e2e04aa59f00d0f88b0e2b0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:7
+msgid ""
+"In SMESH you can sew elements of a mesh. The current functionality allows"
+" you to sew:"
+msgstr ""
+
+# 30937e9e896c4b1e8da93505b12fa892
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:10
+msgid ":ref:`free_borders_anchor`"
+msgstr ""
+
+# 1f1df6e111004472b003cda7e0c6b098
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:11
+msgid ":ref:`conform_free_borders_anchor`"
+msgstr ""
+
+# a0fdf0c2c0e04ab39246e05fcc02fe08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:12
+msgid ":ref:`border_to_side_anchor`"
+msgstr ""
+
+# 17caeaf9ef344600b0a4863ddc79e48d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:13
+msgid ":ref:`side_elements_anchor`"
+msgstr ""
+
+# 2d547b0934db4141b1f612bcb80ae199
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:22
+msgid "**To sew elements of a mesh:**"
+msgstr ""
+
+# 832116b60d01498d9dd437868ce6c5eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:24
+msgid ""
+"From the **Modification** menu choose the **Transformation** item and "
+"from its sub-menu select the **Sewing** item."
+msgstr ""
+
+# 177708ac72a04962849b6692eac54cee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:25
+msgid ""
+"Check in the dialog box one of the radio buttons corresponding to the "
+"type of sewing operation you would like to perform."
+msgstr ""
+
+# efe3e16943ef4edab8968180a97c6545
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:26
+msgid "Fill the other fields available in the dialog box."
+msgstr ""
+
+# a9f39065e73a4da885acd38d5507cf04
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:27
+msgid ""
+"Click the **Apply** or **Apply and Close** button to perform the "
+"operation of sewing."
+msgstr ""
+
+# 67fbff5164924d018bdc8c6aa5dca3b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:34
+msgid "Sew free borders"
+msgstr ""
+
+# 45ffaa1d166d4a73b2e434da1dae0ab7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:36
+msgid "This functionality allows you to unite free borders of a 2D mesh."
+msgstr ""
+
+# a195379eb25b4b3c8def98cd965baeb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:38
+msgid ""
+"There are two working modes: *Automatic* and *Manual*. In the "
+"**Automatic** mode, the program finds free borders coincident within the "
+"specified tolerance and sews them. Optionally it is possible to visually "
+"check and correct if necessary the found free borders before sewing. In "
+"the **Manual** mode you are to define borders to sew by picking three "
+"nodes of each of two borders."
+msgstr ""
+
+# cff4e716051842d29c7f4a08565327c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:52
+msgid "To use **Automatic** sewing:"
+msgstr ""
+
+# 72336fb7e3fe4501ab80d5b5492733f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:54
+msgid ""
+"Specify the mesh you want to sew by selecting it or any its part (group "
+"or sub-mesh) in the Object Browser or in the VTK Viewer."
+msgstr ""
+
+# 63c77719c09f4067b17893670f50e041
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:55
+msgid ""
+"Specify the **Tolerance**, within which free borders are considered "
+"coincident. At the default zero **Tolerance**, the tolerance used by he "
+"search algorithm is defined as one tenth of an average size of elements "
+"adjacent to compared free borders."
+msgstr ""
+
+# 4714fc6d3faa4c79ab36852cc0e4c74d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:56
+msgid ""
+"To visually check the coincident free borders found by the algorithm, "
+"switch off **Auto Sewing** check-box. The controls to adjust groups of "
+"coincident free borders will become available in the dialog."
+msgstr ""
+
+# acef3f7f661b4aecbaea899908fb9107
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:64
+msgid ""
+"**Detect** button launches the algorithm of search of coincident free "
+"borders."
+msgstr ""
+
+# 92e4f57d17cd4fdbb82b24f0fc95f45f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:65
+msgid ""
+"The found groups of **Coincident Free Borders** are shown in the list, "
+"one group per line. Each group has its own color, which is used to "
+"display the group borders in the VTK Viewer. A free border within a group"
+" is designated by the IDs of its first, second and last nodes within "
+"parenthesis. All borders present in the list will be sewn upon **Apply**."
+msgstr ""
+
+# eee96bafee2b41a1904366607c979078
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:66
+msgid "**Remove** button removes the selected groups from the list."
+msgstr ""
+
+# 4257c6d79e974570949891f524d38740
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:67
+msgid "**Select All** check-box selects all groups in the list."
+msgstr ""
+
+# 3208c772c2074645abc64177f162090d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:68
+msgid ""
+"When a group is selected, its borders appear in **Edit Selected Group** "
+"list that allows you to change this group."
+msgstr ""
+
+# 61981c0624434b3bbd85dd6b1d20f5e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:83
+msgid ""
+"Selection of a border in the list allows changing its first and last "
+"nodes whose IDs appear in two fields below the list. *Arrow* buttons near"
+" each field move the corresponding end node by the number of nodes "
+"defined by **Step** field."
+msgstr ""
+
+# 84ef8d30fdb94cfa82a17768d40a7393
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:92
+msgid ""
+"For sewing free borders manually you should switch the **Mode** to "
+"**Manual** and define three points on each border: the first, the second "
+"and the last node:"
+msgstr ""
+
+# c9034feb9b2b4e3884a179194bafa9c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:97
+msgid "the first node specifies beginning of the border;"
+msgstr ""
+
+# 17de1ef3b50c4d6c95babb7c8d3253fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:98
+msgid ""
+"the second node specifies the part of the border which should be "
+"considered (as far as the free border usually forms a closed contour);"
+msgstr ""
+
+# bee01760bbfb4aefb6d885d0d4f081dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:99
+msgid "the last node specifies the end of the border."
+msgstr ""
+
+# 5a0dc92cf1634f1b9f84f559096a1849
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:102
+msgid "You can select these nodes in the 3D viewer or define by its id."
+msgstr ""
+
+# caae9a4a6e6045d8b183bb97dd65b87e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:104
+msgid ""
+"The first and the second nodes should belong to the same link of a face. "
+"The second and the last nodes of a border can be the same. The first and "
+"the last nodes of two borders can be the same. The corresponding end "
+"nodes of two borders will be merged. Intermediate nodes of two borders "
+"will be either merged or inserted into faces of the opposite border."
+msgstr ""
+
+# 52a9e8df81dc45eb9570dd91eed42e10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:111
+msgid ""
+"In practice the borders to sew often coincide and in this case it is "
+"difficult to specify the first and the last nodes of a border since they "
+"coincide with the first and the last nodes of the other border. To cope "
+"with this, :ref:`merging_nodes_page` coincident nodes into one "
+"beforehand. Two figures below illustrate this approach."
+msgstr ""
+
+# c7647d646eed4682a8d0f9e0359b66bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:130
+msgid "The sewing algorithm is as follows:"
+msgstr ""
+
+# 7a7c60ebb975485ea6dda92c2f609a80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:132
+msgid ""
+"The parameter (U) of each node within a border is computed. So that the "
+"first node has U=0.0, the last node has U=1.0, for the rest nodes 0.0 < U"
+" < 1.0;"
+msgstr ""
+
+# 50334149dbdb4c8aa8068989c6f0dbcb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:133
+msgid ""
+"Compare node parameters of the two borders. If two nodes of the opposite "
+"borders have close parameters, they are merged, i.e. a node of the first "
+"border is replaced in all elements by a node of the second border. If a "
+"node has no node with a close parameter in the opposite border, it is "
+"inserted into an edge of element of the opposite border, an element is "
+"split. Two nodes are considered close enough to merge, if difference of "
+"their parameters is less than one fifth of minimum length of adjacent "
+"face edges on the borders."
+msgstr ""
+
+# ad507053a5a5403ba9e0f023d5da133e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:142
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_sew_free_borders` "
+"operation."
+msgstr ""
+
+# 14435c9e9b574a8981617b79df0aea8a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:149
+msgid "Sew conform free borders"
+msgstr ""
+
+# b017b8bbb53f488db8fa09627d9904fd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:151
+msgid "This functionality can be used to unite two free borders of a 2D mesh."
+msgstr ""
+
+# 6a8a83cff00b4bc4a66562dfa130bfd0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:156
+msgid ""
+"The borders of meshes for sewing are defined as for \"Sew free borders\" "
+"except that the second free border is not limited and can be defined by "
+"the first and the second nodes only. The first nodes of two borders can "
+"be the same."
+msgstr ""
+
+# 927f9477f808490da86c1422ecfacf6e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:161
+msgid ""
+"The algorithm is following: counting nodes starting at the first ones, "
+"the n-th node of the first border is merged with the n-th node of the "
+"other border, until the end of either of borders. Nodes of the first "
+"border are replaced in all elements with corresponding nodes of the "
+"second border."
+msgstr ""
+
+# 1516ecc4950e4a9fb8b27ebe590122ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:168
+msgid ""
+"For sewing conform free borders you should define three points on the "
+"first border and two points on the second one. User can select these "
+"nodes in 3D viewer or define node by its id."
+msgstr ""
+
+# 041ce8ee41c14f9d927db512030afd36
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:176
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_sew_conform_free_borders`"
+" operation."
+msgstr ""
+
+# 65b0a0c74caa42e19e189c09d9afb252
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:183
+msgid "Sew border to side"
+msgstr ""
+
+# 88c3b5fd40ae42bbafa9b4d6644475a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:185
+msgid "\"Sew border to side\" is intended to sew a free border to a mesh surface."
+msgstr ""
+
+# 37bb36c6f5e6447d88c3a40690d07c7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:189
+msgid ""
+"The free border is defined as for \"Sewing of free borders\". The place "
+"where to sew the border is defined by two nodes, between which the border"
+" faces are placed, so that the first border node is merged with the first"
+" node on the side and the last node of the border is merged with the "
+"second specified node on the side."
+msgstr ""
+
+# 1b976c0dfd734579bb69d1f821541ce6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:194
+msgid "The algorithm is following."
+msgstr ""
+
+# d39a717ae6844ad7b25f5692ed57d70a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:196
+msgid ""
+"Find a sequence of linked nodes on the side such that the found links to "
+"be most co-directed with the links of the free border."
+msgstr ""
+
+# 66e7c6cefa3644a49ac9c1b787350287
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:197
+msgid "Sew two sequences of nodes using algorithm of \"Sewing of free berders\"."
+msgstr ""
+
+# 037508d4a2c2439d8488e9de3fe2f4da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:200
+msgid ""
+"For sewing border to side you should define three points on the border "
+"and two points on the side. User can select these nodes in 3D viewer or "
+"define node by its id."
+msgstr ""
+
+# 60dcf19069f04f83bbf22733a3551e62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:208
+msgid ""
+"**See Also** a sample TUI Script of a "
+":ref:`tui_sew_meshes_border_to_side` operation."
+msgstr ""
+
+# 8aa15075cb4e4698b3516044d6ba4ff1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:215
+msgid "Sew side elements"
+msgstr ""
+
+# dc6cdaaf8c3f43dcae25ade86910ab6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:217
+msgid "This operation is intended to unite two mesh surfaces."
+msgstr ""
+
+# 73e1de6f7d8f401082281d1d07977628
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:222
+msgid ""
+"Surfaces may be defined by either 2d or 3d elements. The number of given "
+"elements of the sides must be the same. The sets of given elements must "
+"be topologically equal, i.e. each node of one element set must have a "
+"corresponding node in the other element set and corresponding nodes must "
+"be equally linked. If there are 3d elements in a set, only their free "
+"faces must obey to that rule."
+msgstr ""
+
+# 8be258d690594afe9e90428561b47cc1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:229
+msgid ""
+"Two corresponding nodes on each side must be specified. They must belong "
+"to one element and must be located on an element set boundary."
+msgstr ""
+
+# beffb26461c94fb29e06f062d9097797
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:231
+msgid ""
+"Sewing algorithm finds and merges the corresponding nodes starting from "
+"the specified ones."
+msgstr ""
+
+# 8d34e43f12604a0fae6e679f88de6c06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:246
+msgid ""
+"For sewing side elements you should define elements for sewing and two "
+"nodes for merging on the each side. User can select these elements and "
+"nodes in 3D viewer or define them by its id."
+msgstr ""
+
+# 36d86c0d971448d58e132b91e11b4ab3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/sewing_meshes.rst:250
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_sew_side_elements` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/skew.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/skew.po
new file mode 100644 (file)
index 0000000..dde0462
--- /dev/null
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# ffa0e140c2b94def8c2047d74ba0c16b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:5
+msgid "Skew"
+msgstr ""
+
+# 3d3fc82f66704e108328aaa7bf6d7126
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:7
+msgid ""
+"**Skew** mesh quality criterion reflects the angle between the lines that"
+" join opposite sides of a quadrangle element or the greatest angle "
+"between a median and a midline in a triangle element. This mesh quality "
+"criterion can be applied to elements composed of 4 and 3 nodes "
+"(quadrangles and triangles)."
+msgstr ""
+
+# 923ee2b37e8043919ea75c89979c3cc8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:20
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 4334f64e54eb4a76bfa280c22114cbda
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:21
+msgid ""
+"Choose **Controls > Face Controls > Skew** or click **\"Skew\"** button "
+"of the toolbar."
+msgstr ""
+
+# ae0207e03e3f49ecaf5329395c50d8eb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:30
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 6bf94f1243344010a4fdade2e8ab5fe0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/skew.rst:36
+msgid "**See Also** a sample TUI Script of a :ref:`tui_skew` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smesh_migration.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smesh_migration.po
new file mode 100644 (file)
index 0000000..6ed8d5b
--- /dev/null
@@ -0,0 +1,172 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 8b450be120c04c63852ba74f04c81751
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:5
+msgid "Modifing Mesh Python scripts from SALOME 6 and before"
+msgstr ""
+
+# c191d4032e124bbcad3e1a27bb60da68
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:7
+msgid ""
+"In SALOME 7.2, the Python interface for Mesh has been slightly modified "
+"to offer new functionality:"
+msgstr ""
+
+# c6559f70691240a5aef7174d5e327ef4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:10
+msgid ""
+"Scripts generated for SALOME 6 and older versions must be adapted to work"
+" in SALOME 7.2 with full functionality."
+msgstr ""
+
+# 4d881c45770f40a09a91865a699977ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:12
+msgid ""
+"The compatibility mode allows old scripts to work in almost all cases, "
+"but with a warning."
+msgstr ""
+
+# d41e76f89f924e589dbc84de5ec3ddad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:14
+msgid "See also :ref:`geompy_migration_page`"
+msgstr ""
+
+# 1efe6e67e0ec430eadb0271f23842008
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:16
+msgid "**Salome initialisation must always be done as shown below**"
+msgstr ""
+
+# 9c348713eaca4318bb1e2c2c225ab5d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:18
+msgid "*salome_init()* can be invoked safely several times): ::"
+msgstr ""
+
+# d2d92cf52cb44cff8a02b8bf756b2955
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:24
+msgid "**smesh initialisation is modified.** the old mode (from dump): ::"
+msgstr ""
+
+# 6b5cd21311fa4798a3bf0f3d1a1f80f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:31
+msgid "the new mode: ::"
+msgstr ""
+
+# 24b8a6c845ff4041b8f11283866191a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:39
+msgid "**Of course,** from smesh import ***is no more possible.**"
+msgstr ""
+
+# 9b9222f01b9249849ac872974d58b652
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:41
+msgid "You have to explicitely write **smesh.some_method()**."
+msgstr ""
+
+# a7240003d98a46ae8ebf825bf077fd1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:43
+msgid ""
+"**All algorithms have been transferred from the namespace **smesh** to "
+"the namespace **smeshBuilder**.**"
+msgstr ""
+
+# eec70a6104e74f0bb2f58d8b85be9b84
+# 17ef07996c744b0192b5e5ac93cb7df6
+# f8384e1dcbed4defbb18f5e607248983
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:100
+msgid "For instance: ::"
+msgstr ""
+
+# 1af4f091cd9045efba22b4b0858e269c
+# 04a637b826654124b013ac82d2507d5e
+# 4f13be19ae8a4447b7480725e6fb0502
+# 6720b8ab6d1e4a22a22784d6c1d87752
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:79
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:93
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:109
+msgid "is replaced by: ::"
+msgstr ""
+
+# 2186520416684b1f810a3bbcba6e641b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:55
+msgid ""
+"StdMeshers algorithms concerned are **REGULAR, PYTHON, COMPOSITE, "
+"MEFISTO, Hexa, QUADRANGLE, RADIAL_QUAD**."
+msgstr ""
+
+# ca97ecd8ffc74d798b1c512b44fb6b95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:57
+msgid ""
+"SMESH Plugins provide such algorithms as: **NETGEN, NETGEN_FULL, "
+"FULL_NETGEN, NETGEN_1D2D3D, NETGEN_1D2D, NETGEN_2D, NETGEN_3D**."
+msgstr ""
+
+# 7d46f8f2323149b1868d0aa2c1e9a9db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:59
+msgid ""
+"If you use DISTENE plugins, you also have **BLSURF, GHS3D, GHS3DPRL, "
+"Hexotic**."
+msgstr ""
+
+# 7bc97e73995041d68de5ade0778367a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:61
+msgid ""
+"**Some variables were available in both namespaces **smesh** and "
+"**SMESH**."
+msgstr ""
+
+# e7f851707d834a95809cff62b1460dfb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:63
+msgid "Now they are available only in namespace **SMESH****."
+msgstr ""
+
+# 3711be03d0e14332b0fed16e6c91a35e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:65
+msgid ""
+"The dump function used only the namespace **SMESH**, so, if your script "
+"was built with the help of the dump function, it should be already OK in "
+"this respect."
+msgstr ""
+
+# 946aaace91cb49c58880a4716992f2bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:70
+msgid "The most used variables concerned are:"
+msgstr ""
+
+# c8c14de4af5e49a2a06570f1d6887a46
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:69
+msgid "**NODE, EDGE, FACE, VOLUME, ALL.** **FT_xxx, geom_xxx, ADD_xxx...**"
+msgstr ""
+
+# a4b07f8af4e54fc4b398dfac4f308a0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:87
+msgid ""
+"**The namespace **smesh.smesh** does not exist any more, use **smesh** "
+"instead.** For instance: ::"
+msgstr ""
+
+# f954da1e12334a6996f1ea8471dc8332
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smesh_migration.rst:98
+msgid ""
+"**If you need to import a %SMESH Plugin explicitely, keep in mind that  "
+"they are now located in separate namespaces.**"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smeshpy_interface.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smeshpy_interface.po
new file mode 100644 (file)
index 0000000..d2b333e
--- /dev/null
@@ -0,0 +1,295 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 11:57+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7725fc981cc94de89acdccd2088f35a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:5
+msgid "Python interface"
+msgstr ""
+
+# e19368b7f7a34dc48db2569dae7e5291
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:7
+msgid ""
+"Python API of SALOME Mesh module defines several classes that can be used"
+" for easy mesh creation and edition."
+msgstr ""
+
+# 6be23d95e5a44e398692170febb6d4cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:10
+msgid "Documentation of SALOME %Mesh module Python API is available in two forms:"
+msgstr ""
+
+# 37a1e3ce35854a629095d7682fa27e60
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:12
+msgid ""
+":ref:`Structured documentation <modules_page>`, where all methods and "
+"classes are grouped by their functionality."
+msgstr ""
+
+# 03cd99fd95d94b309127b679dc6835d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:14
+msgid ""
+":ref:`Linear documentation <genindex>` grouped only by classes, declared "
+"in the :mod:`smeshBuilder` and :mod:`StdMeshersBuilder` Python packages."
+msgstr ""
+
+# d710e9461bdc4f45a0faeea434abc341
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:16
+msgid ""
+"With SALOME 7.2, the Python interface for Mesh has been slightly modified"
+" to offer new functionality."
+msgstr ""
+
+# 66861809e6df468f8a3fef6ee7fdb292
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:18
+msgid ""
+"You may have to modify your scripts generated with SALOME 6 or older "
+"versions."
+msgstr ""
+
+# 7b5fb1f27d7b4cf1b515f027b0b9cc15
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:20
+msgid "Please see :ref:`smesh_migration_page`."
+msgstr ""
+
+# c35f8f8a860c4f199edbe17f196b75d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:22
+msgid ""
+"Class :class:`smeshBuilder.smeshBuilder` provides an interface to create "
+"and handle meshes. It can be used to create an empty mesh or to import "
+"mesh from the data file."
+msgstr ""
+
+# 38a66953850d4e8cb67317feb8d3ff49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:25
+msgid ""
+"As soon as a mesh is created, it is possible to manage it via its own "
+"methods, described in class :class:`smeshBuilder.Mesh` documentation."
+msgstr ""
+
+# 65d27fa322db4233bb1d057c699932a6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:28
+msgid ""
+"Class :class:`smeshstudytools.SMeshStudyTools` provides several methods "
+"to manipulate mesh objects in Salome study."
+msgstr ""
+
+# ebfdbb9b5cb2423a80484d465b9bbda3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:30
+msgid "A usual workflow to generate a mesh on geometry is following:"
+msgstr ""
+
+# 7325e774da0e4d99bb2c0e18076b491e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:37
+msgid "Create an instance of :class:`smeshBuilder.smeshBuilder`:"
+msgstr ""
+
+# c9bb680e5d76433b8ddaa0121fc35150
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:39
+msgid "Create a :class:`smeshBuilder.Mesh` object:"
+msgstr ""
+
+# ee4c46ea575e486d88d054940aebcb2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:53
+msgid ""
+"Create and assign :ref:`basic_meshing_algos_page` by calling "
+"corresponding methods of the mesh. If a sub-shape is provided as an "
+"argument, a :ref:`constructing_submeshes_page` is implicitly created on "
+"this sub-shape:"
+msgstr ""
+
+# c618faa4367a4977a3ed8ad425e6702b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:62
+msgid ""
+"Create and assign :ref:`about_hypo_page` by calling corresponding methods"
+" of algorithms:"
+msgstr ""
+
+# d18d0e12f0b44249a6529df2d07ebf10
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:68
+msgid ":ref:`compute_anchor` the mesh (generate mesh nodes and elements):"
+msgstr ""
+
+# 99bd87d2643a4cb685770112da7f5f42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:70
+msgid ""
+"An easiest way to start with Python scripting is to do something in GUI "
+"and then to get a corresponding Python script via **File > Dump Study** "
+"menu item. Don't forget that you can get all methods of any object in "
+"hand (e.g. a mesh group or a hypothesis) by calling *dir()* Python built-"
+"in function."
+msgstr ""
+
+# 1e7aa4e79e8743afb20ebbf22a07fd3c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:76
+msgid ""
+"All methods of the Mesh Group can be found in "
+":ref:`tui_create_standalone_group` sample script."
+msgstr ""
+
+# a10ee356e3554a3d9df617d0b081f99c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:78
+msgid ""
+"An example below demonstrates usage of the Python API for 3d mesh "
+"generation and for retrieving information on mesh nodes and elements."
+msgstr ""
+
+# d35a364206ff45e99fea9dc0167a64ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:84
+msgid "Example of 3d mesh generation:"
+msgstr ""
+
+# 44c7b11cfd9c43b7a73072480ad32a85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:88
+msgid "``3dmesh.py``"
+msgstr ""
+
+# a942d88c2ed943c5a6cbedf59a34c248
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:95
+msgid ":download:`../../../examples/3dmesh.py`"
+msgstr ""
+
+# fe6fd0e0d01f4ae8817e4275e0562c37
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:97
+msgid ""
+"Examples of Python scripts for Mesh operations are available by the "
+"following links:"
+msgstr ""
+
+# a0fef6efd55c42c1bd33865cada37134
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:100
+msgid ":ref:`tui_creating_meshes_page`"
+msgstr ""
+
+# a028be6d0d634101ad9b80da9ad0991f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:101
+msgid ":ref:`tui_defining_hypotheses_page`"
+msgstr ""
+
+# 70b167a57c9a40d385efc613ea487e2b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:102
+msgid ":ref:`tui_grouping_elements_page`"
+msgstr ""
+
+# dd96f10655c4490c8837571a81eff790
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:103
+msgid ":ref:`tui_filters_page`"
+msgstr ""
+
+# 838f3d1c63fc4ee6b15b18bcf913d3f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:104
+msgid ":ref:`tui_modifying_meshes_page`"
+msgstr ""
+
+# b78563d5084e412a8f7069f85b629857
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:105
+msgid ":ref:`tui_transforming_meshes_page`"
+msgstr ""
+
+# 269060f5e2214b5ba0a890690f423ac2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:106
+msgid ":ref:`tui_viewing_meshes_page`"
+msgstr ""
+
+# 2014b65e70fa478ba342a7d0a68c9e1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:107
+msgid ":ref:`tui_quality_controls_page`"
+msgstr ""
+
+# 4b599a1a794e4a8db2491c54a4da91a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:108
+msgid ":ref:`tui_measurements_page`"
+msgstr ""
+
+# ed0c02dab98f4da19f0e54c062681f3f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:109
+msgid ":ref:`tui_work_on_objects_from_gui`"
+msgstr ""
+
+# e2883b7908054fdc94bad4f98b5fe582
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:110
+msgid ":ref:`tui_notebook_smesh_page`"
+msgstr ""
+
+# 1bd3f44f2ac4411c9288dc412be849c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:111
+msgid ":ref:`tui_cartesian_algo`"
+msgstr ""
+
+# 6b1a4810574845b99cd0c0e08edcbc87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:112
+msgid ":ref:`tui_use_existing_faces`"
+msgstr ""
+
+# cbb9ddbc6deb4a4b8919d92abf2cdda2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:113
+msgid ":ref:`tui_prism_3d_algo`"
+msgstr ""
+
+# a99f6683a95541dcb17ed36456920232
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smeshpy_interface.rst:114
+msgid ":ref:`tui_generate_flat_elements_page`"
+msgstr ""
+
+# b6db276b1c9f4b77a10b39c00717905a
+#~ msgid ""
+#~ "`Structured documentation <smeshpy_doc/modules.html>`_,"
+#~ " where all methods and classes are"
+#~ " grouped by their functionality."
+#~ msgstr ""
+
+# 3f32cff184674840aa9cce12b5775f27
+#~ msgid ""
+#~ "`Linear documentation <smeshpy_doc/namespaces.html>`_ "
+#~ "grouped only by classes, declared in "
+#~ "the :ref:`smeshBuilder` and :ref:`StdMeshersBuilder`"
+#~ " Python packages."
+#~ msgstr ""
+
+# dd7b4ac9c12b4d698a16d1bfb393ac8c
+#~ msgid ""
+#~ "Class :ref:`smeshBuilder.smeshBuilder` provides an"
+#~ " interface to create and handle "
+#~ "meshes. It can be used to create"
+#~ " an empty mesh or to import "
+#~ "mesh from the data file."
+#~ msgstr ""
+
+# c428e5aec6a94435a7a613fa1ec960c0
+#~ msgid ""
+#~ "As soon as a mesh is created, "
+#~ "it is possible to manage it via"
+#~ " its own methods, described in class"
+#~ " :ref:`smeshBuilder.Mesh` documentation."
+#~ msgstr ""
+
+# 4e0780af47564120b2a66ce3a8e5d8be
+#~ msgid ""
+#~ "Class :ref:`smeshstudytools.SMeshStudyTools` provides "
+#~ "several methods to manipulate mesh "
+#~ "objects in Salome study."
+#~ msgstr ""
+
+# fd6196348a2846818ded35ae61ab3a67
+#~ msgid "Create an instance of :ref:`smeshBuilder.smeshBuilder`:"
+#~ msgstr ""
+
+# 2fc22dfd6ae844e7863238ea9ace54cc
+#~ msgid "Create a :ref:`smeshBuilder.Mesh` object:"
+#~ msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smoothing.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smoothing.po
new file mode 100644 (file)
index 0000000..4860f73
--- /dev/null
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# cf863739826947af9d5afcf8234f8dbd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:5
+msgid "Smoothing"
+msgstr ""
+
+# bb7cd702e13844ddb03cec82ab9c100b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:7
+msgid ""
+"Smoothing is used to improve quality of 2D mesh by adjusting the "
+"locations of element corners (nodes)."
+msgstr ""
+
+# 13dc0622011041e4bab05ff7a8f83628
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:10
+msgid ""
+"Depending on the chosen method and mesh geometry the smoothing can "
+"actually decrease the quality of elements and even make some elements "
+"inverted."
+msgstr ""
+
+# 16a2487a3bc4496aa0ab9a6ece3c9708
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:12
+msgid "**To apply smoothing to the elements of your mesh:**"
+msgstr ""
+
+# 483fb050748343299fb6302f03c32beb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:14
+msgid ""
+"In the **Modification** menu select the **Smoothing** item or click "
+"**\"Smoothing\"** button in the toolbar."
+msgstr ""
+
+# 9f5239cae0c745a687cc6a9df2535e9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:22
+msgid "The following dialog will appear:"
+msgstr ""
+
+# 71738abf09644a5c82cd7d8bc4157584
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:27
+msgid "In this dialog:"
+msgstr ""
+
+# fd285577c524466ab2a0d6c4ec048d7b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:33
+msgid "specify the IDs of the elements which will be smoothed:"
+msgstr ""
+
+# 2a839824672a4e628e2494ffdf22edf0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:30
+msgid ""
+"**Select the whole mesh, sub-mesh or group** activating this   check-box;"
+" or"
+msgstr ""
+
+# f0bde8cde7414d89bc826ed96165beca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:31
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# e143ff5810be4cf996333aebbfb61219
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:32
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# d8b74c25572e46c0b1a245bb3282e830
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:33
+msgid ""
+"apply Filters. **Set filters** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`filtering_elements` page."
+msgstr ""
+
+# 03072e4c5f31457d9b4709773d6a4f4d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:35
+msgid ""
+"define the **Fixed nodes ids** that should remain at their location "
+"during smoothing. If a mesh is built on a shape, the nodes built on its "
+"geometric edges are always fixed. If the smoothing is applied to a part "
+"of the mesh (a set of element), the nodes on boundary of the element set "
+"are also fixed. It is possible to additionally fix any other nodes. The "
+"fixed nodes can be selected manually or by filters, just as the smoothed "
+"elements."
+msgstr ""
+
+# 8fcee8a4a93a42dfbcf0369b67d8daa6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:45
+msgid "choose the **Smoothing Method:**"
+msgstr ""
+
+# c8c7f9549e154d41a136e05719fd44a1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:37
+msgid ""
+"**Laplacian** smoothing pulls a node toward the center of surrounding "
+"nodes directly connected to that node along an element edge."
+msgstr ""
+
+# b65c9f617819483cb2778248de268827
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:38
+msgid ""
+"**Centroidal** smoothing pulls a node toward the element-area-weighted "
+"centroid of the surrounding elements."
+msgstr ""
+
+# afdcfbb427914c1c8807f923b9da1d6d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:40
+msgid ""
+"Laplacian method will produce the mesh with the least element edge "
+"length. It is also the fastest method. Centroidal smoothing produces a "
+"mesh with more uniform element sizes."
+msgstr ""
+
+# d8ab06f77d1b4e7898f1b48f5db2fb62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:47
+msgid ""
+"specify the **Iteration limit**. Both smoothing methods iterate through a"
+" number of steps to produce the resulting smoothed mesh. At each new step"
+" the smoothing is reevaluated with the updated nodal locations. This "
+"process continues till the limit of iterations has been exceeded, or till"
+" the aspect ratio of all element is less than or equal to the specified "
+"one."
+msgstr ""
+
+# ba154a3b732d4f2ebcb01a4656048055
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:48
+msgid ""
+"specify the  **Max. aspect ratio** - the target mesh quality at which the"
+" smoothing algorithm should stop the iterations."
+msgstr ""
+
+# db68d7b538f14d0a89465f7d3506878c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:49
+msgid ""
+"activate **in parametric space** check-box if it is necessary to improve "
+"the shape of faces in the parametric space of geometrical surfaces on "
+"which they are generated, else the shape of faces in the 3D space is "
+"improved that is suitable for **planar meshes only**."
+msgstr ""
+
+# 298db87c9f3143c4b46ed74e3792b3f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:51
+msgid "Click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# df70b0e55764480c960f71872ec503dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/smoothing.rst:66
+msgid "**See Also** a sample TUI Script of a :ref:`tui_smoothing` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_biquad_to_linear.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_biquad_to_linear.po
new file mode 100644 (file)
index 0000000..57f12ba
--- /dev/null
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d586796a73ed444e91fca369f1699c42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:5
+msgid "Split bi-quadratic into linear"
+msgstr ""
+
+# a79e0b1e063e46faa6f423c43a4aeaf7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:7
+msgid ""
+"This functionality allows to split bi-quadratic elements into linear ones"
+" without creation of additional nodes."
+msgstr ""
+
+# 4d26ed47efe84c3c9533d8445441be70
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:10
+msgid "So that"
+msgstr ""
+
+# 37150c27548e4b21a205806e6a919e44
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:12
+msgid "bi-quadratic triangle will be split into 3 linear quadrangles;"
+msgstr ""
+
+# 623375dedc9d4cdab7697d7cd9a3ae4d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:13
+msgid "bi-quadratic quadrangle will be split into 4 linear quadrangles;"
+msgstr ""
+
+# 53b082a4b9de48a39e252ed9b5a93567
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:14
+msgid "tri-quadratic hexahedron will be split into 8 linear hexahedra;"
+msgstr ""
+
+# ca05f179a444481ba31a54aa5c4b5b74
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:15
+msgid ""
+"quadratic segments adjacent to the split bi-quadratic element will be "
+"split into 2 liner segments."
+msgstr ""
+
+# 14a637e5ca384229857536f0a34c4720
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:23
+msgid "**To split bi-quadratic elements into linear:**"
+msgstr ""
+
+# bc78cab1ddad45aa81406b25c497ecd5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:25
+msgid ""
+"From the **Modification** menu choose the **Split bi-quadratic into "
+"linear** item or click **\"Split bi-quadratic into linear\"** button in "
+"the toolbar."
+msgstr ""
+
+# b11085bb6b954cff8ac5b193770c9e4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:33
+msgid "The following dialog box shall appear:"
+msgstr ""
+
+# cacf4180b5b64f73967f535192bf0b59
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:39
+msgid ""
+"Select a mesh, groups or sub-meshes in the Object Browser or in the "
+"Viewer."
+msgstr ""
+
+# 90bbda9e43704bd085035d1d0e65bcfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:40
+msgid "Click the **Apply** or **Apply and Close** button."
+msgstr ""
+
+# 5fe7f729cf444b5ea9d400310506ea7d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst:42
+msgid "**See Also** a sample TUI Script of a :ref:`tui_split_biquad` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_to_tetra.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_to_tetra.po
new file mode 100644 (file)
index 0000000..bb182de
--- /dev/null
@@ -0,0 +1,174 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 5ced8a22e99446e1929425f34c14a8bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:5
+msgid "Splitting volumes"
+msgstr ""
+
+# 161468ab01824a379f8f38c80bbcbfe8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:7
+msgid ""
+"This operation allows to split either any volumic elements into "
+"tetrahedra or hexahedra into prisms. 2D mesh is modified accordingly."
+msgstr ""
+
+# 3be3b131b4254a848b106c3cf7a8fe0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:10
+msgid "**To split volumes:**"
+msgstr ""
+
+# 9518d0279e39403996b11d7fb0592fa0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:12
+msgid "Select a mesh, a sub-mesh or a group."
+msgstr ""
+
+# 9a5a4b2dc7a54d8d8c02b9a77773857e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:13
+msgid ""
+"In the **Modification** menu select the **Split Volumes** item or click "
+"**\"Split Volumes\"** button in the toolbar."
+msgstr ""
+
+# fa9648623934432f8d6d7672ef4e1d12
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:21
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 532312c11d1d483e9ce1eaac09b67f24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:27
+msgid "First it is possible to select the type of operation:"
+msgstr ""
+
+# 8a298844755549faaebcafd5b4bfa0a6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:29
+msgid ""
+"If **Tetrahedron** button is checked, the operation will split volumes of"
+" any type into tetrahedra."
+msgstr ""
+
+# 188be37713044e6a916bff37d0175f52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:30
+msgid ""
+"If **Prism** button is checked, the operation will split hexahedra into "
+"prisms."
+msgstr ""
+
+# 3983a3aca6ed42d0a26e14b1eb9cd2ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:32
+msgid ""
+"The main list contains the list of volumes to split. You can click on a "
+"volume in the 3D viewer and it will be highlighted (lock Shiftkeyboard "
+"button to select several volumes). Click **Add** button and the ID of "
+"this volume will be added to the list. To remove the selected element or "
+"elements from the list click **Remove** button. **Sort list** button "
+"allows to sort the list of IDs. **Filter** button allows applying a "
+"filter to the selection of volumes."
+msgstr ""
+
+# 4e01a89b8a3f450b93f926f6a978920c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:32
+msgid ""
+"**Note:** If you split not all adjacent non-tetrahedral volumes, your "
+"mesh becomes non-conform."
+msgstr ""
+
+# c38851c3c8f040b79ca92f7ead84fdbc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:34
+msgid ""
+"**Apply to all** radio button allows splitting all volumes of the "
+"currently selected mesh."
+msgstr ""
+
+# 237dc4f1a004445090614c601e1dd507
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:35
+msgid ""
+"If **Tetrahedron** element type is selected, **Split hexahedron** group "
+"allows specifying the number of tetrahedra  a hexahedron will be split "
+"into. If the chosen method does not allow to get a conform mesh, a "
+"generic solution is applied: an additional node 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."
+msgstr ""
+
+# 35acacf4c9914c8a9e33abbb4a310ed7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:37
+msgid ""
+"If **Prism** element type is selected, the **Split hexahedron** group "
+"looks as follows:"
+msgstr ""
+
+# 2f1f7ea0b6ca43bc8ab8498ca5be93d9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:42
+msgid ""
+"**Into 2 (or 4) prisms** allows to specify the number of prisms a "
+"hexahedron will be split into."
+msgstr ""
+
+# f97d3214db0b40e098fa20434d79a41f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:43
+msgid ""
+"**Facet to split** group allows to specify the side (facet) of the "
+"hexahedron, which is split into triangles.  This facet is defined by a "
+"point and a direction. The algorithm finds a hexahedron closest to the "
+"specified point and splits a facet whose normal is closest to the "
+"specified direction. Then the splitting is propagated from that "
+"hexahedron to all adjacent hexahedra. The point and the direction by "
+"which the first split hexahedron is found can be specified:"
+msgstr ""
+
+# 2b05df53bb2f41c7b4feabdfdc3834b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:45
+msgid ""
+"by input of coordinates in **Hexa location** and **Facet normal** fields,"
+" or"
+msgstr ""
+
+# e7b249c8747f4ff88bd4cc7ccc471e19
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:46
+msgid ""
+"by clicking **Selection** button and selecting in the viewer the element "
+"whose barycenter will be used as the start point and whose direction will"
+" be used as a normal to facet to split into triangles. Switch this button"
+" off to return to selection of volumes to split."
+msgstr ""
+
+# c716df95dcc34b5bb724cfcff649cf15
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:49
+msgid ""
+"If **All domains** option is off, the operation stops when all hehexedra "
+"adjacent to the start hexahedron are split into prisms. Else the "
+"operation tries to continue splitting starting from  another hexahedron "
+"closest to the **Hexa location**."
+msgstr ""
+
+# 0c9bafdf99364a47b9d613fb3614babc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:51
+msgid ""
+"**Select from** set of fields allows choosing a sub-mesh or an existing "
+"group whose elements will be added to the list as you click **Add** "
+"button."
+msgstr ""
+
+# 35a61cc562064cf08d1071a0936d2e5f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/split_to_tetra.rst:54
+msgid "Click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/symmetry.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/symmetry.po
new file mode 100644 (file)
index 0000000..8b8bae5
--- /dev/null
@@ -0,0 +1,194 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4495625b73cb4025b5a466244ef3545c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:5
+msgid "Symmetry"
+msgstr ""
+
+# 4324e7ba74fe4f4e9a31f68950b412ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:7
+msgid ""
+"This geometrical operation allows to perform a symmetrical copy of your "
+"mesh or some of its elements."
+msgstr ""
+
+# 38426ec597c644cdb149162d515565e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:9
+msgid "**To create a symmetrical copy:**"
+msgstr ""
+
+# 90098b12a4484472b188b7c4b5d80f61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:11
+msgid ""
+"From the **Modification** menu choose **Transformation** -> **Symmetry** "
+"item  or click **\"Symmetry\"** button in the toolbar."
+msgstr ""
+
+# c2192cf2b3104e51b1ec178cfcc33eca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:19
+msgid "One of the following dialogs will appear:"
+msgstr ""
+
+# 6b97037715704d8b96de0d25714c7bd5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:21
+msgid "It is possible to mirror a mesh or some of its elements through:"
+msgstr ""
+
+# 16cbf169672d463aa4aff02bf6840d6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:43
+msgid "In the dialog:"
+msgstr ""
+
+# 89f61de1a46d49e08683ce60e41adf14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:45
+msgid "specify the elements for the symmetry operation:"
+msgstr ""
+
+# 84857591a5f14ff3b49d88767e9f3f70
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:47
+msgid "**Select the whole mesh, submesh or group** activating this checkbox; or"
+msgstr ""
+
+# 7350982923864549b09f2d934160d037
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:48
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# fc3c522656574fdc938cd8560bc79b70
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:49
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# 450994fc16c540168b6510532d3ade39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:50
+msgid ""
+"apply Filters. **Set Filter** button allows to apply a "
+":ref:`filtering_elements` to the selection of elements."
+msgstr ""
+
+# f12b0236f21043c497f5f21ab103c4b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:52
+msgid "depending on the nature of the mirror object:"
+msgstr ""
+
+# de42fe2fb04e4075b107992b4110df63
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:54
+msgid ""
+"if the mesh is mirrored through a point, specify the coordinates of the "
+"point, either directly or by picking a mesh node;"
+msgstr ""
+
+# 5215fb214ebd4fafb07b7c895edb6779
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:55
+msgid "if the mesh is mirrored through an axis:"
+msgstr ""
+
+# ca48af00155246339b411be28ecc179c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:57
+msgid ""
+"specify the coordinates of the start **Point** of the axis, either "
+"directly or by picking a mesh node;"
+msgstr ""
+
+# e36dc9065bda496aa51f61690433ebf6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:58
+msgid ""
+"specify the components of axis **Vector**, either directly or by picking "
+"a mesh node, in which case **Vector** is defined as a shift between the "
+"**Point** and the node;"
+msgstr ""
+
+# 222bbbf63b054017a6c41f559a50091e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:60
+msgid "if the mesh is mirrored through a plane:"
+msgstr ""
+
+# 18c4e2831a664228a6cc1cfbb08b828a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:62
+msgid ""
+"specify the cooordinates of the **Point** lying on the plane, either "
+"directly or by picking a mesh node;"
+msgstr ""
+
+# 9c1030fb3b694be2990ff40dc9342549
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:63
+msgid ""
+"specify the components of plane **Normal**, either directly or by picking"
+" a mesh node, in which case **Normal** is defined as a shift between the "
+"**Point** and the node."
+msgstr ""
+
+# fa13c8ac163b43b8b635749c980776a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:65
+msgid "specify the conditions of symmetry operation:"
+msgstr ""
+
+# 22cb4b2735b14e3586b6f6e9e7fd3eff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:67
+msgid ""
+"activate **Move elements** radio button to change the location of the "
+"selected elements within the current mesh;"
+msgstr ""
+
+# 3ab6e1c74a3f4f4e95f87d21771484d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:68
+msgid ""
+"activate **Copy elements** radio button to duplicate the selected "
+"elements at the new location within the current mesh;"
+msgstr ""
+
+# a591b9e839b84c9b9135eead5e85c774
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:69
+msgid ""
+"activate **Create as new mesh** radio button to create a new element in a"
+" new mesh; the new mesh appears in the Object Browser with the default "
+"name *MeshName_mirrored* (it is possible to change this name in the "
+"adjacent box);"
+msgstr ""
+
+# 5b254aa14c8f4a2381180807178f35e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:70
+msgid ""
+"activate **Copy groups** check-box to put new mesh entities into new "
+"groups if source entities belong to some groups. New groups are named by "
+"pattern \"<old group name>_mirrored\"."
+msgstr ""
+
+# b1eefa9952644c5fa320845ea76897c1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:72
+msgid ""
+"activate **Preview** check-box to show the result of transformation in "
+"the viewer;"
+msgstr ""
+
+# 0fd36d39dee749ae8096f328ed19a2c4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:73
+msgid "click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 9aa5cbd5e7e14b8c80772fb57302e4b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/symmetry.rst:76
+msgid "**See Also** a sample TUI Script of a :ref:`tui_symmetry` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/taper.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/taper.po
new file mode 100644 (file)
index 0000000..40c5433
--- /dev/null
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 1e9adeaeeb69425190fd407c57902106
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:5
+msgid "Taper"
+msgstr ""
+
+# acc7190b275949bdaf6613e0746e8768
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:7
+msgid ""
+"**Taper** mesh quality criterion represents the ratio of the areas of two"
+" triangles separated by a diagonal within a quadrilateral face."
+msgstr ""
+
+# 93b0ace8bda64797befdae8e2cdd5db3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:15
+msgid "**To apply the Taper quality criterion to your mesh:**"
+msgstr ""
+
+# a35ceea825514a66b121967bc551392d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:18
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# e6cd91a111394cf7b566db11dda7bdd4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:20
+msgid ""
+"Choose **Controls > Face Controls > Taper** or click **\"Taper\"** button"
+" in the toolbar."
+msgstr ""
+
+# 2677c0963ced4dde8c75b0f45a239179
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:28
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 2fadca0282f24f0a8b28aa8f8a523ec7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/taper.rst:33
+msgid "**See Also** a sample TUI Script of a :ref:`tui_taper` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tools.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tools.po
new file mode 100644 (file)
index 0000000..c6d0a56
--- /dev/null
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-30 11:57+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 56e312b0b9ca4fec801e76b102adbded
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:5
+msgid "Plugins"
+msgstr ""
+
+# 3869fe6e56ac4d7ca27466f43db495c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:7
+msgid "The following plugins are accessible via **Mesh > SMESH pligins** menu:"
+msgstr ""
+
+# 4f7e61b2f3fb48d49a67587f7d529251
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:9
+msgid "`SpherePadder plugin <padder/padder_userguide_page.html>`_"
+msgstr ""
+
+# f491ec8ce78e4bf3849a4ff917fed902
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:10
+msgid "`MGSurfOpt plugin <yams/index.html>`_"
+msgstr ""
+
+# 58834d6718ff41e28c03a8c81404df2b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:11
+msgid "`MGCleaner plugin <MGCleaner/index.html>`_"
+msgstr ""
+
+# 740188c95c2149328d0f10436c729bfa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:12
+msgid "`Z-cracks plugin <zcracks/index.html>`_"
+msgstr ""
+
+# 91996358c5b946a996f799f67137ba66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:13
+msgid "`MacMesh plugin <MacMesh/index.html>`_"
+msgstr ""
+
+# 68e16d5249224110896773bcf00e7d7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:14
+msgid "`blocFissure plugin <blocFissure/index.html>`_"
+msgstr ""
+
+# 83082468774a410fbb9c226c936030d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:15
+msgid ""
+"**MeshCut plugin** - allows to cut a mesh constituted of linear "
+"tetrahedrons by a plane."
+msgstr ""
+
+# 75fbba71f4824fa380aca3c52beceeb7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tools.rst:16
+msgid ""
+"**Get min or max value of control** - a sample plugin whose sources are "
+"located in **${GUI_ROOT_DIR}/share/salome/plugins/gui/demo** directory "
+"(files **minmax_plugin.py, minmax_ui.py and smesh_plugins.py**). You can "
+"find a detailed description of how to create your own plugin in "
+"documentation: **Help > User's Guide > GUI module > How-To's and Best "
+"Practices > Extend SALOME gui functions using python plugins**."
+msgstr ""
+
+# 4d26001be73042a6a7bb055871fa8cd1
+#~ msgid ""
+#~ "**Get min or max value of "
+#~ "control** - a sample plugin whose "
+#~ "sources are located in "
+#~ "**${GUI_ROOT_DIR}/share/salome/plugins/gui/demo** directory "
+#~ "(files **minmax_plugin.py, minmax_ui.py and "
+#~ "smesh_plugins.py**). You can find a "
+#~ "detailed description of how to create"
+#~ " your own plugin in documentation: "
+#~ "**Help > GUI module > User's Guide"
+#~ " > How-To's and Best Practices "
+#~ "> Extend SALOME gui functions using "
+#~ "python plugins**."
+#~ msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/translation.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/translation.po
new file mode 100644 (file)
index 0000000..98a8065
--- /dev/null
@@ -0,0 +1,164 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 75143c8f4ac24570b02ae570d98ebd8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:5
+msgid "Translation"
+msgstr ""
+
+# 93c59c012b8b4dbdb7476e2bdb1a779c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:7
+msgid ""
+"This geometrical operation allows to translate in space your mesh or some"
+" of its elements."
+msgstr ""
+
+# 06a73bd5a2034b8cb1083af72bad5396
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:10
+msgid "**To translate a mesh:**"
+msgstr ""
+
+# 0f9894f7613c48f8a356e21b4b772af9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:13
+msgid ""
+"From the **Modification** menu choose **Transformation** -> "
+"**Translation** item  or click **\"Translation\"** button in the toolbar."
+msgstr ""
+
+# b49ca4f6f8e349fa9400daf310f25a91
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:20
+msgid "One of the following dialogs will appear:"
+msgstr ""
+
+# 0d622382a5c244b79da86c37666a6bf1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:22
+msgid "It is possible to define the vector of thanslation:"
+msgstr ""
+
+# 7d2a29725e014f1bbd35da276cf2a0a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:40
+msgid "In the dialog:"
+msgstr ""
+
+# fc5fe749adf2467abb7947060196777a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:42
+msgid "specify the IDs of the translated elements:"
+msgstr ""
+
+# c3444551d6f94cef954e14b46145a9bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:44
+msgid "**Select the whole mesh, submesh or group** activating this checkbox; or"
+msgstr ""
+
+# d4d02adeac94491490a871185d70d5c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:45
+msgid ""
+"choose mesh elements with the mouse in the 3D Viewer. It is possible to "
+"select a whole area with a mouse frame; or"
+msgstr ""
+
+# 953b8e912c08437691eff171d251eb09
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:46
+msgid ""
+"input the element IDs directly in **ID Elements** field. The selected "
+"elements will be highlighted in the viewer; or"
+msgstr ""
+
+# 9456f6f145994a4bb8ae5a4a20c80315
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:47
+msgid ""
+"apply Filters. **Set filter** button allows to apply a filter to the "
+"selection of elements. See more about filters in the "
+":ref:`selection_filter_library_page` page."
+msgstr ""
+
+# 8dd408c797fa4ce4b919ecfa336780f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:49
+msgid "specify the vector of translation:"
+msgstr ""
+
+# 9e4ae19820a649ce9fb3cb41fdd7121d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:51
+msgid ""
+"specify the cooordinates of the start and end **Points** of the vector of"
+" translation; or"
+msgstr ""
+
+# 46e58c1328164c1b81199b513dbfdbe2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:52
+msgid ""
+"specify the end point of the **Vector** of rotation starting at the "
+"origin of coordinates."
+msgstr ""
+
+# 6b3b130a76d945a49e5fa53d4b66f3be
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:54
+msgid "specify the conditions of translation:"
+msgstr ""
+
+# cbed019014ff4141897955812061d1aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:56
+msgid ""
+"activate **Move elements** radio button to create  the source mesh (or "
+"elements) at the new location and erase it from the previous location;"
+msgstr ""
+
+# ecef7d6a928e4a8ca1b1547adfdecfa1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:57
+msgid ""
+"activate **Copy elements** radio button to create the source mesh (or "
+"elements) at the new location, but leave it at the previous location, the"
+" source mesh will be considered one and single mesh with the result of "
+"the rotation;"
+msgstr ""
+
+# d1597b6481b742289939aefe62ed456e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:58
+msgid ""
+"activate **Create as new mesh** radio button to leave the source mesh (or"
+" elements) at its previous location and create a new mesh at the new "
+"location, the new mesh appears in the Object Browser with the default "
+"name MeshName_rotated (it is possible to change this name in the adjacent"
+" box);"
+msgstr ""
+
+# c00a18b1722c4bc795fd8937fcb76b0c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:59
+msgid ""
+"activate **Copy groups** checkbox to copy the groups of elements of the "
+"source mesh to the newly created mesh."
+msgstr ""
+
+# 12be0e834c254830b6c24235bdeb8a5c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:61
+msgid ""
+"activate **Preview** checkbox to show the result of transformation in the"
+" viewer"
+msgstr ""
+
+# 24a911c5c6bd43339186c416b5c14a66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:62
+msgid "click **Apply** or **Apply and Close** button to confirm the operation."
+msgstr ""
+
+# 6059d279ae784f7e82d2450c6f3ece6e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/translation.rst:64
+msgid "**See Also** a sample TUI Script of a :ref:`tui_translation` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/transparency.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/transparency.po
new file mode 100644 (file)
index 0000000..66ad5fd
--- /dev/null
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 734d33d6daf841319c601b02886e6ad4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/transparency.rst:5
+msgid "Transparency"
+msgstr ""
+
+# e9d0a36f1b09490895f9636e2b95ec19
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/transparency.rst:10
+msgid ""
+"Using this slider you can set the transparency of shading. Absolutely "
+"transparent shading will be invisible. By default it is absolutely "
+"opaque."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_cartesian_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_cartesian_algo.po
new file mode 100644 (file)
index 0000000..614e24c
--- /dev/null
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 180ddd91e3f14cbb8f6d62fc133a1ea9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst:4
+msgid "Body Fitting algorithm"
+msgstr ""
+
+# 40444fa973b44a7882e66a58c21dcc98
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst:6
+msgid "Usage of Body Fitting algorithm"
+msgstr ""
+
+# dae7c3c0de1641d1942ce8c46b5c10fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst:10
+msgid "``cartesian_algo.py``"
+msgstr ""
+
+# e943416703384b49abd17b441a843bbe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_cartesian_algo.rst:16
+msgid ":download:`../../../examples/cartesian_algo.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_creating_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_creating_meshes.po
new file mode 100644 (file)
index 0000000..df01cf8
--- /dev/null
@@ -0,0 +1,179 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# ac7a0717f8d244518fa5fdabb38d07a5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:5
+msgid "Creating Meshes"
+msgstr ""
+
+# bb16f582ea84425180580fe14a31dc7e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# a6fa7546f4304831afd82d7d973db5ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:10
+msgid ""
+"First of all see :ref:`example_3d_mesh` which is an example of good "
+"python script style for Mesh module."
+msgstr ""
+
+# 10eb5418949b42d09800a5c5e5a60fea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:16
+msgid "Construction of a mesh"
+msgstr ""
+
+# 3f8be4bf1559421eb86a9ba1c944f985
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:21
+msgid "``creating_meshes_ex01.py``"
+msgstr ""
+
+# c92155e4983449c891131ed76749a221
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:27
+msgid ":download:`../../../examples/creating_meshes_ex01.py`"
+msgstr ""
+
+# 0b8281da12364d20bd26c2ff83899a71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:32
+msgid "Construction of a sub-mesh"
+msgstr ""
+
+# 908b408a0c6d408f9cbebfbdad49d29c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:36
+msgid "``creating_meshes_ex02.py``"
+msgstr ""
+
+# 71d9105b47334a78a9a0db0fb8e468d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:42
+msgid ":download:`../../../examples/creating_meshes_ex02.py`"
+msgstr ""
+
+# 374235b8f4c349c0a0f884e508cff43b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:47
+msgid "Change priority of sub-meshes in mesh"
+msgstr ""
+
+# 899cddf7981f4888bf1929dc3d285162
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:51
+msgid "``creating_meshes_ex03.py``"
+msgstr ""
+
+# 2fbbf9873faa407093dd86037f815dda
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:57
+msgid ":download:`../../../examples/creating_meshes_ex03.py`"
+msgstr ""
+
+# ac6d03ebb48e4fb69088a0271120f6bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:62
+msgid "Intermediate edition while meshing"
+msgstr ""
+
+# 480c7f03907e45608baf3c8e69f43cee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:66
+msgid "``a3DmeshOnModified2Dmesh.py``"
+msgstr ""
+
+# 5cc05800014640b28dd743f6e7453555
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:72
+msgid ":download:`../../../examples/a3DmeshOnModified2Dmesh.py`"
+msgstr ""
+
+# e8ad1f4ee33c4d479cb915a35b3c3db7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:77
+msgid "Editing a mesh (i.e. changing hypotheses)"
+msgstr ""
+
+# 0c9b1c653fbe47c8b09369d8538b5d39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:81
+msgid "``creating_meshes_ex04.py``"
+msgstr ""
+
+# 61662db532d5409ca59109471d35c39b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:87
+msgid ":download:`../../../examples/creating_meshes_ex04.py`"
+msgstr ""
+
+# 039432eb7ae9487d8963efc909074762
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:92
+msgid "Export of a Mesh"
+msgstr ""
+
+# 74bc2143ea7a4a4fb94f0a1467012412
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:96
+msgid "``creating_meshes_ex05.py``"
+msgstr ""
+
+# c22c9248148a406aa90e16b4494dcdf3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:102
+msgid ":download:`../../../examples/creating_meshes_ex05.py`"
+msgstr ""
+
+# fed234c83c27471b9051943f5378ca7e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:107
+msgid "How to mesh a cylinder with hexahedrons?"
+msgstr ""
+
+# 8d943c45953b4d419189795e070d3273
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:109
+msgid ""
+"Here you can see an example of python script, creating a hexahedral mesh "
+"on a cylinder. A picture below the source code of the script demonstrates"
+" the resulting mesh."
+msgstr ""
+
+# 2c383dd4995a48fdaf36d733606a42bc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:115
+msgid "``creating_meshes_ex06.py``"
+msgstr ""
+
+# 234f1450fee5488e965a8d6af376ff9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:121
+msgid ":download:`../../../examples/creating_meshes_ex06.py`"
+msgstr ""
+
+# 72c01e65c6b84985a2f7548177ef0311
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:130
+msgid "Building a compound of meshes"
+msgstr ""
+
+# 3ff8a1b66bb64251836650a5b055e884
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:134
+msgid "``creating_meshes_ex07.py``"
+msgstr ""
+
+# a3219b112b1e4381acb12a727c6bce58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:140
+msgid ":download:`../../../examples/creating_meshes_ex07.py`"
+msgstr ""
+
+# 4178a3e999b946abacb53ffa58e450c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:145
+msgid "Mesh Copying"
+msgstr ""
+
+# 3d65fb2f3e2740c8b97c371fd2a6e051
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:149
+msgid "``creating_meshes_ex08.py``"
+msgstr ""
+
+# d7f57c79ef0f45ae9325384ff3226f49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.rst:155
+msgid ":download:`../../../examples/creating_meshes_ex08.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po
new file mode 100644 (file)
index 0000000..bbf304e
--- /dev/null
@@ -0,0 +1,411 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# fef0008953ff493596317de50d9af198
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:5
+msgid "Defining Hypotheses and Algorithms"
+msgstr ""
+
+# c2761b3cd6e847e284c642207a9dbae4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:7
+msgid ""
+"This page provides example codes of :ref:`tui_defining_meshing_algos` "
+"\"defining algorithms\" and hypotheses."
+msgstr ""
+
+# c9e1c1c60edb4751a3db653b97a21c87
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:10
+msgid "Wire discretisation 1D algorithm"
+msgstr ""
+
+# 344303a5cba04a3985a3355bbe1d6e38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:12
+msgid ":ref:`tui_1d_adaptive` hypothesis"
+msgstr ""
+
+# 1035ff9af9b8425a8c48f39ac5e2ce00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:13
+msgid ":ref:`tui_1d_arithmetic` hypothesis"
+msgstr ""
+
+# 4b851dd0ec06429d8e0a533db3975b81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:14
+msgid ":ref:`tui_deflection_1d` hypotheses"
+msgstr ""
+
+# c27b16f572ff4412b14a330c42389c1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:15
+msgid ":ref:`tui_start_and_end_length` hypotheses"
+msgstr ""
+
+# ed963d98d21b4aefaf2bda832c09bd0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:16
+msgid ":ref:`tui_average_length`"
+msgstr ""
+
+# 748167c82d78473ea526f4e8d8c2d3ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:17
+msgid ":ref:`tui_propagation` additional hypothesis"
+msgstr ""
+
+# 29d0006192824915a840be1e7d8ae177
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:18
+msgid ":ref:`tui_fixed_points` hypothesis"
+msgstr ""
+
+# 65a07e23b54b4b28a44b18cee2f6eb18
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:21
+msgid "Triangle: Mefisto 2D algorithm"
+msgstr ""
+
+# 88b6fff7e253450eb7ea36fb2fe5445d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:23
+msgid ":ref:`tui_max_element_area` hypothesis"
+msgstr ""
+
+# 9660d4c455c8431995e1af311aed3eff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:24
+msgid ":ref:`tui_length_from_edges` hypothesis"
+msgstr ""
+
+# 286dfd3e3ac64755bf7c7f8352d83af0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:27
+msgid "NETGEN 3D algorithm"
+msgstr ""
+
+# ea8cdcd73ac04ef382c07aeb47336de2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:29
+msgid ":ref:`tui_max_element_volume` hypothesis"
+msgstr ""
+
+# 97b45786031b4464b8e918b006ed31a3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:30
+msgid ":ref:`tui_viscous_layers`"
+msgstr ""
+
+# d3fa46618ba3491182a63f8f3e36991d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:33
+msgid ":ref:`tui_projection`"
+msgstr ""
+
+# e2a68a4edf124db7ab3fdc6cb0f2fd9e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:34
+msgid ":ref:`tui_radial_quadrangle` algorithm"
+msgstr ""
+
+# ee80908dfbfb41cf9a458f3a733b3b9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:35
+msgid "Quadrangle: Mapping 2D algorithm"
+msgstr ""
+
+# eb5627bfc52d4e7ea8ed4b488b5ff940
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:37
+msgid ":ref:`tui_quadrangle_parameters` hypothesis"
+msgstr ""
+
+# 7ba0bfac54614d77bb0afac0d3886ae8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:40
+msgid ":ref:`tui_import` from Another Mesh\" algorithm"
+msgstr ""
+
+# 9135b65a44554235a1fb725ebbd7e9b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:45
+msgid "Defining 1D Hypotheses"
+msgstr ""
+
+# d379efca0bc04b01a9f0d9aa9cc26361
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:52
+msgid "Arithmetic Progression and Geometric Progression"
+msgstr ""
+
+# 2ea89443e3804bc5913ae6a42272dbef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:56
+msgid "``defining_hypotheses_ex01.py``"
+msgstr ""
+
+# 8c40e54d62834623b01e282b9b4f53aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:62
+msgid ":download:`../../../examples/defining_hypotheses_ex01.py`"
+msgstr ""
+
+# 865233d5ffe541189bcf7f275e045c6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:67
+msgid "Adaptive"
+msgstr ""
+
+# 52d08d7e4014430eaa0126397b6304fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:71
+msgid "``defining_hypotheses_adaptive1d.py``"
+msgstr ""
+
+# 32df2bbad47248d1a27591bbfdb558f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:77
+msgid ":download:`../../../examples/defining_hypotheses_adaptive1d.py`"
+msgstr ""
+
+# 4fc2284ef7bd47729a90b2baa918b58f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:83
+msgid "Deflection and Number of Segments"
+msgstr ""
+
+# 3457de0a170e4f51b5a38950cb33a7d6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:87
+msgid "``defining_hypotheses_ex02.py``"
+msgstr ""
+
+# fbf4cb07dde24d8d902b4411cd68adca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:93
+msgid ":download:`../../../examples/defining_hypotheses_ex02.py`"
+msgstr ""
+
+# 4133a0078c2947e98e1a23eaa1214723
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:99
+msgid "Start and End Length"
+msgstr ""
+
+# 1d6528b2e1674de2ba414b87b4be3089
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:103
+msgid "``defining_hypotheses_ex03.py``"
+msgstr ""
+
+# 30db29e648d244e2a8132ff959c7e407
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:109
+msgid ":download:`../../../examples/defining_hypotheses_ex03.py`"
+msgstr ""
+
+# d8ffb18c8207454eb0e4c8dee64df112
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:115
+msgid "Local Length"
+msgstr ""
+
+# 598f4c31b8574891a0965e55e70866c6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:119
+msgid "``defining_hypotheses_ex04.py``"
+msgstr ""
+
+# a0766eac8a974673842c45660f8cdef5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:125
+msgid ":download:`../../../examples/defining_hypotheses_ex04.py`"
+msgstr ""
+
+# 0e8b365ab8ab4d8fb15e5d2ea9b405b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:128
+msgid "Defining 2D and 3D hypotheses"
+msgstr ""
+
+# 89800fec137147feb01f7d9ee2d09b2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:134
+msgid "Maximum Element Area"
+msgstr ""
+
+# 5d20cdabae6d4f7785dfd0505ff8bd0e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:138
+msgid "``defining_hypotheses_ex05.py``"
+msgstr ""
+
+# d65f02a1247c4ad5b511199a2224afea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:144
+msgid ":download:`../../../examples/defining_hypotheses_ex05.py`"
+msgstr ""
+
+# aed2c2c8c4534e8ba031bbb04c0b1c1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:150
+msgid "Maximum Element Volume"
+msgstr ""
+
+# a99e22f6a36f465f92b39f281cb5374d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:154
+msgid "``defining_hypotheses_ex06.py``"
+msgstr ""
+
+# deda9ab5387443659f0e9560218d1715
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:160
+msgid ":download:`../../../examples/defining_hypotheses_ex06.py`"
+msgstr ""
+
+# a65055b4628340938008c65a533013ef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:166
+msgid "Length from Edges"
+msgstr ""
+
+# 6de5dfa06ff54c19a898663e34448044
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:170
+msgid "``defining_hypotheses_ex07.py``"
+msgstr ""
+
+# 4c857ba35cdf4cf8a1124e7ec6156cba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:176
+msgid ":download:`../../../examples/defining_hypotheses_ex07.py`"
+msgstr ""
+
+# 1b5eeb8e22c6416e97c9f0d5603ab0a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:179
+msgid "Defining Additional Hypotheses"
+msgstr ""
+
+# d7e5a198618a4d81842e05f5dc7a0d9a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:184
+msgid "Propagation"
+msgstr ""
+
+# e5fa3c56469742528a05851b980f65c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:188
+msgid "``defining_hypotheses_ex08.py``"
+msgstr ""
+
+# 3250b509d75a4ee89b947cc9028a59d3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:194
+msgid ":download:`../../../examples/defining_hypotheses_ex08.py`"
+msgstr ""
+
+# eb1e47f19f8544ffb91f05b2af1ee246
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:200
+msgid "Defining Meshing Algorithms"
+msgstr ""
+
+# beb05965953640b2a8e7be99a2011ae7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:204
+msgid "``defining_hypotheses_ex09.py``"
+msgstr ""
+
+# ce043d0aabab4e09bfae6e5f93bc499f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:210
+msgid ":download:`../../../examples/defining_hypotheses_ex09.py`"
+msgstr ""
+
+# f908d90100b342378143b7fb5a37cbde
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:216
+msgid "Projection Algorithms"
+msgstr ""
+
+# 0165bd13c2354adb88815bc8bc4f8f55
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:220
+msgid "``defining_hypotheses_ex10.py``"
+msgstr ""
+
+# 5a0fd55a3dfe46fa849ddcb9f6e9e947
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:226
+msgid ":download:`../../../examples/defining_hypotheses_ex10.py`"
+msgstr ""
+
+# ec37fa753ca144bc8cc78a6a23dabe49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:229
+msgid "Projection 1D2D"
+msgstr ""
+
+# d73ecba8b9a14a23905217b1b85639e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:233
+msgid "``defining_hypotheses_ex11.py``"
+msgstr ""
+
+# 67392b0373064c3987a2ba0589613aec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:239
+msgid ":download:`../../../examples/defining_hypotheses_ex11.py`"
+msgstr ""
+
+# c1aae1e4269641deab1b0c442e86a486
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:244
+msgid "1D Mesh with Fixed Points example"
+msgstr ""
+
+# 42cc5b76354244dda062e9ab67178fba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:248
+msgid "``defining_hypotheses_ex12.py``"
+msgstr ""
+
+# 0494d3054fa84ccbbdadaab71ab49c9c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:254
+msgid ":download:`../../../examples/defining_hypotheses_ex12.py`"
+msgstr ""
+
+# b5bf09c0c65441a5b649a8b4f872e4f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:259
+msgid "Radial Quadrangle 1D-2D example"
+msgstr ""
+
+# e11dc47febb3451eae79505194a3b470
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:263
+msgid "``defining_hypotheses_ex13.py``"
+msgstr ""
+
+# e2042fb6379647289d81b952790fa19f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:269
+msgid ":download:`../../../examples/defining_hypotheses_ex13.py`"
+msgstr ""
+
+# a64deb7c4c0f4b1d85c9ab9698dffe82
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:274
+msgid "Quadrangle Parameters example 1 (meshing a face with 3 edges)"
+msgstr ""
+
+# 43383104800842d8bf7f3410cdac69e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:278
+msgid "``defining_hypotheses_ex14.py``"
+msgstr ""
+
+# 8d1842c107224648a84e981c6f1fc2a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:284
+msgid ":download:`../../../examples/defining_hypotheses_ex14.py`"
+msgstr ""
+
+# 74a27c17676d434a8c3d25ac9796ade7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:287
+msgid "Quadrangle Parameters example 2 (using different types)"
+msgstr ""
+
+# e5ff359d6f554d7f941d66fb203ec978
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:291
+msgid "``defining_hypotheses_ex15.py``"
+msgstr ""
+
+# 7c928ac31c924ffda50887b7dcd566c3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:297
+msgid ":download:`../../../examples/defining_hypotheses_ex15.py`"
+msgstr ""
+
+# f1274f94ecca401fbaa85dab2a3b6be9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:302
+msgid "\"Import 1D-2D Elements from Another Mesh\" example"
+msgstr ""
+
+# 5fdf903d6e714f6786bee45b22031939
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:306
+msgid "``defining_hypotheses_ex16.py``"
+msgstr ""
+
+# 8ecaa3f528ed4bec820d5b01fc54a9e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:312
+msgid ":download:`../../../examples/defining_hypotheses_ex16.py`"
+msgstr ""
+
+# 38475312a47b409d884787b40e75f9bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:317
+msgid "Viscous layers construction"
+msgstr ""
+
+# 96c7c221e83c4d5092d4b663d1440e03
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:321
+msgid "``defining_hypotheses_ex17.py``"
+msgstr ""
+
+# 5101a4bf06ca4c6aa3d7738ab9890209
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst:327
+msgid ":download:`../../../examples/defining_hypotheses_ex17.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_filters.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_filters.po
new file mode 100644 (file)
index 0000000..40d486c
--- /dev/null
@@ -0,0 +1,1577 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 6ca951476443456f8f3880c62a0a3c8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:5
+msgid "Filters usage"
+msgstr ""
+
+# b497f51ac2e744ada5e94e44ea032ab8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# 5b11e27703fe49299f1424246527c350
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:10
+msgid ""
+"Filters allow picking only the mesh elements satisfying to a specific "
+"condition or a set of conditions. Filters can be used to create or edit "
+"mesh groups, remove elements from the mesh, control mesh quality by "
+"different parameters, etc."
+msgstr ""
+
+# e0bc747ec8da48b498263ccbc83aea2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:15
+msgid ""
+"Several filtering criteria can be combined together by using logical "
+"operators *AND* and *OR*. In addition, a filtering criterion can be "
+"reverted using logical operator *NOT*."
+msgstr ""
+
+# 252f6d38a089402f8870fb587d649fe4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:19
+msgid ""
+"Mesh filters can use the functionality of mesh quality controls to filter"
+" mesh nodes / elements by a specific characteristic (Area, Length, etc)."
+msgstr ""
+
+# 4bab7008da41451aa32b5e9c0fedda93
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:22
+msgid ""
+"This page provides a short description of the existing mesh filters, "
+"describes required parameters and gives simple examples of usage in "
+"Python scripts."
+msgstr ""
+
+# 9549e327926346be95fd0a0740aeb814
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:26
+msgid "**See also:** :ref:`tui_quality_controls_page`"
+msgstr ""
+
+# e3200c2af4e64ea79cb73645409035f6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:31
+msgid "Aspect ratio"
+msgstr ""
+
+# 7933273bcee34279b9f5c23f545455a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:33
+msgid "filters 2D mesh elements (faces) according to the aspect ratio value:"
+msgstr ""
+
+# 7bdea22213bd49979ac671a12bc01fc6
+# 315c940ad9d44d51a586fe19e5783e5f
+# 282c2320af254ed68bfcaa04f54771e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:35
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:517
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:541
+msgid "element type should be *SMESH.FACE*"
+msgstr ""
+
+# a91ead07432b4570a3b88ea82b3ccd83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:36
+msgid "functor type should be *SMESH.FT_AspectRatio*"
+msgstr ""
+
+# 57bf0db5058247b8a8eedccb86171c4a
+# 11e43f1100c84460bd311554d4a95b16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:37
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:60
+msgid "threshold is floating point value (aspect ratio)"
+msgstr ""
+
+# f571f009ac874dcf9ff3976f641fc0cd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:41
+msgid "``filters_ex01.py``"
+msgstr ""
+
+# 50cae771732940f3a948cae60b00caa4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:47
+msgid ":download:`../../../examples/filters_ex01.py`"
+msgstr ""
+
+# 89c85d23e6544b14aa115155b2230539
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:49
+msgid "**See also:** :ref:`tui_aspect_ratio`"
+msgstr ""
+
+# b613da0f68ea497bb460a190c334bc3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:54
+msgid "Aspect ratio 3D"
+msgstr ""
+
+# a0fd9e8c8f6c45899712fcb3c99ce8f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:56
+msgid "filters 3D mesh elements (volumes) according to the aspect ratio value:"
+msgstr ""
+
+# 7157bf5105b84a76982cddd8a2c0a4ab
+# b8f362a3c24e4761a2cf9999d83ea9f3
+# 31b4fe2b41704fd5bc5a385067db9e78
+# 9d87b96ae99e4b51980739aed794db4d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:196
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:589
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:612
+msgid "element type is *SMESH.VOLUME*"
+msgstr ""
+
+# 0c73594aeb55424d95b8ad4945bd4f09
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:59
+msgid "functor type is *SMESH.FT_AspectRatio3D*"
+msgstr ""
+
+# 522e2237e63b48399da257368c2c1728
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:64
+msgid "``filters_ex02.py``"
+msgstr ""
+
+# 0dbfae0c9a3e4107a32e15caa90218c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:70
+msgid ":download:`../../../examples/filters_ex02.py`"
+msgstr ""
+
+# 93d6b45e533b49b7b25920014913d357
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:72
+msgid "**See also:** :ref:`tui_aspect_ratio_3d`"
+msgstr ""
+
+# ad8dae4703b04b6d9b54cb4174fe1ea0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:77
+msgid "Warping angle"
+msgstr ""
+
+# 487244067e0e4fbdb26701af49d9c47f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:79
+msgid "filters 2D mesh elements (faces) according to the warping angle value:"
+msgstr ""
+
+# ea3fae8352804a6c9dff4256c1b5c3d5
+# 5f7d1caffb734812b2489f8b0f9874a7
+# 3ff9306930c94205899b68c81cb68a33
+# 01f71c0f788f4737a10d59b1b155122b
+# f526cf45f23f4b23ab4fcf1785c719e0
+# 57a8ff64de584ce684970c5b2e110550
+# e0348a80ef09411fa943281c43c43d58
+# c670276d09b04b02a8f346e861c982ac
+# a7d2a29605fe4488bafd3e18fed928f0
+# df800954efdf45c2962686f8d62f38ef
+# 7925fed78391415a8fb3e536fc284d25
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:81
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:104
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:127
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:150
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:173
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:244
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:290
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:313
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:336
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:358
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:470
+msgid "element type is *SMESH.FACE*"
+msgstr ""
+
+# 35766a5cfda04256a609ed3b3c818bef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:82
+msgid "functor type is *SMESH.FT_Warping*"
+msgstr ""
+
+# 0d1fd590ed0840c9b23f6fa7839d773b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:83
+msgid "threshold is floating point value (warping angle)"
+msgstr ""
+
+# 004ca3b2bbf24d60ae62b81c7f56ab2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:87
+msgid "``filters_ex03.py``"
+msgstr ""
+
+# 98c70343810f4ffda5ac63a4adadabb0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:93
+msgid ":download:`../../../examples/filters_ex03.py`"
+msgstr ""
+
+# 096ee5252671498a957276fda40ab6df
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:95
+msgid "**See also:** :ref:`tui_warping`"
+msgstr ""
+
+# 6bb026f1fa054c4fb01951646c854ad4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:100
+msgid "Minimum angle"
+msgstr ""
+
+# 12caf452968a41058b0a85334dca77c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:102
+msgid "filters 2D mesh elements (faces) according to the minimum angle value:"
+msgstr ""
+
+# 720cf4ef2ef64adfa76d7af6cc574455
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:105
+msgid "functor type is *SMESH.FT_MinimumAngle*"
+msgstr ""
+
+# f4c4e75ef6cc4748a3e967bf82ffe65b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:106
+msgid "threshold is floating point value (minimum angle)"
+msgstr ""
+
+# c419c4f2e6db46c28322c514d3ffdecc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:110
+msgid "``filters_ex04.py``"
+msgstr ""
+
+# d8683a622c644acbbe1ac0779a234e72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:116
+msgid ":download:`../../../examples/filters_ex04.py`"
+msgstr ""
+
+# 79a773fc6c344aeca7633a1f11f7716e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:118
+msgid "**See also:** :ref:`tui_minimum_angle`"
+msgstr ""
+
+# 01e6e22f05ed417e8158d9f3ab0cc84a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:123
+msgid "Taper"
+msgstr ""
+
+# 55b300370c5d463db3e8bd3a4f412723
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:125
+msgid "filters 2D mesh elements (faces) according to the taper value:"
+msgstr ""
+
+# 2710fe0fb6c3489e93a69fa9d157176e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:128
+msgid "functor type is *SMESH.FT_Taper*"
+msgstr ""
+
+# ecc2c01f7dc84c1297ebb52d520cd00d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:129
+msgid "threshold is floating point value (taper)"
+msgstr ""
+
+# fda49acd55914c17993e58c4b6c86d60
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:133
+msgid "``filters_ex05.py``"
+msgstr ""
+
+# c52b74a578934750acacfeac670e83d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:139
+msgid ":download:`../../../examples/filters_ex05.py`"
+msgstr ""
+
+# e8d1a6468c374732ba982b3039bc7aa7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:141
+msgid "**See also:** :ref:`tui_taper`"
+msgstr ""
+
+# e99e7aade16a49ee90a394ffc8ecc11d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:146
+msgid "Skew"
+msgstr ""
+
+# 362bfcb5a4574d0da125316db6306b45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:148
+msgid "filters 2D mesh elements (faces) according to the skew value:"
+msgstr ""
+
+# d7669106a6c548629952804e7902dc47
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:151
+msgid "functor type is *SMESH.FT_Skew*"
+msgstr ""
+
+# 1ad14dace2c24e1fa614a6f0ab98f33a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:152
+msgid "threshold is floating point value (skew)"
+msgstr ""
+
+# 5a2f0b7c68364a7399af945295cfd5ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:156
+msgid "``filters_ex06.py``"
+msgstr ""
+
+# f6507f1b8ffe4d07b8efc9f3aff79283
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:162
+msgid ":download:`../../../examples/filters_ex06.py`"
+msgstr ""
+
+# e3f2245ebcc443bc9b6d9326cb311850
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:164
+msgid "**See also:** :ref:`tui_skew`"
+msgstr ""
+
+# 2a35872abb8f42229f207c2f0dac79b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:169
+msgid "Area"
+msgstr ""
+
+# fab468da32da4d078bbf686165f82fc2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:171
+msgid "filters 2D mesh elements (faces) according to the area value:"
+msgstr ""
+
+# 2c48b772ad4440f38e8e6a54af90e6d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:174
+msgid "functor type is *SMESH.FT_Area*"
+msgstr ""
+
+# bcb070ddf7ed430288115a64f9997b8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:175
+msgid "threshold is floating point value (area)"
+msgstr ""
+
+# e5a829774bc0473aa6157465224e97d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:179
+msgid "``filters_ex07.py``"
+msgstr ""
+
+# 5e7b469c380f4b129cd61caacc510eaf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:185
+msgid ":download:`../../../examples/filters_ex07.py`"
+msgstr ""
+
+# 71d104b1a39f4541aac4a1f19afaad04
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:187
+msgid "**See also:** :ref:`tui_area`"
+msgstr ""
+
+# cade3174d4af4661a13f4034c642437a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:192
+msgid "Volume"
+msgstr ""
+
+# d3d522fdc8e74ec7815ad2af86cbfccd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:194
+msgid "filters 3D mesh elements (volumes) according to the volume value:"
+msgstr ""
+
+# f0e481836c9345318bbf2d09ad29778b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:197
+msgid "functor type is *SMESH.FT_Volume3D*"
+msgstr ""
+
+# 8fc470a5a2d04d49b98b004fef8a6f85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:198
+msgid "threshold is floating point value (volume)"
+msgstr ""
+
+# a4cb688e843e46bea2e5092bbcbd39d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:202
+msgid "``filters_ex08.py``"
+msgstr ""
+
+# c90d29137bcf4f38b87894b7a44692ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:208
+msgid ":download:`../../../examples/filters_ex08.py`"
+msgstr ""
+
+# a9f5d2a508574991a8fd2b506998e84a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:210
+msgid "**See also:** :ref:`tui_volume`"
+msgstr ""
+
+# 5e8dc7ece6ff41df86277f56a80a82dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:215
+msgid "Free borders"
+msgstr ""
+
+# 80900b5870aa4feba0c22b82fff23d4a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:217
+msgid "filters 1D mesh elements (edges) which represent free borders of a mesh:"
+msgstr ""
+
+# c3b1a9b2652e416b8cb61e1485715f47
+# 6babd52bda944e25a8e911bf597caa2b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:219
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:446
+msgid "element type is *SMESH.EDGE*"
+msgstr ""
+
+# 6c7f9d52b7b848da9f6a5eaf5c43ef83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:220
+msgid "functor type is *SMESH.FT_FreeBorders*"
+msgstr ""
+
+# b678157785b5496692aa2c3757dc41f9
+# 3e857b3cfa0f4ba4a93135d75c8e35ab
+# 0058ac055ebf4477828a3ac73037138d
+# d6588539972d48c6a80d7533b78578fc
+# 1adda2caff484444983aae369225952e
+# f20fabd0064a4978a871320e2b1d52fe
+# 9d17cff2bf2d4b68b714bb7e95b3ea37
+# 685e6790bb1143d1b3b9d241c632d554
+# f5741f2df7984f2090b050d30258c8d9
+# 1bdb459f82f943b1b7749308a8d84203
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:221
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:246
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:269
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:292
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:315
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:360
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:383
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:404
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:591
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:614
+msgid "threshold value is not required"
+msgstr ""
+
+# 5faf43e863384018bfe5c63414e66d1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:223
+msgid "\\tui_script{filters_ex09.py} .. _filters_ex09.py:"
+msgstr ""
+
+# 169a801dbe544ac2bb5b4ade4efc45a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:226
+msgid "``filters_ex09.py``"
+msgstr ""
+
+# 341442284c1e4e3f885f0d56b018d203
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:232
+msgid ":download:`../../../examples/filters_ex09.py`"
+msgstr ""
+
+# bb207a082f9c4ee2a85f364ae2c2c94a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:234
+msgid "**See also:** :ref:`tui_free_borders`"
+msgstr ""
+
+# c9acd5a0711146928be8dbd50d27d356
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:239
+msgid "Free edges"
+msgstr ""
+
+# e5319ce3c769424f9ab0b76e513bf5c2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:241
+msgid ""
+"filters 2D mesh elements (faces) having edges (i.e. links between nodes, "
+"not mesh segments) belonging to one face of mesh only:"
+msgstr ""
+
+# 59bbe7f428b8421e821854d837b11a4c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:245
+msgid "functor type is *SMESH.FT_FreeEdges*"
+msgstr ""
+
+# a541e40fb6ed4488b22dde5479931636
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:250
+msgid "``filters_ex10.py``"
+msgstr ""
+
+# 5fd5f86ef549410783987f8653f9808a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:256
+msgid ":download:`../../../examples/filters_ex10.py`"
+msgstr ""
+
+# 855a63570fdf4a54bbfd34b5adcb2b9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:258
+msgid "**See also:** :ref:`tui_free_edges`"
+msgstr ""
+
+# c131072177fe4d0fbccc2584c215bbef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:263
+msgid "Free nodes"
+msgstr ""
+
+# 0bdfce2a625649c39519a5fd49c01534
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:265
+msgid "filters free nodes:"
+msgstr ""
+
+# 3fe1ac2505b544e5992cd65ca6646583
+# 6ab61788929f46b5a1de4bc89a95b44c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:267
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:402
+msgid "element type is *SMESH.NODE*"
+msgstr ""
+
+# b34ecab8f7644b4abd6d5eb7aa534c7f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:268
+msgid "functor type is *SMESH.FT_FreeNodes*"
+msgstr ""
+
+# 5b7d110fa8b24ed2a6056410478ce858
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:273
+msgid "``filters_ex11.py``"
+msgstr ""
+
+# 4952268902a24518afedf3147172ce08
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:279
+msgid ":download:`../../../examples/filters_ex11.py`"
+msgstr ""
+
+# c59182067b7a4790aa895a136e15204b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:281
+msgid "**See also:** :ref:`tui_free_nodes`"
+msgstr ""
+
+# 10a92eee1b7e46bcb170df72bdcfd9f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:286
+msgid "Free faces"
+msgstr ""
+
+# 2b728a8bac9e400fb898d7c8a27061bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:288
+msgid "filters free faces:"
+msgstr ""
+
+# 67792cd6993e4907875ec9c487cba25d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:291
+msgid "functor type is *SMESH.FT_FreeFaces*"
+msgstr ""
+
+# 411788888f004991b473749b0ca5cefd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:296
+msgid "``filters_ex12.py``"
+msgstr ""
+
+# ee38dc421e7a4f098a2ee60bb23006b6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:302
+msgid ":download:`../../../examples/filters_ex12.py`"
+msgstr ""
+
+# a613dc31c6f449329ef91aa9105c1ccd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:304
+msgid "**See also:** :ref:`tui_free_faces`"
+msgstr ""
+
+# bd5a36a737724c19a29608b4676dbba8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:309
+msgid "Bare border faces"
+msgstr ""
+
+# b606eb169958417b8a42f85b9a6a1e28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:311
+msgid "filters faces with bare borders:"
+msgstr ""
+
+# fdeee8621d674199a64c4cb5348a6f6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:314
+msgid "functor type is *SMESH.FT_BareBorderFace*"
+msgstr ""
+
+# f71bbd8f5e78403ab26c094d60854b78
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:319
+msgid "``filters_ex13.py``"
+msgstr ""
+
+# 820f6be3459942f6ba02c2953174bf76
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:325
+msgid ":download:`../../../examples/filters_ex13.py`"
+msgstr ""
+
+# 16f12ffb34184224a1cbda67b40889c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:327
+msgid "**See also:** :ref:`tui_bare_border_faces`"
+msgstr ""
+
+# aff2d16224c44cf092eb5a0cc601f920
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:332
+msgid "Coplanar faces"
+msgstr ""
+
+# d66a44e8bd354eb08c5a88ed12235d8e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:334
+msgid "filters coplanar faces:"
+msgstr ""
+
+# c27a8102cfda432d8d5ba0ec76f6eb33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:337
+msgid "functor type is *SMESH.FT_CoplanarFaces*"
+msgstr ""
+
+# c70b12b4fee1485c8e6bd6791518f812
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:338
+msgid "threshold value is the face ID"
+msgstr ""
+
+# f4e64b57175044db8d1e9790fa296f48
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:339
+msgid "tolerance is in degrees"
+msgstr ""
+
+# 16972c51c17945dabb52860e2940ba29
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:343
+msgid "``filters_ex14.py``"
+msgstr ""
+
+# 56c23335552040db813464be02abc955
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:349
+msgid ":download:`../../../examples/filters_ex14.py`"
+msgstr ""
+
+# e6309d3e844a417c84e9f9fc2301e8c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:354
+msgid "Over-constrained faces"
+msgstr ""
+
+# 1d50fd1a57cf4affb4a6126f6d70e97b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:356
+msgid "filters over-constrained faces:"
+msgstr ""
+
+# e95f92d730ae434ca39fa56652c53391
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:359
+msgid "functor type is *SMESH.FT_OverConstrainedFace*"
+msgstr ""
+
+# fbb88252d0f8448c86ba7292f91697fb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:364
+msgid "``filters_ex15.py``"
+msgstr ""
+
+# 9a79e54fe9a84efbae8d530043f5184e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:370
+msgid ":download:`../../../examples/filters_ex15.py`"
+msgstr ""
+
+# c430a7aef2474eedb4eac84e9289d461
+# 337ef1b2f716414f95c90c39cef03851
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:372
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:626
+msgid "**See also:** :ref:`tui_over_constrained_faces`"
+msgstr ""
+
+# 4c762816a7a64922827935e7645df238
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:377
+msgid "Double edges, Double faces, Double volumes"
+msgstr ""
+
+# 9f7e6b32dc904feeabe998c2d7277164
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:379
+msgid "filters mesh elements basing on the same set of nodes:"
+msgstr ""
+
+# 03dff5d9d02d4cc38ec4d46cc1732feb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:381
+msgid "element type is either *SMESH.EGDE*, *SMESH.FACE* or *SMESH.VOLUME*"
+msgstr ""
+
+# 51855d36e073427fba5f6ed59b5c0a48
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:382
+msgid ""
+"functor type is either *SMESH.FT_EqualEdges*, *SMESH.FT_EqualFaces* or "
+"*SMESH.FT_EqualVolumes*,"
+msgstr ""
+
+# 422403336e844500aeef72243b7bebd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:387
+msgid "``filters_ex16.py``"
+msgstr ""
+
+# 14d268a0bf094221aeb85ada8de2dd73
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:393
+msgid ":download:`../../../examples/filters_ex16.py`"
+msgstr ""
+
+# 9be1962ed6184f24ac4d806fdf5cb8f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:398
+msgid "Double nodes"
+msgstr ""
+
+# 9a9f6e25952c4722b3d3a8400c39a645
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:400
+msgid ""
+"filters mesh nodes which are coincident with other nodes (within a given "
+"tolerance):"
+msgstr ""
+
+# 0f73daf6ad974068b5a74c6b7ad5305f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:403
+msgid "functor type is *SMESH.FT_EqualNodes*"
+msgstr ""
+
+# 4ce59ef3270642dd9629c006d9c40c5a
+# 9c2b4ad2ec414dbbbe70cab52eb1313a
+# 014e3785e30f4b8e92c97075610de2d8
+# e4173d7352364008ac081a669f97ef14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:405
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:709
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:732
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:755
+msgid "default tolerance is 1.0e-7"
+msgstr ""
+
+# 3f69e761164f4f8fb7d60c60d67d7d9c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:409
+msgid "``filters_ex17.py``"
+msgstr ""
+
+# 46c6789c91e949dd95431fc46ee67be6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:415
+msgid ":download:`../../../examples/filters_ex17.py`"
+msgstr ""
+
+# 54ec3d0384df4c2a98ddaf6bc07f3e3f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:420
+msgid "Node connectivity number"
+msgstr ""
+
+# 2b9c0d5edf854e72bdce648332c61ee6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:422
+msgid ""
+"filters nodes according to a number of elements of highest dimension "
+"connected to a node:"
+msgstr ""
+
+# b78de618c06e421a877db6b0f7007abf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:424
+msgid "element type should be *SMESH.NODE*"
+msgstr ""
+
+# 7104cd9c3c394b8195f90a41b4bc2804
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:425
+msgid "functor type should be *SMESH.FT_NodeConnectivityNumber*"
+msgstr ""
+
+# d1060b82fcdb4c43984b72ec1d765e41
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:426
+msgid "threshold is an integer value (number of elements)"
+msgstr ""
+
+# 5951063693494de88bf6be07130c5441
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:430
+msgid "``filters_node_nb_conn.py``"
+msgstr ""
+
+# 3080014f52ca4527818190584a929a00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:436
+msgid ":download:`../../../examples/filters_node_nb_conn.py`"
+msgstr ""
+
+# dda1534b256f4c658a2eb2450c8a2fcc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:441
+msgid "Borders at multi-connection"
+msgstr ""
+
+# a5fa530a80534ee99245cd1484dce07e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:443
+msgid ""
+"filters 1D mesh elements (segments) according to the specified number of "
+"connections (faces and volumes on whose border the segment lies):"
+msgstr ""
+
+# 49a03ad028f54839b50abede8d970f34
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:447
+msgid "functor type is *SMESH.FT_MultiConnection*"
+msgstr ""
+
+# 5ec7e5eb0091420b92fdf13465e68b6c
+# 0a96e2ef8ef141b6adc2e267269eafae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:448
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:472
+msgid "threshold is integer value (number of connections)"
+msgstr ""
+
+# 5733597ff1fe473eb40ce3ff7e301354
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:452
+msgid "``filters_ex18.py``"
+msgstr ""
+
+# a9f6687ddaaa475a947061b2e6922d5b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:458
+msgid ":download:`../../../examples/filters_ex18.py`"
+msgstr ""
+
+# a4e855cfcaf24964aaeb1888d5ab57c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:460
+msgid "**See also:** :ref:`tui_borders_at_multiconnection`"
+msgstr ""
+
+# ca4388f462be424a9fa5738438a8dfb6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:465
+msgid "Borders at multi-connection 2D"
+msgstr ""
+
+# 385ca0044ae44f67bb24d0c3c294c653
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:467
+msgid ""
+"filters 2D mesh elements (faces) with the specified maximal number of "
+"faces connected to a border (link between nodes, not mesh segment):"
+msgstr ""
+
+# 605e2bb7c60341e3831e08ce9d00a288
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:471
+msgid "functor type is *SMESH.FT_MultiConnection2D*"
+msgstr ""
+
+# 1e8e880339b94eac818b655278bee946
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:476
+msgid "``filters_ex19.py``"
+msgstr ""
+
+# d355d82b74a3407e9a1b870177eb0232
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:482
+msgid ":download:`../../../examples/filters_ex19.py`"
+msgstr ""
+
+# 0d635a7069f94a5489fbfec8828788ae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:484
+msgid "**See also:** :ref:`tui_borders_at_multiconnection_2d`"
+msgstr ""
+
+# 550261fe1fff44f78036162b87eca99e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:489
+msgid "Length"
+msgstr ""
+
+# ee52caa616fe4c8a92328758a6dac90e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:491
+msgid "filters 1D mesh elements (edges) according to the edge length value:"
+msgstr ""
+
+# 989ae7f833e64913950a07ffce7a599c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:493
+msgid "element type should be *SMESH.EDGE*"
+msgstr ""
+
+# fbf7ad28719e402da1a8858aec480ffa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:494
+msgid "functor type should be *SMESH.FT_Length*"
+msgstr ""
+
+# 5b1059d4691141c39a84aebb8f64c712
+# 6905f10af6e445bebef179769d7bd0e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:495
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:543
+msgid "threshold is floating point value (length)"
+msgstr ""
+
+# 78e69795f69c4918ae37ba9438e4d581
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:499
+msgid "``filters_ex20.py``"
+msgstr ""
+
+# b1f5b9a6f59345bb9b65918b13dbf30f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:505
+msgid ":download:`../../../examples/filters_ex20.py`"
+msgstr ""
+
+# e49b59c96cbb493ba58613dab973137a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:507
+msgid "**See also:** :ref:`tui_length_1d`"
+msgstr ""
+
+# f055a144f07b412c8b1067b4cc86f095
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:512
+msgid "Length 2D"
+msgstr ""
+
+# c7666b79d18a427682a0f88fc50697fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:514
+msgid ""
+"filters 2D mesh elements (faces) according to the maximum length of its "
+"edges (links between nodes):"
+msgstr ""
+
+# 9f6adc99edc5432098314557e142316c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:518
+msgid "functor type should be *SMESH.FT_Length2D*"
+msgstr ""
+
+# 5b6dfc0091a74cebbe66cb90bc14107c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:519
+msgid "threshold is floating point value (edge length)"
+msgstr ""
+
+# a7c4c530ebf844729a747786a918a469
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:523
+msgid "``filters_ex21.py``"
+msgstr ""
+
+# ed21709b073447aea73549c6b5e4ba52
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:529
+msgid ":download:`../../../examples/filters_ex21.py`"
+msgstr ""
+
+# a2e2655568de44af95deb658aa4e0020
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:531
+msgid "**See also:** :ref:`tui_length_2d`"
+msgstr ""
+
+# 7437e2569f1e4cc6a2aae12cceb7dde2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:536
+msgid "Element Diameter 2D"
+msgstr ""
+
+# 31bf394724b04028ba2aa2373fb4a497
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:538
+msgid ""
+"filters 2D mesh elements (faces) according to the maximum length of its "
+"edges and diagonals:"
+msgstr ""
+
+# 724391cb86d64f8b91ee6033f41271bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:542
+msgid "functor type should be *SMESH.FT_MaxElementLength2D*"
+msgstr ""
+
+# d098a1e0cd784fffb785c4e89624e73f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:547
+msgid "``filters_ex22.py``"
+msgstr ""
+
+# f3fb04e667a145ffa27c4fa83c05e33a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:553
+msgid ":download:`../../../examples/filters_ex22.py`"
+msgstr ""
+
+# cc55efd54037451e9e93c117da20c134
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:555
+msgid "**See also:** :ref:`tui_max_element_length_2d`"
+msgstr ""
+
+# cc9136e7d65b4ca9b0bc04885b9c48d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:560
+msgid "Element Diameter 3D"
+msgstr ""
+
+# 94101ffc6fda4d118986fa576c249e5a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:562
+msgid ""
+"filters 3D mesh elements (volumes) according to the maximum length of its"
+" edges and diagonals:"
+msgstr ""
+
+# 552586f6bd904272b24c888a47f75fe7
+# 1dbdd411375944168b321d06258363a4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:565
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:797
+msgid "element type should be *SMESH.VOLUME*"
+msgstr ""
+
+# fdda00bd406e45ba8c957adfe59aa584
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:566
+msgid "functor type should be *SMESH.FT_MaxElementLength3D*"
+msgstr ""
+
+# 8f503039f5d94e688fabbc1cab2a2fd5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:567
+msgid "threshold is floating point value (edge/diagonal length)"
+msgstr ""
+
+# e26cb32f84404ebba50404235dfcfc6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:571
+msgid "``filters_ex23.py``"
+msgstr ""
+
+# b83daba736664a6ba10c6a60c85290f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:577
+msgid ":download:`../../../examples/filters_ex23.py`"
+msgstr ""
+
+# cbe17c247adf473d838f06dfcacd5099
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:579
+msgid "**See also:** :ref:`tui_max_element_length_3d`"
+msgstr ""
+
+# 97fc03d800884cab911512fb355e844c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:584
+msgid "Bare border volumes"
+msgstr ""
+
+# ce40e24105914ebe844a3878981e73b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:586
+msgid ""
+"filters 3D mesh elements with bare borders, i.e. having a facet not "
+"shared with other volumes and without a face on it:"
+msgstr ""
+
+# fcb10c03ffb54596a5d76535c59f4202
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:590
+msgid "functor type is *SMESH.FT_BareBorderVolume*"
+msgstr ""
+
+# 9d2614cf04c747009ab065d3b7c69f31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:595
+msgid "``filters_ex24.py``"
+msgstr ""
+
+# 775702868e504cd99d3e13550722d54f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:601
+msgid ":download:`../../../examples/filters_ex24.py`"
+msgstr ""
+
+# b3355d3c2aef4db78b6409e9531d9fbe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:603
+msgid "**See also:** :ref:`tui_bare_border_volumes`"
+msgstr ""
+
+# d691f1abd0ca4c0eb16b217f6f77161a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:608
+msgid "Over-constrained volumes"
+msgstr ""
+
+# 28008f4ef2a94786ac06c4b1cb843d0b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:610
+msgid ""
+"filters over-constrained volumes, whose all nodes are on the mesh "
+"boundary:"
+msgstr ""
+
+# e43a3fdb876c4135ae79a3f2009aed0e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:613
+msgid "functor type is *SMESH.FT_OverConstrainedVolume*"
+msgstr ""
+
+# 90b875ac91454fdc9cbff4ccb4329f2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:618
+msgid "``filters_ex25.py``"
+msgstr ""
+
+# 840c6c1a0eea44d88ed766016df2cfcb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:624
+msgid ":download:`../../../examples/filters_ex25.py`"
+msgstr ""
+
+# b49dbd8ec8764bc2a459735efa405e95
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:631
+msgid "Belong to Mesh Group"
+msgstr ""
+
+# 62e957b684c54214b232a947a4d3b240
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:633
+msgid ""
+"filters mesh entities (nodes or elements) included in a mesh group "
+"defined by threshold value:"
+msgstr ""
+
+# 5e2969a704914b97be7521835f9bfd53
+# 05e74d27e2154ec095b4eb8230cfa7d7
+# 8df46f4bc3294bf7b5fa6220ca737281
+# 9fa4accfe4f046499b5bb57cacd18624
+# 674b6ddf9d37471b825202d5e5297f86
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:636
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:658
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:681
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:775
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:840
+msgid "element type can be any, from *SMESH.NODE* to *SMESH.BALL*"
+msgstr ""
+
+# d50d8ecc6d2340c9bc7611e3384e69dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:637
+msgid "functor type should be *SMESH.FT_BelongToMeshGroup*"
+msgstr ""
+
+# c77da6ebd3f74281b61d71383798e03c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:638
+msgid "threshold is mesh group object"
+msgstr ""
+
+# 681f97f7da9b4a9995e56c3e8df52622
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:642
+msgid "``filters_belong2group.py``"
+msgstr ""
+
+# 7a8de9bd18d24a2d95a429e0ee16b0a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:648
+msgid ":download:`../../../examples/filters_belong2group.py`"
+msgstr ""
+
+# b6d57148f42940eda7259884042e820b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:653
+msgid "Belong to Geom"
+msgstr ""
+
+# dcff919a75a34a61a991fec26d73e191
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:655
+msgid ""
+"filters mesh entities (nodes or elements) which all nodes lie on the "
+"shape defined by threshold value:"
+msgstr ""
+
+# 6936949065a14fa59ebd082a704b8ddf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:659
+msgid "functor type should be *SMESH.FT_BelongToGeom*"
+msgstr ""
+
+# 425504babbae4ef1a87cd43390ab1911
+# 75b2f2e1075b4ca2b8f12c44948c7229
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:660
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:683
+msgid "threshold is geometrical object"
+msgstr ""
+
+# 3e5c35430f5a420580677ef5bb0fec6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:661
+msgid ""
+"tolerance is a distance between a node and the geometrical object; it is "
+"used if an node is not associated to any geometry."
+msgstr ""
+
+# af4a62bc6bb944ad95818d6e7a580c69
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:665
+msgid "``filters_ex26.py``"
+msgstr ""
+
+# a7c2743b9d394107b485708f1a8e8f53
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:671
+msgid ":download:`../../../examples/filters_ex26.py`"
+msgstr ""
+
+# d1e3a37b037e48e09e9a5c95aed8b10d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:676
+msgid "Lying on Geom"
+msgstr ""
+
+# 42c56ae8e347449793280f9628e388db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:678
+msgid ""
+"filters mesh entities (nodes or elements) at least one node of which lies"
+" on the shape defined by threshold value:"
+msgstr ""
+
+# 3405af1cedcf4f2eb0beead57d373a9d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:682
+msgid "functor type should be *SMESH.FT_LyingOnGeom*"
+msgstr ""
+
+# d7aa1223d52a49ffad2cea535fee5432
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:684
+msgid "tolerance is a distance between a node and the geometrical object;"
+msgstr ""
+
+# 5573b9622d1f403a9cc5a1f622aa66bc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:686
+msgid "it is used if an node is not associated to any geometry."
+msgstr ""
+
+# aebe7d59b7f24931ab8bc542276af606
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:690
+msgid "``filters_ex27.py``"
+msgstr ""
+
+# 0ed67cd816d44f81920f933879fffa4b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:696
+msgid ":download:`../../../examples/filters_ex27.py`"
+msgstr ""
+
+# 96669f8b61e8427ba147bddb9dbf0c1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:701
+msgid "Belong to Plane"
+msgstr ""
+
+# b1f11adac265445da564b97d9a12e637
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:703
+msgid ""
+"filters mesh entities (nodes or elements) which all nodes belong to the "
+"plane defined by threshold value with the given tolerance:"
+msgstr ""
+
+# fabc3ac38127432f9b32d6da2514eff4
+# 3e4dc8f600bd414f90b3ec3bdf0e006a
+# 288d476ed0fa4275a28cfb3c0048a116
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:706
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:729
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:752
+msgid "element type can be any except *SMESH.VOLUME*"
+msgstr ""
+
+# beddd56fa51d443f8598332c6a798f61
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:707
+msgid "functor type should be *SMESH.FT_BelongToPlane*"
+msgstr ""
+
+# 7c33c3cb8ce8458e8d8dcc7406d5224c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:708
+msgid "threshold is geometrical object (plane)"
+msgstr ""
+
+# 1a779a6d926249da91ddba758563cdfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:713
+msgid "``filters_ex28.py``"
+msgstr ""
+
+# 474063b5e9f64506ab7164ec35bdd591
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:719
+msgid ":download:`../../../examples/filters_ex28.py`"
+msgstr ""
+
+# 6e1fecbd1a3645e29a1ea342cc3e66da
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:724
+msgid "Belong to Cylinder"
+msgstr ""
+
+# f0b8bebbc11b47aba1911c6dec58e8fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:726
+msgid ""
+"filters mesh entities (nodes or elements) which all nodes belong to the "
+"cylindrical face defined by threshold value with the given tolerance:"
+msgstr ""
+
+# e59bbbe974ab407da4746987550f092b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:730
+msgid "functor type should be *SMESH.FT_BelongToCylinder*"
+msgstr ""
+
+# 521885d6a25a49fbba26e2b3cd276bea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:731
+msgid "threshold is geometrical object (cylindrical face)"
+msgstr ""
+
+# 7169b31929204c8d86171c5fc1e70790
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:736
+msgid "``filters_ex29.py``"
+msgstr ""
+
+# 79555c5a71184badbab65a080d78769d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:742
+msgid ":download:`../../../examples/filters_ex29.py`"
+msgstr ""
+
+# 443cfe1a044f4543beb1c9f691b2f8d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:747
+msgid "Belong to Surface"
+msgstr ""
+
+# 89767428ece3443a882e6cdd310440d4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:749
+msgid ""
+"filters mesh entities (nodes or elements) which all nodes belong to the "
+"arbitrary surface defined by threshold value with the given tolerance:"
+msgstr ""
+
+# 51ac7306ca4e40a583f93e213b9d53e7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:753
+msgid "functor type should be *SMESH.FT_BelongToGenSurface*"
+msgstr ""
+
+# f47254b619d741ebb1268f6d3bc76479
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:754
+msgid "threshold is geometrical object (arbitrary surface)"
+msgstr ""
+
+# 6cc05deaab714e5597256bd4b8d575ba
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:759
+msgid "``filters_ex30.py``"
+msgstr ""
+
+# 755f6f5145794b1b9b3fbf0707841202
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:765
+msgid ":download:`../../../examples/filters_ex30.py`"
+msgstr ""
+
+# 480b58ba69224cacb3ea43c351b2cbe8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:770
+msgid "Range of IDs"
+msgstr ""
+
+# edc9065fcc7747fbbf4770e7a24e0150
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:772
+msgid ""
+"filters mesh entities elements (nodes or elements) according to the "
+"specified identifiers range:"
+msgstr ""
+
+# c5326641da7c4bc989742815cd547c94
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:776
+msgid "functor type is *SMESH.FT_RangeOfIds*"
+msgstr ""
+
+# f38032029e0f4f5c8e878e1a717c712f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:777
+msgid ""
+"threshold is string listing required IDs and/or ranges of IDs, "
+"e.g.\"1,2,3,50-60,63,67,70-78\""
+msgstr ""
+
+# 648a550fba2d4f1b91544b6a10d129ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:781
+msgid "``filters_ex31.py``"
+msgstr ""
+
+# 5e865f6eea324433bd5ebb53aafe730a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:787
+msgid ":download:`../../../examples/filters_ex31.py`"
+msgstr ""
+
+# 629cd6d520ae4225be5a7656fb2e8e1c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:792
+msgid "Badly oriented volume"
+msgstr ""
+
+# 997d280d774c4f288595ab35ff4bac2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:794
+msgid ""
+"filters 3D mesh elements (volumes), which are incorrectly oriented from "
+"the point of view of MED convention."
+msgstr ""
+
+# c6bd895bb88e4785ba8890ea4316884f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:798
+msgid "functor type is *SMESH.FT_BadOrientedVolume*"
+msgstr ""
+
+# 9093e5ba871a4b038cd1b1eff0b57367
+# de3b40264c3e4a24a0c2d5ea6d10576f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:799
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:820
+msgid "threshold is not required"
+msgstr ""
+
+# 7f090527951447c4b24547316452536b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:803
+msgid "``filters_ex32.py``"
+msgstr ""
+
+# 433cbf6bf097466f87da3706c761e002
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:809
+msgid ":download:`../../../examples/filters_ex32.py`"
+msgstr ""
+
+# 9c303932cfc04a3c8c0fdbf4465b7601
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:814
+msgid "Linear / quadratic"
+msgstr ""
+
+# 89dd525d28a14d629237d1b4b6be0500
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:816
+msgid "filters linear / quadratic mesh elements:"
+msgstr ""
+
+# 457e1ff1b5194af5b54d8def4d8e90e3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:818
+msgid "element type should be either *SMESH.EDGE*, *SMESH.FACE* or *SMESH.VOLUME*"
+msgstr ""
+
+# 6be06de695854193b299384f8e43a791
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:819
+msgid "functor type is *SMESH.FT_LinearOrQuadratic*"
+msgstr ""
+
+# 2c99fbd29b6d46aba55e0ad1312bb07e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:821
+msgid ""
+"if unary operator is set to SMESH.FT_LogicalNOT, the quadratic elements "
+"are selected, otherwise (by default) linear elements are selected"
+msgstr ""
+
+# dc627b9fa49c46d6a3620f426974ee18
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:825
+msgid "``filters_ex33.py``"
+msgstr ""
+
+# a67844d1abcd405b8585d15bc521ea85
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:831
+msgid ":download:`../../../examples/filters_ex33.py`"
+msgstr ""
+
+# bdffe57af7904d328b2149232e5dfd62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:836
+msgid "Group color"
+msgstr ""
+
+# 38af276c6e714f55a1c27e72e90cd0f2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:838
+msgid ""
+"filters mesh entities, belonging to the group with the color defined by "
+"the threshold value."
+msgstr ""
+
+# 201d8bca7f004e57861e36d1edb41ced
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:841
+msgid "functor type is *SMESH.FT_GroupColor*"
+msgstr ""
+
+# 09bbe898a14e49fc9c75a34d93fcf3d7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:842
+msgid "threshold should be of SALOMEDS.Color type"
+msgstr ""
+
+# a6a0157dd48547db9a4ba61fb4a60254
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:846
+msgid "``filters_ex34.py``"
+msgstr ""
+
+# db3daeb12eeb490b99162cf67ea3d46f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:852
+msgid ":download:`../../../examples/filters_ex34.py`"
+msgstr ""
+
+# bfafa2ababc7495ab073caad36f52be7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:857
+msgid "Geometry type"
+msgstr ""
+
+# 3ed3adca96584f8cada6b1918ab063cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:859
+msgid ""
+"filters mesh elements by the geometric type defined with the threshold "
+"value. The list of available geometric types depends on the element "
+"entity type."
+msgstr ""
+
+# a030232f559b4c739d14fab8c2d16bdc
+# 9d452c1d0b284f4081addf9f8026d897
+# 60870960f67b44b3a77fab3c58ab1e7b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:863
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:884
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:926
+msgid ""
+"element type can be any, e.g.: *SMESH.EDGE*, *SMESH.FACE*, "
+"*SMESH.VOLUME*, etc."
+msgstr ""
+
+# 89deb95aee72404b8403b79cdcf685f4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:864
+msgid "functor type should be *SMESH.FT_ElemGeomType*"
+msgstr ""
+
+# ae918bc9c07e459a88d77aef0d22b4f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:865
+msgid ""
+"threshold is either of smesh.GeometryType values. Type "
+"*SMESH.GeometryType._items* in the Python Console to see all geometric "
+"types."
+msgstr ""
+
+# 4ff74a1e1b76464ebf6b20a8d9f26f45
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:869
+msgid "``filters_ex35.py``"
+msgstr ""
+
+# 1967c745730342e3bf48d70306f463fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:875
+msgid ":download:`../../../examples/filters_ex35.py`"
+msgstr ""
+
+# 0eff6fa25f514cd8bbc6cbe1cf521c2e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:880
+msgid "Entity type"
+msgstr ""
+
+# ee373c0f383a4b809834d66fcaf2921b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:882
+msgid "filters mesh elements by the geometric type and number of nodes."
+msgstr ""
+
+# 963014e799e24f9fa30774202c1aa673
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:885
+msgid "functor type should be *SMESH.FT_EntityType*"
+msgstr ""
+
+# 0c19e26af5cc4b90afad5df964910125
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:886
+msgid ""
+"threshold is either of SMESH.EntityType values. Type "
+"*SMESH.EntityType._items* in the Python Console to see all entity types."
+msgstr ""
+
+# eb186ee8b0f2409ba4772249733b5364
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:890
+msgid "``filters_ex37.py``"
+msgstr ""
+
+# 19611ceebb8e46ceaa47aa0f2b21b44a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:896
+msgid ":download:`../../../examples/filters_ex37.py`"
+msgstr ""
+
+# 3208daefb114459d8a5a07b1e9e0b859
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:901
+msgid "Ball diameter"
+msgstr ""
+
+# f5fb287ff3a64f87bb9406c63a06923e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:903
+msgid "filters ball elements by diameter."
+msgstr ""
+
+# e46e09625f1c42f8932ca036c240d66a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:905
+msgid "element type should be *SMESH.BALL*"
+msgstr ""
+
+# 15653ec5de0d416387873f9406719593
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:906
+msgid "functor type should be *SMESH.FT_BallDiameter*"
+msgstr ""
+
+# 12bfc4b762bc429b92329056c102b932
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:907
+msgid "threshold is floating point value (ball diameter)"
+msgstr ""
+
+# c7d7ea6882164c28906e136939b14a3b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:911
+msgid "``filters_ex38.py``"
+msgstr ""
+
+# d6ce1938df5f4e13bbafa462547a2c2e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:917
+msgid ":download:`../../../examples/filters_ex38.py`"
+msgstr ""
+
+# fafdd97f37aa465086eac657054ceaa8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:922
+msgid "Elements of a domain"
+msgstr ""
+
+# 015db492db7a4573b3e67144cfffc42a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:924
+msgid "filters elements of a specified domain."
+msgstr ""
+
+# 91f93e9c0f524a38ac0d3187a8ca9606
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:927
+msgid "functor type should be *SMESH.FT_ConnectedElements*"
+msgstr ""
+
+# 245661334ae347e8b9055bce39e73f50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:928
+msgid ""
+"threshold is either (1) node ID or (2)  geometrical vertex or (3) 3 "
+"coordinates of a point."
+msgstr ""
+
+# 6b1dc952084e499ab1118e00e68ee60e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:932
+msgid "``filters_ex39.py``"
+msgstr ""
+
+# 7857771c11de4843ba948ae370481e99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:938
+msgid ":download:`../../../examples/filters_ex39.py`"
+msgstr ""
+
+# 4a247beda8fd45ac9adabf51f4ccc758
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:943
+msgid "How to combine several criteria into a filter?"
+msgstr ""
+
+# 20f523c9f1364fd493710745665b2485
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:945
+msgid "Several criteria can be combined into a filter."
+msgstr ""
+
+# 5cdcea56db2142c48da8d9f4ebd38432
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:947
+msgid "Example :"
+msgstr ""
+
+# 24fdd74430244cf999d12e78aa34bd2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:951
+msgid "``filters_ex36.py``"
+msgstr ""
+
+# bdc03be37f0f4109bf502c473f4961ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_filters.rst:957
+msgid ":download:`../../../examples/filters_ex36.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po
new file mode 100644 (file)
index 0000000..cd89253
--- /dev/null
@@ -0,0 +1,115 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 94b9bfcad24f4c1a8904595aacacd2a8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:5
+msgid "Generate flat elements"
+msgstr ""
+
+# 2d87fc8590ba46db8cfb3fdcb334acdd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:11
+msgid "Double nodes on groups boundaries"
+msgstr ""
+
+# b2e0b61a2bd541658aaa85d3701e2616
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:13
+msgid ""
+"Double nodes on shared faces between groups of volumes and create flat "
+"elements on demand."
+msgstr ""
+
+# ccba3377d12c4a03a60d8f94161453cf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:15
+msgid ""
+"The list of groups must contain at least two groups. The groups have to "
+"be disjoint: no common element into two different groups."
+msgstr ""
+
+# fecd61ff694c43ba92b41f184f8d29b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:17
+msgid ""
+"The nodes of the internal faces at the boundaries of the groups are "
+"doubled. Optionally, the internal faces are replaced by flat elements."
+msgstr ""
+
+# bcfba18f40da4612ad4ff5c79d493694
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:19
+msgid "Triangles are transformed into prisms, and quadrangles into hexahedrons."
+msgstr ""
+
+# 9399b78410d546ac85910821b7ce6936
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:21
+msgid "The flat elements are stored in groups of volumes."
+msgstr ""
+
+# 0da6b80f0f2d469cbc70306609b90150
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:23
+msgid ""
+"These groups are named according to the position of the group in the "
+"list: the group j_n_p is the group of the flat elements that are built "
+"between the group \\#n and the group \\#p in the list. If there is no "
+"shared faces between the group \\#n and the group \\#p in the list, the "
+"group j_n_p is not created. All the flat elements are gathered into the "
+"group named \"joints3D\" (or \"joints2D\" in 2D situation). The flat "
+"element of the multiple junctions between the simple junction are stored "
+"in a group named \"jointsMultiples\"."
+msgstr ""
+
+# 791916a68e6a4ac68d0ca337f597f83c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:29
+msgid ""
+"This example represents an iron cable (a thin cylinder) in a concrete "
+"bloc (a big cylinder). The big cylinder is defined by two geometric "
+"volumes."
+msgstr ""
+
+# 32891b0da8c04c99a9f893d9a3d55737
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:34
+msgid "``generate_flat_elements.py``"
+msgstr ""
+
+# d28029c4ca634a2f8919c4710c5275fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:40
+msgid ":download:`../../../examples/generate_flat_elements.py`"
+msgstr ""
+
+# d44554c1bbfa4b8e9f233f65f79b94ec
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:42
+msgid ""
+"Here, the 4 groups of volumes [Solid_1_1, Solid_2_1, Solid_3_1, "
+"Solid_4_1] constitute a partition of the mesh. The flat elements on group"
+" boundaries and on faces are built with the 2 last lines of the code "
+"above."
+msgstr ""
+
+# cd05508af49441a9a33f12dbeb40ba64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:46
+msgid ""
+"If the last argument (Boolean) in DoubleNodesOnGroupBoundaries is set to "
+"1, the flat elements are built, otherwise, there is only a duplication of"
+" the nodes."
+msgstr ""
+
+# f5207480da63486c8a5da024105cc022
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_generate_flat_elements.rst:49
+msgid ""
+"To observe flat element groups, save the resulting mesh on a MED file and"
+" reload it."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_grouping_elements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_grouping_elements.po
new file mode 100644 (file)
index 0000000..f240ae7
--- /dev/null
@@ -0,0 +1,149 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7c8275db95614345840fe6b8724d25de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:5
+msgid "Grouping Elements"
+msgstr ""
+
+# d007caedd364451e8c1f7495b62650f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# c685a29a29eb44f98ef7d19dc0978ed8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:13
+msgid "Create a Standalone Group"
+msgstr ""
+
+# 33643a4602be45a1b707c60e35d04085
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:17
+msgid "``grouping_elements_ex01.py``"
+msgstr ""
+
+# efd94909a03d4ac6b67f376a2f97364d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:23
+msgid ":download:`../../../examples/grouping_elements_ex01.py`"
+msgstr ""
+
+# ce9f619fdeb348ebb932e1acf3b8ecb5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:32
+msgid "Create a Group on Geometry"
+msgstr ""
+
+# b4933694da724b6dbe8aac06260b5d91
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:36
+msgid "``grouping_elements_ex02.py``"
+msgstr ""
+
+# 7107a498cdc044f697c2309d05d7b626
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:42
+msgid ":download:`../../../examples/grouping_elements_ex02.py`"
+msgstr ""
+
+# a21f0e2bcf474b89b4d1d81660be451e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:47
+msgid "Create a Group on Filter"
+msgstr ""
+
+# 94708eb1603c4290a41abcbc4c65e23a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:51
+msgid "``grouping_elements_ex03.py``"
+msgstr ""
+
+# c055a286339c42f9abeff58eb1627edb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:57
+msgid ":download:`../../../examples/grouping_elements_ex03.py`"
+msgstr ""
+
+# 017ddf308a744a8a80ecadb90fc9afeb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:62
+msgid "Edit a Group"
+msgstr ""
+
+# 44b5e88de4f94adfb04e72de0af0961d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:66
+msgid "``grouping_elements_ex04.py``"
+msgstr ""
+
+# 6c7b0f9d495843e7ace6be6ceafb4b7e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:72
+msgid ":download:`../../../examples/grouping_elements_ex04.py`"
+msgstr ""
+
+# 259559a09b5d4a7aa5341005d1bb4030
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:81
+msgid "Union of groups"
+msgstr ""
+
+# 9d2a4762350a46d8ae13943b51245742
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:85
+msgid "``grouping_elements_ex05.py``"
+msgstr ""
+
+# 7f4f67b3c7534e9c955ebcdf671b473a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:91
+msgid ":download:`../../../examples/grouping_elements_ex05.py`"
+msgstr ""
+
+# 3ed79769097448299091c040b08e0c33
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:100
+msgid "Intersection of groups"
+msgstr ""
+
+# bea440376ec44c5ca7d569e70131360b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:104
+msgid "``grouping_elements_ex06.py``"
+msgstr ""
+
+# 35894b83067447ddac86733da1388d99
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:110
+msgid ":download:`../../../examples/grouping_elements_ex06.py`"
+msgstr ""
+
+# a148c83e4a70413c879340f761e8ab50
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:119
+msgid "Cut of groups"
+msgstr ""
+
+# 8dfec4cdb7474b089635f725049d40fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:123
+msgid "``grouping_elements_ex07.py``"
+msgstr ""
+
+# 301f2d0fdf92422dae26c42c7a0cbc6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:129
+msgid ":download:`../../../examples/grouping_elements_ex07.py`"
+msgstr ""
+
+# cbeebd8ad9d644a890f18c93d68ece31
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:138
+msgid "Creating groups of entities basing on nodes of other groups"
+msgstr ""
+
+# 95318b6177c74648acbd055014e45b1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:142
+msgid "``grouping_elements_ex08.py``"
+msgstr ""
+
+# 98ca427d8a374b269637ae39951272d8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_grouping_elements.rst:148
+msgid ":download:`../../../examples/grouping_elements_ex08.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_measurements.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_measurements.po
new file mode 100644 (file)
index 0000000..c531f05
--- /dev/null
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# fcf1848f5fc64f4b9238b081ed8257d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:5
+msgid "Measurements"
+msgstr ""
+
+# 37e730455ef24c8890f0c9cb06265fa5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:9
+msgid "Minimum Distance"
+msgstr ""
+
+# 4f8eb655f7d94344889df89550d28110
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:13
+msgid "``measurements_ex01.py``"
+msgstr ""
+
+# 9bd28729817f4b55a7bad0866aad3a11
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:19
+msgid ":download:`../../../examples/measurements_ex01.py`"
+msgstr ""
+
+# 55053f612a8944e497ece47425b6a60b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:24
+msgid "Bounding Box"
+msgstr ""
+
+# ac6650de22da46af8d3fc1feb70f392c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:28
+msgid "``measurements_ex02.py``"
+msgstr ""
+
+# 586956e8468b49ee963f0cd5ba48a639
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:34
+msgid ":download:`../../../examples/measurements_ex02.py`"
+msgstr ""
+
+# de1f00c886e04eaea481b695ad8272bb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:39
+msgid "Basic Properties"
+msgstr ""
+
+# 2ae18065fdb64633abf5d333546de3ed
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:43
+msgid "``measurements_ex03.py``"
+msgstr ""
+
+# e7d49eb227cd456fb619045a95dd6326
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_measurements.rst:49
+msgid ":download:`../../../examples/measurements_ex03.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_modifying_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_modifying_meshes.po
new file mode 100644 (file)
index 0000000..b6afe1b
--- /dev/null
@@ -0,0 +1,429 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# aada02ed87e9482991a105a7096b13b9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:5
+msgid "Modifying Meshes"
+msgstr ""
+
+# 4fca5d359462431bbfb1a297c6f1c015
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# 3882fd88f2be46d2bf046435d1ab6116
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:13
+msgid "Adding Nodes and Elements"
+msgstr ""
+
+# 2912e95b7a304f02ac3e3a0f6b492e1f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:18
+msgid "Add Node"
+msgstr ""
+
+# e937ad8c1eee48b89418d8c87e754c40
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:22
+msgid "``modifying_meshes_ex01.py``"
+msgstr ""
+
+# 93520ad0813442f18bdf9a0b3def23f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:28
+msgid ":download:`../../../examples/modifying_meshes_ex01.py`"
+msgstr ""
+
+# e015d501736443c787c8448daa4b1cf4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:33
+msgid "Add 0D Element"
+msgstr ""
+
+# 07f05da961cb4e3aa357c1125efd0dfa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:37
+msgid "``modifying_meshes_ex02.py``"
+msgstr ""
+
+# 8cd7162f281041e998a16ba15b6a2afd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:43
+msgid ":download:`../../../examples/modifying_meshes_ex02.py`"
+msgstr ""
+
+# 9ae5e80e36414b81bb414c6e3dbc0401
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:48
+msgid "Add 0D Element on Element Nodes"
+msgstr ""
+
+# 4ce9e69888e54ea6bc3d8123892df4bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:52
+msgid "``modifying_meshes_ex03.py``"
+msgstr ""
+
+# 1fc33b2f5afe4ef39a3e0386470702c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:58
+msgid ":download:`../../../examples/modifying_meshes_ex03.py`"
+msgstr ""
+
+# 1b9d3c3a725b450e9ca4646848ed26e1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:63
+msgid "Add Edge"
+msgstr ""
+
+# ecdca588cdd84ff8aa87f45abec12590
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:67
+msgid "``modifying_meshes_ex04.py``"
+msgstr ""
+
+# 97c1b92363944e539c1d9b466977e5bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:73
+msgid ":download:`../../../examples/modifying_meshes_ex04.py`"
+msgstr ""
+
+# af3bdd72bc624e11aaf32fbb7e915f29
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:78
+msgid "Add Triangle"
+msgstr ""
+
+# 3863dc59cd09494b904f960891c29256
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:82
+msgid "``modifying_meshes_ex05.py``"
+msgstr ""
+
+# 52380a726927405b899c634d3ee0c922
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:88
+msgid ":download:`../../../examples/modifying_meshes_ex05.py`"
+msgstr ""
+
+# ad7815a0144e444b9f1ffead0f73a605
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:93
+msgid "Add Quadrangle"
+msgstr ""
+
+# 1033fb8fc9a74063b718f6bb688d67bd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:97
+msgid "``modifying_meshes_ex06.py``"
+msgstr ""
+
+# 1c0f1e73f76640a89cf49c530537d010
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:103
+msgid ":download:`../../../examples/modifying_meshes_ex06.py`"
+msgstr ""
+
+# 0685aeaebe4c481c91a0b527c967396e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:108
+msgid "Add Tetrahedron"
+msgstr ""
+
+# 941189d082ff4a3f8e4b8ebb23f0d2f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:112
+msgid "``modifying_meshes_ex07.py``"
+msgstr ""
+
+# dfa8e48ee2fc4165aa775033e6b052ea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:118
+msgid ":download:`../../../examples/modifying_meshes_ex07.py`"
+msgstr ""
+
+# 5a5f7874626d427ea5a7fb55e797fa66
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:123
+msgid "Add Hexahedron"
+msgstr ""
+
+# b651ec6bdb5246e0aaf99bc1acb35d9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:127
+msgid "``modifying_meshes_ex08.py``"
+msgstr ""
+
+# 418525e42ce74f7094b73b1413abfdae
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:133
+msgid ":download:`../../../examples/modifying_meshes_ex08.py`"
+msgstr ""
+
+# bae866607b304e0fbb9907ca192aa2ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:138
+msgid "Add Polygon"
+msgstr ""
+
+# ecf9edb8d0994d9cbe4d186a66912cbc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:142
+msgid "``modifying_meshes_ex09.py``"
+msgstr ""
+
+# 52080c13dd784dabb391ab937ca983a9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:148
+msgid ":download:`../../../examples/modifying_meshes_ex09.py`"
+msgstr ""
+
+# 07055770fb864145b907da2b4909b703
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:153
+msgid "Add Polyhedron"
+msgstr ""
+
+# b1442132c7dc4cbd9f868b181428dcaa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:157
+msgid "``modifying_meshes_ex10.py``"
+msgstr ""
+
+# ed0593751615424989125f0586ac3936
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:163
+msgid ":download:`../../../examples/modifying_meshes_ex10.py`"
+msgstr ""
+
+# 9b285274402b48658860b32294e8dac5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:168
+msgid "Removing Nodes and Elements"
+msgstr ""
+
+# b436e294d1214a44ac54a0fab50212bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:173
+msgid "Removing Nodes"
+msgstr ""
+
+# 2f66f5eef3344132ba6c582bc1192a7e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:177
+msgid "``modifying_meshes_ex11.py``"
+msgstr ""
+
+# 32c27c776f6741d79e21444ad7e7f223
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:183
+msgid ":download:`../../../examples/modifying_meshes_ex11.py`"
+msgstr ""
+
+# af6993ae032c44f2956ef6b1b7219fa1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:188
+msgid "Removing Elements"
+msgstr ""
+
+# 6e2bc2d438014d5c91bf0650d0b93f62
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:192
+msgid "``modifying_meshes_ex12.py``"
+msgstr ""
+
+# dbcc049e4aba43d7943cd5d4e59f68b1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:198
+msgid ":download:`../../../examples/modifying_meshes_ex12.py`"
+msgstr ""
+
+# 8c6510d0103043a3b6d6c5009c58c140
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:203
+msgid "Removing Orphan Nodes"
+msgstr ""
+
+# a62084880a3d4d99a920c5c7d64c35d0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:207
+msgid "``modifying_meshes_ex13.py``"
+msgstr ""
+
+# 65829ed7318d44e5b213e4476cb88975
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:213
+msgid ":download:`../../../examples/modifying_meshes_ex13.py`"
+msgstr ""
+
+# 072e7fda68214ff6a9e82bb46d9e7b54
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:218
+msgid "Moving Nodes"
+msgstr ""
+
+# 6241da425fc341a6972bc52709c9f17d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:222
+msgid "``modifying_meshes_ex15.py``"
+msgstr ""
+
+# 761b5555313b4de6b6658a24bd1c5943
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:228
+msgid ":download:`../../../examples/modifying_meshes_ex15.py`"
+msgstr ""
+
+# eae98f1d881f47ad856d133c7fcf647d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:233
+msgid "Diagonal Inversion"
+msgstr ""
+
+# 17f8656a2043438498d5faa309d9db3f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:237
+msgid "``modifying_meshes_ex16.py``"
+msgstr ""
+
+# 93dd916eca644dfa818c988ce6a3ba6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:243
+msgid ":download:`../../../examples/modifying_meshes_ex16.py`"
+msgstr ""
+
+# f29b26e5fc1e4f5ab64a01d46874bcca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:248
+msgid "Uniting two Triangles"
+msgstr ""
+
+# ee685e2cbc4c45adabf0313c94ab265d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:252
+msgid "``modifying_meshes_ex17.py``"
+msgstr ""
+
+# 760efa3959614773944130605e38d103
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:258
+msgid ":download:`../../../examples/modifying_meshes_ex17.py`"
+msgstr ""
+
+# 0e8309d52aa24136bc511e7c8cbae48a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:263
+msgid "Uniting a Set of Triangles"
+msgstr ""
+
+# 09b737cbe2c0409983ecb054dbe346b0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:267
+msgid "``modifying_meshes_ex18.py``"
+msgstr ""
+
+# dffc67da027e422ea2d6731b538e248f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:273
+msgid ":download:`../../../examples/modifying_meshes_ex18.py`"
+msgstr ""
+
+# 0a3c94c6a162420aaae25531382282aa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:278
+msgid "Orientation"
+msgstr ""
+
+# b1c35bc3190c43c3ab90cc1c1d71526b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:282
+msgid "``modifying_meshes_ex19.py``"
+msgstr ""
+
+# d03db5ed6b0346eaba85dc3df49eeb2a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:288
+msgid ":download:`../../../examples/modifying_meshes_ex19.py`"
+msgstr ""
+
+# 6d1a49f7262a485295850a85e54992e9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:293
+msgid "Cutting Quadrangles"
+msgstr ""
+
+# c838a6074c60435a8113adb2e75db894
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:297
+msgid "``modifying_meshes_ex20.py``"
+msgstr ""
+
+# d0de4068046e44848a15fbf4eea6deb9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:303
+msgid ":download:`../../../examples/modifying_meshes_ex20.py`"
+msgstr ""
+
+# ad37ede65d2f46a8b22efc9d19e6b347
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:308
+msgid "Smoothing"
+msgstr ""
+
+# d705f65980314385901c4316f258235e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:312
+msgid "``modifying_meshes_ex21.py``"
+msgstr ""
+
+# 8c8d9acaabed4ddb892a839ea88c6e42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:318
+msgid ":download:`../../../examples/modifying_meshes_ex21.py`"
+msgstr ""
+
+# 4cb97b8e8f2a44558385dbbce875e7c4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:323
+msgid "Extrusion"
+msgstr ""
+
+# df3a417c2dce420abdd0669fbb74ce9f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:327
+msgid "``modifying_meshes_ex22.py``"
+msgstr ""
+
+# 23e499ee8ac64a2283c6b7e195610dac
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:333
+msgid ":download:`../../../examples/modifying_meshes_ex22.py`"
+msgstr ""
+
+# 37b48cd5b20a4e3a9e23fd93831e395c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:338
+msgid "Extrusion along a Path"
+msgstr ""
+
+# e15b81f2dc884607b96325a960a0a814
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:342
+msgid "``modifying_meshes_ex23.py``"
+msgstr ""
+
+# 59666ee96fec4ddd866a6f9608742380
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:348
+msgid ":download:`../../../examples/modifying_meshes_ex23.py`"
+msgstr ""
+
+# 4d4ccc2f066246a7a5aeb153f5cdae2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:353
+msgid "Revolution"
+msgstr ""
+
+# 8b7cde33b28d413c9572c095b91f4adc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:357
+msgid "``modifying_meshes_ex24.py``"
+msgstr ""
+
+# ad888657b3eb4279b21d70ae77361803
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:363
+msgid ":download:`../../../examples/modifying_meshes_ex24.py`"
+msgstr ""
+
+# be6c231c208445c4b20afdd211012acd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:368
+msgid "Pattern Mapping"
+msgstr ""
+
+# 952a2de3d76145639d9519752e453883
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:372
+msgid "``modifying_meshes_ex25.py``"
+msgstr ""
+
+# 325e04d139ca400dbdcc2860a1624425
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:378
+msgid ":download:`../../../examples/modifying_meshes_ex25.py`"
+msgstr ""
+
+# ee3a18d7cd0d4e168fb38e013f8e7d9b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:383
+msgid "Convert mesh to/from quadratic"
+msgstr ""
+
+# ccf9ab173a504d459c9a4bf914326489
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:387
+msgid "``modifying_meshes_ex26.py``"
+msgstr ""
+
+# fcb2a25c83fe400cbd804504e046b28a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:393
+msgid ":download:`../../../examples/modifying_meshes_ex26.py`"
+msgstr ""
+
+# 2345c457190f43888ddecd3a2b12558a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:398
+msgid "Split bi-quadratic into linear"
+msgstr ""
+
+# ede71e5407594b6197cb58e6b1c92ed4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:402
+msgid "``split_biquad.py``"
+msgstr ""
+
+# 57fa3126ba154d68acfd6079690d5e3d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst:408
+msgid ":download:`../../../examples/split_biquad.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_notebook_smesh.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_notebook_smesh.po
new file mode 100644 (file)
index 0000000..61a6348
--- /dev/null
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 4e9993722e1649209e71f7d58df0c727
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst:6
+msgid "Using SALOME NoteBook"
+msgstr ""
+
+# 3ef41e73f8bb4aa8acc925fdf9579609
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst:11
+msgid "Notebook Smesh"
+msgstr ""
+
+# b30507833c0642d5a57fcfd094ffd345
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst:15
+msgid "``notebook_smesh.py``"
+msgstr ""
+
+# 19ab428fafa443aa83e77dd359b6c74a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst:21
+msgid ":download:`../../../examples/notebook_smesh.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po
new file mode 100644 (file)
index 0000000..af7456b
--- /dev/null
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7db5116cadad4c5d8ef9c5b1562f3dd0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst:5
+msgid "Use Extrusion 3D meshing algorithm"
+msgstr ""
+
+# 59d16afb08774f12bf587dcb9abeb044
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst:10
+msgid "``prism_3d_algo.py``"
+msgstr ""
+
+# 4b2c1b045b1149e3933960789e9d33f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst:16
+msgid ":download:`../../../examples/prism_3d_algo.py`"
+msgstr ""
+
+# dbe9fc1e748e455b8069f3c2ef87c23b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_prism_3d_algo.rst:18
+msgid "The result geometry and mesh is shown below"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_quality_controls.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_quality_controls.po
new file mode 100644 (file)
index 0000000..af13b95
--- /dev/null
@@ -0,0 +1,359 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 79e35e7183f44391bd0127332a78edfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:5
+msgid "Quality Controls"
+msgstr ""
+
+# 4ce27f26de8842b5882924b1323f02f0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# 13768e85664a4fbc9881a3b17ed9ca05
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:13
+msgid "Free Borders"
+msgstr ""
+
+# 784ab797573c410fafb9fac67dc78051
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:17
+msgid "``quality_controls_ex01.py``"
+msgstr ""
+
+# fe45863436994e299ea06bcbfe306d6a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:23
+msgid ":download:`../../../examples/quality_controls_ex01.py`"
+msgstr ""
+
+# 3697f0194b364c83b756020ca6fb1804
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:29
+msgid "Borders at Multiconnection"
+msgstr ""
+
+# 92041fa12d294bd595c2c941ffad513f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:33
+msgid "``quality_controls_ex02.py``"
+msgstr ""
+
+# 1e7eaf4082714e01a1aeaa620a0fe01a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:39
+msgid ":download:`../../../examples/quality_controls_ex02.py`"
+msgstr ""
+
+# 8f3f90612ac645d39883bd1eb3fb30c7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:45
+msgid "Length 1D"
+msgstr ""
+
+# ecf20a9ecb9c4fcda965d671b55228fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:49
+msgid "``quality_controls_ex03.py``"
+msgstr ""
+
+# 6bc7e3d4d48b45b5b436431a5bec19cc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:55
+msgid ":download:`../../../examples/quality_controls_ex03.py`"
+msgstr ""
+
+# d9f495d0a4464f11a9d256e46d45077d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:60
+msgid "Free Edges"
+msgstr ""
+
+# e5accfde373a4e2da11426532b5856a7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:64
+msgid "``quality_controls_ex04.py``"
+msgstr ""
+
+# ab630a0aa6fb404d87ed3bc702d050fd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:70
+msgid ":download:`../../../examples/quality_controls_ex04.py`"
+msgstr ""
+
+# 33edc58357a54da4b3d21406a4741ec6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:75
+msgid "Free Nodes"
+msgstr ""
+
+# 5ac5533032ef41f3974884acac5237c8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:79
+msgid "``quality_controls_ex05.py``"
+msgstr ""
+
+# b41c2828c4d24907a9f5a295b98b6f38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:85
+msgid ":download:`../../../examples/quality_controls_ex05.py`"
+msgstr ""
+
+# c613dab5d0094c8a83696ffcc0be8137
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:90
+msgid "Free Faces"
+msgstr ""
+
+# 9c4dc5aebc9d4a5c83c0f0c4b2e1ed71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:94
+msgid "``quality_controls_ex06.py``"
+msgstr ""
+
+# ba6f37b8eb7c41498d9e8271516a59e2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:100
+msgid ":download:`../../../examples/quality_controls_ex06.py`"
+msgstr ""
+
+# cf887f0dfa12482699950d6b3bb5b489
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:105
+msgid "Bare border faces"
+msgstr ""
+
+# e9b4af9d5633486483b4581effe13ae1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:109
+msgid "``quality_controls_ex07.py``"
+msgstr ""
+
+# 421b24a8d0314244819cf31b2ba0df93
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:115
+msgid ":download:`../../../examples/quality_controls_ex07.py`"
+msgstr ""
+
+# e186909d87774c88b5fa8b58f4757531
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:120
+msgid "Bare border volumes"
+msgstr ""
+
+# 346b907637574b70850ba0187a54856a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:124
+msgid "``quality_controls_ex08.py``"
+msgstr ""
+
+# ca2ca668a94b4fdf84534f6f73a8e482
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:130
+msgid ":download:`../../../examples/quality_controls_ex08.py`"
+msgstr ""
+
+# a389f8939d7349ae8a414b546001eacc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:135
+msgid "Over-constrained faces"
+msgstr ""
+
+# b2272c5024894b84815d4244be43d178
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:139
+msgid "``quality_controls_ex09.py``"
+msgstr ""
+
+# f6711314bc0047cdbcb22ae22a025745
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:145
+msgid ":download:`../../../examples/quality_controls_ex09.py`"
+msgstr ""
+
+# 0d87bea8ab484e5fbb9d4b46165d14f3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:150
+msgid "Over-constrained volumes"
+msgstr ""
+
+# f9ee64a6c6804e86b31cc06dba160ea4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:154
+msgid "``quality_controls_ex10.py``"
+msgstr ""
+
+# cab30492fe664ee791dbe30414b25a15
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:160
+msgid ":download:`../../../examples/quality_controls_ex10.py`"
+msgstr ""
+
+# 5b75b5252edd4fbbbb236c8580b3b1de
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:165
+msgid "Length 2D"
+msgstr ""
+
+# 21bab48b6c384b9991ddc1a4a8b355c5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:169
+msgid "``quality_controls_ex11.py``"
+msgstr ""
+
+# f5021d6d120c49fc99f62e989a2b3599
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:175
+msgid ":download:`../../../examples/quality_controls_ex11.py`"
+msgstr ""
+
+# 431b0039fcb4463ea06170622fbe46b8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:181
+msgid "Borders at Multiconnection 2D"
+msgstr ""
+
+# 579da091c4ab45e7a67f51737e6a6a22
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:185
+msgid "``quality_controls_ex12.py``"
+msgstr ""
+
+# 773748f0ac774c37b85791ebaa103976
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:191
+msgid ":download:`../../../examples/quality_controls_ex12.py`"
+msgstr ""
+
+# 0ceaa76eff2d4ac18c5883cddfc2b476
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:196
+msgid "Area"
+msgstr ""
+
+# ba82af02297e417fa93d810f93e87b16
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:200
+msgid "``quality_controls_ex13.py``"
+msgstr ""
+
+# ac09692057fb491191406ddcc11916d5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:206
+msgid ":download:`../../../examples/quality_controls_ex13.py`"
+msgstr ""
+
+# ba175a6522794c8281355cc289b803c4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:211
+msgid "Taper"
+msgstr ""
+
+# 8c9c6c79352b477184b6ccd7adf3f847
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:215
+msgid "``quality_controls_ex14.py``"
+msgstr ""
+
+# 57171e329029469088e8aa018c3cfa24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:221
+msgid ":download:`../../../examples/quality_controls_ex14.py`"
+msgstr ""
+
+# c09aa0dda0f541d89a8da4725768169e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:226
+msgid "Aspect Ratio"
+msgstr ""
+
+# f207685150274592aec124e1bad1dc57
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:230
+msgid "``quality_controls_ex15.py``"
+msgstr ""
+
+# a718df3177fe4c939748b5b72acf45fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:236
+msgid ":download:`../../../examples/quality_controls_ex15.py`"
+msgstr ""
+
+# 43f52454c1d44983aaf12519eb39b8e8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:241
+msgid "Minimum Angle"
+msgstr ""
+
+# 5b4eb968388c4158bcccd8aca32ac97b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:245
+msgid "``quality_controls_ex16.py``"
+msgstr ""
+
+# d155445c01c4476a8d6bf73c3017ac1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:251
+msgid ":download:`../../../examples/quality_controls_ex16.py`"
+msgstr ""
+
+# f9fe7e4ee15645e9b6073ae8816dcce2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:256
+msgid "Warping"
+msgstr ""
+
+# 4f1675ddc859489e965531d752285526
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:260
+msgid "``quality_controls_ex17.py``"
+msgstr ""
+
+# edd793ad3f21412b8f77253b4b980e06
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:266
+msgid ":download:`../../../examples/quality_controls_ex17.py`"
+msgstr ""
+
+# 3a5139d6a0bf49b29d10f100cd96ae64
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:271
+msgid "Skew"
+msgstr ""
+
+# 62a3783633ba46da9f519209bb3c2705
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:275
+msgid "``quality_controls_ex18.py``"
+msgstr ""
+
+# f9544382e94c42cab5eeb4c9d549506c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:281
+msgid ":download:`../../../examples/quality_controls_ex18.py`"
+msgstr ""
+
+# a308653df1364d25838e9030a5f35f83
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:286
+msgid "Element Diameter 2D"
+msgstr ""
+
+# 75ca6180045b40b3bff2bcbdf3617331
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:290
+msgid "``quality_controls_ex19.py``"
+msgstr ""
+
+# e16559cbcea74e92b25fdc069a30b633
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:296
+msgid ":download:`../../../examples/quality_controls_ex19.py`"
+msgstr ""
+
+# 8b48cb86d5e34dde9a2d4414626e19b3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:301
+msgid "Aspect Ratio 3D"
+msgstr ""
+
+# e073edd069be4a5bbfd6267667a2d965
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:305
+msgid "``quality_controls_ex20.py``"
+msgstr ""
+
+# 426b4f7acc9b4d7798cb831383ed3595
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:311
+msgid ":download:`../../../examples/quality_controls_ex20.py`"
+msgstr ""
+
+# 0db14d711d0a47f788c3d16f49396926
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:316
+msgid "Volume"
+msgstr ""
+
+# 7ede37ac5a404c8080b9491960ce259d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:320
+msgid "``quality_controls_ex21.py``"
+msgstr ""
+
+# 6a96fbb599dd453f9eba8ff1be16ce24
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:326
+msgid ":download:`../../../examples/quality_controls_ex21.py`"
+msgstr ""
+
+# b41bc7c1334841aea8f91d8456a372f7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:331
+msgid "Element Diameter 3D"
+msgstr ""
+
+# 292ed9f29bba49018744a8a9e87493c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:335
+msgid "``quality_controls_ex22.py``"
+msgstr ""
+
+# 599768d716b2417ab5a7e0410353aa8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_quality_controls.rst:341
+msgid ":download:`../../../examples/quality_controls_ex22.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_transforming_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_transforming_meshes.po
new file mode 100644 (file)
index 0000000..0edf784
--- /dev/null
@@ -0,0 +1,224 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 29bf61a3b72547389506b6a4965bd37c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:5
+msgid "Transforming Meshes"
+msgstr ""
+
+# 57af2fd00488467fb00a9e03a72759c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:0
+msgid "`Table of contents`"
+msgstr ""
+
+# 1c60f8c47a3e4be98e503c34b554dc09
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:13
+msgid "Translation"
+msgstr ""
+
+# b878258a6bf448e1b9830f1c73f41637
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:17
+msgid "``transforming_meshes_ex01.py``"
+msgstr ""
+
+# 1766f2bf2ab24dc988ad390de07e89ad
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:23
+msgid ":download:`../../../examples/transforming_meshes_ex01.py`"
+msgstr ""
+
+# af8b339fa0fe4dc982b2796537a795db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:28
+msgid "Rotation"
+msgstr ""
+
+# 3e8063e2480b4f8ba76ec78c425f49dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:32
+msgid "``transforming_meshes_ex02.py``"
+msgstr ""
+
+# 9fe78b8a34c348d59749f25e7335d14c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:38
+msgid ":download:`../../../examples/transforming_meshes_ex02.py`"
+msgstr ""
+
+# aa586e69c42a4abd8923ddd1b7ab0cf0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:43
+msgid "Scale"
+msgstr ""
+
+# 3ae31c66014b45ad83a413a5c6235bdb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:47
+msgid "``transforming_meshes_ex03.py``"
+msgstr ""
+
+# 6493aa79b1714ac492c6850e4cfecbef
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:53
+msgid ":download:`../../../examples/transforming_meshes_ex03.py`"
+msgstr ""
+
+# 66e92a4ad2c84565b94a231fb7c5f32e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:58
+msgid "Symmetry"
+msgstr ""
+
+# 497ee5890c624291b06e090511967f8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:62
+msgid "``transforming_meshes_ex04.py``"
+msgstr ""
+
+# 5540f43535344d868236748555f493f5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:68
+msgid ":download:`../../../examples/transforming_meshes_ex04.py`"
+msgstr ""
+
+# eaea65b5483d45a89c341a5703e35a03
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:73
+msgid "Merging Nodes"
+msgstr ""
+
+# a1c5602d67184c2c971d7820782b32dd
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:77
+msgid "``transforming_meshes_ex05.py``"
+msgstr ""
+
+# 5d0bda0b10c343c99f7dbbca2224798a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:83
+msgid ":download:`../../../examples/transforming_meshes_ex05.py`"
+msgstr ""
+
+# 14edd06325a34255bce5f7a6a84d8b43
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:88
+msgid "Merging Elements"
+msgstr ""
+
+# 7910501187be43ad8347f57291429a5b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:92
+msgid "``transforming_meshes_ex06.py``"
+msgstr ""
+
+# c772435312ae4ec491cf1b0620c82f7a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:98
+msgid ":download:`../../../examples/transforming_meshes_ex06.py`"
+msgstr ""
+
+# 0dcc87a2f6ff443f834bd65409e3f0ea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:103
+msgid "Sew Meshes Border to Side"
+msgstr ""
+
+# e513c5cff88c4988b5b348e62e405230
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:107
+msgid "``transforming_meshes_ex07.py``"
+msgstr ""
+
+# 9c1952b3506047d18c737045e2ac7948
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:113
+msgid ":download:`../../../examples/transforming_meshes_ex07.py`"
+msgstr ""
+
+# 6d328da4f3e643cdaa0d3918489b374c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:118
+msgid "Sew Conform Free Borders"
+msgstr ""
+
+# a465d0a871a74164817c27b0f9221e2c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:122
+msgid "``transforming_meshes_ex08.py``"
+msgstr ""
+
+# bb8c800633044961980283b51ee5c778
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:128
+msgid ":download:`../../../examples/transforming_meshes_ex08.py`"
+msgstr ""
+
+# 5891f30fd4a54ff6b456551a455b870f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:133
+msgid "Sew Free Borders"
+msgstr ""
+
+# 20626fb04a77496fbd712257159998bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:137
+msgid "``transforming_meshes_ex09.py``"
+msgstr ""
+
+# c4a9a4507341432890f2792f0f7001c9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:143
+msgid ":download:`../../../examples/transforming_meshes_ex09.py`"
+msgstr ""
+
+# 9e70aa09d8274ba794836660edf208d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:148
+msgid "Sew Side Elements"
+msgstr ""
+
+# 76fe380dea9a4fa79d1e11790bd51f38
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:152
+msgid "``transforming_meshes_ex10.py``"
+msgstr ""
+
+# 016d984b3be4476bb71ae33174b0f927
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:158
+msgid ":download:`../../../examples/transforming_meshes_ex10.py`"
+msgstr ""
+
+# ed239c8e17e343f7956d9344959a9f07
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:163
+msgid "Duplicate nodes or/and elements"
+msgstr ""
+
+# 65dee1a957b646d4a17602e87ae626bf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:167
+msgid "``transforming_meshes_ex11.py``"
+msgstr ""
+
+# 10f039ec9f1b48eebe57b990c2304fa9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:173
+msgid ":download:`../../../examples/transforming_meshes_ex11.py`"
+msgstr ""
+
+# 5f67454206644f72825d645d1844ab73
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:178
+msgid "Create boundary elements"
+msgstr ""
+
+# 4bb99511ee02479cb382af3532557158
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:182
+msgid "``transforming_meshes_ex12.py``"
+msgstr ""
+
+# 6b7afe9a5e55413cb8b60ae64081928f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:188
+msgid ":download:`../../../examples/transforming_meshes_ex12.py`"
+msgstr ""
+
+# 5d157cdb1ae345e6a6108ab5fef97706
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:193
+msgid "Reorient faces"
+msgstr ""
+
+# fdccce5846f243c38659c5aed18b65ee
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:197
+msgid "``transforming_meshes_ex13.py``"
+msgstr ""
+
+# 4a4fc603eaef4c1c8c7b97fab58caf4f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst:203
+msgid ":download:`../../../examples/transforming_meshes_ex13.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_use_existing_faces.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_use_existing_faces.po
new file mode 100644 (file)
index 0000000..f5b434b
--- /dev/null
@@ -0,0 +1,47 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 951c6da30ad24b41a53bd5090cddd9e4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst:5
+msgid "Usage of \"Use Faces to be Created Manually\" algorithm"
+msgstr ""
+
+# 536bc28ccf7f4fe786270b527629af3a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst:7
+msgid ""
+"This sample demonstrates how to use **Use Faces to be Created Manually** "
+"algorithm, which is actually just a stub allowing to use your own 2D "
+"algorithm implemented in Python."
+msgstr ""
+
+# 2537c7e3239b4e27b40a16eeab20f448
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst:13
+msgid "``use_existing_faces.py``"
+msgstr ""
+
+# e89473b2cd0d482fba928f49c9c70c6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst:19
+msgid ":download:`../../../examples/use_existing_faces.py`"
+msgstr ""
+
+# 41d2468e00404babb8fc1036478c0796
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_use_existing_faces.rst:21
+msgid "Resulting mesh:"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_viewing_meshes.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_viewing_meshes.po
new file mode 100644 (file)
index 0000000..58095de
--- /dev/null
@@ -0,0 +1,54 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e75a6ef91ac6493c8cb144a6efc9b307
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:6
+msgid "Viewing Meshes"
+msgstr ""
+
+# 7c73b9aefc6e4c3bb0e04ee48fb5d8dc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:11
+msgid "Viewing Mesh Infos"
+msgstr ""
+
+# 1d849688136b4c2e869975603178269e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:16
+msgid "``viewing_meshes_ex01.py``"
+msgstr ""
+
+# b66d51960c8a44418ae0a7c91f579d72
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:22
+msgid ":download:`../../../examples/viewing_meshes_ex01.py`"
+msgstr ""
+
+# 425948694a794e66a8915f61cbbf3a8a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:28
+msgid "Find Element by Point"
+msgstr ""
+
+# 59a17b434af14d5380f3a2424e53b03f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:32
+msgid "``viewing_meshes_ex02.py``"
+msgstr ""
+
+# 3b8461917abd45b68fb272c988b4eaff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst:38
+msgid ":download:`../../../examples/viewing_meshes_ex02.py`"
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po
new file mode 100644 (file)
index 0000000..eac8cc8
--- /dev/null
@@ -0,0 +1,53 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 38a63190759e43b981ee92c725262d0a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:6
+msgid "How to work with objects from the GUI ?"
+msgstr ""
+
+# fbf19b7daf9f41af9041147012cfec6b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:8
+msgid ""
+"It is sometimes useful to work alternatively in the GUI of SALOME and in "
+"the Python Console. To fetch an object from the TUI simply type:"
+msgstr ""
+
+# 0f16302c8b0c4dc1916eb8f8088a68bf
+# 2d00179ccdd3445eac328efd38e46dc9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:18
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:27
+msgid "or"
+msgstr ""
+
+# 6b1b647955a643d9875eeb5893adcc13
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:37
+msgid "All the methods documented in these pages can then be used on myMesh"
+msgstr ""
+
+# 50f1a166cef847658f83228c303bd927
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst:39
+msgid ""
+"The first statement only gives you access to a reference to the object "
+"created via the GUI. But the methods available on this reference are not "
+"exactly the same as those documented in these help pages. This Python API"
+" is meant to be used on smesh.Mesh instances. That's why you'll have to "
+"create such an instance with the second statement."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po
new file mode 100644 (file)
index 0000000..b51f6c9
--- /dev/null
@@ -0,0 +1,114 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# f8042d07102047329268efb61e02b9a2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:5
+msgid "Uniting a set of triangles"
+msgstr ""
+
+# a6b547af1c8c4296adddfd3bf6849a03
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:7
+msgid ""
+"It is possible to unite many neighboring triangles into quadrangles by "
+"deletion of the common edge."
+msgstr ""
+
+# f039a145e7f2459ab878bae042d7ef71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:10
+msgid "**To union several triangles:**"
+msgstr ""
+
+# 6ee1069129ae4a4f8f46b2ac201ec417
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:12
+msgid ""
+"Select a mesh (and display it in the 3D Viewer if you are going to pick "
+"elements by mouse)."
+msgstr ""
+
+# 485bc385f58141c3a3a7560b2e06a6ce
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:13
+msgid ""
+"In the **Modification** menu select the **Union of triangles** item or "
+"click **\"Union of triangles\"** button in the tool-bar."
+msgstr ""
+
+# 1b121a3390c84d18baaac7eb0dd8f178
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:21
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 9fc7d11072d64e46b333e451a6c1b43c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:26
+msgid ""
+"**The main list** shall contain the triangles which will be united. You "
+"can click on a triangle in the 3D viewer and it will be highlighted. "
+"After that click the **Add** button and the ID of this triangle will be "
+"added to the list. To remove a selected element or elements from the list"
+" click the **Remove** button. The **Sort** button allows to sort the list"
+" of IDs. The **Filter** button allows to apply a definite "
+":ref:`filtering_elements` to selection of triangles."
+msgstr ""
+
+# 092a1e4d360445b09db5d8c37251412f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:27
+msgid ""
+"**Apply to all** radio button allows to apply the operation to all "
+"triangles of the selected mesh."
+msgstr ""
+
+# e7eb65c04f0f444295a0c69df326a9b7
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:28
+msgid "**Preview** provides a preview in the viewer."
+msgstr ""
+
+# 8fb609e2e5db4de6bd2cbf4d0f5526fc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:29
+msgid ""
+"**Criterion** menu allows to choose a quality criterion, which will be "
+"optimized to select triangles to unite."
+msgstr ""
+
+# f84bc27ba947439c9e4d5c378e3b2b79
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:30
+msgid ""
+"**Select from** set of fields allows to choose a sub-mesh or an existing "
+"group whose triangle elements then can be added to the list."
+msgstr ""
+
+# 08c9b313413c4804b0bfdbc252be2301
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:32
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm the "
+"operation."
+msgstr ""
+
+# 57153b5d99ab4d89af9d593e0402fe3e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:34
+msgid ""
+"If some selected triangle elements have no adjacent edges with one of the"
+" others, the operation on these elements shall take no effect."
+msgstr ""
+
+# 28a06926cf8d49ec89524b0c68e54bfc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst:49
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_uniting_set_of_triangles`"
+" operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_two_triangles.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_two_triangles.po
new file mode 100644 (file)
index 0000000..e70b866
--- /dev/null
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d10d95c85acc44b59aa60cc145c274f1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:5
+msgid "Uniting two triangles"
+msgstr ""
+
+# 7efb4f33b07c4d7c9b96666b50332748
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:7
+msgid ""
+"In MESH you can union two neighboring triangles by deletion of the common"
+" edge."
+msgstr ""
+
+# 0a773ec39a8040e7b6431f0bac5d7e8b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:9
+msgid "**To unite two triangles:**"
+msgstr ""
+
+# 9cd5777e6184434cb5434d682eb64c97
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:11
+msgid ""
+"From the **Modification** menu choose the **Union of two triangles** item"
+" or click **\"Union of two triangles\"** button in the tool-bar."
+msgstr ""
+
+# cc9997ad658044a49b45e7072e7f2702
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:19
+msgid "The following dialog box shall appear:"
+msgstr ""
+
+# 4b000ffa624b43e290c100700553f0ff
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:25
+msgid ""
+"Enter IDs of nodes forming the required edge in the **Edge** field (a "
+"couple of node IDs separated by a dash) or select this edge in the 3D "
+"viewer."
+msgstr ""
+
+# c3db06c8f1e44be388aec4b9659acea1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:26
+msgid "Click the **Apply** or **Apply and Close** button."
+msgstr ""
+
+# 34c5c46c61514edca75e1ef4a0ed3dd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/uniting_two_triangles.rst:41
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_uniting_two_triangles` "
+"operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/use_existing_algos.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/use_existing_algos.po
new file mode 100644 (file)
index 0000000..81481e6
--- /dev/null
@@ -0,0 +1,140 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 9256cdd25833423fb9b94c5a521e371c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:5
+msgid "Import Elements from Another Mesh Algorithms"
+msgstr ""
+
+# b62cc448e48e488c9f614f558da02dd9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:7
+msgid ""
+"**Import Elements from Another Mesh** algorithms allow to define the mesh"
+" of a geometrical object by importing suitably located mesh elements from"
+" another mesh. The mesh elements to import from the other mesh should be "
+"contained in groups. If several groups are used to mesh the same "
+"geometry, validity of nodal connectivity of result mesh must be assured "
+"by connectivity of the source mesh; no geometrical checks are performed "
+"to merge different nodes at same locations."
+msgstr ""
+
+# f7645fc4bea24180b90d6cbb03fb814f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:16
+msgid ""
+"The source elements must totally cover the meshed geometry. The source "
+"elements lying partially over the geometry will not be used."
+msgstr ""
+
+# e622165086af4b8ba48b7a0dde755f4e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:19
+msgid ""
+"These algorithms can be used to mesh a very complex geometry part by "
+"part, by storing meshes of parts in files and then fusing them together "
+"using these algorithms."
+msgstr ""
+
+# a156c398751b42b9814c87b3f9445ebf
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:24
+msgid ""
+"**Import 1D Elements from Another Mesh** algorithm allows to define the "
+"mesh of a geometrical edge (or group of edges) by importing mesh edges "
+"contained in a group (or groups) from another mesh."
+msgstr ""
+
+# c7834efef670431bbf92f4eaf9a15904
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:28
+msgid ""
+"To apply this algorithm select the edge to be meshed (indicated in the "
+"field **Geometry** of **Create mesh** dialog box), **Import 1D Elements "
+"from Another Mesh** in the list of 1D algorithms and click the **\"Add "
+"Hypothesis\"** button. The following dialog box will appear:"
+msgstr ""
+
+# 7354dcaf5146486895b6841595b4c80c
+# 341cf4e0e75141898ae652b38faf121a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:37
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:53
+msgid "In this dialog box you can define"
+msgstr ""
+
+# cdab0f64ef27485db96a543b3c67547e
+# 20b666eb31aa426f90c95d45776c3afb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:39
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:55
+msgid "The **Name** of the algorithm."
+msgstr ""
+
+# 615d8cf66218471a8868fbe1a949912b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:40
+msgid "The **Groups of Edges** to import 1D elements from."
+msgstr ""
+
+# 62b46b2d47b14f1db122657a9b4e4e8d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:41
+msgid ""
+"**To copy mesh** checkbox allows to import not only the edges of the "
+"selected **Groups of Edges**, but the whole source mesh. In this case "
+"**To copy groups** checkbox allows to create the same groups as in the "
+"imported source mesh."
+msgstr ""
+
+# 0e44000afb5f46f9a60851e12e7d75ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:44
+msgid ""
+"**Import 1D-2D Elements from Another Mesh** algorithm allows to define "
+"the mesh of a geometrical face (or group of faces) by importing mesh "
+"faces contained in a group (or groups) from another (or this) mesh. 1D "
+"elements on the boundary of the geometrical face (if not yet present) are"
+" also created by the algorithm in conformity with the created 2D "
+"elements."
+msgstr ""
+
+# 734d46eb23684f30830e906650b59021
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:46
+msgid ""
+"To apply this algorithm select the geometrical face to be meshed "
+"(indicated in the field **Geometry** of **Create mesh** dialog box), "
+"**Import 1D-2D Elements from Another Mesh** in the list of 2D algorithms "
+"and click the **\"Add Hypothesis\"** button."
+msgstr ""
+
+# 917c2f04ada84399b9596a4fcc837a6f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:48
+msgid "The following dialog box will appear:"
+msgstr ""
+
+# 2e682626bbaf491cbd85c2068ca0cf28
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:56
+msgid "The **Groups of Faces** to import 2D elements from."
+msgstr ""
+
+# 70466a59647642678446f260180f595a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:57
+msgid ""
+"**To copy mesh** checkbox allows to import not only the faces of the "
+"selected **Groups of Faces**, but the whole source mesh. In this case "
+"**To copy groups** checkbox allows to create the same groups as in the "
+"imported source mesh."
+msgstr ""
+
+# 405cfbf9b2154272a1a334322432d98c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/use_existing_algos.rst:60
+msgid "**See Also** a sample TUI Script of a :ref:`tui_import`."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po
new file mode 100644 (file)
index 0000000..d5d707b
--- /dev/null
@@ -0,0 +1,108 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# d1b42be93bda4c598dc059e9c97d1738
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:5
+msgid "Using SALOME NoteBook"
+msgstr ""
+
+# 7c57ab017ac74ff496bcfdc011b95330
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:7
+msgid ""
+"**SALOME NoteBook** allows defining variables to be used for creation and"
+" modification of objects."
+msgstr ""
+
+# 7b838238936644fd9b00305a1c19acca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:22
+msgid "The following limitations on the use of variables still exist:"
+msgstr ""
+
+# ca33bdf6af554545a419c6a12db08048
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:24
+msgid ""
+":ref:`radial_prism_algo_page` hypothesis - parametrical values are "
+"correctly applied, but they are not restored after \"Update study\" "
+"operation."
+msgstr ""
+
+# cf92e0e4ac844ac2bf2b581b94a28f48
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:25
+msgid ""
+":ref:`a1d_meshing_hypo_page` hypothesis, Distribution with Table Density "
+"and Distribution with Analytic Density - parametrical values are not "
+"applicable."
+msgstr ""
+
+# 8e23f202b73c4dbbbd9535fd1a9263fa
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:26
+msgid ""
+":ref:`translation_page` dialog box, default mode (translation by two "
+"points) - parametrical values are correctly applied, but they are not "
+"restored after \"Update study\" operation."
+msgstr ""
+
+# e84280726e0149aab30e3a2705203e12
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:27
+msgid ""
+":ref:`merging_nodes_page` dialog box - parametrical value (tolerance of "
+"coincident nodes detection) is correctly applied, but it is not restored "
+"after \"Update study\" operation."
+msgstr ""
+
+# ba5deecaf83c41b99bfadd30e03f3f30
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:28
+msgid ""
+":ref:`revolution_page` dialog box - it is impossible to use the angle of "
+"revolution as \"total angle\" if it is defined as variable."
+msgstr ""
+
+# d108675600ea43928a7d2dbecaaf9edc
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:29
+msgid ""
+":ref:`extrusion_along_path_page` dialog box - it is impossible to use "
+"\"Linear variation of the angles\" mode if at least one of those angles "
+"is defined as variable."
+msgstr ""
+
+# 1e2fcf17f43b4aedb6b836d82e796ac9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:30
+msgid ""
+":ref:`pattern_mapping_page` dialog box - parametrical values (indices of "
+"nodes) are correctly applied, but they are not restored after \"Update "
+"study\" operation."
+msgstr ""
+
+# 24c36e2739cd433f863159d254d84480
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:31
+msgid ":ref:`clipping_page` dialog box."
+msgstr ""
+
+# f81d6249e89243e38067caf0ff72c715
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:32
+msgid "**Properties** dialog box."
+msgstr ""
+
+# 8006786080b645a9a6dce82f7c55c761
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst:35
+msgid ""
+"Our **TUI Scripts** provide you with useful examples of "
+":ref:`tui_notebook_smesh` ."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_operations_on_groups.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_operations_on_groups.po
new file mode 100644 (file)
index 0000000..00de27c
--- /dev/null
@@ -0,0 +1,196 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 3c64b29aedd340f9a4c8a9d78aa0f748
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:5
+msgid "Boolean operations on groups"
+msgstr ""
+
+# f50fb2f27b1f4af4a4faacb8d02b5544
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:7
+msgid ""
+"In MESH you can perform some Boolean operations on groups, which belong "
+"to one and the same mesh."
+msgstr ""
+
+# 97f7ab96b0304eccbced874f127391d2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:9
+msgid ":ref:`union_anchor`"
+msgstr ""
+
+# a932b7ac781d40d0a5edb2c7df941737
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:10
+msgid ":ref:`intersection_anchor`"
+msgstr ""
+
+# a13e1bae8b714ddc98cd380b550379d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:11
+msgid ":ref:`cut_anchor`"
+msgstr ""
+
+# 00b67383c6404267952838b0f80e8b42
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:19
+msgid "Union of groups"
+msgstr ""
+
+# a52b1ab225b34f25a71659332c4da5d1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:21
+msgid ""
+"This operation allows to create a new group in such a way that all mesh "
+"elements that are present in the initial groups will be added to the new "
+"one."
+msgstr ""
+
+# 60200864f53047deb846f4787ffe9e2d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:25
+msgid "**To union groups:**"
+msgstr ""
+
+# 79500d1f6301426bbd36582a768b6a4a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:27
+msgid ""
+"In the **Mesh** menu select the **Union Groups** item. The following "
+"dialog box will appear:"
+msgstr ""
+
+# 1fca07005fb24ffd9028c7f192a3fc07
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:32
+msgid ""
+"In this dialog box you should specify the name of the resulting group and"
+" set of groups which will be united."
+msgstr ""
+
+# ddca19009642466bb8d275f0ac369bac
+# ec798971cec54ab08d347741b3caaed4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:34
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:81
+msgid "For example, we have two groups Group1 and Group2."
+msgstr ""
+
+# c360882c3c704fe89dfc555ed6126cdb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:36
+msgid "The result of their **Union** will be Group12:"
+msgstr ""
+
+# e1ddabadb62a4b78a561b88682d45a9f
+# 09a76bcc37364e9d9abd993db5e647c9
+# fbc7d6720ee243639f61dce988a0cbe9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:56
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:103
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:149
+msgid ""
+"Click the **Apply** or **Apply and Close** button to confirm creation of "
+"the group."
+msgstr ""
+
+# 759d086d5318424b8888a2d800212d80
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:59
+msgid ""
+"**See Also** a sample TUI Script of a :ref:`tui_union_of_groups` "
+"operation."
+msgstr ""
+
+# 3917c96854dd4c49a91c7db5f8ebf6ca
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:66
+msgid "Intersection of groups"
+msgstr ""
+
+# c80b258632c84841840f4a316b526287
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:68
+msgid ""
+"This operation allows to create a new group in such a way that all mesh "
+"elements that are present in all initial groups together are added to the"
+" new one."
+msgstr ""
+
+# 79a6317ac7be460c90d3dd02129ce6e4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:72
+msgid "**To intersect groups:**"
+msgstr ""
+
+# 310f0effcfd94de1b16574d971d7501b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:74
+msgid ""
+"In the **Mesh** menu select the **Intersect Groups** item. The following "
+"dialog box will appear:"
+msgstr ""
+
+# a67d12fd3dbf495596b81b85ca9a9411
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:79
+msgid ""
+"In this dialog box you should specify the name of the resulting group and"
+" set of groups which will be intersected."
+msgstr ""
+
+# 83b1d3fb99a64493b25546c6b451cd71
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:83
+msgid "The result of their **Intersection** will be Group12a:"
+msgstr ""
+
+# bf8e4ce41e284392a026fc8aac537630
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:106
+msgid ""
+"**See Also** a sample TUI Script of an :ref:`tui_intersection_of_groups` "
+"operation."
+msgstr ""
+
+# 168729d4492b41f1a2eeb714b66e945f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:113
+msgid "Cut of groups"
+msgstr ""
+
+# 8df8d15c9cba4785ad039fe6971f1106
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:115
+msgid ""
+"This operation allows to create a new group in such a way that all mesh "
+"elements that are present in the main groups but are absent in the tool "
+"groups are added to the new one."
+msgstr ""
+
+# b77c4cdfb3fa4a43930a82ae5ec9af26
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:119
+msgid "**To cut groups:**"
+msgstr ""
+
+# 9ec410a81f794af8b0e54b97fa27f35a
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:121
+msgid ""
+"In the **Mesh** menu select the **Cut Groups** item. The following dialog"
+" box will appear:"
+msgstr ""
+
+# 5c2b88f6382e45e3a960e5617beb146d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:126
+msgid ""
+"In this dialog box you should specify the name of the resulting group and"
+" groups which will be cut."
+msgstr ""
+
+# c7109abb6f4d4929993eaaf8637c2b94
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:128
+msgid ""
+"For example, we have two groups Group1 and Group2. The result of their "
+"**Cut** will be Group12b:"
+msgstr ""
+
+# f96cb4ad1b484af299485dd291e98a6c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/using_operations_on_groups.rst:152
+msgid "**See Also** a sample TUI Script of a :ref:`tui_cut_of_groups` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/viewing_meshes_overview.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/viewing_meshes_overview.po
new file mode 100644 (file)
index 0000000..750956d
--- /dev/null
@@ -0,0 +1,226 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# e7c7f397cdb442788b36234ecaed36b4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:5
+msgid "Viewing meshes"
+msgstr ""
+
+# 5f14544f8bb44215afc7cb6f42776be1
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:7
+msgid ""
+"By default a just :ref:`compute_anchor` mesh will be automatically "
+"displayed in the **VTK 3D Viewer**. (You can switch off "
+":ref:`automatic_update_pref` preference parameter to prevent this.) Click"
+" **Display only** to hide all other objects at the same time."
+msgstr ""
+
+# e95a2faec0314177b13db4bcab3f6fe3
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:13
+msgid ""
+"**VTK 3D Viewer** is described in detail in the documentation on **GUI "
+"module**."
+msgstr ""
+
+# fff07c0bb4284d2eaad08e009593310f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:15
+msgid ""
+"Use the following :ref:`mesh_preferences_page` to adjust how the mesh is "
+"displayed by default:"
+msgstr ""
+
+# 0e213d2e130042c4b92200c06267346d
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:18
+msgid ":ref:`automatic_update_pref`"
+msgstr ""
+
+# 0bf29579e79a46328055da15ee273959
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:19
+msgid ":ref:`display_mode_pref`"
+msgstr ""
+
+# facc77f7e1e14c09942ca891bca1384b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:20
+msgid ":ref:`quadratic_2d_mode_pref`"
+msgstr ""
+
+# d1ad0b78f4944527824fd60862d10e00
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:21
+msgid "All parameters of :ref:`mesh_tab_preferences` Preferences dialog."
+msgstr ""
+
+# 1237883ac6e54d53a547928795463b49
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:23
+msgid ""
+"After the mesh has appeared in the Viewer, you can select it with left "
+"mouse click and  get information about it, change its presentation "
+"parameters and access to other useful options by right-clicking on the "
+"selected mesh."
+msgstr ""
+
+# 14c6a193f554414ebd2638642e4ff504
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:32
+msgid "**Rename** - allows to rename the object in the Object browser."
+msgstr ""
+
+# 13ebbe480dcb4b4ea5e16fe031657d92
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:33
+msgid "**Hide all** - allows to hide all objects in the viewer."
+msgstr ""
+
+# 519780a62b6d49389742500dfab6143e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:34
+msgid ""
+"**Update** - refreshes the presentation of your mesh in the Object "
+"Browser, applying all recent changes."
+msgstr ""
+
+# 5caead58cb3143509df4049037609bd9
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:35
+msgid ":ref:`mesh_infos_page` -  provides information about the mesh."
+msgstr ""
+
+# 421fa002af414f40a7a8d2519563f734
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:36
+msgid ""
+":ref:`find_element_by_point_page` - allows to find all mesh elements, to "
+"which belongs a point with the given coordinates."
+msgstr ""
+
+# aafb55a6a8e343e18109cc71a79d0786
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:37
+msgid ""
+"**Auto Color** - switch on / off auto-assigning colors for the groups. If"
+" switched on, a default color of a new group in "
+":ref:`creating_groups_page` dialog is chosen randomly."
+msgstr ""
+
+# 054e966cbb504ec1858f0687e9b67f2f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:38
+msgid ""
+":ref`:`numbering_page` - allows to display the ID numbers of all meshing "
+"elements or nodes composing your mesh in the viewer."
+msgstr ""
+
+# e14312ec063d4773952123a9b4b3fc1e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:39
+msgid ""
+":ref:`display_mode_page` - allows to select between Wireframe, Shading "
+"and Nodes presentation."
+msgstr ""
+
+# ed4f7f74007c4d9db01e98c8097d0939
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:40
+msgid ""
+":ref:`display_entity_page` - allows to display entities by types (Faces, "
+"Edges, Volumes etc.)."
+msgstr ""
+
+# 99b9dcc92dcb43ed911a77c3ea1df36f
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:45
+msgid "Quadratic 2D"
+msgstr ""
+
+# cb976db163fb44aea0b89fcf211d1487
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:47
+msgid ""
+"**2D Quadratic** - allows to select between the representation of "
+"quadratic edges as broken **lines** or as **arcs**. A default "
+"representation can be set in :ref:`quadratic_2d_mode_pref`. Arc "
+"representation applies to 1D and 2D elements only."
+msgstr ""
+
+# 3c1dd7b5911c4874b0e8a7e479425439
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:48
+msgid ""
+"**Orientation of faces** - shows vectors of orientation of faces of the "
+"selected mesh. The orientation vector is shown for each 2D mesh element "
+"and for each free facet of a 3D mesh element. The vector direction is "
+"calculated by the first three nodes of the face produced by vectors n1-n2"
+" and n1-n3."
+msgstr ""
+
+# 6d6af7afac6542048d0c655f84303764
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:49
+msgid ""
+":ref:`colors_size_page` - allows to define several visual properties, "
+"including color of elements, shrink size, ..."
+msgstr ""
+
+# 5089d61f57bf403a946be3592a4ad831
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:50
+msgid ""
+":ref:`transparency_page` - allows to change the transparency of mesh "
+"elements."
+msgstr ""
+
+# 3175b5d13d394940a12af858fe3dd9db
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:51
+msgid ""
+":ref:`quality_page` - graphically presents various information about the "
+"mesh."
+msgstr ""
+
+# 990f093d5a0243c492b2a3c91593d3cb
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:52
+msgid "**Hide** - allows to hide the selected mesh from the viewer."
+msgstr ""
+
+# c638a54c583f4a1f97d1977841fdc04b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:53
+msgid ""
+"**Show Only** - allows to display only the selected mesh, hiding all "
+"others from the viewer."
+msgstr ""
+
+# 378028db9d4c4652b324b6c310370de2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:54
+msgid ""
+":ref:`clipping_page` - allows to create cross-sections of the displayed "
+"objects."
+msgstr ""
+
+# 75070b04c6a14b1f97ec58ebffd04bd5
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:55
+msgid ""
+"**Dump view** - exports an object from the viewer in bmp, png or jpeg "
+"image format."
+msgstr ""
+
+# a60f3cf4bcf84fecb6d8f91134e48cd6
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:56
+msgid ""
+"**Change background** - allows to redefine the background color. By "
+"default it is black."
+msgstr ""
+
+# 000b4de0267840d894e6a2d05565a989
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:57
+msgid ""
+"**View Operations** - allows to show/hide the  visualization toolbar in "
+"the Viewer window."
+msgstr ""
+
+# 11c21e53710b45a081a9e40626ea9a14
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst:58
+msgid ""
+"**Recording Operations** - allows to show/hide the recording toolbar in "
+"the Viewer window."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/volume.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/volume.po
new file mode 100644 (file)
index 0000000..9a80a7f
--- /dev/null
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 57f538dc718c4981baddee8d1fb421c0
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:5
+msgid "Volume"
+msgstr ""
+
+# 2bc915cd665048fe82b3c2be923c4e8c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:7
+msgid ""
+"**Volume** mesh quality criterion reflects the volume of meshes of a 3D "
+"object."
+msgstr ""
+
+# 6e8fba6a124a4dde9388c78009158e51
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:10
+msgid "**To apply the Volume quality criterion to your mesh:**"
+msgstr ""
+
+# c7307510f76a42cb93a8806a67e3fe2e
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:12
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 6ba3f8b7613f421ea7ae919acea450fe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:13
+msgid ""
+"Choose **Controls > Volume Controls > Volume** or click **\"Volume\"** "
+"button in the toolbar."
+msgstr ""
+
+# 3048375053e34eaab6e3aa5468e4edd2
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:21
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# 4813b79376244712b5a529d6d01e56ea
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/volume.rst:27
+msgid "**See Also** a sample TUI Script of a :ref:`tui_volume` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/warping.po b/doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/warping.po
new file mode 100644 (file)
index 0000000..da4831a
--- /dev/null
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C)
+# This file is distributed under the same license as the Mesh package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mesh 8.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-12-11 15:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.0\n"
+
+# 7336840f1de848839bb89abfd5044c58
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:5
+msgid "Warping"
+msgstr ""
+
+# 2b1e730a5eed435082c616cfb92d2172
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:10
+msgid ""
+"**Warping** indicates that a face is not planar and is applied only to 2D"
+" elements with 4 nodes. This quality control criterion is based on a "
+"projection plane created by:"
+msgstr ""
+
+# f638d6044b5c498f8800f89640fd8cfe
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:14
+msgid "bisecting the four element edges,"
+msgstr ""
+
+# 15c2ff7a765d4459aded3ffd6cddd735
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:15
+msgid ""
+"creating a point on the plane at the vector average of the corners, where"
+" the x-axis extends from the point to the bisector on edge 2."
+msgstr ""
+
+# e628a39d26eb4be1b03bd8136bfe5e01
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:17
+msgid ""
+"The plane normal is in the direction of the cross product of the x-axis "
+"and the vector from the origin to the bisector of edge 3. Every corner of"
+" the quad will then be a distance *h* from the plane. The length of each "
+"half edge is measured and the shortest length is assigned *l*. The warp "
+"angle is the arcsine of the ratio of the projection height *h* to the "
+"half edge length *l*."
+msgstr ""
+
+# bba359515cd74635a97441380386a30c
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:24
+msgid "**To apply the Warping quality criterion to your mesh:**"
+msgstr ""
+
+# 97ad951c40ad4b3698c539ad51522ee4
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:26
+msgid "Display your mesh in the viewer."
+msgstr ""
+
+# 1b2805c25e224aed8c110b9b37b5f6f8
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:28
+msgid ""
+"Choose **Controls > Face Controls > Warping Angle** or click **\"Warping "
+"angle\"** button of the toolbar."
+msgstr ""
+
+# 57c13746701e495da2fa2e17be8c850b
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:36
+msgid ""
+"Your mesh will be displayed in the viewer with its elements colored "
+"according to the applied mesh quality control criterion:"
+msgstr ""
+
+# e6e8740c285548c6a8aedc9af2c97139
+#: ../../../../../../../SRC/SMESH_SRC/doc/salome/gui/SMESH/input/warping.rst:42
+msgid "**See Also** a sample TUI Script of a :ref:`tui_warping` operation."
+msgstr ""
+
diff --git a/doc/salome/gui/SMESH/merge_mesh_class.py b/doc/salome/gui/SMESH/merge_mesh_class.py
new file mode 100644 (file)
index 0000000..19ce22f
--- /dev/null
@@ -0,0 +1,59 @@
+import inspect
+import sys
+from types import FunctionType
+import copy
+
+ORIGIN_MODULE_SUFFIX = "_origin"
+DYNAMIC_MODULE_SUFFIX = "_dynamic"
+
+
+def main(module_name, output_file = "smeshBuilder.py"):
+    oringin_module_name = module_name + ORIGIN_MODULE_SUFFIX
+    dynamic_module_name = module_name + DYNAMIC_MODULE_SUFFIX
+    try:
+        exec( "import %s" % oringin_module_name )
+        exec( "origin_module = %s" % oringin_module_name )
+        origin_module_lines = inspect.getsourcelines( origin_module )[0]
+        origin_meshClass_lines = inspect.getsourcelines(origin_module.Mesh)[0]
+        origin_module_text = "".join( origin_module_lines )
+        origin_meshClass_text = "".join( origin_meshClass_lines )
+        
+        exec( "import %s" % dynamic_module_name )
+        exec( "dynanmic_module = %s" % dynamic_module_name )
+        dynanmic_meshClass = dynanmic_module.Mesh
+    
+        new_meshClass_lines = copy.copy(origin_meshClass_lines)
+        # remove end of class 'pass'
+        if new_meshClass_lines[-1].find("pass") > 0:
+            new_meshClass_lines.pop()
+            
+        dynanmic_meshClass_methods = [x for x, y in dynanmic_meshClass.__dict__.items() if type(y) == FunctionType]
+        for method in dynanmic_meshClass_methods:
+            exec( "method_lines = inspect.getsourcelines(dynanmic_module.Mesh.%s)[0]"  % method)
+            new_meshClass_lines+=method_lines
+            pass
+        new_meshClass_text = "".join( new_meshClass_lines )            
+
+        f = open( output_file, "w" )
+        
+        f.write( origin_module_text.replace( origin_meshClass_text, new_meshClass_text) )
+        f.close()        
+    except Exception as e:
+        print(e)
+        pass
+    pass
+
+
+if __name__ == "__main__":
+    import optparse
+    parser = optparse.OptionParser(usage="%prog [options] modulename")
+    h  = "Output file (smeshBuilder.py by default)"
+    parser.add_option("-o", "--output", dest="output",
+                      action="store", default="smeshBuilder.py", metavar="file",
+                      help=h)
+
+    (options, args) = parser.parse_args()
+
+    if len( args ) < 1: sys.exit("Module name is not specified")
+    main( args[0], options.output )
+    pass
diff --git a/doc/salome/gui/SMESH/static/footer.html b/doc/salome/gui/SMESH/static/footer.html
deleted file mode 100755 (executable)
index 7cf11fe..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- HTML footer for doxygen 1.8.3.1-->
-<!--BEGIN GENERATE_TREEVIEW-->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
-  <ul>
-    $navpath
-    <li class="footer">
-      Copyright &copy; 2007-2017  CEA/DEN, EDF R&amp;D, OPEN CASCADE<br>
-      Copyright &copy; 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&amp;D, LEG, PRINCIPIA R&amp;D, BUREAU VERITAS<br>
-    </li>
-  </ul>
-</div>
-<!--END GENERATE_TREEVIEW-->
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/static/header.html.in b/doc/salome/gui/SMESH/static/header.html.in
deleted file mode 100755 (executable)
index 45674df..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- HTML header for doxygen 1.8.3.1-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen $doxygenversion"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="$relpath^jquery.js"></script>
-<script type="text/javascript" src="$relpath^dynsections.js"></script>
-$treeview
-$search
-$mathjax
-<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
-$extrastylesheet
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-
-<div id="titlearea"><div align="right"><div class="version">Version: @SALOMESMESH_VERSION@</div></div></div>
-<!-- end header part -->
diff --git a/doc/salome/gui/SMESH/static/header_py.html.in b/doc/salome/gui/SMESH/static/header_py.html.in
deleted file mode 100644 (file)
index e937979..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- HTML header for doxygen 1.8.3.1-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen $doxygenversion"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="$relpath^jquery.js"></script>
-<script type="text/javascript" src="$relpath^dynsections.js"></script>
-$treeview
-$search
-$mathjax
-<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
-$extrastylesheet
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-
-<div id="titlearea"><div align="right"><div class="version">Version: @SALOMESMESH_VERSION@</div></div></div>
-<div align="bottom-left"><a href=../index.html>Home</a></div>
-<!-- end header part -->
diff --git a/doc/salome/gui/SMESH/static/salome_extra.css b/doc/salome/gui/SMESH/static/salome_extra.css
deleted file mode 100644 (file)
index 3e8b838..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* The extra CSS for doxygen 1.8.3.1 */
-
-#titlearea {
-        background-image:url('head.png');
-        background-color: #175783;
-        border: 1px solid;
-        height: 80px;
-        background-repeat: no-repeat;
-       padding: 0px;
-       margin: 0px;
-       width: 99.9%;
-       border-bottom: 1px solid #5373B4;
-}
-
-div.version {
-       border:1px solid #0000FF;
-        color: #CCCCCC;
-       font-family: Arial, Helvetica, sans-serif;
-       font-size: 9pt;
-       text-align: center;
-       width:100px;
-       -moz-border-radius: 8px;
-       margin: 5px;
-}
-
-.navpath li.footer {
-       line-height:15px;
-       text-align: right;
-}
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/static/switchers.js.in b/doc/salome/gui/SMESH/static/switchers.js.in
new file mode 100644 (file)
index 0000000..8595b5c
--- /dev/null
@@ -0,0 +1,72 @@
+(function() {
+  'use strict';
+
+  // Parses versions in URL segments like:
+
+  var all_languages = {
+      'en': 'English',
+      'fr': 'French',
+  };
+
+  function build_language_select(current_language) {
+    var buf = ['<select>'];
+
+    $.each(all_languages, function(language, title) {
+      if (language == current_language)
+        buf.push('<option value="' + language + '" selected="selected">' +
+                 all_languages[current_language] + '</option>');
+      else
+        buf.push('<option value="' + language + '">' + title + '</option>');
+    });
+    buf.push('</select>');
+    return buf.join('');
+  }
+
+  function on_language_switch() {
+    var selected_language = $(this).children('option:selected').attr('value') + '/';
+    var url = window.location.href;
+
+    var current_language = language_segment_from_url(url);
+    var current_suffix = "";
+    if (current_language != "") {
+      current_suffix = "_";
+    } else {
+       current_language = "/";
+    }
+
+    var selected_suffix = "_";
+    if (selected_language == 'en/') { // Special 'default' case for english.
+      selected_language = '';
+      selected_suffix = "/";
+    }
+
+    var new_url = url.replace('/gui/SMESH' + current_suffix + current_language,
+                              '/gui/SMESH' + selected_suffix + selected_language);
+    if (new_url != url) {
+      window.location.href = new_url;
+    }
+  }
+
+  // Returns the path segment of the language as a string, like 'fr/'
+  // or '' if not found.
+  function language_segment_from_url(url) {
+    var language_regexp = '\/gui/SMESH_([a-z]{2}(?:-[a-z]{2})?/)';
+    var match = url.match(language_regexp);
+    if (match !== null)
+        return match[1];
+    return '';
+  }
+
+  $(document).ready(function() {
+    if(@BUILD_LANGUAGE_SWITCHER@) {
+       var release = DOCUMENTATION_OPTIONS.VERSION;
+       var language_segment = language_segment_from_url(window.location.href);
+       var current_language = language_segment.replace(/\/+$/g, '') || 'English';
+
+       var language_select = build_language_select(current_language);
+
+       $('.language_switcher_placeholder').html(language_select);
+       $('.language_switcher_placeholder select').bind('change', on_language_switch);
+    }
+  });
+})();
diff --git a/doc/salome/gui/SMESH/templates/layout.html b/doc/salome/gui/SMESH/templates/layout.html
new file mode 100644 (file)
index 0000000..94d467b
--- /dev/null
@@ -0,0 +1,30 @@
+{% extends "!layout.html" %}
+
+{% block rootrellink %}
+  <span class="language_switcher_placeholder">{{ language or 'English' }}</span>
+  {{ super() }}
+{% endblock %}
+
+{% block extrahead %}
+<script type="text/javascript" src="{{ pathto('_static/switchers.js', 1) }}"></script>
+{{ super() }}
+{% endblock %}
+
+{%- block sidebarlogo %}
+{{ super() }}
+{%-
+include "searchbox.html"
+%}
+<p/>
+{%- endblock %}
+{%- block sidebarsearch %}
+{%- endblock %}
+
+{%- block footer %}
+ <div class="footer">
+         &copy; Copyright 2007-2017, CEA/DEN, EDF R&amp;D, OPEN CASCADE
+         <br>
+         &copy; Copyright 2003-2007, OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&amp;D, LEG, PRINCIPIA R&amp;D, BUREAU VERITAS.
+ </div>
+ {{ super() }}
+{%- endblock %}
index 69c41d4d64a49f314ea73ef9f558ab4ef02afbb1..3e8e2ca2e40ad38299387ef2037f558090a93edf 100644 (file)
@@ -206,7 +206,7 @@ module SMESH
   {
     HYP_OK,
     HYP_MISSING,      // algo misses a hypothesis
-    HYP_CONCURENT,    // several applicable hypotheses
+    HYP_CONCURRENT,   // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
     HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
     HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
index 9e40dcb58a8dfb6823802a7995dd813fc548bfca..d0748bac7657f670f5d8838b01a0a2abb13d0d2f 100644 (file)
@@ -688,6 +688,13 @@ module SMESH
                                      in string         MeshName)
       raises (SALOME::SALOME_Exception);
 
+    SMESH_Mesh Offset(in SMESH_IDSource theObject,
+                      in double         Value,
+                      in boolean        CopyGroups,
+                      in string         MeshName,
+                      out ListOfGroups  Groups)
+      raises (SALOME::SALOME_Exception);
+
     void FindCoincidentNodes (in  double              Tolerance,
                               out array_of_long_array GroupsOfNodes,
                               in  boolean             SeparateCornersAndMedium)
@@ -874,7 +881,7 @@ module SMESH
      * \param theElements - container of elements to duplicate.
      * \param theGroupName - a name of group to contain the generated elements.
      *                    If a group with such a name already exists, the new elements
-     *                    are added to the existng group, else a new group is created.
+     *                    are added to the existing group, else a new group is created.
      *                    If \a theGroupName is empty, new elements are not added 
      *                    in any group.
      * \return a group where the new elements are added. NULL if theGroupName == "".
index 6db2127ebc5281ba2d5417353c72c47b2b18e684..ab8792bc1b435e9d6769d383b8ecc91280667a6e 100755 (executable)
@@ -229,6 +229,7 @@ SET(SMESH_RESOURCES_FILES
   mesh_show.png
   mesh_hide.png
   mesh_deflection.png
+  mesh_offset.png
 )
 
 INSTALL(FILES ${SMESH_RESOURCES_FILES} DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
index 4afaabbffc7e01e66bd8862d942c44082225ac4a..9c1b51daf8971d7fcfd25f99b4b9ad9c12713f8e 100644 (file)
     <parameter name="vol_precision"                value="-6"  />
   </section>
   <section name="smesh_help" >
-    <parameter name="sub_menu"          value="%1 module"/>
-    <parameter name="User's Guide"      value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html"/>
-    <parameter name="Plug-ins/MGSurfOpt plugin User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/yams/index.html"/>
-    <parameter name="Plug-ins/MGCleaner plugin User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html"/>
-    <parameter name="Plug-ins/Z-cracks plugin User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/zcracks/index.html"/>
-    <parameter name="Plug-ins/MacMesh plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MacMesh/index.html"/>
-    <parameter name="Plug-ins/blocFissure plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/blocFissure/index.html"/>
-    <parameter name="Plug-ins/SpherePadder plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/padder/index.html"/>
-    <parameter name="Developer's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/tui/SMESH/index.html"/>
+    <parameter name="User's Guide/Mesh module/User's Guide"      value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html"/>
+    <parameter name="Developer's Guide/Mesh module/Developer's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/tui/SMESH/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/MGSurfOpt plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/yams/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/MGCleaner plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/Z-cracks plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/zcracks/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/MacMesh plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MacMesh/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/blocFissure plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/blocFissure/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/SpherePadder plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/padder/index.html"/>
   </section>
   <section name="resources">
     <!-- Module resources -->
diff --git a/resources/mesh_offset.png b/resources/mesh_offset.png
new file mode 100644 (file)
index 0000000..47e03cc
Binary files /dev/null and b/resources/mesh_offset.png differ
index 74798ca6756f6c46972d8d757574266402d14798..8f48ab1f2db96b41649d928b92657f786378e686 100644 (file)
@@ -20,7 +20,7 @@
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
@@ -31,19 +31,16 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
   ${VTK_LIBRARIES}
-  ${CAS_TKernel}
-  ${CAS_TKBRep}
-  ${CAS_TKG3d}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKGeomBase}
-  ${CAS_TKGeomAlgo}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   SMDS
   SMESHDS
   SMESHUtils
index b1279a6594d78ec63fecc1d34b2f792ea758e6c3..7fcc948da5ef4c6789c2fdd0fe844ea5264c50ab 100644 (file)
@@ -28,8 +28,6 @@
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_QuadraticEdge.hxx"
-#include "SMDS_QuadraticFaceOfNodes.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_GroupBase.hxx"
 #include "SMESHDS_GroupOnFilter.hxx"
@@ -253,26 +251,7 @@ bool NumericalFunctor::GetPoints(const SMDS_MeshElement* anElem,
   theRes.setElement( anElem );
 
   // Get nodes of the element
-  SMDS_ElemIteratorPtr anIter;
-
-  if ( anElem->IsQuadratic() ) {
-    switch ( anElem->GetType() ) {
-    case SMDSAbs_Edge:
-      anIter = dynamic_cast<const SMDS_VtkEdge*>
-        (anElem)->interlacedNodesElemIterator();
-      break;
-    case SMDSAbs_Face:
-      anIter = dynamic_cast<const SMDS_VtkFace*>
-        (anElem)->interlacedNodesElemIterator();
-      break;
-    default:
-      anIter = anElem->nodesIterator();
-    }
-  }
-  else {
-    anIter = anElem->nodesIterator();
-  }
-
+  SMDS_NodeIteratorPtr anIter= anElem->interlacedNodesIterator();
   if ( anIter ) {
     SMESH_NodeXYZ p;
     while( anIter->more() ) {
@@ -771,8 +750,8 @@ double AspectRatio::GetValue( long theId )
   if ( myCurrElement && myCurrElement->GetVtkType() == VTK_QUAD )
   {
     // issue 21723
-    vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myCurrElement->getMeshId()]->getGrid();
-    if ( vtkCell* avtkCell = grid->GetCell( myCurrElement->getVtkId() ))
+    vtkUnstructuredGrid* grid = const_cast<SMDS_Mesh*>( myMesh )->GetGrid();
+    if ( vtkCell* avtkCell = grid->GetCell( myCurrElement->GetVtkID() ))
       aVal = Round( vtkMeshQuality::QuadAspectRatio( avtkCell ));
   }
   else
@@ -1015,8 +994,8 @@ double AspectRatio3D::GetValue( long theId )
     // Action from CoTech | ACTION 31.3:
     // EURIWARE BO: Homogenize the formulas used to calculate the Controls in SMESH to fit with
     // those of ParaView. The library used by ParaView for those calculations can be reused in SMESH.
-    vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myCurrElement->getMeshId()]->getGrid();
-    if ( vtkCell* avtkCell = grid->GetCell( myCurrElement->getVtkId() ))
+    vtkUnstructuredGrid* grid = const_cast<SMDS_Mesh*>( myMesh )->GetGrid();
+    if ( vtkCell* avtkCell = grid->GetCell( myCurrElement->GetVtkID() ))
       aVal = Round( vtkMeshQuality::TetAspectRatio( avtkCell ));
   }
   else
@@ -1035,7 +1014,7 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
 
   int nbNodes = P.size();
 
-  if(myCurrElement->IsQuadratic()) {
+  if( myCurrElement->IsQuadratic() ) {
     if(nbNodes==10) nbNodes=4; // quadratic tetrahedron
     else if(nbNodes==13) nbNodes=5; // quadratic pyramid
     else if(nbNodes==15) nbNodes=6; // quadratic pentahedron
@@ -1827,35 +1806,33 @@ bool Length2D::Value::operator<(const Length2D::Value& x) const
 void Length2D::GetValues(TValues& theValues)
 {
   TValues aValues;
-  SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
-  for(; anIter->more(); ){
+  for ( SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); anIter->more(); )
+  {
     const SMDS_MeshFace* anElem = anIter->next();
-
-    if(anElem->IsQuadratic()) {
-      const SMDS_VtkFace* F =
-        dynamic_cast<const SMDS_VtkFace*>(anElem);
+    if ( anElem->IsQuadratic() )
+    {
       // use special nodes iterator
-      SMDS_ElemIteratorPtr anIter = F->interlacedNodesElemIterator();
+      SMDS_NodeIteratorPtr anIter = anElem->interlacedNodesIterator();
       long aNodeId[4] = { 0,0,0,0 };
       gp_Pnt P[4];
 
       double aLength = 0;
-      const SMDS_MeshElement* aNode;
-      if(anIter->more()){
-        aNode = anIter->next();
-        const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode;
-        P[0] = P[1] = gp_Pnt(aNodes->X(),aNodes->Y(),aNodes->Z());
+      if ( anIter->more() )
+      {
+        const SMDS_MeshNode* aNode = anIter->next();
+        P[0] = P[1] = SMESH_NodeXYZ( aNode );
         aNodeId[0] = aNodeId[1] = aNode->GetID();
         aLength = 0;
       }
-      for(; anIter->more(); ){
-        const SMDS_MeshNode* N1 = static_cast<const SMDS_MeshNode*> (anIter->next());
-        P[2] = gp_Pnt(N1->X(),N1->Y(),N1->Z());
+      for ( ; anIter->more(); )
+      {
+        const SMDS_MeshNode* N1 = anIter->next();
+        P[2] = SMESH_NodeXYZ( N1 );
         aNodeId[2] = N1->GetID();
         aLength = P[1].Distance(P[2]);
         if(!anIter->more()) break;
-        const SMDS_MeshNode* N2 = static_cast<const SMDS_MeshNode*> (anIter->next());
-        P[3] = gp_Pnt(N2->X(),N2->Y(),N2->Z());
+        const SMDS_MeshNode* N2 = anIter->next();
+        P[3] = SMESH_NodeXYZ( N2 );
         aNodeId[3] = N2->GetID();
         aLength += P[2].Distance(P[3]);
         Value aValue1(aLength,aNodeId[1],aNodeId[2]);
@@ -1872,28 +1849,28 @@ void Length2D::GetValues(TValues& theValues)
       theValues.insert(aValue2);
     }
     else {
-      SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
+      SMDS_NodeIteratorPtr aNodesIter = anElem->nodeIterator();
       long aNodeId[2] = {0,0};
       gp_Pnt P[3];
 
       double aLength;
       const SMDS_MeshElement* aNode;
-      if(aNodesIter->more()){
+      if ( aNodesIter->more())
+      {
         aNode = aNodesIter->next();
-        const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode;
-        P[0] = P[1] = gp_Pnt(aNodes->X(),aNodes->Y(),aNodes->Z());
+        P[0] = P[1] = SMESH_NodeXYZ( aNode );
         aNodeId[0] = aNodeId[1] = aNode->GetID();
         aLength = 0;
       }
-      for(; aNodesIter->more(); ){
+      for( ; aNodesIter->more(); )
+      {
         aNode = aNodesIter->next();
-        const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode;
         long anId = aNode->GetID();
-        
-        P[2] = gp_Pnt(aNodes->X(),aNodes->Y(),aNodes->Z());
-        
+
+        P[2] = SMESH_NodeXYZ( aNode );
+
         aLength = P[1].Distance(P[2]);
-        
+
         Value aValue(aLength,aNodeId[1],anId);
         aNodeId[1] = anId;
         P[1] = P[2];
@@ -1947,8 +1924,7 @@ double Deflection2D::GetValue( const TSequenceOfXYZ& P )
       {
         gc += P(i+1);
 
-        if ( const SMDS_FacePosition* fPos = dynamic_cast<const SMDS_FacePosition*>
-             ( P.getElement()->GetNode( i )->GetPosition() ))
+        if ( SMDS_FacePositionPtr fPos = P.getElement()->GetNode( i )->GetPosition() )
         {
           uv.ChangeCoord(1) += fPos->GetUParameter();
           uv.ChangeCoord(2) += fPos->GetVParameter();
@@ -2124,59 +2100,24 @@ bool MultiConnection2D::Value::operator<(const MultiConnection2D::Value& x) cons
 void MultiConnection2D::GetValues(MValues& theValues)
 {
   if ( !myMesh ) return;
-  SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
-  for(; anIter->more(); ){
-    const SMDS_MeshFace* anElem = anIter->next();
-    SMDS_ElemIteratorPtr aNodesIter;
-    if ( anElem->IsQuadratic() )
-      aNodesIter = dynamic_cast<const SMDS_VtkFace*>
-        (anElem)->interlacedNodesElemIterator();
-    else
-      aNodesIter = anElem->nodesIterator();
-    long aNodeId[3] = {0,0,0};
+  for ( SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); anIter->more(); )
+  {
+    const SMDS_MeshFace*     anElem = anIter->next();
+    SMDS_NodeIteratorPtr aNodesIter = anElem->interlacedNodesIterator();
 
-    //int aNbConnects=0;
-    const SMDS_MeshNode* aNode0;
-    const SMDS_MeshNode* aNode1;
+    const SMDS_MeshNode* aNode1 = anElem->GetNode( anElem->NbNodes() - 1 );
     const SMDS_MeshNode* aNode2;
-    if(aNodesIter->more()){
-      aNode0 = (SMDS_MeshNode*) aNodesIter->next();
-      aNode1 = aNode0;
-      const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode1;
-      aNodeId[0] = aNodeId[1] = aNodes->GetID();
-    }
-    for(; aNodesIter->more(); ) {
-      aNode2 = (SMDS_MeshNode*) aNodesIter->next();
-      long anId = aNode2->GetID();
-      aNodeId[2] = anId;
-
-      Value aValue(aNodeId[1],aNodeId[2]);
-      MValues::iterator aItr = theValues.find(aValue);
-      if (aItr != theValues.end()){
-        aItr->second += 1;
-        //aNbConnects = nb;
-      }
-      else {
-        theValues[aValue] = 1;
-        //aNbConnects = 1;
-      }
-      //cout << "NodeIds: "<<aNodeId[1]<<","<<aNodeId[2]<<" nbconn="<<aNbConnects<<endl;
-      aNodeId[1] = aNodeId[2];
+    for ( ; aNodesIter->more(); )
+    {
+      aNode2 = aNodesIter->next();
+
+      Value aValue ( aNode1->GetID(), aNode2->GetID() );
+      MValues::iterator aItr = theValues.insert( std::make_pair( aValue, 0 )).first;
+      aItr->second++;
       aNode1 = aNode2;
     }
-    Value aValue(aNodeId[0],aNodeId[2]);
-    MValues::iterator aItr = theValues.find(aValue);
-    if (aItr != theValues.end()) {
-      aItr->second += 1;
-      //aNbConnects = nb;
-    }
-    else {
-      theValues[aValue] = 1;
-      //aNbConnects = 1;
-    }
-    //cout << "NodeIds: "<<aNodeId[0]<<","<<aNodeId[2]<<" nbconn="<<aNbConnects<<endl;
   }
-
+  return;
 }
 
 //================================================================================
@@ -2191,7 +2132,7 @@ double BallDiameter::GetValue( long theId )
   double diameter = 0;
 
   if ( const SMDS_BallElement* ball =
-       dynamic_cast<const SMDS_BallElement*>( myMesh->FindElement( theId )))
+       myMesh->DownCast< SMDS_BallElement >( myMesh->FindElement( theId )))
   {
     diameter = ball->GetDiameter();
   }
@@ -2429,7 +2370,7 @@ void CoincidentNodes::SetMesh( const SMDS_Mesh* theMesh )
   if ( myMeshModifTracer.IsMeshModified() )
   {
     TIDSortedNodeSet nodesToCheck;
-    SMDS_NodeIteratorPtr nIt = theMesh->nodesIterator(/*idInceasingOrder=*/true);
+    SMDS_NodeIteratorPtr nIt = theMesh->nodesIterator();
     while ( nIt->more() )
       nodesToCheck.insert( nodesToCheck.end(), nIt->next() );
 
@@ -2632,31 +2573,21 @@ inline void UpdateBorders(const FreeEdges::Border& theBorder,
 void FreeEdges::GetBoreders(TBorders& theBorders)
 {
   TBorders aRegistry;
-  SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
-  for(; anIter->more(); ){
+  for ( SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); anIter->more(); )
+  {
     const SMDS_MeshFace* anElem = anIter->next();
     long anElemId = anElem->GetID();
-    SMDS_ElemIteratorPtr aNodesIter;
-    if ( anElem->IsQuadratic() )
-      aNodesIter = static_cast<const SMDS_VtkFace*>(anElem)->
-        interlacedNodesElemIterator();
-    else
-      aNodesIter = anElem->nodesIterator();
+    SMDS_NodeIteratorPtr aNodesIter = anElem->interlacedNodesIterator();
+    if ( !aNodesIter->more() ) continue;
     long aNodeId[2] = {0,0};
-    const SMDS_MeshElement* aNode;
-    if(aNodesIter->more()){
-      aNode = aNodesIter->next();
-      aNodeId[0] = aNodeId[1] = aNode->GetID();
-    }
-    for(; aNodesIter->more(); ){
-      aNode = aNodesIter->next();
-      long anId = aNode->GetID();
-      Border aBorder(anElemId,aNodeId[1],anId);
-      aNodeId[1] = anId;
-      UpdateBorders(aBorder,aRegistry,theBorders);
+    aNodeId[0] = anElem->GetNode( anElem->NbNodes()-1 )->GetID();
+    for ( ; aNodesIter->more(); )
+    {
+      aNodeId[1] = aNodesIter->next()->GetID();
+      Border aBorder( anElemId, aNodeId[0], aNodeId[1] );
+      UpdateBorders( aBorder, aRegistry, theBorders );
+      aNodeId[0] = aNodeId[1];
     }
-    Border aBorder(anElemId,aNodeId[0],aNodeId[1]);
-    UpdateBorders(aBorder,aRegistry,theBorders);
   }
 }
 
@@ -4008,24 +3939,20 @@ void ManifoldPart::expandBoundary
 void ManifoldPart::getFacesByLink( const ManifoldPart::Link& theLink,
                                    ManifoldPart::TVectorOfFacePtr& theFaces ) const
 {
-  std::set<SMDS_MeshCell *> aSetOfFaces;
+
   // take all faces that shared first node
-  SMDS_ElemIteratorPtr anItr = theLink.myNode1->facesIterator();
-  for ( ; anItr->more(); )
-  {
-    SMDS_MeshFace* aFace = (SMDS_MeshFace*)anItr->next();
-    if ( !aFace )
-      continue;
-    aSetOfFaces.insert( aFace );
-  }
+  SMDS_ElemIteratorPtr anItr = theLink.myNode1->GetInverseElementIterator( SMDSAbs_Face );
+  SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > faces( anItr ), facesEnd;
+  std::set<const SMDS_MeshElement *> aSetOfFaces( faces, facesEnd );
+
   // take all faces that shared second node
-  anItr = theLink.myNode2->facesIterator();
+  anItr = theLink.myNode2->GetInverseElementIterator( SMDSAbs_Face );
   // find the common part of two sets
   for ( ; anItr->more(); )
   {
-    SMDS_MeshFace* aFace = (SMDS_MeshFace*)anItr->next();
-    if ( aSetOfFaces.count( aFace ) )
-      theFaces.push_back( aFace );
+    const SMDS_MeshElement* aFace = anItr->next();
+    if ( aSetOfFaces.count( aFace ))
+      theFaces.push_back( (SMDS_MeshFace*) aFace );
   }
 }
 
@@ -4498,6 +4425,12 @@ bool ElementsOnShape::IsSatisfy (const SMDS_MeshElement* elem)
   return isSatisfy;
 }
 
+//================================================================================
+/*!
+ * \brief Check and optionally return a satisfying shape
+ */
+//================================================================================
+
 bool ElementsOnShape::IsSatisfy (const SMDS_MeshNode* node,
                                  TopoDS_Shape*        okShape)
 {
index 96fb9645fedb0f1c8408fa63d69eea5580cdf4b5..d4a1d5c0a21dc4b13b5eae866fb43e80f11e1a44 100644 (file)
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${KERNEL_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
+  ${PROJECT_SOURCE_DIR}/src/SMDS
 )
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
   ${KERNEL_OpUtil}
-  ${CAS_TKernel}
-  ${CAS_TKTopAlgo}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   SMESHDS
   SMESHUtils
 )
index 4ff5c99773f78069e680dbd7eacc1c413122a74a..0cf686fb333e91585505833491c210acd4ef4a73 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${CGNS_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
@@ -33,7 +33,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
index c784acc9fa2f598f15b1f79eb8cca26a483025f2..ba8daa44a34ad8415e73020a85f4e492b220c72b 100644 (file)
@@ -884,7 +884,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
                 {
                   const bool reverse = ( elemData[ pos-1 ] < 0 );
                   const int    iQuad = face->IsQuadratic() ? 1 : 0;
-                  SMDS_ElemIteratorPtr nIter = face->interlacedNodesElemIterator();
+                  SMDS_NodeIteratorPtr nIter = face->interlacedNodesIterator();
                   faceNodes.assign( SMDS_MeshElement::iterator( nIter ),
                                     SMDS_MeshElement::iterator());
                   if ( iQuad && reverse )
@@ -1184,6 +1184,9 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
 
   aResult = myErrorMessages.empty() ? DRS_OK : DRS_WARN_SKIP_ELEM;
 
+  myMesh->Modified();
+  myMesh->CompactMesh();
+
   return aResult;
 }
 
index 4d79e0f7cca78c3a0b275f5c1ce2735b09e3eb5a..25dab65b638b33fd8f35903656d0bcc613279e57 100644 (file)
@@ -301,26 +301,26 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
     vector< double > coords( myMesh->NbNodes() );
     int iC;
     // X
-    SMDS_NodeIteratorPtr nIt = myMesh->nodesIterator( /*idInceasingOrder=*/true );
+    SMDS_NodeIteratorPtr nIt = myMesh->nodesIterator();
     for ( int i = 0; nIt->more(); ++i ) coords[i] = nIt->next()->X();
     if ( cg_coord_write( _fn, iBase, iZone, CGNS_ENUMV(RealDouble),
                           "CoordinateX", &coords[0], &iC) != CG_OK )
       return addMessage( cg_get_error(), /*fatal = */true );
     // Y
-    nIt = myMesh->nodesIterator( /*idInceasingOrder=*/true );
+    nIt = myMesh->nodesIterator();
     for ( int i = 0; nIt->more(); ++i ) coords[i] = nIt->next()->Y();
     if ( cg_coord_write( _fn, iBase, iZone, CGNS_ENUMV(RealDouble),
                           "CoordinateY", &coords[0], &iC) != CG_OK )
       return addMessage( cg_get_error(), /*fatal = */true );
     // Z
-    nIt = myMesh->nodesIterator( /*idInceasingOrder=*/true );
+    nIt = myMesh->nodesIterator();
     for ( int i = 0; nIt->more(); ++i ) coords[i] = nIt->next()->Z();
     if ( cg_coord_write( _fn, iBase, iZone, CGNS_ENUMV(RealDouble),
                           "CoordinateZ", &coords[0], &iC) != CG_OK )
       return addMessage( cg_get_error(), /*fatal = */true );
 
     // store CGNS ids of nodes
-    nIt = myMesh->nodesIterator( /*idInceasingOrder=*/true );
+    nIt = myMesh->nodesIterator();
     for ( int i = 0; nIt->more(); ++i )
     {
       const SMDS_MeshElement* n = nIt->next();
index f78ad7893da67ccf8060071c63f29b7869c75b07..91ba878eb5fde4161c3d2312e6bbb97b59d08ab2 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -32,13 +32,13 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_KERNEL}
+  ${OpenCASCADE_KERNEL}
   ${KERNEL_SALOMEBasics}
   ${KERNEL_SalomeIDLKERNEL}
   MeshDriver
index 7ab288f86783fbf2ee439b4a2530f4a57cee52de..403dad4f5634748cf6a0d38af896efa95deb158b 100644 (file)
@@ -117,7 +117,7 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   }
 
   SMDS_VolumeIteratorPtr itVolumes=myMesh->volumesIterator();
-  const SMDS_VtkVolume* v;
+  const SMDS_MeshVolume* v;
   while(itVolumes->more())
   {
     const SMDS_MeshElement * elem = itVolumes->next();
@@ -125,7 +125,7 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
     {
       fprintf(aFileId, "%d %d ", elem->GetID(), 500+elem->NbNodes());
 
-      if (( v = dynamic_cast< const SMDS_VtkVolume*>( elem )))
+      if (( v = myMesh->DownCast< SMDS_MeshVolume >( elem )))
       {
         std::vector<int> quant = v->GetQuantities();
         if ( !quant.empty() )
@@ -146,7 +146,7 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
 
     fprintf(aFileId, "\n");
   }
-  
+
   fclose(aFileId);
 
   return aResult;
index 7f2c29651607ae5ce44736893fcf59d9ffc0fe19..a04b58c9fed589dcd4a621d383c24d8dab1b5722 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -32,7 +32,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   "-DBOOST_SYSTEM_NO_DEPRECATED"
 )
index 54edf6a9c8413a0ab6f1e40bd62caa89026769f3..420b1495b246e9e3f43919ba6f1968ddcb68c698 100644 (file)
@@ -444,6 +444,9 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
     }
   }
 
+  myMesh->Modified();
+  myMesh->CompactMesh();
+
   return status;
 }
 
index 73b6247d2df2a86cede1c86cf1a93c0ab5e62611..c7d6c52ea5fd3e8fec7c5f296a094557fd8fe4ab 100644 (file)
@@ -1029,7 +1029,7 @@ static int ScaKwdTab(GmfMshSct *msh)
                         if(isalpha(str[0]))
                         {
                                 /* Search which kwd code this string is associated with, 
-                                        then get its header and save the curent position in file (just before the data) */
+                                        then get its header and save the current position in file (just before the data) */
 
                                 for(KwdCod=1; KwdCod<= GmfMaxKwd; KwdCod++)
                                         if(!strcmp(str, GmfKwdFmt[ KwdCod ][0]))
index ce7b79ae452489bb2979179ea678da907ef87d3f..af3e0f22dddc334c70f31029018724824cbef584 100644 (file)
@@ -22,7 +22,7 @@
 INCLUDE_DIRECTORIES(
   ${HDF5_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/MEDWrapper
@@ -35,7 +35,7 @@ INCLUDE_DIRECTORIES(
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${HDF5_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
index b758617e988e1f4a67cf7e878daafffdbb94bdb6..1acc37831e2b1c69f63bbb2dbe0f811795e0003b 100644 (file)
@@ -570,3 +570,21 @@ void DriverMED_Family::Split (DriverMED_FamilyPtr by,
     common->myType = myType;
   }
 }
+
+//================================================================================
+/*!
+ * \brief Return a number of elements of a given type
+ */
+//================================================================================
+
+size_t DriverMED_Family::NbElements( SMDSAbs_ElementType theType ) const
+{
+  if ( myTypes.size() < 2 )
+    return myElements.size();
+
+  int nb = 0;
+  for ( ElementsSet::iterator e = myElements.begin(); e != myElements.end(); ++e )
+    nb += ( theType == (*e)->GetType() );
+
+  return nb;
+}
index c71ea7254622a777ad0336c91831083a5d965db3..97157a2a3b710599921f3121fea393a0e77d9af4 100644 (file)
@@ -119,9 +119,11 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
 
   bool MemberOf(std::string theGroupName) const;
 
-  int GetGroupAttributVal() const;
+  int  GetGroupAttributVal() const;
   void SetGroupAttributVal( int theValue);
 
+  size_t NbElements( SMDSAbs_ElementType ) const;
+
  private:
   //! Initialize the tool by SMESHDS_GroupBase
   void Init (SMESHDS_GroupBase* group);
index b8d73352b99bac97cfa98667350f9a222664f265..a1a5cfcc7106b8b358d78c1f272cd51747da9d31 100644 (file)
@@ -273,7 +273,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
             if ( anIsElemNum && !aBallInfo->myElemNum->empty() )
               maxID = *std::max_element( aBallInfo->myElemNum->begin(),
                                          aBallInfo->myElemNum->end() );
-            myMesh->getGrid()->AllocateDiameters( maxID ); // performance optimization
+            myMesh->GetGrid()->AllocateDiameters( maxID ); // performance optimization
 
             // create balls
             SMDS_MeshElement* anElement;
@@ -1038,8 +1038,6 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
     aResult = addMessage( "Unknown exception", /*isFatal=*/true );
   }
 #endif
-  if (myMesh)
-    myMesh->compactMesh();
 
   // Mantis issue 0020483
   if (aResult == DRS_OK && isDescConn) {
@@ -1137,6 +1135,14 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup)
 
   if (( famVecPtr = myGroups2FamiliesMap.ChangeSeek( aGroupName )))
   {
+    size_t groupSize = 0;
+    for ( size_t i = 0; i < famVecPtr->size(); ++i )
+    {
+      DriverMED_FamilyPtr aFamily = (*famVecPtr)[i];
+      groupSize += aFamily->NbElements( theGroup->GetType() );
+    }
+    theGroup->SMDSGroup().Reserve( groupSize );
+
     for ( size_t i = 0; i < famVecPtr->size(); ++i )
     {
       DriverMED_FamilyPtr aFamily = (*famVecPtr)[i];
index d0e89a2b9a1865cd8746f60b8d65c6bbac075a1a..bdd191a4deae7bd3ad03115e51bf38bcd89d21f9 100644 (file)
@@ -33,7 +33,6 @@
 #include "MED_Wrapper.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_MeshElement.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Mesh.hxx"
 
@@ -101,7 +100,7 @@ bool DriverMED_W_Field::Set(SMESHDS_Mesh *      mesh,
     for ( int iG = 0; iG < SMDSEntity_Last; ++iG )
     {
       SMDSAbs_EntityType  geom = (SMDSAbs_EntityType) iG;
-      SMDSAbs_ElementType t = SMDS_MeshCell::toSmdsType( geom );
+      SMDSAbs_ElementType    t = SMDS_MeshCell::ElemType( geom );
       if ( t != _elemType ) continue;
 
       nbElems = mesh->GetMeshInfo().NbElements( geom );
index 55e80fbfd4cf52e54a3add0f87a80d873f0738d7..6ac446156c3ad6954eba9cfc716b069e57b54db8 100644 (file)
@@ -31,9 +31,7 @@
 #include "MED_Factory.hxx"
 #include "MED_Utilities.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
-#include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Mesh.hxx"
 
@@ -313,10 +311,6 @@ namespace
 Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 {
   Status aResult = DRS_OK;
-  if (myMesh->hasConstructionEdges() || myMesh->hasConstructionFaces()) {
-    INFOS("SMDS_MESH with hasConstructionEdges() or hasConstructionFaces() do not supports!!!");
-    return DRS_FAIL;
-  }
   try {
     //MESSAGE("Perform - myFile : "<<myFile);
 
@@ -361,7 +355,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           const SMDS_MeshNode* aNode = aNodesIter->next();
           aBounds[0] = min(aBounds[0],aNode->X());
           aBounds[1] = max(aBounds[1],aNode->X());
-          
+
           aBounds[2] = min(aBounds[2],aNode->Y());
           aBounds[3] = max(aBounds[3],aNode->Y());
 
@@ -407,7 +401,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         }
       }
 
-      SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(/*idInceasingOrder=*/true);
+      SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
       switch ( aSpaceDimension ) {
       case 3:
         aCoordHelperPtr.reset(new TCoordHelper(aNodesIter,aXYZGetCoord,aXYZName));
@@ -810,7 +804,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 
       // Treat POLYEDREs
       // ----------------
-      else if (aElemTypeData->_geomType == ePOLYEDRE )
+      else if ( aElemTypeData->_geomType == ePOLYEDRE )
       {
         elemIterator = myMesh->elementGeomIterator( SMDSGeom_POLYHEDRA );
 
@@ -818,10 +812,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           // Count nb of nodes
           while ( elemIterator->more() ) {
             const SMDS_MeshElement*  anElem = elemIterator->next();
-            const SMDS_VtkVolume *aPolyedre = dynamic_cast<const SMDS_VtkVolume*>(anElem);
-            if ( !aPolyedre ) continue;
-            nbPolyhedronNodes += aPolyedre->NbNodes();
-            nbPolyhedronFaces += aPolyedre->NbFaces();
+            nbPolyhedronNodes += anElem->NbNodes();
+            nbPolyhedronFaces += anElem->NbFaces();
             if ( ++iElem == aElemTypeData->_nbElems )
               break;
           }
@@ -846,8 +838,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           TInt iFace = 0, iNode = 0;
           while ( elemIterator->more() )
           {
-            const SMDS_MeshElement*  anElem = elemIterator->next();
-            const SMDS_VtkVolume *aPolyedre = dynamic_cast<const SMDS_VtkVolume*>(anElem);
+            const SMDS_MeshElement* anElem = elemIterator->next();
+            const SMDS_MeshVolume *aPolyedre = myMesh->DownCast< SMDS_MeshVolume >( anElem );
             if ( !aPolyedre ) continue;
             // index
             TInt aNbFaces = aPolyedre->NbFaces();
index fb45dc1b2fec150204943c4d2458ebf17960fbad..4b63d3cc6e9518eb7d5dec105c0147301a027c79 100644 (file)
@@ -40,6 +40,7 @@
 class SMESHDS_Mesh;
 class SMESHDS_GroupBase;
 class SMESHDS_SubMesh;
+class SMDS_MeshElement;
 
 class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {
index 53aef6ea33c9e82014f4787f99b83b53fa68d55d..59b6967279c63cfbae6966dece7f9a01b5a2b7b8 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -32,16 +32,15 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_TKernel}
-  ${CAS_TKSTL}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKMesh}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_DataExchange_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   ${KERNEL_SALOMEBasics}
   MeshDriver
   SMDS
@@ -53,11 +52,9 @@ SET(_link_LIBRARIES_bin
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_SALOMEBasics}
   ${KERNEL_SalomeIDLKERNEL}
-  ${CAS_TKernel}
-  ${CAS_TKSTL}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKMesh}
-  ${CAS_TKBO}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_DataExchange_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   MeshDriver
   SMDS
 )
index ae7e48cca98a1d0b25af2faae85e51dca1d9962b..f1e1ea6ac7448e88fe4bb87138951043810e9eba 100644 (file)
@@ -142,6 +142,9 @@ Driver_Mesh::Status DriverSTL_R_SMDS_Mesh::Perform()
   else
     aResult = readBinary( file );
 
+  myMesh->Modified();
+  myMesh->CompactMesh();
+
   return aResult;
 }
 
index 333c72d96af80d11dfb031cad24825458e0aecba..e95d23ae88e569edeff4807b6d468aefefa82fa1 100644 (file)
 #include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_Mesh.hxx"
-#include "SMDS_MeshElement.hxx"
-#include "SMDS_MeshNode.hxx"
 #include "SMDS_PolygonalFaceOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESH_File.hxx"
+#include "SMESH_MeshAlgos.hxx"
 #include "SMESH_TypeDefs.hxx"
 
-#include <Standard_ErrorHandler.hxx>
-#include <Standard_Failure.hxx>
-#include <gp_Ax2.hxx>
-
 #include <limits>
 
 
@@ -208,270 +203,6 @@ static gp_XYZ getNormale( const SMDS_MeshNode* n1,
   return n;
 }
 
-namespace
-{
-  /*!
-   * \brief Vertex of a polygon. Together with 2 neighbor Vertices represents a triangle
-   */
-  struct PolyVertex
-  {
-    SMESH_TNodeXYZ _nxyz;
-    gp_XY          _xy;
-    PolyVertex*    _prev;
-    PolyVertex*    _next;
-
-    void SetNodeAndNext( const SMDS_MeshNode* n, PolyVertex& v )
-    {
-      _nxyz.Set( n );
-      _next = &v;
-      v._prev = this;
-    }
-    PolyVertex* Delete()
-    {
-      _prev->_next = _next;
-      _next->_prev = _prev;
-      return _next;
-    }
-    void GetTriaNodes( const SMDS_MeshNode** nodes) const
-    {
-      nodes[0] = _prev->_nxyz._node;
-      nodes[1] =  this->_nxyz._node;
-      nodes[2] = _next->_nxyz._node;
-    }
-
-    inline static double Area( const PolyVertex* v0, const PolyVertex* v1, const PolyVertex* v2 )
-    {
-      gp_XY vPrev = v0->_xy - v1->_xy;
-      gp_XY vNext = v2->_xy - v1->_xy;
-      return vNext ^ vPrev;
-    }
-    double TriaArea() const { return Area( _prev, this, _next ); }
-
-    bool IsInsideTria( const PolyVertex* v )
-    {
-      gp_XY p = _prev->_xy - v->_xy;
-      gp_XY t =  this->_xy - v->_xy;
-      gp_XY n = _next->_xy - v->_xy;
-      const double tol = -1e-12;
-      return (( p ^ t ) >= tol &&
-              ( t ^ n ) >= tol &&
-              ( n ^ p ) >= tol );
-      // return ( Area( _prev, this, v ) > 0 &&
-      //          Area( this, _next, v ) > 0 &&
-      //          Area( _next, _prev, v ) > 0 );
-    }
-  };
-
-  //================================================================================
-  /*!
-   * \brief Triangulate a polygon. Assure correct orientation for concave polygons
-   */
-  //================================================================================
-
-  bool triangulate( std::vector< const SMDS_MeshNode*>& nodes, const size_t nbNodes )
-  {
-    // connect nodes into a ring
-    std::vector< PolyVertex > pv( nbNodes );
-    for ( size_t i = 1; i < nbNodes; ++i )
-      pv[i-1].SetNodeAndNext( nodes[i-1], pv[i] );
-    pv[ nbNodes-1 ].SetNodeAndNext( nodes[ nbNodes-1 ], pv[0] );
-
-    // get a polygon normal
-    gp_XYZ normal(0,0,0), p0,v01,v02;
-    p0  = pv[0]._nxyz;
-    v01 = pv[1]._nxyz - p0;
-    for ( size_t i = 2; i < nbNodes; ++i )
-    {
-      v02 = pv[i]._nxyz - p0;
-      normal += v01 ^ v02;
-      v01 = v02;
-    }
-    // project nodes to the found plane
-    gp_Ax2 axes;
-    try {
-      axes = gp_Ax2( p0, normal, v01 );
-    }
-    catch ( Standard_Failure ) {
-      return false;
-    }
-    for ( size_t i = 0; i < nbNodes; ++i )
-    {
-      gp_XYZ p = pv[i]._nxyz - p0;
-      pv[i]._xy.SetX( axes.XDirection().XYZ() * p );
-      pv[i]._xy.SetY( axes.YDirection().XYZ() * p );
-    }
-
-    // in a loop, find triangles with positive area and having no vertices inside
-    int iN = 0, nbTria = nbNodes - 2;
-    nodes.reserve( nbTria * 3 );
-    const double minArea = 1e-6;
-    PolyVertex* v = &pv[0], *vi;
-    int nbVertices = nbNodes, nbBadTria = 0, isGoodTria;
-    while ( nbBadTria < nbVertices )
-    {
-      if (( isGoodTria = v->TriaArea() > minArea ))
-      {
-        for ( vi = v->_next->_next;
-              vi != v->_prev;
-              vi = vi->_next )
-        {
-          if ( v->IsInsideTria( vi ))
-            break;
-        }
-        isGoodTria = ( vi == v->_prev );
-      }
-      if ( isGoodTria )
-      {
-        v->GetTriaNodes( &nodes[ iN ] );
-        iN += 3;
-        v = v->Delete();
-        if ( --nbVertices == 3 )
-        {
-          // last triangle remains
-          v->GetTriaNodes( &nodes[ iN ] );
-          return true;
-        }
-        nbBadTria = 0;
-      }
-      else
-      {
-        v = v->_next;
-        ++nbBadTria;
-      }
-    }
-
-    // the polygon is invalid; add triangles with positive area
-    nbBadTria = 0;
-    while ( nbBadTria < nbVertices )
-    {
-      isGoodTria = v->TriaArea() > minArea;
-      if ( isGoodTria )
-      {
-        v->GetTriaNodes( &nodes[ iN ] );
-        iN += 3;
-        v = v->Delete();
-        if ( --nbVertices == 3 )
-        {
-          // last triangle remains
-          v->GetTriaNodes( &nodes[ iN ] );
-          return true;
-        }
-        nbBadTria = 0;
-      }
-      else
-      {
-        v = v->_next;
-        ++nbBadTria;
-      }
-    }
-
-    // add all the rest triangles
-    while ( nbVertices >= 3 )
-    {
-      v->GetTriaNodes( &nodes[ iN ] );
-      iN += 3;
-      v = v->Delete();
-      --nbVertices;
-    }
-
-    return true;
-
-  } // triangulate()
-} // namespace
-
-//================================================================================
-/*!
- * \brief Return nb triangles in a decomposed mesh face
- *  \retval int - number of triangles
- */
-//================================================================================
-
-static int getNbTriangles( const SMDS_MeshElement* face)
-{
-  // WARNING: counting triangles must be coherent with getTriangles()
-  switch ( face->GetEntityType() )
-  {
-  case SMDSEntity_BiQuad_Triangle:
-  case SMDSEntity_BiQuad_Quadrangle:
-    return face->NbNodes() - 1;
-  // case SMDSEntity_Triangle:
-  // case SMDSEntity_Quad_Triangle:
-  // case SMDSEntity_Quadrangle:
-  // case SMDSEntity_Quad_Quadrangle:
-  // case SMDSEntity_Polygon:
-  // case SMDSEntity_Quad_Polygon:
-  default:
-    return face->NbNodes() - 2;
-  }
-  return 0;
-}
-
-//================================================================================
-/*!
- * \brief Decompose a mesh face into triangles
- *  \retval int - number of triangles
- */
-//================================================================================
-
-static int getTriangles( const SMDS_MeshElement*             face,
-                         std::vector< const SMDS_MeshNode*>& nodes)
-{
-  // WARNING: decomposing into triangles must be coherent with getNbTriangles()
-  int nbTria, i = 0, nbNodes = face->NbNodes();
-  SMDS_NodeIteratorPtr nIt = face->interlacedNodesIterator();
-  nodes.resize( nbNodes * 3 );
-  nodes[ i++ ] = nIt->next();
-  nodes[ i++ ] = nIt->next();
-
-  const SMDSAbs_EntityType type = face->GetEntityType();
-  switch ( type )
-  {
-  case SMDSEntity_BiQuad_Triangle:
-  case SMDSEntity_BiQuad_Quadrangle:
-    nbTria = ( type == SMDSEntity_BiQuad_Triangle ) ? 6 : 8;
-    nodes[ i++ ] = face->GetNode( nbTria );
-    for ( i = 3; i < 3*(nbTria-1); i += 3 )
-    {
-      nodes[ i+0 ] = nodes[ i-2 ];
-      nodes[ i+1 ] = nIt->next();
-      nodes[ i+2 ] = nodes[ 2 ];
-    }
-    nodes[ i+0 ] = nodes[ i-2 ];
-    nodes[ i+1 ] = nodes[ 0 ];
-    nodes[ i+2 ] = nodes[ 2 ];
-    break;
-  case SMDSEntity_Triangle:
-    nbTria = 1;
-    nodes[ i++ ] = nIt->next();
-    break;
-  default:
-    // case SMDSEntity_Quad_Triangle:
-    // case SMDSEntity_Quadrangle:
-    // case SMDSEntity_Quad_Quadrangle:
-    // case SMDSEntity_Polygon:
-    // case SMDSEntity_Quad_Polygon:
-    nbTria = nbNodes - 2;
-    while ( nIt->more() )
-      nodes[ i++ ] = nIt->next();
-
-    if ( !triangulate( nodes, nbNodes ))
-    {
-      nIt = face->interlacedNodesIterator();
-      nodes[ 0 ] = nIt->next();
-      nodes[ 1 ] = nIt->next();
-      nodes[ 2 ] = nIt->next();
-      for ( i = 3; i < 3*nbTria; i += 3 )
-      {
-        nodes[ i+0 ] = nodes[ 0 ];
-        nodes[ i+1 ] = nodes[ i-1 ];
-        nodes[ i+2 ] = nIt->next();
-      }
-    }
-    break;
-  }
-  return nbTria;
-}
-
 // private methods
 
 Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeAscii() const
@@ -492,11 +223,13 @@ Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeAscii() const
   char sval[128];
   std::vector< const SMDS_MeshNode* > triaNodes;
 
+  SMESH_MeshAlgos::Triangulate triangulator;
+
   SMDS_ElemIteratorPtr itFaces = getFaces();
   while ( itFaces->more() )
   {
     const SMDS_MeshElement* aFace = itFaces->next();
-    int nbTria = getTriangles( aFace, triaNodes );
+    int nbTria = triangulator.GetTriangles( aFace, triaNodes );
 
     for ( int iT = 0, iN = 0; iT < nbTria; ++iT )
     {
@@ -546,13 +279,15 @@ Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeBinary() const
   SMESH_File aFile( myFile );
   aFile.openForWriting();
 
+  SMESH_MeshAlgos::Triangulate triangulator;
+
   // we first count the number of triangles
   int nbTri = myNbVolumeTrias;
   {
     SMDS_FaceIteratorPtr itFaces = myMesh->facesIterator();
     while ( itFaces->more() ) {
       const SMDS_MeshElement* aFace = itFaces->next();
-      nbTri += getNbTriangles( aFace );
+      nbTri += triangulator.GetNbTriangles( aFace );
     }
   }
   std::string sval( LABEL_SIZE, ' ' );
@@ -576,7 +311,7 @@ Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeBinary() const
   while ( itFaces->more() )
   {
     const SMDS_MeshElement* aFace = itFaces->next();
-    int nbTria = getTriangles( aFace, triaNodes );
+    int nbTria = triangulator.GetTriangles( aFace, triaNodes );
     
     for ( int iT = 0, iN = 0; iT < nbTria; ++iT )
     {
index 86897560619950f456a6ff86132bc884e9ff7adb..8cafb88d42449a7c219d573eb9f57c13b3cf756e 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -32,13 +32,13 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_KERNEL}
+  ${OpenCASCADE_KERNEL}
   ${KERNEL_SALOMEBasics}
   MeshDriver
 )
index 27576a613eaaf6abc26b65c4685a65a9c4613a9f..10f7567f090aa9eae82d642ff298266f53ccc0aa 100644 (file)
@@ -93,11 +93,11 @@ namespace
 
 DriverUNV_R_SMDS_Mesh::~DriverUNV_R_SMDS_Mesh()
 {
-  if (myGroup != 0) 
-    delete myGroup;
+  TGroupNamesMap::iterator grp2name = myGroupNames.begin();
+  for ( ; grp2name != myGroupNames.end(); ++grp2name )
+    delete grp2name->first;
 }
 
-
 Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
 {
   Kernel_Utils::Localizer loc;
@@ -137,7 +137,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
         }
       }
       // Move nodes to SI unit system
-      const double lenFactor = aUnitsRecord.factors[ UNV164::LENGTH_FACTOR ]; 
+      const double lenFactor = aUnitsRecord.factors[ UNV164::LENGTH_FACTOR ];
       if ( lenFactor != 1. )
       {
         TDataSet::iterator nodeIter = aDataSet2411.begin(), nodeEnd;
@@ -187,23 +187,23 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
         else if(IsFace(aRec.fe_descriptor_id)) {
           //MESSAGE("add face " << aRec.label);
           switch(aRec.fe_descriptor_id){
-          case 41: // Plane Stress Linear Triangle      
-          case 51: // Plane Strain Linear Triangle      
-          case 61: // Plate Linear Triangle             
-          case 74: // Membrane Linear Triangle          
-          case 81: // Axisymetric Solid Linear Triangle 
-          case 91: // Thin Shell Linear Triangle        
+          case 41: // Plane Stress Linear Triangle
+          case 51: // Plane Strain Linear Triangle
+          case 61: // Plate Linear Triangle
+          case 74: // Membrane Linear Triangle
+          case 81: // Axisymetric Solid Linear Triangle
+          case 91: // Thin Shell Linear Triangle
             anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
                                               aRec.node_labels[1],
                                               aRec.node_labels[2],
                                               aRec.label);
             break;
 
-          case 42: //  Plane Stress Parabolic Triangle       
-          case 52: //  Plane Strain Parabolic Triangle       
-          case 62: //  Plate Parabolic Triangle              
-          case 72: //  Membrane Parabolic Triangle           
-          case 82: //  Axisymetric Solid Parabolic Triangle  
+          case 42: //  Plane Stress Parabolic Triangle
+          case 52: //  Plane Strain Parabolic Triangle
+          case 62: //  Plate Parabolic Triangle
+          case 72: //  Membrane Parabolic Triangle
+          case 82: //  Axisymetric Solid Parabolic Triangle
           case 92: //  Thin Shell Parabolic Triangle
             if ( aRec.node_labels.size() == 7 )
               anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
@@ -224,12 +224,12 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
                                                 aRec.label);
             break;
 
-          case 44: // Plane Stress Linear Quadrilateral     
-          case 54: // Plane Strain Linear Quadrilateral     
-          case 64: // Plate Linear Quadrilateral            
-          case 71: // Membrane Linear Quadrilateral         
+          case 44: // Plane Stress Linear Quadrilateral
+          case 54: // Plane Strain Linear Quadrilateral
+          case 64: // Plate Linear Quadrilateral
+          case 71: // Membrane Linear Quadrilateral
           case 84: // Axisymetric Solid Linear Quadrilateral
-          case 94: // Thin Shell Linear Quadrilateral       
+          case 94: // Thin Shell Linear Quadrilateral
             anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
                                               aRec.node_labels[1],
                                               aRec.node_labels[2],
@@ -237,12 +237,12 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
                                               aRec.label);
             break;
 
-          case 45: // Plane Stress Parabolic Quadrilateral      
-          case 55: // Plane Strain Parabolic Quadrilateral      
-          case 65: // Plate Parabolic Quadrilateral             
-          case 75: // Membrane Parabolic Quadrilateral          
-          case 85: // Axisymetric Solid Parabolic Quadrilateral 
-          case 95: // Thin Shell Parabolic Quadrilateral        
+          case 45: // Plane Stress Parabolic Quadrilateral
+          case 55: // Plane Strain Parabolic Quadrilateral
+          case 65: // Plate Parabolic Quadrilateral
+          case 75: // Membrane Parabolic Quadrilateral
+          case 85: // Axisymetric Solid Parabolic Quadrilateral
+          case 95: // Thin Shell Parabolic Quadrilateral
             if ( aRec.node_labels.size() == 9 )
               anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
                                                 aRec.node_labels[2],
@@ -295,7 +295,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
                                                 aRec.node_labels[7],
                                                 aRec.label);
             break;
-            
+
           case 112: // Solid Linear Prism - PRISM6
             anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
                                                 aRec.node_labels[2],
@@ -305,7 +305,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
                                                 aRec.node_labels[4],
                                                 aRec.label);
             break;
-            
+
           case 113: // Solid Quadratic Prism - PRISM15
             anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
                                                 aRec.node_labels[4],
@@ -328,7 +328,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
                                                 aRec.node_labels[7],
                                                 aRec.label);
             break;
-            
+
           case 115: // Solid Linear Brick - HEX8
             anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
                                                 aRec.node_labels[3],
@@ -396,101 +396,63 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
       }
     }
     {
-      using namespace UNV2417;      
+      using namespace UNV2417;
       TDataSet aDataSet2417;
       UNV2417::Read(in_stream,aDataSet2417);
       if(MYDEBUG) MESSAGE("Perform - aDataSet2417.size() = "<<aDataSet2417.size());
-      if  (aDataSet2417.size() > 0) {
-        myGroup = new SMDS_MeshGroup(myMesh);
+      if (aDataSet2417.size() > 0)
+      {
         TDataSet::const_iterator anIter = aDataSet2417.begin();
-        for(; anIter != aDataSet2417.end(); anIter++){
-          const TGroupId& aLabel = anIter->first;
+        for ( ; anIter != aDataSet2417.end(); anIter++ )
+        {
           const TRecord& aRec = anIter->second;
-
-          int aNodesNb = aRec.NodeList.size();
-          int aElementsNb = aRec.ElementList.size();
+          int        aNodesNb = aRec.NodeList.size();
+          int     aElementsNb = aRec.ElementList.size();
 
           bool useSuffix = ((aNodesNb > 0) && (aElementsNb > 0));
-          int i;
-          if (aNodesNb > 0) {
-            SMDS_MeshGroup* aNodesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Node);
+          if ( aNodesNb > 0 )
+          {
+            SMDS_MeshGroup* aNodesGroup = new SMDS_MeshGroup( myMesh );
             std::string aGrName = (useSuffix) ? aRec.GroupName + "_Nodes" : aRec.GroupName;
             int i = aGrName.find( "\r" );
             if (i > 0)
               aGrName.erase (i, 2);
-            myGroupNames.insert(TGroupNamesMap::value_type(aNodesGroup, aGrName));
-            myGroupId.insert(TGroupIdMap::value_type(aNodesGroup, aLabel));
+            myGroupNames.insert( std::make_pair( aNodesGroup, aGrName ));
 
-            for (i = 0; i < aNodesNb; i++) {
-              const SMDS_MeshNode* aNode = myMesh->FindNode(aRec.NodeList[i]);
-              if (aNode)
-                aNodesGroup->Add(aNode);
-            }
+            for ( int i = 0; i < aNodesNb; i++ )
+              if ( const SMDS_MeshNode* aNode = myMesh->FindNode( aRec.NodeList[i] ))
+                aNodesGroup->Add( aNode );
           }
-          if (aElementsNb > 0){
-            SMDS_MeshGroup* aEdgesGroup = 0;
-            SMDS_MeshGroup* aFacesGroup = 0;
-            SMDS_MeshGroup* aVolumeGroup = 0;
+          if ( aElementsNb > 0 )
+          {
+            std::vector< SMDS_MeshGroup* > aGroupVec( SMDSAbs_NbElementTypes, (SMDS_MeshGroup*)0 );
+            const char* aSuffix[] = { "", "", "_Edges", "_Faces", "_Volumes", "_0D", "_Balls" };
             bool createdGroup = false;
-
-            for (i = 0; i < aElementsNb; i++) {
-              const SMDS_MeshElement* aElement = myMesh->FindElement(aRec.ElementList[i]);
-              if (aElement) {
-                switch (aElement->GetType()) {
-
-                case SMDSAbs_Edge:
-                  if (!aEdgesGroup) {
-                    aEdgesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Edge);
-                    if (!useSuffix && createdGroup) useSuffix = true;
-                    std::string aEdgesGrName = (useSuffix) ? aRec.GroupName + "_Edges" : aRec.GroupName;
-                    int i = aEdgesGrName.find( "\r" );
-                    if (i > 0)
-                      aEdgesGrName.erase (i, 2);
-                    myGroupNames.insert(TGroupNamesMap::value_type(aEdgesGroup, aEdgesGrName));
-                    myGroupId.insert(TGroupIdMap::value_type(aEdgesGroup, aLabel));
-                    createdGroup = true;
-                  }
-                  aEdgesGroup->Add(aElement);
-                  break;
-
-                case SMDSAbs_Face:
-                  if (!aFacesGroup) {
-                    aFacesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Face);
-                    if (!useSuffix && createdGroup) useSuffix = true;
-                    std::string aFacesGrName = (useSuffix) ? aRec.GroupName + "_Faces" : aRec.GroupName;
-                    int i = aFacesGrName.find( "\r" );
-                    if (i > 0)
-                      aFacesGrName.erase (i, 2);
-                    myGroupNames.insert(TGroupNamesMap::value_type(aFacesGroup, aFacesGrName));
-                    myGroupId.insert(TGroupIdMap::value_type(aFacesGroup, aLabel));
-                    createdGroup = true;
-                  }
-                  aFacesGroup->Add(aElement);
-                  break;
-
-                case SMDSAbs_Volume:
-                  if (!aVolumeGroup) {
-                    aVolumeGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Volume);
-                    if (!useSuffix && createdGroup) useSuffix = true;
-                    std::string aVolumeGrName = (useSuffix) ? aRec.GroupName + "_Volumes" : aRec.GroupName;
-                    int i = aVolumeGrName.find( "\r" );
-                    if (i > 0)
-                      aVolumeGrName.erase (i, 2);
-                    myGroupNames.insert(TGroupNamesMap::value_type(aVolumeGroup, aVolumeGrName));
-                    myGroupId.insert(TGroupIdMap::value_type(aVolumeGroup, aLabel));
-                    createdGroup = true;
-                  }
-                  aVolumeGroup->Add(aElement);
-                  break;
-
-                default:;
-                }
-              } 
+            for ( int i = 0; i < aElementsNb; i++)
+            {
+              const SMDS_MeshElement* aElement = myMesh->FindElement( aRec.ElementList[i] );
+              if ( !aElement ) continue;
+
+              SMDS_MeshGroup * & aGroup = aGroupVec[ aElement->GetType() ];
+              if ( !aGroup )
+              {
+                aGroup = new SMDS_MeshGroup( myMesh );
+                if (!useSuffix && createdGroup) useSuffix = true;
+                std::string aGrName = aRec.GroupName;
+                int i = aGrName.find( "\r" );
+                if ( i > 0 )
+                  aGrName.erase (i, 2);
+                if ( useSuffix )
+                  aGrName += aSuffix[ aElement->GetType() ];
+                myGroupNames.insert( std::make_pair( aGroup, aGrName ));
+                createdGroup = true;
+              }
+              aGroup->Add(aElement);
             }
           }
         }
       }
-    } 
+    }
   }
   catch(const std::exception& exc){
     INFOS("Follow exception was cought:\n\t"<<exc.what());
@@ -499,6 +461,9 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
     INFOS("Unknown exception was cought !!!");
   }
   if (myMesh)
-    myMesh->compactMesh();
+  {
+    myMesh->Modified();
+    myMesh->CompactMesh();
+  }
   return aResult;
 }
index 4f7407dbb1704bdda2894a96e9ab2e5dcd8e26b0..42de629ca5ca5b3b72397244c16cf386d6b0591a 100644 (file)
 #include <string>
 
 
-class SMDS_Mesh;
 class SMDS_MeshGroup;
 
-
-typedef std::map<SMDS_MeshGroup*, std::string> TGroupNamesMap;
-typedef std::map<SMDS_MeshGroup*, int> TGroupIdMap;
-
 typedef std::map<SMDS_MeshGroup*, std::string> TGroupNamesMap;
-typedef std::map<SMDS_MeshGroup*, int> TGroupIdMap;
 
 class MESHDRIVERUNV_EXPORT DriverUNV_R_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
-  DriverUNV_R_SMDS_Mesh():Driver_SMDS_Mesh(),myGroup(0) {};
+  DriverUNV_R_SMDS_Mesh():Driver_SMDS_Mesh() {};
   ~DriverUNV_R_SMDS_Mesh();
+
   virtual Status Perform();
 
-  const SMDS_MeshGroup* GetGroup()         const { return myGroup;}
-  const TGroupNamesMap& GetGroupNamesMap() const { return myGroupNames; }
-  const TGroupIdMap&    GetGroupIdMap() const { return myGroupId; }
+  TGroupNamesMap& GetGroupNamesMap() { return myGroupNames; }
 
  private:
-  SMDS_MeshGroup* myGroup;
   TGroupNamesMap myGroupNames;
-  TGroupIdMap    myGroupId;
 };
 
 #endif
index d8bca84a0a723dc6827813ef0e10f9939baaddaa..02ec7588ba394e0240ddb864feb2e4cbc98e75d8 100644 (file)
@@ -25,9 +25,6 @@
 #include "DriverUNV_W_SMDS_Mesh.h"
 
 #include "SMDS_Mesh.hxx"
-#include "SMDS_QuadraticEdge.hxx"
-#include "SMDS_QuadraticFaceOfNodes.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMESHDS_GroupBase.hxx"
 
 #include "utilities.h"
index c2868486b7b05cc2a31a7e4e1fc7776b3bcf0831..183c0e4dc273c09e989c01f30585c7197cde2a8e 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <map>
 #include <vector>
-#include <fstream>      
-#include <string>       
+#include <fstream>
+#include <string>
 
 
 namespace UNV2417{
@@ -34,9 +34,9 @@ namespace UNV2417{
   typedef std::vector<int> TListOfId; // Nodal connectivitiesList of Id
 
   struct TRecord{
-    std::string    GroupName;
-    TListOfId NodeList;
-    TListOfId ElementList;
+    std::string GroupName;
+    TListOfId   NodeList;
+    TListOfId   ElementList;
   };
 
   typedef int TGroupId; // type of element label
index 6fd089d4ff423fd53f1fcee7cad0a810ffdf3546..05e39b1b2c9cc9865f26c61d8bd2d74494b6d961 100644 (file)
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${HDF5_INCLUDE_DIRS}
   ${PLATFORM_INCLUDES}
 )
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_TKernel}
-  ${CAS_TKMath}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
   ${KERNEL_SALOMELocalTrace}
 )
 
index 44940d59e5b6aab3f30aee0c58dfba01aafff2a4..21b5ead3f66025c00c87508644667c3db78c1b4c 100644 (file)
@@ -25,7 +25,7 @@ INCLUDE_DIRECTORIES(
   ${MEDFILE_INCLUDE_DIRS}
   ${QWT_INCLUDE_DIR}
   ${GEOM_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${OMNIORB_INCLUDE_DIR}
   ${Boost_INCLUDE_DIRS}
@@ -42,7 +42,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
 )
@@ -51,7 +51,7 @@ ADD_DEFINITIONS(
 SET(_link_LIBRARIES
   ${QT_LIBRARIES}
   ${VTK_LIBRARIES}
-  ${CAS_KERNEL}
+  ${OpenCASCADE_KERNEL}
   ${GEOM_GEOMObject}
   ${GUI_SalomeApp}
   ${GUI_SalomeObject}
index 6bd4e2c629a2000a66d4db19e085e5136b971abf..dac3d4a0d6418b22e1e8afcf6d0bd3ef55b6ca24 100644 (file)
@@ -804,12 +804,20 @@ bool SMESH_ActorDef::GetFacesOrientation3DVectors()
 }
 
 
+void SMESH_ActorDef::SetControl(SMESH::Controls::FunctorPtr theFunctor)
+{
+  myFunctor = theFunctor;
+  if ( !theFunctor )
+    SetControlMode( eNone, true );
+  else
+    SetControlMode( eCustomControl, true );
+}
+
 void SMESH_ActorDef::SetControlMode(eControl theMode)
 {
   SetControlMode(theMode,true);
 }
 
-
 void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
 {
   vtkLookupTable* lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
@@ -1006,6 +1014,19 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = myNodeActor;
       break;
     }
+    case eCustomControl:
+    {
+      if ( !myFunctor )
+        return;
+      switch ( myFunctor->GetType() ) {
+      case SMDSAbs_Node          : myControlActor = myNodeActor; break;
+      case SMDSAbs_Edge          : myControlActor = my1DActor;   break;
+      case SMDSAbs_Face          : myControlActor = my2DActor;   break;
+      case SMDSAbs_Volume        : myControlActor = my3DActor;   break;
+      default                    : return;
+      }
+      break;
+    }
     default:
       return;
     }
index e8818e4d50b344f94edbb1feef52b8383d1c4e75..7ad9d2f886909e799fde5ab6e3644be8aa24457a 100644 (file)
@@ -146,8 +146,10 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
                 eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
                 eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume,
                 eOverConstrainedFace, eOverConstrainedVolume, eCoincidentNodes,
-                eCoincidentElems1D, eCoincidentElems2D, eCoincidentElems3D, eNodeConnectivityNb };
+                eCoincidentElems1D, eCoincidentElems2D, eCoincidentElems3D, eNodeConnectivityNb,
+                eCustomControl };
   virtual void SetControlMode(eControl theMode) = 0;
+  virtual void SetControl(SMESH::Controls::FunctorPtr) = 0;
   virtual eControl GetControlMode() = 0;
   virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
   virtual int GetNumberControlEntities() = 0;
index 3b9d9c68f97a4de811e5531ed78b268ce4ddf815..833e8253fcd8c273d5c7f88268b48d8d43c1c4b2 100644 (file)
@@ -209,6 +209,7 @@ class SMESH_ActorDef : public SMESH_Actor
   virtual bool GetFacesOrientation3DVectors();
 
   virtual void SetControlMode(eControl theMode);
+  virtual void SetControl(SMESH::Controls::FunctorPtr theFunctor);
   virtual int GetNumberControlEntities();
   virtual eControl GetControlMode(){ return myControlMode;}
   virtual SMESH::Controls::FunctorPtr GetFunctor() { return myFunctor; }
index a1a69ff3fc4e4df79c066ceeaedf55cb468b1c94..1599efe5e602e4a12ca67ff0926f837cf8c71b20 100644 (file)
@@ -31,7 +31,6 @@
 #include "SMDS_BallElement.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshCell.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Script.hxx"
 #include "SMESH_Actor.h"
@@ -81,54 +80,6 @@ static int MYDEBUGWITHFILES = 0;
   Class       : SMESH_VisualObjDef
   Description : Base class for all mesh objects to be visuilised
 */
-
-//=================================================================================
-// function : getCellType
-// purpose  : Get type of VTK cell
-//=================================================================================
-// static inline vtkIdType getCellType( const SMDSAbs_ElementType theType,
-//                                      const bool                thePoly,
-//                                      const int                 theNbNodes )
-// {
-//   switch( theType )
-//   {
-//     case SMDSAbs_0DElement:         return VTK_VERTEX;
-
-//     case SMDSAbs_Ball:              return VTK_POLY_VERTEX;
-
-//     case SMDSAbs_Edge: 
-//       if( theNbNodes == 2 )         return VTK_LINE;
-//       else if ( theNbNodes == 3 )   return VTK_QUADRATIC_EDGE;
-//       else return VTK_EMPTY_CELL;
-
-//     case SMDSAbs_Face  :
-//       if (thePoly && theNbNodes>2 ) return VTK_POLYGON;
-//       else if ( theNbNodes == 3 )   return VTK_TRIANGLE;
-//       else if ( theNbNodes == 4 )   return VTK_QUAD;
-//       else if ( theNbNodes == 6 )   return VTK_QUADRATIC_TRIANGLE;
-//       else if ( theNbNodes == 8 )   return VTK_QUADRATIC_QUAD;
-//       else if ( theNbNodes == 9 )   return VTK_BIQUADRATIC_QUAD;
-//       else if ( theNbNodes == 7 )   return VTK_BIQUADRATIC_TRIANGLE;
-//       else return VTK_EMPTY_CELL;
-      
-//     case SMDSAbs_Volume:
-//       if (thePoly && theNbNodes>3 ) return VTK_POLYHEDRON; //VTK_CONVEX_POINT_SET;
-//       else if ( theNbNodes == 4 )   return VTK_TETRA;
-//       else if ( theNbNodes == 5 )   return VTK_PYRAMID;
-//       else if ( theNbNodes == 6 )   return VTK_WEDGE;
-//       else if ( theNbNodes == 8 )   return VTK_HEXAHEDRON;
-//       else if ( theNbNodes == 12 )  return VTK_HEXAGONAL_PRISM;
-//       else if ( theNbNodes == 10 )  return VTK_QUADRATIC_TETRA;
-//       else if ( theNbNodes == 20 )  return VTK_QUADRATIC_HEXAHEDRON;
-//       else if ( theNbNodes == 27 )  return VTK_TRIQUADRATIC_HEXAHEDRON;
-//       else if ( theNbNodes == 15 )  return VTK_QUADRATIC_WEDGE;
-//       else if ( theNbNodes == 13 )  return VTK_QUADRATIC_PYRAMID; //VTK_CONVEX_POINT_SET;
-//       else return VTK_EMPTY_CELL;
-
-//     default: return VTK_EMPTY_CELL;
-//   }
-// }
-
 //=================================================================================
 // functions : SMESH_VisualObjDef
 // purpose   : Constructor
@@ -178,7 +129,7 @@ vtkIdType SMESH_VisualObjDef::GetNodeVTKId( int theObjID )
   if( this->GetMesh() ) {
     aNode = this->GetMesh()->FindNode(theObjID);
   }
-  return aNode ? aNode->getVtkId() : -1;
+  return aNode ? aNode->GetVtkID() : -1;
 }
 
 vtkIdType SMESH_VisualObjDef::GetElemObjId( int theVTKID )
@@ -188,7 +139,7 @@ vtkIdType SMESH_VisualObjDef::GetElemObjId( int theVTKID )
     TMapOfIds::const_iterator i = myVTK2SMDSElems.find(theVTKID);
     return i == myVTK2SMDSElems.end() ? -1 : i->second;
   }
-  return this->GetMesh()->fromVtkToSmds(theVTKID);
+  return this->GetMesh()->FromVtkToSmds(theVTKID);
 }
 
 vtkIdType SMESH_VisualObjDef::GetElemVTKId( int theObjID )
@@ -203,7 +154,7 @@ vtkIdType SMESH_VisualObjDef::GetElemVTKId( int theObjID )
   if ( this->GetMesh() )
     e = this->GetMesh()->FindElement(theObjID);
 
-  return e ? e->getVtkId() : -1;
+  return e ? e->GetVtkID() : -1;
 }
 
 //=================================================================================
@@ -280,15 +231,15 @@ void SMESH_VisualObjDef::buildPrs(bool buildGrid)
   else
   {
     myLocalGrid = false;
-    if (!GetMesh()->isCompacted())
+    if (!GetMesh()->IsCompacted())
     {
       NulData(); // detach from the SMDS grid to allow immediate memory de-allocation in compactMesh()
       if ( MYDEBUG ) MESSAGE("*** buildPrs ==> compactMesh!");
-      GetMesh()->compactMesh();
+      GetMesh()->CompactMesh();
       if ( SMESHDS_Mesh* m = dynamic_cast<SMESHDS_Mesh*>( GetMesh() )) // IPAL53915
         m->GetScript()->SetModified(false); // drop IsModified set in compactMesh()
     }
-    vtkUnstructuredGrid *theGrid = GetMesh()->getGrid();
+    vtkUnstructuredGrid *theGrid = GetMesh()->GetGrid();
     updateEntitiesFlags();
     myGrid->ShallowCopy(theGrid);
     //MESSAGE(myGrid->GetReferenceCount());
@@ -395,17 +346,16 @@ void SMESH_VisualObjDef::buildElemPrs()
         if((*anIter)->GetEntityType() != SMDSEntity_Polyhedra &&
            (*anIter)->GetEntityType() != SMDSEntity_Quad_Polyhedra) {
           aCellsSize += (*anIter)->NbNodes() + 1;
-        } 
+        }
         // Special case for the VTK_POLYHEDRON:
         // itsinput cellArray is of special format.
-        //  [nCellFaces, nFace0Pts, i, j, k, nFace1Pts, i, j, k, ...]   
+        //  [nCellFaces, nFace0Pts, i, j, k, nFace1Pts, i, j, k, ...]
         else {
-          if( const SMDS_VtkVolume* ph = dynamic_cast<const SMDS_VtkVolume*>(*anIter) ) {
+          if ( const SMDS_MeshVolume* ph = SMDS_Mesh::DownCast<SMDS_MeshVolume>( *anIter )) {
             int nbFaces = ph->NbFaces();
             aCellsSize += (1 + ph->NbFaces());
-            for( int i = 1; i <= nbFaces; i++ ) {
+            for( int i = 1; i <= nbFaces; i++ )
               aCellsSize += ph->NbFaceNodes(i);
-            }
           }
         }
       }
@@ -467,16 +417,14 @@ void SMESH_VisualObjDef::buildElemPrs()
 
           if (aType == SMDSAbs_Volume && anElem->IsPoly() && aNbNodes > 3) { // POLYEDRE
             anIdList->Reset();
-            if ( const SMDS_VtkVolume* ph = dynamic_cast<const SMDS_VtkVolume*>(anElem) ) {
+            if ( const SMDS_MeshVolume* ph = SMDS_Mesh::DownCast<SMDS_MeshVolume>( anElem )) {
               int nbFaces = ph->NbFaces();
               anIdList->InsertNextId(nbFaces);
               for( int i = 1; i <= nbFaces; i++ ) {
                 anIdList->InsertNextId(ph->NbFaceNodes(i));
                 for(int j = 1; j <= ph->NbFaceNodes(i); j++) {
-                  const SMDS_MeshNode* n = ph->GetFaceNode(i,j);
-                  if(n) {
-                    anIdList->InsertNextId(mySMDS2VTKNodes[n->GetID()]);
-                  }
+                  if ( const SMDS_MeshNode* n = ph->GetFaceNode( i, j ))
+                    anIdList->InsertNextId( mySMDS2VTKNodes[ n->GetID() ]);
                 }
               }
             }
@@ -504,11 +452,8 @@ void SMESH_VisualObjDef::buildElemPrs()
         //Store diameters of the balls
         if(aScalars) {
           double aDiam = 0;
-          if(aType == SMDSAbs_Ball) {
-            if (const SMDS_BallElement* ball = dynamic_cast<const SMDS_BallElement*>(anElem) ) {
-              aDiam = ball->GetDiameter();
-            }
-          }
+          if (const SMDS_BallElement* ball = SMDS_Mesh::DownCast<SMDS_BallElement>(anElem) )
+            aDiam = ball->GetDiameter();
           aScalars->SetTuple(aCurId,&aDiam);
         }
 
@@ -573,14 +518,15 @@ bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
 
 vtkUnstructuredGrid* SMESH_VisualObjDef::GetUnstructuredGrid()
 {
-  if ( !myLocalGrid && !GetMesh()->isCompacted() )
+  if ( !myLocalGrid && ( !GetMesh()->IsCompacted() || // !IsCompacted() is needed ???
+                         GetMesh()->GetGrid()->GetMTime() > myGrid->GetMTime() ))
   {
-    NulData(); // detach from the SMDS grid to allow immediate memory de-allocation in compactMesh()
-    GetMesh()->compactMesh();
+    NulData(); // detach from the SMDS grid to allow immediate memory de-allocation in CompactMesh()
+    GetMesh()->CompactMesh();
     if ( SMESHDS_Mesh* m = dynamic_cast<SMESHDS_Mesh*>( GetMesh() )) // IPAL53915
-      m->GetScript()->SetModified(false); // drop IsModified set in compactMesh()
+      m->GetScript()->SetModified(false); // drop IsModified set in CompactMesh()
     updateEntitiesFlags();
-    vtkUnstructuredGrid *theGrid = GetMesh()->getGrid();
+    vtkUnstructuredGrid *theGrid = GetMesh()->GetGrid();
     myGrid->ShallowCopy(theGrid);
   }
   return myGrid;
index b72bb89aea9894656afa64e55098914a5cae45de..ca7c44665cebe4c13db59fd5516fb11b4a2d1463 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${QT_INCLUDES}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${PYTHON_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
   ${GUI_INCLUDE_DIRS}
@@ -36,7 +36,7 @@ INCLUDE_DIRECTORIES(
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${QT_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
 )
@@ -46,8 +46,8 @@ SET(_link_LIBRARIES
   ${KERNEL_SalomeIDLKernel}
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_SalomeLifeCycleCORBA}
-  ${CAS_TKBRep}
-  ${CAS_TKV3d}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
+  ${OpenCASCADE_Visualization_LIBRARIES}
   ${QT_LIBRARIES}
   ${QT_MT_LIBS}
   ${GUI_SalomeObject}
index e46dbf829cb501b18f4084da3e4765805c44a6b5..d05091e4e4586f31ca9a559754cb5e0c0d88a03f 100644 (file)
@@ -42,96 +42,72 @@ SET(_link_LIBRARIES
 # header files / no moc processing
 SET(SMDS_HEADERS
   ObjectPool.hxx
-  SMDS_TypeOfPosition.hxx
   SMDSAbs_ElementType.hxx
+  SMDS_BallElement.hxx
+  SMDS_CellOfNodes.hxx
+  SMDS_Downward.hxx
   SMDS_EdgePosition.hxx
   SMDS_ElemIterator.hxx
+  SMDS_ElementFactory.hxx
+  SMDS_FaceOfNodes.hxx
   SMDS_FacePosition.hxx
+  SMDS_Iterator.hxx
+  SMDS_IteratorOnIterators.hxx
+  SMDS_LinearEdge.hxx
   SMDS_Mesh.hxx
   SMDS_Mesh0DElement.hxx
-  SMDS_LinearEdge.hxx
+  SMDS_MeshCell.hxx
   SMDS_MeshEdge.hxx
   SMDS_MeshElement.hxx
-  SMDS_MeshElementIDFactory.hxx
-  SMDS_MeshCell.hxx
   SMDS_MeshFace.hxx
   SMDS_MeshGroup.hxx
-  SMDS_MeshIDFactory.hxx
+  SMDS_MeshInfo.hxx
   SMDS_MeshNode.hxx
-  SMDS_MeshNodeIDFactory.hxx
   SMDS_MeshObject.hxx
   SMDS_MeshVolume.hxx
+  SMDS_PolygonalFaceOfNodes.hxx
   SMDS_Position.hxx
+  SMDS_SetIterator.hxx
   SMDS_SpacePosition.hxx
+  SMDS_StdIterator.hxx
+  SMDS_TypeOfPosition.hxx
+  SMDS_UnstructuredGrid.hxx
   SMDS_VertexPosition.hxx
-  SMDS_Iterator.hxx
-  SMDS_IteratorOfElements.hxx
-  SMDS_VolumeOfFaces.hxx
   SMDS_VolumeOfNodes.hxx
-  SMDS_VtkEdge.hxx
-  SMDS_VtkFace.hxx
-  SMDS_VtkVolume.hxx
-  SMDS_VtkCellIterator.hxx
-  SMDS_PolyhedralVolumeOfNodes.hxx
-  SMDS_FaceOfEdges.hxx
-  SMDS_FaceOfNodes.hxx
-  SMDS_PolygonalFaceOfNodes.hxx
   SMDS_VolumeTool.hxx
-  SMDS_QuadraticEdge.hxx
-  SMDS_QuadraticFaceOfNodes.hxx
-  SMDS_QuadraticVolumeOfNodes.hxx
-  SMDS_SetIterator.hxx
+  SMDS_VtkCellIterator.hxx
+  SMDS_ElementHolder.hxx
   SMESH_SMDS.hxx
-  SMDS_MeshInfo.hxx
-  SMDS_UnstructuredGrid.hxx
-  SMDS_Downward.hxx
-  SMDS_StdIterator.hxx
-  SMDS_IteratorOnIterators.hxx
-  SMDS_BallElement.hxx
-)
+  chrono.hxx
+  )
 
 # --- sources ---
 
 # sources / static
 SET(SMDS_SOURCES
-  chrono.cxx
-  SMDS_MeshObject.cxx
-  SMDS_MeshElement.cxx
-  SMDS_MeshCell.cxx
-  SMDS_Position.cxx
-  SMDS_EdgePosition.cxx
+  SMDS_BallElement.cxx
+  SMDS_Downward.cxx
+  SMDS_CellOfNodes.cxx
+  SMDS_ElementFactory.cxx
+  SMDS_FaceOfNodes.cxx
   SMDS_FacePosition.cxx
-  SMDS_SpacePosition.cxx
-  SMDS_VertexPosition.cxx
-  SMDS_MeshNode.cxx
-  SMDS_Mesh0DElement.cxx
   SMDS_LinearEdge.cxx
-  SMDS_MeshEdge.cxx
-  SMDS_MeshFace.cxx
-  SMDS_MeshVolume.cxx
-  SMDS_MeshNodeIDFactory.cxx
-  SMDS_MeshElementIDFactory.cxx
-  SMDS_MeshGroup.cxx
-  SMDS_MeshIDFactory.cxx
+  SMDS_MemoryLimit.cxx
   SMDS_Mesh.cxx
-  SMDS_IteratorOfElements.cxx
-  SMDS_VolumeOfFaces.cxx
-  SMDS_VolumeOfNodes.cxx
-  SMDS_VtkEdge.cxx
-  SMDS_VtkFace.cxx
-  SMDS_VtkVolume.cxx
-  SMDS_VtkCellIterator.cxx
-  SMDS_PolyhedralVolumeOfNodes.cxx
-  SMDS_FaceOfEdges.cxx
-  SMDS_FaceOfNodes.cxx
+  SMDS_MeshCell.cxx
+  SMDS_MeshElement.cxx
+  SMDS_MeshGroup.cxx
+  SMDS_MeshNode.cxx
+  SMDS_MeshObject.cxx
+  SMDS_MeshVolume.cxx
   SMDS_PolygonalFaceOfNodes.cxx
-  SMDS_VolumeTool.cxx
-  SMDS_QuadraticEdge.cxx
-  SMDS_QuadraticFaceOfNodes.cxx
-  SMDS_QuadraticVolumeOfNodes.cxx
+  SMDS_SpacePosition.cxx
   SMDS_UnstructuredGrid.cxx
-  SMDS_Downward.cxx
-  SMDS_BallElement.cxx 
+  SMDS_VolumeOfNodes.cxx
+  SMDS_VolumeTool.cxx
+  SMDS_VtkCellIterator.cxx
+  SMDS_ElementHolder.cxx
+  chrono.cxx
 )
 
 # bin programs
diff --git a/src/SMDS/Notes b/src/SMDS/Notes
deleted file mode 100644 (file)
index 830ffb5..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
---> Branche V6_main
-
-Problemes en cours
-==================
-- a faire
-+ en cours, OK mais perfectible
-* OK
-
-+ visualisation de groupe (type d'element): on voit tout le maillage, mais le groupe est OK
-  creation d'une structure vtkUnstructuredGrid locale : iteration un peu lourde, et pas de partage avec la structure du maillage (pas evident)
-- inversion d'un volume (tetra): exception
-- script de creation de noeuds et d'elements: OK, mais pas compatible avec version precedente (numerotation noeuds differente)
-+ affichage numeros noeuds: numeros en trop sur (O,0,0) pas systematique, trouver la condition (enlever dans vtkUnstructuredGrid ?)
-  ==> purge systematique noeuds et cellules en trop dans compactage grid.
-+ gestion du mode embedded mal faite lors d'un script python : journal commandes intempestif
-- affichage des noeuds apres changement lineaire <--> quadratique à l'IHM : pas pris en compte, alors que maillage OK,
-  mais script OK
-  ==> cassé apres mode embedded ou elimination noeuds en trop ?
-- extrusion elements 2D along a path : affichage apres calcul pas toujours OK (filaire)
-- branche git a ouvrir pour merge avec V5_1_4_BR tag V5_1_4rc1
-
-A tester, non pris en compte
-============================
-- engine standalone
-- polyedres (attendre vtk)
-
-
-=============================== Hypothese de refonte de l'API de SMDS
-
-n'utiliser que vtkUnstructuredGrid, ne pas avor d'objets SMDS_MeshElement mais seulement des index de vtkUnstructuredGrid.
-2987 usages de SMDS_MeshNodes
-810            SMDS_MeshElement
-...
-==> en dernier ressort, lourd
-================================================================================
-
-Essai a API SMDS a peu pres constante
-=====================================
-
-SMDS_Mesh
-  static vector<SMDS_Mesh*> _meshList;     --> retrouver un SMDS_Mesh
-  vtkUnstructuredGrid*      myGrid;
-
-  vector<SMDS_MeshNode *>   myNodes;       --> meme index que dans le pointSet de myGrid
-  vector<SMDS_MeshCell *>   myCells;       --> index = ID client, pas le meme index que dans le cellTypes de myGrid (ID vtk)
-
-
-
-SMDS_MeshElement
-  int myID;                                --> index dans la structure geree par SMDS_Mesh
-  int myMeshId;                            --> pour retrouver SMDS_Mesh* dans _meshList
-  int myShapeId;                           --> pour retrouver la subShape
-                                                         
-
-SMDS_MeshNode: SMDS_MeshElement
-  SMDS_PositionPtr myPosition;             -->  A REVOIR : objet position dans la shape geom
-  ##vector<int> myInverseElements;         -->  SUPPRIME : pour retrouver les elements, vtkCellLinks
-
-
-SMDS_MeshCell: SMDS_MeshElement            --> generique pour tous les elements (cells)
-  int myVtkID                              --> A SUPPRIMER
-
-SMDS_MeshVolume: SMDS_MeshCell
-
-SMDS_VolumeOfNodes: SMDS_MeshVolume        --> Garder temporairement, utilisation dans StdMesher et SMDS_VolumeTool
-  const SMDS_MeshNode **myNodes;           --> Couteux
-  int                 myNbNodes;           -->  ""
-
-SMDS_VolumeVtkNodes: SMDS_MeshVolume       --> Utiliser systematiquement dans SMDS,
-                                           --> IMPLEMENTER.
-
-
-SMDS_MeshElementIDFactory: SMDS_MeshNodeIDFactory
-  vector<int> myIDElements; // index = ID client, value = ID vtk  --> A SUPPRIMER, ne sert que dans SMDS_MeshElementIDFactory
-  vector<int> myVtkIndex;   // index = ID vtk, value = ID client  --> A REPORTER dans SMDS_Mesh
-
-
-
-
-========= TODO ============
-
-enlever vtkId de SMDS_MeshCell, utiliser SMDS_MeshElementIDFactory.
-
-ajouter ID dans SMDS_Mesh::createTriangle 
-verifier ID dans SMDS_Mesh::Find*OrCreate
-
-===================================================
-occupation memoire cube 100*100*100 sans affichage
-NOTES:
-- sur Debian Sarge 64 bits, les mesures malloc_stat() semblent coherentes
-  avec une mesure externe globale(recherche du passage en swap du process).
-- sur Ubuntu 9.10 64 bits, les mesures malloc_stat() donnent des resultats bizarres (surestimation ?),
-  mais la mesure avec l'outil KDE de surveillance systeme est OK avec la recherche du swap.
-
-
-Reference : V513 Debian Sarge 64 bits: --> 463 - 33 = 430 Mo
--------------------------------------
-Total (incl. mmap):
-system bytes     =   43757568
-in use bytes     =   32909584 = 33M
-max mmap regions =         41
-max mmap bytes   =   16371712
-----
-Total (incl. mmap):
-system bytes     =  464670720
-in use bytes     =  463105120 = 463M
-max mmap regions =         47
-max mmap bytes   =   28188672
-
-Debian Sarge 64 bits, vtkUnstructuredGrid nodes et hexa, 4 janvier 2010 --> 512 - 41 = 471M
------------------------------------
-
-Total (incl. mmap):
-system bytes     =   52133888
-in use bytes     =   41340320 : 41M
-max mmap regions =         72
-max mmap bytes   =   24625152
-----
-Total (incl. mmap):
-system bytes     =  520560640
-in use bytes     =  518735584 : 512M
-max mmap regions =         88
-max mmap bytes   =  198385664
-
-idem avec pool SMDS_MeshNodes --> 483 -33 = 450M
------------------------------
-Total (incl. mmap):
-system bytes     =   43696128
-in use bytes     =   32915184 : 33M 
-max mmap regions =         41
-max mmap bytes   =   16371712
-----
-Total (incl. mmap):
-system bytes     =  484806656
-in use bytes     =  482980992 : 483M
-max mmap regions =         58
-max mmap bytes   =  184557568
-
-idem ci-dessus + pool SMDS_VolumeVtkNodes --> 475 -33 = 442M (git: add ObjectPool.hxx)
------------------------------------------
-
-Total (incl. mmap):
-system bytes     =   43200512
-in use bytes     =   32908576 : 33M
-max mmap regions =         41
-max mmap bytes   =   16371712
-----
-Total (incl. mmap):
-system bytes     =  478068736
-in use bytes     =  475144400 : 475M
-max mmap regions =         59
-max mmap bytes   =  184692736
-
-remplacement SMDS_PositionPtr: (boost::shared_ptr<SMDS_Position> --> SMDS_Position*) --> 436 - 35 = 401M (git SMDS_Position)
-------------------------------------------------------------------------------------
-Total (incl. mmap):
-system bytes     =   45408256
-in use bytes     =   35097680 : 35M
-max mmap regions =         47
-max mmap bytes   =   18116608
-----
-Total (incl. mmap):
-system bytes     =  438935552
-in use bytes     =  436116560 : 436M
-max mmap regions =         65
-max mmap bytes   =  186437632
-
-simplification SMDS_SpacePosition (pas de double[3]) --> 418 -33 = 385M (git SMDS_SpacePosition)
-----------------------------------------------------
-Total (incl. mmap):
-system bytes     =   42582016
-in use bytes     =   32883552 : 33M
-max mmap regions =         41
-max mmap bytes   =   16371712
-----
-Total (incl. mmap):
-system bytes     =  421728256
-in use bytes     =  418378000 : 418M
-max mmap regions =         58
-max mmap bytes   =  183640064
-
-sizeof(SMDS_MeshElement) 16
-sizeof(SMDS_MeshNode) 24
-sizeof(SMDS_MeshCell) 24
-sizeof(SMDS_VolumeVtkNodes) 24
-sizeof(SMDS_Position) 16
-sizeof(SMDS_SpacePosition) 16
-
-impact d'un int en plus dans SMDS_MeshElement --> 426 - 33 = 393M
----------------------------------------------
-
-sizeof(SMDS_MeshElement) 24
-sizeof(SMDS_MeshNode) 32       --> on retrouve bien les 8M
-sizeof(SMDS_MeshCell) 24
-sizeof(SMDS_VolumeVtkNodes) 24
-sizeof(SMDS_Position) 16
-sizeof(SMDS_SpacePosition) 16
-
-Total (incl. mmap):
-system bytes     =   43192320
-in use bytes     =   32681088 : 33M
-max mmap regions =         41
-max mmap bytes   =   16371712
-----
-Total (incl. mmap):
-system bytes     =  429334528
-in use bytes     =  426424576 : 426M
-max mmap regions =         59
-max mmap bytes   =  184692736
-
-remplacement std::set par std::vector dans SMESHDS_SubMesh --> 347 - 35 = 312M
-----------------------------------------------------------
-sizeof(SMDS_MeshElement) 24
-sizeof(SMDS_MeshNode) 32
-sizeof(SMDS_MeshCell) 24
-sizeof(SMDS_VolumeVtkNodes) 24
-sizeof(SMDS_Position) 16
-sizeof(SMDS_SpacePosition) 16
-
-Total (incl. mmap):
-system bytes     =   45404160
-in use bytes     =   35132160 --> 35M
-max mmap regions =         49
-max mmap bytes   =   17723392
-----
-Total (incl. mmap):
-system bytes     =  349831168
-in use bytes     =  346885424 --> 347M
-max mmap regions =         73
-max mmap bytes   =  204148736
-
-Ce resultat est coherent avec une recherche de swap sur une machine a 8Go de memoire:
-Cube a 270**3 mailles (~20M mailles) --> 6.2 Go (idem Debian Sarge et Ubuntu 9.10, 64 bits)
-Le meme avec V5.1.3 --> 14 Go (swap)
-
index ef514b353b0388fdcf4b61eb0cb8924a1742327e..d7eea28c32a812a0bcc20774556633d32aba4c83 100644 (file)
@@ -28,9 +28,9 @@
 namespace
 {
   // assure deallocation of memory of a vector
-  template<class Y> void clearVector(std::vector<Y>& v )
+  template<class Y> void clearVector(& v )
   {
-    std::vector<Y> emptyVec; v.swap( emptyVec );
+    Y emptyVec; v.swap( emptyVec );
   }
 }
 
index fd3859681325b9784447cf98be9a954d34516b46..7a10f79d3883050af8d56a9f263abe347224dde3 100644 (file)
 
 #include "SMDS_BallElement.hxx"
 
-#include "SMDS_ElemIterator.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_VtkCellIterator.hxx"
 
-SMDS_BallElement::SMDS_BallElement()
+void SMDS_BallElement::init(const SMDS_MeshNode * node, double diameter )
 {
-  SMDS_MeshCell::init();
-}
-
-SMDS_BallElement::SMDS_BallElement (const SMDS_MeshNode * node, double diameter)
-{
-  init( node->getVtkId(), diameter, SMDS_Mesh::_meshList[ node->getMeshId() ] );
-}
-
-SMDS_BallElement::SMDS_BallElement(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh)
-{
-  init( nodeId, diameter, mesh );
-}
-
-void SMDS_BallElement::init(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh)
-{
-  SMDS_MeshCell::init();
-  myMeshId = mesh->getMeshId();
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell( GetVtkType(), 1, &nodeId );
-  mesh->getGrid()->SetBallDiameter( myVtkID, diameter );
-  mesh->setMyModified();
+  int nodeVtkID = node->GetVtkID();
+  int vtkID = getGrid()->InsertNextLinkedCell( toVtkType( SMDSEntity_Ball ), 1, &nodeVtkID );
+  setVtkID( vtkID );
+  getGrid()->SetBallDiameter( GetVtkID(), diameter );
 }
 
 double SMDS_BallElement::GetDiameter() const
 {
-  return SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetBallDiameter( myVtkID );
+  return getGrid()->GetBallDiameter( GetVtkID() );
 }
 
 void SMDS_BallElement::SetDiameter(double diameter)
 {
-  SMDS_Mesh::_meshList[myMeshId]->getGrid()->SetBallDiameter( myVtkID, diameter );
-}
-
-bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node)
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  pts[0] = node->getVtkId();
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-  return true;
-}
-
-void SMDS_BallElement::Print (std::ostream & OS) const
-{
-  OS << "ball<" << GetID() << "> : ";
+  getGrid()->SetBallDiameter( GetVtkID(), diameter );
+  GetMesh()->setMyModified();
 }
-
-const SMDS_MeshNode* SMDS_BallElement::GetNode (const int ind) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( myVtkID, npts, pts );
-  return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ 0 ]);
-}
-
-SMDS_ElemIteratorPtr SMDS_BallElement::elementsIterator (SMDSAbs_ElementType type) const
-{
-  switch (type)
-  {
-    case SMDSAbs_Node:
-      return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-    default:
-      ;
-      return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
-  }
-}
-
index c62034de77527563915e41cf380e8a9dedd19474..4e7c6346e79b81895b00ee265d5ee665dc64c380 100644 (file)
 #include "SMESH_SMDS.hxx"
 #include "SMDS_MeshCell.hxx"
 
-#include <iostream>
-
+/*!
+ * \brief Ball element. This type is not allocated.
+ *        It is only used as function argument type to provide more clear semantic
+ *        and to provide API specific to ball element
+ */
 class SMDS_EXPORT SMDS_BallElement: public SMDS_MeshCell
 {
+  void init(const SMDS_MeshNode * node, double diameter);
+
+  friend class SMDS_Mesh;
+
  public:
-  SMDS_BallElement();
-  SMDS_BallElement (const SMDS_MeshNode * node, double diameter);
-  SMDS_BallElement(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh);
-  void init(vtkIdType nodeId, double diameter, SMDS_Mesh* mesh);
+
   double GetDiameter() const;
-  void SetDiameter(double diameter);
-  bool ChangeNode (const SMDS_MeshNode * node);
-
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                           const int            nbNodes) { return ChangeNode( nodes[0] ); }
-  virtual void Print (std::ostream & OS) const;
-
-  virtual SMDSAbs_ElementType  GetType()       const { return SMDSAbs_Ball; }
-  virtual vtkIdType            GetVtkType()    const { return VTK_POLY_VERTEX; }
-  virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Ball; }
-  virtual SMDSAbs_GeometryType GetGeomType()   const { return SMDSGeom_BALL; }
-  virtual int NbNodes() const { return 1; }
-  virtual int NbEdges() const { return 0; }
-  virtual int NbFaces() const { return 0; }
-  virtual const SMDS_MeshNode* GetNode (const int ind) const;
-
- protected:
-  SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
+  void   SetDiameter(double diameter);
+
+  static SMDSAbs_ElementType Type() { return SMDSAbs_Ball; }
 };
 
 #endif
diff --git a/src/SMDS/SMDS_CellOfNodes.cxx b/src/SMDS/SMDS_CellOfNodes.cxx
new file mode 100644 (file)
index 0000000..bea007f
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMDS : implementation of Salome mesh data structure
+//
+
+#include "SMDS_CellOfNodes.hxx"
+
+SMDS_CellOfNodes::SMDS_CellOfNodes( int id, int shapeID )
+  : myID( id )
+{
+  setShapeID( shapeID );
+}
+
+void SMDS_CellOfNodes::setID(const int id)
+{
+  myID = id;
+}
+
+int SMDS_CellOfNodes::GetID() const
+{
+  return myID;
+}
+
+void SMDS_CellOfNodes::setShapeID( const int shapeID )
+{
+  myShapeID = ( shapeID << BITS_SHIFT ) | ( myShapeID & BIT_IS_MARKED );
+}
+
+int SMDS_CellOfNodes::GetShapeID() const
+{
+  return myShapeID >> BITS_SHIFT;
+}
+
+void SMDS_CellOfNodes::setIsMarked( bool is ) const
+{
+  const_cast< SMDS_CellOfNodes* >( this )->myShapeID = ( myShapeID & ~BIT_IS_MARKED ) | is;
+}
+
+bool SMDS_CellOfNodes::isMarked() const
+{
+  return myShapeID & BIT_IS_MARKED;
+}
diff --git a/src/SMDS/SMDS_CellOfNodes.hxx b/src/SMDS/SMDS_CellOfNodes.hxx
new file mode 100644 (file)
index 0000000..4880d07
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMDS : implementation of Salome mesh data structure
+//  File   : SMDS_CellOfNodes.hxx
+//  Module : SMESH
+//
+#ifndef _SMDS_CellOfNodes_HeaderFile
+#define _SMDS_CellOfNodes_HeaderFile
+
+#include "SMESH_SMDS.hxx"
+        
+#include "SMDS_MeshElement.hxx"
+
+// ============================================================
+/*!
+ * \brief Base class for elements of not contained in the mesh
+ */
+// ============================================================
+
+
+class SMDS_EXPORT SMDS_CellOfNodes : public SMDS_MeshElement
+{
+public:
+
+  virtual int GetID() const;
+  virtual int GetShapeID() const;
+
+  virtual void setIsMarked( bool is ) const;
+  virtual bool isMarked() const;
+
+  virtual VTKCellType GetVtkType() const { return VTK_EMPTY_CELL; }
+
+ protected:
+
+  SMDS_CellOfNodes( int id = -1, int shapeID = 0);
+
+  virtual void setID( const int id);
+  virtual void setShapeID( const int shapeID );
+
+  int  myID;
+  int  myShapeID;
+
+  enum Bits { // use the 1st right bit of myShapeId to set/unset a mark
+    BIT_IS_MARKED = 1,
+    BITS_SHIFT = 1
+  };
+};
+#endif
index c4ead4dac025f38aa829ce2f1619d621c3e8d2f7..1955fa892283bd911a8cddc472ac49678245544e 100644 (file)
@@ -1145,7 +1145,7 @@ void SMDS_DownTetra::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& o
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -1253,7 +1253,7 @@ void SMDS_DownQuadTetra::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -1387,7 +1387,7 @@ void SMDS_DownPyramid::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>&
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -1531,7 +1531,7 @@ void SMDS_DownQuadPyramid::getOrderedNodesOfFace(int cellId, std::vector<vtkIdTy
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2] << " " << orderedNodes[3]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -1694,7 +1694,7 @@ void SMDS_DownPenta::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& o
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -1845,7 +1845,7 @@ void SMDS_DownQuadPenta::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
@@ -2000,7 +2000,7 @@ void SMDS_DownHexa::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& or
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2] << " " << orderedNodes[3]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
   MESSAGE(nodes[4] << " " << nodes[5] << " " << nodes[6] << " " << nodes[7]);
@@ -2132,7 +2132,7 @@ void SMDS_DownQuadHexa::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>
       return;
     }
   }
-  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->fromVtkToSmds(_vtkCellIds[cellId]));
+  MESSAGE("=== Problem volume " << _vtkCellIds[cellId] << " " << _grid->_mesh->FromVtkToSmds(_vtkCellIds[cellId]));
   MESSAGE(orderedNodes[0] << " " << orderedNodes[1] << " " << orderedNodes[2] << " " << orderedNodes[3]);
   MESSAGE(nodes[0] << " " << nodes[1] << " " << nodes[2] << " " << nodes[3]);
 }
diff --git a/src/SMDS/SMDS_EdgePosition.cxx b/src/SMDS/SMDS_EdgePosition.cxx
deleted file mode 100644 (file)
index 9ac728d..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_EdgePosition.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#include "SMDS_EdgePosition.hxx"
-
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_EdgePosition
-//purpose  : 
-//=======================================================================
-
-SMDS_EdgePosition::SMDS_EdgePosition(const double aUParam): myUParameter(aUParam)
-{
-  //MESSAGE("********************************* SMDS_EdgePosition " << myUParameter);
-}
-
-/**
-*/
-SMDS_TypeOfPosition SMDS_EdgePosition::GetTypeOfPosition() const
-{
-  //MESSAGE("###################################### SMDS_EdgePosition::GetTypeOfPosition");
-        return SMDS_TOP_EDGE;
-}
-
-void SMDS_EdgePosition::SetUParameter(double aUparam)
-{
-  //MESSAGE("############################### SMDS_EdgePosition::SetUParameter " << aUparam);
-        myUParameter = aUparam;
-}
-
-//=======================================================================
-//function : GetUParameter
-//purpose  : 
-//=======================================================================
-
-double SMDS_EdgePosition::GetUParameter() const 
-{
-  //MESSAGE("########################## SMDS_EdgePosition::GetUParameter " << myUParameter);
-        return myUParameter;
-}
index f0870e9704e720aab24c64b5ea6d73063ec5ed58..e2c9cf19ec37a9cc26e2fff1ed0e0a8bcafff1f3 100644 (file)
 
 #include "SMDS_Position.hxx"
 
-class SMDS_EXPORT SMDS_EdgePosition:public SMDS_Position
+class SMDS_EXPORT SMDS_EdgePosition : public SMDS_Position
 {
 
-  public:
-        SMDS_EdgePosition(const double aUParam=0);
-        SMDS_TypeOfPosition GetTypeOfPosition() const;
-        void SetUParameter(double aUparam);
-        double GetUParameter() const;
+ public:
+  SMDS_EdgePosition(const double aUParam=0) : myUParameter( aUParam ) {}
+  virtual SMDS_TypeOfPosition GetTypeOfPosition() const { return SMDS_TOP_EDGE; }
+  virtual void   SetUParameter(double aUparam) { myUParameter = aUparam; }
+  virtual double GetUParameter() const { return myUParameter; }
+  virtual const double* GetParameters() const { return &myUParameter; }
 
 private:
+ private:
 
-        double myUParameter;
+  double myUParameter;
 
 };
 
diff --git a/src/SMDS/SMDS_ElementFactory.cxx b/src/SMDS/SMDS_ElementFactory.cxx
new file mode 100644 (file)
index 0000000..a6d61e8
--- /dev/null
@@ -0,0 +1,880 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SMDS_ElementFactory.cxx
+//  Module : SMESH
+//
+
+#include "SMDS_ElementFactory.hxx"
+
+#include "ObjectPool.hxx"
+#include "SMDS_EdgePosition.hxx"
+#include "SMDS_FacePosition.hxx"
+#include "SMDS_Mesh.hxx"
+#include "SMDS_SpacePosition.hxx"
+#include "SMDS_VertexPosition.hxx"
+
+namespace
+{
+  // nb of elements allocated by SMDS_ElementChunk at once
+  const int theChunkSize = 1024;
+
+  const int theDefaultShapeDim = 3;
+
+  // classes allowing to modify parameters of SMDS_Position stored in SMDS_ElementFactory
+
+  struct _EdgePosition : public SMDS_EdgePosition
+  {
+    TParam* myUParameter;
+
+    _EdgePosition( TParam* aUParam ) : myUParameter( aUParam )
+    { SMDS_EdgePosition::SetUParameter( aUParam[0]); }
+    virtual void   SetUParameter(double aUparam)
+    { *myUParameter = (TParam) aUparam; SMDS_EdgePosition::SetUParameter( aUparam ); }
+  };
+
+  struct _FacePosition : public SMDS_FacePosition
+  {
+    TParam* myParameter;
+
+    _FacePosition(TParam* aParam) : myParameter( aParam )
+    { SMDS_FacePosition::SetParameters( aParam[0], aParam[1] ); }
+    virtual void SetUParameter(double aUparam)
+    { myParameter[0] = (TParam) aUparam; SMDS_FacePosition::SetUParameter( aUparam ); }
+    virtual void SetVParameter(double aVparam)
+    { myParameter[1] = (TParam) aVparam; SMDS_FacePosition::SetVParameter( aVparam ); }
+    virtual void SetParameters(double aU, double aV)
+    { myParameter[0] = aU; myParameter[1] = aV; SMDS_FacePosition::SetParameters( aU, aV ); }
+  };
+}
+
+//================================================================================
+/*!
+ * \brief Create a factory of cells or nodes in a given mesh
+ */
+//================================================================================
+
+SMDS_ElementFactory::SMDS_ElementFactory( SMDS_Mesh* mesh, const bool isNodal )
+  : myIsNodal( isNodal ), myMesh( mesh ), myNbUsedElements( 0 )
+{
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMDS_ElementFactory::~SMDS_ElementFactory()
+{
+  myChunksWithUnused.clear();
+  myChunks.clear();
+}
+
+//================================================================================
+/*!
+ * \brief Return a number of elements in a chunk
+ *  \return int - chunk size
+ */
+//================================================================================
+
+int SMDS_ElementFactory::ChunkSize()
+{
+  return theChunkSize;
+}
+
+//================================================================================
+/*!
+ * \brief Return minimal ID of a non-used element
+ *  \return int - minimal element ID
+ */
+//================================================================================
+
+int SMDS_ElementFactory::GetFreeID()
+{
+  if ( myChunksWithUnused.empty() )
+  {
+    int id0 = myChunks.size() * theChunkSize + 1;
+    myChunks.push_back( new SMDS_ElementChunk( this, id0 ));
+  }
+  SMDS_ElementChunk * chunk = (*myChunksWithUnused.begin());
+  return chunk->GetUnusedID();
+}
+
+//================================================================================
+/*!
+ * \brief Return maximal ID of an used element
+ *  \return int - element ID
+ */
+//================================================================================
+
+int SMDS_ElementFactory::GetMaxID()
+{
+  int id = 0;
+  TIndexRanges usedRanges;
+  for ( int i = myChunks.size() - 1; i >= 0; --i )
+    if ( myChunks[i].GetUsedRanges().GetIndices( true, usedRanges ))
+    {
+      int index = usedRanges.back().second-1;
+      id = myChunks[i].Get1stID() + index;
+      break;
+    }
+  return id;
+}
+
+//================================================================================
+/*!
+ * \brief Return minimal ID of an used element
+ *  \return int - element ID
+ */
+//================================================================================
+
+int SMDS_ElementFactory::GetMinID()
+{
+  int id = 0;
+  TIndexRanges usedRanges;
+  for ( size_t i = 0; i < myChunks.size(); ++i )
+    if ( myChunks[i].GetUsedRanges().GetIndices( true, usedRanges ))
+    {
+      int index = usedRanges[0].first;
+      id = myChunks[i].Get1stID() + index;
+      break;
+    }
+  return id;
+}
+
+//================================================================================
+/*!
+ * \brief Return an element by ID. NULL if the element with the given ID is already used
+ *  \param [in] id - element ID
+ *  \return SMDS_MeshElement* - element pointer
+ */
+//================================================================================
+
+SMDS_MeshElement* SMDS_ElementFactory::NewElement( const int id )
+{
+  int iChunk = ( id - 1 ) / theChunkSize;
+  int index  = ( id - 1 ) % theChunkSize;
+  while ((int) myChunks.size() <= iChunk )
+  {
+    int id0 = myChunks.size() * theChunkSize + 1;
+    myChunks.push_back( new SMDS_ElementChunk( this, id0 ));
+  }
+  SMDS_MeshElement* e = myChunks[iChunk].Element( index );
+  if ( !e->IsNull() )
+    return 0; // element with given ID already exists
+
+  myChunks[iChunk].UseElement( index );
+  ++myNbUsedElements;
+
+  e->myHolder = & myChunks[iChunk];
+
+  myMesh->setMyModified();
+
+  return e;
+}
+
+//================================================================================
+/*!
+ * \brief Return an used element by ID. NULL if the element with the given ID is not yet used
+ *  \param [in] id - element ID
+ *  \return const SMDS_MeshElement* - element pointer
+ */
+//================================================================================
+
+const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const int id ) const
+{
+  if ( id > 0 )
+  {
+    int iChunk = ( id - 1 ) / theChunkSize;
+    int index  = ( id - 1 ) % theChunkSize;
+    if ( iChunk < (int) myChunks.size() )
+    {
+      const SMDS_MeshElement* e = myChunks[iChunk].Element( index );
+      return e->IsNull() ? 0 : e;
+    }
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Return an SMDS ID by a Vtk one
+ *  \param [inout] vtkID - Vtk ID
+ *  \return int - SMDS ID
+ */
+//================================================================================
+
+int SMDS_ElementFactory::FromVtkToSmds( vtkIdType vtkID )
+{
+  if ( vtkID >= 0 && vtkID < (vtkIdType)mySmdsIDs.size() )
+    return mySmdsIDs[vtkID] + 1;
+  return vtkID + 1;
+}
+
+//================================================================================
+/*!
+ * \brief Mark the element as non-used
+ *  \param [in] e - element
+ */
+//================================================================================
+
+void SMDS_ElementFactory::Free( const SMDS_MeshElement* e )
+{
+  if ( !myVtkIDs.empty() )
+  {
+    size_t    id = e->GetID() - 1;
+    size_t vtkID = e->GetVtkID();
+    if ( id < myVtkIDs.size() )
+      myVtkIDs[ id ] = -1;
+    if ( vtkID < mySmdsIDs.size() )
+      mySmdsIDs[ vtkID ] = -1;
+  }
+  e->myHolder->Free( e );
+  const_cast< SMDS_MeshElement*>( e )->myHolder = 0;
+  --myNbUsedElements;
+
+  myMesh->setMyModified();
+}
+
+//================================================================================
+/*!
+ * \brief De-allocate all elements
+ */
+//================================================================================
+
+void SMDS_ElementFactory::Clear()
+{
+  myChunksWithUnused.clear();
+  clearVector( myChunks );
+  clearVector( myVtkIDs );
+  clearVector( mySmdsIDs );
+  myNbUsedElements = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Remove unused elements located not at the end of the last chunk.
+ *        Minimize allocated memory
+ *  \param [out] theVtkIDsNewToOld - theVtkIDsNewToOld[ new VtkID ] = old VtkID
+ */
+//================================================================================
+
+void SMDS_ElementFactory::Compact( std::vector<int>& theVtkIDsNewToOld )
+{
+  int  newNbCells = NbUsedElements();
+  int   maxCellID = GetMaxID();
+  int newNbChunks = newNbCells / theChunkSize + bool ( newNbCells % theChunkSize );
+
+  theVtkIDsNewToOld.resize( newNbCells );
+
+  if ( newNbCells == 0 ) // empty mesh
+  {
+    clearVector( myChunks );
+  }
+  else if ( newNbCells == maxCellID ) // no holes
+  {
+    int newID, minLastID = std::min( myVtkIDs.size(), theVtkIDsNewToOld.size() );
+    for ( newID = 0; newID < minLastID; ++newID )
+      theVtkIDsNewToOld[ newID ] = myVtkIDs[ newID ];
+    for ( ; newID < newNbCells; ++newID )
+      theVtkIDsNewToOld[ newID ] = newID;
+  }
+  else // there are holes in SMDS IDs
+  {
+    int newVtkID = 0; // same as new smds ID (-1)
+    for ( int oldID = 1; oldID <= maxCellID; ++oldID ) // smds IDs
+    {
+      const SMDS_MeshElement* oldElem = FindElement( oldID );
+      if ( !oldElem ) continue;
+      theVtkIDsNewToOld[ newVtkID++ ] = oldElem->GetVtkID(); // now newVtkID == new smds ID
+      if ( oldID != newVtkID )
+      {
+        const SMDS_MeshElement* newElem = FindElement( newVtkID );
+        if ( !newElem )
+          newElem = NewElement( newVtkID );
+        if ( int shapeID = oldElem->GetShapeID() )
+          const_cast< SMDS_MeshElement* >( newElem )->setShapeID( shapeID );
+        if ( oldID > newNbCells )
+          Free( oldElem );
+      }
+    }
+  }
+  myChunks.resize( newNbChunks );
+
+  myChunksWithUnused.clear();
+  if ( !myChunks.empty() && myChunks.back().GetUsedRanges().Size() > 1 )
+    myChunksWithUnused.insert( & myChunks.back() );
+
+  for ( size_t i = 0; i < myChunks.size(); ++i )
+    myChunks[i].Compact();
+
+  clearVector( myVtkIDs );
+  clearVector( mySmdsIDs );
+}
+
+
+//================================================================================
+/*!
+ * \brief Return true if Compact() will change IDs of elements
+ */
+//================================================================================
+
+bool SMDS_ElementFactory::CompactChangePointers()
+{
+  // there can be VTK_EMPTY_CELL's in the VTK grid as well as "holes" in SMDS numeration
+  return ( NbUsedElements() != GetMaxID() );
+}
+
+//================================================================================
+/*!
+ * \brief Create a factory of nodes in a given mesh
+ */
+//================================================================================
+
+SMDS_NodeFactory::SMDS_NodeFactory( SMDS_Mesh* mesh )
+  : SMDS_ElementFactory( mesh, /*isNodal=*/true )
+{
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMDS_NodeFactory::~SMDS_NodeFactory()
+{
+  Clear();
+}
+
+//================================================================================
+/*!
+ * \brief Remove unused nodes located not at the end of the last chunk.
+ *        Minimize allocated memory
+ *  \param [out] theVtkIDsOldToNew - vector storing change of vtk IDs
+ */
+//================================================================================
+
+void SMDS_NodeFactory::Compact( std::vector<int>& theVtkIDsOldToNew )
+{
+  // IDs of VTK nodes always correspond to SMDS IDs but there can be "holes"
+  // in the chunks. So we remove holes and report relocation in theVtkIDsOldToNew:
+  // theVtkIDsOldToNew[ old VtkID ] = new VtkID
+
+  int  oldNbNodes = myMesh->GetGrid()->GetNumberOfPoints();
+  int  newNbNodes = NbUsedElements();
+  int newNbChunks = newNbNodes / theChunkSize + bool ( newNbNodes % theChunkSize );
+  int   maxNodeID = GetMaxID();
+
+  theVtkIDsOldToNew.resize( oldNbNodes, -1 );
+
+  if ( newNbNodes == 0 ) // empty mesh
+  {
+    clearVector( myChunks );
+  }
+  else if ( maxNodeID > newNbNodes ) // there are holes
+  {
+    size_t newID = 0;
+    for ( size_t oldID = 0; oldID < theVtkIDsOldToNew.size(); ++oldID )
+    {
+      const SMDS_MeshElement* oldNode = FindNode( oldID+1 );
+      if ( !oldNode )
+        continue;
+      theVtkIDsOldToNew[ oldID ] = newID;
+      if ( oldID != newID )
+      {
+        const SMDS_MeshElement* newNode = FindElement( newID+1 );
+        if ( !newNode )
+          newNode = NewElement( newID+1 );
+        int  shapeID = oldNode->GetShapeID();
+        int shapeDim = GetShapeDim( shapeID );
+        int   iChunk = newID / theChunkSize;
+        myChunks[ iChunk ].SetShapeID( newNode, shapeID );
+        if ( shapeDim == 2 || shapeDim == 1 )
+        {
+          int iChunkOld = oldID / theChunkSize;
+          TParam* oldPos = myChunks[ iChunkOld ].GetPositionPtr( oldNode );
+          TParam* newPos = myChunks[ iChunk    ].GetPositionPtr( newNode, /*allocate=*/true );
+          if ( oldPos )
+          {
+            newPos[0] = oldPos[0];
+            newPos[1] = oldPos[1];
+          }
+        }
+        if ( oldNode->GetID() > newNbNodes )
+          Free( oldNode );
+      }
+      ++newID;
+    }
+  }
+  else // no holes
+  {
+    for ( int i = 0; i < newNbNodes; ++i )
+      theVtkIDsOldToNew[ i ] = i;
+  }
+  myChunks.resize( newNbChunks );
+
+  myChunksWithUnused.clear();
+  if ( !myChunks.empty() && myChunks.back().GetUsedRanges().Size() > 1 )
+    myChunksWithUnused.insert( & myChunks.back() );
+
+  for ( size_t i = 0; i < myChunks.size(); ++i )
+    myChunks[i].Compact();
+
+  ASSERT( newNbNodes == GetMaxID() );
+  ASSERT( newNbNodes == NbUsedElements() );
+}
+
+//================================================================================
+/*!
+ * \brief Return true if Compact() will change IDs of elements
+ */
+//================================================================================
+
+bool SMDS_NodeFactory::CompactChangePointers()
+{
+  // IDs of VTK nodes always correspond to SMDS IDs but there can be "holes" in SMDS numeration
+  return ( NbUsedElements() != GetMaxID() );
+}
+
+//================================================================================
+/*!
+ * \brief De-allocate all nodes
+ */
+//================================================================================
+
+void SMDS_NodeFactory::Clear()
+{
+  SMDS_ElementFactory::Clear();
+}
+
+//================================================================================
+/*!
+ * \brief Set a total number of sub-shapes in the main shape
+ */
+//================================================================================
+
+void SMDS_NodeFactory::SetNbShapes( size_t nbShapes )
+{
+  clearVector( myShapeDim );
+  myShapeDim.resize( nbShapes+1, theDefaultShapeDim );
+}
+
+//================================================================================
+/*!
+ * \brief Return a dimension of a shape
+ */
+//================================================================================
+
+int SMDS_NodeFactory::GetShapeDim( int shapeID ) const
+{
+  return shapeID < (int)myShapeDim.size() ? myShapeDim[ shapeID ] : theDefaultShapeDim;
+}
+
+//================================================================================
+/*!
+ * \brief Set a dimension of a shape
+ */
+//================================================================================
+
+void SMDS_NodeFactory::SetShapeDim( int shapeID, int dim )
+{
+  if ( shapeID >= (int)myShapeDim.size() )
+    myShapeDim.resize( shapeID + 10, theDefaultShapeDim );
+  myShapeDim[ shapeID ] = dim;
+}
+
+//================================================================================
+/*!
+ * \brief SMDS_ElementChunk constructor
+ *  \param [in] factory - the factory
+ *  \param [in] id0 - ID of the 1st element
+ */
+//================================================================================
+
+SMDS_ElementChunk::SMDS_ElementChunk( SMDS_ElementFactory* factory, int id0 ):
+  myFactory( factory ),
+  my1stID( id0 ),
+  myMinSubID( std::numeric_limits<int>::max() ),
+  myMaxSubID( 0 )
+{
+  if ( !myFactory )
+    return;
+  if ( myFactory->myIsNodal )
+    myElements = new SMDS_MeshNode[ theChunkSize ];
+  else
+    myElements = new SMDS_MeshCell[ theChunkSize ];
+
+  myUsedRanges.mySet.reserve(2);
+  mySubIDRanges.mySet.insert( _ShapeIDRange( 0, 0 ));
+  myUsedRanges.mySet.insert( _UsedRange( 0, false ));
+  myFactory->myChunksWithUnused.insert( this );
+}
+
+//================================================================================
+/*!
+ * \brief SMDS_ElementChunk destructor
+ */
+//================================================================================
+
+SMDS_ElementChunk::~SMDS_ElementChunk()
+{
+  delete [] myElements;
+  myFactory->myChunksWithUnused.erase( this );
+}
+
+//================================================================================
+/*!
+ * \brief Mark an element as used
+ */
+//================================================================================
+
+void SMDS_ElementChunk::UseElement( const int index )
+{
+  myUsedRanges.SetValue( index, true );
+  if ( myUsedRanges.Size() == 1 ) // all elements used
+    myFactory->myChunksWithUnused.erase( this );
+}
+
+//================================================================================
+/*!
+ * \brief Return ID of the first non-used element
+ */
+//================================================================================
+
+int SMDS_ElementChunk::GetUnusedID() const
+{
+  TUsedRangeSet::set_iterator r = myUsedRanges.mySet.begin();
+  for ( ; r != myUsedRanges.mySet.end(); ++r )
+    if ( !IsUsed( *r ))
+      break;
+
+  return my1stID + r->my1st;
+}
+
+//================================================================================
+/*!
+ * \brief Mark an element as non-used
+ */
+//================================================================================
+
+void SMDS_ElementChunk::Free( const SMDS_MeshElement* e )
+{
+  bool hasHoles = ( myUsedRanges.Size() > 1 );
+  myUsedRanges.SetValue( Index( e ), false );
+  SetShapeID( e, 0 ); // sub-mesh must do it?
+  SetIsMarked( e, false );
+  if ( !hasHoles )
+    myFactory->myChunksWithUnused.insert( this );
+
+  if ( myUsedRanges.Size() == 1 )
+  {
+    clearVector( myMarkedSet );
+    clearVector( myPositions );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Return an SMDS ID of an element
+ */
+//================================================================================
+
+int SMDS_ElementChunk::GetID( const SMDS_MeshElement* e ) const
+{
+  return my1stID + Index( e );
+}
+
+//================================================================================
+/*!
+ * \brief Set a Vtk ID of an element
+ */
+//================================================================================
+
+void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtkID )
+{
+  if ( e->GetID() - 1 != vtkID )
+  {
+    if ((int) myFactory->myVtkIDs.size() <= e->GetID() - 1 )
+    {
+      size_t i = myFactory->myVtkIDs.size();
+      myFactory->myVtkIDs.resize( e->GetID() + 100 );
+      for ( ; i < myFactory->myVtkIDs.size(); ++i )
+        myFactory->myVtkIDs[i] = i;
+    }
+    myFactory->myVtkIDs[ e->GetID() - 1 ] = vtkID;
+
+    if ((vtkIdType) myFactory->mySmdsIDs.size() <= vtkID )
+    {
+      size_t i = myFactory->mySmdsIDs.size();
+      myFactory->mySmdsIDs.resize( vtkID + 100 );
+      for ( ; i < myFactory->mySmdsIDs.size(); ++i )
+        myFactory->mySmdsIDs[i] = i;
+    }
+    myFactory->mySmdsIDs[ vtkID ] = e->GetID() - 1;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Return a Vtk ID of an element
+ */
+//================================================================================
+
+int SMDS_ElementChunk::GetVtkID( const SMDS_MeshElement* e ) const
+{
+  size_t dfltVtkID = e->GetID() - 1;
+  return ( dfltVtkID < myFactory->myVtkIDs.size() ) ? myFactory->myVtkIDs[ dfltVtkID ] : dfltVtkID;
+}
+
+//================================================================================
+/*!
+ * \brief Return ID of a shape an element is assigned to
+ */
+//================================================================================
+
+int SMDS_ElementChunk::GetShapeID( const SMDS_MeshElement* e ) const
+{
+  return mySubIDRanges.GetValue( Index( e ));
+}
+
+//================================================================================
+/*!
+ * \brief Set ID of a shape an element is assigned to
+ */
+//================================================================================
+
+void SMDS_ElementChunk::SetShapeID( const SMDS_MeshElement* e, int shapeID ) const
+{
+  const size_t nbRanges = mySubIDRanges.Size();
+
+  SMDS_ElementChunk* me = const_cast<SMDS_ElementChunk*>( this );
+  int oldShapeID = me->mySubIDRanges.SetValue( Index( e ), shapeID );
+  if ( oldShapeID == shapeID ) return;
+
+  if ( const SMDS_MeshNode* n = dynamic_cast< const SMDS_MeshNode* >( e ))
+    if ( TParam* uv = me->GetPositionPtr( n ))
+    {
+      uv[0] = 0.;
+      uv[1] = 0.;
+    }
+  // update min/max
+  if (( nbRanges > mySubIDRanges.Size() ) &&
+      ( myMinSubID == oldShapeID || myMaxSubID == oldShapeID ))
+  {
+    me->myMinSubID = ( std::numeric_limits<int>::max() );
+    me->myMaxSubID = 0;
+    TSubIDRangeSet::set_iterator it;
+    for ( it = mySubIDRanges.mySet.begin(); it < mySubIDRanges.mySet.end(); ++it )
+      if ( it->myValue > 0 )
+      {
+        me->myMinSubID = std::min( myMinSubID, it->myValue );
+        me->myMaxSubID = std::max( myMaxSubID, it->myValue );
+      }
+  }
+  else if ( shapeID > 0 )
+  {
+    me->myMinSubID = std::min( myMinSubID, shapeID );
+    me->myMaxSubID = std::max( myMaxSubID, shapeID );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Set isMarked flag of an element
+ */
+//================================================================================
+
+bool SMDS_ElementChunk::IsMarked( const SMDS_MeshElement* e ) const
+{
+  return ( !myMarkedSet.empty() && myMarkedSet[ Index( e )]);
+}
+
+//================================================================================
+/*!
+ * \brief Return isMarked flag of an element
+ */
+//================================================================================
+
+void SMDS_ElementChunk::SetIsMarked( const SMDS_MeshElement* e, bool is )
+{
+  if ( !is && myMarkedSet.empty() ) return;
+  if ( myMarkedSet.empty() ) myMarkedSet.resize( theChunkSize, false );
+  myMarkedSet[ Index( e )] = is;
+}
+
+//================================================================================
+/*!
+ * \brief Return SMDS_Position of a node on a shape
+ */
+//================================================================================
+
+SMDS_PositionPtr SMDS_ElementChunk::GetPosition( const SMDS_MeshNode* n ) const
+{
+  int  shapeID = GetShapeID( n );
+  int shapeDim = static_cast< SMDS_NodeFactory* >( myFactory )->GetShapeDim( shapeID );
+
+  SMDS_ElementChunk* me = const_cast< SMDS_ElementChunk* >( this );
+
+  switch ( shapeDim ) {
+  case 2:
+  {
+    return SMDS_PositionPtr( new _FacePosition( me->GetPositionPtr( n )));
+  }
+  case 1:
+  {
+    return SMDS_PositionPtr( new _EdgePosition( me->GetPositionPtr( n )));
+  }
+  case 0:
+    return SMDS_VertexPosition::StaticPosition();
+  }
+
+  return SMDS_SpacePosition::originSpacePosition();
+}
+
+//================================================================================
+/*!
+ * \brief Set SMDS_Position of a node on a shape
+ */
+//================================================================================
+
+void SMDS_ElementChunk::SetPosition( const SMDS_MeshNode* n, const SMDS_PositionPtr& pos, int shapeID )
+{
+  int shapeDim = pos ? pos->GetDim() : theDefaultShapeDim;
+  if ( shapeID < 1 )
+  {
+    if ( shapeDim == theDefaultShapeDim )
+      return;
+    shapeID = GetShapeID( n );
+    if ( shapeID < 1 )
+      throw SALOME_Exception("SetPosition() No shape ID provided");
+  }
+
+  static_cast< SMDS_NodeFactory* >( myFactory )->SetShapeDim( shapeID, shapeDim );
+
+  switch ( shapeDim ) {
+  case 2:
+  {
+    TParam* uv = GetPositionPtr( n, /*allocate=*/true );
+    uv[0] = (TParam) pos->GetParameters()[0];
+    uv[1] = (TParam) pos->GetParameters()[1];
+    break;
+  }
+  case 1:
+  {
+    GetPositionPtr( n, /*allocate=*/true )[0] = (TParam) pos->GetParameters()[0];
+    break;
+  }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Return pointer to on-shape-parameters of a node
+ */
+//================================================================================
+
+TParam* SMDS_ElementChunk::GetPositionPtr( const SMDS_MeshElement* n, bool allocate )
+{
+  if ( myPositions.empty() && !allocate )
+    return 0;
+
+  myPositions.resize( theChunkSize * 2 );
+  return myPositions.data() + 2 * Index( n );
+}
+
+//================================================================================
+/*!
+ * \brief Minimize allocated memory
+ */
+//================================================================================
+
+void SMDS_ElementChunk::Compact()
+{
+  mySubIDRanges.mySet.shrink_to_fit();
+  if ( myUsedRanges.mySet.capacity() > 2 )
+    myUsedRanges.mySet.shrink_to_fit();
+
+  clearVector( myMarkedSet );
+
+  if ( !myPositions.empty() )
+  {
+    // look for the last position that must be kept
+    TSubIDRangeSet::set_t::reverse_iterator it;
+    for ( it = mySubIDRanges.mySet.rbegin(); it != mySubIDRanges.mySet.rend(); ++it )
+    {
+      int shapeDim = static_cast< SMDS_NodeFactory* >( myFactory )->GetShapeDim( it->myValue );
+      if ( shapeDim == 1 || shapeDim == 2 )
+        break;
+    }
+    if ( it == mySubIDRanges.mySet.rend() )
+    {
+      clearVector( myPositions );
+    }
+    else if ( it != mySubIDRanges.mySet.rbegin() )
+    {
+      int nbNodes = (it-1)->my1st;
+      myPositions.resize( nbNodes * 2 );
+      std::vector<TParam> newPos( myPositions.begin(), myPositions.end() );
+      myPositions.swap( newPos );
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Print some data for debug purposes
+ */
+//================================================================================
+
+void SMDS_ElementChunk::Dump() const
+{
+  std::cout << "1stID: " << my1stID << std::endl;
+
+  std::cout << "SubID min/max: " << myMinSubID << ", " << myMaxSubID << std::endl;
+  std::cout << "SubIDRanges: " << mySubIDRanges.Size() << " ";
+  {
+    TSubIDRangeSet::set_iterator i = mySubIDRanges.mySet.begin();
+    for ( int cnt = 0; i != mySubIDRanges.mySet.end(); ++i, ++cnt )
+      std::cout << "|" << cnt << " - (" << i->my1st << ", " << i->myValue << ") ";
+    std::cout << std::endl;
+  }
+  {
+    std::cout << "UsedRanges: " << myUsedRanges.Size() << " ";
+    TUsedRangeSet::set_iterator i = myUsedRanges.mySet.begin();
+    for ( int cnt = 0; i != myUsedRanges.mySet.end(); ++i, ++cnt )
+      std::cout << cnt << " - (" << i->my1st << ", " << i->myValue << ") ";
+    std::cout << std::endl;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Compare SMDS_ElementChunk's
+ */
+//================================================================================
+
+bool _ChunkCompare::operator () (const SMDS_ElementChunk* e1, const SMDS_ElementChunk* e2) const
+{
+  return e1->Get1stID() < e2->Get1stID();
+}
+
diff --git a/src/SMDS/SMDS_ElementFactory.hxx b/src/SMDS/SMDS_ElementFactory.hxx
new file mode 100644 (file)
index 0000000..18c3d94
--- /dev/null
@@ -0,0 +1,565 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SMDS_ElementFactory.hxx
+//  Module : SMESH
+//
+#ifndef _SMDS_ElementFactory_HeaderFile
+#define _SMDS_ElementFactory_HeaderFile
+
+#include "SMDS_MeshCell.hxx"
+#include "SMDS_Position.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+
+#include <boost/container/flat_set.hpp>
+#include <boost/dynamic_bitset.hpp>
+#include <boost/make_shared.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <set>
+
+#include <vtkType.h>
+
+class SMDS_ElementChunk;
+class SMDS_Mesh;
+class SMDS_MeshCell;
+class SMDS_MeshNode;
+
+struct _ChunkCompare {
+  bool operator () (const SMDS_ElementChunk* c1, const SMDS_ElementChunk* c2) const;
+};
+typedef boost::ptr_vector<SMDS_ElementChunk>       TChunkVector;
+typedef std::set<SMDS_ElementChunk*,_ChunkCompare> TChunkPtrSet;
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Allocate SMDS_MeshElement's (SMDS_MeshCell's or SMDS_MeshNode's )
+ *        and bind some attributes to elements:
+ *        element ID, element VTK ID, sub-mesh ID, position on shape.
+ *
+ * Elements are allocated by chunks, so there are used and non-used elements
+ */
+class SMDS_ElementFactory
+{
+protected:
+  bool                     myIsNodal;          // what to allocate: nodes or cells
+  SMDS_Mesh*               myMesh;
+  TChunkVector             myChunks;           // array of chunks of elements
+  TChunkPtrSet             myChunksWithUnused; // sorted chunks having unused elements
+  std::vector< vtkIdType > myVtkIDs;           // myVtkIDs[ smdsID-1 ] == vtkID
+  std::vector< int >       mySmdsIDs;          // mySmdsIDs[ vtkID ] == smdsID - 1
+  int                      myNbUsedElements;   // counter of elements
+
+  friend class SMDS_ElementChunk;
+
+public:
+
+  SMDS_ElementFactory( SMDS_Mesh* mesh, const bool isNodal=false );
+  virtual ~SMDS_ElementFactory();
+
+  //! Return minimal ID of a non-used element
+  int GetFreeID();
+
+  //! Return maximal ID of an used element
+  int GetMaxID();
+
+  //! Return minimal ID of an used element
+  int GetMinID();
+
+  //! Return an element by ID. NULL if the element with the given ID is already used
+  SMDS_MeshElement* NewElement( const int id );
+
+  //! Return a SMDS_MeshCell by ID. NULL if the cell with the given ID is already used
+  SMDS_MeshCell* NewCell( const int id ) { return static_cast<SMDS_MeshCell*>( NewElement( id )); }
+
+  //! Return an used element by ID. NULL if the element with the given ID is not yet used
+  const SMDS_MeshElement* FindElement( const int id ) const;
+
+  //! Return a number of used elements
+  int NbUsedElements() const { return myNbUsedElements; }
+
+  //! Return an iterator on all element filtered using a given filter.
+  //  nbElemsToReturn is used to optimize by stopping the iteration as soon as
+  //  all elements satisfying filtering condition encountered.
+  template< class ElemIterator >
+  boost::shared_ptr< ElemIterator > GetIterator( SMDS_MeshElement::Filter* filter,
+                                                 size_t nbElemsToReturn = -1 );
+
+  //! Return an iterator on all element assigned to a given shape.
+  //  nbElemsToReturn is used to optimize by stopping the iteration as soon as
+  //  all elements assigned to the shape encountered.
+  template< class ElemIterator >
+  boost::shared_ptr< ElemIterator > GetShapeIterator( int shapeID, size_t nbElemsToReturn );
+
+  //! Mark the element as non-used
+  void Free( const SMDS_MeshElement* );
+
+  //! Return an SMDS ID by a Vtk one
+  int FromVtkToSmds( vtkIdType vtkID );
+
+  //! De-allocate all elements
+  virtual void Clear();
+
+  //! Remove unused elements located not at the end of the last chunk.
+  //  Minimize allocated memory
+  virtual void Compact(std::vector<int>& idCellsOldToNew);
+
+  //! Return true if Compact() will change IDs of elements
+  virtual bool CompactChangePointers();
+
+  //! Return a number of elements in a chunk
+  static int ChunkSize();
+};
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Allocate SMDS_MeshNode's
+ */
+class SMDS_NodeFactory : public SMDS_ElementFactory
+{
+  std::vector<char> myShapeDim; // dimension of shapes
+
+public:
+
+  SMDS_NodeFactory( SMDS_Mesh* mesh );
+  ~SMDS_NodeFactory();
+
+  //! Return a SMDS_MeshNode by ID. NULL if the node with the given ID is already used
+  SMDS_MeshNode* NewNode( int id ) { return (SMDS_MeshNode*) NewElement(id); }
+
+  //! Return an used node by ID. NULL if the node with the given ID is not yet used
+  const SMDS_MeshNode* FindNode( int id ) { return (const SMDS_MeshNode*) FindElement(id); }
+
+  //! Set a total number of sub-shapes in the main shape
+  void SetNbShapes( size_t nbShapes );
+
+  //! Return a dimension of a shape
+  int  GetShapeDim( int shapeID ) const;
+
+  //! Set a dimension of a shape
+  void SetShapeDim( int shapeID, int dim );
+
+  //! De-allocate all nodes
+  virtual void Clear();
+
+  //! Remove unused nodes located not at the end of the last chunk.
+  //  Minimize allocated memory
+  virtual void Compact(std::vector<int>& idNodesOldToNew);
+
+  //! Return true if Compact() will change IDs of node
+  virtual bool CompactChangePointers();
+};
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Range of elements in a chunk having the same attribute value
+ */
+template< typename ATTR>
+struct _Range
+{
+  typedef ATTR attr_t;
+
+  attr_t myValue; // common attribute value
+  int    my1st;   // index in the chunk of the 1st element 
+  _Range( int i0 = 0, attr_t v = 0 ): myValue( v ), my1st( i0 ) {}
+
+  bool operator < (const _Range& other) const { return my1st < other.my1st; }
+};
+
+typedef std::vector< std::pair< int, int > > TIndexRanges;
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Sorted set of ranges
+ */
+template< class RANGE >
+struct _RangeSet
+{
+  typedef typename RANGE::attr_t              attr_t;
+  typedef boost::container::flat_set< RANGE > set_t;
+  typedef typename set_t::const_iterator      set_iterator;
+
+  set_t mySet;
+
+  _RangeSet() { mySet.insert( RANGE( 0, 0 )); }
+
+  /*!
+   * \brief Return a number of ranges
+   */
+  size_t Size() const { return mySet.size(); }
+
+  /*!
+   * \brief Return a mutable _Range::my1st of a range pointed by an iterator
+   */
+  int&   First( set_iterator rangePtr ) { return const_cast< int& >( rangePtr->my1st ); }
+
+  /*!
+   * \brief Return a number of elements in a range pointed by an iterator
+   */
+  size_t Size( set_iterator rangePtr ) const
+  {
+    int next1st =
+      ( rangePtr + 1 == mySet.end() ) ? SMDS_ElementFactory::ChunkSize() : ( rangePtr + 1 )->my1st;
+    return next1st - rangePtr->my1st;
+  }
+
+  /*!
+   * \brief Return ranges of indices (from,to) of elements having a given value
+   */
+  bool GetIndices( const attr_t theValue, TIndexRanges & theIndices,
+                   const attr_t* theMinValue = 0, const attr_t* theMaxValue = 0) const
+  {
+    bool isFound = false;
+
+    if ( sizeof( attr_t ) == sizeof( int ) && theMinValue )
+      if ( theValue < *theMinValue || theValue > *theMaxValue )
+        return isFound;
+
+    for ( set_iterator it = mySet.begin(); it < mySet.end(); ++it )
+    {
+      if ( it->myValue == theValue )
+      {
+        theIndices.push_back( std::make_pair( it->my1st, it->my1st + Size( it )));
+        isFound = true;
+        ++it; // the next range value differs from theValue
+      }
+    }
+    return isFound;
+  }
+
+  /*!
+   * \brief Return value of an element attribute
+   *  \param [in] theIndex - element index
+   *  \return attr_t - attribute value
+   */
+  attr_t GetValue( int theIndex ) const
+  {
+    set_iterator r = mySet.upper_bound( theIndex ) - 1;
+    return r->myValue;
+  }
+
+  /*!
+   * \brief Change value of an element attribute
+   *  \param [in] theIndex - element index
+   *  \param [in] theValue - attribute value
+   *  \return attr_t - previous value
+   */
+  attr_t SetValue( int theIndex, attr_t theValue )
+  {
+    set_iterator rNext = mySet.end(); // case of adding elements
+    set_iterator     r = rNext - 1;
+    if ( r->my1st > theIndex )
+    {
+      rNext = mySet.upper_bound( theIndex );
+      r     = rNext - 1;
+    }
+    int          rSize = Size( r ); // range size
+    attr_t      rValue = r->myValue;
+    if ( rValue == theValue )
+      return rValue; // it happens while compacting
+
+    if ( r->my1st == theIndex ) // theIndex is the first in the range
+    {
+      bool joinPrev = // can join theIndex to the previous range
+        ( r->my1st > 0 && ( r-1 )->myValue == theValue );
+
+      if ( rSize == 1 )
+      {
+        bool joinNext = // can join to the next range
+          ( rNext != mySet.end() && rNext->myValue == theValue );
+
+        if ( joinPrev )
+        {
+          if ( joinNext ) // && joinPrev
+          {
+            mySet.erase( r, r + 2 );
+          }
+          else // joinPrev && !joinNext
+          {
+            mySet.erase( r );
+          }
+        }
+        else
+        {
+          if ( joinNext ) // && !joinPrev
+          {
+            r = mySet.erase( r ); // then r points to the next range
+            First( r )--;
+          }
+          else // !joinPrev && !joinNext
+          {
+            const_cast< attr_t & >( r->myValue ) = theValue;
+          }
+        }
+      }
+      else // if rSize > 1
+      {
+        if ( joinPrev )
+        {
+          First( r )++;
+        }
+        else
+        {
+          r = mySet.insert( r, RANGE( theIndex + 1, rValue )) - 1;
+          const_cast< attr_t & >( r->myValue ) = theValue;
+        }
+      }
+    }
+    else if ( r->my1st + rSize - 1 == theIndex ) // theIndex is last in the range
+    {
+      if ( rNext != mySet.end() && rNext->myValue == theValue ) // join to the next
+      {
+        First( rNext )--;
+      }
+      else
+      {
+        mySet.insert( r, RANGE( theIndex, theValue ));
+      }
+    }
+    else // theIndex in the middle of the range
+    {
+      r = mySet.insert( r, RANGE( theIndex,     theValue ));
+      r = mySet.insert( r, RANGE( theIndex + 1, rValue ));
+    }
+    return rValue;
+  }
+}; // struct _RangeSet
+
+
+typedef _Range< int >  _ShapeIDRange; // sub-mesh ID range
+typedef _Range< bool > _UsedRange;    // range of used elements
+
+typedef _RangeSet< _ShapeIDRange > TSubIDRangeSet;
+typedef _RangeSet< _UsedRange >    TUsedRangeSet;
+typedef boost::dynamic_bitset<>    TBitSet;
+//typedef float                       TParam;
+typedef double                     TParam;
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Allocate SMDS_MeshElement's (SMDS_MeshCell's or SMDS_MeshNode's )
+ *        and bind some attributes to elements:
+ *        element ID, sub-shape ID, isMarked flag, parameters on shape
+ */
+class SMDS_ElementChunk
+{
+  SMDS_ElementFactory* myFactory;     // holder of this chunk
+  SMDS_MeshElement*    myElements;    // array of elements
+  int                  my1stID;       // ID of myElements[0]
+  TBitSet              myMarkedSet;   // mark some elements
+  TUsedRangeSet        myUsedRanges;  // ranges of used/unused elements
+  TSubIDRangeSet       mySubIDRanges; // ranges of elements on the same sub-shape
+  int                  myMinSubID;    // min sub-shape ID
+  int                  myMaxSubID;    // max sub-shape ID
+  std::vector<TParam>  myPositions;   // UV parameters on shape: 2*param_t per an element
+
+public:
+
+  SMDS_ElementChunk( SMDS_ElementFactory* factory = 0, int id0 = 0 );
+  ~SMDS_ElementChunk();
+
+  //! Return an element by an index [0,ChunkSize()]
+  SMDS_MeshElement* Element(int index) { return & myElements[index]; }
+
+  //! Return an element by an index [0,ChunkSize()]
+  const SMDS_MeshElement* Element(int index) const { return & myElements[index]; }
+
+  //! Return ID of the first non-used element
+  int  GetUnusedID() const;
+
+  //! Mark an element as used
+  void UseElement( const int index );
+
+  //! Mark an element as non-used
+  void Free( const SMDS_MeshElement* e );
+
+  //! Check if a given range holds used or non-used elements
+  static bool IsUsed( const _UsedRange& r ) { return r.myValue; }
+
+  //! Return index of an element in the chunk
+  int Index( const SMDS_MeshElement* e ) const { return e - myElements; }
+
+  //! Return ID of the 1st element in the chunk
+  int Get1stID() const { return my1stID; }
+
+  //! Return pointer to on-shape-parameters of a node
+  TParam* GetPositionPtr( const SMDS_MeshElement* node, bool allocate=false );
+
+  //! Return ranges of used/non-used elements
+  const TUsedRangeSet&  GetUsedRanges() const { return myUsedRanges; }
+  const TUsedRangeSet&  GetUsedRangesMinMax( bool& min, bool& max ) const
+  { min = false; max = true; return myUsedRanges; }
+
+  //! Return ranges of elements assigned to sub-shapes and min/max of sub-shape IDs
+  const TSubIDRangeSet& GetSubIDRangesMinMax( int& min, int& max ) const
+  { min = myMinSubID; max = myMaxSubID; return mySubIDRanges; }
+
+  //! Minimize allocated memory
+  void Compact();
+
+  //! Print some data
+  void Dump() const; // debug
+
+
+  // Methods called by SMDS_MeshElement
+
+  int  GetID( const SMDS_MeshElement* e ) const;
+
+  int  GetVtkID( const SMDS_MeshElement* e ) const;
+  void SetVTKID( const SMDS_MeshElement* e, const vtkIdType id );
+
+  int  GetShapeID( const SMDS_MeshElement* e ) const;
+  void SetShapeID( const SMDS_MeshElement* e, int shapeID ) const;
+
+  bool IsMarked   ( const SMDS_MeshElement* e ) const;
+  void SetIsMarked( const SMDS_MeshElement* e, bool is );
+
+  SMDS_PositionPtr GetPosition( const SMDS_MeshNode* n ) const;
+  void SetPosition( const SMDS_MeshNode* n, const SMDS_PositionPtr& pos, int shapeID );
+
+  SMDS_Mesh* GetMesh() { return myFactory->myMesh; }
+};
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Iterator on elements in chunks
+ */
+template< class ELEM_ITERATOR, class RANGE_SET >
+struct _ChunkIterator : public ELEM_ITERATOR
+{
+  typedef typename ELEM_ITERATOR::value_type    element_type;
+  typedef SMDS_MeshElement::Filter*             filter_ptr;
+  typedef typename RANGE_SET::attr_t            attr_type;
+  typedef const RANGE_SET& (SMDS_ElementChunk::*get_rangeset_fun)(attr_type&, attr_type&) const;
+
+  const SMDS_MeshElement* myElement;
+  TIndexRanges            myRanges;
+  int                     myRangeIndex;
+  const TChunkVector&     myChunks;
+  int                     myChunkIndex;
+  get_rangeset_fun        myGetRangeSetFun;
+  attr_type               myValue;
+  attr_type               myMinValue;
+  attr_type               myMaxValue;
+  filter_ptr              myFilter;
+  size_t                  myNbElemsToReturn;
+  size_t                  myNbReturned;
+
+  _ChunkIterator( const TChunkVector &      theChunks,
+                  get_rangeset_fun          theGetRangeSetFun,
+                  attr_type                 theAttrValue,
+                  SMDS_MeshElement::Filter* theFilter,
+                  size_t                    theNbElemsToReturn = -1):
+    myElement( 0 ),
+    myRangeIndex( 0 ),
+    myChunks( theChunks ),
+    myChunkIndex( -1 ),
+    myGetRangeSetFun( theGetRangeSetFun ),
+    myValue( theAttrValue ),
+    myFilter( theFilter ),
+    myNbElemsToReturn( theNbElemsToReturn ),
+    myNbReturned( 0 )
+  {
+    next();
+  }
+  ~_ChunkIterator()
+  {
+    delete myFilter;
+  }
+
+  virtual bool more()
+  {
+    return myElement;
+  }
+
+  virtual element_type next()
+  {
+    element_type result = (element_type) myElement;
+    myNbReturned += bool( result );
+
+    myElement = 0;
+    if ( myNbReturned < myNbElemsToReturn )
+      while ( ! nextInRange() )
+      {
+        if ( ++myRangeIndex >= (int)myRanges.size() )
+        {
+          myRanges.clear();
+          myRangeIndex = 0;
+          while ( ++myChunkIndex < (int)myChunks.size() &&
+                  !getRangeSet().GetIndices( myValue, myRanges, &myMinValue, &myMaxValue ))
+            ;
+          if ( myChunkIndex >= (int)myChunks.size() )
+            break;
+        }
+      }
+    return result;
+  }
+
+  bool nextInRange()
+  {
+    if ( myRangeIndex < (int)myRanges.size() )
+    {
+      std::pair< int, int > & range = myRanges[ myRangeIndex ];
+      while ( range.first < range.second && !myElement )
+      {
+        myElement = myChunks[ myChunkIndex ].Element( range.first++ );
+        if ( !(*myFilter)( myElement ))
+          myElement = 0;
+      }
+    }
+    return myElement;
+  }
+
+  const RANGE_SET& getRangeSet()
+  {
+    return ( myChunks[  myChunkIndex ].*myGetRangeSetFun )( myMinValue, myMaxValue );
+  }
+}; // struct _ChunkIterator
+
+
+template< class ElemIterator >
+boost::shared_ptr< ElemIterator >
+SMDS_ElementFactory::GetIterator( SMDS_MeshElement::Filter* filter,
+                                  size_t                    nbElemsToReturn )
+{
+  typedef _ChunkIterator< ElemIterator, TUsedRangeSet > TChuckIterator;
+  return boost::make_shared< TChuckIterator >( myChunks,
+                                               & SMDS_ElementChunk::GetUsedRangesMinMax,
+                                               /*isUsed=*/true,
+                                               filter,
+                                               nbElemsToReturn );
+}
+
+template< class ElemIterator >
+boost::shared_ptr< ElemIterator >
+SMDS_ElementFactory::GetShapeIterator( int shapeID, size_t nbElemsToReturn )
+{
+  typedef _ChunkIterator< ElemIterator, TSubIDRangeSet > TChuckIterator;
+  return boost::make_shared< TChuckIterator >( myChunks,
+                                               & SMDS_ElementChunk::GetSubIDRangesMinMax,
+                                               /*shapeID=*/shapeID,
+                                               new SMDS_MeshElement::NonNullFilter(),
+                                               nbElemsToReturn );
+}
+
+#endif
diff --git a/src/SMDS/SMDS_ElementHolder.cxx b/src/SMDS/SMDS_ElementHolder.cxx
new file mode 100644 (file)
index 0000000..0913590
--- /dev/null
@@ -0,0 +1,122 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SMDS_ElementHolder.cxx
+//  Module : SMESH
+//
+
+#include "SMDS_ElementHolder.hxx"
+
+#include "ObjectPool.hxx"
+#include "SMDS_CellOfNodes.hxx"
+#include "SMDS_Mesh.hxx"
+
+//=======================================================================
+//function : SMDS_ElementHolder
+//purpose  : register self in the mesh
+//=======================================================================
+
+SMDS_ElementHolder::SMDS_ElementHolder( const SMDS_Mesh* mesh )
+  : myMesh( const_cast< SMDS_Mesh* >( mesh ))
+{
+  myPtrInMesh = myMesh->myElemHolders.insert( this ).first;
+}
+
+//=======================================================================
+//function : ~SMDS_ElementHolder
+//purpose  : un-register self from the mesh
+//=======================================================================
+
+SMDS_ElementHolder::~SMDS_ElementHolder()
+{
+  myMesh->myElemHolders.erase( myPtrInMesh );
+}
+
+//=======================================================================
+//function : beforeCompacting
+//purpose  : store vtkIDs of elements
+//=======================================================================
+
+void SMDS_ElementHolder::beforeCompacting()
+{
+  int i = 0;
+  for ( SMDS_ElemIteratorPtr it = getElements(); it->more(); ++i )
+  {
+    const SMDS_MeshElement* e = it->next();
+    if ( !e ) continue;
+    if ( e->IsNull() && !dynamic_cast<const SMDS_CellOfNodes*>( e ))
+      continue; // removed element
+    myIsNode.push_back( e->GetType() == SMDSAbs_Node );
+    if ( myMesh->Contains( e ))
+    {
+      myVtkIDs.push_back( e->GetVtkID() );
+    }
+    else
+    {
+      myExternalElems.push_back( e );
+      myVtkIDs.push_back( -1 * (int)myExternalElems.size() );
+    }
+  }
+}
+
+//=======================================================================
+//function : restoreElements
+//purpose  : restore pointers to elements
+//=======================================================================
+
+void SMDS_ElementHolder::restoreElements( const std::vector<int>& idNodesOldToNew,
+                                          const std::vector<int>& idCellsOldToNew )
+{
+  tmpClear();
+
+  const SMDS_MeshElement* elem;
+
+  std::vector< bool >::iterator isNode = myIsNode.begin();
+  for ( size_t i = 0; i < myVtkIDs.size(); ++i, ++isNode )
+  {
+    int vtkID = myVtkIDs[i];
+    if ( vtkID < 0 )
+    {
+      elem = myExternalElems[ (-vtkID)-1 ];
+    }
+    else if ( *isNode )
+    {
+      if ( vtkID < (int)idNodesOldToNew.size() )
+        elem = myMesh->FindNodeVtk( idNodesOldToNew[ vtkID ]);
+      else
+        elem = myMesh->FindNodeVtk( vtkID );
+    }
+    else
+    {
+      if ( vtkID < (int)idCellsOldToNew.size() )
+        elem = myMesh->FindElementVtk( idCellsOldToNew[ vtkID ]);
+      else
+        elem = myMesh->FindElementVtk( vtkID );
+    }
+    if ( elem )
+      add( elem );
+  }
+  clearVector( myExternalElems );
+  clearVector( myVtkIDs );
+  clearVector( myIsNode );
+
+  compact();
+}
diff --git a/src/SMDS/SMDS_ElementHolder.hxx b/src/SMDS/SMDS_ElementHolder.hxx
new file mode 100644 (file)
index 0000000..f05774b
--- /dev/null
@@ -0,0 +1,93 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SMDS_ElementHolder.hxx
+//  Module : SMESH
+//
+#ifndef _SMDS_ElementHolder_HeaderFile
+#define _SMDS_ElementHolder_HeaderFile
+
+#include "SMESH_SMDS.hxx"
+
+#include "SMDS_ElemIterator.hxx"
+
+#include <vector>
+#include <set>
+
+class SMDS_Mesh;
+class SMDS_MeshElement;
+
+//------------------------------------------------------------------------------------
+/*!
+ * \brief Base class of object holding SMDS_MeshElement pointers.
+ *        Registering such an object in SMDS_Mesh assures that the
+ *        pointers remain valid after compacting the mesh
+ */
+class SMDS_EXPORT SMDS_ElementHolder
+{
+ public:
+
+  //! register self in the mesh
+  SMDS_ElementHolder( const SMDS_Mesh* mesh );
+
+  //! un-register self from the mesh
+  virtual ~SMDS_ElementHolder();
+
+
+ protected:
+
+  //!< the descendant object return its elements just before the mesh compacting
+  virtual SMDS_ElemIteratorPtr getElements() = 0;
+
+  //!< the descendant object temporary remove its elements
+  virtual void tmpClear() = 0;
+
+  //!< the descendant object re-add its elements after the mesh compacting
+  virtual void add( const SMDS_MeshElement* element ) = 0;
+
+  //!< the descendant squeeze its element storage after re-adding elements
+  virtual void compact() = 0;
+
+  //!< allow the descendant treat its elements before mesh clearing
+  virtual void clear() {}
+
+  SMDS_Mesh* myMesh;
+
+
+ private: // methods called by SMDS_Mesh
+
+  friend class SMDS_Mesh;
+
+  //! store vtkIDs of elements
+  void beforeCompacting();
+
+  //! restore pointers to elements
+  void restoreElements( const std::vector<int>& idNodessOldToNew,
+                        const std::vector<int>& idCellsOldToNew );
+
+
+  std::vector<const SMDS_MeshElement*>      myExternalElems; //!< elements not contained in the mesh
+  std::vector< int >                        myVtkIDs;        //!< vtk IDs of elements
+  std::vector< bool >                       myIsNode;
+  std::set< SMDS_ElementHolder* >::iterator myPtrInMesh;
+};
+
+#endif
diff --git a/src/SMDS/SMDS_FaceOfEdges.cxx b/src/SMDS/SMDS_FaceOfEdges.cxx
deleted file mode 100644 (file)
index 67ff4f6..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_FaceOfEdges.hxx"
-#include "SMDS_IteratorOfElements.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : NbEdges
-//purpose  : 
-//=======================================================================
-
-int SMDS_FaceOfEdges::NbEdges() const
-{
-        return myNbEdges;
-}
-
-int SMDS_FaceOfEdges::NbFaces() const
-{
-        return 1;
-}
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-
-void SMDS_FaceOfEdges::Print(ostream & OS) const
-{
-        OS << "face <" << GetID() << " > : ";
-        int i;
-        for (i = 0; i < NbEdges() - 1; i++) OS << myEdges[i] << ",";
-        OS << myEdges[i] << ") " << endl;
-}
-
-SMDSAbs_ElementType SMDS_FaceOfEdges::GetType() const
-{
-        return SMDSAbs_Face;
-}
-
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-
-class SMDS_FaceOfEdges_MyIterator:public SMDS_ElemIterator
-{
-  const SMDS_MeshEdge* const *mySet;
-  int myLength;
-  int index;
- public:
-  SMDS_FaceOfEdges_MyIterator(const SMDS_MeshEdge* const *s, int l):
-    mySet(s),myLength(l),index(0) {}
-
-  bool more()
-  {
-    return index<myLength;
-  }
-
-  const SMDS_MeshElement* next()
-  {
-    index++;
-    return mySet[index-1];
-  }     
-};
-
-SMDS_ElemIteratorPtr SMDS_FaceOfEdges::elementsIterator
-                         (SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Face:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Face);
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new SMDS_FaceOfEdges_MyIterator(myEdges,myNbEdges));
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type, SMDS_ElemIteratorPtr
-        (new SMDS_FaceOfEdges_MyIterator(myEdges,myNbEdges))));
-  }
-}
-
-SMDS_FaceOfEdges::SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1,
-                                   const SMDS_MeshEdge* edge2,
-                                   const SMDS_MeshEdge* edge3)
-{
-  //MESSAGE("****************************************************** SMDS_FaceOfEdges");
-        myNbEdges = 3;
-        myEdges[0]=edge1;
-        myEdges[1]=edge2;
-        myEdges[2]=edge3;
-        myEdges[3]=0;
-}
-
-SMDS_FaceOfEdges::SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1,
-                                   const SMDS_MeshEdge* edge2,
-                                   const SMDS_MeshEdge* edge3,
-                                   const SMDS_MeshEdge* edge4)
-{
-  //MESSAGE("****************************************************** SMDS_FaceOfEdges");
-        myNbEdges = 4;
-        myEdges[0]=edge1;
-        myEdges[1]=edge2;
-        myEdges[2]=edge3;
-        myEdges[3]=edge4;       
-}
-
-/*bool operator<(const SMDS_FaceOfEdges& f1, const SMDS_FaceOfEdges& f2)
-{
-        set<SMDS_MeshNode> set1,set2;
-        SMDS_ElemIteratorPtr it;
-        const SMDS_MeshNode * n;
-
-        it=f1.nodesIterator();
-
-        while(it->more())
-        {
-                n=static_cast<const SMDS_MeshNode *>(it->next());
-                set1.insert(*n);
-        }
-
-        delete it;
-        it=f2.nodesIterator();
-        
-        while(it->more())
-        {       
-                n=static_cast<const SMDS_MeshNode *>(it->next());
-                set2.insert(*n);
-        }
-
-        delete it;
-        return set1<set2;       
-
-}*/
-
-
-int SMDS_FaceOfEdges::NbNodes() const
-{
-  return myEdges[0]->NbNodes() + myEdges[1]->NbNodes() + myEdges[2]->NbNodes() +
-    ( myNbEdges == 4 ? myEdges[3]->NbNodes() : 0 ) - myNbEdges;
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode* SMDS_FaceOfEdges::GetNode(const int ind) const
-{
-  int index = ind;
-  for ( int i = 0; i < myNbEdges; ++i ) {
-    if ( index >= myEdges[ i ]->NbNodes() )
-      index -= myEdges[ i ]->NbNodes();
-    else
-      return myEdges[ i ]->GetNode( index );
-  }
-  return 0;
-}
-
-SMDSAbs_EntityType SMDS_FaceOfEdges::GetEntityType() const
-{
-  return myNbEdges == 3 ? SMDSEntity_Triangle : SMDSEntity_Quadrangle;
-}
-
-SMDSAbs_GeometryType SMDS_FaceOfEdges::GetGeomType() const
-{
-  return myNbEdges == 3 ? SMDSGeom_TRIANGLE : SMDSGeom_QUADRANGLE;
-}
diff --git a/src/SMDS/SMDS_FaceOfEdges.hxx b/src/SMDS/SMDS_FaceOfEdges.hxx
deleted file mode 100644 (file)
index 8bfc1d3..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#ifndef _SMDS_FaceOfEdges_HeaderFile
-#define _SMDS_FaceOfEdges_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshFace.hxx"
-#include "SMDS_MeshEdge.hxx"
-#include "SMDS_Iterator.hxx"
-
-#include <iostream>
-
-
-class SMDS_EXPORT SMDS_FaceOfEdges:public SMDS_MeshFace
-{
-  public:
-        void Print(std::ostream & OS) const;
-        SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1,
-                         const SMDS_MeshEdge* edge2,
-                         const SMDS_MeshEdge* edge3);
-        SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1,
-                         const SMDS_MeshEdge* edge2,
-                         const SMDS_MeshEdge* edge3,
-                         const SMDS_MeshEdge* edge4);
-                
-        virtual SMDSAbs_ElementType  GetType() const;
-        virtual SMDSAbs_EntityType   GetEntityType() const;
-        virtual SMDSAbs_GeometryType GetGeomType() const;
-        virtual bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                                 const int            nbNodes) {return false;}
-        virtual int NbNodes() const;
-        virtual int NbEdges() const;
-        virtual int NbFaces() const;
-        virtual const SMDS_MeshNode* GetNode(const int ind) const;
-
-  protected:
-        virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-
-  private:
-        const SMDS_MeshEdge* myEdges[4];
-        int                  myNbEdges;
-
-};
-
-#endif
index dfd3b7385eb45f424a0e4621fe6b2c1698bd95c2..0b7f9acf989aad783e1ae6a32c6de20c144fceaf 100644 (file)
 #pragma warning(disable:4786)
 #endif
 
-#include "SMDS_SetIterator.hxx"
 #include "SMDS_FaceOfNodes.hxx"
-#include "SMDS_IteratorOfElements.hxx"
+
+#include "SMDS_SetIterator.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_Mesh.hxx"
 
-#include "utilities.h"
+#include <utilities.h>
 
-using namespace std;
+#include <boost/make_shared.hpp>
 
 //=======================================================================
 //function : NbEdges
@@ -43,17 +43,25 @@ using namespace std;
 
 int SMDS_FaceOfNodes::NbEdges() const
 {
-        return NbNodes();
+  return NbNodes();
 }
 
 int SMDS_FaceOfNodes::NbFaces() const
 {
-        return 1;
+  return 1;
 }
 
 int SMDS_FaceOfNodes::NbNodes() const
 {
-        return myNbNodes;
+  return myNbNodes;
+}
+
+int SMDS_FaceOfNodes::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+  for ( int i = 0; i < myNbNodes; ++i )
+    if ( myNodes[i] == node )
+      return i;
+  return -1;
 }
 
 //=======================================================================
@@ -63,81 +71,31 @@ int SMDS_FaceOfNodes::NbNodes() const
 
 void SMDS_FaceOfNodes::Print(ostream & OS) const
 {
-        OS << "face <" << GetID() << " > : ";
-        int i;
-        for (i = 0; i < NbNodes() - 1; i++) OS << myNodes[i] << ",";
-        OS << myNodes[i] << ") " << endl;
+  OS << "face <" << GetID() << " > : ";
+  int i;
+  for (i = 0; i < NbNodes() - 1; i++) OS << myNodes[i] << ",";
+  OS << myNodes[i] << ") " << endl;
 }
 
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-
-class SMDS_FaceOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
+SMDS_ElemIteratorPtr SMDS_FaceOfNodes::nodesIterator() const
 {
- public:
-  SMDS_FaceOfNodes_MyIterator(const SMDS_MeshNode* const *s, int l):
-    SMDS_NodeArrayElemIterator( s, & s[ l ] ) {}
-};
-
-/// ===================================================================
-/*!
- * \brief Iterator on edges of face
- */
-/// ===================================================================
+  return boost::make_shared< SMDS_NodeArrayElemIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
 
-class _MyEdgeIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t                            myIndex;
-public:
-  _MyEdgeIterator(const SMDS_FaceOfNodes* face):myIndex(0) {
-    myElems.reserve( face->NbNodes() );
-    for ( int i = 0; i < face->NbNodes(); ++i ) {
-      const SMDS_MeshElement* edge =
-        SMDS_Mesh::FindEdge( face->GetNode( i ), face->GetNodeWrap( i + 1 ));
-      if ( edge )
-        myElems.push_back( edge );
-    }
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator( SMDSAbs_ElementType type ) const
+SMDS_NodeIteratorPtr SMDS_FaceOfNodes::nodeIterator() const
 {
-  switch(type)
-  {
-  case SMDSAbs_Face:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Face);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new SMDS_FaceOfNodes_MyIterator(myNodes,myNbNodes));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
-    break;
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type,SMDS_ElemIteratorPtr
-        (new SMDS_FaceOfNodes_MyIterator(myNodes,myNbNodes))));
-  }
-  return SMDS_ElemIteratorPtr();
+  return boost::make_shared< SMDS_NodeArrayIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
 }
 
 SMDS_FaceOfNodes::SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
                                    const SMDS_MeshNode* node2,
                                    const SMDS_MeshNode* node3)
 {
-  //MESSAGE("******************************************************* SMDS_FaceOfNodes");
-        myNbNodes = 3;
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=0;
+  myNbNodes = 3;
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=0;
 }
 
 SMDS_FaceOfNodes::SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
@@ -145,12 +103,11 @@ SMDS_FaceOfNodes::SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
                                    const SMDS_MeshNode* node3,
                                    const SMDS_MeshNode* node4)
 {
-  //MESSAGE("******************************************************* SMDS_FaceOfNodes");
-        myNbNodes = 4;
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=node4;       
+  myNbNodes = 4;
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=node4;       
 }
 bool SMDS_FaceOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
                                    const int            nbNodes)
index fec0b09991dfa3ae56e5bc572f8473748ac525b0..7e25a90f550a342bc97b25d445bef540e38a8883 100644 (file)
 
 #include "SMESH_SMDS.hxx"
 
-#include "SMDS_MeshFace.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Iterator.hxx"
+#include "SMDS_CellOfNodes.hxx"
 
-#include <iostream>
-
-class SMDS_EXPORT SMDS_FaceOfNodes:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_FaceOfNodes: public SMDS_CellOfNodes
 {
-  public:
-        void Print(std::ostream & OS) const;
-        SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
-                         const SMDS_MeshNode* node2,
-                         const SMDS_MeshNode* node3);
-        SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
-                         const SMDS_MeshNode* node2,
-                         const SMDS_MeshNode* node3,
-                         const SMDS_MeshNode* node4);
-        bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                         const int            nbNodes);
-        int NbEdges() const;
-        int NbFaces() const;
-        int NbNodes() const;
+ public:
+  void Print(std::ostream & OS) const;
+  SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
+                   const SMDS_MeshNode* node2,
+                   const SMDS_MeshNode* node3);
+  SMDS_FaceOfNodes(const SMDS_MeshNode* node1,
+                   const SMDS_MeshNode* node2,
+                   const SMDS_MeshNode* node3,
+                   const SMDS_MeshNode* node4);
+  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[],
+                           const int            nbNodes);
+  virtual int  NbEdges() const;
+  virtual int  NbFaces() const;
+  virtual int  NbNodes() const;
+
+  virtual int  NbCornerNodes() const { return NbNodes(); }
+  virtual int  GetNodeIndex( const SMDS_MeshNode* node ) const;
+
+  virtual bool IsPoly() const { return false; }
+  virtual bool IsQuadratic() const  { return false; }
+
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
 
-  /*!
-   * \brief Return node by its index
-    * \param ind - node index
-    * \retval const SMDS_MeshNode* - the node
-   */
   virtual const SMDS_MeshNode* GetNode(const int ind) const;
 
+  virtual SMDSAbs_ElementType  GetType() const { return SMDSAbs_Face; }
   virtual SMDSAbs_EntityType   GetEntityType() const;
   virtual SMDSAbs_GeometryType GetGeomType() const;
 
-  protected:
-        SMDS_ElemIteratorPtr
-                elementsIterator(SMDSAbs_ElementType type) const;
-
-  private:
-        const SMDS_MeshNode* myNodes[4];
-        int                  myNbNodes;
+ private:
+  const SMDS_MeshNode* myNodes[4];
+  int                  myNbNodes;
 
 };
 
index ae12dc313d09ee35e62c0d024be632d7ed01315a..3eb3c16dfc49800608771b3592d481caf928d288 100644 (file)
 //  Module : SMESH
 //
 #include "SMDS_FacePosition.hxx"
-
-#include "utilities.h"
-
-using namespace std;
+#include "SMDS_EdgePosition.hxx"
 
 //=======================================================================
 //function : SMDS_FacePosition
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 SMDS_FacePosition::SMDS_FacePosition(const double aUParam,
                                      const double aVParam)
-   : myUParameter(aUParam),myVParameter(aVParam)
 {
-  //MESSAGE("******************************************************** SMDS_FacePosition");
+  SetParameters( aUParam,aVParam );
 }
 
-/**
-*/
+//=======================================================================
+//function : GetTypeOfPosition
+//purpose  :
+//=======================================================================
+
 SMDS_TypeOfPosition SMDS_FacePosition::GetTypeOfPosition() const
 {
-        return SMDS_TOP_FACE;
+  return SMDS_TOP_FACE;
 }
 
 void SMDS_FacePosition::SetUParameter(double aUparam)
 {
-        myUParameter = aUparam;
+  myParameter[0] = aUparam;
 }
 
 //=======================================================================
 //function : SetVParameter
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void SMDS_FacePosition::SetVParameter(double aVparam)
 {
-        myVParameter = aVparam;
+  myParameter[1] = aVparam;
 }
 
 //=======================================================================
 //function : GetUParameter
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-double SMDS_FacePosition::GetUParameter() const 
+double SMDS_FacePosition::GetUParameter() const
 {
-        return myUParameter;
+  return myParameter[0];
 }
 
 //=======================================================================
 //function : GetVParameter
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-double SMDS_FacePosition::GetVParameter() const 
+double SMDS_FacePosition::GetVParameter() const
 {
-        return myVParameter;
+  return myParameter[1];
 }
 
 //=======================================================================
@@ -92,6 +91,6 @@ double SMDS_FacePosition::GetVParameter() const
 
 void SMDS_FacePosition::SetParameters(double aUparam, double aVparam)
 {
-  myUParameter = aUparam;
-  myVParameter = aVparam;
+  myParameter[0] = aUparam;
+  myParameter[1] = aVparam;
 }
index 45015887d5ad49aefa20ff071f9a780ae96aad7e..a36e300ade2127b7f659ed1897b36528b105dec4 100644 (file)
 
 class SMDS_EXPORT SMDS_FacePosition:public SMDS_Position
 {
+ public:
+  SMDS_FacePosition(double aUParam=0, double aVParam=0);
+  SMDS_TypeOfPosition GetTypeOfPosition() const;
+  virtual void SetUParameter(double aUparam);
+  virtual void SetVParameter(double aVparam);
+  virtual void SetParameters(double aUparam, double aVparam);
+  virtual double GetUParameter() const;
+  virtual double GetVParameter() const;
+  virtual const double* GetParameters() const { return &myParameter[0]; }
 
-  public:
-        SMDS_FacePosition(double aUParam=0, double aVParam=0);
-        SMDS_TypeOfPosition GetTypeOfPosition() const;
-        void SetUParameter(double aUparam);
-        void SetVParameter(double aVparam);
-        void SetParameters(double aUparam, double aVparam);
-        double GetUParameter() const;
-        double GetVParameter() const;
-
-  private:
-        double myUParameter;
-        double myVParameter;
+ private:
+  double myParameter[2];
 };
 #endif
index f20d7062ed8c26f18e516ee3819f81bc70474c3a..56132493035065dcd9c8851aaa03b6119d44585a 100644 (file)
 #ifndef _SMDS_Iterator_HeaderFile
 #define _SMDS_Iterator_HeaderFile
 
-#include "SMESH_SMDS.hxx"
-
 ///////////////////////////////////////////////////////////////////////////////
 ///Abstract class for iterators
 ///@author Jerome Robert
 ///////////////////////////////////////////////////////////////////////////////
 template<typename VALUE> class SMDS_Iterator
 {
-  public:
-        /// Return true if and only if there are other object in this iterator
-          virtual bool more()=0;
-        
-        /// Return the current object and step to the next one
-          virtual VALUE next()=0;
+public:
+
+  typedef VALUE value_type;
+
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more()=0;
+
+  /// Return the current object and step to the next one
+  virtual VALUE next()=0;
         
-        /// Delete the current element and step to the next one
-        virtual void remove(){}
+  /// Delete the current element and step to the next one
+  virtual void remove(){}
         
-        /// Provide virtual destructor just for case if some derived iterator
-        /// must have a destructor
-        virtual ~SMDS_Iterator(){}
+  /// Provide virtual destructor just for case if some derived iterator
+  /// must have a destructor
+  virtual ~SMDS_Iterator(){}
 };
 
 #endif
diff --git a/src/SMDS/SMDS_IteratorOfElements.cxx b/src/SMDS/SMDS_IteratorOfElements.cxx
deleted file mode 100644 (file)
index 3d125fc..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_IteratorOfElements.hxx"
-
-bool SMDS_IteratorOfElements::subMore()
-{
-        if((t2Iterator.get()==NULL)||(!t2Iterator->more()))
-        {
-                if(t1Iterator->more())
-                {
-                        t2Iterator=t1Iterator->next()->elementsIterator(myType);
-                        return subMore();
-                }
-                else return false;
-        }
-        else return true;
-}
-
-const SMDS_MeshElement * SMDS_IteratorOfElements::subNext()
-{
-        if((t2Iterator.get()==NULL)||(!t2Iterator->more()))
-                if(t1Iterator->more())
-                        t2Iterator=t1Iterator->next()->elementsIterator(myType);
-        return t2Iterator->next();
-}
-
-/////////////////////////////////////////////////////////////////////////////
-/// Create an iterator which look for elements of type type which are linked 
-/// to the element element. it is the iterator to get connectivity of element
-//////////////////////////////////////////////////////////////////////////////
-SMDS_IteratorOfElements::SMDS_IteratorOfElements(const SMDS_MeshElement *    element,
-                                                 SMDSAbs_ElementType         type,
-                                                 const SMDS_ElemIteratorPtr& it)
-  : t1Iterator(it),
-    t2Iterator(SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL)),
-    myType(type), myElement(element),
-    myProxyElement(NULL)
-{
-  while(subMore())
-    alreadyReturnedElements.insert(subNext());
-  itAlreadyReturned= alreadyReturnedElements.begin();
-  switch(myElement->GetType())
-  {
-  case SMDSAbs_Node:
-  case SMDSAbs_Edge: myReverseIteration=true; break;
-  case SMDSAbs_Face: myReverseIteration=(type==SMDSAbs_Volume); break;
-  default: myReverseIteration=false;
-  }
-}
-
-bool SMDS_IteratorOfElements::more()
-{
-        if(myProxyElement==NULL)
-        {
-                while(itAlreadyReturned!=alreadyReturnedElements.end())
-                {
-                        myProxyElement=*itAlreadyReturned;
-                        itAlreadyReturned++;    
-
-                        if(myReverseIteration)
-                        {
-                                SMDS_ElemIteratorPtr it=
-                                        myProxyElement->elementsIterator(myElement->GetType());
-                                while(it->more())
-                                {                               
-                                        if(it->next()==myElement) return true;
-                                }
-                        }
-                        else return true;
-                }
-                myProxyElement=NULL;
-                return false;
-        }
-        else return true;
-}
-
-const SMDS_MeshElement * SMDS_IteratorOfElements::next()
-{
-        more();
-        const SMDS_MeshElement *e=myProxyElement;
-        myProxyElement=NULL;
-        return e;
-}
diff --git a/src/SMDS/SMDS_IteratorOfElements.hxx b/src/SMDS/SMDS_IteratorOfElements.hxx
deleted file mode 100644 (file)
index f2d73d8..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_Iterator.hxx"
-#include "SMDS_MeshElement.hxx"
-#include <set>
-
-
-class SMDS_EXPORT SMDS_IteratorOfElements:public SMDS_ElemIterator
-{
-  public:
-/////////////////////////////////////////////////////////////////////////////
-/// Create an iterator which look for elements of type type which are linked 
-/// to the element element. it is the iterator to get connectivity of element
-//////////////////////////////////////////////////////////////////////////////
-        SMDS_IteratorOfElements(const SMDS_MeshElement * element,
-                                SMDSAbs_ElementType type,
-                                const SMDS_ElemIteratorPtr& it);
-        bool more();
-        const SMDS_MeshElement * next();
-
-  private:
-        SMDS_ElemIteratorPtr t1Iterator;
-        SMDS_ElemIteratorPtr t2Iterator;
-        SMDSAbs_ElementType myType;     
-        const SMDS_MeshElement * myElement;             
-        const SMDS_MeshElement * myProxyElement;
-        bool myReverseIteration;
-
-        std::set<const SMDS_MeshElement*> alreadyReturnedElements;
-        std::set<const SMDS_MeshElement*>::iterator itAlreadyReturned;  
-        bool subMore();
-        const SMDS_MeshElement * subNext();
-};
index 8b87a9a44f406d90ce366492a04c82e63f1d143a..1d58368d426263a16f74037bddc22475403586ec 100644 (file)
 #endif
 
 #include "SMDS_LinearEdge.hxx"
-#include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "utilities.h"
+#include "SMDS_SetIterator.hxx"
 
-using namespace std;
+#include <boost/make_shared.hpp>
 
 //=======================================================================
 //function : SMDS_LinearEdge
@@ -42,22 +41,10 @@ using namespace std;
 SMDS_LinearEdge::SMDS_LinearEdge(const SMDS_MeshNode * node1,
                                  const SMDS_MeshNode * node2)
 {
-  //MESSAGE("SMDS_LinearEdge " << GetID());
   myNodes[0] = node1;
   myNodes[1] = node2;
 }
 
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-
-void SMDS_LinearEdge::Print(ostream & OS) const
-{
-  OS << "edge <" << GetID() << "> : (" << myNodes[0] << " , " << myNodes[1]
-      << ") " << endl;
-}
-
 int SMDS_LinearEdge::NbNodes() const
 {
   return 2;
@@ -68,75 +55,29 @@ int SMDS_LinearEdge::NbEdges() const
   return 1;
 }
 
-class SMDS_LinearEdge_MyNodeIterator: public SMDS_ElemIterator
+int SMDS_LinearEdge::NbFaces() const
 {
-  const SMDS_MeshNode * const * myNodes;
-  int myIndex;
-public:
-  SMDS_LinearEdge_MyNodeIterator(const SMDS_MeshNode * const * nodes) :
-    myNodes(nodes), myIndex(0)
-  {
-  }
-
-  bool more()
-  {
-    return myIndex < 2;
-  }
-
-  const SMDS_MeshElement* next()
-  {
-    myIndex++;
-    return myNodes[myIndex - 1];
-  }
-};
+  return 0;
+}
 
-SMDS_ElemIteratorPtr SMDS_LinearEdge::elementsIterator(SMDSAbs_ElementType type) const
+int SMDS_LinearEdge::GetNodeIndex( const SMDS_MeshNode* node ) const
 {
-  switch (type)
-  {
-    case SMDSAbs_Edge:
-      return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge);
-    case SMDSAbs_Node:
-      return SMDS_ElemIteratorPtr(new SMDS_LinearEdge_MyNodeIterator(myNodes));
-    default:
-      return SMDS_ElemIteratorPtr
-        (new SMDS_IteratorOfElements(this,
-                                     type,
-                                     SMDS_ElemIteratorPtr
-                                     (new SMDS_LinearEdge_MyNodeIterator(myNodes))));
-  }
+  if ( node == myNodes[0] ) return 0;
+  if ( node == myNodes[1] ) return 1;
+  return -1;
 }
 
-bool operator<(const SMDS_LinearEdge & e1, const SMDS_LinearEdge & e2)
+SMDS_ElemIteratorPtr SMDS_LinearEdge::nodesIterator() const
 {
-  int id11 = e1.myNodes[0]->getVtkId();
-  int id21 = e2.myNodes[0]->getVtkId();
-  int id12 = e1.myNodes[1]->getVtkId();
-  int id22 = e2.myNodes[1]->getVtkId();
-  int tmp;
-
-  if (id11 >= id12)
-    {
-      tmp = id11;
-      id11 = id12;
-      id12 = tmp;
-    }
-  if (id21 >= id22)
-    {
-      tmp = id21;
-      id21 = id22;
-      id22 = tmp;
-    }
+  return boost::make_shared< SMDS_NodeArrayElemIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
 
-  if (id11 < id21)
-    return true;
-  else if (id11 == id21)
-    return (id21 < id22);
-  else
-    return false;
+SMDS_NodeIteratorPtr SMDS_LinearEdge::nodeIterator() const
+{
+  return boost::make_shared< SMDS_NodeArrayIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
 }
 
-/*!
+/*
  * \brief Return node by its index
  * \param ind - node index
  * \retval const SMDS_MeshNode* - the node
@@ -151,10 +92,9 @@ const SMDS_MeshNode* SMDS_LinearEdge::GetNode(const int ind) const
 //purpose  : 
 //=======================================================================
 
-bool SMDS_LinearEdge::ChangeNodes(const SMDS_MeshNode * node1,
-                                  const SMDS_MeshNode * node2)
+bool SMDS_LinearEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
 {
-  myNodes[0] = node1;
-  myNodes[1] = node2;
-  return true;
+  myNodes[0] = nodes[0];
+  myNodes[1] = nodes[1];
+  return nbNodes == 2;
 }
index 1ac80ee8a52b8c8f129df2af5a2196f152214ebf..75d984e3fd0b61f3de1ef255ba88caaa68f9e0ef 100644 (file)
 
 #include "SMESH_SMDS.hxx"
 
-#include "SMDS_MeshEdge.hxx"
-#include <iostream>
+#include "SMDS_CellOfNodes.hxx"
 
-class SMDS_EXPORT SMDS_LinearEdge: public SMDS_MeshEdge
+class SMDS_EXPORT SMDS_LinearEdge: public SMDS_CellOfNodes
 {
-
 public:
   SMDS_LinearEdge(const SMDS_MeshNode * node1, const SMDS_MeshNode * node2);
-  bool ChangeNodes(const SMDS_MeshNode * node1, const SMDS_MeshNode * node2);
-  void Print(std::ostream & OS) const;
 
-  virtual SMDSAbs_EntityType GetEntityType() const
-  {
-    return SMDSEntity_Edge;
-  }
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
-  {
-    return false;
-  }
-  int NbNodes() const;
-  int NbEdges() const;
-  friend bool operator<(const SMDS_LinearEdge& e1, const SMDS_LinearEdge& e2);
+  virtual SMDSAbs_ElementType  GetType()       const { return SMDSAbs_Edge; }
+  virtual SMDSAbs_GeometryType GetGeomType()   const { return SMDSGeom_EDGE; }
+  virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Edge; }
+  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
+  virtual int  NbNodes() const;
+  virtual int  NbEdges() const;
+  virtual int  NbFaces() const;
 
-  /*!
-   * \brief Return node by its index
-   * \param ind - node index
-   * \retval const SMDS_MeshNode* - the node
-   */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+  virtual int  NbCornerNodes() const { return NbNodes(); }
+  virtual int  GetNodeIndex( const SMDS_MeshNode* node ) const;
 
-protected:
-  SMDS_ElemIteratorPtr
-  elementsIterator(SMDSAbs_ElementType type) const;
+  virtual bool IsPoly() const { return false; }
+  virtual bool IsQuadratic() const  { return false; }
+
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
+
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
 
 protected:
-  const SMDS_MeshNode* myNodes[3];
+  const SMDS_MeshNode* myNodes[2];
 
 };
 #endif
index 40caa2c8854d51f04cbb99b91ba3f5943a34f8cd..bb3ecb80f37b8dc29965ab9416fb4c5cc062621f 100644 (file)
 #pragma warning(disable:4786)
 #endif
 
-#include "SMDS_FaceOfEdges.hxx"
-#include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_Mesh.hxx"
-#include "SMDS_PolygonalFaceOfNodes.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
-#include "SMDS_QuadraticEdge.hxx"
-#include "SMDS_QuadraticFaceOfNodes.hxx"
-#include "SMDS_QuadraticVolumeOfNodes.hxx"
+
+#include "SMDS_ElementFactory.hxx"
+#include "SMDS_ElementHolder.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_SpacePosition.hxx"
 #include "SMDS_UnstructuredGrid.hxx"
-#include "SMDS_VolumeOfFaces.hxx"
-#include "SMDS_VolumeOfNodes.hxx"
 
-#include "utilities.h"
+#include <utilities.h>
 
 #include <vtkUnstructuredGrid.h>
-#include <vtkUnstructuredGridWriter.h>
-#include <vtkUnsignedCharArray.h>
+//#include <vtkUnstructuredGridWriter.h>
 #include <vtkCell.h>
+#include <vtkUnsignedCharArray.h>
 #include <vtkCellLinks.h>
 #include <vtkIdList.h>
 
 #include <algorithm>
-#include <map>
 #include <iostream>
 #include <fstream>
-#include <iterator>
-using namespace std;
+
+#include <boost/make_shared.hpp>
 
 #if !defined WIN32 && !defined __APPLE__
 #include <sys/sysinfo.h>
@@ -63,9 +56,9 @@ using namespace std;
 // number of added entities to check memory after
 #define CHECKMEMORY_INTERVAL 100000
 
-vector<SMDS_Mesh*> SMDS_Mesh::_meshList = vector<SMDS_Mesh*>();
-int SMDS_Mesh::chunkSize = 1024;
+#define MYASSERT(val) if (!(val)) throw SALOME_Exception(LOCALIZED("assertion not verified"));
 
+int SMDS_Mesh::chunkSize = 1024;
 
 //================================================================================
 /*!
@@ -77,6 +70,7 @@ int SMDS_Mesh::chunkSize = 1024;
 
 int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
 {
+  return -1;
 #if !defined WIN32 && !defined __APPLE__
   struct sysinfo si;
   int err = sysinfo( &si );
@@ -87,13 +81,16 @@ int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
 
   static int limit = -1;
   if ( limit < 0 ) {
-    int status = system("SMDS_MemoryLimit"); // it returns lower limit of free RAM
-    if (status >= 0 ) {
-      limit = WEXITSTATUS(status);
-    }
-    else {
-      double factor = ( si.totalswap == 0 ) ? 0.1 : 0.2;
-      limit = int(( factor * si.totalram * si.mem_unit ) / Mbyte );
+    if ( si.totalswap == 0 )
+    {
+      int status = system("SMDS_MemoryLimit"); // it returns lower limit of free RAM
+      if (status >= 0 ) {
+        limit = WEXITSTATUS(status);
+      }
+      else {
+        double factor = ( si.totalswap == 0 ) ? 0.1 : 0.2;
+        limit = int(( factor * si.totalram * si.mem_unit ) / Mbyte );
+      }
     }
     if ( limit < 20 )
       limit = 20;
@@ -106,7 +103,6 @@ int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
   int freeMb =
     ( si.freeram  * si.mem_unit ) / Mbyte +
     ( si.freeswap * si.mem_unit ) / Mbyte;
-  //cout << "freeMb = " << freeMb << " limit = " << limit << endl;
 
   if ( freeMb > limit )
     return freeMb - limit;
@@ -125,29 +121,12 @@ int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
 /// Create a new mesh object
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_Mesh::SMDS_Mesh():
-  myNodePool(0), myVolumePool(0), myFacePool(0), myEdgePool(0), myBallPool(0),
+  myNodeFactory( new SMDS_NodeFactory( this )),
+  myCellFactory( new SMDS_ElementFactory( this )),
   myParent(NULL),
-  myNodeIDFactory(new SMDS_MeshNodeIDFactory()),
-  myElementIDFactory(new SMDS_MeshElementIDFactory()),
   myModified(false), myModifTime(0), myCompactTime(0),
-  myHasConstructionEdges(false), myHasConstructionFaces(false),
-  myHasInverseElements(true),
   xmin(0), xmax(0), ymin(0), ymax(0), zmin(0), zmax(0)
 {
-  myMeshId = _meshList.size();         // --- index of the mesh to push back in the vector
-  myNodeIDFactory->SetMesh(this);
-  myElementIDFactory->SetMesh(this);
-  _meshList.push_back(this);
-  myNodePool = new ObjectPool<SMDS_MeshNode>(SMDS_Mesh::chunkSize);
-  myEdgePool = new ObjectPool<SMDS_VtkEdge>(SMDS_Mesh::chunkSize);
-  myFacePool = new ObjectPool<SMDS_VtkFace>(SMDS_Mesh::chunkSize);
-  myVolumePool = new ObjectPool<SMDS_VtkVolume>(SMDS_Mesh::chunkSize);
-  myBallPool = new ObjectPool<SMDS_BallElement>(SMDS_Mesh::chunkSize);
-
-  myNodes.clear();
-  myCells.clear();
-  //myCellIdSmdsToVtk.clear();
-  myCellIdVtkToSmds.clear();
   myGrid = SMDS_UnstructuredGrid::New();
   myGrid->setSMDS_mesh(this);
   myGrid->Initialize();
@@ -156,22 +135,13 @@ SMDS_Mesh::SMDS_Mesh():
   // bug "21125: EDF 1233 SMESH: Degrardation of precision in a test case for quadratic conversion"
   // Use double type for storing coordinates of nodes instead of float.
   points->SetDataType(VTK_DOUBLE);
-  points->SetNumberOfPoints(0 /*SMDS_Mesh::chunkSize*/);
+  points->SetNumberOfPoints( 0 );
   myGrid->SetPoints( points );
   points->Delete();
-  //myGrid->BuildLinks();
   this->Modified();
 
   // initialize static maps in SMDS_MeshCell, to be thread-safe
-  if ( myMeshId == 0 )
-  {
-    SMDS_MeshCell::toVtkType( SMDSEntity_Node );
-    SMDS_MeshCell::toVtkOrder( SMDSEntity_Node );
-    SMDS_MeshCell::reverseSmdsOrder( SMDSEntity_Node );
-    SMDS_MeshCell::interlacedSmdsOrder( SMDSEntity_Node );
-    SMDS_MeshCell::toSmdsType( VTK_VERTEX );
-    SMDS_MeshCell::fromVtkOrder( SMDSEntity_Node );
-  }
+  SMDS_MeshCell::InitStaticMembers();
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -180,15 +150,9 @@ SMDS_Mesh::SMDS_Mesh():
 /// (2003-09-08) of SMESH
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_Mesh::SMDS_Mesh(SMDS_Mesh * parent):
-  myNodePool(parent->myNodePool),
-  myVolumePool(parent->myVolumePool),
-  myFacePool(parent->myFacePool),
-  myEdgePool(parent->myEdgePool),
-  myBallPool(parent->myBallPool),
-  myParent(parent), myNodeIDFactory(parent->myNodeIDFactory),
-  myElementIDFactory(parent->myElementIDFactory),
-  myHasConstructionEdges(false), myHasConstructionFaces(false),
-  myHasInverseElements(true)
+  myNodeFactory( new SMDS_NodeFactory( this )),
+  myCellFactory( new SMDS_ElementFactory( this )),
+  myParent(parent)
 {
 }
 
@@ -211,7 +175,7 @@ SMDS_Mesh *SMDS_Mesh::AddSubMesh()
 
 SMDS_MeshNode * SMDS_Mesh::AddNode(double x, double y, double z)
 {
-  return SMDS_Mesh::AddNodeWithID(x,y,z,myNodeIDFactory->GetFreeID());
+  return SMDS_Mesh::AddNodeWithID( x,y,z, myNodeFactory->GetFreeID() );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -219,33 +183,18 @@ SMDS_MeshNode * SMDS_Mesh::AddNode(double x, double y, double z)
 ///@param ID : The ID of the MeshNode to create
 ///@return : The created node or NULL if a node with this ID already exists
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_MeshNode * SMDS_Mesh::AddNodeWithID(double x, double y, double z, int ID)
+SMDS_MeshNode * SMDS_Mesh::AddNodeWithID( double x, double y, double z, int ID )
 {
   // find the MeshNode corresponding to ID
-  const SMDS_MeshElement *node = myNodeIDFactory->MeshElement(ID);
-  if(!node){
-    if (ID < 1)
-      {
-        MESSAGE("=============>  Bad Node Id: " << ID);
-        ID = myNodeIDFactory->GetFreeID();
-      }
-    myNodeIDFactory->adjustMaxId(ID);
-    SMDS_MeshNode * node = myNodePool->getNew();
-    node->init(ID, myMeshId, 0, x, y, z);
-
-    if (ID >= (int)myNodes.size())
-    {
-        myNodes.resize(ID+SMDS_Mesh::chunkSize, 0);
-//         MESSAGE(" ------------------ myNodes resize " << ID << " --> " << ID+SMDS_Mesh::chunkSize);
-    }
-    myNodes[ID] = node;
-    myNodeIDFactory->BindID(ID,node);
+  SMDS_MeshNode *node = myNodeFactory->NewNode( ID );
+  if ( node )
+  {
+    node->init( x, y, z );
     myInfo.myNbNodes++;
     myModified = true;
     this->adjustBoundingBox(x, y, z);
-    return node;
-  }else
-    return NULL;
+  }
+  return node;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -254,7 +203,7 @@ SMDS_MeshNode * SMDS_Mesh::AddNodeWithID(double x, double y, double z, int ID)
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(int idnode, int ID)
 {
-  SMDS_MeshNode * node = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode);
+  const SMDS_MeshNode * node = myNodeFactory->FindNode(idnode);
   if (!node) return NULL;
   return SMDS_Mesh::Add0DElementWithID(node, ID);
 }
@@ -265,7 +214,7 @@ SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(int idnode, int ID)
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_Mesh0DElement* SMDS_Mesh::Add0DElement(const SMDS_MeshNode * node)
 {
-  return SMDS_Mesh::Add0DElementWithID(node, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::Add0DElementWithID( node, myCellFactory->GetFreeID() );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -280,30 +229,26 @@ SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(const SMDS_MeshNode * n, int I
   if (!n) return 0;
 
   if (Nb0DElements() % CHECKMEMORY_INTERVAL == 0) CheckMemory();
-  //MESSAGE("Add0DElementWithID" << ID)
-  SMDS_Mesh0DElement * el0d = new SMDS_Mesh0DElement(n);
-  if (myElementIDFactory->BindID(ID, el0d)) {
-    //SMDS_MeshNode *node = const_cast<SMDS_MeshNode*>(n);
-    //node->AddInverseElement(el0d);// --- fait avec BindID
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = el0d;
+
+  if ( SMDS_MeshCell * cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_0D, /*nbNodes=*/1, n );
     myInfo.myNb0DElements++;
-    return el0d;
+    return static_cast< SMDS_Mesh0DElement*> ( cell );
   }
 
-  delete el0d;
-  return NULL;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 /// create a Ball and add it to the current Mesh
 /// @return : The created Ball
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_BallElement* SMDS_Mesh::AddBallWithID(int idnode, double diameter, int ID)
+SMDS_BallElement* SMDS_Mesh::AddBallWithID( int idnode, double diameter, int ID )
 {
-  SMDS_MeshNode * node = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode);
+  const SMDS_MeshNode * node = myNodeFactory->FindNode( idnode );
   if (!node) return NULL;
-  return SMDS_Mesh::AddBallWithID(node, diameter, ID);
+  return SMDS_Mesh::AddBallWithID( node, diameter, ID );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -312,7 +257,7 @@ SMDS_BallElement* SMDS_Mesh::AddBallWithID(int idnode, double diameter, int ID)
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_BallElement* SMDS_Mesh::AddBall(const SMDS_MeshNode * node, double diameter)
 {
-  return SMDS_Mesh::AddBallWithID(node, diameter, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddBallWithID(node, diameter, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -329,17 +274,12 @@ SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_MeshNode * n, double diame
 
   if (NbBalls() % CHECKMEMORY_INTERVAL == 0) CheckMemory();
 
-  SMDS_BallElement *ball = myBallPool->getNew();
-  ball->init(n->getVtkId(), diameter, this);
-  if (!this->registerElement(ID,ball))
+  SMDS_BallElement* ball = static_cast< SMDS_BallElement*>( myCellFactory->NewElement( ID ));
+  if ( ball )
   {
-    this->myGrid->GetCellTypesArray()->SetValue(ball->getVtkId(), VTK_EMPTY_CELL);
-    myBallPool->destroy(ball);
-    return 0;
+    ball->init( n, diameter );
+    myInfo.myNbBalls++;
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = ball;
-  myInfo.myNbBalls++;
   return ball;
 }
 
@@ -350,8 +290,8 @@ SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_MeshNode * n, double diame
 
 SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int idnode1, int idnode2, int ID)
 {
-  SMDS_MeshNode * node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  SMDS_MeshNode * node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
+  const SMDS_MeshNode * node1 = myNodeFactory->FindNode(idnode1);
+  const SMDS_MeshNode * node2 = myNodeFactory->FindNode(idnode2);
   if(!node1 || !node2) return NULL;
   return SMDS_Mesh::AddEdgeWithID(node1, node2, ID);
 }
@@ -364,7 +304,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int idnode1, int idnode2, int ID)
 SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode * node1,
                                   const SMDS_MeshNode * node2)
 {
-  return SMDS_Mesh::AddEdgeWithID(node1, node2, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddEdgeWithID(node1, node2, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -378,36 +318,17 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode * node1,
 
 SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n2,
-                                        int ID)
+                                        int                   ID)
 {
   if ( !n1 || !n2 ) return 0;
-  SMDS_MeshEdge * edge = 0;
-
-  // --- retrieve nodes ID
-  vector<vtkIdType> nodeIds;
-  nodeIds.clear();
-  nodeIds.push_back(n1->getVtkId());
-  nodeIds.push_back(n2->getVtkId());
-
-  SMDS_VtkEdge *edgevtk = myEdgePool->getNew();
-  edgevtk->init(nodeIds, this);
-  if (!this->registerElement(ID,edgevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL);
-      myEdgePool->destroy(edgevtk);
-      return 0;
-    }
-  edge = edgevtk;
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = edge;
-  myInfo.myNbEdges++;
 
-//  if (edge && !registerElement(ID, edge))
-//  {
-//    RemoveElement(edge, false);
-//    edge = NULL;
-//  }
-  return edge;
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Edge, /*nbNodes=*/2, n1, n2 );
+    myInfo.myNbEdges++;
+    return static_cast<SMDS_MeshEdge*>( cell );
+  }
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -419,7 +340,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * n2,
                                   const SMDS_MeshNode * n3)
 {
-  return SMDS_Mesh::AddFaceWithID(n1,n2,n3, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddFaceWithID(n1,n2,n3, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -428,9 +349,9 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1, int idnode2, int idnode3, int ID)
 {
-  SMDS_MeshNode * node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  SMDS_MeshNode * node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  SMDS_MeshNode * node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
+  const SMDS_MeshNode * node1 = myNodeFactory->FindNode(idnode1);
+  const SMDS_MeshNode * node2 = myNodeFactory->FindNode(idnode2);
+  const SMDS_MeshNode * node3 = myNodeFactory->FindNode(idnode3);
   if(!node1 || !node2 || !node3) return NULL;
   return SMDS_Mesh::AddFaceWithID(node1, node2, node3, ID);
 }
@@ -444,14 +365,16 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n3,
                                         int ID)
 {
-  //MESSAGE("AddFaceWithID " << ID)
-  SMDS_MeshFace * face=createTriangle(n1, n2, n3, ID);
+  if ( !n1 || !n2 || !n3 ) return 0;
+  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
 
-//  if (face && !registerElement(ID, face)) {
-//    RemoveElement(face, false);
-//    face = NULL;
-//  }
-  return face;
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Triangle, /*nbNodes=*/3, n1, n2, n3 );
+    myInfo.myNbTriangles++;
+    return static_cast<SMDS_MeshFace*>( cell );
+  }
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -464,7 +387,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * n3,
                                   const SMDS_MeshNode * n4)
 {
-  return SMDS_Mesh::AddFaceWithID(n1,n2,n3, n4, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddFaceWithID(n1,n2,n3, n4, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -477,12 +400,12 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1,
                                         int idnode4,
                                         int ID)
 {
-  SMDS_MeshNode *node1, *node2, *node3, *node4;
-  node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
-  if(!node1 || !node2 || !node3 || !node4) return NULL;
+  const SMDS_MeshNode *node1, *node2, *node3, *node4;
+  node1 = myNodeFactory->FindNode(idnode1);
+  node2 = myNodeFactory->FindNode(idnode2);
+  node3 = myNodeFactory->FindNode(idnode3);
+  node4 = myNodeFactory->FindNode(idnode4);
+  if ( !node1 || !node2 || !node3 || !node4 ) return NULL;
   return SMDS_Mesh::AddFaceWithID(node1, node2, node3, node4, ID);
 }
 
@@ -496,100 +419,16 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n4,
                                         int ID)
 {
-  //MESSAGE("AddFaceWithID " << ID);
-  SMDS_MeshFace * face=createQuadrangle(n1, n2, n3, n4, ID);
-
-//  if (face && !registerElement(ID, face)) {
-//    RemoveElement(face, false);
-//    face = NULL;
-//  }
-  return face;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Add a triangle defined by its edges. An ID is automatically assigned to the
-/// Created face
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshEdge * e1,
-                                  const SMDS_MeshEdge * e2,
-                                  const SMDS_MeshEdge * e3)
-{
-  if (!hasConstructionEdges())
-    return NULL;
-     //MESSAGE("AddFaceWithID");
- return AddFaceWithID(e1,e2,e3, myElementIDFactory->GetFreeID());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Add a triangle defined by its edges
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1,
-                                        const SMDS_MeshEdge * e2,
-                                        const SMDS_MeshEdge * e3,
-                                        int ID)
-{
-  if (!hasConstructionEdges())
-    return NULL;
-  if ( !e1 || !e2 || !e3 ) return 0;
-
-  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-
-  SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3);
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = face;
-  myInfo.myNbTriangles++;
-
-  if (!registerElement(ID, face)) {
-    registerElement(myElementIDFactory->GetFreeID(), face);
-    //RemoveElement(face, false);
-    //face = NULL;
-  }
-  return face;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Add a quadrangle defined by its edges. An ID is automatically assigned to the
-/// Created face
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshEdge * e1,
-                                  const SMDS_MeshEdge * e2,
-                                  const SMDS_MeshEdge * e3,
-                                  const SMDS_MeshEdge * e4)
-{
-  if (!hasConstructionEdges())
-    return NULL;
- return AddFaceWithID(e1,e2,e3,e4, myElementIDFactory->GetFreeID());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Add a quadrangle defined by its edges
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1,
-                                        const SMDS_MeshEdge * e2,
-                                        const SMDS_MeshEdge * e3,
-                                        const SMDS_MeshEdge * e4,
-                                        int ID)
-{
-  if (!hasConstructionEdges())
-    return NULL;
-  if ( !e1 || !e2 || !e3 || !e4 ) return 0;
+  if ( !n1 || !n2 || !n3 || !n4 ) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3,e4);
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = face;
-  myInfo.myNbQuadrangles++;
 
-  if (!registerElement(ID, face))
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    registerElement(myElementIDFactory->GetFreeID(), face);
-    //RemoveElement(face, false);
-    //face = NULL;
+    cell->init( SMDSEntity_Quadrangle, /*nbNodes=*/4, n1, n2, n3, n4 );
+    myInfo.myNbQuadrangles++;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
-  return face;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -602,10 +441,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n3,
                                       const SMDS_MeshNode * n4)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, myCellFactory->GetFreeID() );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -621,11 +457,11 @@ SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
                                              int idnode4,
                                              int ID)
 {
-  SMDS_MeshNode *node1, *node2, *node3, *node4;
-  node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
+  const SMDS_MeshNode *node1, *node2, *node3, *node4;
+  node1 = myNodeFactory->FindNode(idnode1);
+  node2 = myNodeFactory->FindNode(idnode2);
+  node3 = myNodeFactory->FindNode(idnode3);
+  node4 = myNodeFactory->FindNode(idnode4);
   if(!node1 || !node2 || !node3 || !node4) return NULL;
   return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, ID);
 }
@@ -642,49 +478,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n4,
                                             int ID)
 {
-  SMDS_MeshVolume* volume = 0;
-  if ( !n1 || !n2 || !n3 || !n4) return volume;
+  if ( !n1 || !n2 || !n3 || !n4 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionFaces()) {
-    SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
-    SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n4);
-    SMDS_MeshFace * f3=FindFaceOrCreate(n1,n3,n4);
-    SMDS_MeshFace * f4=FindFaceOrCreate(n2,n3,n4);
-    volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
-    myInfo.myNbTetras++;
-  }
-  else if(hasConstructionEdges()) {
-    return NULL;
-  }
-  else {
-    // --- retrieve nodes ID
-    myNodeIds.resize(4);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n3->getVtkId(); // order SMDS-->VTK
-    myNodeIds[2] = n2->getVtkId();
-    myNodeIds[3] = n4->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Tetra, /*nbNodes=*/4, n1, n2, n3, n4 );
     myInfo.myNbTetras++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-
-  //  if (!registerElement(ID, volume)) {
-  //    RemoveElement(volume, false);
-  //    volume = NULL;
-  //  }
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -699,10 +502,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n4,
                                       const SMDS_MeshNode * n5)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, myCellFactory->GetFreeID() );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -720,12 +520,12 @@ SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
                                              int idnode5,
                                              int ID)
 {
-  SMDS_MeshNode *node1, *node2, *node3, *node4, *node5;
-  node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
-  node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5);
+  const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5;
+  node1 = myNodeFactory->FindNode(idnode1);
+  node2 = myNodeFactory->FindNode(idnode2);
+  node3 = myNodeFactory->FindNode(idnode3);
+  node4 = myNodeFactory->FindNode(idnode4);
+  node5 = myNodeFactory->FindNode(idnode5);
   if(!node1 || !node2 || !node3 || !node4 || !node5) return NULL;
   return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, ID);
 }
@@ -744,50 +544,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n5,
                                             int ID)
 {
-  SMDS_MeshVolume* volume = 0;
-  if ( !n1 || !n2 || !n3 || !n4 || !n5) return volume;
+  if ( !n1 || !n2 || !n3 || !n4 || !n5 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionFaces()) {
-    SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
-    SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n5);
-    SMDS_MeshFace * f3=FindFaceOrCreate(n2,n3,n5);
-    SMDS_MeshFace * f4=FindFaceOrCreate(n3,n4,n5);
-    volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
-    myInfo.myNbPyramids++;
-  }
-  else if(hasConstructionEdges()) {
-    return NULL;
-  }
-  else {
-    // --- retrieve nodes ID
-    myNodeIds.resize(5);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n4->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n2->getVtkId();
-    myNodeIds[4] = n5->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Pyramid, /*nbNodes=*/5, n1, n2, n3, n4, n5 );
     myInfo.myNbPyramids++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-
-  //  if (!registerElement(ID, volume)) {
-  //    RemoveElement(volume, false);
-  //    volume = NULL;
-  //  }
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -803,10 +569,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n5,
                                       const SMDS_MeshNode * n6)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  int ID = myCellFactory->GetFreeID();
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -825,14 +589,13 @@ SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
                                              int idnode6,
                                              int ID)
 {
-  SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6;
-  node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
-  node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5);
-  node6 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode6);
-  if(!node1 || !node2 || !node3 || !node4 || !node5 || !node6) return NULL;
+  const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6;
+  node1 = myNodeFactory->FindNode(idnode1);
+  node2 = myNodeFactory->FindNode(idnode2);
+  node3 = myNodeFactory->FindNode(idnode3);
+  node4 = myNodeFactory->FindNode(idnode4);
+  node5 = myNodeFactory->FindNode(idnode5);
+  node6 = myNodeFactory->FindNode(idnode6);
   return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, node6, ID);
 }
 
@@ -851,52 +614,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n6,
                                             int ID)
 {
-  SMDS_MeshVolume* volume = 0;
-  if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6) return volume;
+  if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionFaces()) {
-    SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
-    SMDS_MeshFace * f2=FindFaceOrCreate(n4,n5,n6);
-    SMDS_MeshFace * f3=FindFaceOrCreate(n1,n4,n5,n2);
-    SMDS_MeshFace * f4=FindFaceOrCreate(n2,n5,n6,n3);
-    SMDS_MeshFace * f5=FindFaceOrCreate(n3,n6,n4,n1);
-    volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
-    myInfo.myNbPrisms++;
-  }
-  else if(hasConstructionEdges()) {
-    return NULL;
-  }
-  else {
-    // --- retrieve nodes ID
-    myNodeIds.resize(6);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n2->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n4->getVtkId();
-    myNodeIds[4] = n5->getVtkId();
-    myNodeIds[5] = n6->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Penta, /*nbNodes=*/6, n1, n2, n3, n4, n5, n6 );
     myInfo.myNbPrisms++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-
-  //  if (!registerElement(ID, volume)) {
-  //    RemoveElement(volume, false);
-  //    volume = NULL;
-  //  }
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -917,12 +644,9 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n11,
                                       const SMDS_MeshNode * n12)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6,
-                                                   n7, n8, n9, n10, n11, n12,
-                                                   ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6,
+                                    n7, n8, n9, n10, n11, n12,
+                                    myCellFactory->GetFreeID() );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -946,18 +670,18 @@ SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
                                              int idnode12,
                                              int ID)
 {
-  SMDS_MeshNode *node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  SMDS_MeshNode *node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  SMDS_MeshNode *node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  SMDS_MeshNode *node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
-  SMDS_MeshNode *node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5);
-  SMDS_MeshNode *node6 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode6);
-  SMDS_MeshNode *node7 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode7);
-  SMDS_MeshNode *node8 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode8);
-  SMDS_MeshNode *node9 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode9);
-  SMDS_MeshNode *node10 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode10);
-  SMDS_MeshNode *node11 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode11);
-  SMDS_MeshNode *node12 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode12);
+  const SMDS_MeshNode *node1 = myNodeFactory->FindNode(idnode1);
+  const SMDS_MeshNode *node2 = myNodeFactory->FindNode(idnode2);
+  const SMDS_MeshNode *node3 = myNodeFactory->FindNode(idnode3);
+  const SMDS_MeshNode *node4 = myNodeFactory->FindNode(idnode4);
+  const SMDS_MeshNode *node5 = myNodeFactory->FindNode(idnode5);
+  const SMDS_MeshNode *node6 = myNodeFactory->FindNode(idnode6);
+  const SMDS_MeshNode *node7 = myNodeFactory->FindNode(idnode7);
+  const SMDS_MeshNode *node8 = myNodeFactory->FindNode(idnode8);
+  const SMDS_MeshNode *node9 = myNodeFactory->FindNode(idnode9);
+  const SMDS_MeshNode *node10 = myNodeFactory->FindNode(idnode10);
+  const SMDS_MeshNode *node11 = myNodeFactory->FindNode(idnode11);
+  const SMDS_MeshNode *node12 = myNodeFactory->FindNode(idnode12);
   return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, node6,
                                     node7, node8, node9, node10, node11, node12,
                                     ID);
@@ -988,44 +712,15 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
      !n7 || !n8 || !n9 || !n10 || !n11 || !n12 )
     return volume;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionFaces()) {
-    return NULL;
-  }
-  else if(hasConstructionEdges()) {
-    return NULL;
-  }
-  else {
-    // --- retrieve nodes ID
-    myNodeIds.resize(12);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n6->getVtkId();
-    myNodeIds[2] = n5->getVtkId();
-    myNodeIds[3] = n4->getVtkId();
-    myNodeIds[4] = n3->getVtkId();
-    myNodeIds[5] = n2->getVtkId();
-
-    myNodeIds[6] = n7->getVtkId();
-    myNodeIds[7] = n12->getVtkId();
-    myNodeIds[8] = n11->getVtkId();
-    myNodeIds[9] = n10->getVtkId();
-    myNodeIds[10] = n9->getVtkId();
-    myNodeIds[11] = n8->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Hexagonal_Prism,
+                /*nbNodes=*/12, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12 );
     myInfo.myNbHexPrism++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1043,10 +738,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n7,
                                       const SMDS_MeshNode * n8)
 {
-  int ID = myElementIDFactory->GetFreeID();
- SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  int ID = myCellFactory->GetFreeID();
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1067,17 +760,15 @@ SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
                                              int idnode8,
                                              int ID)
 {
-  SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6, *node7, *node8;
-  node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1);
-  node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2);
-  node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3);
-  node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4);
-  node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5);
-  node6 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode6);
-  node7 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode7);
-  node8 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode8);
-  if(!node1 || !node2 || !node3 || !node4 || !node5 || !node6 || !node7 || !node8)
-    return NULL;
+  const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6, *node7, *node8;
+  node1 = myNodeFactory->FindNode(idnode1);
+  node2 = myNodeFactory->FindNode(idnode2);
+  node3 = myNodeFactory->FindNode(idnode3);
+  node4 = myNodeFactory->FindNode(idnode4);
+  node5 = myNodeFactory->FindNode(idnode5);
+  node6 = myNodeFactory->FindNode(idnode6);
+  node7 = myNodeFactory->FindNode(idnode7);
+  node8 = myNodeFactory->FindNode(idnode8);
   return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, node6,
                                     node7, node8, ID);
 }
@@ -1103,203 +794,28 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8) return volume;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionFaces()) {
-    SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
-    SMDS_MeshFace * f2=FindFaceOrCreate(n5,n6,n7,n8);
-    SMDS_MeshFace * f3=FindFaceOrCreate(n1,n4,n8,n5);
-    SMDS_MeshFace * f4=FindFaceOrCreate(n1,n2,n6,n5);
-    SMDS_MeshFace * f5=FindFaceOrCreate(n2,n3,n7,n6);
-    SMDS_MeshFace * f6=FindFaceOrCreate(n3,n4,n8,n7);
-    volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
-    myInfo.myNbHexas++;
-  }
-  else if(hasConstructionEdges()) {
-    return NULL;
-  }
-  else {
-    // --- retrieve nodes ID
-    myNodeIds.resize(8);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n4->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n2->getVtkId();
-    myNodeIds[4] = n5->getVtkId();
-    myNodeIds[5] = n8->getVtkId();
-    myNodeIds[6] = n7->getVtkId();
-    myNodeIds[7] = n6->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
-    myInfo.myNbHexas++;
-  }
-
-  //  if (!registerElement(ID, volume)) {
-  //    RemoveElement(volume, false);
-  //    volume = NULL;
-  //  }
-  return volume;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new tetrahedron defined by its faces and add it to the mesh.
-///@return The created tetrahedron
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1,
-                                      const SMDS_MeshFace * f2,
-                                      const SMDS_MeshFace * f3,
-                                      const SMDS_MeshFace * f4)
-{
-  if (!hasConstructionFaces())
-    return NULL;
-  return AddVolumeWithID(f1,f2,f3,f4, myElementIDFactory->GetFreeID());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new tetrahedron defined by its faces and add it to the mesh.
-///@param ID The ID of the new volume
-///@return The created tetrahedron
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
-                                            const SMDS_MeshFace * f2,
-                                            const SMDS_MeshFace * f3,
-                                            const SMDS_MeshFace * f4,
-                                            int ID)
-{
-  if (!hasConstructionFaces())
-    return NULL;
-  if ( !f1 || !f2 || !f3 || !f4) return 0;
-  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4);
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volume;
-  myInfo.myNbTetras++;
-
-  if (!registerElement(ID, volume)) {
-    registerElement(myElementIDFactory->GetFreeID(), volume);
-    //RemoveElement(volume, false);
-    //volume = NULL;
-  }
-  return volume;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new pyramid defined by its faces and add it to the mesh.
-///@return The created pyramid
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1,
-                                      const SMDS_MeshFace * f2,
-                                      const SMDS_MeshFace * f3,
-                                      const SMDS_MeshFace * f4,
-                                      const SMDS_MeshFace * f5)
-{
- if (!hasConstructionFaces())
-    return NULL;
-  return AddVolumeWithID(f1,f2,f3,f4,f5, myElementIDFactory->GetFreeID());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new pyramid defined by its faces and add it to the mesh.
-///@param ID The ID of the new volume
-///@return The created pyramid
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
-                                            const SMDS_MeshFace * f2,
-                                            const SMDS_MeshFace * f3,
-                                            const SMDS_MeshFace * f4,
-                                            const SMDS_MeshFace * f5,
-                                            int ID)
-{
-  if (!hasConstructionFaces())
-    return NULL;
-  if ( !f1 || !f2 || !f3 || !f4 || !f5) return 0;
-  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volume;
-  myInfo.myNbPyramids++;
-
-  if (!registerElement(ID, volume)) {
-    registerElement(myElementIDFactory->GetFreeID(), volume);
-    //RemoveElement(volume, false);
-    //volume = NULL;
-  }
-  return volume;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new prism defined by its faces and add it to the mesh.
-///@return The created prism
-///////////////////////////////////////////////////////////////////////////////
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1,
-                                      const SMDS_MeshFace * f2,
-                                      const SMDS_MeshFace * f3,
-                                      const SMDS_MeshFace * f4,
-                                      const SMDS_MeshFace * f5,
-                                      const SMDS_MeshFace * f6)
-{
- if (!hasConstructionFaces())
-    return NULL;
-  return AddVolumeWithID(f1,f2,f3,f4,f5,f6, myElementIDFactory->GetFreeID());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///Create a new prism defined by its faces and add it to the mesh.
-///@param ID The ID of the new volume
-///@return The created prism
-///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
-                                            const SMDS_MeshFace * f2,
-                                            const SMDS_MeshFace * f3,
-                                            const SMDS_MeshFace * f4,
-                                            const SMDS_MeshFace * f5,
-                                            const SMDS_MeshFace * f6,
-                                            int ID)
-{
-  if (!hasConstructionFaces())
-    return NULL;
-  if ( !f1 || !f2 || !f3 || !f4 || !f5 || !f6) return 0;
-  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volume;
-  myInfo.myNbPrisms++;
-
-  if (!registerElement(ID, volume)) {
-    registerElement(myElementIDFactory->GetFreeID(), volume);
-    //RemoveElement(volume, false);
-    //volume = NULL;
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Hexa,
+                /*nbNodes=*/8, n1, n2, n3, n4, n5, n6, n7, n8 );
+    myInfo.myNbHexas++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 /// Add a polygon defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const vector<int> & nodes_ids,
-                                                  const int           ID)
+SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<int> & nodes_ids,
+                                                  const int               ID)
 {
   int nbNodes = nodes_ids.size();
-  vector<const SMDS_MeshNode*> nodes (nbNodes);
+  std::vector<const SMDS_MeshNode*> nodes (nbNodes);
   for (int i = 0; i < nbNodes; i++) {
-    nodes[i] = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nodes_ids[i]);
+    nodes[i] = myNodeFactory->FindNode( nodes_ids[i] );
     if (!nodes[i]) return NULL;
   }
   return SMDS_Mesh::AddPolygonalFaceWithID(nodes, ID);
@@ -1310,38 +826,18 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const vector<int> & nodes_ids,
 ///////////////////////////////////////////////////////////////////////////////
 
 SMDS_MeshFace*
-SMDS_Mesh::AddPolygonalFaceWithID (const vector<const SMDS_MeshNode*> & nodes,
-                                   const int                            ID)
+SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*> & nodes,
+                                   const int                                 ID)
 {
-  SMDS_MeshFace * face;
-
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if (hasConstructionEdges())
-  {
-    return NULL;
-  }
-  else
-  {
-    myNodeIds.resize( nodes.size() );
-    for ( size_t i = 0; i < nodes.size(); ++i )
-      myNodeIds[i] = nodes[i]->getVtkId();
-
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->initPoly(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
 
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
+  {
+    cell->init( SMDSEntity_Polygon, nodes );
     myInfo.myNbPolygons++;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
-
-  return face;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1349,21 +845,21 @@ SMDS_Mesh::AddPolygonalFaceWithID (const vector<const SMDS_MeshNode*> & nodes,
 /// An ID is automatically affected to the created face.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddPolygonalFace (const vector<const SMDS_MeshNode*> & nodes)
+SMDS_MeshFace* SMDS_Mesh::AddPolygonalFace (const std::vector<const SMDS_MeshNode*> & nodes)
 {
-  return SMDS_Mesh::AddPolygonalFaceWithID(nodes, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddPolygonalFaceWithID(nodes, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 /// Add a quadratic polygon defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector<int> & nodes_ids,
-                                                      const int           ID)
+SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<int> & nodes_ids,
+                                                      const int                ID)
 {
-  vector<const SMDS_MeshNode*> nodes( nodes_ids.size() );
+  std::vector<const SMDS_MeshNode*> nodes( nodes_ids.size() );
   for ( size_t i = 0; i < nodes.size(); i++) {
-    nodes[i] = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nodes_ids[i]);
+    nodes[i] = myNodeFactory->FindNode(nodes_ids[i]);
     if (!nodes[i]) return NULL;
   }
   return SMDS_Mesh::AddQuadPolygonalFaceWithID(nodes, ID);
@@ -1374,36 +870,17 @@ SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector<int> & nodes_
 ///////////////////////////////////////////////////////////////////////////////
 
 SMDS_MeshFace*
-SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector<const SMDS_MeshNode*> & nodes,
-                                       const int                            ID)
+SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*> & nodes,
+                                       const int                                 ID)
 {
-  SMDS_MeshFace * face;
-
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if (hasConstructionEdges())
-  {
-    return NULL;
-  }
-  else
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    myNodeIds.resize( nodes.size() );
-    for ( size_t i = 0; i < nodes.size(); ++i )
-      myNodeIds[i] = nodes[i]->getVtkId();
-
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->initQuadPoly(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+    cell->init( SMDSEntity_Quad_Polygon, nodes );
     myInfo.myNbQuadPolygons++;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
-  return face;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1411,9 +888,9 @@ SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector<const SMDS_MeshNode*> & node
 /// An ID is automatically affected to the created face.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFace (const vector<const SMDS_MeshNode*> & nodes)
+SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFace (const std::vector<const SMDS_MeshNode*> & nodes)
 {
-  return SMDS_Mesh::AddQuadPolygonalFaceWithID(nodes, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddQuadPolygonalFaceWithID(nodes, myCellFactory->GetFreeID());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1423,15 +900,14 @@ SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFace (const vector<const SMDS_MeshNode
 /// or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID
-                             (const vector<int> & nodes_ids,
-                              const vector<int> & quantities,
-                              const int           ID)
+SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<int> & nodes_ids,
+                                                        const std::vector<int> & quantities,
+                                                        const int                ID)
 {
   int nbNodes = nodes_ids.size();
-  vector<const SMDS_MeshNode*> nodes (nbNodes);
+  std::vector<const SMDS_MeshNode*> nodes (nbNodes);
   for (int i = 0; i < nbNodes; i++) {
-    nodes[i] = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nodes_ids[i]);
+    nodes[i] = myNodeFactory->FindNode(nodes_ids[i]);
     if (!nodes[i]) return NULL;
   }
   return SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
@@ -1444,57 +920,22 @@ SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID
 ///////////////////////////////////////////////////////////////////////////////
 
 SMDS_MeshVolume*
-SMDS_Mesh::AddPolyhedralVolumeWithID (const vector<const SMDS_MeshNode*>& nodes,
-                                      const vector<int>                 & quantities,
+SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<const SMDS_MeshNode*>& nodes,
+                                      const std::vector<int>                 & quantities,
                                       const int                           ID)
 {
-  SMDS_MeshVolume* volume = 0;
   if ( nodes.empty() || quantities.empty() )
     return NULL;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if (hasConstructionFaces())
-  {
-    return NULL;
-  }
-  else if (hasConstructionEdges())
-  {
-    return NULL;
-  }
-  else
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    //#ifdef VTK_HAVE_POLYHEDRON
-    myNodeIds.resize( nodes.size() );
-    for ( size_t i = 0; i < nodes.size(); ++i )
-      myNodeIds[i] = nodes[i]->getVtkId();
-
-    SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-    volvtk->initPoly(myNodeIds, quantities, this);
-    if (!this->registerElement(ID, volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-    volume = volvtk;
-    //#else
-    //      for ( int i = 0; i < nodes.size(); ++i )
-    //      if ( !nodes[ i ] ) return 0;
-    //      volume = new SMDS_PolyhedralVolumeOfNodes(nodes, quantities);
-    //#endif
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = volume;
+    SMDS_MeshVolume* volume = static_cast<SMDS_MeshVolume*>( cell );
+    volume->init( nodes, quantities );
     myInfo.myNbPolyhedrons++;
+    return volume;
   }
-
-  //#ifndef VTK_HAVE_POLYHEDRON
-  //  if (!registerElement(ID, volume))
-  //    {
-  //      registerElement(myElementIDFactory->GetFreeID(), volume);
-  //      //RemoveElement(volume, false);
-  //      //volume = NULL;
-  //    }
-  //#endif
-  return volume;
+  return 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1503,160 +944,31 @@ SMDS_Mesh::AddPolyhedralVolumeWithID (const vector<const SMDS_MeshNode*>& nodes,
 ///////////////////////////////////////////////////////////////////////////////
 
 SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolume
-                            (const vector<const SMDS_MeshNode*> & nodes,
                            const vector<int>                  & quantities)
+(const std::vector<const SMDS_MeshNode*> & nodes,
const std::vector<int>                  & quantities)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
-  if (v == NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  int ID = myCellFactory->GetFreeID();
+  return SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
 }
 
 SMDS_MeshVolume* SMDS_Mesh::AddVolumeFromVtkIds(const std::vector<vtkIdType>& vtkNodeIds)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeFromVtkIdsWithID(vtkNodeIds, ID);
-  if (v == NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
-}
-
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeFromVtkIdsWithID(const std::vector<vtkIdType>& vtkNodeIds, const int ID)
-{
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(vtkNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-      myVolumePool->destroy(volvtk);
-      return 0;
-    }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  vtkIdType aVtkType = volvtk->GetVtkType();
-  switch (aVtkType)
-  {
-    case VTK_TETRA:
-      myInfo.myNbTetras++;
-      break;
-    case VTK_PYRAMID:
-      myInfo.myNbPyramids++;
-      break;
-    case VTK_WEDGE:
-      myInfo.myNbPrisms++;
-      break;
-    case VTK_HEXAHEDRON:
-      myInfo.myNbHexas++;
-      break;
-    case VTK_QUADRATIC_TETRA:
-      myInfo.myNbQuadTetras++;
-      break;
-    case VTK_QUADRATIC_PYRAMID:
-      myInfo.myNbQuadPyramids++;
-      break;
-    case VTK_QUADRATIC_WEDGE:
-      myInfo.myNbQuadPrisms++;
-      break;
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      myInfo.myNbBiQuadPrisms++;
-      break;
-    case VTK_QUADRATIC_HEXAHEDRON:
-      myInfo.myNbQuadHexas++;
-      break;
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      myInfo.myNbTriQuadHexas++;
-      break;
-//#ifdef VTK_HAVE_POLYHEDRON
-    case VTK_POLYHEDRON:
-      myInfo.myNbPolyhedrons++;
-      break;
-//#endif
-    default:
-      myInfo.myNbPolyhedrons++;
-      break;
-  }
-  return volvtk;
+  SMDS_MeshCell*   cell = myCellFactory->NewCell( myCellFactory->GetFreeID() );
+  SMDS_MeshVolume * vol = static_cast<SMDS_MeshVolume*>( cell );
+  vol->init( vtkNodeIds );
+  myInfo.add( cell );
+  return vol;
 }
 
 SMDS_MeshFace* SMDS_Mesh::AddFaceFromVtkIds(const std::vector<vtkIdType>& vtkNodeIds)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshFace * f = SMDS_Mesh::AddFaceFromVtkIdsWithID(vtkNodeIds, ID);
-  if (f == NULL) myElementIDFactory->ReleaseID(ID);
+  SMDS_MeshCell* cell = myCellFactory->NewCell( myCellFactory->GetFreeID() );
+  SMDS_MeshFace *   f = static_cast<SMDS_MeshFace*>( cell );
+  f->init( vtkNodeIds );
+  myInfo.add( cell );
   return f;
 }
 
-SMDS_MeshFace* SMDS_Mesh::AddFaceFromVtkIdsWithID(const std::vector<vtkIdType>& vtkNodeIds, const int ID)
-{
-  SMDS_VtkFace *facevtk = myFacePool->getNew();
-  facevtk->init(vtkNodeIds, this);
-  if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = facevtk;
-  vtkIdType aVtkType = facevtk->GetVtkType();
-  switch (aVtkType)
-  {
-    case VTK_TRIANGLE:
-      myInfo.myNbTriangles++;
-      break;
-    case VTK_QUAD:
-      myInfo.myNbQuadrangles++;
-      break;
-    case VTK_QUADRATIC_TRIANGLE:
-      myInfo.myNbQuadTriangles++;
-      break;
-    case VTK_QUADRATIC_QUAD:
-      myInfo.myNbQuadQuadrangles++;
-      break;
-    case VTK_BIQUADRATIC_QUAD:
-      myInfo.myNbBiQuadQuadrangles++;
-      break;
-    case VTK_BIQUADRATIC_TRIANGLE:
-      myInfo.myNbBiQuadTriangles++;
-      break;
-    case VTK_POLYGON:
-      myInfo.myNbPolygons++;
-      break;
-     default:
-      myInfo.myNbPolygons++;
-  }
-  return facevtk;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Registers element with the given ID, maintains inverse connections
-///////////////////////////////////////////////////////////////////////////////
-bool SMDS_Mesh::registerElement(int ID, SMDS_MeshElement* element)
-{
-  if ((ID >=0) && (ID < (int)myCells.size()) && myCells[ID]) // --- already bound
-  {
-    MESSAGE(" ------------------ already bound "<< ID << " " << myCells[ID]->getVtkId());
-    return false;
-  }
-
-  element->myID = ID;
-  element->myMeshId = myMeshId;
-
-  SMDS_MeshCell *cell = dynamic_cast<SMDS_MeshCell*>(element);
-  MYASSERT(cell);
-  int vtkId = cell->getVtkId();  
-  if (vtkId == -1)
-    vtkId = myElementIDFactory->SetInVtkGrid(element);
-
-  if (vtkId >= (int)myCellIdVtkToSmds.size()) // --- resize local vector
-  {
-    myCellIdVtkToSmds.resize(vtkId + SMDS_Mesh::chunkSize, -1);
-  }
-  myCellIdVtkToSmds[vtkId] = ID;
-
-  myElementIDFactory->updateMinMax(ID);
-  return true;
-}
-
 //=======================================================================
 //function : MoveNode
 //purpose  : 
@@ -1673,11 +985,7 @@ void SMDS_Mesh::MoveNode(const SMDS_MeshNode *n, double x, double y, double z)
 ///////////////////////////////////////////////////////////////////////////////
 const SMDS_MeshNode * SMDS_Mesh::FindNode(int ID) const
 {
-  if (ID < 1 || ID >= (int)myNodes.size())
-  {
-    return 0;
-  }
-  return (const SMDS_MeshNode *)myNodes[ID];
+  return myNodeFactory->FindNode( ID );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1685,117 +993,12 @@ const SMDS_MeshNode * SMDS_Mesh::FindNode(int ID) const
 ///////////////////////////////////////////////////////////////////////////////
 const SMDS_MeshNode * SMDS_Mesh::FindNodeVtk(int vtkId) const
 {
-  // TODO if needed use mesh->nodeIdFromVtkToSmds
-  if ( vtkId < 0 || vtkId+1 >= (int) myNodes.size() )
-  {
-    MESSAGE("------------------------------------------------------------------------- ");
-    MESSAGE("---------------------------- bad VTK ID " << vtkId << " " << myNodes.size());
-    MESSAGE("------------------------------------------------------------------------- ");
-    return 0;
-  }
-  return (const SMDS_MeshNode *)myNodes[vtkId+1];
-}
-
-//////////////////////////////////////////////////////////////////////////////
-///Create a triangle and add it to the current mesh. This method does not bind
-///an ID to the create triangle.
-//////////////////////////////////////////////////////////////////////////////
-SMDS_MeshFace * SMDS_Mesh::createTriangle(const SMDS_MeshNode * node1,
-                                          const SMDS_MeshNode * node2,
-                                          const SMDS_MeshNode * node3,
-                                          int ID)
-{
-  if ( !node1 || !node2 || !node3) return 0;
-  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionEdges())
-  {
-    SMDS_MeshEdge *edge1, *edge2, *edge3;
-    edge1=FindEdgeOrCreate(node1,node2);
-    edge2=FindEdgeOrCreate(node2,node3);
-    edge3=FindEdgeOrCreate(node3,node1);
-
-    //int ID = myElementIDFactory->GetFreeID(); // -PR- voir si on range cet element
-    SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
-    myInfo.myNbTriangles++;
-    return face;
-  }
-  else
-  {
-    // --- retrieve nodes ID
-    myNodeIds.resize(3);
-    myNodeIds[0] = node1->getVtkId();
-    myNodeIds[1] = node2->getVtkId();
-    myNodeIds[2] = node3->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this); // put in vtkUnstructuredGrid
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
-    myInfo.myNbTriangles++;
-    return face;
-  }
+  return myNodeFactory->FindNode( vtkId + 1 );
 }
 
-////////////////////////////////////////////////////////////////////////////////
-///Create a quadrangle and add it to the current mesh. This method does not bind
-///an ID to the create triangle.
-////////////////////////////////////////////////////////////////////////////////
-SMDS_MeshFace * SMDS_Mesh::createQuadrangle(const SMDS_MeshNode * node1,
-                                            const SMDS_MeshNode * node2,
-                                            const SMDS_MeshNode * node3,
-                                            const SMDS_MeshNode * node4,
-                                            int ID)
+const SMDS_MeshElement * SMDS_Mesh::FindElementVtk(int IDelem) const
 {
-  if ( !node1 || !node2 || !node3 || !node4 ) return 0;
-  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-  if(hasConstructionEdges())
-  {
-    SMDS_MeshEdge *edge1, *edge2, *edge3, *edge4;
-    edge1=FindEdgeOrCreate(node1,node2);
-    edge2=FindEdgeOrCreate(node2,node3);
-    edge3=FindEdgeOrCreate(node3,node4);
-    edge4=FindEdgeOrCreate(node4,node1);
-
-    SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3,edge4);
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
-    myInfo.myNbQuadrangles++;
-    return face;
-  }
-  else
-  {
-    // --- retrieve nodes ID
-    myNodeIds.resize(4);
-    myNodeIds[0] = node1->getVtkId();
-    myNodeIds[1] = node2->getVtkId();
-    myNodeIds[2] = node3->getVtkId();
-    myNodeIds[3] = node4->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
-    myInfo.myNbQuadrangles++;
-    return face;
-  }
+  return myCellFactory->FindElement( FromVtkToSmds( IDelem ));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1807,42 +1010,6 @@ void SMDS_Mesh::RemoveNode(const SMDS_MeshNode * node)
   RemoveElement(node, true);
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Remove an edge and all the elements which own this edge
-///////////////////////////////////////////////////////////////////////////////
-
-void SMDS_Mesh::Remove0DElement(const SMDS_Mesh0DElement * elem0d)
-{
-  RemoveElement(elem0d,true);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Remove an edge and all the elements which own this edge
-///////////////////////////////////////////////////////////////////////////////
-
-void SMDS_Mesh::RemoveEdge(const SMDS_MeshEdge * edge)
-{
-  RemoveElement(edge,true);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Remove an face and all the elements which own this face
-///////////////////////////////////////////////////////////////////////////////
-
-void SMDS_Mesh::RemoveFace(const SMDS_MeshFace * face)
-{
-  RemoveElement(face, true);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Remove a volume
-///////////////////////////////////////////////////////////////////////////////
-
-void SMDS_Mesh::RemoveVolume(const SMDS_MeshVolume * volume)
-{
-  RemoveElement(volume, true);
-}
-
 //=======================================================================
 //function : RemoveFromParent
 //purpose  :
@@ -1863,7 +1030,7 @@ bool SMDS_Mesh::RemoveSubMesh(const SMDS_Mesh * aMesh)
 {
   bool found = false;
 
-  list<SMDS_Mesh *>::iterator itmsh=myChildren.begin();
+  std::list<SMDS_Mesh *>::iterator itmsh=myChildren.begin();
   for (; itmsh!=myChildren.end() && !found; itmsh++)
   {
     SMDS_Mesh * submesh = *itmsh;
@@ -1886,28 +1053,27 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * element,
                                    const SMDS_MeshNode    * nodes[],
                                    const int                nbnodes)
 {
-  // keep current nodes of elem
-  set<const SMDS_MeshNode*> oldNodes( element->begin_nodes(), element->end_nodes() );
+  // keep current nodes of element
+  std::set<const SMDS_MeshNode*> oldNodes( element->begin_nodes(), element->end_nodes() );
 
   // change nodes
   bool Ok = false;
-  SMDS_MeshCell* cell = dynamic_cast<SMDS_MeshCell*>((SMDS_MeshElement*) element);
-  if (cell)
-  {
-    Ok = cell->vtkOrder(nodes, nbnodes);
+  if ( SMDS_MeshCell* cell = dynamic_cast<SMDS_MeshCell*>((SMDS_MeshElement*) element))
     Ok = cell->ChangeNodes(nodes, nbnodes);
-  }
 
-  if ( Ok ) { // update InverseElements
+  if ( Ok )
+    setMyModified();
 
-    set<const SMDS_MeshNode*>::iterator it;
+  if ( Ok && GetGrid()->HasLinks() ) // update InverseElements
+  {
+    std::set<const SMDS_MeshNode*>::iterator it;
 
     // AddInverseElement to new nodes
     for ( int i = 0; i < nbnodes; i++ ) {
       it = oldNodes.find( nodes[i] );
       if ( it == oldNodes.end() )
         // new node
-        const_cast<SMDS_MeshNode*>( nodes[i] )->AddInverseElement( cell );
+        const_cast<SMDS_MeshNode*>( nodes[i] )->AddInverseElement( element );
       else
         // remove from oldNodes a node that remains in elem
         oldNodes.erase( it );
@@ -1916,84 +1082,13 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * element,
     for ( it = oldNodes.begin(); it != oldNodes.end(); it++ )
     {
       SMDS_MeshNode * n = const_cast<SMDS_MeshNode *>( *it );
-      n->RemoveInverseElement( cell );
+      n->RemoveInverseElement( element );
     }
   }
 
   return Ok;
 }
 
-//=======================================================================
-//function : ChangePolyhedronNodes
-//purpose  : to change nodes of polyhedral volume
-//=======================================================================
-bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement *            elem,
-                                       const vector<const SMDS_MeshNode*>& nodes,
-                                       const vector<int>                 & quantities)
-{
-  if (elem->GetType() != SMDSAbs_Volume) {
-    MESSAGE("WRONG ELEM TYPE");
-    return false;
-  }
-
-  const SMDS_VtkVolume* vol = dynamic_cast<const SMDS_VtkVolume*>(elem);
-  if (!vol) {
-    return false;
-  }
-
-  // keep current nodes of elem
-  set<const SMDS_MeshElement*> oldNodes;
-  SMDS_ElemIteratorPtr itn = elem->nodesIterator();
-  while (itn->more()) {
-    oldNodes.insert(itn->next());
-  }
-
-  // change nodes
-  // TODO remove this function
-  //bool Ok = const_cast<SMDS_VtkVolume*>(vol)->ChangeNodes(nodes, quantities);
-  bool Ok = false;
-  if (!Ok) {
-    return false;
-  }
-
-  // update InverseElements
-
-  // AddInverseElement to new nodes
-  int nbnodes = nodes.size();
-  set<const SMDS_MeshElement*>::iterator it;
-  for (int i = 0; i < nbnodes; i++) {
-    it = oldNodes.find(nodes[i]);
-    if (it == oldNodes.end()) {
-      // new node
-      const_cast<SMDS_MeshNode*>(nodes[i])->AddInverseElement(elem);
-    } else {
-      // remove from oldNodes a node that remains in elem
-      oldNodes.erase(it);
-    }
-  }
-
-  // RemoveInverseElement from the nodes removed from elem
-  for (it = oldNodes.begin(); it != oldNodes.end(); it++) {
-    SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
-      (const_cast<SMDS_MeshElement *>( *it ));
-    n->RemoveInverseElement(elem);
-  }
-
-  return Ok;
-}
-
-
-//=======================================================================
-//function : Find0DElement
-//purpose  :
-//=======================================================================
-const SMDS_Mesh0DElement* SMDS_Mesh::Find0DElement(int idnode) const
-{
-  const SMDS_MeshNode * node = FindNode(idnode);
-  if(node == NULL) return NULL;
-  return Find0DElement(node);
-}
-
 const SMDS_Mesh0DElement* SMDS_Mesh::Find0DElement(const SMDS_MeshNode * node)
 {
   if (!node) return 0;
@@ -2008,18 +1103,6 @@ const SMDS_Mesh0DElement* SMDS_Mesh::Find0DElement(const SMDS_MeshNode * node)
   return toReturn;
 }
 
-//=======================================================================
-//function : FindBall
-//purpose  :
-//=======================================================================
-
-const SMDS_BallElement* SMDS_Mesh::FindBall(int idnode) const
-{
-  const SMDS_MeshNode * node = FindNode(idnode);
-  if(node == NULL) return NULL;
-  return FindBall(node);
-}
-
 const SMDS_BallElement* SMDS_Mesh::FindBall(const SMDS_MeshNode * node)
 {
   if (!node) return 0;
@@ -2033,49 +1116,12 @@ const SMDS_BallElement* SMDS_Mesh::FindBall(const SMDS_MeshNode * node)
   return toReturn;
 }
 
-//=======================================================================
-//function : Find0DElementOrCreate
-//purpose  :
-//=======================================================================
-//SMDS_Mesh0DElement* SMDS_Mesh::Find0DElementOrCreate(const SMDS_MeshNode * node)
-//{
-//  if (!node) return 0;
-//  SMDS_Mesh0DElement * toReturn = NULL;
-//  toReturn = const_cast<SMDS_Mesh0DElement*>(Find0DElement(node));
-//  if (toReturn == NULL) {
-//    //if (my0DElements.Extent() % CHECKMEMORY_INTERVAL == 0) CheckMemory();
-//    toReturn = new SMDS_Mesh0DElement(node);
-//    my0DElements.Add(toReturn);
-//    myInfo.myNb0DElements++;
-//  }
-//  return toReturn;
-//}
-
-
-//=======================================================================
-//function : FindEdge
-//purpose  :
-//=======================================================================
-
-const SMDS_MeshEdge* SMDS_Mesh::FindEdge(int idnode1, int idnode2) const
-{
-  const SMDS_MeshNode * node1=FindNode(idnode1);
-  const SMDS_MeshNode * node2=FindNode(idnode2);
-  if((node1==NULL)||(node2==NULL)) return NULL;
-  return FindEdge(node1,node2);
-}
-
-//#include "Profiler.h"
 const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
                                          const SMDS_MeshNode * node2)
 {
   if ( !node1 ) return 0;
   const SMDS_MeshEdge * toReturn=NULL;
-  //PROFILER_Init();
-  //PROFILER_Set();
   SMDS_ElemIteratorPtr it1=node1->GetInverseElementIterator(SMDSAbs_Edge);
-  //PROFILER_Get(0);
-  //PROFILER_Set();
   while(it1->more()) {
     const SMDS_MeshElement * e = it1->next();
     if ( e->NbNodes() == 2 && e->GetNodeIndex( node2 ) >= 0 ) {
@@ -2083,60 +1129,9 @@ const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
       break;
     }
   }
-  //PROFILER_Get(1);
-  return toReturn;
-}
-
-
-//=======================================================================
-//function : FindEdgeOrCreate
-//purpose  :
-//=======================================================================
-
-SMDS_MeshEdge* SMDS_Mesh::FindEdgeOrCreate(const SMDS_MeshNode * node1,
-                                           const SMDS_MeshNode * node2)
-{
-  if ( !node1 || !node2) return 0;
-  SMDS_MeshEdge * toReturn=NULL;
-  toReturn=const_cast<SMDS_MeshEdge*>(FindEdge(node1,node2));
-  if(toReturn==NULL) {
-    if ( NbEdges() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
-    int ID = myElementIDFactory->GetFreeID(); // -PR- voir si on range cet element
-    adjustmyCellsCapacity(ID);
-    myNodeIds.resize(2);
-    myNodeIds[0] = node1->getVtkId();
-    myNodeIds[1] = node2->getVtkId();
-
-    SMDS_VtkEdge *edgevtk = myEdgePool->getNew();
-    edgevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,edgevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL);
-      myEdgePool->destroy(edgevtk);
-      return 0;
-    }
-    toReturn = edgevtk;
-    myCells[ID] = toReturn;
-    myInfo.myNbEdges++;
-  }
   return toReturn;
 }
 
-
-//=======================================================================
-//function : FindEdge
-//purpose  :
-//=======================================================================
-
-const SMDS_MeshEdge* SMDS_Mesh::FindEdge(int idnode1, int idnode2,
-                                         int idnode3) const
-{
-  const SMDS_MeshNode * node1=FindNode(idnode1);
-  const SMDS_MeshNode * node2=FindNode(idnode2);
-  const SMDS_MeshNode * node3=FindNode(idnode3);
-  return FindEdge(node1,node2,node3);
-}
-
 const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
                                          const SMDS_MeshNode * node2,
                                          const SMDS_MeshNode * node3)
@@ -2164,21 +1159,11 @@ const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
   return 0;
 }
 
-
 //=======================================================================
 //function : FindFace
 //purpose  :
 //=======================================================================
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2,
-        int idnode3) const
-{
-  const SMDS_MeshNode * node1=FindNode(idnode1);
-  const SMDS_MeshNode * node2=FindNode(idnode2);
-  const SMDS_MeshNode * node3=FindNode(idnode3);
-  return FindFace(node1, node2, node3);
-}
-
 const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3)
@@ -2206,35 +1191,11 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
   return 0;
 }
 
-SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
-                                           const SMDS_MeshNode *node2,
-                                           const SMDS_MeshNode *node3)
-{
-  SMDS_MeshFace * toReturn=NULL;
-  toReturn = const_cast<SMDS_MeshFace*>(FindFace(node1,node2,node3));
-  if(toReturn==NULL) {
-    int ID = myElementIDFactory->GetFreeID();
-    toReturn = createTriangle(node1,node2,node3, ID);
-  }
-  return toReturn;
-}
-
-
 //=======================================================================
 //function : FindFace
 //purpose  :
 //=======================================================================
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2,
-                                         int idnode3, int idnode4) const
-{
-  const SMDS_MeshNode * node1=FindNode(idnode1);
-  const SMDS_MeshNode * node2=FindNode(idnode2);
-  const SMDS_MeshNode * node3=FindNode(idnode3);
-  const SMDS_MeshNode * node4=FindNode(idnode4);
-  return FindFace(node1, node2, node3, node4);
-}
-
 const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3,
@@ -2264,39 +1225,11 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
   return 0;
 }
 
-SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
-                                           const SMDS_MeshNode *node2,
-                                           const SMDS_MeshNode *node3,
-                                           const SMDS_MeshNode *node4)
-{
-  SMDS_MeshFace * toReturn=NULL;
-  toReturn=const_cast<SMDS_MeshFace*>(FindFace(node1,node2,node3,node4));
-  if(toReturn==NULL) {
-    int ID = myElementIDFactory->GetFreeID();
-    toReturn=createQuadrangle(node1,node2,node3,node4,ID);
-  }
-  return toReturn;
-}
-
-
 //=======================================================================
 //function : FindFace
 //purpose  :quadratic triangle
 //=======================================================================
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2,
-                                         int idnode3, int idnode4,
-                                         int idnode5, int idnode6) const
-{
-  const SMDS_MeshNode * node1 = FindNode(idnode1);
-  const SMDS_MeshNode * node2 = FindNode(idnode2);
-  const SMDS_MeshNode * node3 = FindNode(idnode3);
-  const SMDS_MeshNode * node4 = FindNode(idnode4);
-  const SMDS_MeshNode * node5 = FindNode(idnode5);
-  const SMDS_MeshNode * node6 = FindNode(idnode6);
-  return FindFace(node1, node2, node3, node4, node5, node6);
-}
-
 const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3,
@@ -2336,22 +1269,6 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
 //purpose  : quadratic quadrangle
 //=======================================================================
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2,
-                                         int idnode3, int idnode4,
-                                         int idnode5, int idnode6,
-                                         int idnode7, int idnode8) const
-{
-  const SMDS_MeshNode * node1 = FindNode(idnode1);
-  const SMDS_MeshNode * node2 = FindNode(idnode2);
-  const SMDS_MeshNode * node3 = FindNode(idnode3);
-  const SMDS_MeshNode * node4 = FindNode(idnode4);
-  const SMDS_MeshNode * node5 = FindNode(idnode5);
-  const SMDS_MeshNode * node6 = FindNode(idnode6);
-  const SMDS_MeshNode * node7 = FindNode(idnode7);
-  const SMDS_MeshNode * node8 = FindNode(idnode8);
-  return FindFace(node1, node2, node3, node4, node5, node6, node7, node8);
-}
-
 const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3,
@@ -2397,11 +1314,7 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
 
 const SMDS_MeshElement* SMDS_Mesh::FindElement(int IDelem) const
 {
-  if ( IDelem <= 0 || IDelem >= (int)myCells.size() )
-  {
-    return 0;
-  }
-  return myCells[IDelem];
+  return myCellFactory->FindElement( IDelem );
 }
 
 //=======================================================================
@@ -2409,19 +1322,8 @@ const SMDS_MeshElement* SMDS_Mesh::FindElement(int IDelem) const
 //purpose  : find polygon
 //=======================================================================
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace (const vector<int>& nodes_ids) const
-{
-  int nbnodes = nodes_ids.size();
-  vector<const SMDS_MeshNode *> poly_nodes (nbnodes);
-  for (int inode = 0; inode < nbnodes; inode++) {
-    const SMDS_MeshNode * node = FindNode(nodes_ids[inode]);
-    if (node == NULL) return NULL;
-    poly_nodes[inode] = node;
-  }
-  return FindFace(poly_nodes);
-}
 
-const SMDS_MeshFace* SMDS_Mesh::FindFace (const vector<const SMDS_MeshNode *>& nodes)
+const SMDS_MeshFace* SMDS_Mesh::FindFace (const std::vector<const SMDS_MeshNode *>& nodes)
 {
   return (const SMDS_MeshFace*) FindElement( nodes, SMDSAbs_Face );
 }
@@ -2437,7 +1339,7 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace (const vector<const SMDS_MeshNode *>& n
  */
 //================================================================================
 
-const SMDS_MeshElement* SMDS_Mesh::FindElement (const vector<const SMDS_MeshNode *>& nodes,
+const SMDS_MeshElement* SMDS_Mesh::FindElement (const std::vector<const SMDS_MeshNode *>& nodes,
                                                 const SMDSAbs_ElementType            type,
                                                 const bool                           noMedium)
 {
@@ -2507,110 +1409,6 @@ int SMDS_Mesh::GetElementsByNodes(const std::vector<const SMDS_MeshNode *>& node
   return foundElems.size();
 }
 
-//=======================================================================
-//function : DumpNodes
-//purpose  :
-//=======================================================================
-
-void SMDS_Mesh::DumpNodes() const
-{
-  SMDS_NodeIteratorPtr itnode=nodesIterator();
-  while(itnode->more()) ; //MESSAGE(itnode->next());
-}
-
-//=======================================================================
-//function : Dump0DElements
-//purpose  :
-//=======================================================================
-void SMDS_Mesh::Dump0DElements() const
-{
-  SMDS_ElemIteratorPtr it0d = elementsIterator(SMDSAbs_0DElement);
-  while(it0d->more()) ; //MESSAGE(it0d->next());
-}
-
-//=======================================================================
-//function : DumpEdges
-//purpose  :
-//=======================================================================
-
-void SMDS_Mesh::DumpEdges() const
-{
-  SMDS_EdgeIteratorPtr itedge=edgesIterator();
-  while(itedge->more()) ; //MESSAGE(itedge->next());
-}
-
-//=======================================================================
-//function : DumpFaces
-//purpose  :
-//=======================================================================
-
-void SMDS_Mesh::DumpFaces() const
-{
-  SMDS_FaceIteratorPtr itface=facesIterator();
-  while(itface->more()) ; //MESSAGE(itface->next());
-}
-
-//=======================================================================
-//function : DumpVolumes
-//purpose  :
-//=======================================================================
-
-void SMDS_Mesh::DumpVolumes() const
-{
-  SMDS_VolumeIteratorPtr itvol=volumesIterator();
-  while(itvol->more()) ; //MESSAGE(itvol->next());
-}
-
-//=======================================================================
-//function : DebugStats
-//purpose  :
-//=======================================================================
-
-void SMDS_Mesh::DebugStats() const
-{
-  MESSAGE("Debug stats of mesh : ");
-
-  MESSAGE("===== NODES ====="<<NbNodes());
-  MESSAGE("===== 0DELEMS ====="<<Nb0DElements());
-  MESSAGE("===== EDGES ====="<<NbEdges());
-  MESSAGE("===== FACES ====="<<NbFaces());
-  MESSAGE("===== VOLUMES ====="<<NbVolumes());
-
-  MESSAGE("End Debug stats of mesh ");
-
-  //#ifdef DEB
-
-  SMDS_NodeIteratorPtr itnode=nodesIterator();
-  int sizeofnodes = 0;
-  int sizeoffaces = 0;
-
-  while(itnode->more())
-  {
-    const SMDS_MeshNode *node = itnode->next();
-
-    sizeofnodes += sizeof(*node);
-
-    SMDS_ElemIteratorPtr it = node->GetInverseElementIterator();
-    while(it->more())
-    {
-      const SMDS_MeshElement *me = it->next();
-      sizeofnodes += sizeof(me);
-    }
-  }
-
-  SMDS_FaceIteratorPtr itface=facesIterator();
-  while(itface->more())
-  {
-    const SMDS_MeshElement *face = itface->next();
-    sizeoffaces += sizeof(*face);
-  }
-
-  MESSAGE("total size of node elements = " << sizeofnodes);;
-  MESSAGE("total size of face elements = " << sizeoffaces);;
-
-  //#endif
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of nodes
 ///////////////////////////////////////////////////////////////////////////////
@@ -2681,41 +1479,17 @@ int SMDS_Mesh::NbSubMesh() const
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_Mesh::~SMDS_Mesh()
 {
-  list<SMDS_Mesh*>::iterator itc=myChildren.begin();
+  std::list<SMDS_Mesh*>::iterator itc=myChildren.begin();
   while(itc!=myChildren.end())
   {
     delete *itc;
     itc++;
   }
 
-  if(myParent==NULL)
-  {
-    delete myNodeIDFactory;
-    delete myElementIDFactory;
-  }
-  else
-  {
-    SMDS_ElemIteratorPtr eIt = elementsIterator();
-    while ( eIt->more() )
-      {
-        const SMDS_MeshElement *elem = eIt->next();
-        myElementIDFactory->ReleaseID(elem->GetID(), elem->getVtkId());
-      }
-    SMDS_NodeIteratorPtr itn = nodesIterator();
-    while (itn->more())
-      {
-        const SMDS_MeshNode *node = itn->next();
-        ((SMDS_MeshNode*)node)->SetPosition(SMDS_SpacePosition::originSpacePosition());
-        myNodeIDFactory->ReleaseID(node->GetID(), node->getVtkId());
-      }
-  }
-  myGrid->Delete();
+  delete myNodeFactory;
+  delete myCellFactory;
 
-  delete myNodePool;
-  delete myVolumePool;
-  delete myFacePool;
-  delete myEdgePool;
-  delete myBallPool;
+  myGrid->Delete();
 }
 
 //================================================================================
@@ -2724,48 +1498,16 @@ SMDS_Mesh::~SMDS_Mesh()
  */
 //================================================================================
 
-void SMDS_Mesh::Clear()
-{
-  if (myParent!=NULL)
-  {
-    SMDS_ElemIteratorPtr eIt = elementsIterator();
-    while ( eIt->more() )
-    {
-      const SMDS_MeshElement *elem = eIt->next();
-      myElementIDFactory->ReleaseID(elem->GetID(), elem->getVtkId());
-    }
-    SMDS_NodeIteratorPtr itn = nodesIterator();
-    while (itn->more())
-    {
-      const SMDS_MeshNode *node = itn->next();
-      myNodeIDFactory->ReleaseID(node->GetID(), node->getVtkId());
-    }
-  }
-  else
-  {
-    myNodeIDFactory->Clear();
-    myElementIDFactory->Clear();
-  }
-
-  myVolumePool->clear();
-  myFacePool->clear();
-  myEdgePool->clear();
-  myBallPool->clear();
-
-  clearVector( myCells );
-  clearVector( myCellIdVtkToSmds );
+void SMDS_Mesh::Clear()
+{
+  std::set< SMDS_ElementHolder* >::iterator holder = myElemHolders.begin();
+  for ( ; holder != myElemHolders.end(); ++holder )
+    (*holder)->clear();
 
-  SMDS_NodeIteratorPtr itn = nodesIterator();
-  while (itn->more())
-  {
-    SMDS_MeshNode *node = (SMDS_MeshNode*)(itn->next());
-    node->SetPosition(SMDS_SpacePosition::originSpacePosition());
-    //myNodePool->destroy(node);
-  }
-  myNodePool->clear();
-  clearVector( myNodes );
+  myNodeFactory->Clear();
+  myCellFactory->Clear();
 
-  list<SMDS_Mesh*>::iterator itc=myChildren.begin();
+  std::list<SMDS_Mesh*>::iterator itc=myChildren.begin();
   while(itc!=myChildren.end())
     (*itc)->Clear();
 
@@ -2789,182 +1531,29 @@ void SMDS_Mesh::Clear()
   myGrid->DeleteLinks();
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Return true if this mesh create faces with edges.
-/// A false returned value mean that faces are created with nodes. A concequence
-/// is, iteration on edges (SMDS_Element::edgesIterator) will be unavailable.
-///////////////////////////////////////////////////////////////////////////////
-bool SMDS_Mesh::hasConstructionEdges()
-{
-  return myHasConstructionEdges;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Return true if this mesh create volumes with faces
-/// A false returned value mean that volumes are created with nodes or edges.
-/// (see hasConstructionEdges)
-/// A concequence is, iteration on faces (SMDS_Element::facesIterator) will be
-/// unavailable.
-///////////////////////////////////////////////////////////////////////////////
-bool SMDS_Mesh::hasConstructionFaces()
-{
-  return myHasConstructionFaces;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Return true if nodes are linked to the finit elements, they are belonging to.
-/// Currently, It always return true.
-///////////////////////////////////////////////////////////////////////////////
-bool SMDS_Mesh::hasInverseElements()
-{
-  return myHasInverseElements;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Make this mesh creating construction edges (see hasConstructionEdges)
-/// @param b true to have construction edges, else false.
-///////////////////////////////////////////////////////////////////////////////
-void SMDS_Mesh::setConstructionEdges(bool b)
-{
-  myHasConstructionEdges=b;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Make this mesh creating construction faces (see hasConstructionFaces)
-/// @param b true to have construction faces, else false.
-///////////////////////////////////////////////////////////////////////////////
-void SMDS_Mesh::setConstructionFaces(bool b)
-{
-  myHasConstructionFaces=b;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// Make this mesh creating link from nodes to elements (see hasInverseElements)
-/// @param b true to link nodes to elements, else false.
-///////////////////////////////////////////////////////////////////////////////
-void SMDS_Mesh::setInverseElements(bool b)
-{
-  if(!b) MESSAGE("Error : inverseElement=false not implemented");
-  myHasInverseElements=b;
-}
-
-namespace {
-
-  //================================================================================
-  /*!
-   * \brief Iterator on elements in id increasing order
-   */
-  //================================================================================
-
-  template <typename ELEM=const SMDS_MeshElement*>
-  class IdSortedIterator : public SMDS_Iterator<ELEM>
-  {
-    SMDS_MeshElementIDFactory&       myIDFact;
-    int                              myID, myMaxID, myNbFound, myTotalNb;
-    SMDSAbs_ElementType              myType;
-    ELEM                             myElem;
-
-  public:
-    IdSortedIterator(const SMDS_MeshElementIDFactory& fact,
-                     const SMDSAbs_ElementType        type, // SMDSAbs_All NOT allowed!!! 
-                     const int                        totalNb)
-      :myIDFact( const_cast<SMDS_MeshElementIDFactory&>(fact) ),
-       myID(1), myMaxID( myIDFact.GetMaxID() ),myNbFound(0), myTotalNb( totalNb ),
-       myType( type ),
-       myElem(0)
-    {
-      next();
-    }
-    bool more()
-    {
-      return myElem;
-    }
-    ELEM next()
-    {
-      ELEM current = myElem;
-
-      for ( myElem = 0;  !myElem && myNbFound < myTotalNb && myID <= myMaxID; ++myID )
-        if ((myElem = (ELEM) myIDFact.MeshElement( myID ))
-            && myElem->GetType() != myType )
-          myElem = 0;
-
-      myNbFound += bool(myElem);
-
-      return current;
-    }
-  };
-
-  //================================================================================
-  /*!
-   * \brief Iterator on vector of elements, possibly being resized while iteration
-   */
-  //================================================================================
-
-  template<typename RETURN_VALUE,
-           typename VECTOR_VALUE=SMDS_MeshCell*,
-           typename VALUE_FILTER=SMDS::NonNullFilter<VECTOR_VALUE> >
-  class ElemVecIterator: public SMDS_Iterator<RETURN_VALUE>
-  {
-    const std::vector<VECTOR_VALUE>& _vector;
-    size_t                           _index;
-    bool                             _more;
-    VALUE_FILTER                     _filter;
-  public:
-    ElemVecIterator(const std::vector<VECTOR_VALUE>& vec,
-                    const VALUE_FILTER&              filter=VALUE_FILTER() )
-      :_vector( vec ), _index(0), _more( !vec.empty() ), _filter( filter )
-    {
-      if ( _more && !_filter( _vector[ _index ]))
-        next();
-    }
-    virtual bool more()
-    {
-      return _more;
-    }
-    virtual RETURN_VALUE next()
-    {
-      if ( !_more ) return NULL;
-      VECTOR_VALUE current = _vector[ _index ];
-      _more = 0;
-      while ( !_more && ++_index < _vector.size() )
-        _more = _filter( _vector[ _index ]);
-      return (RETURN_VALUE) current;
-    }
-  };
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 /// Return an iterator on nodes of the current mesh factory
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_NodeIteratorPtr SMDS_Mesh::nodesIterator(bool idInceasingOrder) const
+SMDS_NodeIteratorPtr SMDS_Mesh::nodesIterator() const
 {
-  // naturally always sorted by ID
-  typedef ElemVecIterator<const SMDS_MeshNode*, SMDS_MeshNode*> TIterator;
-  return SMDS_NodeIteratorPtr( new TIterator(myNodes));
+  return myNodeFactory->GetIterator< SMDS_NodeIterator >( new SMDS_MeshElement::NonNullFilter );
 }
 
 SMDS_ElemIteratorPtr SMDS_Mesh::elementGeomIterator(SMDSAbs_GeometryType type) const
 {
-  // naturally always sorted by ID
-  typedef ElemVecIterator
-    < const SMDS_MeshElement*, SMDS_MeshCell*, SMDS_MeshElement::GeomFilter > TIterator;
-  return SMDS_ElemIteratorPtr
-    (new TIterator(myCells, SMDS_MeshElement::GeomFilter( type )));
+  return myCellFactory->GetIterator< SMDS_ElemIterator >( new SMDS_MeshElement::GeomFilter( type ),
+                                                          myInfo.NbElements( type ));
 }
 
 SMDS_ElemIteratorPtr SMDS_Mesh::elementEntityIterator(SMDSAbs_EntityType type) const
 {
   if ( type == SMDSEntity_Node )
   {
-    typedef ElemVecIterator<const SMDS_MeshElement*, SMDS_MeshNode*> TIterator;
-    return SMDS_ElemIteratorPtr( new TIterator(myNodes));
+    return myNodeFactory->GetIterator< SMDS_ElemIterator >( new SMDS_MeshElement::NonNullFilter );
   }
-  // naturally always sorted by ID
-  typedef ElemVecIterator
-    < const SMDS_MeshElement*, SMDS_MeshCell*, SMDS_MeshElement::EntityFilter > TIterator;
-  return SMDS_ElemIteratorPtr
-    (new TIterator(myCells, SMDS_MeshElement::EntityFilter( type )));
+  return myCellFactory->GetIterator<SMDS_ElemIterator>( new SMDS_MeshElement::EntityFilter( type ),
+                                                        myInfo.NbElements( type ));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -2972,20 +1561,18 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementEntityIterator(SMDSAbs_EntityType type) c
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator(SMDSAbs_ElementType type) const
 {
-  // naturally always sorted by ID
+  typedef SMDS_ElemIterator TIterator;
   switch ( type ) {
 
   case SMDSAbs_All:
-    return SMDS_ElemIteratorPtr (new ElemVecIterator<const SMDS_MeshElement*>(myCells));
+    return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::NonNullFilter );
 
   case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr
-      ( new ElemVecIterator<const SMDS_MeshElement*, SMDS_MeshNode*>( myNodes ));
+    return myNodeFactory->GetIterator< TIterator >( new SMDS_MeshElement::NonNullFilter );
 
   default:
-    typedef ElemVecIterator
-      < const SMDS_MeshElement*, SMDS_MeshCell*, SMDS_MeshElement::TypeFilter > TIterator;
-    return SMDS_ElemIteratorPtr (new TIterator(myCells, SMDS_MeshElement::TypeFilter( type )));
+    return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( type ),
+                                                    myInfo.NbElements( type ));
   }
   return SMDS_ElemIteratorPtr();
 }
@@ -2994,118 +1581,113 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator(SMDSAbs_ElementType type) const
 ///Return an iterator on edges of the current mesh.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_EdgeIteratorPtr SMDS_Mesh::edgesIterator(bool idInceasingOrder) const
+SMDS_EdgeIteratorPtr SMDS_Mesh::edgesIterator() const
 {
-  // naturally always sorted by ID
-  typedef ElemVecIterator
-    < const SMDS_MeshEdge*, SMDS_MeshCell*, SMDS_MeshElement::TypeFilter > TIterator;
-  return SMDS_EdgeIteratorPtr
-    (new TIterator(myCells, SMDS_MeshElement::TypeFilter( SMDSAbs_Edge )));
+  typedef SMDS_EdgeIterator TIterator;
+  return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Edge ),
+                                                  myInfo.NbEdges());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 ///Return an iterator on faces of the current mesh.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_FaceIteratorPtr SMDS_Mesh::facesIterator(bool idInceasingOrder) const
+SMDS_FaceIteratorPtr SMDS_Mesh::facesIterator() const
 {
-  // naturally always sorted by ID
-  typedef ElemVecIterator
-    < const SMDS_MeshFace*, SMDS_MeshCell*, SMDS_MeshElement::TypeFilter > TIterator;
-  return SMDS_FaceIteratorPtr
-    (new TIterator(myCells, SMDS_MeshElement::TypeFilter( SMDSAbs_Face )));
+  typedef SMDS_FaceIterator TIterator;
+  return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Face ),
+                                                  myInfo.NbFaces());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 ///Return an iterator on volumes of the current mesh.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_VolumeIteratorPtr SMDS_Mesh::volumesIterator(bool idInceasingOrder) const
+SMDS_VolumeIteratorPtr SMDS_Mesh::volumesIterator() const
+{
+  typedef SMDS_VolumeIterator TIterator;
+  return
+    myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Volume ),
+                                             myInfo.NbVolumes());
+}
+
+SMDS_NodeIteratorPtr SMDS_Mesh::shapeNodesIterator(int shapeID, size_t nbElemsToReturn) const
+{
+  return myNodeFactory->GetShapeIterator< SMDS_NodeIterator >( shapeID, nbElemsToReturn );
+}
+
+SMDS_ElemIteratorPtr SMDS_Mesh::shapeElementsIterator(int shapeID, size_t nbElemsToReturn) const
 {
-  // naturally always sorted by ID
-  typedef ElemVecIterator
-    < const SMDS_MeshVolume*, SMDS_MeshCell*, SMDS_MeshElement::TypeFilter > TIterator;
-  return SMDS_VolumeIteratorPtr
-    (new TIterator(myCells, SMDS_MeshElement::TypeFilter( SMDSAbs_Volume )));
+  return myCellFactory->GetShapeIterator< SMDS_ElemIterator >( shapeID, nbElemsToReturn );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 /// Do intersection of sets (more than 2)
 ///////////////////////////////////////////////////////////////////////////////
-static set<const SMDS_MeshElement*> * intersectionOfSets(
-        set<const SMDS_MeshElement*> vs[], int numberOfSets)
+static std::set<const SMDS_MeshElement*> *
+intersectionOfSets( std::set<const SMDS_MeshElement*> vs[], int numberOfSets )
 {
-        set<const SMDS_MeshElement*>* rsetA=new set<const SMDS_MeshElement*>(vs[0]);
-        set<const SMDS_MeshElement*>* rsetB;
+  std::set<const SMDS_MeshElement*>* rsetA = new std::set<const SMDS_MeshElement*>(vs[0]);
+  std::set<const SMDS_MeshElement*>* rsetB;
 
-        for(int i=0; i<numberOfSets-1; i++)
-        {
-                rsetB=new set<const SMDS_MeshElement*>();
-                set_intersection(
-                        rsetA->begin(), rsetA->end(),
-                        vs[i+1].begin(), vs[i+1].end(),
-                        inserter(*rsetB, rsetB->begin()));
-                delete rsetA;
-                rsetA=rsetB;
-        }
-        return rsetA;
+  for(int i=0; i<numberOfSets-1; i++)
+  {
+    rsetB = new std::set<const SMDS_MeshElement*>();
+    set_intersection(rsetA->begin(), rsetA->end(),
+                     vs[i+1].begin(), vs[i+1].end(),
+                     inserter(*rsetB, rsetB->begin()));
+    delete rsetA;
+    rsetA=rsetB;
+  }
+  return rsetA;
 }
-
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the list of finite elements owning the given element: elements
 /// containing all the nodes of the given element, for instance faces and
 /// volumes containing a given edge.
 ///////////////////////////////////////////////////////////////////////////////
-static set<const SMDS_MeshElement*> * getFinitElements(const SMDS_MeshElement * element)
+static std::set<const SMDS_MeshElement*> * getFinitElements(const SMDS_MeshElement * element)
 {
   int numberOfSets=element->NbNodes();
-  set<const SMDS_MeshElement*> *initSet = new set<const SMDS_MeshElement*>[numberOfSets];
+  std::set<const SMDS_MeshElement*> *initSet = new std::set<const SMDS_MeshElement*>[numberOfSets];
 
-  SMDS_ElemIteratorPtr itNodes=element->nodesIterator();
+  SMDS_NodeIteratorPtr itNodes = element->nodeIterator();
 
   int i = 0;
   while ( itNodes->more() )
   {
-    const SMDS_MeshElement* node = itNodes->next();
-    MYASSERT(node);
-    const SMDS_MeshNode * n=static_cast<const SMDS_MeshNode*>(node);
-    SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator();
-
-    while ( itFe->more() )
-    {
-      const SMDS_MeshElement* elem = itFe->next();
-      MYASSERT(elem);
-      initSet[i].insert(elem);
-    }
-
+    const SMDS_MeshNode *   n = itNodes->next();
+    for ( SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator(); itFe->more(); )
+      initSet[i].insert( itFe->next() );
     i++;
   }
-  set<const SMDS_MeshElement*> *retSet = intersectionOfSets( initSet, numberOfSets );
+  std::set<const SMDS_MeshElement*> *retSet = intersectionOfSets( initSet, numberOfSets );
   delete [] initSet;
   return retSet;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-/// Return the list of nodes used only by the given elements
+/// Return the std::list of nodes used only by the given elements
 ///////////////////////////////////////////////////////////////////////////////
-static set<const SMDS_MeshElement*> * getExclusiveNodes(set<const SMDS_MeshElement*>& elements)
+static
+std::set<const SMDS_MeshElement*> *getExclusiveNodes(std::set<const SMDS_MeshElement*>& elements)
 {
-  set<const SMDS_MeshElement*> * toReturn=new set<const SMDS_MeshElement*>();
-  set<const SMDS_MeshElement*>::iterator itElements=elements.begin();
+  std::set<const SMDS_MeshElement*> *           toReturn = new std::set<const SMDS_MeshElement*>();
+  std::set<const SMDS_MeshElement*>::iterator itElements = elements.begin();
 
-  while(itElements!=elements.end())
+  while( itElements != elements.end() )
   {
-    SMDS_ElemIteratorPtr itNodes = (*itElements)->nodesIterator();
+    SMDS_NodeIteratorPtr itNodes = (*itElements)->nodeIterator();
     itElements++;
 
-    while(itNodes->more())
+    while( itNodes->more() )
     {
-      const SMDS_MeshNode * n=static_cast<const SMDS_MeshNode*>(itNodes->next());
+      const SMDS_MeshNode *   n = itNodes->next();
       SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator();
-      set<const SMDS_MeshElement*> s;
-      while(itFe->more())
-        s.insert(itFe->next());
-      if(s==elements) toReturn->insert(n);
+      std::set<const SMDS_MeshElement*> s;
+      while ( itFe->more() )
+        s.insert( itFe->next() );
+      if ( s == elements ) toReturn->insert(n);
     }
   }
   return toReturn;
@@ -3117,14 +1699,14 @@ static set<const SMDS_MeshElement*> * getExclusiveNodes(set<const SMDS_MeshEleme
 ///@param element The element were to search matching children
 ///@param nodes The nodes that the children must have to be selected
 ///////////////////////////////////////////////////////////////////////////////
-void SMDS_Mesh::addChildrenWithNodes(set<const SMDS_MeshElement*>& setOfChildren,
-                                     const SMDS_MeshElement *      element,
-                                     set<const SMDS_MeshElement*>& nodes)
+void SMDS_Mesh::addChildrenWithNodes(std::set<const SMDS_MeshElement*>& setOfChildren,
+                                     const SMDS_MeshElement *           element,
+                                     std::set<const SMDS_MeshElement*>& nodes)
 {
   switch(element->GetType())
   {
   case SMDSAbs_Node:
-    MESSAGE("Internal Error: This should not happen");
+    throw SALOME_Exception("Internal Error: This should not happen");
     break;
   case SMDSAbs_0DElement:
   case SMDSAbs_Ball:
@@ -3156,28 +1738,8 @@ void SMDS_Mesh::addChildrenWithNodes(set<const SMDS_MeshElement*>& setOfChildren
         break;
       }
     }
-    if(hasConstructionEdges())
-    {
-      SMDS_ElemIteratorPtr ite=element->edgesIterator();
-      while(ite->more())
-        addChildrenWithNodes(setOfChildren, ite->next(), nodes);
-    }
   } break;
   case SMDSAbs_Volume:
-  {
-    if(hasConstructionFaces())
-    {
-      SMDS_ElemIteratorPtr ite=element->facesIterator();
-      while(ite->more())
-        addChildrenWithNodes(setOfChildren, ite->next(), nodes);
-    }
-    else if(hasConstructionEdges())
-    {
-      SMDS_ElemIteratorPtr ite=element->edgesIterator();
-      while(ite->more())
-        addChildrenWithNodes(setOfChildren, ite->next(), nodes);
-    }
-  }
   case SMDSAbs_NbElementTypes:
   case SMDSAbs_All: break;
   }
@@ -3188,10 +1750,10 @@ void SMDS_Mesh::addChildrenWithNodes(set<const SMDS_MeshElement*>& setOfChildren
 ///@param removenodes if true remaining nodes will be removed
 ///////////////////////////////////////////////////////////////////////////////
 void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem,
-                              const bool removenodes)
+                              const bool               removenodes)
 {
-  list<const SMDS_MeshElement *> removedElems;
-  list<const SMDS_MeshElement *> removedNodes;
+  std::vector<const SMDS_MeshElement *> removedElems;
+  std::vector<const SMDS_MeshElement *> removedNodes;
   RemoveElement( elem, removedElems, removedNodes, removenodes );
 }
 
@@ -3201,169 +1763,92 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem,
 ///@param removedNodes to be filled with all removed nodes
 ///@param removenodes if true remaining nodes will be removed
 ///////////////////////////////////////////////////////////////////////////////
-void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *        elem,
-                              list<const SMDS_MeshElement *>& removedElems,
-                              list<const SMDS_MeshElement *>& removedNodes,
-                              bool                            removenodes)
+void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *               elem,
+                              std::vector<const SMDS_MeshElement *>& removedElems,
+                              std::vector<const SMDS_MeshElement *>& removedNodes,
+                              bool                                   removenodes)
 {
   // get finite elements built on elem
-  set<const SMDS_MeshElement*> * s1;
+  std::set<const SMDS_MeshElement*> * s1;
   if (    (elem->GetType() == SMDSAbs_0DElement)
-      || ((elem->GetType() == SMDSAbs_Edge) && !hasConstructionEdges())
-      || ((elem->GetType() == SMDSAbs_Face) && !hasConstructionFaces())
-      ||  (elem->GetType() == SMDSAbs_Volume) )
-    {
-      s1 = new set<const SMDS_MeshElement*> ();
-      s1->insert(elem);
-    }
+          ||  (elem->GetType() == SMDSAbs_Ball)
+          ||  (elem->GetType() == SMDSAbs_Edge)
+          ||  (elem->GetType() == SMDSAbs_Face)
+          ||  (elem->GetType() == SMDSAbs_Volume) )
+  {
+    s1 = new std::set<const SMDS_MeshElement*> ();
+    s1->insert(elem);
+  }
   else
     s1 = getFinitElements(elem);
 
   // get exclusive nodes (which would become free afterwards)
-  set<const SMDS_MeshElement*> * s2;
+  std::set<const SMDS_MeshElement*> * s2;
   if (elem->GetType() == SMDSAbs_Node) // a node is removed
-    {
-      // do not remove nodes except elem
-      s2 = new set<const SMDS_MeshElement*> ();
-      s2->insert(elem);
-      removenodes = true;
-    }
+  {
+    // do not remove nodes except elem
+    s2 = new std::set<const SMDS_MeshElement*> ();
+    s2->insert(elem);
+    removenodes = true;
+  }
   else
     s2 = getExclusiveNodes(*s1);
 
   // form the set of finite and construction elements to remove
-  set<const SMDS_MeshElement*> s3;
-  set<const SMDS_MeshElement*>::iterator it = s1->begin();
+  std::set<const SMDS_MeshElement*> s3;
+  std::set<const SMDS_MeshElement*>::iterator it = s1->begin();
   while (it != s1->end())
-    {
-      addChildrenWithNodes(s3, *it, *s2);
-      s3.insert(*it);
-      it++;
-    }
+  {
+    addChildrenWithNodes(s3, *it, *s2);
+    s3.insert(*it);
+    it++;
+  }
   if (elem->GetType() != SMDSAbs_Node)
     s3.insert(elem);
 
   // remove finite and construction elements
-  it = s3.begin();
-  while (it != s3.end())
+  for( it = s3.begin();it != s3.end(); ++it )
+  {
+    // Remove element from <InverseElements> of its nodes
+    SMDS_NodeIteratorPtr itn = (*it)->nodeIterator();
+    while (itn->more())
     {
-      // Remove element from <InverseElements> of its nodes
-      SMDS_ElemIteratorPtr itn = (*it)->nodesIterator();
-      while (itn->more())
-      {
-        SMDS_MeshNode * n = static_cast<SMDS_MeshNode *> (const_cast<SMDS_MeshElement *> (itn->next()));
-        n->RemoveInverseElement((*it));
-      }
-      int IdToRemove = (*it)->GetID();
-      int vtkid = (*it)->getVtkId();
-      switch ((*it)->GetType())
-      {
-        case SMDSAbs_Node:
-          MYASSERT("Internal Error: This should not happen");
-          break;
-        case SMDSAbs_0DElement:
-          if (IdToRemove >= 0)
-            {
-              myCells[IdToRemove] = 0; // -PR- ici ou dans myElementIDFactory->ReleaseID ?
-              myInfo.remove(*it);
-            }
-          removedElems.push_back((*it));
-          myElementIDFactory->ReleaseID(IdToRemove, vtkid);
-          delete (*it);
-          break;
-        case SMDSAbs_Edge:
-          if (IdToRemove >= 0)
-            {
-              myCells[IdToRemove] = 0;
-              myInfo.RemoveEdge(*it);
-            }
-          removedElems.push_back((*it));
-          myElementIDFactory->ReleaseID(IdToRemove, vtkid);
-          if (const SMDS_VtkEdge* vtkElem = dynamic_cast<const SMDS_VtkEdge*>(*it))
-            myEdgePool->destroy((SMDS_VtkEdge*) vtkElem);
-          else {
-            ((SMDS_MeshElement*) *it)->init( 0, -1, -1 ); // avoid reuse
-            delete (*it);
-          }
-          break;
-        case SMDSAbs_Face:
-          if (IdToRemove >= 0)
-            {
-              myCells[IdToRemove] = 0;
-              myInfo.RemoveFace(*it);
-            }
-          removedElems.push_back((*it));
-          myElementIDFactory->ReleaseID(IdToRemove, vtkid);
-          if (const SMDS_VtkFace* vtkElem = dynamic_cast<const SMDS_VtkFace*>(*it))
-            myFacePool->destroy((SMDS_VtkFace*) vtkElem);
-          else {
-            ((SMDS_MeshElement*) *it)->init( 0, -1, -1 ); // avoid reuse
-            delete (*it);
-          }
-          break;
-        case SMDSAbs_Volume:
-          if (IdToRemove >= 0)
-            {
-              myCells[IdToRemove] = 0;
-              myInfo.RemoveVolume(*it);
-            }
-          removedElems.push_back((*it));
-          myElementIDFactory->ReleaseID(IdToRemove, vtkid);
-          if (const SMDS_VtkVolume* vtkElem = dynamic_cast<const SMDS_VtkVolume*>(*it))
-            myVolumePool->destroy((SMDS_VtkVolume*) vtkElem);
-          else {
-            ((SMDS_MeshElement*) *it)->init( 0, -1, -1 ); // avoid reuse
-            delete (*it);
-          }
-          break;
-        case SMDSAbs_Ball:
-          if (IdToRemove >= 0)
-            {
-              myCells[IdToRemove] = 0;
-              myInfo.remove(*it);
-            }
-          removedElems.push_back((*it));
-          myElementIDFactory->ReleaseID(IdToRemove, vtkid);
-          if (const SMDS_BallElement* vtkElem = dynamic_cast<const SMDS_BallElement*>(*it))
-            myBallPool->destroy(const_cast<SMDS_BallElement*>( vtkElem ));
-          else {
-            ((SMDS_MeshElement*) *it)->init( 0, -1, -1 ); // avoid reuse
-            delete (*it);
-          }
-          break;
+      SMDS_MeshNode * n = const_cast<SMDS_MeshNode *> (itn->next());
+      n->RemoveInverseElement((*it));
+    }
 
-        case SMDSAbs_All: // avoid compilation warning
-        case SMDSAbs_NbElementTypes: break;
-      }
-      if (vtkid >= 0)
-      {
-        this->myGrid->GetCellTypesArray()->SetValue(vtkid, VTK_EMPTY_CELL);
-      }
-      it++;
+    int vtkid = (*it)->GetVtkID();
+
+    switch ((*it)->GetType()) {
+    case SMDSAbs_Node:
+      throw SALOME_Exception(LOCALIZED("Internal Error: This should not happen"));
+      break;
+    case SMDSAbs_Edge:      myInfo.RemoveEdge(*it);   break;
+    case SMDSAbs_Face:      myInfo.RemoveFace(*it);   break;
+    case SMDSAbs_Volume:    myInfo.RemoveVolume(*it); break;
+    case SMDSAbs_Ball:      myInfo.myNbBalls--;       break;
+    case SMDSAbs_0DElement: myInfo.myNb0DElements--;  break;
+    case SMDSAbs_All: // avoid compilation warning
+    case SMDSAbs_NbElementTypes: break;
+    }
+    removedElems.push_back( *it);
+
+    myCellFactory->Free( static_cast< const SMDS_MeshCell*>( *it ));
+
+    if (vtkid >= 0)
+    {
+      this->myGrid->GetCellTypesArray()->SetValue(vtkid, VTK_EMPTY_CELL);
     }
+  }
 
   // remove exclusive (free) nodes
   if (removenodes)
   {
-    it = s2->begin();
-    while (it != s2->end())
+    for ( it = s2->begin(); it != s2->end(); ++it )
     {
-      int IdToRemove = (*it)->GetID();
-      if (IdToRemove >= 0)
-      {
-        myNodes[IdToRemove] = 0;
-        myInfo.myNbNodes--;
-      }
-      myNodeIDFactory->ReleaseID((*it)->GetID(), (*it)->getVtkId());
+      myInfo.myNbNodes--;
+      myNodeFactory->Free( (*it) );
       removedNodes.push_back((*it));
-      if (const SMDS_MeshNode* vtkElem = dynamic_cast<const SMDS_MeshNode*>(*it))
-      {
-        ((SMDS_MeshNode*)vtkElem)->SetPosition(SMDS_SpacePosition::originSpacePosition());
-        myNodePool->destroy((SMDS_MeshNode*) vtkElem);
-      }
-      else
-        delete (*it);
-      it++;
     }
   }
 
@@ -3377,95 +1862,60 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *        elem,
 ///////////////////////////////////////////////////////////////////////////////
 void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
 {
-  int elemId = elem->GetID();
-  int  vtkId = elem->getVtkId();
+  const int           vtkId = elem->GetVtkID();
   SMDSAbs_ElementType aType = elem->GetType();
-  SMDS_MeshElement*  todest = (SMDS_MeshElement*)(elem);
   if ( aType == SMDSAbs_Node )
   {
     // only free node can be removed by this method
-    const SMDS_MeshNode* n = static_cast<SMDS_MeshNode*>(todest);
+    const SMDS_MeshNode* n = static_cast<const SMDS_MeshNode*>( elem );
     if ( n->NbInverseElements() == 0 ) { // free node
-      myNodes[elemId] = 0;
       myInfo.myNbNodes--;
-      ((SMDS_MeshNode*) n)->SetPosition(SMDS_SpacePosition::originSpacePosition());
-      ((SMDS_MeshNode*) n)->SMDS_MeshElement::init( 0, -1, -1 ); // avoid reuse
-      myNodePool->destroy(static_cast<SMDS_MeshNode*>(todest));
-      myNodeIDFactory->ReleaseID(elemId, vtkId);
+      myNodeFactory->Free( n );
+    }
+    else
+    {
+      throw SALOME_Exception( LOCALIZED( "RemoveFreeElement: not a free node" ));
     }
   }
   else
   {
-    if (hasConstructionEdges() || hasConstructionFaces())
-      // this methods is only for meshes without descendants
-      return;
-
     // Remove element from <InverseElements> of its nodes
-    SMDS_ElemIteratorPtr itn = elem->nodesIterator();
+    SMDS_NodeIteratorPtr itn = elem->nodeIterator();
     while (itn->more()) {
-      SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
-        (const_cast<SMDS_MeshElement *>(itn->next()));
+      SMDS_MeshNode * n = const_cast<SMDS_MeshNode *>(itn->next());
       n->RemoveInverseElement(elem);
     }
 
     // in meshes without descendants elements are always free
     switch (aType) {
-    case SMDSAbs_0DElement:
-      myCells[elemId] = 0;
-      myInfo.remove(elem);
-      delete elem;
-      elem = 0;
-      break;
-    case SMDSAbs_Edge:
-      myCells[elemId] = 0;
-      myInfo.RemoveEdge(elem);
-      myEdgePool->destroy(static_cast<SMDS_VtkEdge*>(todest));
-      break;
-    case SMDSAbs_Face:
-      myCells[elemId] = 0;
-      myInfo.RemoveFace(elem);
-      myFacePool->destroy(static_cast<SMDS_VtkFace*>(todest));
-      break;
-    case SMDSAbs_Volume:
-      myCells[elemId] = 0;
-      myInfo.RemoveVolume(elem);
-      myVolumePool->destroy(static_cast<SMDS_VtkVolume*>(todest));
-      break;
-    case SMDSAbs_Ball:
-      myCells[elemId] = 0;
-      myInfo.remove(elem);
-      myBallPool->destroy(static_cast<SMDS_BallElement*>(todest));
-      break;
-    default:
-      break;
+    case SMDSAbs_0DElement: myInfo.remove(elem);       break;
+    case SMDSAbs_Edge:      myInfo.RemoveEdge(elem);   break;
+    case SMDSAbs_Face:      myInfo.RemoveFace(elem);   break;
+    case SMDSAbs_Volume:    myInfo.RemoveVolume(elem); break;
+    case SMDSAbs_Ball:      myInfo.remove(elem);       break;
+    default: break;
     }
-    myElementIDFactory->ReleaseID(elemId, vtkId);
+    myCellFactory->Free( elem );
 
     this->myGrid->GetCellTypesArray()->SetValue(vtkId, VTK_EMPTY_CELL);
-    // --- to do: keep vtkid in a list of reusable cells
-
-    if ( elem )
-      ((SMDS_MeshElement*) elem)->init( 0, -1, -1 ); // avoid reuse
   }
 }
 
+//=======================================================================
 /*!
  * Checks if the element is present in mesh.
- * Useful to determine dead pointers.
  */
+//=======================================================================
+
 bool SMDS_Mesh::Contains (const SMDS_MeshElement* elem) const
 {
-  // we should not rely on validity of *elem, so iterate on containers
-  // of all types in the hope of finding <elem> somewhere there
-  SMDS_NodeIteratorPtr itn = nodesIterator();
-  while (itn->more())
-    if (elem == itn->next())
-      return true;
-  SMDS_ElemIteratorPtr ite = elementsIterator();
-  while (ite->more())
-    if (elem == ite->next())
-      return true;
-  return false;
+  if ( !elem || elem->IsNull() )
+    return false;
+
+  if ( elem->GetType() == SMDSAbs_Node )
+    return ( elem == myNodeFactory->FindElement( elem->GetID() ));
+
+  return ( elem == myCellFactory->FindElement( elem->GetID() ));
 }
 
 //=======================================================================
@@ -3475,7 +1925,7 @@ bool SMDS_Mesh::Contains (const SMDS_MeshElement* elem) const
 
 int SMDS_Mesh::MaxNodeID() const
 {
-  return myNodeIDFactory->GetMaxID();
+  return myNodeFactory->GetMaxID();
 }
 
 //=======================================================================
@@ -3485,7 +1935,7 @@ int SMDS_Mesh::MaxNodeID() const
 
 int SMDS_Mesh::MinNodeID() const
 {
-  return myNodeIDFactory->GetMinID();
+  return myNodeFactory->GetMinID();
 }
 
 //=======================================================================
@@ -3495,7 +1945,7 @@ int SMDS_Mesh::MinNodeID() const
 
 int SMDS_Mesh::MaxElementID() const
 {
-  return myElementIDFactory->GetMaxID();
+  return myCellFactory->GetMaxID();
 }
 
 //=======================================================================
@@ -3505,7 +1955,7 @@ int SMDS_Mesh::MaxElementID() const
 
 int SMDS_Mesh::MinElementID() const
 {
-  return myElementIDFactory->GetMinID();
+  return myCellFactory->GetMinID();
 }
 
 //=======================================================================
@@ -3513,39 +1963,12 @@ int SMDS_Mesh::MinElementID() const
 //purpose  : Renumber all nodes or elements.
 //=======================================================================
 
-void SMDS_Mesh::Renumber (const bool isNodes, const int  startID, const int  deltaID)
-{
-  if ( deltaID == 0 )
-    return;
-
-  SMDS_MeshNodeIDFactory * idFactory =
-    isNodes ? myNodeIDFactory : myElementIDFactory;
+// void SMDS_Mesh::Renumber (const bool isNodes, const int  startID, const int  deltaID)
+// {
+//   if ( deltaID == 0 )
+//     return;
 
-  // get existing elements in the order of ID increasing
-  map<int,SMDS_MeshElement*> elemMap;
-  SMDS_ElemIteratorPtr idElemIt = idFactory->elementsIterator();
-  while ( idElemIt->more() ) {
-    SMDS_MeshElement* elem = const_cast<SMDS_MeshElement*>(idElemIt->next());
-    int id = elem->GetID();
-    elemMap.insert(map<int,SMDS_MeshElement*>::value_type(id, elem));
-  }
-  // release their ids
-  map<int,SMDS_MeshElement*>::iterator elemIt = elemMap.begin();
-  idFactory->Clear();
-//   for ( ; elemIt != elemMap.end(); elemIt++ )
-//   {
-//     int id = (*elemIt).first;
-//     idFactory->ReleaseID( id );
-//   }
-  // set new IDs
-  int ID = startID;
-  elemIt = elemMap.begin();
-  for ( ; elemIt != elemMap.end(); elemIt++ )
-  {
-    idFactory->BindID( ID, (*elemIt).second );
-    ID += deltaID;
-  }
-}
+// }
 
 //=======================================================================
 //function : GetElementType
@@ -3554,19 +1977,13 @@ void SMDS_Mesh::Renumber (const bool isNodes, const int  startID, const int  del
 
 SMDSAbs_ElementType SMDS_Mesh::GetElementType( const int id, const bool iselem ) const
 {
-  SMDS_MeshElement* elem = 0;
+  const SMDS_MeshElement* elem = 0;
   if( iselem )
-    elem = myElementIDFactory->MeshElement( id );
+    elem = myCellFactory->FindElement( id );
   else
-    elem = myNodeIDFactory->MeshElement( id );
+    elem = myNodeFactory->FindElement( id );
 
-  if( !elem )
-  {
-    //throw SALOME_Exception(LOCALIZED ("this element isn't exist"));
-    return SMDSAbs_All;
-  }
-  else
-    return elem->GetType();
+  return elem ? elem->GetType() : SMDSAbs_All;
 }
 
 
@@ -3585,11 +2002,10 @@ SMDSAbs_ElementType SMDS_Mesh::GetElementType( const int id, const bool iselem )
 //=======================================================================
 SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int n1, int n2, int n12, int ID)
 {
-  return SMDS_Mesh::AddEdgeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     ID);
+  return SMDS_Mesh::AddEdgeWithID (myNodeFactory->FindNode(n1),
+                                   myNodeFactory->FindNode(n2),
+                                   myNodeFactory->FindNode(n12),
+                                   ID);
 }
 
 //=======================================================================
@@ -3600,7 +2016,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode* n1,
                                   const SMDS_MeshNode* n2,
                                   const SMDS_MeshNode* n12)
 {
-  return SMDS_Mesh::AddEdgeWithID(n1, n2, n12, myElementIDFactory->GetFreeID());
+  return SMDS_Mesh::AddEdgeWithID(n1, n2, n12, myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -3610,36 +2026,17 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode* n1,
 SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n2,
                                         const SMDS_MeshNode * n12,
-                                        int ID)
+                                        int                   ID)
 {
   if ( !n1 || !n2 || !n12 ) return 0;
 
-  // --- retrieve nodes ID
-  myNodeIds.resize(3);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n2->getVtkId();
-  myNodeIds[2] = n12->getVtkId();
-
-  SMDS_MeshEdge * edge = 0;
-  SMDS_VtkEdge *edgevtk = myEdgePool->getNew();
-  edgevtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,edgevtk))
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL);
-    myEdgePool->destroy(edgevtk);
-    return 0;
+    cell->init( SMDSEntity_Quad_Edge, /*nbNodes=*/3, n1, n2, n12 );
+    myInfo.myNbQuadEdges++;
+    return static_cast<SMDS_MeshEdge*>( cell );
   }
-  edge = edgevtk;
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = edge;
-  myInfo.myNbQuadEdges++;
-
-  //  if (!registerElement(ID, edge)) {
-  //        RemoveElement(edge, false);
-  //        edge = NULL;
-  //  }
-  return edge;
-
+  return 0;
 }
 
 
@@ -3655,7 +2052,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * n31)
 {
   return SMDS_Mesh::AddFaceWithID(n1,n2,n3,n12,n23,n31,
-                                  myElementIDFactory->GetFreeID());
+                                  myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -3665,14 +2062,13 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
                                         int n12,int n23,int n31, int ID)
 {
-  return SMDS_Mesh::AddFaceWithID
-    ((SMDS_MeshNode *)myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n31),
-     ID);
+  return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
+                                   myNodeFactory->FindNode(n2) ,
+                                   myNodeFactory->FindNode(n3) ,
+                                   myNodeFactory->FindNode(n12),
+                                   myNodeFactory->FindNode(n23),
+                                   myNodeFactory->FindNode(n31),
+                                   ID);
 }
 
 //=======================================================================
@@ -3687,42 +2083,16 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n31,
                                         int ID)
 {
-  if ( !n1 || !n2 || !n3 || !n12 || !n23 || !n31) return 0;
-  if(hasConstructionEdges()) {
-    // creation quadratic edges - not implemented
-    return 0;
-  }
-  else
+  if ( !n1 || !n2 || !n3 || !n12 || !n23 || !n31 ) return 0;
+  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    // --- retrieve nodes ID
-    myNodeIds.resize(6);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n2->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n12->getVtkId();
-    myNodeIds[4] = n23->getVtkId();
-    myNodeIds[5] = n31->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+    cell->init( SMDSEntity_Quad_Triangle, /*nbNodes=*/6, n1, n2, n3, n12, n23, n31 );
     myInfo.myNbQuadTriangles++;
-
-    //    if (!registerElement(ID, face)) {
-    //      RemoveElement(face, false);
-    //      face = NULL;
-    //    }
-    return face;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
+  return 0;
 }
 
 
@@ -3739,7 +2109,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * nCenter)
 {
   return SMDS_Mesh::AddFaceWithID(n1,n2,n3,n12,n23,n31,nCenter,
-                                  myElementIDFactory->GetFreeID());
+                                  myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -3749,15 +2119,14 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
                                         int n12,int n23,int n31, int nCenter, int ID)
 {
-  return SMDS_Mesh::AddFaceWithID
-    ((SMDS_MeshNode *)myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n31),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nCenter),
-     ID);
+  return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
+                                   myNodeFactory->FindNode(n2) ,
+                                   myNodeFactory->FindNode(n3) ,
+                                   myNodeFactory->FindNode(n12),
+                                   myNodeFactory->FindNode(n23),
+                                   myNodeFactory->FindNode(n31),
+                                   myNodeFactory->FindNode(nCenter),
+                                   ID);
 }
 
 //=======================================================================
@@ -3774,42 +2143,15 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         int ID)
 {
   if ( !n1 || !n2 || !n3 || !n12 || !n23 || !n31 || !nCenter) return 0;
-  if(hasConstructionEdges()) {
-    // creation quadratic edges - not implemented
-    return 0;
-  }
-  else
+  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    // --- retrieve nodes ID
-    myNodeIds.resize(7);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n2->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n12->getVtkId();
-    myNodeIds[4] = n23->getVtkId();
-    myNodeIds[5] = n31->getVtkId();
-    myNodeIds[6] = nCenter->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+    cell->init( SMDSEntity_BiQuad_Triangle, /*nbNodes=*/7, n1, n2, n3, n12, n23, n31, nCenter );
     myInfo.myNbBiQuadTriangles++;
-
-    //    if (!registerElement(ID, face)) {
-    //      RemoveElement(face, false);
-    //      face = NULL;
-    //    }
-    return face;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
+  return 0;
 }
 
 
@@ -3827,7 +2169,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * n41)
 {
   return SMDS_Mesh::AddFaceWithID(n1,n2,n3,n4,n12,n23,n34,n41,
-                                  myElementIDFactory->GetFreeID());
+                                  myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -3837,16 +2179,15 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
                                         int n12,int n23,int n34,int n41, int ID)
 {
-  return SMDS_Mesh::AddFaceWithID
-    ((SMDS_MeshNode *)myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n34),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n41),
-     ID);
+  return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
+                                   myNodeFactory->FindNode(n2) ,
+                                   myNodeFactory->FindNode(n3) ,
+                                   myNodeFactory->FindNode(n4) ,
+                                   myNodeFactory->FindNode(n12),
+                                   myNodeFactory->FindNode(n23),
+                                   myNodeFactory->FindNode(n34),
+                                   myNodeFactory->FindNode(n41),
+                                   ID);
 }
 
 //=======================================================================
@@ -3864,43 +2205,15 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         int ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n34 || !n41) return 0;
-  if(hasConstructionEdges()) {
-    // creation quadratic edges - not implemented
-    return 0;
-  }
-  else
+  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    // --- retrieve nodes ID
-    myNodeIds.resize(8);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n2->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n4->getVtkId();
-    myNodeIds[4] = n12->getVtkId();
-    myNodeIds[5] = n23->getVtkId();
-    myNodeIds[6] = n34->getVtkId();
-    myNodeIds[7] = n41->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+    cell->init( SMDSEntity_Quad_Quadrangle, /*nbNodes=*/8, n1, n2, n3, n4, n12, n23, n34, n41 );
     myInfo.myNbQuadQuadrangles++;
-
-    //    if (!registerElement(ID, face)) {
-    //      RemoveElement(face, false);
-    //      face = NULL;
-    //    }
-    return face;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
+  return 0;
 }
 
 //=======================================================================
@@ -3918,7 +2231,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                   const SMDS_MeshNode * nCenter)
 {
   return SMDS_Mesh::AddFaceWithID(n1,n2,n3,n4,n12,n23,n34,n41,nCenter,
-                                  myElementIDFactory->GetFreeID());
+                                  myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -3928,17 +2241,16 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
                                         int n12,int n23,int n34,int n41, int nCenter, int ID)
 {
-  return SMDS_Mesh::AddFaceWithID
-    ((SMDS_MeshNode *)myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n34),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(n41),
-     (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nCenter),
-     ID);
+  return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
+                                   myNodeFactory->FindNode(n2) ,
+                                   myNodeFactory->FindNode(n3) ,
+                                   myNodeFactory->FindNode(n4) ,
+                                   myNodeFactory->FindNode(n12),
+                                   myNodeFactory->FindNode(n23),
+                                   myNodeFactory->FindNode(n34),
+                                   myNodeFactory->FindNode(n41),
+                                   myNodeFactory->FindNode(nCenter),
+                                   ID);
 }
 
 //=======================================================================
@@ -3957,44 +2269,16 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         int ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n34 || !n41 || !nCenter) return 0;
-  if(hasConstructionEdges()) {
-    // creation quadratic edges - not implemented
-    return 0;
-  }
-  else
+  if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    // --- retrieve nodes ID
-    myNodeIds.resize(9);
-    myNodeIds[0] = n1->getVtkId();
-    myNodeIds[1] = n2->getVtkId();
-    myNodeIds[2] = n3->getVtkId();
-    myNodeIds[3] = n4->getVtkId();
-    myNodeIds[4] = n12->getVtkId();
-    myNodeIds[5] = n23->getVtkId();
-    myNodeIds[6] = n34->getVtkId();
-    myNodeIds[7] = n41->getVtkId();
-    myNodeIds[8] = nCenter->getVtkId();
-
-    SMDS_MeshFace * face = 0;
-    SMDS_VtkFace *facevtk = myFacePool->getNew();
-    facevtk->init(myNodeIds, this);
-    if (!this->registerElement(ID,facevtk))
-    {
-      this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL);
-      myFacePool->destroy(facevtk);
-      return 0;
-    }
-    face = facevtk;
-    adjustmyCellsCapacity(ID);
-    myCells[ID] = face;
+    cell->init( SMDSEntity_BiQuad_Quadrangle,
+                /*nbNodes=*/9, n1, n2, n3, n4, n12, n23, n34, n41, nCenter );
     myInfo.myNbBiQuadQuadrangles++;
-
-    //    if (!registerElement(ID, face)) {
-    //      RemoveElement(face, false);
-    //      face = NULL;
-    //    }
-    return face;
+    return static_cast<SMDS_MeshFace*>( cell );
   }
+  return 0;
 }
 
 
@@ -4013,11 +2297,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n24,
                                       const SMDS_MeshNode * n34)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n12, n23,
-                                                   n31, n14, n24, n34, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n12, n23,
+                                    n31, n14, n24, n34, myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4028,18 +2309,17 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
                                             int n12,int n23,int n31,
                                             int n14,int n24,int n34, int ID)
 {
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n31),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n14),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n24),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n34),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
+                                     myNodeFactory->FindNode(n2) ,
+                                     myNodeFactory->FindNode(n3) ,
+                                     myNodeFactory->FindNode(n4) ,
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n31),
+                                     myNodeFactory->FindNode(n14),
+                                     myNodeFactory->FindNode(n24),
+                                     myNodeFactory->FindNode(n34),
+                                     ID);
 }
 
 //=======================================================================
@@ -4060,42 +2340,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n31 || !n14 || !n24 || !n34)
     return 0;
-  if(hasConstructionFaces()) {
-    // creation quadratic faces - not implemented
-    return 0;
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(10);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n3->getVtkId();
-  myNodeIds[2] = n2->getVtkId();
-  myNodeIds[3] = n4->getVtkId();
-
-  myNodeIds[4] = n31->getVtkId();
-  myNodeIds[5] = n23->getVtkId();
-  myNodeIds[6] = n12->getVtkId();
-
-  myNodeIds[7] = n14->getVtkId();
-  myNodeIds[8] = n34->getVtkId();
-  myNodeIds[9] = n24->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_Quad_Tetra,
+                /*nbNodes=*/10, n1, n2, n3, n4, n12, n23, n31, n14, n24, n34 );
+    myInfo.myNbQuadTetras++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbQuadTetras++;
-
-  //  if (!registerElement(ID, volvtk)) {
-  //    RemoveElement(volvtk, false);
-  //    volvtk = NULL;
-  //  }
-  return volvtk;
+  return 0;
 }
 
 
@@ -4117,12 +2371,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n35,
                                       const SMDS_MeshNode * n45)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v =
-    SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n12, n23, n34, n41,
-                               n15, n25, n35, n45, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n12, n23, n34, n41,
+                                    n15, n25, n35, n45, myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4133,21 +2383,20 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int
                                             int n12,int n23,int n34,int n41,
                                             int n15,int n25,int n35,int n45, int ID)
 {
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n34),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n41),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n15),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n25),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n35),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n45),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
+                                     myNodeFactory->FindNode(n2) ,
+                                     myNodeFactory->FindNode(n3) ,
+                                     myNodeFactory->FindNode(n4) ,
+                                     myNodeFactory->FindNode(n5) ,
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n34),
+                                     myNodeFactory->FindNode(n41),
+                                     myNodeFactory->FindNode(n15),
+                                     myNodeFactory->FindNode(n25),
+                                     myNodeFactory->FindNode(n35),
+                                     myNodeFactory->FindNode(n45),
+                                     ID);
 }
 
 //=======================================================================
@@ -4172,45 +2421,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n12 || !n23 ||
       !n34 || !n41 || !n15 || !n25 || !n35 || !n45)
     return 0;
-  if(hasConstructionFaces()) {
-    // creation quadratic faces - not implemented
-    return 0;
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(13);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n4->getVtkId();
-  myNodeIds[2] = n3->getVtkId();
-  myNodeIds[3] = n2->getVtkId();
-  myNodeIds[4] = n5->getVtkId();
-
-  myNodeIds[5] = n41->getVtkId();
-  myNodeIds[6] = n34->getVtkId();
-  myNodeIds[7] = n23->getVtkId();
-  myNodeIds[8] = n12->getVtkId();
-
-  myNodeIds[9] = n15->getVtkId();
-  myNodeIds[10] = n45->getVtkId();
-  myNodeIds[11] = n35->getVtkId();
-  myNodeIds[12] = n25->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_Quad_Pyramid,
+                /*nbNodes=*/13, n1, n2, n3, n4, n5, n12, n23, n34, n41, n15, n25, n35, n45);
+    myInfo.myNbQuadPyramids++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbQuadPyramids++;
-
-  //  if (!registerElement(ID, volvtk)) {
-  //    RemoveElement(volvtk, false);
-  //    volvtk = NULL;
-  //  }
-  return volvtk;
+  return 0;
 }
 
 
@@ -4234,12 +2454,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n25,
                                       const SMDS_MeshNode * n36)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v =
-    SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n12, n23, n31,
-                               n45, n56, n64, n14, n25, n36, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n12, n23, n31,
+                                    n45, n56, n64, n14, n25, n36, myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4252,23 +2468,22 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
                                             int n45,int n56,int n64,
                                             int n14,int n25,int n36, int ID)
 {
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n6) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n31),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n45),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n56),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n64),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n14),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n25),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n36),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
+                                     myNodeFactory->FindNode(n2) ,
+                                     myNodeFactory->FindNode(n3) ,
+                                     myNodeFactory->FindNode(n4) ,
+                                     myNodeFactory->FindNode(n5) ,
+                                     myNodeFactory->FindNode(n6) ,
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n31),
+                                     myNodeFactory->FindNode(n45),
+                                     myNodeFactory->FindNode(n56),
+                                     myNodeFactory->FindNode(n64),
+                                     myNodeFactory->FindNode(n14),
+                                     myNodeFactory->FindNode(n25),
+                                     myNodeFactory->FindNode(n36),
+                                     ID);
 }
 
 //=======================================================================
@@ -4295,49 +2510,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n12 || !n23 ||
       !n31 || !n45 || !n56 || !n64 || !n14 || !n25 || !n36)
     return 0;
-  if(hasConstructionFaces()) {
-    // creation quadratic faces - not implemented
-    return 0;
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(15);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n2->getVtkId();
-  myNodeIds[2] = n3->getVtkId();
-
-  myNodeIds[3] = n4->getVtkId();
-  myNodeIds[4] = n5->getVtkId();
-  myNodeIds[5] = n6->getVtkId();
-
-  myNodeIds[6] = n12->getVtkId();
-  myNodeIds[7] = n23->getVtkId();
-  myNodeIds[8] = n31->getVtkId();
-
-  myNodeIds[9] = n45->getVtkId();
-  myNodeIds[10] = n56->getVtkId();
-  myNodeIds[11] = n64->getVtkId();
-
-  myNodeIds[12] = n14->getVtkId();
-  myNodeIds[13] = n25->getVtkId();
-  myNodeIds[14] = n36->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_Quad_Penta, /*nbNodes=*/15,
+                n1, n2, n3, n4, n5, n6, n12, n23, n31, n45, n56, n64, n14, n25, n36 );
+    myInfo.myNbQuadPrisms++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbQuadPrisms++;
-
-  //  if (!registerElement(ID, volvtk)) {
-  //    RemoveElement(volvtk, false);
-  //    volvtk = NULL;
-  //  }
-  return volvtk;
+  return 0;
 }
 
 //=======================================================================
@@ -4363,13 +2545,9 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n2356,
                                       const SMDS_MeshNode * n1346)
 {
-  //MESSAGE("AddVolume penta18");
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v =
-    SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n12, n23, n31,
-                               n45, n56, n64, n14, n25, n36, n1245, n2356, n1346, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n12, n23, n31,
+                                    n45, n56, n64, n14, n25, n36, n1245, n2356, n1346,
+                                    myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4383,27 +2561,25 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
                                             int n14,int n25,int n36,
                                             int n1245, int n2356, int n1346, int ID)
 {
-  //MESSAGE("AddVolumeWithID penta18 " << ID);
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n6) ,
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n31),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n45),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n56),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n64),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n14),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n25),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n36),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1245),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2356),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1346),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
+                                     myNodeFactory->FindNode(n2) ,
+                                     myNodeFactory->FindNode(n3) ,
+                                     myNodeFactory->FindNode(n4) ,
+                                     myNodeFactory->FindNode(n5) ,
+                                     myNodeFactory->FindNode(n6) ,
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n31),
+                                     myNodeFactory->FindNode(n45),
+                                     myNodeFactory->FindNode(n56),
+                                     myNodeFactory->FindNode(n64),
+                                     myNodeFactory->FindNode(n14),
+                                     myNodeFactory->FindNode(n25),
+                                     myNodeFactory->FindNode(n36),
+                                     myNodeFactory->FindNode(n1245),
+                                     myNodeFactory->FindNode(n2356),
+                                     myNodeFactory->FindNode(n1346),
+                                     ID);
 }
 
 //=======================================================================
@@ -4434,53 +2610,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n12 || !n23 ||
       !n31 || !n45 || !n56 || !n64 || !n14 || !n25 || !n36 || !n1245 || !n2356 || !n1346)
     return 0;
-  if(hasConstructionFaces()) {
-    // creation quadratic faces - not implemented
-    return 0;
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(18);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n2->getVtkId();
-  myNodeIds[2] = n3->getVtkId();
-
-  myNodeIds[3] = n4->getVtkId();
-  myNodeIds[4] = n5->getVtkId();
-  myNodeIds[5] = n6->getVtkId();
-
-  myNodeIds[6] = n12->getVtkId();
-  myNodeIds[7] = n23->getVtkId();
-  myNodeIds[8] = n31->getVtkId();
-
-  myNodeIds[9] = n45->getVtkId();
-  myNodeIds[10] = n56->getVtkId();
-  myNodeIds[11] = n64->getVtkId();
-
-  myNodeIds[12] = n14->getVtkId();
-  myNodeIds[13] = n25->getVtkId();
-  myNodeIds[14] = n36->getVtkId();
-
-  myNodeIds[15] = n1245->getVtkId();
-  myNodeIds[16] = n2356->getVtkId();
-  myNodeIds[17] = n1346->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_BiQuad_Penta, /*nbNodes=*/18, n1, n2, n3, n4, n5, n6,
+                n12, n23, n31, n45, n56, n64, n14, n25, n36, n1245, n2356, n1346 );
+    myInfo.myNbBiQuadPrisms++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbBiQuadPrisms++;
-
-  //  if (!registerElement(ID, volvtk)) {
-  //    RemoveElement(volvtk, false);
-  //    volvtk = NULL;
-  //  }
-  return volvtk;
+  return 0;
 }
 
 
@@ -4509,12 +2648,9 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n37,
                                       const SMDS_MeshNode * n48)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v =
-    SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, n12, n23, n34, n41,
-                               n56, n67, n78, n85, n15, n26, n37, n48, ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, n12, n23, n34, n41,
+                                    n56, n67, n78, n85, n15, n26, n37, n48,
+                                    myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4527,28 +2663,27 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
                                             int n56,int n67,int n78,int n85,
                                             int n15,int n26,int n37,int n48, int ID)
 {
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n6),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n7),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n8),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n34),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n41),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n56),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n67),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n78),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n85),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n15),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n26),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n37),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n48),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1),
+                                     myNodeFactory->FindNode(n2),
+                                     myNodeFactory->FindNode(n3),
+                                     myNodeFactory->FindNode(n4),
+                                     myNodeFactory->FindNode(n5),
+                                     myNodeFactory->FindNode(n6),
+                                     myNodeFactory->FindNode(n7),
+                                     myNodeFactory->FindNode(n8),
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n34),
+                                     myNodeFactory->FindNode(n41),
+                                     myNodeFactory->FindNode(n56),
+                                     myNodeFactory->FindNode(n67),
+                                     myNodeFactory->FindNode(n78),
+                                     myNodeFactory->FindNode(n85),
+                                     myNodeFactory->FindNode(n15),
+                                     myNodeFactory->FindNode(n26),
+                                     myNodeFactory->FindNode(n37),
+                                     myNodeFactory->FindNode(n48),
+                                     ID);
 }
 
 //=======================================================================
@@ -4580,54 +2715,16 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8 || !n12 || !n23 ||
       !n34 || !n41 || !n56 || !n67 || !n78 || !n85 || !n15 || !n26 || !n37 || !n48)
     return 0;
-  if(hasConstructionFaces()) {
-    return 0;
-    // creation quadratic faces - not implemented
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(20);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n4->getVtkId();
-  myNodeIds[2] = n3->getVtkId();
-  myNodeIds[3] = n2->getVtkId();
-
-  myNodeIds[4] = n5->getVtkId();
-  myNodeIds[5] = n8->getVtkId();
-  myNodeIds[6] = n7->getVtkId();
-  myNodeIds[7] = n6->getVtkId();
-
-  myNodeIds[8] = n41->getVtkId();
-  myNodeIds[9] = n34->getVtkId();
-  myNodeIds[10] = n23->getVtkId();
-  myNodeIds[11] = n12->getVtkId();
-
-  myNodeIds[12] = n85->getVtkId();
-  myNodeIds[13] = n78->getVtkId();
-  myNodeIds[14] = n67->getVtkId();
-  myNodeIds[15] = n56->getVtkId();
-
-  myNodeIds[16] = n15->getVtkId();
-  myNodeIds[17] = n48->getVtkId();
-  myNodeIds[18] = n37->getVtkId();
-  myNodeIds[19] = n26->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_Quad_Hexa, /*nbNodes=*/20, n1, n2, n3, n4, n5, n6, n7, n8,
+                n12, n23, n34, n41, n56, n67, n78, n85, n15, n26, n37, n48 );
+    myInfo.myNbQuadHexas++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbQuadHexas++;
-
-  //  if (!registerElement(ID, volvtk)) {
-  //    RemoveElement(volvtk, false);
-  //    volvtk = NULL;
-  //  }
-  return volvtk;
+  return 0;
 }
 
 //=======================================================================
@@ -4662,14 +2759,10 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n5678,
                                       const SMDS_MeshNode * nCenter)
 {
-  int ID = myElementIDFactory->GetFreeID();
-  SMDS_MeshVolume * v =
-    SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, n12, n23, n34, n41,
-                               n56, n67, n78, n85, n15, n26, n37, n48,
-                               n1234, n1256, n2367, n3478, n1458, n5678, nCenter,
-                               ID);
-  if(v==NULL) myElementIDFactory->ReleaseID(ID);
-  return v;
+  return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, n12, n23, n34, n41,
+                                    n56, n67, n78, n85, n15, n26, n37, n48,
+                                    n1234, n1256, n2367, n3478, n1458, n5678, nCenter,
+                                    myCellFactory->GetFreeID());
 }
 
 //=======================================================================
@@ -4684,40 +2777,39 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
                                             int n1234,int n1256,int n2367,int n3478,
                                             int n1458,int n5678,int nCenter, int ID)
 {
-  return SMDS_Mesh::AddVolumeWithID
-    ((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n4),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n6),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n7),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n8),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n12),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n23),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n34),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n41),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n56),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n67),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n78),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n85),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n15),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n26),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n37),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n48),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1234),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1256),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2367),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n3478),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1458),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(n5678),
-     (SMDS_MeshNode*) myNodeIDFactory->MeshElement(nCenter),
-     ID);
+  return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1),
+                                     myNodeFactory->FindNode(n2),
+                                     myNodeFactory->FindNode(n3),
+                                     myNodeFactory->FindNode(n4),
+                                     myNodeFactory->FindNode(n5),
+                                     myNodeFactory->FindNode(n6),
+                                     myNodeFactory->FindNode(n7),
+                                     myNodeFactory->FindNode(n8),
+                                     myNodeFactory->FindNode(n12),
+                                     myNodeFactory->FindNode(n23),
+                                     myNodeFactory->FindNode(n34),
+                                     myNodeFactory->FindNode(n41),
+                                     myNodeFactory->FindNode(n56),
+                                     myNodeFactory->FindNode(n67),
+                                     myNodeFactory->FindNode(n78),
+                                     myNodeFactory->FindNode(n85),
+                                     myNodeFactory->FindNode(n15),
+                                     myNodeFactory->FindNode(n26),
+                                     myNodeFactory->FindNode(n37),
+                                     myNodeFactory->FindNode(n48),
+                                     myNodeFactory->FindNode(n1234),
+                                     myNodeFactory->FindNode(n1256),
+                                     myNodeFactory->FindNode(n2367),
+                                     myNodeFactory->FindNode(n3478),
+                                     myNodeFactory->FindNode(n1458),
+                                     myNodeFactory->FindNode(n5678),
+                                     myNodeFactory->FindNode(nCenter),
+                                     ID);
 }
 
 //=======================================================================
 //function : AddVolumeWithID
-//purpose  : 2d order Hexahedrons with 20 nodes
+//purpose  : 2d order Hexahedrons with 27 nodes
 //=======================================================================
 SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n2,
@@ -4752,61 +2844,20 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
       !n34 || !n41 || !n56 || !n67 || !n78 || !n85 || !n15 || !n26 || !n37 || !n48 ||
       !n1234 || !n1256 || !n2367 || !n3478 || !n1458 || !n5678 || !nCenter )
     return 0;
-  if(hasConstructionFaces()) {
-    return 0;
-    // creation quadratic faces - not implemented
-  }
-  // --- retrieve nodes ID
-  myNodeIds.resize(27);
-  myNodeIds[0] = n1->getVtkId();
-  myNodeIds[1] = n4->getVtkId();
-  myNodeIds[2] = n3->getVtkId();
-  myNodeIds[3] = n2->getVtkId();
-
-  myNodeIds[4] = n5->getVtkId();
-  myNodeIds[5] = n8->getVtkId();
-  myNodeIds[6] = n7->getVtkId();
-  myNodeIds[7] = n6->getVtkId();
-
-  myNodeIds[8] = n41->getVtkId();
-  myNodeIds[9] = n34->getVtkId();
-  myNodeIds[10] = n23->getVtkId();
-  myNodeIds[11] = n12->getVtkId();
-
-  myNodeIds[12] = n85->getVtkId();
-  myNodeIds[13] = n78->getVtkId();
-  myNodeIds[14] = n67->getVtkId();
-  myNodeIds[15] = n56->getVtkId();
-
-  myNodeIds[16] = n15->getVtkId();
-  myNodeIds[17] = n48->getVtkId();
-  myNodeIds[18] = n37->getVtkId();
-  myNodeIds[19] = n26->getVtkId();
-
-  myNodeIds[20] = n1256->getVtkId();
-  myNodeIds[21] = n3478->getVtkId();
-  myNodeIds[22] = n1458->getVtkId();
-  myNodeIds[23] = n2367->getVtkId();
-  myNodeIds[24] = n1234->getVtkId();
-  myNodeIds[25] = n5678->getVtkId();
-  myNodeIds[26] = nCenter->getVtkId();
-
-  SMDS_VtkVolume *volvtk = myVolumePool->getNew();
-  volvtk->init(myNodeIds, this);
-  if (!this->registerElement(ID,volvtk))
+  if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
+
+  if ( SMDS_MeshCell* cell = myCellFactory->NewCell( ID ))
   {
-    this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL);
-    myVolumePool->destroy(volvtk);
-    return 0;
+    cell->init( SMDSEntity_TriQuad_Hexa, /*nbNodes=*/27, n1, n2, n3, n4, n5, n6, n7, n8,
+                n12, n23, n34, n41, n56, n67, n78, n85, n15, n26, n37, n48,
+                n1234, n1256, n2367, n3478, n1458, n5678, nCenter);
+    myInfo.myNbTriQuadHexas++;
+    return static_cast<SMDS_MeshVolume*>( cell );
   }
-  adjustmyCellsCapacity(ID);
-  myCells[ID] = volvtk;
-  myInfo.myNbTriQuadHexas++;
-
-  return volvtk;
+  return 0;
 }
 
-void SMDS_Mesh::dumpGrid(string ficdump)
+void SMDS_Mesh::dumpGrid(std::string ficdump)
 {
   //  vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New();
   //  aWriter->SetFileName(ficdump.c_str());
@@ -4817,7 +2868,7 @@ void SMDS_Mesh::dumpGrid(string ficdump)
   //  }
   //  aWriter->Delete();
   ficdump = ficdump + "_connectivity";
-  ofstream ficcon(ficdump.c_str(), ios::out);
+  std::ofstream ficcon(ficdump.c_str(), ios::out);
   int nbPoints = myGrid->GetNumberOfPoints();
   ficcon << "-------------------------------- points " <<  nbPoints << endl;
   for (int i=0; i<nbPoints; i++)
@@ -4854,41 +2905,57 @@ void SMDS_Mesh::dumpGrid(string ficdump)
 
 }
 
-void SMDS_Mesh::compactMesh()
+void SMDS_Mesh::CompactMesh()
 {
   this->myCompactTime = this->myModifTime;
+
+  bool idsChange = ( myNodeFactory->CompactChangePointers() ||
+                     myCellFactory->CompactChangePointers() );
+  if ( idsChange )
+  {
+    std::set< SMDS_ElementHolder* >::iterator holder = myElemHolders.begin();
+    for ( ; holder != myElemHolders.end(); ++holder )
+      (*holder)->beforeCompacting();
+  }
+  int oldCellSize = myCellFactory->GetMaxID();
+
+  // remove "holes" in SMDS numeration
+  std::vector<int> idNodesOldToNew, idCellsNewToOld, idCellsOldToNew;
+  myNodeFactory->Compact( idNodesOldToNew );
+  myCellFactory->Compact( idCellsNewToOld );
+
+  // make VTK IDs correspond to SMDS IDs
+  int newNodeSize = myNodeFactory->NbUsedElements();
+  int newCellSize = myCellFactory->NbUsedElements();
+  myGrid->compactGrid( idNodesOldToNew, newNodeSize, idCellsNewToOld, newCellSize );
+
+  if ( idsChange && !myElemHolders.empty() )
+  {
+    // idCellsNewToOld -> idCellsOldToNew
+    idCellsOldToNew.resize( oldCellSize, oldCellSize );
+    for ( size_t iNew = 0; iNew < idCellsNewToOld.size(); ++iNew )
+    {
+      if ( idCellsNewToOld[ iNew ] >= (int) idCellsOldToNew.size() )
+        idCellsOldToNew.resize( ( 1 + idCellsNewToOld[ iNew ]) * 1.5, oldCellSize );
+      idCellsOldToNew[ idCellsNewToOld[ iNew ]] = iNew;
+    }
+  }
+
+  std::set< SMDS_ElementHolder* >::iterator holder = myElemHolders.begin();
+  for ( ; holder != myElemHolders.end(); ++holder )
+    if ( idsChange )
+      (*holder)->restoreElements( idNodesOldToNew, idCellsOldToNew );
+    else
+      (*holder)->compact();
+
+  return;
 }
 
-int SMDS_Mesh::fromVtkToSmds(int vtkid)
+int SMDS_Mesh::FromVtkToSmds( int vtkid ) const
 {
-  if (vtkid >= 0 && vtkid < (int)myCellIdVtkToSmds.size())
-    return myCellIdVtkToSmds[vtkid];
-  throw SALOME_Exception(LOCALIZED ("vtk id out of bounds"));
+  return myCellFactory->FromVtkToSmds( vtkid );
 }
 
-// void SMDS_Mesh::updateBoundingBox()
-// {
-//   xmin = 0; xmax = 0;
-//   ymin = 0; ymax = 0;
-//   zmin = 0; zmax = 0;
-//   vtkPoints *points = myGrid->GetPoints();
-//   int myNodesSize = this->myNodes.size();
-//   for (int i = 0; i < myNodesSize; i++)
-//     {
-//       if (SMDS_MeshNode *n = myNodes[i])
-//         {
-//           double coords[3];
-//           points->GetPoint(n->myVtkID, coords);
-//           if (coords[0] < xmin) xmin = coords[0];
-//           else if (coords[0] > xmax) xmax = coords[0];
-//           if (coords[1] < ymin) ymin = coords[1];
-//           else if (coords[1] > ymax) ymax = coords[1];
-//           if (coords[2] < zmin) zmin = coords[2];
-//           else if (coords[2] > zmax) zmax = coords[2];
-//         }
-//     }
-// }
-
 double SMDS_Mesh::getMaxDim()
 {
   double dmax = 1.e-3;
@@ -4914,7 +2981,12 @@ vtkMTimeType SMDS_Mesh::GetMTime() const
   return this->myModifTime;
 }
 
-bool SMDS_Mesh::isCompacted()
+bool SMDS_Mesh::IsCompacted()
+{
+  return ( this->myCompactTime == this->myModifTime );
+}
+
+void SMDS_Mesh::setNbShapes( size_t nbShapes )
 {
-  return this->myCompactTime == this->myModifTime;
+  myNodeFactory->SetNbShapes( nbShapes );
 }
index 8bce6011b3d6e6ca8877e39279dcbdf7c6c436e8..38952f78cb5bcb17d540b1952418f3fc98078ff5 100644 (file)
 
 #include "SMESH_SMDS.hxx"
 
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_MeshCell.hxx"
+#include "SMDS_BallElement.hxx"
+#include "SMDS_ElemIterator.hxx"
 #include "SMDS_Mesh0DElement.hxx"
+#include "SMDS_MeshCell.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_MeshFace.hxx"
-#include "SMDS_MeshVolume.hxx"
-#include "SMDS_MeshNodeIDFactory.hxx"
-#include "SMDS_MeshElementIDFactory.hxx"
 #include "SMDS_MeshInfo.hxx"
-#include "SMDS_ElemIterator.hxx"
-#include "SMDS_VolumeOfNodes.hxx"
-#include "SMDS_VtkEdge.hxx"
-#include "SMDS_VtkFace.hxx"
-#include "SMDS_VtkVolume.hxx"
-#include "ObjectPool.hxx"
+#include "SMDS_MeshNode.hxx"
+#include "SMDS_MeshVolume.hxx"
 #include "SMDS_UnstructuredGrid.hxx"
-#include "SMDS_BallElement.hxx"
 
-#include <boost/shared_ptr.hpp>
 #include <set>
 #include <list>
 #include <vector>
-#include <vtkSystemIncludes.h>
-#include <cassert>
 
-#include "Utils_SALOME_Exception.hxx"
-
-#define MYASSERT(val) if (!(val)) throw SALOME_Exception(LOCALIZED("assertion not verified"));
+class SMDS_ElementHolder;
+class SMDS_ElementFactory;
+class SMDS_NodeFactory;
 
 class SMDS_EXPORT SMDS_Mesh : public SMDS_MeshObject
 {
 public:
-  friend class SMDS_MeshIDFactory;
-  friend class SMDS_MeshNodeIDFactory;
-  friend class SMDS_MeshElementIDFactory;
-  friend class SMDS_MeshVolumeVtkNodes;
-  friend class SMDS_MeshNode;
 
   SMDS_Mesh();
   
-  //! to retrieve this SMDS_Mesh instance from its elements (index stored in SMDS_Elements)
-  static std::vector<SMDS_Mesh*> _meshList;
-
   //! actual nodes coordinates, cells definition and reverse connectivity are stored in a vtkUnstructuredGrid
-  inline SMDS_UnstructuredGrid* getGrid() { return myGrid; }
-  inline int getMeshId() { return myMeshId; }
+  inline SMDS_UnstructuredGrid* GetGrid() { return myGrid; }
 
-  virtual SMDS_NodeIteratorPtr   nodesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_EdgeIteratorPtr   edgesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_FaceIteratorPtr   facesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_VolumeIteratorPtr volumesIterator   (bool idInceasingOrder=false) const;
+  virtual SMDS_NodeIteratorPtr   nodesIterator  () const;
+  virtual SMDS_EdgeIteratorPtr   edgesIterator  () const;
+  virtual SMDS_FaceIteratorPtr   facesIterator  () const;
+  virtual SMDS_VolumeIteratorPtr volumesIterator() const;
 
   virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type=SMDSAbs_All) const;
   virtual SMDS_ElemIteratorPtr elementGeomIterator(SMDSAbs_GeometryType type) const;
   virtual SMDS_ElemIteratorPtr elementEntityIterator(SMDSAbs_EntityType type) const;
 
+  virtual SMDS_NodeIteratorPtr shapeNodesIterator   (int shapeID, size_t nbElemsToReturn=-1) const;
+  virtual SMDS_ElemIteratorPtr shapeElementsIterator(int shapeID, size_t nbElemsToReturn=-1) const;
+
   SMDSAbs_ElementType GetElementType( const int id, const bool iselem ) const;
 
   SMDS_Mesh *AddSubMesh();
@@ -137,21 +121,6 @@ public:
                                  const SMDS_MeshNode * n3,
                                  const SMDS_MeshNode * n4);
 
-  virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshEdge * e1,
-                                       const SMDS_MeshEdge * e2,
-                                       const SMDS_MeshEdge * e3, int ID);
-  virtual SMDS_MeshFace* AddFace(const SMDS_MeshEdge * e1,
-                                 const SMDS_MeshEdge * e2,
-                                 const SMDS_MeshEdge * e3);
-
-  virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshEdge * e1,
-                                       const SMDS_MeshEdge * e2,
-                                       const SMDS_MeshEdge * e3,
-                                       const SMDS_MeshEdge * e4, int ID);
-  virtual SMDS_MeshFace* AddFace(const SMDS_MeshEdge * e1,
-                                 const SMDS_MeshEdge * e2,
-                                 const SMDS_MeshEdge * e3,
-                                 const SMDS_MeshEdge * e4);
 
   // 2d order triangle of 6 nodes
   virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
@@ -293,38 +262,6 @@ public:
                                      const SMDS_MeshNode * n7,
                                      const SMDS_MeshNode * n8);
 
-  virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1,
-                                           const SMDS_MeshFace * f2,
-                                           const SMDS_MeshFace * f3,
-                                           const SMDS_MeshFace * f4, int ID);
-  virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1,
-                                     const SMDS_MeshFace * f2,
-                                     const SMDS_MeshFace * f3,
-                                     const SMDS_MeshFace * f4);
-
-  virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1,
-                                           const SMDS_MeshFace * f2,
-                                           const SMDS_MeshFace * f3,
-                                           const SMDS_MeshFace * f4,
-                                           const SMDS_MeshFace * f5, int ID);
-  virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1,
-                                     const SMDS_MeshFace * f2,
-                                     const SMDS_MeshFace * f3,
-                                     const SMDS_MeshFace * f4,
-                                     const SMDS_MeshFace * f5);
-
-  virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1,
-                                           const SMDS_MeshFace * f2,
-                                           const SMDS_MeshFace * f3,
-                                           const SMDS_MeshFace * f4,
-                                           const SMDS_MeshFace * f5,
-                                           const SMDS_MeshFace * f6, int ID);
-  virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1,
-                                     const SMDS_MeshFace * f2,
-                                     const SMDS_MeshFace * f3,
-                                     const SMDS_MeshFace * f4,
-                                     const SMDS_MeshFace * f5,
-                                     const SMDS_MeshFace * f6);
 
   // hexagonal prism
   virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6,
@@ -639,33 +576,24 @@ public:
   virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID
     (const std::vector<const SMDS_MeshNode*> & nodes,
      const std::vector<int>                  & quantities,
-                            const int                                 ID);
+     const int                                 ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolume
-                           (const std::vector<const SMDS_MeshNode*> & nodes,
-                            const std::vector<int>                  & quantities);
+    (const std::vector<const SMDS_MeshNode*> & nodes,
+     const std::vector<int>                  & quantities);
 
   virtual SMDS_MeshVolume* AddVolumeFromVtkIds(const std::vector<vtkIdType>& vtkNodeIds);
 
-  virtual SMDS_MeshVolume* AddVolumeFromVtkIdsWithID(const std::vector<vtkIdType>& vtkNodeIds,
-                                                     const int ID);
-
   virtual SMDS_MeshFace* AddFaceFromVtkIds(const std::vector<vtkIdType>& vtkNodeIds);
 
-  virtual SMDS_MeshFace* AddFaceFromVtkIdsWithID(const std::vector<vtkIdType>& vtkNodeIds,
-                                                     const int ID);
   virtual void MoveNode(const SMDS_MeshNode *n, double x, double y, double z);
 
-  virtual void RemoveElement(const SMDS_MeshElement *        elem,
-                             std::list<const SMDS_MeshElement *>& removedElems,
-                             std::list<const SMDS_MeshElement *>& removedNodes,
-                             const bool                      removenodes = false);
+  virtual void RemoveElement(const SMDS_MeshElement *               elem,
+                             std::vector<const SMDS_MeshElement *>& removedElems,
+                             std::vector<const SMDS_MeshElement *>& removedNodes,
+                             const bool                             removenodes = false);
   virtual void RemoveElement(const SMDS_MeshElement * elem, bool removenodes = false);
   virtual void RemoveNode(const SMDS_MeshNode * node);
-  virtual void Remove0DElement(const SMDS_Mesh0DElement * elem0d);
-  virtual void RemoveEdge(const SMDS_MeshEdge * edge);
-  virtual void RemoveFace(const SMDS_MeshFace * face);
-  virtual void RemoveVolume(const SMDS_MeshVolume * volume);
 
   /*! Remove only the given element and only if it is free.
    *  Method does not work for meshes with descendants.
@@ -681,26 +609,23 @@ public:
   bool ChangeElementNodes(const SMDS_MeshElement * elem,
                           const SMDS_MeshNode    * nodes[],
                           const int                nbnodes);
-  bool ChangePolyhedronNodes(const SMDS_MeshElement *                 elem,
-                             const std::vector<const SMDS_MeshNode*>& nodes,
-                             const std::vector<int> &                 quantities);
 
-  virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1);
+  //virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1);
   // Renumber all nodes or elements.
-  virtual void compactMesh();
+
+  virtual void CompactMesh();
+  bool IsCompacted();
+
+  template<class ELEMTYPE>
+    static const ELEMTYPE* DownCast( const SMDS_MeshElement* e )
+  {
+    return (( e && !e->IsNull() && ELEMTYPE::Type() == e->GetType() ) ?
+            static_cast<const ELEMTYPE*>(e) : 0 );
+  }
 
   const SMDS_MeshNode *FindNode(int idnode) const;
   const SMDS_MeshNode *FindNodeVtk(int idnode) const;
-  const SMDS_Mesh0DElement* Find0DElement(int idnode) const;
-  const SMDS_BallElement* FindBall(int idnode) const;
-  const SMDS_MeshEdge *FindEdge(int idnode1, int idnode2) const;
-  const SMDS_MeshEdge *FindEdge(int idnode1, int idnode2, int idnode3) const;
-  const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3) const;
-  const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4) const;
-  const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3,
-                                int idnode4, int idnode5, int idnode6) const;
-  const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4,
-                                int idnode5, int idnode6, int idnode7, int idnode8) const;
+  const SMDS_MeshElement *FindElementVtk(int IDelem) const;
   virtual const SMDS_MeshElement * FindElement(int IDelem) const;
   static const SMDS_Mesh0DElement* Find0DElement(const SMDS_MeshNode * n);
   static const SMDS_BallElement* FindBall(const SMDS_MeshNode * n);
@@ -731,8 +656,7 @@ public:
                                        const SMDS_MeshNode *n7,
                                        const SMDS_MeshNode *n8);
 
-  const SMDS_MeshFace *FindFace(const std::vector<int>& nodes_ids) const;
-  static const SMDS_MeshFace* FindFace(const std::vector<const SMDS_MeshNode *>& nodes);
+  static const SMDS_MeshFace*    FindFace   (const std::vector<const SMDS_MeshNode *>& nodes);
   static const SMDS_MeshElement* FindElement(const std::vector<const SMDS_MeshNode *>& nodes,
                                              const SMDSAbs_ElementType                 type=SMDSAbs_All,
                                              const bool                                noMedium=true);
@@ -740,6 +664,8 @@ public:
                                 std::vector<const SMDS_MeshElement *>&    foundElems,
                                 const SMDSAbs_ElementType                 type=SMDSAbs_All);
 
+  virtual bool Contains( const SMDS_MeshElement* elem ) const;
+
   /*!
    * \brief Raise an exception if free memory (ram+swap) too low
     * \param doNotRaise - if true, suppres exception, just return free memory size
@@ -763,36 +689,10 @@ public:
   virtual int NbVolumes() const;
   virtual int NbSubMesh() const;
 
-  void DumpNodes() const;
-  void Dump0DElements() const;
-  void DumpEdges() const;
-  void DumpFaces() const;
-  void DumpVolumes() const;
-  void DebugStats() const;
-
   virtual ~SMDS_Mesh();
 
-  bool hasConstructionEdges();
-  bool hasConstructionFaces();
-  bool hasInverseElements();
-  void setConstructionEdges(bool);
-  void setConstructionFaces(bool);
-  void setInverseElements(bool);
-
-  /*!
-   * Checks if the element is present in mesh.
-   * Useful to determine dead pointers.
-   * Use this function for debug purpose only! Do not check in the code
-   * using it even in _DEBUG_ mode
-   */
-  bool Contains (const SMDS_MeshElement* elem) const;
-
-  typedef std::vector<SMDS_MeshNode *> SetOfNodes;
-  typedef std::vector<SMDS_MeshCell *> SetOfCells;
-
-  //void updateBoundingBox();
   double getMaxDim();
-  int fromVtkToSmds(int vtkid);
+  int FromVtkToSmds(int vtkid) const;
 
   void dumpGrid(std::string ficdump="dumpGrid");
   static int chunkSize;
@@ -802,44 +702,14 @@ public:
 
   void Modified();
   vtkMTimeType GetMTime() const;
-  bool isCompacted();
 
 protected:
   SMDS_Mesh(SMDS_Mesh * parent);
 
-  SMDS_MeshFace * createTriangle(const SMDS_MeshNode * node1,
-                                 const SMDS_MeshNode * node2,
-                                 const SMDS_MeshNode * node3,
-                                 int ID);
-  SMDS_MeshFace * createQuadrangle(const SMDS_MeshNode * node1,
-                                   const SMDS_MeshNode * node2,
-                                   const SMDS_MeshNode * node3,
-                                   const SMDS_MeshNode * node4,
-                                   int ID);
-  SMDS_MeshEdge* FindEdgeOrCreate(const SMDS_MeshNode * n1,
-                                  const SMDS_MeshNode * n2);
-  SMDS_MeshFace* FindFaceOrCreate(const SMDS_MeshNode *n1,
-                                  const SMDS_MeshNode *n2,
-                                  const SMDS_MeshNode *n3);
-  SMDS_MeshFace* FindFaceOrCreate(const SMDS_MeshNode *n1,
-                                  const SMDS_MeshNode *n2,
-                                  const SMDS_MeshNode *n3,
-                                  const SMDS_MeshNode *n4);
-
-  bool registerElement(int ID, SMDS_MeshElement * element);
-
   void addChildrenWithNodes(std::set<const SMDS_MeshElement*>& setOfChildren,
                             const SMDS_MeshElement *           element,
                             std::set<const SMDS_MeshElement*>& nodes);
 
-  inline void adjustmyCellsCapacity(int ID)
-  {
-    assert(ID >= 0);
-    myElementIDFactory->adjustMaxId(ID);
-    if (ID >= (int)myCells.size())
-      myCells.resize(ID+SMDS_Mesh::chunkSize,0);
-  }
-
   inline void adjustBoundingBox(double x, double y, double z)
   {
     if (x > xmax) xmax = x;
@@ -850,47 +720,29 @@ protected:
     else if (z < zmin) zmin = z;
   }
 
-  // Fields PRIVATE
+  void setNbShapes( size_t nbShapes );
 
-  //! index of this SMDS_mesh in the static vector<SMDS_Mesh*> _meshList
-  int myMeshId;
+
+  // Fields PRIVATE
 
   //! actual nodes coordinates, cells definition and reverse connectivity are stored in a vtkUnstructuredGrid
-  SMDS_UnstructuredGrid*        myGrid;
+  SMDS_UnstructuredGrid* myGrid;
 
   //! Small objects like SMDS_MeshNode are allocated by chunks to limit memory costs of new
-  ObjectPool<SMDS_MeshNode>*    myNodePool;
-
-  //! Small objects like SMDS_VtkVolume are allocated by chunks to limit memory costs of new
-  ObjectPool<SMDS_VtkVolume>*   myVolumePool;
-  ObjectPool<SMDS_VtkFace>*     myFacePool;
-  ObjectPool<SMDS_VtkEdge>*     myEdgePool;
-  ObjectPool<SMDS_BallElement>* myBallPool;
-
-  //! SMDS_MeshNodes refer to vtk nodes (vtk id != index in myNodes),store reference to this mesh, and sub-shape
-  SetOfNodes                    myNodes;
-  SetOfCells                    myCells;
-
-  //! a buffer to speed up elements addition by excluding some memory allocation
-  std::vector<vtkIdType>        myNodeIds;
-
-  //! for cells only: index = ID in vtkUnstructuredGrid, value = ID for SMDS users
-  std::vector<int>              myCellIdVtkToSmds;
+  SMDS_NodeFactory*      myNodeFactory;
+  SMDS_ElementFactory*   myCellFactory;
 
-  SMDS_Mesh *                   myParent;
-  std::list<SMDS_Mesh *>        myChildren;
-  SMDS_MeshNodeIDFactory *      myNodeIDFactory;
-  SMDS_MeshElementIDFactory *   myElementIDFactory;
-  SMDS_MeshInfo                 myInfo;
+  SMDS_Mesh *            myParent;
+  std::list<SMDS_Mesh *> myChildren;
+  SMDS_MeshInfo          myInfo;
 
   //! any add, remove or change of node or cell
-  bool myModified;
+  bool                   myModified;
   //! use a counter to keep track of modifications
-  unsigned long myModifTime, myCompactTime;
+  unsigned long          myModifTime, myCompactTime;
 
-  bool myHasConstructionEdges;
-  bool myHasConstructionFaces;
-  bool myHasInverseElements;
+  friend class SMDS_ElementHolder;
+  std::set< SMDS_ElementHolder* > myElemHolders;
 
   double xmin;
   double xmax;
diff --git a/src/SMDS/SMDS_Mesh0DElement.cxx b/src/SMDS/SMDS_Mesh0DElement.cxx
deleted file mode 100644 (file)
index 8ac7bcc..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_Mesh0DElement.cxx
-//  Module : SMESH
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_Mesh0DElement.hxx"
-#include "SMDS_IteratorOfElements.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Mesh.hxx"
-
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_Mesh0DElement
-//purpose  :
-//=======================================================================
-SMDS_Mesh0DElement::SMDS_Mesh0DElement (const SMDS_MeshNode * node)
-{
-  myNode = node;
-}
-
-//=======================================================================
-//function : Print
-//purpose  :
-//=======================================================================
-void SMDS_Mesh0DElement::Print (ostream & OS) const
-{
-  OS << "0D Element <" << GetID() << "> : (" << myNode << ") " << endl;
-}
-
-//=======================================================================
-//function : NbNodes
-//purpose  :
-//=======================================================================
-int SMDS_Mesh0DElement::NbNodes() const
-{
-  return 1;
-}
-
-//=======================================================================
-//function : NbEdges
-//purpose  :
-//=======================================================================
-int SMDS_Mesh0DElement::NbEdges() const
-{
-  return 0;
-}
-
-//=======================================================================
-//function : GetType
-//purpose  :
-//=======================================================================
-SMDSAbs_ElementType SMDS_Mesh0DElement::GetType() const
-{
-  return SMDSAbs_0DElement;
-}
-
-vtkIdType SMDS_Mesh0DElement::GetVtkType() const
-{
-  return VTK_VERTEX;
-}
-
-//=======================================================================
-//function : elementsIterator
-//purpose  :
-//=======================================================================
-class SMDS_Mesh0DElement_MyNodeIterator: public SMDS_ElemIterator
-{
-  const SMDS_MeshNode * myNode;
-  int myIndex;
- public:
-  SMDS_Mesh0DElement_MyNodeIterator(const SMDS_MeshNode * node):
-    myNode(node),myIndex(0) {}
-
-  bool more()
-  {
-    return myIndex < 1;
-  }
-
-  const SMDS_MeshElement* next()
-  {
-    myIndex++;
-    if (myIndex == 1)
-      return myNode;
-    return NULL;
-  }
-};
-
-SMDS_ElemIteratorPtr SMDS_Mesh0DElement::elementsIterator (SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_0DElement:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_0DElement);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode));
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type, SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode))));
-  }
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode* SMDS_Mesh0DElement::GetNode(const int ind) const
-{
-  if (ind == 0)
-    return myNode;
-  return NULL;
-}
-
-//=======================================================================
-//function : ChangeNode
-//purpose  :
-//=======================================================================
-bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
-{
-  if ( nbNodes == 1 )
-  {
-    vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-    vtkIdType npts = 0;
-    vtkIdType* pts = 0;
-    grid->GetCellPoints(myVtkID, npts, pts);
-    if (nbNodes != npts)
-    {
-      MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes);
-      return false;
-    }
-    myNode = nodes[0];
-    pts[0] = myNode->getVtkId();
-
-    SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-    return true;
-  }
-  return false;
-}
index f4b9fa2dd756a2917bd1caffa0ba7e65e5109ee1..1ba4d4b5791bf8ae3b058c7a07ad59db48e67d75 100644 (file)
 
 #include "SMDS_MeshCell.hxx"
 
-#include <iostream>
-
+/*!
+ * \brief 0D mesh element. This type is not allocated.
+ *        It is only used as function argument type to provide more clear semantic.
+ */
 class SMDS_EXPORT SMDS_Mesh0DElement: public SMDS_MeshCell
 {
  public:
-  SMDS_Mesh0DElement (const SMDS_MeshNode * node);
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
-  virtual void Print (std::ostream & OS) const;
-
-  virtual SMDSAbs_ElementType  GetType() const;
-  virtual vtkIdType            GetVtkType() const;
-  virtual SMDSAbs_EntityType   GetEntityType() const {return SMDSEntity_0D;}
-  virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_POINT; }
-  virtual const SMDS_MeshNode* GetNode (const int ind) const;
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-
- protected:
-  virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
 
- protected:
-  const SMDS_MeshNode* myNode;
+  static SMDSAbs_ElementType Type() { return SMDSAbs_0DElement; }
 };
 
 #endif
index 7175ae5d457c3cd80695fcea22172c7f9845942e..4aaeed25a3d1068f16bdb5ef5ebe5c771c3fd754 100644 (file)
 //
 
 #include "SMDS_MeshCell.hxx"
-#include "utilities.h"
 
-int SMDS_MeshCell::nbCells = 0;
+#include "SMDS_Mesh.hxx"
+#include "SMDS_VtkCellIterator.hxx"
 
-SMDS_MeshCell::SMDS_MeshCell() :
-  SMDS_MeshElement(-1)
-{
-  nbCells++;
-  myVtkID = -1;
-}
+#include <utilities.h>
 
-SMDS_MeshCell::~SMDS_MeshCell()
-{
-  nbCells--;
-}
-//================================================================================
-/*!
- * \brief Return VTKCellType corresponding to SMDSAbs_EntityType
- */
-//================================================================================
+#include <vtkCell.h>
 
-VTKCellType SMDS_MeshCell::toVtkType (SMDSAbs_EntityType smdsType)
+#include <cstdarg>
+
+#include <boost/make_shared.hpp>
+
+namespace
 {
-  static std::vector< VTKCellType > vtkTypes;
-  if ( vtkTypes.empty() )
+  /*!
+   * \brief Cell type features
+   */
+  struct CellProps
   {
-    vtkTypes.resize( SMDSEntity_Last+1, VTK_EMPTY_CELL );
-    vtkTypes[ SMDSEntity_Node ]              = VTK_VERTEX;
-    vtkTypes[ SMDSEntity_0D ]                = VTK_VERTEX;
-    vtkTypes[ SMDSEntity_Edge ]              = VTK_LINE;
-    vtkTypes[ SMDSEntity_Quad_Edge ]         = VTK_QUADRATIC_EDGE;
-    vtkTypes[ SMDSEntity_Triangle ]          = VTK_TRIANGLE;
-    vtkTypes[ SMDSEntity_Quad_Triangle ]     = VTK_QUADRATIC_TRIANGLE;
-    vtkTypes[ SMDSEntity_BiQuad_Triangle ]   = VTK_BIQUADRATIC_TRIANGLE;
-    vtkTypes[ SMDSEntity_Quadrangle ]        = VTK_QUAD;
-    vtkTypes[ SMDSEntity_Quad_Quadrangle ]   = VTK_QUADRATIC_QUAD;
-    vtkTypes[ SMDSEntity_BiQuad_Quadrangle ] = VTK_BIQUADRATIC_QUAD;
-    vtkTypes[ SMDSEntity_Polygon ]           = VTK_POLYGON;
-    vtkTypes[ SMDSEntity_Quad_Polygon ]      = VTK_QUADRATIC_POLYGON;
-    vtkTypes[ SMDSEntity_Tetra ]             = VTK_TETRA;
-    vtkTypes[ SMDSEntity_Quad_Tetra ]        = VTK_QUADRATIC_TETRA;
-    vtkTypes[ SMDSEntity_Pyramid ]           = VTK_PYRAMID;
-    vtkTypes[ SMDSEntity_Quad_Pyramid ]      = VTK_QUADRATIC_PYRAMID;
-    vtkTypes[ SMDSEntity_Hexa ]              = VTK_HEXAHEDRON;
-    vtkTypes[ SMDSEntity_Quad_Hexa ]         = VTK_QUADRATIC_HEXAHEDRON;
-    vtkTypes[ SMDSEntity_TriQuad_Hexa ]      = VTK_TRIQUADRATIC_HEXAHEDRON;
-    vtkTypes[ SMDSEntity_Penta ]             = VTK_WEDGE;
-    vtkTypes[ SMDSEntity_Quad_Penta ]        = VTK_QUADRATIC_WEDGE;
-    vtkTypes[ SMDSEntity_BiQuad_Penta ]      = VTK_BIQUADRATIC_QUADRATIC_WEDGE;
-    vtkTypes[ SMDSEntity_Hexagonal_Prism ]   = VTK_HEXAGONAL_PRISM;
-    vtkTypes[ SMDSEntity_Polyhedra ]         = VTK_POLYHEDRON;
-    //vtkTypes[ SMDSEntity_Quad_Polyhedra ]    = ;
-    vtkTypes[ SMDSEntity_Ball ]              = VTK_POLY_VERTEX;
+    SMDSAbs_EntityType   myEntity;
+    SMDSAbs_ElementType  myType;
+    SMDSAbs_GeometryType myGeom;
+    bool                 myIsPoly;
+    bool                 myIsQuadratic;
+    int                  myNbCornerNodes;
+    int                  myNbNodes;
+    int                  myNbEdges;
+    int                  myNbFaces;
+
+    CellProps() :
+      myEntity( SMDSEntity_Last ), myType( SMDSAbs_All ), myGeom( SMDSGeom_NONE ),
+      myIsPoly( 0 ), myNbCornerNodes( 0 ),
+      myNbNodes( 0 ), myNbEdges( 0 ), myNbFaces ( 0 )
+    {
+    }
+    void Set( SMDSAbs_EntityType   Entity,
+              SMDSAbs_ElementType  Type,
+              SMDSAbs_GeometryType Geom,
+              bool                 IsPoly,
+              int                  NbCornerNodes,
+              int                  NbNodes,
+              int                  NbEdges,
+              int                  NbFaces)
+    {
+      myEntity        = Entity;
+      myType          = Type;
+      myGeom          = Geom;
+      myIsPoly        = IsPoly;
+      myIsQuadratic   = ( NbNodes > NbCornerNodes );
+      myNbCornerNodes = NbCornerNodes;
+      myNbNodes       = NbNodes;
+      myNbEdges       = NbEdges;
+      myNbFaces       = NbFaces;
+    }
+  };
+
+  static std::vector< CellProps > theCellProps;
+
+  //! initialize theCellProps
+  void initCellProps()
+  {
+    theCellProps.resize( VTK_NUMBER_OF_CELL_TYPES );
+    CellProps* p = & theCellProps[0];
+    p[ VTK_VERTEX ].
+      Set( SMDSEntity_0D, SMDSAbs_0DElement, SMDSGeom_POINT,
+           /*isPoly=*/0,/*nbCN=*/1,/*nbN=*/1,/*nbE=*/0,/*nbF=*/0 );
+    p[ VTK_LINE ].
+      Set( SMDSEntity_Edge, SMDSAbs_Edge, SMDSGeom_EDGE,
+           /*isPoly=*/0,/*nbCN=*/2,/*nbN=*/2,/*nbE=*/1,/*nbF=*/0 );
+    p[ VTK_QUADRATIC_EDGE ].
+      Set( SMDSEntity_Quad_Edge, SMDSAbs_Edge, SMDSGeom_EDGE,
+           /*isPoly=*/0,/*nbCN=*/2,/*nbN=*/3,/*nbE=*/1,/*nbF=*/0 );
+    p[ VTK_TRIANGLE ].
+      Set( SMDSEntity_Triangle, SMDSAbs_Face, SMDSGeom_TRIANGLE,
+           /*isPoly=*/0,/*nbCN=*/3,/*nbN=*/3,/*nbE=*/3,/*nbF=*/1 );
+    p[ VTK_QUADRATIC_TRIANGLE ].
+      Set( SMDSEntity_Quad_Triangle, SMDSAbs_Face, SMDSGeom_TRIANGLE,
+           /*isPoly=*/0,/*nbCN=*/3,/*nbN=*/6,/*nbE=*/3,/*nbF=*/1 );
+    p[ VTK_BIQUADRATIC_TRIANGLE ].
+      Set( SMDSEntity_BiQuad_Triangle, SMDSAbs_Face, SMDSGeom_TRIANGLE,
+           /*isPoly=*/0,/*nbCN=*/3,/*nbN=*/7,/*nbE=*/3,/*nbF=*/1 );
+    p[ VTK_QUAD].
+      Set( SMDSEntity_Quadrangle, SMDSAbs_Face, SMDSGeom_QUADRANGLE,
+           /*isPoly=*/0,/*nbCN=*/4,/*nbN=*/4,/*nbE=*/4,/*nbF=*/1 );
+    p[ VTK_QUADRATIC_QUAD].
+      Set( SMDSEntity_Quad_Quadrangle, SMDSAbs_Face, SMDSGeom_QUADRANGLE,
+           /*isPoly=*/0,/*nbCN=*/4,/*nbN=*/8,/*nbE=*/4,/*nbF=*/1 );
+    p[ VTK_BIQUADRATIC_QUAD].
+      Set( SMDSEntity_BiQuad_Quadrangle, SMDSAbs_Face, SMDSGeom_QUADRANGLE,
+           /*isPoly=*/0,/*nbCN=*/4,/*nbN=*/9,/*nbE=*/4,/*nbF=*/1 );
+    p[ VTK_POLYGON ].
+      Set( SMDSEntity_Polygon, SMDSAbs_Face, SMDSGeom_POLYGON,
+           /*isPoly=*/1,/*nbCN=*/-1,/*nbN=*/-1,/*nbE=*/-1,/*nbF=*/1 );
+    p[ VTK_QUADRATIC_POLYGON ].
+      Set( SMDSEntity_Quad_Polygon, SMDSAbs_Face, SMDSGeom_POLYGON,
+           /*isPoly=*/1,/*nbCN=*/-2,/*nbN=*/-1,/*nbE=*/-1,/*nbF=*/1 );
+    p[ VTK_TETRA ].
+      Set( SMDSEntity_Tetra, SMDSAbs_Volume, SMDSGeom_TETRA,
+           /*isPoly=*/0,/*nbCN=*/4,/*nbN=*/4,/*nbE=*/6,/*nbF=*/4 );
+    p[ VTK_QUADRATIC_TETRA ].
+      Set( SMDSEntity_Quad_Tetra, SMDSAbs_Volume, SMDSGeom_TETRA,
+           /*isPoly=*/0,/*nbCN=*/4,/*nbN=*/10,/*nbE=*/6,/*nbF=*/4 );
+    p[ VTK_PYRAMID ].
+      Set( SMDSEntity_Pyramid, SMDSAbs_Volume, SMDSGeom_PYRAMID,
+           /*isPoly=*/0,/*nbCN=*/5,/*nbN=*/5,/*nbE=*/8,/*nbF=*/5 );
+    p[ VTK_QUADRATIC_PYRAMID].
+      Set( SMDSEntity_Quad_Pyramid, SMDSAbs_Volume, SMDSGeom_PYRAMID,
+           /*isPoly=*/0,/*nbCN=*/5,/*nbN=*/13,/*nbE=*/8,/*nbF=*/5 );
+    p[ VTK_HEXAHEDRON ].
+      Set( SMDSEntity_Hexa, SMDSAbs_Volume, SMDSGeom_HEXA,
+           /*isPoly=*/0,/*nbCN=*/8,/*nbN=*/8,/*nbE=*/12,/*nbF=*/6 );
+    p[ VTK_QUADRATIC_HEXAHEDRON ].
+      Set( SMDSEntity_Quad_Hexa, SMDSAbs_Volume, SMDSGeom_HEXA,
+           /*isPoly=*/0,/*nbCN=*/8,/*nbN=*/20,/*nbE=*/12,/*nbF=*/6 );
+    p[ VTK_TRIQUADRATIC_HEXAHEDRON ].
+      Set( SMDSEntity_TriQuad_Hexa, SMDSAbs_Volume, SMDSGeom_HEXA,
+           /*isPoly=*/0,/*nbCN=*/8,/*nbN=*/27,/*nbE=*/12,/*nbF=*/6 );
+    p[ VTK_WEDGE ].
+      Set( SMDSEntity_Penta, SMDSAbs_Volume, SMDSGeom_PENTA,
+           /*isPoly=*/0,/*nbCN=*/6,/*nbN=*/6,/*nbE=*/9,/*nbF=*/5 );
+    p[ VTK_QUADRATIC_WEDGE ].
+      Set( SMDSEntity_Quad_Penta, SMDSAbs_Volume, SMDSGeom_PENTA,
+           /*isPoly=*/0,/*nbCN=*/6,/*nbN=*/15,/*nbE=*/9,/*nbF=*/5 );
+    p[ VTK_BIQUADRATIC_QUADRATIC_WEDGE ].
+      Set( SMDSEntity_BiQuad_Penta, SMDSAbs_Volume, SMDSGeom_PENTA,
+           /*isPoly=*/0,/*nbCN=*/6,/*nbN=*/21,/*nbE=*/9,/*nbF=*/5 );
+    p[ VTK_HEXAGONAL_PRISM].
+      Set( SMDSEntity_Hexagonal_Prism, SMDSAbs_Volume, SMDSGeom_HEXAGONAL_PRISM,
+           /*isPoly=*/0,/*nbCN=*/12,/*nbN=*/12,/*nbE=*/18,/*nbF=*/8 );
+    p[ VTK_POLYHEDRON ].
+      Set( SMDSEntity_Polyhedra, SMDSAbs_Volume, SMDSGeom_POLYHEDRA,
+           /*isPoly=*/1,/*nbCN=*/-1,/*nbN=*/-1,/*nbE=*/-1,/*nbF=*/-1 );
+    p[ VTK_POLY_VERTEX].
+      Set( SMDSEntity_Ball, SMDSAbs_Ball, SMDSGeom_BALL,
+           /*isPoly=*/0,/*nbCN=*/1,/*nbN=*/1,/*nbE=*/0,/*nbF=*/0 );
   }
-  return vtkTypes[ smdsType ];
-}
 
-//================================================================================
-/*!
- * \brief Return indices to transform cell connectivity from SMDS to VTK
- * Usage: vtkIDs[i] = smdsIDs[ indices[ i ]]
- */
-//================================================================================
+  //! return vector a CellProps
+  const CellProps& getCellProps( VTKCellType vtkType )
+  {
+    return theCellProps[ vtkType ];
+  } // getCellProps()
 
-const std::vector< int >& SMDS_MeshCell::toVtkOrder(SMDSAbs_EntityType smdsType)
-{
-  static std::vector< std::vector< int > > toVtkInterlaces;
-  if ( toVtkInterlaces.empty() )
+  //! return vector a CellProps
+  const CellProps& getCellProps( SMDSAbs_EntityType entity )
   {
-    toVtkInterlaces.resize( SMDSEntity_Last+1 );
+    return getCellProps( SMDS_MeshCell::toVtkType( entity ));
+  }
+
+
+  static std::vector< VTKCellType > theVtkTypes; //!< VTK types by SMDS ones
+
+  void initVtkTypes()
+  {
+    theVtkTypes.resize( SMDSEntity_Last+1, VTK_EMPTY_CELL );
+    theVtkTypes[ SMDSEntity_Node ]              = VTK_VERTEX;
+    theVtkTypes[ SMDSEntity_0D ]                = VTK_VERTEX;
+    theVtkTypes[ SMDSEntity_Edge ]              = VTK_LINE;
+    theVtkTypes[ SMDSEntity_Quad_Edge ]         = VTK_QUADRATIC_EDGE;
+    theVtkTypes[ SMDSEntity_Triangle ]          = VTK_TRIANGLE;
+    theVtkTypes[ SMDSEntity_Quad_Triangle ]     = VTK_QUADRATIC_TRIANGLE;
+    theVtkTypes[ SMDSEntity_BiQuad_Triangle ]   = VTK_BIQUADRATIC_TRIANGLE;
+    theVtkTypes[ SMDSEntity_Quadrangle ]        = VTK_QUAD;
+    theVtkTypes[ SMDSEntity_Quad_Quadrangle ]   = VTK_QUADRATIC_QUAD;
+    theVtkTypes[ SMDSEntity_BiQuad_Quadrangle ] = VTK_BIQUADRATIC_QUAD;
+    theVtkTypes[ SMDSEntity_Polygon ]           = VTK_POLYGON;
+    theVtkTypes[ SMDSEntity_Quad_Polygon ]      = VTK_QUADRATIC_POLYGON;
+    theVtkTypes[ SMDSEntity_Tetra ]             = VTK_TETRA;
+    theVtkTypes[ SMDSEntity_Quad_Tetra ]        = VTK_QUADRATIC_TETRA;
+    theVtkTypes[ SMDSEntity_Pyramid ]           = VTK_PYRAMID;
+    theVtkTypes[ SMDSEntity_Quad_Pyramid ]      = VTK_QUADRATIC_PYRAMID;
+    theVtkTypes[ SMDSEntity_Hexa ]              = VTK_HEXAHEDRON;
+    theVtkTypes[ SMDSEntity_Quad_Hexa ]         = VTK_QUADRATIC_HEXAHEDRON;
+    theVtkTypes[ SMDSEntity_TriQuad_Hexa ]      = VTK_TRIQUADRATIC_HEXAHEDRON;
+    theVtkTypes[ SMDSEntity_Penta ]             = VTK_WEDGE;
+    theVtkTypes[ SMDSEntity_Quad_Penta ]        = VTK_QUADRATIC_WEDGE;
+    theVtkTypes[ SMDSEntity_BiQuad_Penta ]      = VTK_BIQUADRATIC_QUADRATIC_WEDGE;
+    theVtkTypes[ SMDSEntity_Hexagonal_Prism ]   = VTK_HEXAGONAL_PRISM;
+    theVtkTypes[ SMDSEntity_Polyhedra ]         = VTK_POLYHEDRON;
+    //theVtkTypes[ SMDSEntity_Quad_Polyhedra ]    = ;
+    theVtkTypes[ SMDSEntity_Ball ]              = VTK_POLY_VERTEX;
+  }
+
+
+  //! indices to transform cell connectivity from SMDS to VTK
+  static std::vector< std::vector< int > > theToVtkInterlaces;
+
+  void initToVtkInterlaces()
+  {
+    theToVtkInterlaces.resize( SMDSEntity_Last+1 );
     // {
     //   const int ids[] = {0};
-    //   toVtkInterlaces[SMDSEntity_0D].assign( &ids[0], &ids[0]+1 );
-    //   toVtkInterlaces[SMDSEntity_Node].assign( &ids[0], &ids[0]+1 );
+    //   theToVtkInterlaces[SMDSEntity_0D].assign( &ids[0], &ids[0]+1 );
+    //   theToVtkInterlaces[SMDSEntity_Node].assign( &ids[0], &ids[0]+1 );
     // }
     // {
     //   const int ids[] = {0,1};
-    //   toVtkInterlaces[SMDSEntity_Edge].assign( &ids[0], &ids[0]+2 );
+    //   theToVtkInterlaces[SMDSEntity_Edge].assign( &ids[0], &ids[0]+2 );
     // }
     // {
     //   const int ids[] = {0,1,2};
-    //   toVtkInterlaces[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
+    //   theToVtkInterlaces[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
     // }
     // {
     //   const int ids[] = {0,1,2};
-    //   toVtkInterlaces[SMDSEntity_Triangle].assign( &ids[0], &ids[0]+3 );
+    //   theToVtkInterlaces[SMDSEntity_Triangle].assign( &ids[0], &ids[0]+3 );
     // }
     // {
     //   const int ids[] = {0,1,2,3,4,5};
-    //   toVtkInterlaces[SMDSEntity_Quad_Triangle].assign( &ids[0], &ids[0]+6 );
+    //   theToVtkInterlaces[SMDSEntity_Quad_Triangle].assign( &ids[0], &ids[0]+6 );
     // }
     // {
     //   const int ids[] = {0,1,2,3};
-    //   toVtkInterlaces[SMDSEntity_Quadrangle].assign( &ids[0], &ids[0]+4 );
+    //   theToVtkInterlaces[SMDSEntity_Quadrangle].assign( &ids[0], &ids[0]+4 );
     // }
     // {
     //   const int ids[] = {0,1,2,3,4,5,6,7};
-    //   toVtkInterlaces[SMDSEntity_Quad_Quadrangle].assign( &ids[0], &ids[0]+8 );
+    //   theToVtkInterlaces[SMDSEntity_Quad_Quadrangle].assign( &ids[0], &ids[0]+8 );
     // }
     // {
     //   const int ids[] = {0,1,2,3,4,5,6,7,8};
-    //   toVtkInterlaces[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
+    //   theToVtkInterlaces[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
     // }
     {
       const int ids[] = {0,2,1,3};
-      toVtkInterlaces[SMDSEntity_Tetra].assign( &ids[0], &ids[0]+4 );
+      theToVtkInterlaces[SMDSEntity_Tetra].assign( &ids[0], &ids[0]+4 );
     }
     {
       const int ids[] = {0,2,1,3,6,5,4,7,9,8};
-      toVtkInterlaces[SMDSEntity_Quad_Tetra].assign( &ids[0], &ids[0]+10 );
+      theToVtkInterlaces[SMDSEntity_Quad_Tetra].assign( &ids[0], &ids[0]+10 );
     }
     {
       const int ids[] = {0,3,2,1,4};
-      toVtkInterlaces[SMDSEntity_Pyramid].assign( &ids[0], &ids[0]+5 );
+      theToVtkInterlaces[SMDSEntity_Pyramid].assign( &ids[0], &ids[0]+5 );
     }
     {
       const int ids[] = {0,3,2,1,4,8,7,6,5,9,12,11,10};
-      toVtkInterlaces[SMDSEntity_Quad_Pyramid].assign( &ids[0], &ids[0]+13 );
+      theToVtkInterlaces[SMDSEntity_Quad_Pyramid].assign( &ids[0], &ids[0]+13 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5};
-      toVtkInterlaces[SMDSEntity_Hexa].assign( &ids[0], &ids[0]+8 );
+      theToVtkInterlaces[SMDSEntity_Hexa].assign( &ids[0], &ids[0]+8 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17};
-      toVtkInterlaces[SMDSEntity_Quad_Hexa].assign( &ids[0], &ids[0]+20 );
+      theToVtkInterlaces[SMDSEntity_Quad_Hexa].assign( &ids[0], &ids[0]+20 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17, 21,23,24,22,20,25,26};
-      toVtkInterlaces[SMDSEntity_TriQuad_Hexa].assign( &ids[0], &ids[0]+27 );
+      theToVtkInterlaces[SMDSEntity_TriQuad_Hexa].assign( &ids[0], &ids[0]+27 );
     }
     {
       const int ids[] = {0,1,2,3,4,5};
-      toVtkInterlaces[SMDSEntity_Penta].assign( &ids[0], &ids[0]+6 );
+      theToVtkInterlaces[SMDSEntity_Penta].assign( &ids[0], &ids[0]+6 );
     }
     {
       const int ids[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}; // TODO: check
-      toVtkInterlaces[SMDSEntity_Quad_Penta].assign( &ids[0], &ids[0]+15 );
+      theToVtkInterlaces[SMDSEntity_Quad_Penta].assign( &ids[0], &ids[0]+15 );
     }
     {
       const int ids[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};// TODO: check
-      toVtkInterlaces[SMDSEntity_BiQuad_Penta].assign( &ids[0], &ids[0]+18 );
+      theToVtkInterlaces[SMDSEntity_BiQuad_Penta].assign( &ids[0], &ids[0]+18 );
     }
     {
       const int ids[] = {0,5,4,3,2,1,6,11,10,9,8,7};
-      toVtkInterlaces[SMDSEntity_Hexagonal_Prism].assign( &ids[0], &ids[0]+12 );
+      theToVtkInterlaces[SMDSEntity_Hexagonal_Prism].assign( &ids[0], &ids[0]+12 );
     }
   }
-  return toVtkInterlaces[smdsType];
-}
 
-//================================================================================
-/*!
- * \brief Return indices to reverse an SMDS cell of given type.
- *        nbNodes is useful for polygons
- * Usage: reverseIDs[i] = forwardIDs[ indices[ i ]]
- */
-//================================================================================
 
-const std::vector<int>& SMDS_MeshCell::reverseSmdsOrder(SMDSAbs_EntityType smdsType,
-                                                        const size_t       nbNodes)
-{
-  static std::vector< std::vector< int > > reverseInterlaces;
-  if ( reverseInterlaces.empty() )
+  //! indices to reverse an SMDS cell
+  static std::vector< std::vector< int > > theReverseInterlaces;
+
+  void initReverseInterlaces()
   {
-    reverseInterlaces.resize( SMDSEntity_Last+1 );
+    theReverseInterlaces.resize( SMDSEntity_Last+1 );
     {
       const int ids[] = {0};
-      reverseInterlaces[SMDSEntity_0D].assign( &ids[0], &ids[0]+1 );
-      reverseInterlaces[SMDSEntity_Node].assign( &ids[0], &ids[0]+1 );
-      reverseInterlaces[SMDSEntity_Ball].assign( &ids[0], &ids[0]+1 );
+      theReverseInterlaces[SMDSEntity_0D  ].assign( &ids[0], &ids[0]+1 );
+      theReverseInterlaces[SMDSEntity_Node].assign( &ids[0], &ids[0]+1 );
+      theReverseInterlaces[SMDSEntity_Ball].assign( &ids[0], &ids[0]+1 );
     }
     {
       const int ids[] = {1,0};
-      reverseInterlaces[SMDSEntity_Edge].assign( &ids[0], &ids[0]+2 );
+      theReverseInterlaces[SMDSEntity_Edge].assign( &ids[0], &ids[0]+2 );
     }
     {
       const int ids[] = {1,0,2};
-      reverseInterlaces[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
+      theReverseInterlaces[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
     }
     {
       const int ids[] = {0,2,1};
-      reverseInterlaces[SMDSEntity_Triangle].assign( &ids[0], &ids[0]+3 );
+      theReverseInterlaces[SMDSEntity_Triangle].assign( &ids[0], &ids[0]+3 );
     }
     {
       const int ids[] = {0,2,1,5,4,3};
-      reverseInterlaces[SMDSEntity_Quad_Triangle].assign( &ids[0], &ids[0]+6 );
+      theReverseInterlaces[SMDSEntity_Quad_Triangle].assign( &ids[0], &ids[0]+6 );
     }
     {
       const int ids[] = {0,2,1,5,4,3,6};
-      reverseInterlaces[SMDSEntity_BiQuad_Triangle].assign( &ids[0], &ids[0]+7 );
+      theReverseInterlaces[SMDSEntity_BiQuad_Triangle].assign( &ids[0], &ids[0]+7 );
     }
     {
       const int ids[] = {0,3,2,1};
-      reverseInterlaces[SMDSEntity_Quadrangle].assign( &ids[0], &ids[0]+4 );
+      theReverseInterlaces[SMDSEntity_Quadrangle].assign( &ids[0], &ids[0]+4 );
     }
     {
       const int ids[] = {0,3,2,1,7,6,5,4};
-      reverseInterlaces[SMDSEntity_Quad_Quadrangle].assign( &ids[0], &ids[0]+8 );
+      theReverseInterlaces[SMDSEntity_Quad_Quadrangle].assign( &ids[0], &ids[0]+8 );
     }
     {
       const int ids[] = {0,3,2,1,7,6,5,4,8};
-      reverseInterlaces[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
+      theReverseInterlaces[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
     }
     {
       const int ids[] = {0,2,1,3};
-      reverseInterlaces[SMDSEntity_Tetra].assign( &ids[0], &ids[0]+4 );
+      theReverseInterlaces[SMDSEntity_Tetra].assign( &ids[0], &ids[0]+4 );
     }
     {
       const int ids[] = {0,2,1,3,6,5,4,7,9,8};
-      reverseInterlaces[SMDSEntity_Quad_Tetra].assign( &ids[0], &ids[0]+10 );
+      theReverseInterlaces[SMDSEntity_Quad_Tetra].assign( &ids[0], &ids[0]+10 );
     }
     {
       const int ids[] = {0,3,2,1,4};
-      reverseInterlaces[SMDSEntity_Pyramid].assign( &ids[0], &ids[0]+5 );
+      theReverseInterlaces[SMDSEntity_Pyramid].assign( &ids[0], &ids[0]+5 );
     }
     {
       const int ids[] = {0,3,2,1,4,8,7,6,5,9,12,11,10};
-      reverseInterlaces[SMDSEntity_Quad_Pyramid].assign( &ids[0], &ids[0]+13 );
+      theReverseInterlaces[SMDSEntity_Quad_Pyramid].assign( &ids[0], &ids[0]+13 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5};
-      reverseInterlaces[SMDSEntity_Hexa].assign( &ids[0], &ids[0]+8 );
+      theReverseInterlaces[SMDSEntity_Hexa].assign( &ids[0], &ids[0]+8 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17};
-      reverseInterlaces[SMDSEntity_Quad_Hexa].assign( &ids[0], &ids[0]+20 );
+      theReverseInterlaces[SMDSEntity_Quad_Hexa].assign( &ids[0], &ids[0]+20 );
     }
     {
       const int ids[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17, 20,24,23,22,21,25,26};
-      reverseInterlaces[SMDSEntity_TriQuad_Hexa].assign( &ids[0], &ids[0]+27 );
+      theReverseInterlaces[SMDSEntity_TriQuad_Hexa].assign( &ids[0], &ids[0]+27 );
     }
     {
       const int ids[] = {0,2,1,3,5,4};
-      reverseInterlaces[SMDSEntity_Penta].assign( &ids[0], &ids[0]+6 );
+      theReverseInterlaces[SMDSEntity_Penta].assign( &ids[0], &ids[0]+6 );
     }
     {
       const int ids[] = {0,2,1,3,5,4, 8,7,6,11,10,9,12,14,13};
-      reverseInterlaces[SMDSEntity_Quad_Penta].assign( &ids[0], &ids[0]+15 );
+      theReverseInterlaces[SMDSEntity_Quad_Penta].assign( &ids[0], &ids[0]+15 );
     }
     {
       const int ids[] = {0,2,1,3,5,4, 8,7,6,11,10,9,12,14,13,15,16,17};
-      reverseInterlaces[SMDSEntity_BiQuad_Penta].assign( &ids[0], &ids[0]+18 );
+      theReverseInterlaces[SMDSEntity_BiQuad_Penta].assign( &ids[0], &ids[0]+18 );
     }
-   {
+    {
       const int ids[] = {0,5,4,3,2,1,6,11,10,9,8,7};
-      reverseInterlaces[SMDSEntity_Hexagonal_Prism].assign( &ids[0], &ids[0]+12 );
+      theReverseInterlaces[SMDSEntity_Hexagonal_Prism].assign( &ids[0], &ids[0]+12 );
     }
   }
 
+
+  //! indices to set nodes of a quadratic 1D or 2D element in interlaced order
+  static std::vector< std::vector< int > > theQuadInterlace;
+
+  void initQuadInterlace()
+  {
+    theQuadInterlace.resize( SMDSEntity_Last+1 );
+    {
+      const int ids[] = {0,2,1};
+      theQuadInterlace[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
+    }
+    {
+      const int ids[] = {0,3,1,4,2,5,6};
+      theQuadInterlace[SMDSEntity_Quad_Triangle  ].assign( &ids[0], &ids[0]+6 );
+      theQuadInterlace[SMDSEntity_BiQuad_Triangle].assign( &ids[0], &ids[0]+7 );
+    }
+    {
+      const int ids[] = {0,4,1,5,2,6,3,7,8};
+      theQuadInterlace[SMDSEntity_Quad_Quadrangle  ].assign( &ids[0], &ids[0]+8 );
+      theQuadInterlace[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
+    }
+  }
+
+
+  //! indices to transform cell connectivity from VTK to SMDS
+  static std::vector< std::vector<int> > theFromVtkInterlaces;
+
+  void initFromVtkInterlaces()
+  {
+    theFromVtkInterlaces.resize( SMDSEntity_Last+1 );
+    for ( int iSMDS = 0; iSMDS < SMDSEntity_Last; ++iSMDS )
+    {
+      const std::vector<int> & toVtk = SMDS_MeshCell::toVtkOrder( SMDSAbs_EntityType( iSMDS ));
+      std::vector<int> &      toSmds = theFromVtkInterlaces[ iSMDS ];
+      toSmds.resize( toVtk.size() );
+      for ( size_t i = 0; i < toVtk.size(); ++i )
+        toSmds[ toVtk[i] ] = i;
+    }
+  }
+
+} // namespace
+
+void SMDS_MeshCell::InitStaticMembers()
+{
+  if ( theCellProps.empty() )
+  {
+    initCellProps();
+    initVtkTypes();
+    initToVtkInterlaces();
+    initReverseInterlaces();
+    initQuadInterlace();
+    initFromVtkInterlaces();
+  }
+}
+
+void SMDS_MeshCell::init( SMDSAbs_EntityType theEntity, int theNbNodes, ... )
+{
+  ASSERT( getCellProps( theEntity ).myNbNodes == theNbNodes ||
+          getCellProps( theEntity ).myIsPoly);
+
+  va_list vl;
+  va_start( vl, theNbNodes );
+
+  vtkIdType vtkIds[ VTK_CELL_SIZE ];
+  typedef const SMDS_MeshNode* node_t;
+
+  const std::vector<int>& interlace = toVtkOrder( theEntity );
+  if ((int) interlace.size() == theNbNodes )
+  {
+    const SMDS_MeshNode* nodes[ VTK_CELL_SIZE ];
+    for ( int i = 0; i < theNbNodes; i++ )
+      nodes[i] = va_arg( vl, node_t );
+
+    for ( int i = 0; i < theNbNodes; i++ )
+      vtkIds[i] = nodes[ interlace[i] ]->GetVtkID();
+  }
+  else
+  {
+    for ( int i = 0; i < theNbNodes; i++ )
+      vtkIds[i] = va_arg( vl, node_t )->GetVtkID();
+  }
+  va_end( vl );
+
+  int vtkType = toVtkType( theEntity );
+  int   vtkID = getGrid()->InsertNextLinkedCell( vtkType, theNbNodes, vtkIds );
+  setVtkID( vtkID );
+}
+
+void SMDS_MeshCell::init( SMDSAbs_EntityType                       theEntity,
+                          const std::vector<const SMDS_MeshNode*>& nodes )
+{
+  std::vector< vtkIdType > vtkIds( nodes.size() );
+  for ( size_t i = 0; i < nodes.size(); ++i )
+    vtkIds[i] = nodes[i]->GetVtkID();
+
+  int vtkType = toVtkType( theEntity );
+  int   vtkID = getGrid()->InsertNextLinkedCell( vtkType, nodes.size(), &vtkIds[0] );
+  setVtkID( vtkID );
+}
+
+void SMDS_MeshCell::init( SMDSAbs_EntityType            theEntity,
+                          const std::vector<vtkIdType>& vtkNodeIds )
+{
+  int vtkType = toVtkType( theEntity );
+  int   vtkID = getGrid()->InsertNextLinkedCell( vtkType, vtkNodeIds.size(),
+                                                 const_cast< vtkIdType* > ( &vtkNodeIds[0] ));
+  setVtkID( vtkID );
+}
+
+bool SMDS_MeshCell::ChangeNodes(const SMDS_MeshNode* nodes[], const int theNbNodes)
+{
+  vtkIdType npts = 0;
+  vtkIdType* pts = 0;
+  getGrid()->GetCellPoints( GetVtkID(), npts, pts );
+  if ( theNbNodes != npts )
+  {
+    MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << theNbNodes);
+    return false;
+  }
+  const std::vector<int>& interlace = toVtkOrder((VTKCellType) GetVtkType() );
+  if ((int) interlace.size() != theNbNodes )
+    for ( int i = 0; i < theNbNodes; i++ )
+    {
+      pts[i] = nodes[i]->GetVtkID();
+    }
+  else
+    for ( int i = 0; i < theNbNodes; i++ )
+    {
+      pts[i] = nodes[ interlace[i] ]->GetVtkID();
+    }
+
+  return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///Return The number of nodes owned by the current element
+///////////////////////////////////////////////////////////////////////////////
+int SMDS_MeshCell::NbNodes() const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes();
+  vtkIdType *pts, npts;
+  getGrid()->GetCellPoints( GetVtkID(), npts, pts );
+  return npts;
+}
+
+int SMDS_MeshCell::NbFaces() const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbFaces();
+  return getCellProps( GetVtkType() ).myNbFaces;
+}
+
+int SMDS_MeshCell::NbEdges() const
+{
+  switch ( GetEntityType() )
+  {
+  case SMDSEntity_Polyhedra:
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbEdges();
+  case SMDSEntity_Polygon:
+    return NbNodes();
+  case SMDSEntity_Quad_Polygon:
+    return NbNodes() / 2;
+  default:;
+  }
+  return getCellProps( GetVtkType() ).myNbEdges;
+}
+
+int SMDS_MeshCell::NbCornerNodes() const
+{
+  switch ( GetVtkType() )
+  {
+  case VTK_POLYHEDRON:
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbCornerNodes();
+  case VTK_POLYGON:
+    return NbNodes();
+  case VTK_QUADRATIC_POLYGON:
+    return NbNodes() / 2;
+  default:;
+  }
+  return getCellProps( GetVtkType() ).myNbCornerNodes;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// Create an iterator which iterate on nodes owned by the element.
+///////////////////////////////////////////////////////////////////////////////
+SMDS_ElemIteratorPtr SMDS_MeshCell::nodesIterator() const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodesIterator();
+
+  return boost::make_shared< SMDS_VtkCellIterator<> >( GetMesh(), GetVtkID(), GetEntityType());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// Create an iterator which iterate on nodes owned by the element.
+///////////////////////////////////////////////////////////////////////////////
+SMDS_NodeIteratorPtr SMDS_MeshCell::nodeIterator() const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodeIterator();
+
+  return SMDS_NodeIteratorPtr
+    (new SMDS_VtkCellIterator<SMDS_NodeIterator>( GetMesh(), GetVtkID(), GetEntityType()));
+}
+
+SMDS_NodeIteratorPtr SMDS_MeshCell::interlacedNodesIterator() const
+{
+  bool canInterlace = ( GetType() == SMDSAbs_Face || GetType() == SMDSAbs_Edge );
+  return canInterlace ? nodesIteratorToUNV() : nodeIterator();
+}
+
+SMDS_NodeIteratorPtr SMDS_MeshCell::nodesIteratorToUNV() const
+{
+  return SMDS_NodeIteratorPtr
+    (new SMDS_VtkCellIteratorToUNV<SMDS_NodeIterator>( GetMesh(), GetVtkID(), GetEntityType()));
+}
+
+SMDSAbs_ElementType SMDS_MeshCell::GetType() const
+{
+  return getCellProps( GetVtkType() ).myType;
+}
+
+SMDSAbs_EntityType SMDS_MeshCell::GetEntityType() const
+{
+  return toSmdsType( (VTKCellType) GetVtkType() );
+}
+
+SMDSAbs_GeometryType SMDS_MeshCell::GetGeomType() const
+{
+  return getCellProps( GetVtkType() ).myGeom;
+}
+
+VTKCellType SMDS_MeshCell::GetVtkType() const
+{
+  return (VTKCellType) getGrid()->GetCellType( GetVtkID() );
+}
+
+bool SMDS_MeshCell::IsPoly() const
+{
+  return getCellProps( GetVtkType() ).myIsPoly;
+}
+
+bool SMDS_MeshCell::IsQuadratic() const
+{
+  return getCellProps( GetVtkType() ).myIsQuadratic;
+}
+
+const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNode( ind );
+
+  vtkIdType npts, *pts;
+  getGrid()->GetCellPoints( GetVtkID(), npts, pts );
+  const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( GetVtkType() ));
+  return GetMesh()->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ ind ]]);
+}
+
+int SMDS_MeshCell::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+  if ( GetVtkType() == VTK_POLYHEDRON )
+    return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNodeIndex( node );
+
+  vtkIdType npts, *pts;
+  getGrid()->GetCellPoints( GetVtkID(), npts, pts );
+  for ( vtkIdType i = 0; i < npts; ++i )
+    if ( pts[i] == node->GetVtkID() )
+    {
+      const std::vector<int>& interlace = SMDS_MeshCell::toVtkOrder( VTKCellType( GetVtkType() ));
+      return interlace.empty() ? i : interlace[i];
+    }
+  return -1;
+}
+
+//================================================================================
+/*!
+ * \brief Return VTKCellType corresponding to SMDSAbs_EntityType
+ */
+//================================================================================
+
+VTKCellType SMDS_MeshCell::toVtkType (SMDSAbs_EntityType smdsType)
+{
+  return theVtkTypes[ smdsType ];
+}
+
+//================================================================================
+/*!
+ * \brief Return indices to transform cell connectivity from SMDS to VTK
+ * Usage: vtkIDs[i] = smdsIDs[ indices[ i ]]
+ */
+//================================================================================
+
+const std::vector< int >& SMDS_MeshCell::toVtkOrder(SMDSAbs_EntityType smdsType)
+{
+  return theToVtkInterlaces[ smdsType ];
+}
+
+//================================================================================
+/*!
+ * \brief Return indices to reverse an SMDS cell of given type.
+ *        nbNodes is useful for polygons
+ * Usage: reverseIDs[i] = forwardIDs[ indices[ i ]]
+ */
+//================================================================================
+
+const std::vector<int>& SMDS_MeshCell::reverseSmdsOrder(SMDSAbs_EntityType smdsType,
+                                                        const size_t       nbNodes)
+{
   if ( smdsType == SMDSEntity_Polygon )
   {
-    if ( reverseInterlaces[ smdsType ].size() != nbNodes )
+    if ( theReverseInterlaces[ smdsType ].size() != nbNodes )
     {
-      reverseInterlaces[ smdsType ].resize( nbNodes );
+      theReverseInterlaces[ smdsType ].resize( nbNodes );
       for ( size_t i = 0; i < nbNodes; ++i )
-        reverseInterlaces[ smdsType ][i] = nbNodes - i - 1;
+        theReverseInterlaces[ smdsType ][i] = nbNodes - i - 1;
     }
   }
   else if ( smdsType == SMDSEntity_Quad_Polygon )
   {
-    if ( reverseInterlaces[ smdsType ].size() != nbNodes )
+    if ( theReverseInterlaces[ smdsType ].size() != nbNodes )
     {
       // e.g. for 8 nodes: [ 0, 3,2,1, 7,6,5,4 ]
-      reverseInterlaces[ smdsType ].resize( nbNodes );
+      theReverseInterlaces[ smdsType ].resize( nbNodes );
       size_t pos = 0;
-      reverseInterlaces[ smdsType ][pos++] = 0;
+      theReverseInterlaces[ smdsType ][pos++] = 0;
       for ( int i = nbNodes / 2 - 1; i > 0 ; --i ) // 3,2,1
-        reverseInterlaces[ smdsType ][pos++] = i;
+        theReverseInterlaces[ smdsType ][pos++] = i;
       for ( int i = nbNodes - 1, nb = nbNodes / 2; i >= nb; --i ) // 7,6,5,4
-        reverseInterlaces[ smdsType ][pos++] = i;
+        theReverseInterlaces[ smdsType ][pos++] = i;
     }
   }
-  
-  return reverseInterlaces[smdsType];
+
+  return theReverseInterlaces[ smdsType ];
 }
 
 //================================================================================
@@ -305,39 +724,19 @@ const std::vector<int>& SMDS_MeshCell::reverseSmdsOrder(SMDSAbs_EntityType smdsT
 const std::vector<int>& SMDS_MeshCell::interlacedSmdsOrder(SMDSAbs_EntityType smdsType,
                                                            const size_t       nbNodes)
 {
-  static std::vector< std::vector< int > > interlace;
-  if ( interlace.empty() )
-  {
-    interlace.resize( SMDSEntity_Last+1 );
-    {
-      const int ids[] = {0,2,1};
-      interlace[SMDSEntity_Quad_Edge].assign( &ids[0], &ids[0]+3 );
-    }
-    {
-      const int ids[] = {0,3,1,4,2,5,6};
-      interlace[SMDSEntity_Quad_Triangle  ].assign( &ids[0], &ids[0]+6 );
-      interlace[SMDSEntity_BiQuad_Triangle].assign( &ids[0], &ids[0]+7 );
-    }
-    {
-      const int ids[] = {0,4,1,5,2,6,3,7,8};
-      interlace[SMDSEntity_Quad_Quadrangle  ].assign( &ids[0], &ids[0]+8 );
-      interlace[SMDSEntity_BiQuad_Quadrangle].assign( &ids[0], &ids[0]+9 );
-    }
-  }
-
   if ( smdsType == SMDSEntity_Quad_Polygon )
   {
-    if ( interlace[smdsType].size() != nbNodes )
+    if ( theQuadInterlace[smdsType].size() != nbNodes )
     {
-      interlace[smdsType].resize( nbNodes );
+      theQuadInterlace[smdsType].resize( nbNodes );
       for ( size_t i = 0; i < nbNodes / 2; ++i )
       {
-        interlace[smdsType][i*2+0] = i;
-        interlace[smdsType][i*2+1] = i + nbNodes / 2;
+        theQuadInterlace[smdsType][i*2+0] = i;
+        theQuadInterlace[smdsType][i*2+1] = i + nbNodes / 2;
       }
     }
   }
-  return interlace[smdsType];
+  return theQuadInterlace[smdsType];
 }
 
 //================================================================================
@@ -348,14 +747,7 @@ const std::vector<int>& SMDS_MeshCell::interlacedSmdsOrder(SMDSAbs_EntityType sm
 
 SMDSAbs_EntityType SMDS_MeshCell::toSmdsType(VTKCellType vtkType)
 {
-  static std::vector< SMDSAbs_EntityType > smdsTypes;
-  if ( smdsTypes.empty() )
-  {
-    smdsTypes.resize( VTK_NUMBER_OF_CELL_TYPES, SMDSEntity_Last );
-    for ( int iSMDS = 0; iSMDS < SMDSEntity_Last; ++iSMDS )
-      smdsTypes[ toVtkType( SMDSAbs_EntityType( iSMDS ))] = SMDSAbs_EntityType( iSMDS );
-  }
-  return smdsTypes[ vtkType ];
+  return getCellProps( vtkType ).myEntity;
 }
 
 //================================================================================
@@ -364,12 +756,12 @@ SMDSAbs_EntityType SMDS_MeshCell::toSmdsType(VTKCellType vtkType)
  */
 //================================================================================
 
-SMDSAbs_ElementType SMDS_MeshCell::toSmdsType(SMDSAbs_GeometryType geomType)
+SMDSAbs_ElementType SMDS_MeshCell::ElemType(SMDSAbs_GeometryType geomType)
 {
   switch ( geomType ) {
   case SMDSGeom_POINT:     return SMDSAbs_0DElement;
 
-  case SMDSGeom_EDGE:      return SMDSAbs_Edge; 
+  case SMDSGeom_EDGE:      return SMDSAbs_Edge;
 
   case SMDSGeom_TRIANGLE:
   case SMDSGeom_QUADRANGLE:
@@ -395,46 +787,45 @@ SMDSAbs_ElementType SMDS_MeshCell::toSmdsType(SMDSAbs_GeometryType geomType)
  */
 //================================================================================
 
-SMDSAbs_ElementType SMDS_MeshCell::toSmdsType(SMDSAbs_EntityType entityType)
+SMDSAbs_ElementType SMDS_MeshCell::ElemType(SMDSAbs_EntityType entityType)
 {
-  switch ( entityType ) {
-  case SMDSEntity_Node:           return SMDSAbs_Node;
+  return getCellProps( entityType ).myType;
+}
 
-  case SMDSEntity_0D:             return SMDSAbs_0DElement;
+SMDSAbs_GeometryType SMDS_MeshCell::GeomType( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myGeom;
+}
 
-  case SMDSEntity_Edge:
-  case SMDSEntity_Quad_Edge:      return SMDSAbs_Edge;
+bool SMDS_MeshCell::IsPoly( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myIsPoly;
+}
 
-  case SMDSEntity_Triangle:
-  case SMDSEntity_Quad_Triangle:
-  case SMDSEntity_BiQuad_Triangle:
-  case SMDSEntity_Quadrangle:
-  case SMDSEntity_Quad_Quadrangle:
-  case SMDSEntity_BiQuad_Quadrangle:
-  case SMDSEntity_Polygon:
-  case SMDSEntity_Quad_Polygon:   return SMDSAbs_Face;
-
-  case SMDSEntity_Tetra:
-  case SMDSEntity_Quad_Tetra:
-  case SMDSEntity_Pyramid:
-  case SMDSEntity_Quad_Pyramid:
-  case SMDSEntity_Hexa:
-  case SMDSEntity_Quad_Hexa:
-  case SMDSEntity_TriQuad_Hexa:
-  case SMDSEntity_Penta:
-  case SMDSEntity_Quad_Penta:
-  case SMDSEntity_BiQuad_Penta:
-  case SMDSEntity_Hexagonal_Prism:
-  case SMDSEntity_Polyhedra:
-  case SMDSEntity_Quad_Polyhedra: return SMDSAbs_Volume;
+bool SMDS_MeshCell::IsQuadratic( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myIsQuadratic;
+}
 
-  case SMDSEntity_Ball:           return SMDSAbs_Ball;
+int SMDS_MeshCell::NbCornerNodes( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myNbCornerNodes;
+}
 
-  case SMDSEntity_Last:;
-  }
-  return SMDSAbs_All;
+int SMDS_MeshCell::NbNodes( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myNbNodes;
+}
+
+int SMDS_MeshCell::NbEdges( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myNbEdges;
 }
 
+int SMDS_MeshCell::NbFaces( SMDSAbs_EntityType entityType )
+{
+  return getCellProps( entityType ).myNbFaces;
+}
 
 //================================================================================
 /*!
@@ -445,20 +836,7 @@ SMDSAbs_ElementType SMDS_MeshCell::toSmdsType(SMDSAbs_EntityType entityType)
 
 const std::vector<int>& SMDS_MeshCell::fromVtkOrder(SMDSAbs_EntityType smdsType)
 {
-  static std::vector< std::vector<int> > fromVtkInterlaces;
-  if ( fromVtkInterlaces.empty() )
-  {
-    fromVtkInterlaces.resize( SMDSEntity_Last+1 );
-    for ( int iSMDS = 0; iSMDS < SMDSEntity_Last; ++iSMDS )
-    {
-      const std::vector<int> & toVtk = toVtkOrder( SMDSAbs_EntityType( iSMDS ));
-      std::vector<int> &      toSmds = fromVtkInterlaces[ iSMDS ];
-      toSmds.resize( toVtk.size() );
-      for ( size_t i = 0; i < toVtk.size(); ++i )
-        toSmds[ toVtk[i] ] = i;
-    }
-  }
-  return fromVtkInterlaces[ smdsType ];
+  return theFromVtkInterlaces[ smdsType ];
 }
 
 //================================================================================
index 413b1265ab6e3f729e8f6587a16de5e33e88deb1..dd7d9d9d9c4a0da402135ee94ed3de05fecb4230 100644 (file)
 
 #include "SMDS_MeshElement.hxx"
 
+#include <vector>
+
 /*!
  * \brief Base class for all cells
  */
 
 class SMDS_EXPORT SMDS_MeshCell: public SMDS_MeshElement
 {
-public:
-  SMDS_MeshCell();
-  virtual ~SMDS_MeshCell();
+ protected:
+
+  void init( SMDSAbs_EntityType entityType, int nbNodes, ... );
+
+  void init( SMDSAbs_EntityType entityType, const std::vector<const SMDS_MeshNode*>& nodes );
+
+  void init( SMDSAbs_EntityType entityType, const std::vector<vtkIdType>& vtkNodeIds );
+
+  friend class SMDS_Mesh;
+
+ public:
+
+  virtual int  NbEdges() const;
+  virtual int  NbFaces() const;
+  virtual int  NbNodes() const;
+  virtual int  NbCornerNodes() const;
+  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
+  virtual int  GetNodeIndex( const SMDS_MeshNode* node ) const;
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
 
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)= 0;
-  virtual bool vtkOrder(const SMDS_MeshNode* nodes[], const int nbNodes) { return true; }
+  virtual SMDSAbs_ElementType  GetType() const;
+  virtual SMDSAbs_EntityType   GetEntityType() const;
+  virtual SMDSAbs_GeometryType GetGeomType() const;
+  virtual VTKCellType          GetVtkType() const;
 
-  static VTKCellType         toVtkType (SMDSAbs_EntityType vtkType);
-  static SMDSAbs_EntityType  toSmdsType(VTKCellType vtkType);
-  static SMDSAbs_ElementType toSmdsType(SMDSAbs_GeometryType geomType);
-  static SMDSAbs_ElementType toSmdsType(SMDSAbs_EntityType entityType);
+  virtual bool IsPoly() const;
+  virtual bool IsQuadratic() const;
+
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
+  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const;
+
+
+  static void InitStaticMembers();
+  static VTKCellType          toVtkType    ( SMDSAbs_EntityType   entityType );
+  static SMDSAbs_EntityType   toSmdsType   ( VTKCellType          vtkType );
+  static SMDSAbs_ElementType  ElemType     ( SMDSAbs_GeometryType geomType );
+  static SMDSAbs_ElementType  ElemType     ( SMDSAbs_EntityType   entityType );
+  static SMDSAbs_GeometryType GeomType     ( SMDSAbs_EntityType   entityType );
+  static bool                 IsPoly       ( SMDSAbs_EntityType   entityType );
+  static bool                 IsQuadratic  ( SMDSAbs_EntityType   entityType );
+  static int                  NbCornerNodes( SMDSAbs_EntityType   entityType );
+  static int                  NbNodes      ( SMDSAbs_EntityType   entityType );
+  static int                  NbEdges      ( SMDSAbs_EntityType   entityType );
+  static int                  NbFaces      ( SMDSAbs_EntityType   entityType );
 
   static const std::vector<int>& toVtkOrder(VTKCellType vtkType);
   static const std::vector<int>& toVtkOrder(SMDSAbs_EntityType smdsType);
@@ -50,6 +87,7 @@ public:
   static const std::vector<int>& interlacedSmdsOrder(SMDSAbs_EntityType smdsType,
                                                      const size_t       nbNodes=0);
 
+
   template< class VECT > // interlacedIDs[i] = smdsIDs[ indices[ i ]]
     static void applyInterlace( const std::vector<int>& interlace, VECT & data)
   {
@@ -69,15 +107,6 @@ public:
     data.swap( tmpData );
   }
 
-  static int nbCells;
-
-protected:
-  inline void exchange(const SMDS_MeshNode* nodes[],int a, int b)
-  {
-    const SMDS_MeshNode* noda = nodes[a];
-    nodes[a] = nodes[b];
-    nodes[b] = noda;
-  }
 };
 
 #endif
diff --git a/src/SMDS/SMDS_MeshEdge.cxx b/src/SMDS/SMDS_MeshEdge.cxx
deleted file mode 100644 (file)
index 672adee..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "SMDS_MeshEdge.hxx"
-
-SMDSAbs_ElementType SMDS_MeshEdge::GetType() const
-{
-        return SMDSAbs_Edge;
-}
-
-vtkIdType SMDS_MeshEdge::GetVtkType() const
-{
-  return VTK_POLY_VERTEX; // --- must be reimplemented in derived classes
-}
index 423d96241f8e11cadd1cfc0d0df91296e4c7f3a7..462028e911091179350e1d86ca90e1c8c3f858c3 100644 (file)
 
 #include "SMDS_MeshCell.hxx"
 
+/*!
+ * \brief Edge mesh element. This type is not allocated.
+ *        It is only used as function argument type to provide more clear semantic.
+ */
 class SMDS_EXPORT SMDS_MeshEdge: public SMDS_MeshCell
 {
-        
  public:
-  virtual SMDSAbs_ElementType  GetType() const;
-  virtual vtkIdType            GetVtkType() const;
+  virtual SMDSAbs_ElementType  GetType()     const { return SMDSAbs_Edge; }
   virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_EDGE; }
+
+  static SMDSAbs_ElementType Type() { return SMDSAbs_Edge; }
 };
 #endif
index 31119a8eda8abc03dfd6cb094b9c797cf14bb73c..48221c7c6861dda72d67072bf44434508399b404 100644 (file)
 #endif
 
 #include "SMDS_MeshElement.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_MeshEdge.hxx"
-#include "SMDS_MeshFace.hxx"
-#include "SMDS_MeshVolume.hxx"
+
+#include "SMDS_Mesh.hxx"
+#include "SMDS_ElementFactory.hxx"
+
 #include "utilities.h"
 
-using namespace std;
+//================================================================================
+/*!
+ * \brief Constructor of a non-used element
+ */
+//================================================================================
 
-SMDS_MeshElement::SMDS_MeshElement(int ID)
+SMDS_MeshElement::SMDS_MeshElement(): myHolder(0)
 {
-  init(ID);
 }
 
-SMDS_MeshElement::SMDS_MeshElement(int id, ShortType meshId, LongType shapeId)
-{
-  init(id, meshId, shapeId);
-}
+//================================================================================
+/*!
+ * \brief Check if a node is a medium node of a quadratic cell
+ */
+//================================================================================
 
-void SMDS_MeshElement::init(int id, ShortType meshId, LongType shapeId )
+bool SMDS_MeshElement::IsMediumNode(const SMDS_MeshNode* node) const
 {
-  myID = id;
-  myMeshId = meshId;
-  myShapeId = shapeId;
-  myIdInShape = -1;
+  return !( GetNodeIndex( node ) < NbCornerNodes() );
 }
 
-void SMDS_MeshElement::Print(ostream & OS) const
-{
-  OS << "dump of mesh element" << endl;
-}
+//================================================================================
+/*!
+ * \brief Return true if index of node is valid (0 <= ind < NbNodes())
+ *  \param ind - node index
+ *  \retval bool - index check result
+ */
+//================================================================================
 
-ostream & operator <<(ostream & OS, const SMDS_MeshElement * ME)
+bool SMDS_MeshElement::IsValidIndex(const int ind) const
 {
-  ME->Print(OS);
-  return OS;
+  return ( ind>-1 && ind<NbNodes() );
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Create an iterator which iterate on nodes owned by the element.
-/// This method call elementsIterator().
-///////////////////////////////////////////////////////////////////////////////
-SMDS_ElemIteratorPtr SMDS_MeshElement::nodesIterator() const
-{
-  return elementsIterator(SMDSAbs_Node);
-}
+//================================================================================
+/*!
+ * \brief Return a valid corner node index, fixing the given one if necessary
+ * \param ind - node index
+ * \retval int - valid node index
+ */
+//================================================================================
 
-///////////////////////////////////////////////////////////////////////////////
-/// Create an iterator which iterate on edges linked with or owned by the element.
-/// This method call elementsIterator().
-///////////////////////////////////////////////////////////////////////////////
-SMDS_ElemIteratorPtr SMDS_MeshElement::edgesIterator() const
+int SMDS_MeshElement::WrappedIndex(const int ind) const
 {
-  return elementsIterator(SMDSAbs_Edge);
+  if ( ind < 0 ) return NbCornerNodes() + ind % NbCornerNodes();
+  if ( ind >= NbCornerNodes() ) return ind % NbCornerNodes();
+  return ind;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Create an iterator which iterate on faces linked with or owned by the element.
-/// This method call elementsIterator().
-///////////////////////////////////////////////////////////////////////////////
-SMDS_ElemIteratorPtr SMDS_MeshElement::facesIterator() const
-{
-  return elementsIterator(SMDSAbs_Face);
-}
+//================================================================================
+/*!
+ * \brief Check if a node belongs to the element
+ * \param node - the node to check
+ * \retval int - node index within the element, -1 if not found
+ */
+//================================================================================
 
-///////////////////////////////////////////////////////////////////////////////
-///Return The number of nodes owned by the current element
-///////////////////////////////////////////////////////////////////////////////
-int SMDS_MeshElement::NbNodes() const
+int SMDS_MeshElement::GetNodeIndex( const SMDS_MeshNode* node ) const
 {
-  int nbnodes=0;
-  SMDS_ElemIteratorPtr it=nodesIterator();
-  while(it->more())
-  {
-    it->next();
-    nbnodes++;
-  }
-  return nbnodes;
+  SMDS_ElemIteratorPtr nIt = nodesIterator();
+  for ( int i = 0; nIt->more(); ++i )
+    if ( nIt->next() == node )
+      return i;
+  return -1;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-///Return the number of edges owned by or linked with the current element
-///////////////////////////////////////////////////////////////////////////////
-int SMDS_MeshElement::NbEdges() const
-{
-  int nbedges=0;
-  SMDS_ElemIteratorPtr it=edgesIterator();
-  while(it->more())
-  {
-    it->next();
-    nbedges++;
-  }
-  return nbedges;
-}
+//================================================================================
+/*!
+ * \brief Return ID of an element
+ */
+//================================================================================
 
-///////////////////////////////////////////////////////////////////////////////
-///Return the number of faces owned by or linked with the current element
-///////////////////////////////////////////////////////////////////////////////
-int SMDS_MeshElement::NbFaces() const
+int SMDS_MeshElement::GetID() const
 {
-  int nbfaces=0;
-  SMDS_ElemIteratorPtr it=facesIterator();
-  while(it->more())
-  {
-    it->next();
-    nbfaces++;
-  }
-  return nbfaces;
+  return myHolder ? myHolder->GetID( this ) : -1;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-///Create an iterator which iterate on elements linked with the current element.
-///@param type The of elements on which you want to iterate
-///@return A smart pointer to iterator, you are not to take care of freeing memory
-///////////////////////////////////////////////////////////////////////////////
-class SMDS_MeshElement_MyIterator:public SMDS_ElemIterator
-{
-  const SMDS_MeshElement * myElement;
-  bool myMore;
-public:
-  SMDS_MeshElement_MyIterator(const SMDS_MeshElement * element):
-    myElement(element),myMore(true) {}
-
-  bool more()
-  {
-    return myMore;
-  }
-
-  const SMDS_MeshElement* next()
-  {
-    myMore=false;
-    return myElement;   
-  }     
-};
-
-SMDS_ElemIteratorPtr
-SMDS_MeshElement::elementsIterator(SMDSAbs_ElementType type) const
-{
-  /** @todo Check that iterator in the child classes return elements
-      in the same order for each different implementation (i.e: SMDS_VolumeOfNodes
-      and SMDS_VolumeOfFaces */
-  if(type==GetType())
-    return SMDS_ElemIteratorPtr(new SMDS_MeshElement_MyIterator(this));
-  else
-  {
-    MESSAGE("Iterator not implemented");
-    return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
-  }
-}
+//================================================================================
+/*!
+ * \brief Set ID of a shape this element was generated on
+ */
+//================================================================================
 
-//! virtual, redefined in vtkEdge, vtkFace and vtkVolume classes
-SMDS_NodeIteratorPtr SMDS_MeshElement::nodesIteratorToUNV() const
+void SMDS_MeshElement::setShapeID( const int shapeID ) const
 {
-  return nodeIterator();
+  const_cast<SMDS_ElementChunk*>( myHolder )->SetShapeID( this, shapeID );
 }
 
-//! virtual, redefined in vtkEdge, vtkFace and vtkVolume classes
-SMDS_NodeIteratorPtr SMDS_MeshElement::interlacedNodesIterator() const
-{
-  return nodeIterator();
-}
+//================================================================================
+/*!
+ * \brief Return ID of a shape this element was generated on
+ */
+//================================================================================
 
-namespace
+int SMDS_MeshElement::GetShapeID() const
 {
-  //=======================================================================
-  //class : _MyNodeIteratorFromElemIterator
-  //=======================================================================
-  class _MyNodeIteratorFromElemIterator : public SMDS_NodeIterator
-  {
-    SMDS_ElemIteratorPtr myItr;
-  public:
-    _MyNodeIteratorFromElemIterator(SMDS_ElemIteratorPtr elemItr):myItr( elemItr ) {}
-    bool                 more() { return myItr->more(); }
-    const SMDS_MeshNode* next() { return static_cast< const SMDS_MeshNode*>( myItr->next() ); }
-  };
-  //=======================================================================
-  //class : _MyElemIteratorFromNodeIterator
-  //=======================================================================
-  class _MyElemIteratorFromNodeIterator : public SMDS_ElemIterator
-  {
-    SMDS_NodeIteratorPtr myItr;
-  public:
-    _MyElemIteratorFromNodeIterator(SMDS_NodeIteratorPtr nodeItr): myItr( nodeItr ) {}
-    bool more()                    { return myItr->more(); }
-    const SMDS_MeshElement* next() { return myItr->next(); }
-  };
+  return myHolder->GetShapeID( this );
 }
 
-SMDS_ElemIteratorPtr SMDS_MeshElement::interlacedNodesElemIterator() const
-{
-  return SMDS_ElemIteratorPtr
-    ( new _MyElemIteratorFromNodeIterator( interlacedNodesIterator() ));
-}
+//================================================================================
+/*!
+ * \brief Return VTK ID of this element
+ */
+//================================================================================
 
-SMDS_NodeIteratorPtr SMDS_MeshElement::nodeIterator() const
+int SMDS_MeshElement::GetVtkID() const
 {
-  return SMDS_NodeIteratorPtr
-    ( new _MyNodeIteratorFromElemIterator( nodesIterator() ));
+  return myHolder->GetVtkID( this );
 }
 
-bool operator<(const SMDS_MeshElement& e1, const SMDS_MeshElement& e2)
-{
-  if(e1.GetType()!=e2.GetType()) return false;
-  switch(e1.GetType())
-  {
-  case SMDSAbs_Node:
-    return static_cast<const SMDS_MeshNode &>(e1) <
-    static_cast<const SMDS_MeshNode &>(e2);
-
-  case SMDSAbs_Edge:
-    return static_cast<const SMDS_MeshEdge &>(e1) <
-    static_cast<const SMDS_MeshEdge &>(e2);
-
-  case SMDSAbs_Face:
-    return static_cast<const SMDS_MeshFace &>(e1) <
-    static_cast<const SMDS_MeshFace &>(e2);
-
-  case SMDSAbs_Volume:
-    return static_cast<const SMDS_MeshVolume &>(e1) <
-    static_cast<const SMDS_MeshVolume &>(e2);
-
-  default : MESSAGE("Internal Error");
-  }
-  return false;
-}
+//================================================================================
+/*!
+ * \brief Mark this element
+ */
+//================================================================================
 
-bool SMDS_MeshElement::IsValidIndex(const int ind) const
+void SMDS_MeshElement::setIsMarked( bool is ) const
 {
-  return ( ind>-1 && ind<NbNodes() );
+  const_cast<SMDS_ElementChunk*>( myHolder )->SetIsMarked( this, is );
 }
 
-const SMDS_MeshNode* SMDS_MeshElement::GetNode(const int ind) const
+//================================================================================
+/*!
+ * \brief Check if this element is marked
+ */
+//================================================================================
+
+bool SMDS_MeshElement::isMarked() const
 {
-  if ( ind >= 0 ) {
-    SMDS_ElemIteratorPtr it = nodesIterator();
-    for ( int i = 0; i < ind; ++i )
-      it->next();
-    if ( it->more() )
-      return static_cast<const SMDS_MeshNode*> (it->next());
-  }
-  return 0;
+  return myHolder->IsMarked( this );
 }
 
-bool SMDS_MeshElement::IsQuadratic() const
+//================================================================================
+/*!
+ * \brief Store VTK ID
+ */
+//================================================================================
+
+void SMDS_MeshElement::setVtkID( const int vtkID )
 {
-  return false;
+  myHolder->SetVTKID( this, vtkID );
 }
 
-bool SMDS_MeshElement::IsMediumNode(const SMDS_MeshNode* node) const
+//================================================================================
+/*!
+ * \brief Return the mesh this element belongs to
+ */
+//================================================================================
+
+SMDS_Mesh* SMDS_MeshElement::GetMesh() const
 {
-  return false;
+  return const_cast<SMDS_ElementChunk*>( myHolder )->GetMesh();
 }
 
 //================================================================================
 /*!
- * \brief Return number of nodes excluding medium ones
+ * \brief Return a SMDS_UnstructuredGrid
  */
 //================================================================================
 
-int SMDS_MeshElement::NbCornerNodes() const
+SMDS_UnstructuredGrid* SMDS_MeshElement::getGrid() const
 {
-  return IsQuadratic() ? NbNodes() - NbEdges() : NbNodes();
+  return const_cast<SMDS_ElementChunk*>( myHolder )->GetMesh()->GetGrid();
 }
 
 //================================================================================
 /*!
- * \brief Check if a node belongs to the element
- * \param node - the node to check
- * \retval int - node index within the element, -1 if not found
+ * \brief Print self
  */
 //================================================================================
 
-int SMDS_MeshElement::GetNodeIndex( const SMDS_MeshNode* node ) const
+void SMDS_MeshElement::Print(ostream & OS) const
 {
-  SMDS_ElemIteratorPtr nIt = nodesIterator();
-  for ( int i = 0; nIt->more(); ++i )
-    if ( nIt->next() == node )
-      return i;
-  return -1;
+  OS << "dump of mesh element" << endl;
+}
+
+ostream & operator <<(ostream & OS, const SMDS_MeshElement * e)
+{
+  e->Print(OS);
+  return OS;
 }
index 4634548aa4f2fa9146bd251edbf23c7300627196..63fc8cecf14b41858a93d74b63e3b6700056c426 100644 (file)
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshObject.hxx"
 #include "SMDS_ElemIterator.hxx"
-#include "SMDS_MeshElementIDFactory.hxx"
 #include "SMDS_StdIterator.hxx"
 
-#include <vector>
 #include <iostream>
 
 #include <vtkType.h>
 #include <vtkCellType.h>
 
-//typedef unsigned short UShortType;
-typedef short ShortType;
-typedef int   LongType;
-
-class SMDS_MeshNode;
-class SMDS_MeshEdge;
-class SMDS_MeshFace;
+class SMDS_ElementChunk;
 class SMDS_Mesh;
+class SMDS_MeshNode;
+class SMDS_UnstructuredGrid;
 
 // ============================================================
 /*!
@@ -61,43 +55,36 @@ class SMDS_EXPORT SMDS_MeshElement : public SMDS_MeshObject
 {
 public:
 
-  SMDS_ElemIteratorPtr nodesIterator() const;
-  SMDS_ElemIteratorPtr edgesIterator() const;
-  SMDS_ElemIteratorPtr facesIterator() const;
-  virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-  virtual SMDS_ElemIteratorPtr interlacedNodesElemIterator() const;
+  // ===========================
+  // Access to nodes
+  // ===========================
+  virtual SMDS_ElemIteratorPtr nodesIterator() const = 0;
 
-  virtual SMDS_NodeIteratorPtr nodeIterator() const;
-  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const = 0;
+  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const { return nodeIterator(); }
+  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const  { return nodeIterator(); }
 
   // std-like iteration on nodes
-  typedef SMDS_StdIterator< const SMDS_MeshNode*, SMDS_ElemIteratorPtr > iterator;
-  iterator begin_nodes() const { return iterator( nodesIterator() ); }
+  typedef SMDS_StdIterator< const SMDS_MeshNode*, SMDS_NodeIteratorPtr > iterator;
+  iterator begin_nodes() const { return iterator( nodeIterator() ); }
   iterator end_nodes()   const { return iterator(); }
 
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-  inline int GetID() const { return myID; }
+  // ===========================
+  // Type of element
+  // ===========================
+  virtual int NbNodes() const = 0;
+  virtual int NbEdges() const = 0;
+  virtual int NbFaces() const = 0;
 
-  ///Return the type of the current element
   virtual SMDSAbs_ElementType  GetType() const = 0;
   virtual SMDSAbs_EntityType   GetEntityType() const = 0;
   virtual SMDSAbs_GeometryType GetGeomType() const = 0;
-  virtual vtkIdType            GetVtkType() const = 0;
+  virtual VTKCellType          GetVtkType() const = 0;
 
-  virtual bool IsPoly() const { return false; }
-  virtual bool IsQuadratic() const;
+  virtual bool IsPoly() const = 0;
+  virtual bool IsQuadratic() const = 0;
   virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-  virtual int  NbCornerNodes() const;
-
-  friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
-  friend SMDS_EXPORT bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement* elem);
-  friend class SMDS_Mesh;
-  friend class SMESHDS_Mesh;
-  friend class SMESHDS_SubMesh;
-  friend class SMDS_MeshElementIDFactory;
+  virtual int  NbCornerNodes() const = 0;
 
   // ===========================
   //  Access to nodes by index
@@ -107,14 +94,14 @@ public:
     * \param ind - node index
     * \retval const SMDS_MeshNode* - the node
    */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+  virtual const SMDS_MeshNode* GetNode(const int ind) const = 0;
 
   /*!
    * \brief Return node by its index
     * \param ind - node index
     * \retval const SMDS_MeshNode* - the node
    * 
-   * Index is wrapped if it is out of a valid range
+   * Index is wrapped if it is out of a valid range of corner nodes
    */
   const SMDS_MeshNode* GetNodeWrap(const int ind) const { return GetNode( WrappedIndex( ind )); }
 
@@ -126,15 +113,11 @@ public:
   virtual bool IsValidIndex(const int ind) const;
 
   /*!
-   * \brief Return a valid node index, fixing the given one if necessary
+   * \brief Return a valid corner node index, fixing the given one if necessary
     * \param ind - node index
     * \retval int - valid node index
    */
-  int WrappedIndex(const int ind) const {
-    if ( ind < 0 ) return NbNodes() + ind % NbNodes();
-    if ( ind >= NbNodes() ) return ind % NbNodes();
-    return ind;
-  }
+  int WrappedIndex(const int ind) const;
 
   /*!
    * \brief Check if a node belongs to the element
@@ -143,14 +126,26 @@ public:
    */
   virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
 
-  inline ShortType getMeshId()    const { return myMeshId; }
-  inline LongType  getshapeId()   const { return myShapeId >> BITS_SHIFT; }
-  inline int       getIdInShape() const { return myIdInShape; }
-  inline int       getVtkId()     const { return myVtkID; }
+
+  virtual int GetID() const;
+  virtual int GetVtkID()   const;
+  virtual int getshapeId() const { return GetShapeID(); }
+  virtual int GetShapeID() const;
 
   // mark this element; to be used in algos
-  inline void setIsMarked( bool is ) const;
-  inline bool isMarked() const;
+  virtual void setIsMarked( bool is ) const;
+  virtual bool isMarked() const;
+
+  // element can be allocated but "not used"
+  bool IsNull() const { return myHolder == 0; }
+
+  SMDS_Mesh* GetMesh() const;
+
+  void Print(std::ostream & OS) const;
+
+  friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
+  friend class SMDS_ElementFactory;
+  friend class SMESHDS_SubMesh;
 
   /*!
    * \brief Filters of elements, to be used with SMDS_SetIterator
@@ -183,41 +178,19 @@ public:
     bool operator()(const SMDS_MeshElement* e) const { return e && e->GetGeomType() == _type; }
   };
 
-protected:
-  inline void setId(int id)                { myID = id; }
-  inline void setVtkId(int vtkId)          { myVtkID = vtkId; }
-  inline void setIdInShape(int id)         { myIdInShape = id; }
-  inline void setShapeId(LongType shapeId) { myShapeId = ( shapeId << BITS_SHIFT ) | ( myShapeId & BIT_IS_MARKED ); }
-  SMDS_MeshElement(int ID=-1);
-  SMDS_MeshElement(int id, ShortType meshId, LongType shapeId = 0);
-  virtual void init(int id = -1, ShortType meshId = -1, LongType shapeId = 0);
-  virtual void Print(std::ostream & OS) const;
-
-  //! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
-  int myID;
-  //! index in vtkUnstructuredGrid
-  int myVtkID;
-  //! SMDS_Mesh identification in SMESH
-  ShortType myMeshId;
-  //! SubShape and SubMesh identification in SMESHDS; one bit is used to mark the element
-  LongType myShapeId;
-  //! Element index in SMESHDS_SubMesh vector
-  int myIdInShape;
-
-  enum Bits { // use the 1st right bit of myShapeId to set/unset a mark
-    BIT_IS_MARKED = 1,
-    BITS_SHIFT = 1
-  };
-};
+ protected:
 
-inline void SMDS_MeshElement::setIsMarked( bool is ) const
-{
-  const_cast< SMDS_MeshElement* >( this )->myShapeId = ( myShapeId & ~BIT_IS_MARKED ) | is;
-}
-inline bool SMDS_MeshElement::isMarked() const
-{
-  return myShapeId & BIT_IS_MARKED;
-}
+  SMDS_MeshElement();
+
+  void setVtkID(const int vtkID );
+  virtual void setShapeID( const int shapeID ) const;
+
+  SMDS_UnstructuredGrid* getGrid() const;
+
+ protected:
+
+  SMDS_ElementChunk* myHolder;
+};
 
 // ============================================================
 /*!
diff --git a/src/SMDS/SMDS_MeshElementIDFactory.cxx b/src/SMDS/SMDS_MeshElementIDFactory.cxx
deleted file mode 100644 (file)
index c7fc45e..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_MeshElementIDFactory.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_MeshElementIDFactory.hxx"
-#include "SMDS_MeshElement.hxx"
-#include "SMDS_Mesh.hxx"
-
-#include "utilities.h"
-
-#include "SMDS_UnstructuredGrid.hxx"
-#include <vtkCellType.h>
-
-#include <climits>
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_MeshElementIDFactory
-//purpose  : 
-//=======================================================================
-SMDS_MeshElementIDFactory::SMDS_MeshElementIDFactory():
-  SMDS_MeshNodeIDFactory()
-{
-}
-
-int SMDS_MeshElementIDFactory::SetInVtkGrid(SMDS_MeshElement * elem)
-{
-  // --- retrieve nodes ID
-
-  SMDS_MeshCell *cell = dynamic_cast<SMDS_MeshCell*>(elem);
-  assert(cell);
-  vector<vtkIdType> nodeIds( elem->NbNodes() );
-  SMDS_ElemIteratorPtr it = elem->nodesIterator();
-  for( int i = 0; it->more(); ++i )
-  {
-    int nodeId = (static_cast<const SMDS_MeshNode*>(it->next()))->getVtkId();
-    nodeIds[i] = nodeId;
-  }
-
-  // --- insert cell in vtkUnstructuredGrid
-
-  int typ = VTK_VERTEX;
-  int cellId = myMesh->getGrid()->InsertNextLinkedCell(typ, nodeIds.size(), &nodeIds[0]);
-  cell->setVtkId(cellId);
-  return cellId;
-}
-
-//=======================================================================
-//function : BindID
-//purpose  :
-//=======================================================================
-
-bool SMDS_MeshElementIDFactory::BindID(int ID, SMDS_MeshElement * elem)
-{
-  SetInVtkGrid(elem);
-  return myMesh->registerElement(ID, elem);
-}
-
-//=======================================================================
-//function : MeshElement
-//purpose  : 
-//=======================================================================
-SMDS_MeshElement* SMDS_MeshElementIDFactory::MeshElement(int ID)
-{
-  if ( ID<1 || ID >= (int) myMesh->myCells.size() )
-    return NULL;
-  const SMDS_MeshElement* elem = GetMesh()->FindElement(ID);
-  return (SMDS_MeshElement*)(elem);
-}
-
-//=======================================================================
-//function : GetFreeID
-//purpose  : 
-//=======================================================================
-
-int SMDS_MeshElementIDFactory::GetFreeID()
-{
-  int ID;
-  do {
-    ID = SMDS_MeshIDFactory::GetFreeID();
-  } while ( MeshElement( ID ));
-  return ID;
-}
-
-//=======================================================================
-//function : ReleaseID
-//purpose  : 
-//=======================================================================
-void SMDS_MeshElementIDFactory::ReleaseID(int ID, int vtkId)
-{
-  if (ID < 1) // TODO check case ID == O
-  {
-    MESSAGE("~~~~~~~~~~~~~~ SMDS_MeshElementIDFactory::ReleaseID ID = " << ID);
-    return;
-  }
-  if (vtkId >= 0)
-  {
-    assert(vtkId < (int)myMesh->myCellIdVtkToSmds.size());
-    myMesh->myCellIdVtkToSmds[vtkId] = -1;
-    myMesh->setMyModified();
-  }
-  SMDS_MeshIDFactory::ReleaseID(ID);
-  if (ID == myMax)
-    myMax = 0;
-  if (ID == myMin)
-    myMax = 0;
-}
-
-//=======================================================================
-//function : updateMinMax
-//purpose  :
-//=======================================================================
-
-void SMDS_MeshElementIDFactory::updateMinMax() const
-{
-  myMin = INT_MAX;
-  myMax = 0;
-  for (size_t i = 0; i < myMesh->myCells.size(); i++)
-  {
-    if (myMesh->myCells[i])
-    {
-      int id = myMesh->myCells[i]->GetID();
-      if (id > myMax)
-        myMax = id;
-      if (id < myMin)
-        myMin = id;
-    }
-  }
-  if (myMin == INT_MAX)
-    myMin = 0;
-}
-
-//=======================================================================
-//function : elementsIterator
-//purpose  : Return an iterator on elements of the factory
-//=======================================================================
-
-SMDS_ElemIteratorPtr SMDS_MeshElementIDFactory::elementsIterator() const
-{
-  return myMesh->elementsIterator(SMDSAbs_All);
-}
-
-void SMDS_MeshElementIDFactory::Clear()
-{
-  myMesh->myCellIdVtkToSmds.clear();
-  myMin = myMax = 0;
-  SMDS_MeshIDFactory::Clear();
-}
diff --git a/src/SMDS/SMDS_MeshElementIDFactory.hxx b/src/SMDS/SMDS_MeshElementIDFactory.hxx
deleted file mode 100644 (file)
index f75d24f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_MeshElementIDFactory.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_MeshElementIDFactory_HeaderFile
-#define _SMDS_MeshElementIDFactory_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshNodeIDFactory.hxx"
-
-#include <vector>
-
-class SMDS_MeshElement;
-class SMDS_Mesh;
-
-class SMDS_EXPORT SMDS_MeshElementIDFactory:public SMDS_MeshNodeIDFactory
-{
-public:
-  friend class SMDS_Mesh;
-  
-  SMDS_MeshElementIDFactory();
-  bool BindID(int ID, SMDS_MeshElement * elem);
-  int SetInVtkGrid(SMDS_MeshElement * elem);
-  SMDS_MeshElement * MeshElement(int ID);
-  virtual int GetFreeID();
-  virtual void ReleaseID(int ID, int vtkId = -1);
-  SMDS_ElemIteratorPtr elementsIterator() const;
-  virtual void Clear();
-
-protected:
-  virtual void updateMinMax() const;
-  void updateMinMax(int id) const
-  {
-    if (id > myMax) myMax = id;
-    if (id < myMin) myMin = id;
-  }
-};
-
-#endif
diff --git a/src/SMDS/SMDS_MeshFace.cxx b/src/SMDS/SMDS_MeshFace.cxx
deleted file mode 100644 (file)
index 1269455..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#include "SMDS_MeshFace.hxx"
-
-SMDSAbs_ElementType SMDS_MeshFace::GetType() const
-{
-        return SMDSAbs_Face;
-}
-
-vtkIdType SMDS_MeshFace::GetVtkType() const
-{
-  return VTK_POLY_LINE;  // --- must be reimplemented in derived classes
-}
index 92f2f9b4f64ff2b0a5c4eb93a221568a145990aa..11e1f32c6ca606ff00858dabe0d93036c8c7eca0 100644 (file)
 
 #include "SMDS_MeshCell.hxx"
 
-class SMDS_EXPORT SMDS_MeshFace:public SMDS_MeshCell
+#include "Utils_SALOME_Exception.hxx"
+
+/*!
+ * \brief Mesh face. This type is not allocated.
+ *        It is only used as function argument type to provide more clear semantic.
+ */
+class SMDS_EXPORT SMDS_MeshFace : public SMDS_MeshCell
 {
-  public:
-        SMDSAbs_ElementType GetType() const;
-        virtual vtkIdType GetVtkType() const;
+  void init( const std::vector<vtkIdType>& vtkNodeIds )
+  {
+    SMDSAbs_EntityType entity = SMDSEntity_Triangle;
+    switch ( vtkNodeIds.size())
+    {
+    case 3: entity = SMDSEntity_Triangle;          break;
+    case 4: entity = SMDSEntity_Quadrangle;        break;
+    case 6: entity = SMDSEntity_Quad_Triangle;     break;
+    case 8: entity = SMDSEntity_Quad_Quadrangle;   break;
+    case 7: entity = SMDSEntity_BiQuad_Triangle;   break;
+    case 9: entity = SMDSEntity_BiQuad_Quadrangle; break;
+    default: throw SALOME_Exception("wrong face nodes");
+    }
+    SMDS_MeshCell::init( entity, vtkNodeIds );
+  }
+
+  friend class SMDS_Mesh;
+
+ public:
+
+  virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; }
+
+  static SMDSAbs_ElementType Type() { return SMDSAbs_Face; }
 };
 
 #endif
index 4040a3e1d2193e2d205cdc436c7d467a5b1dc19e..e2f5fbccfa3750effcc0dc1a29fc7f709339be65 100644 (file)
 #endif
 
 #include "SMDS_MeshGroup.hxx"
-#include "utilities.h"
 
-using namespace std;
+#include "SMDS_SetIterator.hxx"
+#include "ObjectPool.hxx"
 
-//=======================================================================
-//function : SMDS_MeshGroup
-//purpose  : 
-//=======================================================================
+#include <utilities.h>
 
-SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh,
-                               const SMDSAbs_ElementType theType)
-  :myMesh(theMesh),myType(theType), myParent(NULL), myTic(0)
-{
-}
+#include <boost/make_shared.hpp>
 
 //=======================================================================
 //function : SMDS_MeshGroup
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-SMDS_MeshGroup::SMDS_MeshGroup(SMDS_MeshGroup * theParent,
+SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh *         theMesh,
                                const SMDSAbs_ElementType theType)
-        :myMesh(theParent->myMesh),myType(theType), myParent(theParent)
-{
-}
-
-//=======================================================================
-//function : AddSubGroup
-//purpose  : 
-//=======================================================================
-
-const SMDS_MeshGroup *SMDS_MeshGroup::AddSubGroup
-                (const SMDSAbs_ElementType theType)
-{
-        const SMDS_MeshGroup * subgroup = new SMDS_MeshGroup(this,theType);
-        myChildren.insert(myChildren.end(),subgroup);
-        return subgroup;
-}
-
-//=======================================================================
-//function : RemoveSubGroup
-//purpose  : 
-//=======================================================================
-
-bool SMDS_MeshGroup::RemoveSubGroup(const SMDS_MeshGroup * theGroup)
+  : SMDS_ElementHolder( theMesh ), myType( theType ), myTic( 0 )
 {
-        bool found = false;     
-        list<const SMDS_MeshGroup*>::iterator itgroup;
-        for(itgroup=myChildren.begin(); itgroup!=myChildren.end(); itgroup++)
-        {
-                const SMDS_MeshGroup* subgroup=*itgroup;
-                if (subgroup == theGroup)
-                {
-                        found = true;
-                        myChildren.erase(itgroup);
-                }
-        }
-
-        return found;
 }
 
-//=======================================================================
-//function : RemoveFromParent
-//purpose  : 
-//=======================================================================
-
-bool SMDS_MeshGroup::RemoveFromParent()
-{
-        
-        if (myParent==NULL) return false;
-        else
-        {
-                return (myParent->RemoveSubGroup(this));
-        }
-}
 //=======================================================================
 //function : Clear
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void SMDS_MeshGroup::Clear()
 {
-  myElements.clear();
+  clearVector( myElements );
   myType = SMDSAbs_All;
   ++myTic;
 }
@@ -125,15 +69,15 @@ void SMDS_MeshGroup::Clear()
 bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
 {
   // the type of the group is determined by the first element added
-  if (myElements.empty()) {
+  if ( myElements.empty() ) {
     myType = theElem->GetType();
   }
-  else if (theElem->GetType() != myType) {
+  else if ( theElem->GetType() != myType ) {
     MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<<theElem->GetType()<<"!="<<myType);
     return false;
   }
-        
-  myElements.insert(myElements.end(), theElem);
+
+  myElements.insert( theElem );
   ++myTic;
 
   return true;
@@ -141,15 +85,15 @@ bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
 
 //=======================================================================
 //function : Remove
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
+bool SMDS_MeshGroup::Remove( const SMDS_MeshElement * theElem )
 {
-  set<const SMDS_MeshElement *>::iterator found = myElements.find(theElem);
+  TElementSet::iterator found = myElements.find(theElem);
   if ( found != myElements.end() ) {
-    myElements.erase(found);
-    if (myElements.empty()) myType = SMDSAbs_All;
+    myElements.erase( found );
+    if ( myElements.empty() ) myType = SMDSAbs_All;
     ++myTic;
     return true;
   }
@@ -158,12 +102,12 @@ bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
 
 //=======================================================================
 //function : Contains
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMDS_MeshGroup::Contains(const SMDS_MeshElement * theElem) const
 {
-  return myElements.find(theElem) != myElements.end();
+  return myElements.find( theElem ) != myElements.end();
 }
 
 //=======================================================================
@@ -176,3 +120,37 @@ void SMDS_MeshGroup::SetType(const SMDSAbs_ElementType theType)
   if (IsEmpty())
     myType = theType;
 }
+
+//=======================================================================
+//function : GetElements
+//purpose  : 
+//=======================================================================
+
+SMDS_ElemIteratorPtr SMDS_MeshGroup::GetElements() const
+{
+  typedef SMDS_SetIterator< const SMDS_MeshElement*, TIterator > TSetIterator;
+  return boost::make_shared< TSetIterator >( myElements.begin(), myElements.end() );
+}
+
+//=======================================================================
+//function : Move contents of another group
+//purpose  : 
+//=======================================================================
+
+void SMDS_MeshGroup::operator=( SMDS_MeshGroup && other )
+{
+  myMesh = other.myMesh;
+  myType = other.myType;
+  myElements = std::move( other.myElements );
+  ++myTic;
+}
+
+//=======================================================================
+//function : tmpClear
+//purpose  : temporary remove its elements before mesh compacting
+//=======================================================================
+
+void SMDS_MeshGroup::tmpClear()
+{
+  myElements.clear();
+}
index 7ba1375ad5b8ce92d96db67f95362b1c0d5d74de..3b39c7022fd7ba344e884d38ae026c1bc138d81f 100644 (file)
 
 #include "SMESH_SMDS.hxx"
 
+#include "SMDS_ElementHolder.hxx"
 #include "SMDS_Mesh.hxx"
 #include <set>
 
-class SMDS_EXPORT SMDS_MeshGroup:public SMDS_MeshObject
+class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
 {
-  public:
-        SMDS_MeshGroup(const SMDS_Mesh * theMesh,
-                       const SMDSAbs_ElementType theType = SMDSAbs_All);
-        const SMDS_MeshGroup * AddSubGroup
-                      (const SMDSAbs_ElementType theType = SMDSAbs_All);
-        virtual bool RemoveSubGroup(const SMDS_MeshGroup* theGroup);
-        virtual bool RemoveFromParent();
-
-        const SMDS_Mesh* GetMesh() const { return myMesh; }
-
-        void SetType (const SMDSAbs_ElementType theType);
-        void Clear();
-        bool Add(const SMDS_MeshElement * theElem);
-        bool Remove(const SMDS_MeshElement * theElem);
-        bool IsEmpty() const { return myElements.empty(); }
-        int Extent() const { return myElements.size(); }
-        int Tic() const { return myTic; }
-
-        int SubGroupsNb() const { return myChildren.size(); }
-
-        SMDSAbs_ElementType GetType() const { return myType; }
-
-        bool Contains(const SMDS_MeshElement * theElem) const;
-
-        void InitIterator() const
-        { const_cast<TIterator&>(myIterator) = myElements.begin(); }
-
-        bool More() const { return myIterator != myElements.end(); }
-
-        const SMDS_MeshElement* Next() const
-        { return *(const_cast<TIterator&>(myIterator))++; }
-
-        void InitSubGroupsIterator() const
-        { const_cast<TGroupIterator&>(myGroupIterator) = myChildren.begin(); }
-
-        bool MoreSubGroups() const { return myGroupIterator != myChildren.end(); }
-
-        const SMDS_MeshGroup* NextSubGroup() const
-        { return *(const_cast<TGroupIterator&>(myGroupIterator))++; }
-
-  private:
-        SMDS_MeshGroup(SMDS_MeshGroup* theParent,
-                       const SMDSAbs_ElementType theType = SMDSAbs_All);
-
-        typedef std::set<const SMDS_MeshElement *>::const_iterator TIterator;
-        typedef std::list<const SMDS_MeshGroup *>::const_iterator TGroupIterator;
-
-        const SMDS_Mesh *                       myMesh;
-        SMDSAbs_ElementType                     myType;
-        std::set<const SMDS_MeshElement*>       myElements; /* - not sorted by ID because it */
-        SMDS_MeshGroup *                        myParent;   /* can contain deleted elements */
-        std::list<const SMDS_MeshGroup*>        myChildren;
-        TIterator                               myIterator;
-        TGroupIterator                          myGroupIterator;
-        int                                     myTic; // to track changes
+ public:
+  SMDS_MeshGroup(const SMDS_Mesh *         theMesh,
+                 const SMDSAbs_ElementType theType = SMDSAbs_All);
+
+  void SetType (const SMDSAbs_ElementType theType);
+  void Clear();
+  void Reserve(size_t nbElems) {}
+  bool Add(const SMDS_MeshElement * theElem);
+  bool Remove(const SMDS_MeshElement * theElem);
+  bool IsEmpty() const { return myElements.empty(); }
+  int  Extent() const { return myElements.size(); }
+  int  Tic() const { return myTic; }
+  bool Contains(const SMDS_MeshElement * theElem) const;
+
+  const SMDS_Mesh*     GetMesh() const { return myMesh; }
+  SMDSAbs_ElementType  GetType() const { return myType; }
+  SMDS_ElemIteratorPtr GetElements() const; // WARNING: iterator becomes invalid if group changes
+
+  void operator=( SMDS_MeshGroup && other );
+
+ protected: // methods of SMDS_ElementHolder
+
+  virtual SMDS_ElemIteratorPtr getElements() { return GetElements(); }
+  virtual void tmpClear();
+  virtual void add( const SMDS_MeshElement* element ) { Add( element ); }
+  virtual void compact() {}
+
+ private:
+
+  typedef std::set< const SMDS_MeshElement* > TElementSet;
+  typedef TElementSet::const_iterator         TIterator;
+
+  const SMDS_Mesh *   myMesh;
+  SMDSAbs_ElementType myType;
+  TElementSet         myElements; // not sorted by ID because it can contain deleted elements
+  int                 myTic;      // to track changes
 };
 #endif
diff --git a/src/SMDS/SMDS_MeshIDFactory.cxx b/src/SMDS/SMDS_MeshIDFactory.cxx
deleted file mode 100644 (file)
index ea74aa5..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_MeshIDFactory.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#include "SMDS_MeshIDFactory.hxx"
-#include "SMDS_Mesh.hxx"
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_MeshIDFactory
-//purpose  : 
-//=======================================================================
-
-SMDS_MeshIDFactory::SMDS_MeshIDFactory():myMaxID(0), myMesh(0)
-{
-}
-
-int SMDS_MeshIDFactory::GetFreeID()
-{
-  int newid;
-  if (myPoolOfID.empty())
-  {
-    newid = ++myMaxID;
-  }
-  else
-  {
-    set<int>::iterator i = myPoolOfID.begin();
-    newid = *i;
-    myPoolOfID.erase( i );
-  }
-  return newid;
-}
-
-//=======================================================================
-//function : ReleaseID
-//purpose  :
-//=======================================================================
-void SMDS_MeshIDFactory::ReleaseID(int ID, int vtkId)
-{
-  if ( ID > 0 )
-  {
-    if ( ID < myMaxID )
-    {
-      myPoolOfID.insert(ID);
-    }
-    else if ( ID == myMaxID )
-    {
-      --myMaxID;
-      if ( !myPoolOfID.empty() ) // assure that myMaxID is not in myPoolOfID
-      {
-        set<int>::iterator i = --myPoolOfID.end();
-        while ( i != myPoolOfID.begin() && myMaxID == *i ) {
-          --myMaxID; --i;
-        }
-        if ( myMaxID == *i ) {
-          --myMaxID; // begin of myPoolOfID reached
-          myPoolOfID.clear();
-        }
-        else if ( myMaxID < ID-1 ) {
-          myPoolOfID.erase( ++i, myPoolOfID.end() );
-        }
-      }
-    }
-  }
-}
-
-void SMDS_MeshIDFactory::Clear()
-{
-  myMaxID = 0;
-  myPoolOfID.clear();
-}
-
-void SMDS_MeshIDFactory::SetMesh(SMDS_Mesh *mesh)
-{
-  myMesh = mesh;
-}
-
-SMDS_Mesh* SMDS_MeshIDFactory::GetMesh()
-{
-  return myMesh;
-}
-
-void SMDS_MeshIDFactory::emptyPool(int maxId)
-{
-  myMaxID = maxId;
-  myPoolOfID.clear();
-}
-
diff --git a/src/SMDS/SMDS_MeshIDFactory.hxx b/src/SMDS/SMDS_MeshIDFactory.hxx
deleted file mode 100644 (file)
index 35be69b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_MeshIDFactory.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_MeshIDFactory_HeaderFile
-#define _SMDS_MeshIDFactory_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshObject.hxx"
-#include <set>
-
-class SMDS_Mesh;
-
-class SMDS_EXPORT SMDS_MeshIDFactory:public SMDS_MeshObject
-{
-public:
-  int  GetFreeID();
-  virtual void ReleaseID(int ID, int vtkId = -1);
-  virtual void Clear();
-
-  void SetMesh(SMDS_Mesh *mesh);
-  SMDS_Mesh* GetMesh();
-  inline bool isPoolIdEmpty() { return myPoolOfID.empty(); };
-  virtual void emptyPool(int maxId);
-  inline void adjustMaxId(int ID) { if (ID > myMaxID) myMaxID = ID;};
-protected:
-  SMDS_MeshIDFactory();
-  int myMaxID;
-  std::set<int> myPoolOfID;
-  SMDS_Mesh *myMesh;
-};
-
-#endif
index 554f0fa7115dd75e0e8e021c97be94f90a051694..542798277413e60557770323318340af367a90b3 100644 (file)
 #endif
 
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_SpacePosition.hxx"
-#include "SMDS_IteratorOfElements.hxx"
+
+#include "SMDS_ElementFactory.hxx"
 #include "SMDS_Mesh.hxx"
-#include <vtkUnstructuredGrid.h>
+#include "SMDS_SetIterator.hxx"
+#include "SMDS_SpacePosition.hxx"
 
-#include "utilities.h"
-#include "Utils_SALOME_Exception.hxx"
+#include <utilities.h>
+#include <Utils_SALOME_Exception.hxx>
 #include <cassert>
 
-using namespace std;
-
-int SMDS_MeshNode::nbNodes =0;
-
-//=======================================================================
-//function : SMDS_MeshNode
-//purpose  :
-//=======================================================================
-SMDS_MeshNode::SMDS_MeshNode() :
-  SMDS_MeshElement(-1, -1, 0),
-  myPosition(SMDS_SpacePosition::originSpacePosition())
-{
-  nbNodes++;
-}
-
-SMDS_MeshNode::SMDS_MeshNode(int id, int meshId, int shapeId, double x, double y, double z):
-  SMDS_MeshElement(id, meshId, shapeId),
-  myPosition(SMDS_SpacePosition::originSpacePosition())
-{
-  nbNodes++;
-  init(id, meshId, shapeId, x, y ,z);
-}
+#include <boost/make_shared.hpp>
 
-void SMDS_MeshNode::init(int id, int meshId, int shapeId, double x, double y, double z)
+void SMDS_MeshNode::init(double x, double y, double z)
 {
-  SMDS_MeshElement::init(id, meshId, shapeId);
-  myVtkID = id - 1;
-  assert(myVtkID >= 0);
-  SMDS_UnstructuredGrid * grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+  SMDS_UnstructuredGrid * grid = getGrid();
   vtkPoints *points = grid->GetPoints();
-  points->InsertPoint(myVtkID, x, y, z);
+  points->InsertPoint( GetVtkID(), x, y, z );
   if ( grid->HasLinks() )
-    grid->GetLinks()->ResizeForPoint( myVtkID );
-}
-
-SMDS_MeshNode::~SMDS_MeshNode()
-{
-  nbNodes--;
-  if ( myPosition && myPosition != SMDS_SpacePosition::originSpacePosition() )
-    delete myPosition, myPosition = 0;
+    grid->GetLinks()->ResizeForPoint( GetVtkID() );
 }
 
 //=======================================================================
@@ -85,8 +55,8 @@ SMDS_MeshNode::~SMDS_MeshNode()
 
 void SMDS_MeshNode::RemoveInverseElement(const SMDS_MeshElement * elem)
 {
-  if ( SMDS_Mesh::_meshList[myMeshId]->getGrid()->HasLinks() )
-    SMDS_Mesh::_meshList[myMeshId]->getGrid()->RemoveReferenceToCell(myVtkID, elem->getVtkId());
+  if ( getGrid()->HasLinks() )
+    getGrid()->RemoveReferenceToCell( GetVtkID(), elem->GetVtkID());
 }
 
 //=======================================================================
@@ -96,7 +66,7 @@ void SMDS_MeshNode::RemoveInverseElement(const SMDS_MeshElement * elem)
 
 void SMDS_MeshNode::Print(ostream & OS) const
 {
-  OS << "Node <" << myID << "> : X = " << X() << " Y = "
+  OS << "Node <" << GetID() << "> : X = " << X() << " Y = "
      << Y() << " Z = " << Z() << endl;
 }
 
@@ -105,23 +75,20 @@ void SMDS_MeshNode::Print(ostream & OS) const
 //purpose  :
 //=======================================================================
 
-void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos)
+void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos, int shapeID)
 {
-  if ( myPosition &&
-       myPosition != SMDS_SpacePosition::originSpacePosition() &&
-       myPosition != aPos )
-    delete myPosition;
-  myPosition = aPos;
+  myHolder->SetPosition( this, aPos, shapeID );
 }
 
 //=======================================================================
 //function : GetPosition
-//purpose  :
+//purpose  : Return a position of this node on shape
+//warning  : result is std::unique_ptr !
 //=======================================================================
 
-const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const
+SMDS_PositionPtr SMDS_MeshNode::GetPosition() const
 {
-  return myPosition;
+  return myHolder->GetPosition( this );
 }
 
 //=======================================================================
@@ -130,94 +97,120 @@ const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const
  */
 //=======================================================================
 
-class SMDS_MeshNode_MyInvIterator: public SMDS_ElemIterator
+namespace
 {
-private:
-  SMDS_Mesh* myMesh;
-  vtkIdType* myCells;
-  int myNcells;
-  SMDSAbs_ElementType myType;
-  int iter;
-  vector<vtkIdType> cellList;
-
-public:
-  SMDS_MeshNode_MyInvIterator(SMDS_Mesh *mesh, vtkIdType* cells, int ncells, SMDSAbs_ElementType type) :
-    myMesh(mesh), myCells(cells), myNcells(ncells), myType(type), iter(0)
+  struct InverseIterator: public SMDS_ElemIterator
   {
-    if ( ncells )
+    const SMDS_Mesh*       myMesh;
+    size_t                 myIter;
+    std::vector<vtkIdType> myCellList;
+
+    InverseIterator(const SMDS_Mesh *   mesh = 0,
+                    const vtkIdType*    cells = 0,
+                    const int           ncells = 0,
+                    SMDSAbs_ElementType type = SMDSAbs_All)
+      : myMesh(mesh), myIter(0)
     {
-      cellList.reserve( ncells );
-      if (type == SMDSAbs_All)
-      {
-        cellList.assign( cells, cells + ncells );
-      }
-      else
+      if ( ncells )
       {
-        for (int i = 0; i < ncells; i++)
+        myCellList.reserve( ncells );
+        if (type == SMDSAbs_All)
+        {
+          myCellList.assign( cells, cells + ncells );
+        }
+        else
         {
-          int vtkId = cells[i];
-          int smdsId = myMesh->fromVtkToSmds(vtkId);
-          const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
-          if (elem->GetType() == type)
+          for (int i = 0; i < ncells; i++)
           {
-            cellList.push_back(vtkId);
+            int  vtkId = cells[i];
+            int smdsId = myMesh->FromVtkToSmds( vtkId );
+            const SMDS_MeshElement* elem = myMesh->FindElement( smdsId );
+            if ( elem->GetType() == type )
+            {
+              myCellList.push_back(vtkId);
+            }
           }
         }
       }
-      myCells = cellList.empty() ? 0 : &cellList[0];
-      myNcells = cellList.size();
     }
-  }
 
-  bool more()
-  {
-    return (iter < myNcells);
-  }
+    bool more()
+    {
+      return ( myIter < myCellList.size() );
+    }
+
+    const SMDS_MeshElement* next()
+    {
+      int vtkId  = myCellList[ myIter++ ];
+      int smdsId = myMesh->FromVtkToSmds( vtkId );
+      const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
+      if (!elem)
+      {
+        MESSAGE("InverseIterator problem Null element");
+        throw SALOME_Exception("InverseIterator problem Null element");
+      }
+      return elem;
+    }
+  };
+
+  //=======================================================================
+  /*!
+   * \brief Iterator on a node
+   */
+  //=======================================================================
 
-  const SMDS_MeshElement* next()
+  template< class ELEM_ITERATOR >
+  struct Iterator : public ELEM_ITERATOR
   {
-    int vtkId = myCells[iter];
-    int smdsId = myMesh->fromVtkToSmds(vtkId);
-    const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
-    if (!elem)
+    typedef typename ELEM_ITERATOR::value_type element_type;
+    const SMDS_MeshNode* myNode;
+
+    Iterator( const SMDS_MeshNode* n ): myNode( n ) {}
+
+    virtual bool more()
     {
-      MESSAGE("SMDS_MeshNode_MyInvIterator problem Null element");
-      throw SALOME_Exception("SMDS_MeshNode_MyInvIterator problem Null element");
+      return myNode;
     }
-    iter++;
-    return elem;
-  }
-};
+    virtual element_type next()
+    {
+      element_type res = static_cast<element_type>( myNode );
+      myNode = 0;
+      return res;
+    }
+  };
+}
 
 SMDS_ElemIteratorPtr SMDS_MeshNode::GetInverseElementIterator(SMDSAbs_ElementType type) const
 {
-  if ( SMDS_Mesh::_meshList[myMeshId]->NbElements() > 0 ) // avoid building links
+  if ( GetMesh()->NbElements() > 0 ) // avoid building links
   {
-    vtkCellLinks::Link& l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks()->GetLink(myVtkID);
-    return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+    vtkCellLinks::Link& l = getGrid()->GetLinks()->GetLink( GetVtkID() );
+    return boost::make_shared< InverseIterator >( GetMesh(), l.cells, l.ncells, type );
   }
   else
   {
-    return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], 0, 0, type));
+    return boost::make_shared< InverseIterator >();
   }
 }
 
-SMDS_ElemIteratorPtr SMDS_MeshNode::elementsIterator(SMDSAbs_ElementType type) const
+SMDS_ElemIteratorPtr SMDS_MeshNode::nodesIterator() const
 {
-  if ( type == SMDSAbs_Node )
-    return SMDS_MeshElement::elementsIterator( SMDSAbs_Node );
-  else
-    return GetInverseElementIterator( type );
+  return boost::make_shared< Iterator< SMDS_ElemIterator > >( this );
+}
+
+SMDS_NodeIteratorPtr SMDS_MeshNode::nodeIterator() const
+{
+  return boost::make_shared< Iterator< SMDS_NodeIterator > >( this );
 }
 
-int SMDS_MeshNode::NbNodes() const
+const SMDS_MeshNode* SMDS_MeshNode::GetNode(const int ind) const
 {
-  return 1;
+  return ind == 0 ? this : 0;
 }
 
 double* SMDS_MeshNode::getCoord() const
 {
-  return SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetPoint(myVtkID);
+  return getGrid()->GetPoint( GetVtkID() );
 }
 
 double SMDS_MeshNode::X() const
@@ -246,41 +239,30 @@ double SMDS_MeshNode::Z() const
 
 void SMDS_MeshNode::GetXYZ(double xyz[3]) const
 {
-  return SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetPoint(myVtkID,xyz);
+  return getGrid()->GetPoint( GetVtkID(), xyz );
 }
 
 //================================================================================
-void SMDS_MeshNode::setXYZ(double x, double y, double z)
-{
-  SMDS_Mesh *mesh = SMDS_Mesh::_meshList[myMeshId];
-  vtkPoints *points = mesh->getGrid()->GetPoints();
-  points->InsertPoint(myVtkID, x, y, z);
-  mesh->adjustBoundingBox(x, y, z);
-  mesh->setMyModified();
-}
-
-SMDSAbs_ElementType SMDS_MeshNode::GetType() const
-{
-  return SMDSAbs_Node;
-}
-
-vtkIdType SMDS_MeshNode::GetVtkType() const
+void SMDS_MeshNode::setXYZ( double x, double y, double z )
 {
-  return VTK_VERTEX;
+  vtkPoints *points = getGrid()->GetPoints();
+  points->InsertPoint( GetVtkID(), x, y, z );
+  //GetMesh()->adjustBoundingBox(x, y, z);
+  GetMesh()->setMyModified();
 }
 
 //=======================================================================
 //function : AddInverseElement
 //purpose  :
 //=======================================================================
-void SMDS_MeshNode::AddInverseElement(const SMDS_MeshElement* ME)
+void SMDS_MeshNode::AddInverseElement( const SMDS_MeshElement* elem )
 {
-  SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+  SMDS_UnstructuredGrid* grid = getGrid();
   if ( grid->HasLinks() )
   {
     vtkCellLinks *Links = grid->GetLinks();
-    Links->ResizeCellList(myVtkID, 1);
-    Links->AddCellReference(ME->getVtkId(), myVtkID);
+    Links->ResizeCellList( GetVtkID(), 1 );
+    Links->AddCellReference( elem->GetVtkID(), GetVtkID() );
   }
 }
 
@@ -290,7 +272,7 @@ void SMDS_MeshNode::AddInverseElement(const SMDS_MeshElement* ME)
 //=======================================================================
 void SMDS_MeshNode::ClearInverseElements()
 {
-  SMDS_Mesh::_meshList[myMeshId]->getGrid()->ResizeCellList(myVtkID, 0);
+  getGrid()->ResizeCellList( GetVtkID(), 0);
 }
 
 //================================================================================
@@ -302,17 +284,17 @@ void SMDS_MeshNode::ClearInverseElements()
 int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const
 {
   int nb = 0;
-  if ( SMDS_Mesh::_meshList[myMeshId]->NbElements() > 0 ) // avoid building links
+  SMDS_Mesh *mesh = GetMesh();
+  if ( mesh->NbElements() > 0 ) // avoid building links
   {
-    vtkCellLinks::Link& l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks()->GetLink(myVtkID);
+    vtkCellLinks::Link& l = mesh->GetGrid()->GetLinks()->GetLink( GetVtkID() );
 
     if ( type == SMDSAbs_All )
       return l.ncells;
 
-    SMDS_Mesh *mesh = SMDS_Mesh::_meshList[myMeshId];
     for ( int i = 0; i < l.ncells; i++ )
     {
-      const SMDS_MeshElement* elem = mesh->FindElement( mesh->fromVtkToSmds( l.cells[i] ));
+      const SMDS_MeshElement* elem = mesh->FindElement( mesh->FromVtkToSmds( l.cells[i] ));
       nb += ( elem->GetType() == type );
     }
   }
index 2c8bad7be6927ed5634abcd28e8fa71af9f50998..b156b911c7718a46d61402a5f8ed6955a1022a7c 100644 (file)
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_Position.hxx"
-#include "ObjectPool.hxx"
 
 class SMDS_EXPORT SMDS_MeshNode: public SMDS_MeshElement
 {
-public:
-  friend class SMESHDS_Mesh;
-  friend class SMDS_Mesh;
-  friend class ObjectPool<SMDS_MeshNode>;
-  friend class SMDS_VtkFace;
+ public:
 
-  void Print(std::ostream & OS) const;
+  void setXYZ(double x, double y, double z);
   double X() const; // ! NOT thread safe methods !
   double Y() const;
   double Z() const;
   void   GetXYZ(double xyz[3]) const; // thread safe getting coords
+
   SMDS_ElemIteratorPtr    GetInverseElementIterator(SMDSAbs_ElementType type=SMDSAbs_All) const;
   int                     NbInverseElements(SMDSAbs_ElementType type=SMDSAbs_All) const;
-  const SMDS_PositionPtr& GetPosition() const;
-  virtual SMDSAbs_ElementType  GetType() const;
-  virtual vtkIdType            GetVtkType() const;
+
+  SMDS_PositionPtr GetPosition() const; // WARNING result is std::unique_ptr !
+  void SetPosition(const SMDS_PositionPtr& aPos, int shapeID = 0 );
+
+  virtual SMDSAbs_ElementType  GetType() const       { return SMDSAbs_Node; }
+  virtual VTKCellType          GetVtkType() const    { return VTK_VERTEX; }
   virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Node;}
   virtual SMDSAbs_GeometryType GetGeomType() const   { return SMDSGeom_NONE; }
-  virtual int                  NbNodes() const;
+  virtual int                  NbNodes() const       { return 1; }
+  virtual int                  NbEdges() const       { return 0; }
+  virtual int                  NbFaces() const       { return 0; }
 
-  void SetPosition(const SMDS_PositionPtr& aPos);
-  void setXYZ(double x, double y, double z);
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+
+  virtual bool IsPoly() const { return false; }
+  virtual bool IsQuadratic() const { return false; }
+  virtual bool IsMediumNode(const SMDS_MeshNode* node) const  { return false; }
+  virtual int  NbCornerNodes() const { return 1; }
+
+  void Print(std::ostream & OS) const;
+
+ private:
 
-  static int nbNodes;
+  void init(double x=0, double y=0, double z=0);
 
-protected:
-  SMDS_MeshNode();
-  SMDS_MeshNode(int id, int meshId, int shapeId = -1, double x=0, double y=0, double z=0);
-  virtual ~SMDS_MeshNode();
-  void init(int id, int meshId, int shapeId = -1, double x=0, double y=0, double z=0);
   double* getCoord() const;
-  void AddInverseElement(const SMDS_MeshElement * ME);
-  void RemoveInverseElement(const SMDS_MeshElement * parent);
+  void AddInverseElement   (const SMDS_MeshElement * elem);
+  void RemoveInverseElement(const SMDS_MeshElement * elem);
   void ClearInverseElements();
 
-  SMDS_ElemIteratorPtr
-  elementsIterator(SMDSAbs_ElementType type) const;
+  friend class SMDS_Mesh;
 
-private:
-  SMDS_PositionPtr myPosition;
 };
 
 #endif
diff --git a/src/SMDS/SMDS_MeshNodeIDFactory.cxx b/src/SMDS/SMDS_MeshNodeIDFactory.cxx
deleted file mode 100644 (file)
index 64b7bae..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : SMDS_MeshNodeIDFactory.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_MeshNodeIDFactory.hxx"
-#include "SMDS_MeshElement.hxx"
-#include "SMDS_Mesh.hxx"
-
-#include <vtkUnstructuredGrid.h>
-#include <vtkCellType.h>
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_MeshNodeIDFactory
-//purpose  : 
-//=======================================================================
-SMDS_MeshNodeIDFactory::SMDS_MeshNodeIDFactory() :
-  SMDS_MeshIDFactory(), myMin(0), myMax(0)
-{
-}
-
-//=======================================================================
-//function : BindID
-//purpose  : 
-//=======================================================================
-bool SMDS_MeshNodeIDFactory::BindID(int ID, SMDS_MeshElement * elem)
-{
-  updateMinMax(ID);
-  return true;
-}
-
-//=======================================================================
-//function : MeshElement
-//purpose  : 
-//=======================================================================
-SMDS_MeshElement* SMDS_MeshNodeIDFactory::MeshElement(int ID)
-{
-  // commented since myMax can be 0 after ReleaseID()
-//   if ((ID < 1) || (ID > myMax))
-//     return NULL;
-  const SMDS_MeshElement* elem = GetMesh()->FindNode(ID);
-  return (SMDS_MeshElement*) (elem);
-}
-
-//=======================================================================
-//function : GetFreeID
-//purpose  : 
-//=======================================================================
-int SMDS_MeshNodeIDFactory::GetFreeID()
-{
-  int ID;
-  do {
-    ID = SMDS_MeshIDFactory::GetFreeID();
-  } while ( MeshElement( ID ));
-  return ID;
-}
-
-//=======================================================================
-//function : ReleaseID
-//purpose  : 
-//=======================================================================
-void SMDS_MeshNodeIDFactory::ReleaseID(const int ID, int vtkId)
-{
-  SMDS_MeshIDFactory::ReleaseID(ID);
-  myMesh->setMyModified();
-  if (ID == myMax)
-    myMax = 0; // --- force updateMinMax
-  if (ID == myMin)
-    myMax = 0; // --- force updateMinMax
-}
-
-//=======================================================================
-//function : GetMaxID
-//purpose  : 
-//=======================================================================
-
-int SMDS_MeshNodeIDFactory::GetMaxID() const
-{
-  if (myMax == 0)
-    updateMinMax();
-  return myMax;
-}
-
-//=======================================================================
-//function : GetMinID
-//purpose  : 
-//=======================================================================
-
-int SMDS_MeshNodeIDFactory::GetMinID() const
-{
-  if (myMax == 0)
-    updateMinMax();
-  return myMin;
-}
-
-//=======================================================================
-//function : updateMinMax
-//purpose  : 
-//=======================================================================
-
-void SMDS_MeshNodeIDFactory::updateMinMax() const
-{
-  myMin = INT_MAX;
-  myMax = 0;
-  for (size_t i = 0; i < myMesh->myNodes.size(); i++)
-  {
-    if (myMesh->myNodes[i])
-    {
-      int id = myMesh->myNodes[i]->GetID();
-      if (id > myMax)
-        myMax = id;
-      if (id < myMin)
-        myMin = id;
-    }
-  }
-  if (myMin == INT_MAX)
-    myMin = 0;
-}
-
-SMDS_ElemIteratorPtr SMDS_MeshNodeIDFactory::elementsIterator() const
-{
-  return myMesh->elementsIterator(SMDSAbs_Node);
-}
-
-void SMDS_MeshNodeIDFactory::Clear()
-{
-  myMin = myMax = 0;
-  SMDS_MeshIDFactory::Clear();
-}
-
-void SMDS_MeshNodeIDFactory::emptyPool(int maxId)
-{
-  SMDS_MeshIDFactory::emptyPool(maxId);
-  myMax = maxId;
-}
diff --git a/src/SMDS/SMDS_MeshNodeIDFactory.hxx b/src/SMDS/SMDS_MeshNodeIDFactory.hxx
deleted file mode 100644 (file)
index 80c1271..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : SMDS_MeshElementIDFactory.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_MeshNodeIDFactory_HeaderFile
-#define _SMDS_MeshNodeIDFactory_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshIDFactory.hxx"
-#include "SMDS_ElemIterator.hxx"
-
-#include <vector>
-
-class SMDS_MeshElement;
-
-class SMDS_EXPORT SMDS_MeshNodeIDFactory: public SMDS_MeshIDFactory
-{
-public:
-  SMDS_MeshNodeIDFactory();
-  bool BindID(int ID, SMDS_MeshElement * elem);
-  SMDS_MeshElement * MeshElement(int ID);
-  virtual int GetFreeID();
-  virtual void ReleaseID(int ID, int vtkId = -1);
-  int GetMaxID() const;
-  int GetMinID() const;
-  SMDS_ElemIteratorPtr elementsIterator() const;
-  virtual void Clear();
-  virtual void emptyPool(int maxId);
-
-protected:
-  virtual void updateMinMax() const;
-  void updateMinMax(int id) const
-  {
-    if (id > myMax)
-      myMax = id;
-    if (id < myMin)
-      myMin = id;
-  }
-
-  mutable int myMin, myMax;
-
-};
-
-#endif
index a56c119b7b0c1e9f650c447689ddde04e3c5c084..755285447cb721d880293adb649e1a32a9fcedea 100644 (file)
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
 //
+
 #include "SMDS_MeshVolume.hxx"
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
 
-SMDSAbs_ElementType SMDS_MeshVolume::GetType() const
+#include "SMDS_Mesh.hxx"
+#include "SMDS_VolumeTool.hxx"
+#include "SMDS_VtkCellIterator.hxx"
+
+#include <boost/make_shared.hpp>
+
+// init a polyherdon
+void SMDS_MeshVolume::init( const std::vector<const SMDS_MeshNode*>& nodes,
+                            const std::vector<int>&                  nbNodesPerFace )
+{
+  std::vector<vtkIdType> ptIds;
+  ptIds.reserve( nodes.size() + nbNodesPerFace.size() + 1 );
+
+  size_t nbFaces = nbNodesPerFace.size();
+  for ( size_t iN = 0, iF = 0; iF < nbFaces; iF++ )
+  {
+    int nf = nbNodesPerFace[iF];
+    ptIds.push_back(nf);
+    for (int n = 0; n < nf; n++)
+      ptIds.push_back( nodes[ iN++ ]->GetVtkID() );
+  }
+
+  int vtkID = getGrid()->InsertNextLinkedCell(VTK_POLYHEDRON, nbFaces, &ptIds[0]);
+  setVtkID( vtkID );
+}
+
+void SMDS_MeshVolume::init( const std::vector<vtkIdType>& vtkNodeIds )
+{
+  SMDSAbs_EntityType aType = SMDSEntity_Tetra;
+  switch ( vtkNodeIds.size()) // cases are in order of usage frequency
+  {
+  case 4:  aType = SMDSEntity_Tetra;           break;
+  case 5:  aType = SMDSEntity_Pyramid;         break;
+  case 8:  aType = SMDSEntity_Hexa;            break;
+  case 6:  aType = SMDSEntity_Penta;           break;
+  case 10: aType = SMDSEntity_Quad_Tetra;      break;
+  case 20: aType = SMDSEntity_Quad_Hexa;       break;
+  case 13: aType = SMDSEntity_Quad_Pyramid;    break;
+  case 27: aType = SMDSEntity_TriQuad_Hexa;    break;
+  case 15: aType = SMDSEntity_Quad_Penta;      break;
+  case 18: aType = SMDSEntity_BiQuad_Penta;    break;
+  case 12: aType = SMDSEntity_Hexagonal_Prism; break;
+  default: throw SALOME_Exception("wrong volume nodes");
+  }
+  SMDS_MeshCell::init( aType, vtkNodeIds );
+}
+
+const SMDS_MeshNode* SMDS_MeshVolume::GetNode(const int ind) const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::GetNode( ind );
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  int id = 0, nbPoints = 0;
+  for (int i = 0; i < nFaces; i++)
+  {
+    int nodesInFace = ptIds[id];
+    if ( ind < nbPoints + nodesInFace )
+      return GetMesh()->FindNodeVtk( ptIds[ ind + i ]);
+    nbPoints += nodesInFace;
+    id += (nodesInFace + 1);
+  }
+  return 0;
+}
+int SMDS_MeshVolume::NbNodes() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::NbNodes();
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  int id = 0, nbPoints = 0;
+  for (int i = 0; i < nFaces; i++)
+  {
+    int nodesInFace = ptIds[id];
+    nbPoints += nodesInFace;
+    id += (nodesInFace + 1);
+  }
+  return nbPoints;
+}
+
+int SMDS_MeshVolume::NbFaces() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::NbFaces();
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  return nFaces;
+  
+}
+int SMDS_MeshVolume::NbEdges() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::NbEdges();
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  int id = 0, nbEdges = 0;
+  for (int i = 0; i < nFaces; i++)
+  {
+    int edgesInFace = ptIds[id];
+    id += (edgesInFace + 1);
+    nbEdges += edgesInFace;
+  }
+  nbEdges = nbEdges / 2;
+  return nbEdges;
+}
+
+int SMDS_MeshVolume::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::GetNodeIndex( node );
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  int id = 0;
+  for (int iF = 0; iF < nFaces; iF++)
+  {
+    int nodesInFace = ptIds[id];
+    for ( vtkIdType i = 0; i < nodesInFace; ++i )
+      if ( ptIds[id+i+1] == node->GetVtkID() )
+        return id+i-iF;
+    id += (nodesInFace + 1);
+  }
+  return -1;
+}
+bool SMDS_MeshVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+{
+  return false;
+}
+
+bool SMDS_MeshVolume::IsMediumNode(const SMDS_MeshNode* node) const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::IsMediumNode( node );
+
+  return false;
+}
+
+int SMDS_MeshVolume::NbCornerNodes() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::NbCornerNodes();
+
+  return NbNodes();
+}
+
+int SMDS_MeshVolume::NbFaceNodes (const int face_ind) const
 {
-        return SMDSAbs_Volume;
+  if ( !IsPoly() )
+    return SMDS_VolumeTool( this ).NbFaceNodes( face_ind-1 );
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+  int id = 0, nbNodes = 0;
+  for (int i = 0; i < nFaces; i++)
+  {
+    int nodesInFace = ptIds[id];
+    id += (nodesInFace + 1);
+    if (i == face_ind - 1)
+    {
+      nbNodes = nodesInFace;
+      break;
+    }
+  }
+  return nbNodes;
 }
 
-vtkIdType SMDS_MeshVolume::GetVtkType() const
+const SMDS_MeshNode* SMDS_MeshVolume::GetFaceNode (const int face_ind, const int node_ind) const
 {
-  return VTK_CONVEX_POINT_SET; // --- must be reimplemented in derived classes
+  if ( !IsPoly() )
+    return SMDS_VolumeTool( this ).GetFaceNodes( face_ind-1 )[ node_ind - 1 ];
+
+  vtkIdType nFaces = 0;
+  vtkIdType* ptIds = 0;
+  getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds);
+  int id = 0;
+  for (int i = 0; i < nFaces; i++)
+  {
+    int nodesInFace = ptIds[id]; // nodeIds in ptIds[id+1 .. id+nodesInFace]
+    if (i == face_ind - 1) // first face is number 1
+    {
+      if ((node_ind > 0) && (node_ind <= nodesInFace))
+        return GetMesh()->FindNodeVtk(ptIds[id + node_ind]); // ptIds[id+1] : first node
+    }
+    id += (nodesInFace + 1);
+  }
+  return 0;
+}
+
+std::vector<int> SMDS_MeshVolume::GetQuantities() const
+{
+  std::vector<int> quantities;
+  if ( IsPoly() )
+  {
+    vtkIdType nFaces = 0;
+    vtkIdType* ptIds = 0;
+    getGrid()->GetFaceStream( GetVtkID(), nFaces, ptIds );
+    int id = 0;
+    for (int i = 0; i < nFaces; i++)
+    {
+      int nodesInFace = ptIds[id]; // nodeIds in ptIds[id+1 .. id+nodesInFace]
+      quantities.push_back( nodesInFace );
+      id += (nodesInFace + 1);
+    }
+  }
+  return quantities;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// Create an iterator which iterate on nodes owned by the element.
+///////////////////////////////////////////////////////////////////////////////
+SMDS_ElemIteratorPtr SMDS_MeshVolume::nodesIterator() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::nodesIterator();
+
+  return boost::make_shared< SMDS_VtkCellIteratorPolyH<> >( GetMesh(), GetVtkID(), GetEntityType());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// Create an iterator which iterate on nodes owned by the element.
+///////////////////////////////////////////////////////////////////////////////
+SMDS_NodeIteratorPtr SMDS_MeshVolume::nodeIterator() const
+{
+  if ( !IsPoly() )
+    return SMDS_MeshCell::nodeIterator();
+
+  return boost::make_shared< SMDS_VtkCellIteratorPolyH< SMDS_NodeIterator> >( GetMesh(), GetVtkID(), GetEntityType());
 }
index 15887bdcd0778233fc66df31b42354d4a8ed357a..7a69da0a6cc5fcfbe82e5992786b44a132551613 100644 (file)
 
 #include "SMDS_MeshCell.hxx"
 
-class SMDS_EXPORT SMDS_MeshVolume:public SMDS_MeshCell
+/*!
+ * \brief Mesh volume. This type is not allocated.
+ *        It is only used as function argument type to provide more clear semantic
+ *        and to provide API specific to polyherdal volume
+ */
+class SMDS_EXPORT SMDS_MeshVolume : public SMDS_MeshCell
 {
-        
-  public:
-        SMDSAbs_ElementType GetType() const;
-  virtual vtkIdType GetVtkType() const;
+  void init( const std::vector<const SMDS_MeshNode*>& nodes,
+             const std::vector<int>&                  nbNodesPerFace ); // init a polyherdon
+
+  void init( const std::vector<vtkIdType>& vtkNodeIds );
+
+  friend class SMDS_Mesh;
+
+ public:
+  virtual SMDSAbs_ElementType  GetType() const { return SMDSAbs_Volume; }
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+  virtual int  NbNodes() const;
+  virtual int  NbFaces() const;
+  virtual int  NbEdges() const;
+  virtual int  GetNodeIndex( const SMDS_MeshNode* node ) const;
+  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
+  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
+  virtual int  NbCornerNodes() const;
+
+  virtual SMDS_ElemIteratorPtr nodesIterator() const = 0;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const = 0;
+
+  // 1 <= face_ind <= NbFaces()
+  int NbFaceNodes (const int face_ind) const;
+  // 1 <= face_ind <= NbFaces()
+  // 1 <= node_ind <= NbFaceNodes()
+  const SMDS_MeshNode* GetFaceNode (const int face_ind, const int node_ind) const;
+
+  std::vector<int> GetQuantities() const;
+
+  static SMDSAbs_ElementType Type() { return SMDSAbs_Volume; }
 };
 #endif
index 54ead2af02c79dabbd4dcdf4e0d2ffbfcd0b056e..2ddc79d87de391a006e7b1b6f0246aafa8aebb67 100644 (file)
 
 #include "SMDS_PolygonalFaceOfNodes.hxx"
 
-#include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_Mesh.hxx"
 
-#include "utilities.h"
+#include <boost/make_shared.hpp>
 
-using namespace std;
+#include <utilities.h>
 
 //=======================================================================
 //function : Constructor
 //purpose  : 
 //=======================================================================
-SMDS_PolygonalFaceOfNodes::SMDS_PolygonalFaceOfNodes
-                          (const std::vector<const SMDS_MeshNode *>& nodes)
+SMDS_PolygonalFaceOfNodes::
+SMDS_PolygonalFaceOfNodes (const std::vector<const SMDS_MeshNode *>& nodes)
 {
-  //MESSAGE("******************************************** SMDS_PolygonalFaceOfNodes");
   myNodes = nodes;
 }
 
@@ -54,41 +52,40 @@ SMDS_PolygonalFaceOfNodes::SMDS_PolygonalFaceOfNodes
 SMDSAbs_ElementType SMDS_PolygonalFaceOfNodes::GetType() const
 {
   return SMDSAbs_Face;
-  //return SMDSAbs_PolygonalFace;
 }
 
 //=======================================================================
 //function : ChangeNodes
 //purpose  : 
 //=======================================================================
-bool SMDS_PolygonalFaceOfNodes::ChangeNodes (std::vector<const SMDS_MeshNode *> nodes)
-{
-  if (nodes.size() < 3)
-    return false;
+// bool SMDS_PolygonalFaceOfNodes::ChangeNodes (std::vector<const SMDS_MeshNode *> nodes)
+// {
+//   if (nodes.size() < 3)
+//     return false;
 
-  myNodes = nodes;
+//   myNodes = nodes;
 
-  return true;
-}
+//   return true;
+// }
 
 //=======================================================================
 //function : ChangeNodes
 //purpose  : to support the same interface, as SMDS_FaceOfNodes
 //=======================================================================
-bool SMDS_PolygonalFaceOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[],
-                                             const int            nbNodes)
-{
-  if (nbNodes < 3)
-    return false;
+// bool SMDS_PolygonalFaceOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[],
+//                                              const int            nbNodes)
+// {
+//   if (nbNodes < 3)
+//     return false;
 
-  myNodes.resize(nbNodes);
-  int i = 0;
-  for (; i < nbNodes; i++) {
-    myNodes[i] = nodes[i];
-  }
+//   myNodes.resize(nbNodes);
+//   int i = 0;
+//   for (; i < nbNodes; i++) {
+//     myNodes[i] = nodes[i];
+//   }
 
-  return true;
-}
+//   return true;
+// }
 
 //=======================================================================
 //function : NbNodes
@@ -130,65 +127,12 @@ void SMDS_PolygonalFaceOfNodes::Print(ostream & OS) const
   OS << myNodes[i] << ") " << endl;
 }
 
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-class SMDS_PolygonalFaceOfNodes_MyIterator:public SMDS_NodeVectorElemIterator
-{
- public:
-  SMDS_PolygonalFaceOfNodes_MyIterator(const vector<const SMDS_MeshNode *>& s):
-    SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
-};
-
 /// ===================================================================
 /*!
  * \brief Iterator on edges of face
  */
 /// ===================================================================
 
-class _MyEdgeIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t                            myIndex;
-public:
-  _MyEdgeIterator(const SMDS_MeshFace* face):myIndex(0) {
-    myElems.reserve( face->NbNodes() );
-    for ( int i = 0; i < face->NbNodes(); ++i ) {
-      const SMDS_MeshElement* edge =
-        SMDS_Mesh::FindEdge( face->GetNode( i ), face->GetNodeWrap( i + 1 ));
-      if ( edge )
-        myElems.push_back( edge );
-    }
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator
-                                         (SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Face:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Face);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
-    break;
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type,SMDS_ElemIteratorPtr
-        (new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes))));
-  }
-  return SMDS_ElemIteratorPtr();
-}
-
 /*!
  * \brief Return node by its index
  * \param ind - node index
@@ -198,3 +142,13 @@ const SMDS_MeshNode* SMDS_PolygonalFaceOfNodes::GetNode(const int ind) const
 {
   return myNodes[ WrappedIndex( ind )];
 }
+
+SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::nodesIterator() const
+{
+  return boost::make_shared< SMDS_NodeArrayElemIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
+
+SMDS_NodeIteratorPtr SMDS_PolygonalFaceOfNodes::nodeIterator() const
+{
+  return boost::make_shared< SMDS_NodeArrayIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
index 2fec139fb08974ae1eb5d383407f7c95da04cee5..1d8c7ce4bf93aeb159b156e15e7b092e2a9a1917 100644 (file)
 #define _SMDS_PolygonalFaceOfNodes_HeaderFile
 
 #include "SMESH_SMDS.hxx"
+#include "SMDS_CellOfNodes.hxx"
 
-#include "SMDS_MeshFace.hxx"
-//#include "SMDS_FaceOfNodes.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Iterator.hxx"
+#include <vector>
 
-#include <iostream>
-
-//class SMDS_PolygonalFaceOfNodes:public SMDS_FaceOfNodes
-class SMDS_EXPORT SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_PolygonalFaceOfNodes : public SMDS_CellOfNodes
 {
  public:
   SMDS_PolygonalFaceOfNodes (const std::vector<const SMDS_MeshNode *>& nodes);
@@ -43,13 +38,10 @@ class SMDS_EXPORT SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace
   virtual SMDSAbs_ElementType GetType() const;
   virtual SMDSAbs_EntityType  GetEntityType() const { return SMDSEntity_Polygon; }
   virtual SMDSAbs_GeometryType GetGeomType()  const { return SMDSGeom_POLYGON; }
-  virtual bool IsPoly() const { return true; };
-
-  bool ChangeNodes (std::vector<const SMDS_MeshNode *> nodes);
-
-  bool ChangeNodes (const SMDS_MeshNode* nodes[],
-                    const int            nbNodes);
-  // to support the same interface, as SMDS_FaceOfNodes
+  virtual bool IsPoly() const { return true; }
+  virtual bool IsQuadratic() const { return false; }
+  virtual bool IsMediumNode(const SMDS_MeshNode* node) const { return false; }
+  virtual int  NbCornerNodes() const { return NbNodes(); }
 
   virtual int NbNodes() const;
   virtual int NbEdges() const;
@@ -57,17 +49,13 @@ class SMDS_EXPORT SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace
 
   virtual void Print (std::ostream & OS) const;
 
-  /*!
-   * \brief Return node by its index
-    * \param ind - node index
-    * \retval const SMDS_MeshNode* - the node
-   */
   virtual const SMDS_MeshNode* GetNode(const int ind) const;
 
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
+
  protected:
-  virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
 
- private:
   std::vector<const SMDS_MeshNode *> myNodes;
 };
 
diff --git a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx b/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx
deleted file mode 100644 (file)
index 20c948b..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_SetIterator.hxx"
-#include "SMDS_VolumeTool.hxx"
-#include "utilities.h"
-
-#include <set>
-
-using namespace std;
-
-//=======================================================================
-//function : Constructor
-//purpose  : Create a volume of many faces
-//=======================================================================
-SMDS_PolyhedralVolumeOfNodes::SMDS_PolyhedralVolumeOfNodes
-                                (vector<const SMDS_MeshNode *> nodes,
-                                 vector<int>                   quantities)
-: SMDS_VolumeOfNodes(NULL, NULL, NULL, NULL)
-{
-  //MESSAGE("****************************************** SMDS_PolyhedralVolumeOfNodes");
-  ChangeNodes(nodes, quantities);
-}
-
-//=======================================================================
-//function : GetType
-//purpose  : 
-//=======================================================================
-SMDSAbs_ElementType SMDS_PolyhedralVolumeOfNodes::GetType() const
-{
-//  return SMDSAbs_PolyhedralVolume;
-  return SMDSAbs_Volume;
-}
-
-//=======================================================================
-//function : ChangeNodes
-//purpose  : 
-//=======================================================================
-bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (const vector<const SMDS_MeshNode *>& nodes,
-                                                const vector<int>&                   quantities)
-{
-  myNodesByFaces = nodes;
-  myQuantities = quantities;
-
-  // Init fields of parent class, it allows to get only unique nodes(?)
-
-  set<const SMDS_MeshNode *> aSet;
-  aSet.insert( nodes.begin(), nodes.end());
-  //SMDS_VolumeOfNodes::ChangeNodes(aNodes, aNbNodes);
-  delete [] myNodes;
-  myNbNodes = aSet.size();
-  myNodes = new const SMDS_MeshNode* [myNbNodes];
-  set<const SMDS_MeshNode *>::iterator anIter = aSet.begin();
-  for (int k=0; anIter != aSet.end(); anIter++, k++)
-    myNodes[k] = *anIter;
-
-  return true;
-}
-
-//=======================================================================
-//function : NbEdges
-//purpose  : 
-//=======================================================================
-int SMDS_PolyhedralVolumeOfNodes::NbNodes() const
-{
-  return myNodesByFaces.size();
-}
-
-//=======================================================================
-//function : NbEdges
-//purpose  : 
-//=======================================================================
-int SMDS_PolyhedralVolumeOfNodes::NbEdges() const
-{
-  int nbEdges = 0;
-
-  for ( size_t ifa = 0; ifa < myQuantities.size(); ifa++) {
-    nbEdges += myQuantities[ifa];
-  }
-  nbEdges /= 2;
-
-  return nbEdges;
-}
-
-//=======================================================================
-//function : NbFaces
-//purpose  : 
-//=======================================================================
-int SMDS_PolyhedralVolumeOfNodes::NbFaces() const
-{
-  return myQuantities.size();
-}
-
-//=======================================================================
-//function : NbFaceNodes
-//purpose  : 
-//=======================================================================
-int SMDS_PolyhedralVolumeOfNodes::NbFaceNodes (const int face_ind) const
-{
-  if (face_ind < 1 || (int)myQuantities.size() < face_ind)
-    return 0;
-  return myQuantities[face_ind - 1];
-}
-
-//=======================================================================
-//function : GetFaceNode
-//purpose  : 
-//=======================================================================
-const SMDS_MeshNode* SMDS_PolyhedralVolumeOfNodes::GetFaceNode (const int face_ind,
-                                                                const int node_ind) const
-{
-  if (node_ind < 1 || NbFaceNodes(face_ind) < node_ind)
-    return NULL;
-
-  int i, first_node = 0;
-  for (i = 0; i < face_ind - 1; i++) {
-    first_node += myQuantities[i];
-  }
-
-  return myNodesByFaces[first_node + node_ind - 1];
-}
-
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-void SMDS_PolyhedralVolumeOfNodes::Print (ostream & OS) const
-{
-  OS << "polyhedral volume <" << GetID() << "> : ";
-
-  int faces_len = myQuantities.size();
-  //int nodes_len = myNodesByFaces.size();
-  int cur_first_node = 0;
-
-  int i, j;
-  for (i = 0; i < faces_len; i++) {
-    OS << "face_" << i << " (";
-    for (j = 0; j < myQuantities[i] - 1; j++) {
-      OS << myNodesByFaces[cur_first_node + j] << ",";
-    }
-    OS << myNodesByFaces[cur_first_node + j] << ") ";
-    cur_first_node += myQuantities[i];
-  }
-}
-
-//=======================================================================
-//function : ChangeNodes
-//purpose  : usage disabled
-//=======================================================================
-bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[],
-                                                const int            nbNodes)
-{
-  return false;
-}
-
-/// ===================================================================
-/*!
- * \brief Iterator on node of volume
- */
-/// ===================================================================
-
-struct _MyIterator:public SMDS_NodeVectorElemIterator
-{
-  _MyIterator(const vector<const SMDS_MeshNode *>& nodes):
-    SMDS_NodeVectorElemIterator( nodes.begin(), nodes.end()) {}
-};
-
-/// ===================================================================
-/*!
- * \brief Iterator on faces or edges of volume
- */
-/// ===================================================================
-
-class _MySubIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t                            myIndex;
-public:
-  _MySubIterator(const SMDS_MeshVolume* vol, SMDSAbs_ElementType type):myIndex(0) {
-    SMDS_VolumeTool vTool(vol);
-    if (type == SMDSAbs_Face)
-      vTool.GetAllExistingFaces( myElems );
-    else
-      vTool.GetAllExistingEdges( myElems );
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-//================================================================================
-/*!
- * \brief Return Iterator of sub elements
- */
-//================================================================================
-
-SMDS_ElemIteratorPtr SMDS_PolyhedralVolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Volume:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new _MyIterator(myNodesByFaces));
-  case SMDSAbs_Face:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
-  default:
-    MESSAGE("ERROR : Iterator not implemented");
-    return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
-  }
-}
-
-//================================================================================
-/*!
- * \brief Return iterator on unique nodes
- */
-//================================================================================
-
-SMDS_ElemIteratorPtr SMDS_PolyhedralVolumeOfNodes::uniqueNodesIterator() const
-{
-  return SMDS_ElemIteratorPtr
-    (new SMDS_NodeArrayElemIterator( myNodes, & myNodes[ myNbNodes ]));
-}
-
-//================================================================================
-/*!
- * \brief Return node by its index
- */
-//================================================================================
-
-const SMDS_MeshNode* SMDS_PolyhedralVolumeOfNodes::GetNode(const int ind) const
-{
-  return myNodesByFaces[ ind ];
-}
diff --git a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx b/src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx
deleted file mode 100644 (file)
index cba8a91..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_PolyhedralVolumeOfNodes.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_PolyhedralVolumeOfNodes_HeaderFile
-#define _SMDS_PolyhedralVolumeOfNodes_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_VolumeOfNodes.hxx"
-
-class SMDS_EXPORT SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes
-{
- public:
-  SMDS_PolyhedralVolumeOfNodes (std::vector<const SMDS_MeshNode *> nodes,
-                                std::vector<int>                   quantities);
-
-  //virtual ~SMDS_PolyhedralVolumeOfNodes();
-
-  virtual SMDSAbs_ElementType GetType() const;  
-  virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Polyhedra; }
-  virtual bool IsPoly() const { return true; };
-
-  bool ChangeNodes (const std::vector<const SMDS_MeshNode *> & nodes,
-                    const std::vector<int> &                   quantities);
-
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-
-  int NbFaceNodes (const int face_ind) const;
-  // 1 <= face_ind <= NbFaces()
-
-  const SMDS_MeshNode* GetFaceNode (const int face_ind, const int node_ind) const;
-  // 1 <= face_ind <= NbFaces()
-  // 1 <= node_ind <= NbFaceNodes()
-
-  const std::vector<int> & GetQuanities() const { return myQuantities; }
-
-  virtual void Print (std::ostream & OS) const;
-
-  /*!
-   * \brief Return node by its index
-   */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-
-  /*!
-   * \brief Return iterator on unique nodes
-   */
-  SMDS_ElemIteratorPtr uniqueNodesIterator() const;
-  /*!
-   * \brief Return nb of unique nodes
-   */
-  int NbUniqueNodes() const { return myNbNodes; }
-
-protected:
-  SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-
- private:
-  // usage disabled
-  bool ChangeNodes (const SMDS_MeshNode* nodes[],
-                    const int            nbNodes);
-
- private:
-  std::vector<const SMDS_MeshNode *> myNodesByFaces;
-  std::vector<int> myQuantities;
-};
-
-#endif
diff --git a/src/SMDS/SMDS_Position.cxx b/src/SMDS/SMDS_Position.cxx
deleted file mode 100644 (file)
index e7c408f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_Position.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#include "SMDS_Position.hxx"
-#include "utilities.h"
-
-//=======================================================================
-//function : SMDS_Position
-//purpose  : 
-//=======================================================================
-
-SMDS_Position::SMDS_Position()
-{
-  //MESSAGE("########################## SMDS_Position ");
-}
-
-//=======================================================================
-//function : GetDim
-//purpose  : 
-//=======================================================================
-
-int SMDS_Position::GetDim() const
-{
-//   switch ( GetTypeOfPosition() ) {
-//   case SMDS_TOP_UNSPEC:  return -1;
-//   case SMDS_TOP_VERTEX:  return 0;
-//   case SMDS_TOP_EDGE:    return 1;
-//   case SMDS_TOP_FACE:    return 2;
-//   case SMDS_TOP_3DSPACE: return 3;
-//   }
-  return GetTypeOfPosition();
-}
-
-     
index b6976677d291a5ae3f9d6f5f3e5c875cd23158d0..62c4042d3322fd09c299aa3afd83d3112b4408c7 100644 (file)
 #include "SMESH_SMDS.hxx"
 
 #include "SMDS_TypeOfPosition.hxx"
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
-class SMDS_Position;
+//class SMDS_Position;
 //typedef boost::shared_ptr<SMDS_Position> SMDS_PositionPtr;
-typedef SMDS_Position* SMDS_PositionPtr;
+//typedef SMDS_Position* SMDS_PositionPtr;
 
 class SMDS_EXPORT SMDS_Position
 {
 
-  public:
-        virtual SMDS_TypeOfPosition GetTypeOfPosition() const = 0;
-        virtual int GetDim() const;
-        virtual ~SMDS_Position() {}
+ public:
+  virtual SMDS_TypeOfPosition GetTypeOfPosition() const = 0;
+  int GetDim() const { return GetTypeOfPosition(); }
+  virtual const double* GetParameters() const = 0;
+  virtual ~SMDS_Position() {}
+};
+
+/*!
+ * \brief Replace "typedef SMDS_Position* SMDS_PositionPtr" by a smart
+ *        pointer allowing implicit casting to derived types; e.g.
+ *        if ( SMDS_FacePositionPtr fPos = node->GetPosition() )
+ *          fPos->SetUParameter(0);
+ */
+
+template<class T>
+class SMDS_EXPORT SMDS_Ptr : public std::unique_ptr< T >
+{
+  bool myIsOwner;
+
+ public:
+  SMDS_Ptr( T * pos = (T *) 0, bool isOwner=true ):
+    std::unique_ptr< T >( pos ), myIsOwner( isOwner ) {}
+
+  SMDS_Ptr( const SMDS_Ptr& from ) : myIsOwner( from.myIsOwner )
+  { this->swap( const_cast<SMDS_Ptr&>( from )); }
+
+  SMDS_Ptr& operator=( const SMDS_Ptr& from  )
+  {
+    myIsOwner = from.myIsOwner;
+    this->swap( const_cast<SMDS_Ptr&>( from ));
+    return *this;
+  }
+
+  template<class Y>
+    SMDS_Ptr( const SMDS_Ptr< Y >& base ): myIsOwner( true )
+  {
+    if ( const T* p = dynamic_cast<const T*>( base.get() ))
+    {
+      this->reset( const_cast<T*>( p ));
+      this->myIsOwner = base.IsOwner();
+      const_cast< SMDS_Ptr< Y >& >( base ).release();
+    }
+  }
+  ~SMDS_Ptr() { if ( !myIsOwner ) this->release(); }
 
-  protected:
-          SMDS_Position();
+  operator bool () const { return bool( this->get() ); }
+  bool IsOwner() const { return myIsOwner; }
 };
 
+class SMDS_EdgePosition;
+class SMDS_FacePosition;
+typedef SMDS_Ptr< SMDS_Position >     SMDS_PositionPtr;
+typedef SMDS_Ptr< SMDS_EdgePosition > SMDS_EdgePositionPtr;
+typedef SMDS_Ptr< SMDS_FacePosition > SMDS_FacePositionPtr;
 
 #endif
diff --git a/src/SMDS/SMDS_QuadraticEdge.cxx b/src/SMDS/SMDS_QuadraticEdge.cxx
deleted file mode 100644 (file)
index 9f6cf94..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-// File:      SMDS_QuadraticEdge.cxx
-// Created:   16.01.06 16:25:42
-// Author:    Sergey KUUL
-//
-#include "SMDS_QuadraticEdge.hxx"
-
-#include "SMDS_SetIterator.hxx"
-#include "SMDS_IteratorOfElements.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_QuadraticEdge
-//purpose  : 
-//=======================================================================
-
-SMDS_QuadraticEdge::SMDS_QuadraticEdge(const SMDS_MeshNode * node1,
-                                       const SMDS_MeshNode * node2,
-                                       const SMDS_MeshNode * node12)
-     :SMDS_LinearEdge(node1,node2)
-{
-  //MESSAGE("******************************************************* SMDS_QuadraticEdge");
-  myNodes[2]=node12;
-}
-
-
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-
-void SMDS_QuadraticEdge::Print(ostream & OS) const
-{
-  OS << "quadratic edge <" << GetID() << "> : ( first-" << myNodes[0]
-     << " , last-" << myNodes[1] << " , medium-" << myNodes[2] << ") " << endl;
-}
-
-
-//=======================================================================
-//function : NbNodes
-//purpose  : 
-//=======================================================================
-
-int SMDS_QuadraticEdge::NbNodes() const
-{
-  return 3;
-}
-
-//=======================================================================
-//function : ChangeNodes
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticEdge::ChangeNodes(const SMDS_MeshNode * node1,
-                                     const SMDS_MeshNode * node2,
-                                     const SMDS_MeshNode * node12)
-{
-  myNodes[0]=node1;
-  myNodes[1]=node2;
-  myNodes[2]=node12;
-  return true;
-}
-
-//=======================================================================
-//function : IsMediumNode
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticEdge::IsMediumNode(const SMDS_MeshNode * node) const
-{
-  return (myNodes[2]==node);
-}
-
-namespace
-{
-  //=======================================================================
-  //class : _MyInterlacedNodeIterator
-  //purpose  : 
-  //=======================================================================
-
-  class _MyInterlacedNodeIterator: public SMDS_NodeArrayIterator
-  {
-    const SMDS_MeshNode * myNodes[3];
-  public:
-    _MyInterlacedNodeIterator(const SMDS_MeshNode * const * nodes):
-      SMDS_NodeArrayIterator( myNodes, & myNodes[3] )
-    {
-      myNodes[0] = nodes[0];
-      myNodes[1] = nodes[2];
-      myNodes[2] = nodes[1];
-    }
-  };
-
-  //=======================================================================
-  //class : _MyNodeIterator
-  //purpose  : 
-  //=======================================================================
-
-  class _MyNodeIterator:public SMDS_NodeArrayElemIterator
-  {
-  public:
-    _MyNodeIterator(const SMDS_MeshNode * const * nodes):
-      SMDS_NodeArrayElemIterator( nodes, & nodes[3] ) {}
-  };
-}
-
-//=======================================================================
-//function : interlacedNodesIterator
-//purpose  : 
-//=======================================================================
-
-SMDS_NodeIteratorPtr SMDS_QuadraticEdge::interlacedNodesIterator() const
-{
-  return SMDS_NodeIteratorPtr (new _MyInterlacedNodeIterator (myNodes));
-}
-
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-
-SMDS_ElemIteratorPtr SMDS_QuadraticEdge::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Edge:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge); 
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes));
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type, SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes))));
-  }
-}
diff --git a/src/SMDS/SMDS_QuadraticEdge.hxx b/src/SMDS/SMDS_QuadraticEdge.hxx
deleted file mode 100644 (file)
index 7eeabf6..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_QuadraticEdge.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_QuadraticEdge_HeaderFile
-#define _SMDS_QuadraticEdge_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_LinearEdge.hxx"
-#include <iostream>
-
-class SMDS_EXPORT SMDS_QuadraticEdge: public SMDS_LinearEdge
-{
-
-public:
-  SMDS_QuadraticEdge(const SMDS_MeshNode * node1,
-                     const SMDS_MeshNode * node2,
-                     const SMDS_MeshNode * node12);
-
-  bool ChangeNodes(const SMDS_MeshNode * node1,
-                   const SMDS_MeshNode * node2,
-                   const SMDS_MeshNode * node12);
-
-  void Print(std::ostream & OS) const;
-
-  int NbNodes() const;
-
-  virtual SMDSAbs_EntityType GetEntityType() const { return SMDSEntity_Quad_Edge; }
-
-  virtual bool IsQuadratic() const { return true; }
-
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-
-  SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-
-protected:
-  SMDS_ElemIteratorPtr
-  elementsIterator(SMDSAbs_ElementType type) const;
-
-};
-#endif
diff --git a/src/SMDS/SMDS_QuadraticFaceOfNodes.cxx b/src/SMDS/SMDS_QuadraticFaceOfNodes.cxx
deleted file mode 100644 (file)
index 49066ac..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-// File:      SMDS_QuadraticFaceOfNodes.cxx
-// Created:   16.01.06 17:12:58
-// Author:    Sergey KUUL
-//
-#include "SMDS_QuadraticFaceOfNodes.hxx"
-
-#include "SMDS_SetIterator.hxx"
-#include "SMDS_IteratorOfElements.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Mesh.hxx"
-
-#include "utilities.h"
-
-using namespace std;
-
-
-//=======================================================================
-//function : SMDS_QuadraticFaceOfNodes()
-//purpose  : Constructor
-//=======================================================================
-
-SMDS_QuadraticFaceOfNodes::SMDS_QuadraticFaceOfNodes(const SMDS_MeshNode * n1,
-                                                     const SMDS_MeshNode * n2,
-                                                     const SMDS_MeshNode * n3,
-                                                     const SMDS_MeshNode * n12,
-                                                     const SMDS_MeshNode * n23,
-                                                     const SMDS_MeshNode * n31)
-{
-  //MESSAGE("********************************************** SMDS_QuadraticFaceOfNodes 1");
-  myNodes.resize( 6 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n12;
-  myNodes[ 4 ] = n23;
-  myNodes[ 5 ] = n31;
-}
-
-
-//=======================================================================
-//function : SMDS_QuadraticFaceOfNodes()
-//purpose  : Constructor
-//=======================================================================
-
-SMDS_QuadraticFaceOfNodes::SMDS_QuadraticFaceOfNodes(const SMDS_MeshNode * n1,
-                                                     const SMDS_MeshNode * n2,
-                                                     const SMDS_MeshNode * n3,
-                                                     const SMDS_MeshNode * n4,
-                                                     const SMDS_MeshNode * n12,
-                                                     const SMDS_MeshNode * n23,
-                                                     const SMDS_MeshNode * n34,
-                                                     const SMDS_MeshNode * n41)
-{
-  //MESSAGE("********************************************* SMDS_QuadraticFaceOfNodes 2");
-  myNodes.resize( 8 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n4;
-  myNodes[ 4 ] = n12;
-  myNodes[ 5 ] = n23;
-  myNodes[ 6 ] = n34;
-  myNodes[ 7 ] = n41;
-}
-
-
-//=======================================================================
-//function : IsMediumNode
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticFaceOfNodes::IsMediumNode(const SMDS_MeshNode * node) const
-{
-  int i=NbNodes()/2;
-  for(; i<NbNodes(); i++) {
-    if(myNodes[i]==node) return true;
-  }
-  return false;
-}
-
-
-//=======================================================================
-//function : ChangeNodes
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticFaceOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
-                                            const int            nbNodes)
-{
-  if( nbNodes==6 || nbNodes==8 ) {
-    myNodes.resize(nbNodes);
-    int i=0;
-    for(; i<nbNodes; i++) {
-      myNodes[i] = nodes[i];
-    }
-    return true;
-  }
-  return false;
-}
-
-
-//=======================================================================
-//function : NbNodes
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticFaceOfNodes::NbNodes() const
-{
-  return myNodes.size();
-}
-
-
-//=======================================================================
-//function : NbEdges
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticFaceOfNodes::NbEdges() const
-{
-  return NbNodes()/2;
-}
-
-
-//=======================================================================
-//function : NbFaces
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticFaceOfNodes::NbFaces() const
-{
-  return 1;
-}
-
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-void SMDS_QuadraticFaceOfNodes::Print(ostream & OS) const
-{
-  OS << "quadratic face <" << GetID() << " > : ";
-  int i, nbNodes = myNodes.size();
-  for (i = 0; i < nbNodes - 1; i++)
-    OS << myNodes[i] << ",";
-  OS << myNodes[i] << ") " << endl;
-}
-
-namespace {
-
-  //=======================================================================
-  //class : _MyInterlacedNodeIterator
-  //purpose  :
-  //=======================================================================
-
-  class _MyInterlacedNodeIterator:public SMDS_NodeIterator
-  {
-    const vector<const SMDS_MeshNode *>& mySet;
-    size_t                               myIndex;
-    const int *                          myInterlace;
-  public:
-    _MyInterlacedNodeIterator(const vector<const SMDS_MeshNode *>& s,
-                              const int * interlace):
-      mySet(s),myIndex(0),myInterlace(interlace) {}
-
-    bool more()
-    {
-      return myIndex < mySet.size();
-    }
-
-    const SMDS_MeshNode* next()
-    {
-      return mySet[ myInterlace[ myIndex++ ]];
-    }
-  };
-
-  //=======================================================================
-  //class : _MyNodeIterator
-  //purpose  : 
-  //=======================================================================
-
-  class _MyNodeIterator : public SMDS_NodeVectorElemIterator
-  {
-  public:
-    _MyNodeIterator(const vector<const SMDS_MeshNode *>& s):
-      SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
-  };
-  
-}
-
-//=======================================================================
-//function : interlacedNodesIterator
-//purpose  : 
-//=======================================================================
-
-SMDS_NodeIteratorPtr SMDS_QuadraticFaceOfNodes::interlacedNodesIterator() const
-{
-  static int triaInterlace [] = { 0, 3, 1, 4, 2, 5 };
-  static int quadInterlace [] = { 0, 4, 1, 5, 2, 6, 3, 7 };
-  return SMDS_NodeIteratorPtr
-    (new _MyInterlacedNodeIterator (myNodes, myNodes.size()==6 ? triaInterlace : quadInterlace));
-}
-
-/// ===================================================================
-/*!
- * \brief Iterator on edges of face
- */
-/// ===================================================================
-
-class _MyEdgeIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t                            myIndex;
-public:
-  _MyEdgeIterator(const SMDS_QuadraticFaceOfNodes* face):myIndex(0) {
-    myElems.reserve( face->NbNodes() );
-    SMDS_NodeIteratorPtr nIt = face->interlacedNodesIterator();
-    const SMDS_MeshNode* n0 = face->GetNodeWrap( -1 );
-    while ( nIt->more() ) {
-      const SMDS_MeshNode* n1 = nIt->next();
-      const SMDS_MeshElement* edge = SMDS_Mesh::FindEdge( n0, n1 );
-      if ( edge )
-        myElems.push_back( edge );
-      n0 = n1;
-    }
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-
-SMDS_ElemIteratorPtr SMDS_QuadraticFaceOfNodes::elementsIterator
-                                         (SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Face:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Face);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
-    break;
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type,SMDS_ElemIteratorPtr (new _MyNodeIterator(myNodes))));
-  }
-  return SMDS_ElemIteratorPtr();
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode* SMDS_QuadraticFaceOfNodes::GetNode(const int ind) const
-{
-  return myNodes[ ind ];
-}
-
-SMDSAbs_EntityType SMDS_QuadraticFaceOfNodes::GetEntityType() const
-{
-  return NbNodes() == 6 ? SMDSEntity_Quad_Triangle : SMDSEntity_Quad_Quadrangle;
-}
diff --git a/src/SMDS/SMDS_QuadraticFaceOfNodes.hxx b/src/SMDS/SMDS_QuadraticFaceOfNodes.hxx
deleted file mode 100644 (file)
index 8ef0a9d..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_QuadraticVolumeOfNodes.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_QuadraticFaceOfNodes_HeaderFile
-#define _SMDS_QuadraticFaceOfNodes_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshFace.hxx"
-
-class SMDS_EXPORT SMDS_QuadraticFaceOfNodes:public SMDS_MeshFace
-{
-public:
-  SMDS_QuadraticFaceOfNodes (const SMDS_MeshNode * n1,
-                             const SMDS_MeshNode * n2,
-                             const SMDS_MeshNode * n3,
-                             const SMDS_MeshNode * n12,
-                             const SMDS_MeshNode * n23,
-                             const SMDS_MeshNode * n31);
-
-  SMDS_QuadraticFaceOfNodes(const SMDS_MeshNode * n1,
-                            const SMDS_MeshNode * n2,
-                            const SMDS_MeshNode * n3,
-                            const SMDS_MeshNode * n4,
-                            const SMDS_MeshNode * n12,
-                            const SMDS_MeshNode * n23,
-                            const SMDS_MeshNode * n34,
-                            const SMDS_MeshNode * n41);
-
-  virtual SMDSAbs_EntityType GetEntityType() const;
-  virtual bool IsQuadratic() const { return true; }
-
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-
-  bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                   const int            nbNodes);
-
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-
-  virtual void Print (std::ostream & OS) const;
-
-  SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-
-  /*!
-   * \brief Return node by its index
-    * \param ind - node index
-    * \retval const SMDS_MeshNode* - the node
-   */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-
-protected:
-  virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
-
- private:
-  std::vector<const SMDS_MeshNode *> myNodes;
-};
-
-#endif
diff --git a/src/SMDS/SMDS_QuadraticVolumeOfNodes.cxx b/src/SMDS/SMDS_QuadraticVolumeOfNodes.cxx
deleted file mode 100644 (file)
index 0248ba8..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-// File:      SMDS_QuadraticVolumeOfNodes.cxx
-// Created:   17.01.06 09:46:11
-// Author:    Sergey KUUL
-//
-#include "SMDS_QuadraticVolumeOfNodes.hxx"
-
-#include "SMDS_IteratorOfElements.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_SetIterator.hxx"
-#include "SMDS_VolumeTool.hxx"
-
-#include "utilities.h"
-
-using namespace std;
-
-
-//=======================================================================
-//function : SMDS_QuadraticVolumeOfNodes()
-//purpose  : Constructor tetrahedron of 10 nodes
-//=======================================================================
-
-SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
-                                               (const SMDS_MeshNode * n1,
-                                                const SMDS_MeshNode * n2,
-                                                const SMDS_MeshNode * n3,
-                                                const SMDS_MeshNode * n4,
-                                                const SMDS_MeshNode * n12,
-                                                const SMDS_MeshNode * n23,
-                                                const SMDS_MeshNode * n31,
-                                                const SMDS_MeshNode * n14, 
-                                                const SMDS_MeshNode * n24,
-                                                const SMDS_MeshNode * n34)
-{
-  //MESSAGE("*********************************************** SMDS_QuadraticVolumeOfNodes");
-  myNodes.resize( 10 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n4;
-  myNodes[ 4 ] = n12;
-  myNodes[ 5 ] = n23;
-  myNodes[ 6 ] = n31;
-  myNodes[ 7 ] = n14;
-  myNodes[ 8 ] = n24;
-  myNodes[ 9 ] = n34;
-}
-
-
-//=======================================================================
-//function : SMDS_QuadraticVolumeOfNodes()
-//purpose  : Constructor pyramid of 13 nodes
-//=======================================================================
-
-SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
-                                               (const SMDS_MeshNode * n1,
-                                                const SMDS_MeshNode * n2,
-                                                const SMDS_MeshNode * n3,
-                                                const SMDS_MeshNode * n4,
-                                                const SMDS_MeshNode * n5,
-                                                const SMDS_MeshNode * n12,
-                                                const SMDS_MeshNode * n23,
-                                                const SMDS_MeshNode * n34,
-                                                const SMDS_MeshNode * n41, 
-                                                const SMDS_MeshNode * n15,
-                                                const SMDS_MeshNode * n25,
-                                                const SMDS_MeshNode * n35,
-                                                const SMDS_MeshNode * n45)
-{
-  //MESSAGE("*********************************************** SMDS_QuadraticVolumeOfNodes");
-  myNodes.resize( 13 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n4;
-  myNodes[ 4 ] = n5;
-  myNodes[ 5 ] = n12;
-  myNodes[ 6 ] = n23;
-  myNodes[ 7 ] = n34;
-  myNodes[ 8 ] = n41;
-  myNodes[ 9 ] = n15;
-  myNodes[ 10 ] = n25;
-  myNodes[ 11 ] = n35;
-  myNodes[ 12 ] = n45;
-}
-
-
-//=======================================================================
-//function : SMDS_QuadraticVolumeOfNodes()
-//purpose  : Constructor Pentahedron with 15 nodes
-//=======================================================================
-
-SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
-                                               (const SMDS_MeshNode * n1,
-                                                const SMDS_MeshNode * n2,
-                                                const SMDS_MeshNode * n3,
-                                                const SMDS_MeshNode * n4,
-                                                const SMDS_MeshNode * n5,
-                                                const SMDS_MeshNode * n6, 
-                                                const SMDS_MeshNode * n12,
-                                                const SMDS_MeshNode * n23,
-                                                const SMDS_MeshNode * n31, 
-                                                const SMDS_MeshNode * n45,
-                                                const SMDS_MeshNode * n56,
-                                                const SMDS_MeshNode * n64, 
-                                                const SMDS_MeshNode * n14,
-                                                const SMDS_MeshNode * n25,
-                                                const SMDS_MeshNode * n36)
-{
-  //MESSAGE("*********************************************** SMDS_QuadraticVolumeOfNodes");
-  myNodes.resize( 15 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n4;
-  myNodes[ 4 ] = n5;
-  myNodes[ 5 ] = n6;
-  myNodes[ 6 ] = n12;
-  myNodes[ 7 ] = n23;
-  myNodes[ 8 ] = n31;
-  myNodes[ 9 ] = n45;
-  myNodes[ 10 ] = n56;
-  myNodes[ 11 ] = n64;
-  myNodes[ 12 ] = n14;
-  myNodes[ 13 ] = n25;
-  myNodes[ 14 ] = n36;
-}
-
-
-//=======================================================================
-//function : SMDS_QuadraticVolumeOfNodes()
-//purpose  : Constructor Hexahedrons with 20 nodes
-//=======================================================================
-
-SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
-                                               (const SMDS_MeshNode * n1,
-                                                const SMDS_MeshNode * n2,
-                                                const SMDS_MeshNode * n3,
-                                                const SMDS_MeshNode * n4,
-                                                const SMDS_MeshNode * n5,
-                                                const SMDS_MeshNode * n6,
-                                                const SMDS_MeshNode * n7,
-                                                const SMDS_MeshNode * n8, 
-                                                const SMDS_MeshNode * n12,
-                                                const SMDS_MeshNode * n23,
-                                                const SMDS_MeshNode * n34,
-                                                const SMDS_MeshNode * n41, 
-                                                const SMDS_MeshNode * n56,
-                                                const SMDS_MeshNode * n67,
-                                                const SMDS_MeshNode * n78,
-                                                const SMDS_MeshNode * n85, 
-                                                const SMDS_MeshNode * n15,
-                                                const SMDS_MeshNode * n26,
-                                                const SMDS_MeshNode * n37,
-                                                const SMDS_MeshNode * n48)
-{
-  //MESSAGE("*********************************************** SMDS_QuadraticVolumeOfNodes");
-  myNodes.resize( 20 );
-  myNodes[ 0 ] = n1;
-  myNodes[ 1 ] = n2;
-  myNodes[ 2 ] = n3;
-  myNodes[ 3 ] = n4;
-  myNodes[ 4 ] = n5;
-  myNodes[ 5 ] = n6;
-  myNodes[ 6 ] = n7;
-  myNodes[ 7 ] = n8;
-  myNodes[ 8 ] = n12;
-  myNodes[ 9 ] = n23;
-  myNodes[ 10 ] = n34;
-  myNodes[ 11 ] = n41;
-  myNodes[ 12 ] = n56;
-  myNodes[ 13 ] = n67;
-  myNodes[ 14 ] = n78;
-  myNodes[ 15 ] = n85;
-  myNodes[ 16 ] = n15;
-  myNodes[ 17 ] = n26;
-  myNodes[ 18 ] = n37;
-  myNodes[ 19 ] = n48;
-}
-
-
-//=======================================================================
-//function : IsMediumNode
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticVolumeOfNodes::IsMediumNode(const SMDS_MeshNode* node) const
-{
-  int nbCorners = 0;
-  switch (myNodes.size()) {
-  case 10: nbCorners = 4; break;
-  case 13: nbCorners = 5; break;
-  case 15: nbCorners = 6; break;
-  default: nbCorners = 8;
-  }
-  for ( size_t i = nbCorners; i<myNodes.size(); i++) {
-    if(myNodes[i]==node) return true;
-  }
-  return false;
-}
-
-
-//=======================================================================
-//function : ChangeNodes
-//purpose  : 
-//=======================================================================
-
-bool SMDS_QuadraticVolumeOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
-                                              const int            nbNodes)
-{
-  if( nbNodes==10 || nbNodes==13 || nbNodes==15 || nbNodes==20 ) {
-    myNodes.resize(nbNodes);
-    int i=0;
-    for(; i<nbNodes; i++) {
-      myNodes[i] = nodes[i];
-    }
-    return true;
-  }
-  return false;
-}
-
-
-//=======================================================================
-//function : NbNodes
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticVolumeOfNodes::NbNodes() const
-{
-  return myNodes.size();
-}
-
-
-//=======================================================================
-//function : NbEdges
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticVolumeOfNodes::NbEdges() const
-{
-  if(myNodes.size()==10)
-    return 6;
-  else if(myNodes.size()==13)
-    return 8;
-  else if(myNodes.size()==15)
-    return 9;
-  else
-    return 12;
-}
-
-
-//=======================================================================
-//function : NbFaces
-//purpose  : 
-//=======================================================================
-int SMDS_QuadraticVolumeOfNodes::NbFaces() const
-{
-  if(myNodes.size()==10)
-    return 4;
-  else if(myNodes.size()==20)
-    return 6;
-  else
-    return 5;
-}
-
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-void SMDS_QuadraticVolumeOfNodes::Print(ostream & OS) const
-{
-  OS << "quadratic volume <" << GetID() << " > : ";
-  int i, nbNodes = myNodes.size();
-  for (i = 0; i < nbNodes - 1; i++)
-    OS << myNodes[i] << ",";
-  OS << myNodes[i] << ") " << endl;
-}
-
-
-//=======================================================================
-//private class : SMDS_QuadraticVolumeOfNodes_MyIterator
-//purpose  : 
-//=======================================================================
-
-class SMDS_QuadraticVolumeOfNodes_MyIterator : public SMDS_NodeVectorElemIterator
-{
-public:
-  SMDS_QuadraticVolumeOfNodes_MyIterator(const vector<const SMDS_MeshNode *>& s):
-    SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
-};
-
-/// ===================================================================
-/*!
- * \brief Iterator on faces or edges of volume
- */
-/// ===================================================================
-
-class _MySubIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t                            myIndex;
-public:
-  _MySubIterator(const SMDS_MeshVolume* vol, SMDSAbs_ElementType type):myIndex(0) {
-    SMDS_VolumeTool vTool(vol);
-    if (type == SMDSAbs_Face)
-      vTool.GetAllExistingFaces( myElems );
-    else
-      vTool.GetAllExistingFaces( myElems );
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-//=======================================================================
-//function : elementsIterator
-//purpose  : 
-//=======================================================================
-
-SMDS_ElemIteratorPtr SMDS_QuadraticVolumeOfNodes::elementsIterator
-                                         (SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Volume:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
-    break;
-  case SMDSAbs_Face:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
-    break;
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type,SMDS_ElemIteratorPtr
-        (new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes))));
-  }
-  return SMDS_ElemIteratorPtr();
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode* SMDS_QuadraticVolumeOfNodes::GetNode(const int ind) const
-{
-  return myNodes[ ind ];
-}
-
-SMDSAbs_EntityType SMDS_QuadraticVolumeOfNodes::GetEntityType() const
-{
-  SMDSAbs_EntityType aType = SMDSEntity_Quad_Tetra;
-  switch(NbNodes())
-  {
-  case 10: aType = SMDSEntity_Quad_Tetra;   break;
-  case 13: aType = SMDSEntity_Quad_Pyramid; break;
-  case 15: aType = SMDSEntity_Quad_Penta;   break;
-  case 18: aType = SMDSEntity_BiQuad_Penta; break;
-  case 20:
-  default: aType = SMDSEntity_Quad_Hexa;    break;
-  }
-  return aType;
-}
diff --git a/src/SMDS/SMDS_QuadraticVolumeOfNodes.hxx b/src/SMDS/SMDS_QuadraticVolumeOfNodes.hxx
deleted file mode 100644 (file)
index 0f3d6a8..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_QuadraticVolumeOfNodes.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_QuadraticVolumeOfNodes_HeaderFile
-#define _SMDS_QuadraticVolumeOfNodes_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshVolume.hxx"
-
-class SMDS_EXPORT SMDS_QuadraticVolumeOfNodes: public SMDS_MeshVolume
-{
-public:
-  // tetrahedron of 10 nodes
-  SMDS_QuadraticVolumeOfNodes (const SMDS_MeshNode * n1,
-                               const SMDS_MeshNode * n2,
-                               const SMDS_MeshNode * n3,
-                               const SMDS_MeshNode * n4,
-                               const SMDS_MeshNode * n12,
-                               const SMDS_MeshNode * n23,
-                               const SMDS_MeshNode * n31,
-                               const SMDS_MeshNode * n14, 
-                               const SMDS_MeshNode * n24,
-                               const SMDS_MeshNode * n34);
-
-  // pyramid of 13 nodes
-  SMDS_QuadraticVolumeOfNodes(const SMDS_MeshNode * n1,
-                              const SMDS_MeshNode * n2,
-                              const SMDS_MeshNode * n3,
-                              const SMDS_MeshNode * n4,
-                              const SMDS_MeshNode * n5,
-                              const SMDS_MeshNode * n12,
-                              const SMDS_MeshNode * n23,
-                              const SMDS_MeshNode * n34,
-                              const SMDS_MeshNode * n41, 
-                              const SMDS_MeshNode * n15,
-                              const SMDS_MeshNode * n25,
-                              const SMDS_MeshNode * n35,
-                              const SMDS_MeshNode * n45);
-
-  //  Pentahedron with 15 nodes
-  SMDS_QuadraticVolumeOfNodes(const SMDS_MeshNode * n1,
-                              const SMDS_MeshNode * n2,
-                              const SMDS_MeshNode * n3,
-                              const SMDS_MeshNode * n4,
-                              const SMDS_MeshNode * n5,
-                              const SMDS_MeshNode * n6, 
-                              const SMDS_MeshNode * n12,
-                              const SMDS_MeshNode * n23,
-                              const SMDS_MeshNode * n31, 
-                              const SMDS_MeshNode * n45,
-                              const SMDS_MeshNode * n56,
-                              const SMDS_MeshNode * n64, 
-                              const SMDS_MeshNode * n14,
-                              const SMDS_MeshNode * n25,
-                              const SMDS_MeshNode * n36);
-
-  // Hexahedrons with 20 nodes
-  SMDS_QuadraticVolumeOfNodes(const SMDS_MeshNode * n1,
-                              const SMDS_MeshNode * n2,
-                              const SMDS_MeshNode * n3,
-                              const SMDS_MeshNode * n4,
-                              const SMDS_MeshNode * n5,
-                              const SMDS_MeshNode * n6,
-                              const SMDS_MeshNode * n7,
-                              const SMDS_MeshNode * n8, 
-                              const SMDS_MeshNode * n12,
-                              const SMDS_MeshNode * n23,
-                              const SMDS_MeshNode * n34,
-                              const SMDS_MeshNode * n41, 
-                              const SMDS_MeshNode * n56,
-                              const SMDS_MeshNode * n67,
-                              const SMDS_MeshNode * n78,
-                              const SMDS_MeshNode * n85, 
-                              const SMDS_MeshNode * n15,
-                              const SMDS_MeshNode * n26,
-                              const SMDS_MeshNode * n37,
-                              const SMDS_MeshNode * n48);
-
-  virtual SMDSAbs_EntityType   GetEntityType() const;
-  virtual bool IsQuadratic() const { return true; }
-
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-
-  bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                   const int            nbNodes);
-
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-
-  virtual void Print (std::ostream & OS) const;
-
-  /*!
-   * \brief Return node by its index
-    * \param ind - node index
-    * \retval const SMDS_MeshNode* - the node
-   */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-
- protected:
-  virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
-
- private:
-  std::vector<const SMDS_MeshNode *> myNodes;
-};
-
-#endif
index b2b9a7f2ecb52ebe91886faf900b5bb54447f1d4..b7bcec930eae2a94cabc28e8eae7b46dd9cdcda6 100644 (file)
 //
 
 #include "SMDS_SpacePosition.hxx"
+#include "SMDS_VertexPosition.hxx"
 
 SMDS_SpacePosition* SMDS_SpacePosition::_originPosition = new SMDS_SpacePosition();
 
-SMDS_SpacePosition::SMDS_SpacePosition(double x, double y, double z)
+SMDS_PositionPtr SMDS_SpacePosition::originSpacePosition()
 {
+  return SMDS_PositionPtr( _originPosition, /*isOwner=*/false );
 }
 
-SMDS_TypeOfPosition SMDS_SpacePosition::GetTypeOfPosition() const
+SMDS_PositionPtr SMDS_VertexPosition::StaticPosition()
 {
-  return SMDS_TOP_3DSPACE;
+  static SMDS_Position* _vertexPosition = new SMDS_VertexPosition;
+  return SMDS_PositionPtr( _vertexPosition, /*isOwner=*/false );
 }
 
-SMDS_PositionPtr SMDS_SpacePosition::originSpacePosition()
-{
-  return _originPosition;
-}
index fc2d22cc37f014204e60c178e8f29327ae9f8559..71afda939bcb5f1485752184cfa585477a8947ee 100644 (file)
 
 #include "SMDS_Position.hxx"
 
-class SMDS_EXPORT SMDS_SpacePosition:public SMDS_Position
+class SMDS_EXPORT SMDS_SpacePosition : public SMDS_Position
 {
+ public:
 
-public:
-  SMDS_SpacePosition(double x=0, double y=0, double z=0);
-  virtual inline SMDS_TypeOfPosition GetTypeOfPosition() const;
-  static SMDS_PositionPtr originSpacePosition();
-private:
+  virtual SMDS_TypeOfPosition GetTypeOfPosition() const { return SMDS_TOP_3DSPACE; }
+  static  SMDS_PositionPtr    originSpacePosition();
+  virtual const double* GetParameters() const { return 0; }
+
+ private:
   static SMDS_SpacePosition* _originPosition;
 };
 
index c6502c457c792889f6c0a93d60878e8ccc26d760..684c61ddedfa63f946ff88ffbd231cd0d94b4835 100644 (file)
@@ -45,7 +45,7 @@ public:
 
   // constructor to use as return from begin()
   SMDS_StdIterator( PtrSMDSIterator pItr )
-    : _value( pItr->more() ? (VALUE)(pItr->next()) : 0 ), _piterator(pItr)
+    : _value( pItr->more() ? VALUE(pItr->next()) : VALUE(0) ), _piterator(pItr)
   {}
   // constructor to use as return from end()
   SMDS_StdIterator(): _value( 0 )
@@ -58,12 +58,12 @@ public:
   //  Step to the next one
   _Self&
   operator++()
-  { _value = _piterator->more() ? VALUE( _piterator->next()) : 0; return *this; }
+  { _value = _piterator->more() ? VALUE( _piterator->next()) : VALUE(0); return *this; }
 
   //  Step to the next one
   _Self
   operator++(int)
-  { _Self res = *this; _value = _piterator->more() ? VALUE( _piterator->next()) : 0; return res; }
+  { _Self res = *this; _value = _piterator->more() ? VALUE( _piterator->next()) : VALUE(0); return res; }
 
   // Test of end
   bool
index bf9df36cffc1c1c80eb5fa3b3fde23e680f301a0..03bff2d6662715edcf1582d0d7e457aa3ff7f7d3 100644 (file)
@@ -36,8 +36,6 @@
 #include <list>
 #include <climits>
 
-using namespace std;
-
 SMDS_CellLinks* SMDS_CellLinks::New()
 {
   return new SMDS_CellLinks();
@@ -150,7 +148,7 @@ int SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *p
   // --- type = VTK_POLYHEDRON
   int cellid = this->InsertNextCell(type, npts, pts);
 
-  set<vtkIdType> setOfNodes;
+  std::set<vtkIdType> setOfNodes;
   setOfNodes.clear();
   int nbfaces = npts;
   int i = 0;
@@ -165,7 +163,7 @@ int SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *p
     }
   }
 
-  set<vtkIdType>::iterator it = setOfNodes.begin();
+  std::set<vtkIdType>::iterator it = setOfNodes.begin();
   for (; it != setOfNodes.end(); ++it)
   {
     this->Links->ResizeCellList(*it, 1);
@@ -181,25 +179,24 @@ void SMDS_UnstructuredGrid::setSMDS_mesh(SMDS_Mesh *mesh)
 }
 
 void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int newNodeSize,
-                                        std::vector<int>& idCellsOldToNew, int newCellSize)
+                                        std::vector<int>& idCellsNewToOld, int newCellSize)
 {
-  int alreadyCopied = 0;
-
   this->DeleteLinks();
 
-  // --- if newNodeSize, create a new compacted vtkPoints
+  // IDs of VTK nodes always correspond to SMDS IDs but there can be "holes" in SMDS numeration.
+  // We compact only if there were holes
 
-  if ( newNodeSize )
+  int oldNodeSize = this->GetNumberOfPoints();
+  bool updateNodes = ( oldNodeSize > newNodeSize );
+  if ( true /*updateNodes*/ )
   {
-    // rnv: to fix bug "21125: EDF 1233 SMESH: Degradation of precision in a test case for quadratic conversion"
-    // using double type for storing coordinates of nodes instead float.
+    // 21125: EDF 1233 SMESH: Degradation of precision in a test case for quadratic conversion
+    // Use double type for storing coordinates of nodes instead float.
     vtkPoints *newPoints = vtkPoints::New();
-    newPoints->SetDataType(VTK_DOUBLE);
-    newPoints->SetNumberOfPoints(newNodeSize);
-
-    int oldNodeSize = idNodesOldToNew.size();
+    newPoints->SetDataType( VTK_DOUBLE );
+    newPoints->SetNumberOfPoints( newNodeSize );
 
-    int i = 0;
+    int i = 0, alreadyCopied = 0;
     while ( i < oldNodeSize )
     {
       // skip a hole if any
@@ -215,13 +212,20 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     this->SetPoints(newPoints);
     newPoints->Delete();
   }
-  this->Points->Squeeze();
+  else
+  {
+    this->Points->Squeeze();
+    this->Points->Modified();
+  }
 
-  // --- create new compacted Connectivity, Locations and Types
+  // Compact cells if VTK IDs do not correspond to SMDS IDs or nodes compacted
 
-  int oldCellSize = this->Types->GetNumberOfTuples();
+  int  oldCellSize = this->Types->GetNumberOfTuples();
+  bool updateCells = ( updateNodes || newCellSize != oldCellSize );
+  for ( int newID = 0, nbIDs = idCellsNewToOld.size(); newID < nbIDs &&  !updateCells; ++newID )
+    updateCells = ( idCellsNewToOld[ newID ] != newID );
 
-  if ( !newNodeSize && oldCellSize == newCellSize ) // no holes in elements
+  if ( false /*!updateCells*/ ) // no holes in elements
   {
     this->Connectivity->Squeeze();
     this->Locations->Squeeze();
@@ -231,14 +235,28 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
       this->FaceLocations->Squeeze();
       this->Faces->Squeeze();
     }
-    for ( int i = 0; i < oldCellSize; ++i )
-      idCellsOldToNew[i] = i;
+    this->Connectivity->Modified();
     return;
   }
+
+  if ((int) idNodesOldToNew.size() < oldNodeSize )
+  {
+    idNodesOldToNew.reserve( oldNodeSize );
+    for ( int i = idNodesOldToNew.size(); i < oldNodeSize; ++i )
+      idNodesOldToNew.push_back( i );
+  }
+
+  // --- create new compacted Connectivity, Locations and Types
+
+  int newConnectivitySize = this->Connectivity->GetNumberOfConnectivityEntries();
+  if ( newCellSize != oldCellSize )
+    for ( int i = 0; i < oldCellSize - 1; ++i )
+      if ( this->Types->GetValue( i ) == VTK_EMPTY_CELL )
+        newConnectivitySize -= this->Locations->GetValue( i+1 ) - this->Locations->GetValue( i );
+
   vtkCellArray *newConnectivity = vtkCellArray::New();
   newConnectivity->Initialize();
-  int oldCellDataSize = this->Connectivity->GetData()->GetSize();
-  newConnectivity->Allocate(oldCellDataSize);
+  newConnectivity->Allocate( newConnectivitySize );
 
   vtkUnsignedCharArray *newTypes = vtkUnsignedCharArray::New();
   newTypes->Initialize();
@@ -248,41 +266,24 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
   newLocations->Initialize();
   newLocations->SetNumberOfValues(newCellSize);
 
-  // TODO some polyhedron may be huge (only in some tests)
-  vtkIdType tmpid[NBMAXNODESINCELL];
-  vtkIdType *pointsCell = &tmpid[0]; // --- points id to fill a new cell
+  std::vector< vtkIdType > pointsCell(1024); // --- points id to fill a new cell
 
-  alreadyCopied = 0;
-  int i = 0;
-  while ( i < oldCellSize )
-  {
-    // skip a hole if any
-    while ( i < oldCellSize && this->Types->GetValue(i) == VTK_EMPTY_CELL )
-      ++i;
-    int startBloc = i;
-    // look for a block end
-    while ( i < oldCellSize && this->Types->GetValue(i) != VTK_EMPTY_CELL )
-      ++i;
-    int endBloc = i;
-    if ( endBloc > startBloc )
-      copyBloc(newTypes,
-               idCellsOldToNew, idNodesOldToNew,
-               newConnectivity, newLocations,
-               pointsCell, alreadyCopied,
-               startBloc, endBloc);
-  }
-  newConnectivity->Squeeze();
+  copyBloc(newTypes, idCellsNewToOld, idNodesOldToNew,
+           newConnectivity, newLocations, pointsCell );
 
   if (vtkDoubleArray* diameters =
       vtkDoubleArray::SafeDownCast( vtkDataSet::CellData->GetScalars() )) // Balls
   {
-    for (int oldCellID = 0; oldCellID < oldCellSize; oldCellID++)
+    vtkDoubleArray* newDiameters = vtkDoubleArray::New();
+    newDiameters->SetNumberOfComponents(1);
+    for ( int newCellID = 0; newCellID < newCellSize; newCellID++ )
     {
-      if (this->Types->GetValue(oldCellID) == VTK_EMPTY_CELL)
-        continue;
-      int newCellId = idCellsOldToNew[ oldCellID ];
-      if (newTypes->GetValue(newCellId) == VTK_POLY_VERTEX)
-        diameters->SetValue( newCellId, diameters->GetValue( oldCellID ));
+      if ( newTypes->GetValue( newCellID ) == VTK_POLY_VERTEX )
+      {
+        int oldCellID = idCellsNewToOld[ newCellID ];
+        newDiameters->InsertValue( newCellID, diameters->GetValue( oldCellID ));
+      }
+      vtkDataSet::CellData->SetScalars( newDiameters );
     }
   }
 
@@ -294,25 +295,23 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     vtkIdTypeArray *newFaces = vtkIdTypeArray::New();
     newFaces->Initialize();
     newFaces->Allocate(this->Faces->GetSize());
-    for (int i = 0; i < oldCellSize; i++)
+    for ( int newCellID = 0; newCellID < newCellSize; newCellID++ )
     {
-      if (this->Types->GetValue(i) == VTK_EMPTY_CELL)
-        continue;
-      int newCellId = idCellsOldToNew[i];
-      if (newTypes->GetValue(newCellId) == VTK_POLYHEDRON)
+      if ( newTypes->GetValue( newCellID ) == VTK_POLYHEDRON )
       {
-        newFaceLocations->InsertNextValue(newFaces->GetMaxId()+1);
-        int oldFaceLoc = this->FaceLocations->GetValue(i);
-        int nCellFaces = this->Faces->GetValue(oldFaceLoc++);
-        newFaces->InsertNextValue(nCellFaces);
-        for (int n=0; n<nCellFaces; n++)
+        int oldCellId = idCellsNewToOld[ newCellID ];
+        newFaceLocations->InsertNextValue( newFaces->GetMaxId()+1 );
+        int oldFaceLoc = this->FaceLocations->GetValue( oldCellId );
+        int nCellFaces = this->Faces->GetValue( oldFaceLoc++ );
+        newFaces->InsertNextValue( nCellFaces );
+        for ( int n = 0; n < nCellFaces; n++ )
         {
-          int nptsInFace = this->Faces->GetValue(oldFaceLoc++);
-          newFaces->InsertNextValue(nptsInFace);
-          for (int k=0; k<nptsInFace; k++)
+          int nptsInFace = this->Faces->GetValue( oldFaceLoc++ );
+          newFaces->InsertNextValue( nptsInFace );
+          for ( int k = 0; k < nptsInFace; k++ )
           {
-            int oldpt = this->Faces->GetValue(oldFaceLoc++);
-            newFaces->InsertNextValue(idNodesOldToNew[oldpt]);
+            int oldpt = this->Faces->GetValue( oldFaceLoc++ );
+            newFaces->InsertNextValue( idNodesOldToNew[ oldpt ]);
           }
         }
       }
@@ -323,13 +322,13 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     }
     newFaceLocations->Squeeze();
     newFaces->Squeeze();
-    this->SetCells(newTypes, newLocations, newConnectivity, newFaceLocations, newFaces);
+    this->SetCells( newTypes, newLocations, newConnectivity, newFaceLocations, newFaces );
     newFaceLocations->Delete();
     newFaces->Delete();
   }
   else
   {
-    this->SetCells(newTypes, newLocations, newConnectivity, FaceLocations, Faces);
+    this->SetCells( newTypes, newLocations, newConnectivity, FaceLocations, Faces );
   }
 
   newTypes->Delete();
@@ -349,39 +348,35 @@ void SMDS_UnstructuredGrid::copyNodes(vtkPoints *       newPoints,
   if (nbPoints > 0)
   {
     memcpy(target, source, 3 * sizeof(double) * nbPoints);
-    for (int j = start; j < end; j++)
-      idNodesOldToNew[j] = alreadyCopied++; // old vtkId --> new vtkId
+    alreadyCopied += nbPoints;
   }
 }
 
-void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *newTypes,
-                                     std::vector<int>&     idCellsOldToNew,
-                                     std::vector<int>&     idNodesOldToNew,
-                                     vtkCellArray*         newConnectivity,
-                                     vtkIdTypeArray*       newLocations,
-                                     vtkIdType*            pointsCell,
-                                     int&                  alreadyCopied,
-                                     int                   start,
-                                     int                   end)
+void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *  newTypes,
+                                     const std::vector<int>& idCellsNewToOld,
+                                     const std::vector<int>& idNodesOldToNew,
+                                     vtkCellArray*           newConnectivity,
+                                     vtkIdTypeArray*         newLocations,
+                                     std::vector<vtkIdType>& pointsCell)
 {
-  for (int j = start; j < end; j++)
+  for ( size_t iNew = 0; iNew < idCellsNewToOld.size(); iNew++ )
   {
-    newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
-    idCellsOldToNew[j] = alreadyCopied; // old vtkId --> new vtkId
-    vtkIdType oldLoc = this->Locations->GetValue(j);
+    int iOld = idCellsNewToOld[ iNew ];
+    newTypes->SetValue( iNew, this->Types->GetValue( iOld ));
+    vtkIdType oldLoc = this->Locations->GetValue( iOld );
     vtkIdType nbpts;
     vtkIdType *oldPtsCell = 0;
-    this->Connectivity->GetCell(oldLoc, nbpts, oldPtsCell);
-    assert(nbpts < NBMAXNODESINCELL);
-    for (int l = 0; l < nbpts; l++)
+    this->Connectivity->GetCell( oldLoc, nbpts, oldPtsCell );
+    if ((vtkIdType) pointsCell.size() < nbpts )
+      pointsCell.resize( nbpts );
+    for ( int l = 0; l < nbpts; l++ )
     {
       int oldval = oldPtsCell[l];
       pointsCell[l] = idNodesOldToNew[oldval];
     }
-    /*int newcnt = */newConnectivity->InsertNextCell(nbpts, pointsCell);
-    int newLoc = newConnectivity->GetInsertLocation(nbpts);
-    newLocations->SetValue(alreadyCopied, newLoc);
-    alreadyCopied++;
+    /*int newcnt = */newConnectivity->InsertNextCell( nbpts, pointsCell.data() );
+    int newLoc = newConnectivity->GetInsertLocation( nbpts );
+    newLocations->SetValue( iNew, newLoc );
   }
 }
 
@@ -656,7 +651,7 @@ void SMDS_UnstructuredGrid::BuildDownwardConnectivity(bool withEdges)
           int connEdgeId = _downArray[vtkEdgeType]->addCell(vtkEdgeId);
           SMDS_Down1D* downEdge = static_cast<SMDS_Down1D*> (_downArray[vtkEdgeType]);
           downEdge->setNodes(connEdgeId, vtkEdgeId);
-          vector<int> vtkIds;
+          std::vector<int> vtkIds;
           int nbVtkCells = downEdge->computeVtkCells(connEdgeId, vtkIds);
           int downFaces[1000];
           unsigned char downTypes[1000];
@@ -705,7 +700,7 @@ void SMDS_UnstructuredGrid::BuildDownwardConnectivity(bool withEdges)
               // --- check if the edge is already registered by exploration of the faces
 
               //CHRONO(41);
-              vector<int> vtkIds;
+              std::vector<int> vtkIds;
               unsigned char vtkEdgeType = edgesWithNodes.elems[iedge].vtkType;
               int *pts = &edgesWithNodes.elems[iedge].nodeIds[0];
               SMDS_Down1D* downEdge = static_cast<SMDS_Down1D*> (_downArray[vtkEdgeType]);
@@ -759,7 +754,7 @@ void SMDS_UnstructuredGrid::BuildDownwardConnectivity(bool withEdges)
 
   CHRONOSTOP(23);CHRONO(24);
 
-  // compact downward connectivity structure: adjust downward arrays size, replace vector<vector int>> by a single vector<int>
+  // compact downward connectivity structure: adjust downward arrays size, replace std::vector<vector int>> by a single std::vector<int>
   // 3D first then 2D and last 1D to release memory before edge upCells reorganization, (temporary memory use)
 
   for (int vtkType = VTK_QUADRATIC_PYRAMID; vtkType >= 0; vtkType--)
@@ -1073,15 +1068,11 @@ SMDS_UnstructuredGrid::extrudeVolumeFromFace(int vtkVolId,
                                              std::map<int, std::map<long, int> >& nodeQuadDomains)
 {
   //MESSAGE("extrudeVolumeFromFace " << vtkVolId);
-  vector<vtkIdType> orderedOriginals;
-  orderedOriginals.clear();
-  set<int>::const_iterator it = originalNodes.begin();
-  for (; it != originalNodes.end(); ++it)
-    orderedOriginals.push_back(*it);
+  std::vector<vtkIdType> orderedOriginals( originalNodes.begin(), originalNodes.end() );
 
   int dim = 0;
   int nbNodes = this->getOrderedNodesOfFace(vtkVolId, dim, orderedOriginals);
-  vector<vtkIdType> orderedNodes;
+  std::vector<vtkIdType> orderedNodes;
 
   bool isQuadratic = false;
   switch (orderedOriginals.size())
@@ -1130,7 +1121,7 @@ SMDS_UnstructuredGrid::extrudeVolumeFromFace(int vtkVolId,
             {
               double *coords = this->GetPoint(oldId);
               SMDS_MeshNode *newNode = _mesh->AddNode(coords[0], coords[1], coords[2]);
-              newId = newNode->getVtkId();
+              newId = newNode->GetVtkID();
               if (! nodeQuadDomains.count(oldId))
                 {
                   std::map<long, int> emptyMap;
index 5936e9759d70ad06f890330e8c93c2cf5be0a93f..448fed72d6e1e5aa69417c8aa43e68b46a11e668 100644 (file)
@@ -116,9 +116,12 @@ protected:
   SMDS_UnstructuredGrid();
   ~SMDS_UnstructuredGrid();
   void copyNodes(vtkPoints *newPoints, std::vector<int>& idNodesOldToNew, int& alreadyCopied, int start, int end);
-  void copyBloc(vtkUnsignedCharArray *newTypes, std::vector<int>& idCellsOldToNew, std::vector<int>& idNodesOldToNew,
-                vtkCellArray* newConnectivity, vtkIdTypeArray* newLocations, vtkIdType* pointsCell, int& alreadyCopied,
-                int start, int end);
+  void copyBloc(vtkUnsignedCharArray *newTypes,
+                const std::vector<int>& idCellsOldToNew,
+                const std::vector<int>& idNodesOldToNew,
+                vtkCellArray* newConnectivity,
+                vtkIdTypeArray* newLocations,
+                std::vector<vtkIdType>& pointsCell);
 
   std::vector<int> _cellIdToDownId; //!< convert vtk Id to downward[vtkType] id, initialized with -1
   std::vector<unsigned char> _downTypes;
diff --git a/src/SMDS/SMDS_VertexPosition.cxx b/src/SMDS/SMDS_VertexPosition.cxx
deleted file mode 100644 (file)
index 0e2d183..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_VertexPosition.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#include "SMDS_VertexPosition.hxx"
-
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : SMDS_VertexPosition
-//purpose  : 
-//=======================================================================
-
-SMDS_VertexPosition:: SMDS_VertexPosition()
-{
-  //MESSAGE("*********************************************** SMDS_VertexPosition " << aVertexId);
-}
-
-SMDS_TypeOfPosition SMDS_VertexPosition::GetTypeOfPosition() const
-{
-  //MESSAGE("################################################# GetTypeOfPosition");
-        return SMDS_TOP_VERTEX;
-}
index 0943de91cfa832eab322b0144627fb378195c844..4db67d527abbfa8a1b91ca4a3cbb054da4749fc6 100644 (file)
 
 #include "SMDS_Position.hxx"
 
-class SMDS_EXPORT SMDS_VertexPosition:public SMDS_Position
+class SMDS_EXPORT SMDS_VertexPosition : public SMDS_Position
 {
-
-  public:       
-        SMDS_TypeOfPosition GetTypeOfPosition() const;
-        SMDS_VertexPosition();
+ public:
+  SMDS_TypeOfPosition GetTypeOfPosition() const { return SMDS_TOP_VERTEX; }
+  virtual const double* GetParameters() const { return 0; }
+  static SMDS_PositionPtr StaticPosition(); 
 };
 
 #endif
diff --git a/src/SMDS/SMDS_VolumeOfFaces.cxx b/src/SMDS/SMDS_VolumeOfFaces.cxx
deleted file mode 100644 (file)
index 929c546..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_VolumeOfFaces.cxx
-//  Author : Jean-Michel BOULCOURT
-//  Module : SMESH
-//
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#endif
-
-#include "SMDS_VolumeOfFaces.hxx"
-#include "SMDS_IteratorOfElements.hxx"
-#include "utilities.h"
-
-using namespace std;
-
-//=======================================================================
-//function : Print
-//purpose  : 
-//=======================================================================
-
-void SMDS_VolumeOfFaces::Print(ostream & OS) const
-{
-        OS << "volume <" << GetID() << "> : ";
-        int i;
-        for (i = 0; i < NbFaces()-1; ++i) OS << myFaces[i] << ",";
-        OS << myFaces[i]<< ") " << endl;
-}
-
-
-int SMDS_VolumeOfFaces::NbFaces() const
-{
-        return myNbFaces;
-}
-
-class SMDS_VolumeOfFaces_MyIterator:public SMDS_ElemIterator
-{
-  const SMDS_MeshFace* const *mySet;
-  int myLength;
-  int index;
- public:
-  SMDS_VolumeOfFaces_MyIterator(const SMDS_MeshFace* const *s, int l):
-    mySet(s),myLength(l),index(0) {}
-
-  bool more()
-  {
-    return index<myLength;
-  }
-
-  const SMDS_MeshElement* next()
-  {
-    index++;
-    return mySet[index-1];
-  }
-};
-
-SMDS_ElemIteratorPtr SMDS_VolumeOfFaces::
-        elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch(type)
-  {
-  case SMDSAbs_Volume:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
-  case SMDSAbs_Face:
-    return SMDS_ElemIteratorPtr(new SMDS_VolumeOfFaces_MyIterator(myFaces,myNbFaces));
-  default:
-    return SMDS_ElemIteratorPtr
-      (new SMDS_IteratorOfElements
-       (this,type,SMDS_ElemIteratorPtr
-        (new SMDS_VolumeOfFaces_MyIterator(myFaces,myNbFaces))));
-  }
-}
-
-SMDS_VolumeOfFaces::SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                                       const SMDS_MeshFace * face2,
-                                       const SMDS_MeshFace * face3,
-                                       const SMDS_MeshFace * face4)
-{
-  //MESSAGE("****************************************************** SMDS_VolumeOfFaces");
-        myNbFaces = 4;
-        myFaces[0]=face1;
-        myFaces[1]=face2;
-        myFaces[2]=face3;
-        myFaces[3]=face4;
-        myFaces[4]=0;
-        myFaces[5]=0;
-}
-
-SMDS_VolumeOfFaces::SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                                       const SMDS_MeshFace * face2,
-                                       const SMDS_MeshFace * face3,
-                                       const SMDS_MeshFace * face4,
-                                       const SMDS_MeshFace * face5)
-{
-  //MESSAGE("****************************************************** SMDS_VolumeOfFaces");
-        myNbFaces = 5;
-        myFaces[0]=face1;
-        myFaces[1]=face2;
-        myFaces[2]=face3;
-        myFaces[3]=face4;
-        myFaces[4]=face5;
-        myFaces[5]=0;
-}
-
-SMDS_VolumeOfFaces::SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                                       const SMDS_MeshFace * face2,
-                                       const SMDS_MeshFace * face3,
-                                       const SMDS_MeshFace * face4,
-                                       const SMDS_MeshFace * face5,
-                                       const SMDS_MeshFace * face6)
-{
-  //MESSAGE("****************************************************** SMDS_VolumeOfFaces");
-        myNbFaces = 6;
-        myFaces[0]=face1;
-        myFaces[1]=face2;
-        myFaces[2]=face3;
-        myFaces[3]=face4;
-        myFaces[4]=face5;
-        myFaces[5]=face6;
-}
-
-SMDSAbs_EntityType SMDS_VolumeOfFaces::GetEntityType() const
-{
-  SMDSAbs_EntityType aType = SMDSEntity_Tetra;
-  switch(myNbFaces)
-  {
-  case 4: aType = SMDSEntity_Tetra;   break;
-  case 5: aType = SMDSEntity_Pyramid; break;
-  case 6: aType = SMDSEntity_Penta;   break;
-  case 8:
-  default: aType = SMDSEntity_Hexa;    break;
-  }
-  return aType;
-}
-
-SMDSAbs_GeometryType SMDS_VolumeOfFaces::GetGeomType() const
-{
-  SMDSAbs_GeometryType aType = SMDSGeom_NONE;
-  switch(myNbFaces)
-  {
-  case 4: aType = SMDSGeom_TETRA;   break;
-  case 5: aType = SMDSGeom_PYRAMID; break;
-  case 6: aType = SMDSGeom_PENTA;   break;
-  case 8:
-  default: aType = SMDSGeom_HEXA;   break;
-  }
-  return aType;
-}
diff --git a/src/SMDS/SMDS_VolumeOfFaces.hxx b/src/SMDS/SMDS_VolumeOfFaces.hxx
deleted file mode 100644 (file)
index 103b919..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_VolumeOfFaces.hxx
-//  Module : SMESH
-//
-#ifndef _SMDS_VolumeOfFaces_HeaderFile
-#define _SMDS_VolumeOfFaces_HeaderFile
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshVolume.hxx"
-#include "SMDS_MeshFace.hxx"
-#include "SMDS_Iterator.hxx"
-#include <iostream>
-
-
-class SMDS_EXPORT SMDS_VolumeOfFaces:public SMDS_MeshVolume
-{
-        
-  public:
-        SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                           const SMDS_MeshFace * face2,
-                           const SMDS_MeshFace * face3,
-                           const SMDS_MeshFace * face4);
-        SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                           const SMDS_MeshFace * face2,
-                           const SMDS_MeshFace * face3,
-                           const SMDS_MeshFace * face4,
-                           const SMDS_MeshFace * face5);
-        SMDS_VolumeOfFaces(const SMDS_MeshFace * face1,
-                           const SMDS_MeshFace * face2,
-                           const SMDS_MeshFace * face3,
-                           const SMDS_MeshFace * face4,
-                           const SMDS_MeshFace * face5,
-                           const SMDS_MeshFace * face6);
-
-        virtual SMDSAbs_EntityType GetEntityType() const;
-        virtual SMDSAbs_GeometryType GetGeomType() const;
-        virtual bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                                 const int            nbNodes) {return false;}
-        virtual void Print(std::ostream & OS) const;
-
-        virtual int NbFaces() const;
-
-  protected:
-        virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-        const SMDS_MeshFace * myFaces[6];
-        int                   myNbFaces;
-};
-#endif
index 3f76d5322040d2583d5635969472977b8176ef0e..f652eeaf26ec57ab13a80b1bb1650a9ef11928da 100644 (file)
 #endif
 
 #include "SMDS_VolumeOfNodes.hxx"
+
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
-#include "SMDS_VolumeTool.hxx"
-#include "SMDS_Mesh.hxx"
-#include "utilities.h"
 
-using namespace std;
+#include <boost/make_shared.hpp>
+
+#include <utilities.h>
 
 ///////////////////////////////////////////////////////////////////////////////
 /// Create an hexahedron. node 1,2,3,4 and 5,6,7,8 are quadrangle and
 /// 5,1 and 7,3 are an edges.
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5,
-                const SMDS_MeshNode * node6,
-                const SMDS_MeshNode * node7,
-                const SMDS_MeshNode * node8)
-{
-  //MESSAGE("***************************************************** SMDS_VolumeOfNodes");
-        myNbNodes = 8;
-        myNodes = new const SMDS_MeshNode* [myNbNodes];
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=node4;
-        myNodes[4]=node5;
-        myNodes[5]=node6;
-        myNodes[6]=node7;
-        myNodes[7]=node8;
+SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                                       const SMDS_MeshNode * node2,
+                                       const SMDS_MeshNode * node3,
+                                       const SMDS_MeshNode * node4,
+                                       const SMDS_MeshNode * node5,
+                                       const SMDS_MeshNode * node6,
+                                       const SMDS_MeshNode * node7,
+                                       const SMDS_MeshNode * node8)
+{
+  myNbNodes = 8;
+  myNodes = new const SMDS_MeshNode* [myNbNodes];
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=node4;
+  myNodes[4]=node5;
+  myNodes[5]=node6;
+  myNodes[6]=node7;
+  myNodes[7]=node8;
 }
 
-SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4)
+SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                                       const SMDS_MeshNode * node2,
+                                       const SMDS_MeshNode * node3,
+                                       const SMDS_MeshNode * node4)
 {
-  //MESSAGE("***************************************************** SMDS_VolumeOfNodes");
-        myNbNodes = 4;
-        myNodes = new const SMDS_MeshNode* [myNbNodes];
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=node4;
+  myNbNodes = 4;
+  myNodes = new const SMDS_MeshNode* [myNbNodes];
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=node4;
 }
 
-SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5)
+SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                                       const SMDS_MeshNode * node2,
+                                       const SMDS_MeshNode * node3,
+                                       const SMDS_MeshNode * node4,
+                                       const SMDS_MeshNode * node5)
 {
-  //MESSAGE("***************************************************** SMDS_VolumeOfNodes");
-        myNbNodes = 5;
-        myNodes = new const SMDS_MeshNode* [myNbNodes];
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=node4;
-        myNodes[4]=node5;
+  myNbNodes = 5;
+  myNodes = new const SMDS_MeshNode* [myNbNodes];
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=node4;
+  myNodes[4]=node5;
 }
 
-SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5,
-                const SMDS_MeshNode * node6)
+SMDS_VolumeOfNodes::SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                                       const SMDS_MeshNode * node2,
+                                       const SMDS_MeshNode * node3,
+                                       const SMDS_MeshNode * node4,
+                                       const SMDS_MeshNode * node5,
+                                       const SMDS_MeshNode * node6)
 {
-  //MESSAGE("***************************************************** SMDS_VolumeOfNodes");
-        myNbNodes = 6;
-        myNodes = new const SMDS_MeshNode* [myNbNodes];
-        myNodes[0]=node1;
-        myNodes[1]=node2;
-        myNodes[2]=node3;
-        myNodes[3]=node4;
-        myNodes[4]=node5;
-        myNodes[5]=node6;
+  myNbNodes = 6;
+  myNodes = new const SMDS_MeshNode* [myNbNodes];
+  myNodes[0]=node1;
+  myNodes[1]=node2;
+  myNodes[2]=node3;
+  myNodes[3]=node4;
+  myNodes[4]=node5;
+  myNodes[5]=node6;
 }
 
 bool SMDS_VolumeOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
@@ -136,98 +128,49 @@ SMDS_VolumeOfNodes::~SMDS_VolumeOfNodes()
   }
 }
 
-void SMDS_VolumeOfNodes::Print(ostream & OS) const
+void SMDS_VolumeOfNodes::Print(std::ostream & OS) const
 {
-        OS << "volume <" << GetID() << "> : ";
-        int i;
-        for (i = 0; i < NbNodes()-1; ++i) OS << myNodes[i] << ",";
-        OS << myNodes[NbNodes()-1]<< ") " << endl;
+  OS << "volume <" << GetID() << "> : ";
+  int i;
+  for (i = 0; i < NbNodes()-1; ++i) OS << myNodes[i] << ",";
+  OS << myNodes[NbNodes()-1]<< ") " << std::endl;
 }
 
 int SMDS_VolumeOfNodes::NbFaces() const
 {
-        switch(NbNodes())
-        {
-        case 4: return 4;
-        case 5: return 5;
-        case 6: return 5;
-        case 8: return 6;
-        default: MESSAGE("invalid number of nodes");
-        }
-        return 0;
+  switch(NbNodes())
+  {
+  case 4: return 4;
+  case 5: return 5;
+  case 6: return 5;
+  case 8: return 6;
+  default: MESSAGE("invalid number of nodes");
+  }
+  return 0;
 }
 
 int SMDS_VolumeOfNodes::NbNodes() const
 {
-        return myNbNodes;
+  return myNbNodes;
 }
 
 int SMDS_VolumeOfNodes::NbEdges() const
 {
-        switch(NbNodes())
-        {
-        case 4: return 6;
-        case 5: return 8;
-        case 6: return 9;
-        case 8: return 12;
-        default: MESSAGE("invalid number of nodes");
-        }
-        return 0;
-}
-
-/*!
- * \brief Iterator on node of volume
- */
-class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
-{
- public:
-  SMDS_VolumeOfNodes_MyIterator(const SMDS_MeshNode* const* s, int l):
-    SMDS_NodeArrayElemIterator( s, & s[ l ]) {}
-};
-
-/*!
- * \brief Iterator on faces or edges of volume
- */
-class _MySubIterator : public SMDS_ElemIterator
-{
-  vector< const SMDS_MeshElement* > myElems;
-  size_t myIndex;
-public:
-  _MySubIterator(const SMDS_VolumeOfNodes* vol, SMDSAbs_ElementType type):myIndex(0) {
-    SMDS_VolumeTool vTool(vol);
-    if (type == SMDSAbs_Face)
-      vTool.GetAllExistingFaces( myElems );
-    else
-      vTool.GetAllExistingFaces( myElems );
-  }
-  /// Return true if and only if there are other object in this iterator
-  virtual bool more() { return myIndex < myElems.size(); }
-
-  /// Return the current object and step to the next one
-  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
-};
-
-SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch(type)
+  switch(NbNodes())
   {
-  case SMDSAbs_Volume:
-    return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
-  case SMDSAbs_Node:
-    return SMDS_ElemIteratorPtr(new SMDS_VolumeOfNodes_MyIterator(myNodes,myNbNodes));
-  case SMDSAbs_Face:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
-  case SMDSAbs_Edge:
-    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
-  default:
-    MESSAGE("ERROR : Iterator not implemented");
-    return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
+  case 4: return 6;
+  case 5: return 8;
+  case 6: return 9;
+  case 8: return 12;
+  default: MESSAGE("invalid number of nodes");
   }
+  return 0;
 }
 
+
 SMDSAbs_ElementType SMDS_VolumeOfNodes::GetType() const
 {
-        return SMDSAbs_Volume;
+  return SMDSAbs_Volume;
 }
 
 /*!
@@ -269,3 +212,20 @@ SMDSAbs_GeometryType SMDS_VolumeOfNodes::GetGeomType() const
   return aType;
 }
 
+int  SMDS_VolumeOfNodes::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+  for ( int i = 0; i < myNbNodes; ++i )
+    if ( myNodes[i] == node )
+      return i;
+  return -1;
+}
+
+SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::nodesIterator() const
+{
+  return boost::make_shared< SMDS_NodeArrayElemIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
+
+SMDS_NodeIteratorPtr SMDS_VolumeOfNodes::nodeIterator() const
+{
+  return boost::make_shared< SMDS_NodeArrayIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+}
index 485ea7eda7de15732fa802d7a7a9fe0122c21d0b..15f0058c69752fa07d4a22c36b9cdb0967ae4c3f 100644 (file)
 
 #include "SMESH_SMDS.hxx"
 
-#include "SMDS_MeshVolume.hxx"
+#include "SMDS_CellOfNodes.hxx"
 
-class SMDS_EXPORT SMDS_VolumeOfNodes:public SMDS_MeshVolume
+class SMDS_EXPORT SMDS_VolumeOfNodes: public SMDS_CellOfNodes
 {
         
-  public:
-        SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4);
-        SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5);
-        SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5,
-                const SMDS_MeshNode * node6);
-        SMDS_VolumeOfNodes(
-                const SMDS_MeshNode * node1,
-                const SMDS_MeshNode * node2,
-                const SMDS_MeshNode * node3,
-                const SMDS_MeshNode * node4,
-                const SMDS_MeshNode * node5,
-                const SMDS_MeshNode * node6,
-                const SMDS_MeshNode * node7,
-                const SMDS_MeshNode * node8);
-        bool ChangeNodes(const SMDS_MeshNode* nodes[],
-                         const int            nbNodes);
-        ~SMDS_VolumeOfNodes();
+ public:
+  SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                     const SMDS_MeshNode * node2,
+                     const SMDS_MeshNode * node3,
+                     const SMDS_MeshNode * node4);
+  SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                     const SMDS_MeshNode * node2,
+                     const SMDS_MeshNode * node3,
+                     const SMDS_MeshNode * node4,
+                     const SMDS_MeshNode * node5);
+  SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                     const SMDS_MeshNode * node2,
+                     const SMDS_MeshNode * node3,
+                     const SMDS_MeshNode * node4,
+                     const SMDS_MeshNode * node5,
+                     const SMDS_MeshNode * node6);
+  SMDS_VolumeOfNodes(const SMDS_MeshNode * node1,
+                     const SMDS_MeshNode * node2,
+                     const SMDS_MeshNode * node3,
+                     const SMDS_MeshNode * node4,
+                     const SMDS_MeshNode * node5,
+                     const SMDS_MeshNode * node6,
+                     const SMDS_MeshNode * node7,
+                     const SMDS_MeshNode * node8);
+  bool ChangeNodes(const SMDS_MeshNode* nodes[],
+                   const int            nbNodes);
+  ~SMDS_VolumeOfNodes();
 
-        void Print(std::ostream & OS) const;
-        int NbFaces() const;
-        int NbNodes() const;
-        int NbEdges() const;
-        virtual SMDSAbs_ElementType  GetType() const;    
-        virtual SMDSAbs_EntityType   GetEntityType() const;
-        virtual SMDSAbs_GeometryType GetGeomType() const;
+  void Print(std::ostream & OS) const;
+  int NbFaces() const;
+  int NbNodes() const;
+  int NbEdges() const;
+  virtual SMDSAbs_ElementType  GetType() const;    
+  virtual SMDSAbs_EntityType   GetEntityType() const;
+  virtual SMDSAbs_GeometryType GetGeomType() const;
 
+  virtual bool IsPoly() const { return false; }
+  virtual bool IsQuadratic() const { return false; }
   /*!
    * \brief Return node by its index
-    * \param ind - node index
-    * \retval const SMDS_MeshNode* - the node
+   * \param ind - node index
+   * \retval const SMDS_MeshNode* - the node
    */
   virtual const SMDS_MeshNode* GetNode(const int ind) const;
 
-  protected:
-        SMDS_ElemIteratorPtr
-                elementsIterator(SMDSAbs_ElementType type) const;
-        const SMDS_MeshNode** myNodes;
-        int                   myNbNodes;
+  virtual int  NbCornerNodes() const { return NbNodes(); }
+  virtual int  GetNodeIndex( const SMDS_MeshNode* node ) const;
+
+  virtual SMDS_ElemIteratorPtr nodesIterator() const;
+  virtual SMDS_NodeIteratorPtr nodeIterator() const;
+
+ protected:
+
+  const SMDS_MeshNode** myNodes;
+  int                   myNbNodes;
 
 };
 
index 9e144a620aaae174eef73eaa48e66d836edb02bd..6de1ac68e4efc8fed87c1b479ba58b5e261ec452 100644 (file)
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_VtkVolume.hxx"
 #include "SMDS_Mesh.hxx"
 
-#include "utilities.h"
+#include <utilities.h>
 
 #include <map>
 #include <limits>
@@ -43,8 +42,6 @@
 #include <numeric>
 #include <algorithm>
 
-using namespace std;
-
 namespace
 {
 // ======================================================
@@ -506,7 +503,7 @@ bool SMDS_VolumeTool::Set (const SMDS_MeshElement*                  theVolume,
   myNbFaces = theVolume->NbFaces();
   if ( myVolume->IsPoly() )
   {
-    myPolyedre = dynamic_cast<const SMDS_VtkVolume*>( myVolume );
+    myPolyedre = SMDS_Mesh::DownCast<SMDS_MeshVolume>( myVolume );
     myPolyFacetOri.resize( myNbFaces, 0 );
   }
 
@@ -522,10 +519,7 @@ bool SMDS_VolumeTool::Set (const SMDS_MeshElement*                  theVolume,
   }
   else
   {
-    int iNode = 0;
-    SMDS_ElemIteratorPtr nodeIt = myVolume->nodesIterator();
-    while ( nodeIt->more() )
-      myVolumeNodes[ iNode++ ] = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
+    myVolumeNodes.assign( myVolume->begin_nodes(), myVolume->end_nodes() );
   }
 
   // check validity
@@ -954,8 +948,8 @@ const int* SMDS_VolumeTool::GetFaceNodesIndices( int faceIndex ) const
 //purpose  : Return a set of face nodes.
 //=======================================================================
 
-bool SMDS_VolumeTool::GetFaceNodes (int                        faceIndex,
-                                    set<const SMDS_MeshNode*>& theFaceNodes ) const
+bool SMDS_VolumeTool::GetFaceNodes (int                             faceIndex,
+                                    std::set<const SMDS_MeshNode*>& theFaceNodes ) const
 {
   if ( !setFace( faceIndex ))
     return false;
@@ -1060,7 +1054,7 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const
         {
           ori = ( -minProj < maxProj ? -1 : +1 );
           double convexity = std::min( -minProj, maxProj ) / std::max( -minProj, maxProj );
-          convexity2face.insert( make_pair( convexity, iF * ori ));
+          convexity2face.insert( std::make_pair( convexity, iF * ori ));
         }
       }
       if ( faceMostConvex < 0 ) // none facet has nodes on the same side
@@ -1089,7 +1083,7 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const
   // compare orientation of links of the facet with myFwdLinks
   ori = 0;
   setFace( faceIndex );
-  vector< NLink > links( myCurFace.myNbNodes ), links2;
+  std::vector< NLink > links( myCurFace.myNbNodes ), links2;
   for ( int i = 0; i < myCurFace.myNbNodes && !ori; ++i )
   {
     NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1] );
@@ -1210,7 +1204,7 @@ bool SMDS_VolumeTool::GetFaceNormal (int faceIndex, double & X, double & Y, doub
   }
 
   double size = cross.Magnitude();
-  if ( size <= numeric_limits<double>::min() )
+  if ( size <= std::numeric_limits<double>::min() )
     return false;
 
   X = cross.x / size;
@@ -1382,7 +1376,7 @@ bool SMDS_VolumeTool::IsLinked (const SMDS_MeshNode* theNode1,
     } else {
       d2 = 0;
     }
-    vector<const SMDS_MeshNode*>::const_iterator i;
+    std::vector<const SMDS_MeshNode*>::const_iterator i;
     for (int iface = 0; iface < myNbFaces; iface++)
     {
       from = to;
@@ -1429,8 +1423,8 @@ bool SMDS_VolumeTool::IsLinked (const int theNode1Index,
     return IsLinked(myVolumeNodes[theNode1Index], myVolumeNodes[theNode2Index]);
   }
 
-  int minInd = min( theNode1Index, theNode2Index );
-  int maxInd = max( theNode1Index, theNode2Index );
+  int minInd = std::min( theNode1Index, theNode2Index );
+  int maxInd = std::max( theNode1Index, theNode2Index );
 
   if ( minInd < 0 || maxInd > (int)myVolumeNodes.size() - 1 || maxInd == minInd )
     return false;
@@ -1565,7 +1559,7 @@ int SMDS_VolumeTool::GetNodeIndex(const SMDS_MeshNode* theNode) const
  */
 //================================================================================
 
-int SMDS_VolumeTool::GetAllExistingFaces(vector<const SMDS_MeshElement*> & faces) const
+int SMDS_VolumeTool::GetAllExistingFaces(std::vector<const SMDS_MeshElement*> & faces) const
 {
   faces.clear();
   SaveFacet savedFacet( myCurFace );
@@ -1606,7 +1600,7 @@ int SMDS_VolumeTool::GetAllExistingFaces(vector<const SMDS_MeshElement*> & faces
  */
 //================================================================================
 
-int SMDS_VolumeTool::GetAllExistingEdges(vector<const SMDS_MeshElement*> & edges) const
+int SMDS_VolumeTool::GetAllExistingEdges(std::vector<const SMDS_MeshElement*> & edges) const
 {
   edges.clear();
   edges.reserve( myVolumeNodes.size() * 2 );
@@ -1717,7 +1711,7 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex, const SMDS_MeshElement** otherV
       //   int nb = myCurFace.myNbNodes;
       //   if ( myVolume->GetEntityType() != vol->GetEntityType() )
       //     nb -= ( GetCenterNodeIndex(0) > 0 );
-      //   set<const SMDS_MeshNode*> faceNodes( nodes, nodes + nb );
+      //   std::set<const SMDS_MeshNode*> faceNodes( nodes, nodes + nb );
       //   if ( SMDS_VolumeTool( vol ).GetFaceIndex( faceNodes ) < 0 )
       //     continue;
       // }
@@ -1747,7 +1741,7 @@ bool SMDS_VolumeTool::IsFreeFaceAdv( int faceIndex, const SMDS_MeshElement** oth
 
   // evaluate nb of face nodes shared by other volumes
   int maxNbShared = -1;
-  typedef map< const SMDS_MeshElement*, int > TElemIntMap;
+  typedef std::map< const SMDS_MeshElement*, int > TElemIntMap;
   TElemIntMap volNbShared;
   TElemIntMap::iterator vNbIt;
   for ( int iNode = 0; iNode < nbFaceNodes; iNode++ ) {
@@ -1756,7 +1750,7 @@ bool SMDS_VolumeTool::IsFreeFaceAdv( int faceIndex, const SMDS_MeshElement** oth
     while ( eIt->more() ) {
       const SMDS_MeshElement* elem = eIt->next();
       if ( elem != myVolume ) {
-        vNbIt = volNbShared.insert( make_pair( elem, 0 )).first;
+        vNbIt = volNbShared.insert( std::make_pair( elem, 0 )).first;
         (*vNbIt).second++;
         if ( vNbIt->second > maxNbShared )
           maxNbShared = vNbIt->second;
@@ -1855,7 +1849,7 @@ bool SMDS_VolumeTool::IsFreeFaceAdv( int faceIndex, const SMDS_MeshElement** oth
 //purpose  : Return index of a face formed by theFaceNodes
 //=======================================================================
 
-int SMDS_VolumeTool::GetFaceIndex( const set<const SMDS_MeshNode*>& theFaceNodes,
+int SMDS_VolumeTool::GetFaceIndex( const std::set<const SMDS_MeshNode*>& theFaceNodes,
                                    const int                        theFaceIndexHint ) const
 {
   if ( theFaceIndexHint >= 0 )
@@ -1898,12 +1892,12 @@ int SMDS_VolumeTool::GetFaceIndex( const set<const SMDS_MeshNode*>& theFaceNodes
 //purpose  : Return index of a face formed by theFaceNodes
 //=======================================================================
 
-/*int SMDS_VolumeTool::GetFaceIndex( const set<int>& theFaceNodesIndices )
+/*int SMDS_VolumeTool::GetFaceIndex( const std::set<int>& theFaceNodesIndices )
 {
   for ( int iFace = 0; iFace < myNbFaces; iFace++ ) {
     const int* nodes = GetFaceNodesIndices( iFace );
     int nbFaceNodes = NbFaceNodes( iFace );
-    set<int> nodeSet;
+    std::set<int> nodeSet;
     for ( int iNode = 0; iNode < nbFaceNodes; iNode++ )
       nodeSet.insert( nodes[ iNode ] );
     if ( theFaceNodesIndices == nodeSet )
@@ -1932,7 +1926,7 @@ bool SMDS_VolumeTool::setFace( int faceIndex ) const
 
   if (myVolume->IsPoly())
   {
-    if (!myPolyedre) {
+    if ( !myPolyedre ) {
       MESSAGE("Warning: bad volumic element");
       return false;
     }
index 271ab4af5dcb0113d6470129fd0110ffb5d71f41..d0a1f31211f1c8fbe261d8bb8bc4cac0add52efa 100644 (file)
@@ -33,7 +33,6 @@
 
 class SMDS_MeshElement;
 class SMDS_MeshNode;
-class SMDS_VtkVolume;
 class SMDS_MeshVolume;
 
 #include <vector>
@@ -252,7 +251,7 @@ class SMDS_EXPORT SMDS_VolumeTool
   bool projectNodesToNormal( int faceIndex, double& minProj, double& maxProj ) const;
 
   const SMDS_MeshElement* myVolume;
-  const SMDS_VtkVolume*   myPolyedre;
+  const SMDS_MeshVolume*  myPolyedre;
   bool                    myIgnoreCentralNodes;
 
   bool                    myVolForward;
index a0f0d378425d14c48c1fda1433c6f832f1bcdb5a..0f474492576f364de0d49ef933eba26ec49e4e2f 100644 (file)
 #include "SMDS_VtkCellIterator.hxx"
 #include "utilities.h"
 
-SMDS_VtkCellIterator::SMDS_VtkCellIterator(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType) :
-  _mesh(mesh), _cellId(vtkCellId), _index(0), _type(aType)
+#include <vtkCell.h>
+#include <vtkIdList.h>
+
+_GetVtkNodes::_GetVtkNodes( vtkIdList*         _vtkIdList,
+                            SMDS_Mesh*         mesh,
+                            int                vtkCellId,
+                            SMDSAbs_EntityType aType )
 {
-  vtkUnstructuredGrid* grid = _mesh->getGrid();
-  _vtkIdList = vtkIdList::New();
+  vtkUnstructuredGrid* grid = mesh->GetGrid();
   const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( aType );
   if ( interlace.empty() )
   {
-    grid->GetCellPoints(_cellId, _vtkIdList);
-    _nbNodes = _vtkIdList->GetNumberOfIds();
+    grid->GetCellPoints( vtkCellId, _vtkIdList );
   }
   else
   {
     vtkIdType npts, *pts;
-    grid->GetCellPoints( _cellId, npts, pts );
-    _vtkIdList->SetNumberOfIds( _nbNodes = npts );
-    for (int i = 0; i < _nbNodes; i++)
+    grid->GetCellPoints( vtkCellId, npts, pts );
+    _vtkIdList->SetNumberOfIds( npts );
+    for (int i = 0; i < npts; i++)
       _vtkIdList->SetId(i, pts[interlace[i]]);
   }
 }
 
-SMDS_VtkCellIterator::~SMDS_VtkCellIterator()
-{
-  _vtkIdList->Delete();
-}
-
-bool SMDS_VtkCellIterator::more()
-{
-  return (_index < _nbNodes);
-}
-
-const SMDS_MeshElement* SMDS_VtkCellIterator::next()
+_GetVtkNodesToUNV::_GetVtkNodesToUNV( vtkIdList*         _vtkIdList,
+                                      SMDS_Mesh*         mesh,
+                                      int                vtkCellId,
+                                      SMDSAbs_EntityType aType )
 {
-  vtkIdType id = _vtkIdList->GetId(_index++);
-  return _mesh->FindNodeVtk(id);
-}
-
-SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType) :
-  SMDS_VtkCellIterator()
-{
-  _mesh = mesh;
-  _cellId = vtkCellId;
-  _index = 0;
-  _type = aType;
-  //MESSAGE("SMDS_VtkCellInterlacedIterator (UNV)" << _type);
-
-  _vtkIdList = vtkIdList::New();
-  vtkIdType* pts;
-  vtkUnstructuredGrid* grid = _mesh->getGrid();
-  grid->GetCellPoints((vtkIdType)_cellId, (vtkIdType&)_nbNodes, pts);
-  _vtkIdList->SetNumberOfIds(_nbNodes);
+  vtkIdType * pts, npts;
+  vtkUnstructuredGrid* grid = mesh->GetGrid();
+  grid->GetCellPoints( (vtkIdType)vtkCellId, npts, pts );
   const int *ids = 0;
-  switch (_type)
+  switch (aType)
   {
   case SMDSEntity_Quad_Edge:
   {
@@ -85,7 +66,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCel
   {
     static int id[] = { 0, 3, 1, 4, 2, 5 };
     ids = id;
-    _nbNodes = 6;
+    npts = 6;
     break;
   }
   case SMDSEntity_Quad_Quadrangle:
@@ -93,7 +74,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCel
   {
     static int id[] = { 0, 4, 1, 5, 2, 6, 3, 7 };
     ids = id;
-    _nbNodes = 8;
+    npts = 8;
     break;
   }
   case SMDSEntity_Quad_Tetra:
@@ -126,7 +107,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCel
   {
     static int id[] = { 0, 8, 1, 9, 2, 10, 3, 11, 16, 17, 18, 19, 4, 12, 5, 13, 6, 14, 7, 15 };
     ids = id;
-    _nbNodes = 20;
+    npts = 20;
     break;
   }
   case SMDSEntity_Polygon:
@@ -134,62 +115,42 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCel
   case SMDSEntity_Polyhedra:
   case SMDSEntity_Quad_Polyhedra:
   default:
-    const std::vector<int>& i = SMDS_MeshCell::interlacedSmdsOrder(aType, _nbNodes);
+    const std::vector<int>& i = SMDS_MeshCell::interlacedSmdsOrder( aType, npts );
     if ( !i.empty() )
       ids = & i[0];
   }
 
+  _vtkIdList->SetNumberOfIds( npts );
+
   if ( ids )
-    for (int i = 0; i < _nbNodes; i++)
+    for (int i = 0; i < npts; i++)
       _vtkIdList->SetId(i, pts[ids[i]]);
   else
-    for (int i = 0; i < _nbNodes; i++)
+    for (int i = 0; i < npts; i++)
       _vtkIdList->SetId(i, pts[i]);
 }
 
-bool SMDS_VtkCellIteratorToUNV::more()
+_GetVtkNodesPolyh::_GetVtkNodesPolyh( vtkIdList*         _vtkIdList,
+                                      SMDS_Mesh*         mesh,
+                                      int                vtkCellId,
+                                      SMDSAbs_EntityType aType )
 {
-  return SMDS_VtkCellIterator::more();
-}
-
-const SMDS_MeshNode* SMDS_VtkCellIteratorToUNV::next()
-{
-  return static_cast< const SMDS_MeshNode* >( SMDS_VtkCellIterator::next() );
-}
-
-SMDS_VtkCellIteratorToUNV::~SMDS_VtkCellIteratorToUNV()
-{
-}
-
-SMDS_VtkCellIteratorPolyH::SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType) :
-  SMDS_VtkCellIterator()
-{
-  _mesh = mesh;
-  _cellId = vtkCellId;
-  _index = 0;
-  _type = aType;
-  //MESSAGE("SMDS_VtkCellIteratorPolyH " << _type);
-  _vtkIdList = vtkIdList::New();
-  vtkUnstructuredGrid* grid = _mesh->getGrid();
-  grid->GetCellPoints(_cellId, _vtkIdList);
-  _nbNodes = _vtkIdList->GetNumberOfIds();
-  switch (_type)
+  vtkUnstructuredGrid* grid = mesh->GetGrid();
+  switch (aType)
   {
   case SMDSEntity_Polyhedra:
   {
-    //MESSAGE("SMDS_VtkCellIterator Polyhedra");
     vtkIdType nFaces = 0;
     vtkIdType* ptIds = 0;
-    grid->GetFaceStream(_cellId, nFaces, ptIds);
-    int id = 0;
-    _nbNodesInFaces = 0;
+    grid->GetFaceStream( vtkCellId, nFaces, ptIds );
+    int id = 0, nbNodesInFaces = 0;
     for (int i = 0; i < nFaces; i++)
     {
       int nodesInFace = ptIds[id]; // nodeIds in ptIds[id+1 .. id+nodesInFace]
-      _nbNodesInFaces += nodesInFace;
+      nbNodesInFaces += nodesInFace;
       id += (nodesInFace + 1);
     }
-    _vtkIdList->SetNumberOfIds(_nbNodesInFaces);
+    _vtkIdList->SetNumberOfIds( nbNodesInFaces );
     id = 0;
     int n = 0;
     for (int i = 0; i < nFaces; i++)
@@ -205,12 +166,3 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCel
     assert(0);
   }
 }
-
-SMDS_VtkCellIteratorPolyH::~SMDS_VtkCellIteratorPolyH()
-{
-}
-
-bool SMDS_VtkCellIteratorPolyH::more()
-{
-  return (_index < _nbNodesInFaces);
-}
index 30ddadee52cc4cdebf53ad4314e57a961f24605f..92fdc17a240187f3c466e85421c76222a1d573a3 100644 (file)
 #include <vtkCell.h>
 #include <vtkIdList.h>
 
-class SMDS_VtkCellIterator: public SMDS_ElemIterator
+//--------------------------------------------------------------------------------
+/*!
+ * \brief Retrieve nodes of a cell
+ */
+struct _GetVtkNodes
+{
+  _GetVtkNodes( vtkIdList* nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+};
+struct _GetVtkNodesToUNV
+{
+  _GetVtkNodesToUNV( vtkIdList* nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+};
+struct _GetVtkNodesPolyh
+{
+  _GetVtkNodesPolyh( vtkIdList* nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+};
+
+//--------------------------------------------------------------------------------
+/*!
+ * \brief Iterator on nodes of a cell
+ */
+template< class SMDS_ITERATOR = SMDS_ElemIterator, class GET_VTK_NODES = _GetVtkNodes >
+class SMDS_VtkCellIterator: public SMDS_ITERATOR
 {
 public:
-  SMDS_VtkCellIterator(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType);
-  virtual ~SMDS_VtkCellIterator();
-  virtual bool more();
-  virtual const SMDS_MeshElement* next();
-  inline void exchange(vtkIdType a, vtkIdType b)
+  typedef typename SMDS_ITERATOR::value_type result_type;
+
+  SMDS_VtkCellIterator(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType)
+    : _mesh(mesh), _index(0), _vtkIdList( vtkIdList::New() )
   {
-    vtkIdType t = _vtkIdList->GetId(a);
-    _vtkIdList->SetId(a, _vtkIdList->GetId(b));
-    _vtkIdList->SetId(b, t);
+    GET_VTK_NODES getNodes( _vtkIdList, mesh, vtkCellId, aType );
+  }
+  virtual ~SMDS_VtkCellIterator() { _vtkIdList->Delete(); }
+  virtual bool        more()      {  return ( _index < _vtkIdList->GetNumberOfIds() ); }
+  virtual result_type next()      {
+    vtkIdType id = _vtkIdList->GetId( _index++ );
+    return static_cast<result_type>( _mesh->FindNodeVtk( id ));
   }
-
 protected:
-  SMDS_VtkCellIterator() {};
-
   SMDS_Mesh* _mesh;
-  int _cellId;
-  int _index;
-  int _nbNodes;
-  SMDSAbs_EntityType _type;
+  int        _index;
   vtkIdList* _vtkIdList;
 };
 
-class SMDS_VtkCellIteratorToUNV: public SMDS_NodeIterator, protected SMDS_VtkCellIterator
+//--------------------------------------------------------------------------------
+template< class SMDS_ITERATOR = SMDS_ElemIterator >
+class SMDS_VtkCellIteratorToUNV: public SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesToUNV >
 {
+  typedef SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesToUNV > parent_t;
 public:
-  SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType);
-  virtual const SMDS_MeshNode* next();
-  virtual bool more();
-  virtual ~SMDS_VtkCellIteratorToUNV();
+  SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type):
+    parent_t( mesh, vtkCellId, type ) {}
 };
 
-class SMDS_VtkCellIteratorPolyH: public SMDS_VtkCellIterator
+//--------------------------------------------------------------------------------
+template< class SMDS_ITERATOR = SMDS_ElemIterator >
+class SMDS_VtkCellIteratorPolyH: public SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesPolyh >
 {
+  typedef SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesPolyh > parent_t;
 public:
-  SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType);
-  virtual ~SMDS_VtkCellIteratorPolyH();
-  virtual bool more();
-protected:
-  int _nbNodesInFaces;
+  SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type):
+    parent_t( mesh, vtkCellId, type ) {}
 };
 
 #endif
diff --git a/src/SMDS/SMDS_VtkEdge.cxx b/src/SMDS/SMDS_VtkEdge.cxx
deleted file mode 100644 (file)
index edf40f7..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "SMDS_VtkEdge.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Mesh.hxx"
-#include "SMDS_VtkCellIterator.hxx"
-
-#include "utilities.h"
-
-#include <vector>
-#include <cassert>
-
-using namespace std;
-
-SMDS_VtkEdge::SMDS_VtkEdge()
-{
-}
-
-SMDS_VtkEdge::SMDS_VtkEdge(std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  init(nodeIds, mesh);
-}
-
-SMDS_VtkEdge::~SMDS_VtkEdge()
-{
-}
-
-void SMDS_VtkEdge::init(std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  SMDS_MeshEdge::init();
-  myMeshId = mesh->getMeshId();
-  vtkIdType aType = ( nodeIds.size() == 3 ) ? VTK_QUADRATIC_EDGE : VTK_LINE;
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell(aType, nodeIds.size(), &nodeIds[0]);
-  mesh->setMyModified();
-}
-
-bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode * node1, const SMDS_MeshNode * node2)
-{
-  const SMDS_MeshNode* nodes[] = { node1, node2 };
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-  return ChangeNodes(nodes, 2);
-}
-
-bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  if (nbNodes != npts)
-  {
-    MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes);
-    return false;
-  }
-  for (int i = 0; i < nbNodes; i++)
-  {
-    pts[i] = nodes[i]->getVtkId();
-  }
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-  return true;
-}
-
-bool SMDS_VtkEdge::IsMediumNode(const SMDS_MeshNode* node) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  return ((npts == 3) && (node->getVtkId() == pts[2]));
-}
-
-void SMDS_VtkEdge::Print(std::ostream & OS) const
-{
-  OS << "edge <" << GetID() << "> : ";
-}
-
-int SMDS_VtkEdge::NbNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType *pts, npts;
-  grid->GetCellPoints( myVtkID, npts, pts );
-  assert(npts >= 2);
-  return npts;
-}
-
-int SMDS_VtkEdge::NbEdges() const
-{
-  return 1;
-}
-
-SMDSAbs_EntityType SMDS_VtkEdge::GetEntityType() const
-{
-  if (NbNodes() == 2)
-    return SMDSEntity_Edge;
-  else
-    return SMDSEntity_Quad_Edge;
-}
-
-vtkIdType SMDS_VtkEdge::GetVtkType() const
-{
-  if (NbNodes() == 2)
-    return VTK_LINE;
-  else
-    return VTK_QUADRATIC_EDGE;
-
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode*
-SMDS_VtkEdge::GetNode(const int ind) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( this->myVtkID, npts, pts );
-  return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
-}
-
-bool SMDS_VtkEdge::IsQuadratic() const
-{
-  if (this->NbNodes() > 2)
-    return true;
-  else
-    return false;
-}
-
-SMDS_ElemIteratorPtr SMDS_VtkEdge::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch (type)
-  {
-    case SMDSAbs_Node:
-      return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-    default:
-      MESSAGE("ERROR : Iterator not implemented");
-      return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
-  }
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkEdge::nodesIteratorToUNV() const
-{
-  return SMDS_NodeIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkEdge::interlacedNodesIterator() const
-{
-  return nodesIteratorToUNV();
-}
diff --git a/src/SMDS/SMDS_VtkEdge.hxx b/src/SMDS/SMDS_VtkEdge.hxx
deleted file mode 100644 (file)
index aebfb6e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-//  SMESH SMDS : implementation of Salome mesh data structure
-//  File   : SMDS_VtkEdge.hxx
-//  Module : SMESH
-
-#ifndef _SMDS_VTKEDGE_HXX_
-#define _SMDS_VTKEDGE_HXX_
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshEdge.hxx"
-#include <vtkUnstructuredGrid.h>
-#include <vector>
-
-class SMDS_EXPORT SMDS_VtkEdge: public SMDS_MeshEdge
-{
-
-public:
-  SMDS_VtkEdge();
-  SMDS_VtkEdge(std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  ~SMDS_VtkEdge();
-  void init(std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  bool ChangeNodes(const SMDS_MeshNode * node1, const SMDS_MeshNode * node2);
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-
-  virtual void Print(std::ostream & OS) const;
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-
-  virtual vtkIdType GetVtkType() const;
-  virtual SMDSAbs_EntityType GetEntityType() const;
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-  virtual bool IsQuadratic() const;
-
-  virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const;
-  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-protected:
-};
-#endif
diff --git a/src/SMDS/SMDS_VtkFace.cxx b/src/SMDS/SMDS_VtkFace.cxx
deleted file mode 100644 (file)
index 724a7ec..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "SMDS_VtkFace.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Mesh.hxx"
-#include "SMDS_VtkCellIterator.hxx"
-
-#include "utilities.h"
-
-#include <vector>
-
-using namespace std;
-
-SMDS_VtkFace::SMDS_VtkFace()
-{
-}
-
-SMDS_VtkFace::SMDS_VtkFace(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  init(nodeIds, mesh);
-}
-
-SMDS_VtkFace::~SMDS_VtkFace()
-{
-}
-
-void SMDS_VtkFace::init(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  SMDS_MeshFace::init();
-  myMeshId = mesh->getMeshId();
-  vtkIdType aType = VTK_TRIANGLE;
-  switch (nodeIds.size())
-  {
-    case 3:  aType = VTK_TRIANGLE;            break;
-    case 4:  aType = VTK_QUAD;                break;
-    case 6:  aType = VTK_QUADRATIC_TRIANGLE;  break;
-    case 8:  aType = VTK_QUADRATIC_QUAD;      break;
-    case 9:  aType = VTK_BIQUADRATIC_QUAD;    break;
-    case 7:  aType = VTK_BIQUADRATIC_TRIANGLE;break;
-    default: aType = VTK_POLYGON;
-  }
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell(aType, nodeIds.size(), (vtkIdType*) &nodeIds[0]);
-  mesh->setMyModified();
-}
-
-void SMDS_VtkFace::initPoly(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  SMDS_MeshFace::init();
-  myMeshId = mesh->getMeshId();
-  vtkIdType aType = VTK_POLYGON;
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell(aType, nodeIds.size(), (vtkIdType*) &nodeIds[0]);
-  mesh->setMyModified();
-}
-
-void SMDS_VtkFace::initQuadPoly(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  SMDS_MeshFace::init();
-  myMeshId = mesh->getMeshId();
-  vtkIdType aType = VTK_QUADRATIC_POLYGON;
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell(aType, nodeIds.size(), (vtkIdType*) &nodeIds[0]);
-  mesh->setMyModified();
-}
-
-bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  if (nbNodes != npts)
-  {
-    MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes);
-    return false;
-  }
-  for (int i = 0; i < nbNodes; i++)
-  {
-    pts[i] = nodes[i]->getVtkId();
-  }
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-  return true;
-}
-
-void SMDS_VtkFace::Print(std::ostream & OS) const
-{
-  OS << "face <" << GetID() << "> : ";
-}
-
-int SMDS_VtkFace::NbEdges() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int nbEdges = 3;
-  switch (aVtkType)
-  {
-  case VTK_TRIANGLE:
-  case VTK_QUADRATIC_TRIANGLE:
-  case VTK_BIQUADRATIC_TRIANGLE:
-    nbEdges = 3;
-    break;
-  case VTK_QUAD:
-  case VTK_QUADRATIC_QUAD:
-  case VTK_BIQUADRATIC_QUAD:
-    nbEdges = 4;
-    break;
-  case VTK_QUADRATIC_POLYGON:
-    nbEdges = NbNodes() / 2;
-    break;
-  case VTK_POLYGON:
-  default:
-    nbEdges = NbNodes();
-    break;
-  }
-  return nbEdges;
-}
-
-int SMDS_VtkFace::NbFaces() const
-{
-  return 1;
-}
-
-int SMDS_VtkFace::NbNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType *pts, npts;
-  grid->GetCellPoints( myVtkID, npts, pts );
-  return npts;
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode*
-SMDS_VtkFace::GetNode(const int ind) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( this->myVtkID, npts, pts );
-  return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
-}
-
-/*!
- * \brief Check if a node belongs to the element
- * \param node - the node to check
- * \retval int - node index within the element, -1 if not found
- */
-int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( this->myVtkID, npts, pts );
-  for ( vtkIdType i = 0; i < npts; ++i )
-    if ( pts[i] == node->getVtkId() )
-      return i;
-  return -1;
-}
-
-bool SMDS_VtkFace::IsQuadratic() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  // TODO quadratic polygons ?
-  switch (aVtkType)
-  {
-    case VTK_QUADRATIC_TRIANGLE:
-    case VTK_QUADRATIC_QUAD:
-    case VTK_QUADRATIC_POLYGON:
-    case VTK_BIQUADRATIC_QUAD:
-    case VTK_BIQUADRATIC_TRIANGLE:
-      return true;
-      break;
-    default:
-      return false;
-  }
-}
-
-bool SMDS_VtkFace::IsPoly() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  return ( aVtkType == VTK_POLYGON || aVtkType == VTK_QUADRATIC_POLYGON );
-}
-
-bool SMDS_VtkFace::IsMediumNode(const SMDS_MeshNode* node) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int rankFirstMedium = 0;
-  switch (aVtkType)
-  {
-  case VTK_QUADRATIC_TRIANGLE:
-  case VTK_BIQUADRATIC_TRIANGLE:
-    rankFirstMedium = 3; // medium nodes are of rank 3,4,5
-    break;
-  case VTK_QUADRATIC_QUAD:
-  case VTK_BIQUADRATIC_QUAD:
-    rankFirstMedium = 4; // medium nodes are of rank 4,5,6,7
-    break;
-  case VTK_QUADRATIC_POLYGON:
-    rankFirstMedium = npts / 2;
-    break;
-  default:
-    //MESSAGE("wrong element type " << aVtkType);
-    return false;
-  }
-  vtkIdType nodeId = node->getVtkId();
-  for (int rank = 0; rank < npts; rank++)
-  {
-    if (pts[rank] == nodeId)
-    {
-      //MESSAGE("rank " << rank << " is medium node " << (rank < rankFirstMedium));
-      if (rank < rankFirstMedium)
-        return false;
-      else
-        return true;
-    }
-  }
-  //throw SALOME_Exception(LOCALIZED("node does not belong to this element"));
-  MESSAGE("======================================================");
-  MESSAGE("= IsMediumNode: node does not belong to this element =");
-  MESSAGE("======================================================");
-  return false;
-}
-
-int SMDS_VtkFace::NbCornerNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  int       nbPoints = NbNodes();
-  vtkIdType aVtkType = grid->GetCellType(myVtkID);
-  switch ( aVtkType )
-  {
-  case VTK_POLYGON:
-    break;
-  case VTK_QUADRATIC_POLYGON:
-    nbPoints /= 2;
-    break;
-  default:
-    if ( nbPoints > 4 )
-      nbPoints /= 2;
-  }
-  return nbPoints;
-}
-
-SMDSAbs_EntityType SMDS_VtkFace::GetEntityType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  return SMDS_MeshCell::toSmdsType( VTKCellType( aVtkType ));
-}
-
-SMDSAbs_GeometryType SMDS_VtkFace::GetGeomType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  switch ( aVtkType ) {
-  case VTK_TRIANGLE:
-  case VTK_QUADRATIC_TRIANGLE:
-  case VTK_BIQUADRATIC_TRIANGLE: return SMDSGeom_TRIANGLE;
-
-  case VTK_QUAD:
-  case VTK_QUADRATIC_QUAD:
-  case VTK_BIQUADRATIC_QUAD: return SMDSGeom_QUADRANGLE;
-
-  case VTK_POLYGON:
-  case VTK_QUADRATIC_POLYGON: return SMDSGeom_POLYGON;
-  default:;
-  }
-  return SMDSGeom_NONE;
-}
-
-vtkIdType SMDS_VtkFace::GetVtkType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  return aVtkType;
-}
-
-SMDS_ElemIteratorPtr SMDS_VtkFace::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch (type)
-  {
-    case SMDSAbs_Node:
-      return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-    default:
-      MESSAGE("ERROR : Iterator not implemented")
-      ;
-      return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
-  }
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkFace::nodesIteratorToUNV() const
-{
-  return SMDS_NodeIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkFace::interlacedNodesIterator() const
-{
-  return nodesIteratorToUNV();
-}
-
-//! change only the first node, used for temporary triangles in quadrangle to triangle adaptor
-void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node)
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  grid->RemoveReferenceToCell(pts[0], myVtkID);
-  pts[0] = node->getVtkId();
-  node->AddInverseElement(this),
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-}
diff --git a/src/SMDS/SMDS_VtkFace.hxx b/src/SMDS/SMDS_VtkFace.hxx
deleted file mode 100644 (file)
index 50c49a0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef _SMDS_VTKFACE_HXX_
-#define _SMDS_VTKFACE_HXX_
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshFace.hxx"
-#include <vtkUnstructuredGrid.h>
-#include <vector>
-
-class SMDS_EXPORT SMDS_VtkFace: public SMDS_MeshFace
-{
-public:
-  SMDS_VtkFace();
-  SMDS_VtkFace(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  ~SMDS_VtkFace();
-  void init(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  void initPoly(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  void initQuadPoly(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-
-  bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
-  void ChangeApex(SMDS_MeshNode* node); // to use only for tmp triangles
-
-  virtual void Print(std::ostream & OS) const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-  virtual int NbNodes() const;
-
-  virtual vtkIdType            GetVtkType() const;
-  virtual SMDSAbs_EntityType   GetEntityType() const;
-  virtual SMDSAbs_GeometryType GetGeomType() const;
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-  virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
-
-  virtual bool IsQuadratic() const;
-  virtual bool IsPoly() const;
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-  virtual int  NbCornerNodes() const;
-
-  virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const;
-  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-protected:
-};
-
-#endif
diff --git a/src/SMDS/SMDS_VtkVolume.cxx b/src/SMDS/SMDS_VtkVolume.cxx
deleted file mode 100644 (file)
index ecbcd92..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "SMDS_VtkVolume.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_Mesh.hxx"
-#include "SMDS_VtkCellIterator.hxx"
-
-#include "utilities.h"
-
-#include <vector>
-
-SMDS_VtkVolume::SMDS_VtkVolume()
-{
-}
-
-SMDS_VtkVolume::SMDS_VtkVolume(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  init(nodeIds, mesh);
-}
-/*!
- * typed used are vtk types (@see vtkCellType.h)
- * see GetEntityType() for conversion in SMDS type (@see SMDSAbs_ElementType.hxx)
- */
-void SMDS_VtkVolume::init(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh)
-{
-  SMDS_MeshVolume::init();
-  myMeshId = mesh->getMeshId();
-  vtkIdType aType = VTK_TETRA;
-  switch (nodeIds.size()) // cases are in order of usage frequency
-  {
-    case 4:  aType = VTK_TETRA;                        break;
-    case 8:  aType = VTK_HEXAHEDRON;                   break;
-    case 5:  aType = VTK_PYRAMID;                      break;
-    case 6:  aType = VTK_WEDGE;                        break;
-    case 10: aType = VTK_QUADRATIC_TETRA;              break;
-    case 20: aType = VTK_QUADRATIC_HEXAHEDRON;         break;
-    case 13: aType = VTK_QUADRATIC_PYRAMID;            break;
-    case 15: aType = VTK_QUADRATIC_WEDGE;              break;
-    case 18: aType = VTK_BIQUADRATIC_QUADRATIC_WEDGE;  break;
-    case 12: aType = VTK_HEXAGONAL_PRISM;              break;
-    case 27: aType = VTK_TRIQUADRATIC_HEXAHEDRON;      break;
-    default: aType = VTK_HEXAHEDRON;
-  }
-  myVtkID = mesh->getGrid()->InsertNextLinkedCell(aType, nodeIds.size(), (vtkIdType *) &nodeIds[0]);
-  mesh->setMyModified();
-}
-
-void SMDS_VtkVolume::initPoly(const std::vector<vtkIdType>& nodeIds,
-                              const std::vector<int>&       nbNodesPerFace,
-                              SMDS_Mesh*                    mesh)
-{
-  SMDS_MeshVolume::init();
-  SMDS_UnstructuredGrid* grid = mesh->getGrid();
-  //double center[3];
-  //this->gravityCenter(grid, &nodeIds[0], nodeIds.size(), &center[0]);
-  std::vector<vtkIdType> ptIds;
-  vtkIdType nbFaces = nbNodesPerFace.size();
-  int k = 0;
-  for (int i = 0; i < nbFaces; i++)
-  {
-    int nf = nbNodesPerFace[i];
-    ptIds.push_back(nf);
-    // EAP: a right approach is:
-    // - either the user should care of order of nodes or
-    // - the user should use a service method arranging nodes if he
-    //   don't want or can't to do it by him-self
-    // The method below works OK only with planar faces and convex polyhedrones
-    //
-    // double a[3];
-    // double b[3];
-    // double c[3];
-    // grid->GetPoints()->GetPoint(nodeIds[k], a);
-    // grid->GetPoints()->GetPoint(nodeIds[k + 1], b);
-    // grid->GetPoints()->GetPoint(nodeIds[k + 2], c);
-    // bool isFaceForward = this->isForward(a, b, c, center);
-    const vtkIdType *facePts = &nodeIds[k];
-    //if (isFaceForward)
-    for (int n = 0; n < nf; n++)
-      ptIds.push_back(facePts[n]);
-    // else
-    //   for (int n = nf - 1; n >= 0; n--)
-    //     ptIds.push_back(facePts[n]);
-    k += nf;
-  }
-  myVtkID = grid->InsertNextLinkedCell(VTK_POLYHEDRON, nbFaces, &ptIds[0]);
-  mesh->setMyModified();
-}
-
-bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  if (nbNodes != npts)
-  {
-    MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes);
-    return false;
-  }
-  for (int i = 0; i < nbNodes; i++)
-  {
-    pts[i] = nodes[i]->getVtkId();
-  }
-  SMDS_Mesh::_meshList[myMeshId]->setMyModified();
-  return true;
-}
-
-/*!
- * Reorder in VTK order a list of nodes given in SMDS order.
- * To be used before ChangeNodes: lists are given or computed in SMDS order.
- */
-bool SMDS_VtkVolume::vtkOrder(const SMDS_MeshNode* nodes[], const int nbNodes)
-{
-  if (nbNodes != this->NbNodes())
-  {
-    MESSAGE("vtkOrder, wrong number of nodes " << nbNodes << " instead of "<< this->NbNodes());
-    return false;
-  }
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  const std::vector<int>& interlace = SMDS_MeshCell::toVtkOrder( VTKCellType( aVtkType ));
-  if ( !interlace.empty() )
-  {
-    ASSERT( (int)interlace.size() == nbNodes );
-    std::vector<const SMDS_MeshNode*> initNodes( nodes, nodes+nbNodes );
-    for ( size_t i = 0; i < interlace.size(); ++i )
-      nodes[i] = initNodes[ interlace[i] ];
-  }
-  return true;
-}
-
-SMDS_VtkVolume::~SMDS_VtkVolume()
-{
-}
-
-void SMDS_VtkVolume::Print(ostream & OS) const
-{
-  OS << "volume <" << GetID() << "> : ";
-}
-
-int SMDS_VtkVolume::NbFaces() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int nbFaces = 4;
-  switch (aVtkType)
-  {
-    case VTK_TETRA:
-    case VTK_QUADRATIC_TETRA:
-      nbFaces = 4;
-      break;
-    case VTK_PYRAMID:
-    case VTK_WEDGE:
-    case VTK_QUADRATIC_PYRAMID:
-    case VTK_QUADRATIC_WEDGE:
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      nbFaces = 5;
-      break;
-    case VTK_HEXAHEDRON:
-    case VTK_QUADRATIC_HEXAHEDRON:
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      nbFaces = 6;
-      break;
-    case VTK_POLYHEDRON:
-      {
-        vtkIdType nFaces = 0;
-        vtkIdType* ptIds = 0;
-        grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-        nbFaces = nFaces;
-        break;
-      }
-    case VTK_HEXAGONAL_PRISM:
-      nbFaces = 8;
-      break;
-    default:
-      MESSAGE("invalid volume type")
-      ;
-      nbFaces = 0;
-      break;
-  }
-  return nbFaces;
-}
-
-int SMDS_VtkVolume::NbNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  vtkIdType nbPoints = 0;
-  if (aVtkType != VTK_POLYHEDRON)
-  {
-    vtkIdType *pts;
-    grid->GetCellPoints( myVtkID, nbPoints, pts );
-  }
-  else
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0;
-    for (int i = 0; i < nFaces; i++)
-    {
-      int nodesInFace = ptIds[id];
-      nbPoints += nodesInFace;
-      id += (nodesInFace + 1);
-    }
-  }
-  return nbPoints;
-}
-
-int SMDS_VtkVolume::NbEdges() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int nbEdges = 6;
-  switch (aVtkType)
-  {
-    case VTK_TETRA:
-    case VTK_QUADRATIC_TETRA:
-      nbEdges = 6;
-      break;
-    case VTK_PYRAMID:
-    case VTK_QUADRATIC_PYRAMID:
-      nbEdges = 8;
-      break;
-    case VTK_WEDGE:
-    case VTK_QUADRATIC_WEDGE:
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      nbEdges = 9;
-      break;
-    case VTK_HEXAHEDRON:
-    case VTK_QUADRATIC_HEXAHEDRON:
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      nbEdges = 12;
-      break;
-    case VTK_POLYHEDRON:
-      {
-        vtkIdType nFaces = 0;
-        vtkIdType* ptIds = 0;
-        grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-        nbEdges = 0;
-        int id = 0;
-        for (int i = 0; i < nFaces; i++)
-          {
-            int edgesInFace = ptIds[id];
-            id += (edgesInFace + 1);
-            nbEdges += edgesInFace;
-          }
-        nbEdges = nbEdges / 2;
-        break;
-      }
-    case VTK_HEXAGONAL_PRISM:
-      nbEdges = 18;
-      break;
-    default:
-      MESSAGE("invalid volume type")
-      ;
-      nbEdges = 0;
-      break;
-  }
-  return nbEdges;
-}
-
-/*! polyhedron only,
- *  1 <= face_ind <= NbFaces()
- */
-int SMDS_VtkVolume::NbFaceNodes(const int face_ind) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int nbNodes = 0;
-  if (aVtkType == VTK_POLYHEDRON)
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0;
-    for (int i = 0; i < nFaces; i++)
-    {
-      int nodesInFace = ptIds[id];
-      id += (nodesInFace + 1);
-      if (i == face_ind - 1)
-      {
-        nbNodes = nodesInFace;
-        break;
-      }
-    }
-  }
-  return nbNodes;
-}
-
-/*! polyhedron only,
- *  1 <= face_ind <= NbFaces()
- *  1 <= node_ind <= NbFaceNodes()
- */
-const SMDS_MeshNode* SMDS_VtkVolume::GetFaceNode(const int face_ind, const int node_ind) const
-{
-  SMDS_Mesh *mesh = SMDS_Mesh::_meshList[myMeshId];
-  vtkUnstructuredGrid* grid = mesh->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  const SMDS_MeshNode* node = 0;
-  if (aVtkType == VTK_POLYHEDRON)
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0;
-    for (int i = 0; i < nFaces; i++)
-    {
-      int nodesInFace = ptIds[id]; // nodeIds in ptIds[id+1 .. id+nodesInFace]
-      if (i == face_ind - 1) // first face is number 1
-      {
-        if ((node_ind > 0) && (node_ind <= nodesInFace))
-          node = mesh->FindNodeVtk(ptIds[id + node_ind]); // ptIds[id+1] : first node
-        break;
-      }
-      id += (nodesInFace + 1);
-    }
-  }
-  return node;
-}
-
-/*! polyhedron only,
- *  return number of nodes for each face
- */
-std::vector<int> SMDS_VtkVolume::GetQuantities() const
-{
-  std::vector<int> quantities;
-  SMDS_Mesh *mesh = SMDS_Mesh::_meshList[myMeshId];
-  vtkUnstructuredGrid* grid = mesh->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  if (aVtkType == VTK_POLYHEDRON)
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0;
-    for (int i = 0; i < nFaces; i++)
-    {
-      int nodesInFace = ptIds[id]; // nodeIds in ptIds[id+1 .. id+nodesInFace]
-      quantities.push_back(nodesInFace);
-      id += (nodesInFace + 1);
-    }
-  }
-  return quantities;
-}
-
-SMDS_ElemIteratorPtr SMDS_VtkVolume::elementsIterator(SMDSAbs_ElementType type) const
-{
-  switch (type)
-  {
-    case SMDSAbs_Node:
-      {
-        SMDSAbs_EntityType aType = this->GetEntityType();
-        if (aType == SMDSEntity_Polyhedra)
-          return SMDS_ElemIteratorPtr(new SMDS_VtkCellIteratorPolyH(SMDS_Mesh::_meshList[myMeshId], myVtkID, aType));
-        else
-          return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, aType));
-      }
-    default:
-      MESSAGE("ERROR : Iterator not implemented");
-      return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
-  }
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkVolume::nodesIteratorToUNV() const
-{
-  return SMDS_NodeIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-}
-
-SMDS_NodeIteratorPtr SMDS_VtkVolume::interlacedNodesIterator() const
-{
-  return SMDS_NodeIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-}
-
-SMDSAbs_ElementType SMDS_VtkVolume::GetType() const
-{
-  return SMDSAbs_Volume;
-}
-
-/*!
- * \brief Return node by its index
- * \param ind - node index
- * \retval const SMDS_MeshNode* - the node
- */
-const SMDS_MeshNode* SMDS_VtkVolume::GetNode(const int ind) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  if ( aVtkType == VTK_POLYHEDRON)
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0, nbPoints = 0;
-    for (int i = 0; i < nFaces; i++)
-    {
-      int nodesInFace = ptIds[id];
-      if ( ind < nbPoints + nodesInFace )
-        return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( ptIds[ ind + i ]);
-      nbPoints += nodesInFace;
-      id += (nodesInFace + 1);
-    }
-    return 0;
-  }
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( this->myVtkID, npts, pts );
-  const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( aVtkType ));
-  return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ind]] );
-}
-/*!
- * \brief Check if a node belongs to the element
- * \param node - the node to check
- * \retval int - node index within the element, -1 if not found
- */
-int SMDS_VtkVolume::GetNodeIndex( const SMDS_MeshNode* node ) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  const  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  if ( aVtkType == VTK_POLYHEDRON)
-  {
-    vtkIdType nFaces = 0;
-    vtkIdType* ptIds = 0;
-    grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
-    int id = 0;
-    for (int iF = 0; iF < nFaces; iF++)
-    {
-      int nodesInFace = ptIds[id];
-      for ( vtkIdType i = 0; i < nodesInFace; ++i )
-        if ( ptIds[id+i+1] == node->getVtkId() )
-          return id+i-iF;
-      id += (nodesInFace + 1);
-    }
-    return -1;
-  }
-  vtkIdType npts, *pts;
-  grid->GetCellPoints( this->myVtkID, npts, pts );
-  for ( vtkIdType i = 0; i < npts; ++i )
-    if ( pts[i] == node->getVtkId() )
-    {
-      const std::vector<int>& interlace = SMDS_MeshCell::toVtkOrder( VTKCellType( aVtkType ));
-      return interlace.empty() ? i : interlace[i];
-    }
-  return -1;
-}
-
-bool SMDS_VtkVolume::IsQuadratic() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  // TODO quadratic polyhedrons ?
-  switch (aVtkType)
-  {
-    case VTK_QUADRATIC_TETRA:
-    case VTK_QUADRATIC_PYRAMID:
-    case VTK_QUADRATIC_WEDGE:
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-    case VTK_QUADRATIC_HEXAHEDRON:
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      return true;
-      break;
-    default:
-      return false;
-  }
-}
-
-bool SMDS_VtkVolume::IsPoly() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  return (aVtkType == VTK_POLYHEDRON);
-}
-
-bool SMDS_VtkVolume::IsMediumNode(const SMDS_MeshNode* node) const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-  int rankFirstMedium = 0;
-  switch (aVtkType)
-  {
-    case VTK_QUADRATIC_TETRA:
-      rankFirstMedium = 4; // medium nodes are of rank 4 to 9
-      break;
-    case VTK_QUADRATIC_PYRAMID:
-      rankFirstMedium = 5; // medium nodes are of rank 5 to 12
-      break;
-    case VTK_QUADRATIC_WEDGE:
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      rankFirstMedium = 6; // medium nodes are of rank 6 to 14
-      break;
-    case VTK_QUADRATIC_HEXAHEDRON:
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      rankFirstMedium = 8; // medium nodes are of rank 8 to 19
-      break;
-    default:
-      return false;
-  }
-  vtkIdType npts = 0;
-  vtkIdType* pts = 0;
-  grid->GetCellPoints(myVtkID, npts, pts);
-  vtkIdType nodeId = node->getVtkId();
-  for (int rank = 0; rank < npts; rank++)
-  {
-    if (pts[rank] == nodeId)
-    {
-      if (rank < rankFirstMedium)
-        return false;
-      else
-        return true;
-    }
-  }
-  MESSAGE("======================================================");
-  MESSAGE("= IsMediumNode: node does not belong to this element =");
-  MESSAGE("======================================================");
-  return false;
-}
-
-int SMDS_VtkVolume::NbCornerNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(myVtkID);
-  switch (aVtkType)
-  {
-  case VTK_QUADRATIC_TETRA:             return 4;
-  case VTK_QUADRATIC_PYRAMID:           return 5;
-  case VTK_QUADRATIC_WEDGE:
-  case VTK_BIQUADRATIC_QUADRATIC_WEDGE: return 6;
-  case VTK_QUADRATIC_HEXAHEDRON:
-  case VTK_TRIQUADRATIC_HEXAHEDRON:     return 8;
-  default:;
-  }
-  return NbNodes();
-}
-
-SMDSAbs_EntityType SMDS_VtkVolume::GetEntityType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-
-  SMDSAbs_EntityType aType = SMDSEntity_Tetra;
-  switch (aVtkType)
-  {
-    case VTK_TETRA:
-      aType = SMDSEntity_Tetra;
-      break;
-    case VTK_PYRAMID:
-      aType = SMDSEntity_Pyramid;
-      break;
-    case VTK_WEDGE:
-      aType = SMDSEntity_Penta;
-      break;
-    case VTK_HEXAHEDRON:
-      aType = SMDSEntity_Hexa;
-      break;
-    case VTK_QUADRATIC_TETRA:
-      aType = SMDSEntity_Quad_Tetra;
-      break;
-    case VTK_QUADRATIC_PYRAMID:
-      aType = SMDSEntity_Quad_Pyramid;
-      break;
-    case VTK_QUADRATIC_WEDGE:
-      aType = SMDSEntity_Quad_Penta;
-      break;
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      aType = SMDSEntity_BiQuad_Penta;
-      break;
-    case VTK_QUADRATIC_HEXAHEDRON:
-      aType = SMDSEntity_Quad_Hexa;
-      break;
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      aType = SMDSEntity_TriQuad_Hexa;
-      break;
-    case VTK_HEXAGONAL_PRISM:
-      aType = SMDSEntity_Hexagonal_Prism;
-      break;
-    case VTK_POLYHEDRON:
-      aType = SMDSEntity_Polyhedra;
-      break;
-    default:
-      aType = SMDSEntity_Polyhedra;
-      break;
-  }
-  return aType;
-}
-
-SMDSAbs_GeometryType SMDS_VtkVolume::GetGeomType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
-
-  SMDSAbs_GeometryType aType = SMDSGeom_NONE;
-  switch (aVtkType)
-  {
-    case VTK_TETRA:
-    case VTK_QUADRATIC_TETRA:
-      aType = SMDSGeom_TETRA;
-      break;
-    case VTK_PYRAMID:
-    case VTK_QUADRATIC_PYRAMID:
-      aType = SMDSGeom_PYRAMID;
-      break;
-    case VTK_WEDGE:
-    case VTK_QUADRATIC_WEDGE:
-    case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
-      aType = SMDSGeom_PENTA;
-      break;
-    case VTK_HEXAHEDRON:
-    case VTK_QUADRATIC_HEXAHEDRON:
-    case VTK_TRIQUADRATIC_HEXAHEDRON:
-      aType = SMDSGeom_HEXA;
-      break;
-    case VTK_HEXAGONAL_PRISM:
-      aType = SMDSGeom_HEXAGONAL_PRISM;
-      break;
-    case VTK_POLYHEDRON:
-      aType = SMDSGeom_POLYHEDRA;
-      break;
-    default:
-      aType = SMDSGeom_POLYHEDRA;
-      break;
-  }
-  return aType;
-}
-
-vtkIdType SMDS_VtkVolume::GetVtkType() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  vtkIdType aType = grid->GetCellType(myVtkID);
-  return aType;
-}
-
-void SMDS_VtkVolume::gravityCenter(SMDS_UnstructuredGrid* grid,
-                                   const vtkIdType *      nodeIds,
-                                   int                    nbNodes,
-                                   double*                result)
-{
-  for (int j = 0; j < 3; j++)
-    result[j] = 0;
-  if (nbNodes <= 0)
-    return;
-  for (int i = 0; i < nbNodes; i++)
-    {
-      double *coords = grid->GetPoint(nodeIds[i]);
-      for (int j = 0; j < 3; j++)
-        result[j] += coords[j];
-    }
-  for (int j = 0; j < 3; j++)
-    result[j] = result[j] / nbNodes;
-  return;
-}
-
-bool SMDS_VtkVolume::isForward(double* a, double* b, double* c, double* d)
-{
-  double u[3], v[3], w[3];
-  for (int j = 0; j < 3; j++)
-  {
-    u[j] = b[j] - a[j];
-    v[j] = c[j] - a[j];
-    w[j] = d[j] - a[j];
-  }
-  double prodmixte = ((u[1]*v[2] - u[2]*v[1]) * w[0]
-                      + (u[2]*v[0] - u[0]*v[2]) * w[1]
-                      + (u[0]*v[1] - u[1]*v[0]) * w[2] );
-  return (prodmixte < 0);
-}
-
-/*! For polyhedron only
- *  @return actual number of nodes (not the sum of nodes of all faces)
- */
-int SMDS_VtkVolume::NbUniqueNodes() const
-{
-  vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
-  return grid->GetCell(myVtkID)->GetNumberOfPoints();
-}
-
-/*! For polyhedron use only
- *  @return iterator on actual nodes (not through the faces)
- */
-SMDS_ElemIteratorPtr SMDS_VtkVolume::uniqueNodesIterator() const
-{
-  return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
-}
diff --git a/src/SMDS/SMDS_VtkVolume.hxx b/src/SMDS/SMDS_VtkVolume.hxx
deleted file mode 100644 (file)
index 02f86ce..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef _SMDS_VTKVOLUME_HXX_
-#define _SMDS_VTKVOLUME_HXX_
-
-#include "SMESH_SMDS.hxx"
-
-#include "SMDS_MeshVolume.hxx"
-#include "SMDS_UnstructuredGrid.hxx"
-#include <vector>
-
-class SMDS_EXPORT SMDS_VtkVolume: public SMDS_MeshVolume
-{
-public:
-  SMDS_VtkVolume();
-  SMDS_VtkVolume(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-  ~SMDS_VtkVolume();
-  void init(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh* mesh);
-//#ifdef VTK_HAVE_POLYHEDRON
-  void initPoly(const std::vector<vtkIdType>& nodeIds,
-                const std::vector<int>& nbNodesPerFace, SMDS_Mesh* mesh);
-//#endif
-  virtual bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
-  virtual bool vtkOrder(const SMDS_MeshNode* nodes[], const int nbNodes);
-
-  virtual void Print(std::ostream & OS) const;
-  virtual int NbFaces() const;
-  virtual int NbNodes() const;
-  virtual int NbEdges() const;
-
-  // 1 <= face_ind <= NbFaces()
-  int NbFaceNodes (const int face_ind) const;
-  // 1 <= face_ind <= NbFaces()
-  // 1 <= node_ind <= NbFaceNodes()
-  const SMDS_MeshNode* GetFaceNode (const int face_ind, const int node_ind) const;
-
-  virtual SMDSAbs_ElementType  GetType() const;
-  virtual vtkIdType            GetVtkType() const;
-  virtual SMDSAbs_EntityType   GetEntityType() const;
-  virtual SMDSAbs_GeometryType GetGeomType() const;
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
-  virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
-  virtual bool IsQuadratic() const;
-  virtual bool IsPoly() const;
-  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
-  virtual int  NbCornerNodes() const;
-  static void gravityCenter(SMDS_UnstructuredGrid* grid,
-                            const vtkIdType *nodeIds,
-                            int nbNodes,
-                            double* result);
-  static bool isForward(double* a,double* b,double* c,double* d);
-  int NbUniqueNodes() const;
-  SMDS_ElemIteratorPtr uniqueNodesIterator() const;
-  std::vector<int> GetQuantities() const;
-
-  virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
-  virtual SMDS_NodeIteratorPtr nodesIteratorToUNV() const;
-  virtual SMDS_NodeIteratorPtr interlacedNodesIterator() const;
-
-protected:
-};
-
-#endif
index e96f78f1ba598b8c2d62f05e4432deff4240a5bf..3e41c626a54e45ada33fe715206ec5b9fcb31061 100644 (file)
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${HDF5_INCLUDE_DIRS}
+  ${TBB_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -42,7 +43,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -53,10 +54,9 @@ ENDIF(SALOME_SMESH_USE_CGNS)
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_TKShHealing}
-  ${CAS_TKPrim}
-  ${CAS_TKG2d}
-  ${CAS_TKCDF}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
+  ${OpenCASCADE_ApplicationFramework_LIBRARIES}
   ${GEOM_NMTTools}
   ${GEOM_GEOMUtils}
   ${Boost_LIBRARIES}
index febb8e0406d718825c8cdb1b2620bcc9c54c0c17..62f77de4a75ac8c4172f2db900c6ff92722346d4 100644 (file)
@@ -358,12 +358,9 @@ bool SMESH_Algo::GetNodeParamOnEdge(const SMESHDS_Mesh* theMesh,
     SMDS_NodeIteratorPtr nIt = eSubMesh->GetNodes();
     while ( nIt->more() )
     {
-      const SMDS_MeshNode* node = nIt->next();
-      const SMDS_PositionPtr& pos = node->GetPosition();
-      if ( pos->GetTypeOfPosition() != SMDS_TOP_EDGE )
+      SMDS_EdgePositionPtr epos = nIt->next()->GetPosition();
+      if ( !epos )
         return false;
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition());
       if ( !paramSet.insert( epos->GetUParameter() ).second )
         return false; // equal parameters
     }
@@ -424,11 +421,9 @@ bool SMESH_Algo::GetSortedNodesOnEdge(const SMESHDS_Mesh*                   theM
       const SMDS_MeshNode* node = nIt->next();
       if ( ignoreMediumNodes && SMESH_MesherHelper::IsMedium( node, typeToCheck ))
         continue;
-      const SMDS_PositionPtr& pos = node->GetPosition();
-      if ( pos->GetTypeOfPosition() != SMDS_TOP_EDGE )
+      SMDS_EdgePositionPtr epos = node->GetPosition();
+      if ( ! epos )
         return false;
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition());
       theNodes.insert( theNodes.end(), make_pair( epos->GetUParameter(), node ));
       ++nbNodes;
     }
@@ -914,7 +909,12 @@ bool SMESH_Algo::error(SMESH_ComputeErrorPtr error)
   if ( error ) {
     _error   = error->myName;
     _comment = error->myComment;
-    _badInputElements = error->myBadElements;
+    if ( error->HasBadElems() )
+    {
+      SMESH_BadInputElements* badElems = static_cast<SMESH_BadInputElements*>( error.get() );
+      _badInputElements = badElems->GetElements();
+      _mesh             = badElems->GetMesh();
+    }
     return error->IsOK();
   }
   return true;
@@ -928,11 +928,15 @@ bool SMESH_Algo::error(SMESH_ComputeErrorPtr error)
 
 SMESH_ComputeErrorPtr SMESH_Algo::GetComputeError() const
 {
-  SMESH_ComputeErrorPtr err = SMESH_ComputeError::New( _error, _comment, this );
-  // hope this method is called by only SMESH_subMesh after this->Compute()
-  err->myBadElements.splice( err->myBadElements.end(),
-                             (list<const SMDS_MeshElement*>&) _badInputElements );
-  return err;
+  if ( !_badInputElements.empty() && _mesh )
+  {
+    SMESH_BadInputElements* err = new SMESH_BadInputElements( _mesh, _error, _comment, this );
+    // hope this method is called by only SMESH_subMesh after this->Compute()
+    err->myBadElements.splice( err->myBadElements.end(),
+                               (list<const SMDS_MeshElement*>&) _badInputElements );
+    return SMESH_ComputeErrorPtr( err );
+  }
+  return SMESH_ComputeError::New( _error, _comment, this );
 }
 
 //================================================================================
@@ -950,6 +954,7 @@ void SMESH_Algo::InitComputeError()
     if ( (*elem)->GetID() < 1 )
       delete *elem;
   _badInputElements.clear();
+  _mesh = 0;
 
   _computeCanceled = false;
   _progressTic     = 0;
@@ -1243,7 +1248,7 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
       gp_Pnt p = S->Value( uv.Coord(1), uv.Coord(2));
       const SMDS_MeshNode* n = nodeRows[iRow][iCol];
       meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
-      if ( SMDS_FacePosition* pos = dynamic_cast< SMDS_FacePosition*>( n->GetPosition() ))
+      if ( SMDS_FacePositionPtr pos = n->GetPosition() )
         pos->SetParameters( uv.Coord(1), uv.Coord(2) );
     }
   }
index 03154a989fcee01691d6d04984c20881bcefef37..c0075a88e310f18c9ddaeb4fddbf3d66ed21e60e 100644 (file)
@@ -461,6 +461,7 @@ protected:
   int         _error;    //!< SMESH_ComputeErrorName or anything algo specific
   std::string _comment;  //!< any text explaining what is wrong in Compute()
   std::list<const SMDS_MeshElement*> _badInputElements; //!< to explain COMPERR_BAD_INPUT_MESH
+  const SMDS_Mesh* _mesh; //!< mesh being computed, needed to create SMESH_BadInputElements
 
   volatile bool _computeCanceled; //!< is set to True while computing to stop it
 
index 36e454366a4165396b8da07ba93724a5e0eb7ee6..71365d197c7130c754c794dd116d5c9f1f616570 100644 (file)
@@ -54,9 +54,6 @@
 
 using namespace std;
 
-//#include <vtkDebugLeaks.h>
-
-
 //=============================================================================
 /*!
  *  Constructor
@@ -70,9 +67,7 @@ SMESH_Gen::SMESH_Gen()
   _localId = 0;
   _hypId   = 0;
   _segmentation = _nbSegments = 10;
-  SMDS_Mesh::_meshList.clear();
   _compute_canceled = false;
-  //vtkDebugLeaks::SetExitError(0);
 }
 
 namespace
@@ -400,8 +395,10 @@ bool SMESH_Gen::Compute(SMESH_Mesh &          aMesh,
   }
 
   if ( aCompactMesh )
-    aMesh.GetMeshDS()->compactMesh();
-
+  {
+    aMesh.GetMeshDS()->Modified();
+    aMesh.GetMeshDS()->CompactMesh();
+  }
   return ret;
 }
 
@@ -668,7 +665,7 @@ static bool checkConformIgnoredAlgos(SMESH_Mesh&               aMesh,
           checkConform = false; // no more check conformity
           INFOS( "ERROR: Local <" << algo->GetName() <<
                 "> would produce not conform mesh: "
-                "<Not Conform Mesh Allowed> hypotesis is missing");
+                "<Not Conform Mesh Allowed> hypothesis is missing");
           theErrors.push_back( SMESH_Gen::TAlgoStateError() );
           theErrors.back().Set( SMESH_Hypothesis::HYP_NOTCONFORM, algo, false );
         }
index 40bb38a0382a573f3b9a8dfdc4f31fc7f824f581..8a81dca6297056edb38930d12dbcd7d84a2607d2 100644 (file)
@@ -77,7 +77,7 @@ int SMESH_HypoFilter::DimPredicate::Value( const SMESH_Hypothesis* aHyp ) const
 bool SMESH_HypoFilter::ApplicablePredicate::IsOk(const SMESH_Hypothesis* aHyp,
                                                  const TopoDS_Shape&     /*aShape*/) const
 {
-  return SMESH_subMesh::IsApplicableHypotesis( aHyp, (TopAbs_ShapeEnum)_shapeType );
+  return SMESH_subMesh::IsApplicableHypothesis( aHyp, (TopAbs_ShapeEnum)_shapeType );
 };
 
 //=======================================================================
index 9aef12133684fe6e27e10459cb5b33711c8a10c8..9bf01b9c66527ad4b2fbca483f8f042a650d15d1 100644 (file)
@@ -51,7 +51,7 @@ public:
   {
     HYP_OK = 0,
     HYP_MISSING,      // algo misses a hypothesis
-    HYP_CONCURENT,    // several applicable hypotheses assigned to father shapes
+    HYP_CONCURRENT,   // several applicable hypotheses assigned to father shapes
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
     HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
     HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
index 9c9491da224806d2dfe5d3e9edd3d4e63f47098f..b9b510451fd360af423f2185336421aa3c2ba9bb 100644 (file)
@@ -447,7 +447,7 @@ void SMESH_Mesh::Clear()
 
 void SMESH_Mesh::ClearSubMesh(const int theShapeId)
 {
-  // clear sub-meshes; get ready to re-compute as a side-effect 
+  // clear sub-meshes; get ready to re-compute as a side-effect
   if ( SMESH_subMesh *sm = GetSubMeshContaining( theShapeId ) )
   {
     SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true,
@@ -455,7 +455,7 @@ void SMESH_Mesh::ClearSubMesh(const int theShapeId)
     while ( smIt->more() )
     {
       sm = smIt->next();
-      TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();      
+      TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();
       if ( shapeType == TopAbs_VERTEX || shapeType < TopAbs_SOLID )
         // all other shapes depends on vertices so they are already cleaned
         sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
@@ -467,7 +467,7 @@ void SMESH_Mesh::ClearSubMesh(const int theShapeId)
 
 //=======================================================================
 //function : UNVToMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 int SMESH_Mesh::UNVToMesh(const char* theFileName)
@@ -482,32 +482,19 @@ int SMESH_Mesh::UNVToMesh(const char* theFileName)
   myReader.SetMeshId(-1);
   myReader.Perform();
 
-  if ( SMDS_MeshGroup* aGroup = (SMDS_MeshGroup*) myReader.GetGroup() )
+  TGroupNamesMap& aGroupNames = myReader.GetGroupNamesMap();
+  TGroupNamesMap::iterator gr2names;
+  int anId = 1 + ( _mapGroup.empty() ? 0 : _mapGroup.rbegin()->first );
+  for ( gr2names = aGroupNames.begin(); gr2names != aGroupNames.end(); ++gr2names )
   {
-    TGroupNamesMap aGroupNames = myReader.GetGroupNamesMap();
-    aGroup->InitSubGroupsIterator();
-    while (aGroup->MoreSubGroups())
-    {
-      SMDS_MeshGroup* aSubGroup = (SMDS_MeshGroup*) aGroup->NextSubGroup();
-      string aName = aGroupNames[aSubGroup];
-      int aId;
-      if ( SMESH_Group* aSMESHGroup = AddGroup( aSubGroup->GetType(), aName.c_str(), aId ))
-      {
-        SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( aSMESHGroup->GetGroupDS() );
-        if ( aGroupDS ) {
-          aGroupDS->SetStoreName(aName.c_str());
-          aSubGroup->InitIterator();
-          const SMDS_MeshElement* aElement = 0;
-          while ( aSubGroup->More() )
-            if (( aElement = aSubGroup->Next() ))
-              aGroupDS->SMDSGroup().Add( aElement );
-
-          if (aElement)
-            aGroupDS->SetType( aElement->GetType() );
-        }
-      }
-    }
+    SMDS_MeshGroup*   aGroup = gr2names->first;
+    const std::string& aName = gr2names->second;
+    SMESHDS_Group* aGroupDS = new SMESHDS_Group( anId++, _myMeshDS, aGroup->GetType() );
+    aGroupDS->SMDSGroup() = std::move( *aGroup );
+    aGroupDS->SetStoreName( aName.c_str() );
+    AddGroup( aGroupDS );
   }
+
   return 1;
 }
 
@@ -548,12 +535,16 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName)
       }
     }
   }
+
+  _myMeshDS->Modified();
+  _myMeshDS->CompactMesh();
+
   return (int) status;
 }
 
 //=======================================================================
 //function : STLToMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 std::string SMESH_Mesh::STLToMesh(const char* theFileName)
@@ -658,7 +649,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
     string hypName = anHyp->GetName();
     if ( hypName == "NotConformAllowed" )
     {
-      if(MYDEBUG) MESSAGE( "Hypotesis <NotConformAllowed> can be only global" );
+      if(MYDEBUG) MESSAGE( "Hypothesis <NotConformAllowed> can be only global" );
       return SMESH_Hypothesis::HYP_INCOMPATIBLE;
     }
   }
@@ -695,13 +686,13 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
     }
 
     // check concurrent hypotheses on ancestors
-    if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp )
+    if (ret < SMESH_Hypothesis::HYP_CONCURRENT && !isGlobalHyp )
     {
       SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
       while ( smIt->more() ) {
         SMESH_subMesh* sm = smIt->next();
-        if ( sm->IsApplicableHypotesis( anHyp )) {
-          ret2 = sm->CheckConcurentHypothesis( anHyp->GetType() );
+        if ( sm->IsApplicableHypothesis( anHyp )) {
+          ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() );
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -748,10 +739,10 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
   SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
 
   // there may appear concurrent hyps that were covered by the removed hyp
-  if (ret < SMESH_Hypothesis::HYP_CONCURENT &&
-      subMesh->IsApplicableHypotesis( anHyp ) &&
-      subMesh->CheckConcurentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK)
-    ret = SMESH_Hypothesis::HYP_CONCURENT;
+  if (ret < SMESH_Hypothesis::HYP_CONCURRENT &&
+      subMesh->IsApplicableHypothesis( anHyp ) &&
+      subMesh->CheckConcurrentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK)
+    ret = SMESH_Hypothesis::HYP_CONCURRENT;
 
   // sub-shapes
   if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
@@ -765,13 +756,13 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
       ret = ret2;
 
     // check concurrent hypotheses on ancestors
-    if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) )
+    if (ret < SMESH_Hypothesis::HYP_CONCURRENT && !IsMainShape( aSubShape ) )
     {
       SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
       while ( smIt->more() ) {
         SMESH_subMesh* sm = smIt->next();
-        if ( sm->IsApplicableHypotesis( anHyp )) {
-          ret2 = sm->CheckConcurentHypothesis( anHyp->GetType() );
+        if ( sm->IsApplicableHypothesis( anHyp )) {
+          ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() );
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -1166,7 +1157,7 @@ bool SMESH_Mesh::IsUsedHypothesis(SMESHDS_Hypothesis * anHyp,
   SMESH_Hypothesis* hyp = static_cast<SMESH_Hypothesis*>(anHyp);
 
   // check if anHyp can be used to mesh aSubMesh
-  if ( !aSubMesh || !aSubMesh->IsApplicableHypotesis( hyp ))
+  if ( !aSubMesh || !aSubMesh->IsApplicableHypothesis( hyp ))
     return false;
 
   SMESH_Algo *algo = aSubMesh->GetAlgo();
@@ -1229,7 +1220,7 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h
     {
       const TopoDS_Shape & aSubShape = aSubMesh->GetSubShape();
 
-      if (( aSubMesh->IsApplicableHypotesis( hyp )) &&
+      if (( aSubMesh->IsApplicableHypothesis( hyp )) &&
           ( algo = aSubMesh->GetAlgo() )            &&
           ( compatibleHypoKind = algo->GetCompatibleHypoFilter( !hyp->IsAuxiliary() )) &&
           ( compatibleHypoKind->IsOk( hyp, aSubShape )))
index 7b0d86fdba9c23c097570b391eeef16067897d8d..d06ce73062e66f972b1c4fb3220c5b04e0fb1362 100644 (file)
 using namespace std;
 using namespace SMESH::Controls;
 
-namespace
-{
-  template < class ELEM_SET >
-  SMDS_ElemIteratorPtr elemSetIterator( const ELEM_SET& elements )
-  {
-    typedef SMDS_SetIterator
-      < SMDS_pElement, typename ELEM_SET::const_iterator> TSetIterator;
-    return SMDS_ElemIteratorPtr( new TSetIterator( elements.begin(), elements.end() ));
-  }
-}
-
 //=======================================================================
 //function : SMESH_MeshEditor
 //purpose  :
@@ -147,8 +136,8 @@ SMESHDS_Mesh * SMESH_MeshEditor::GetMeshDS()
 
 void SMESH_MeshEditor::ClearLastCreated()
 {
-  myLastCreatedNodes.Clear();
-  myLastCreatedElems.Clear();
+  SMESHUtils::FreeVector( myLastCreatedElems );
+  SMESHUtils::FreeVector( myLastCreatedNodes );
 }
 
 //================================================================================
@@ -173,7 +162,7 @@ SMESH_MeshEditor::ElemFeatures::Init( const SMDS_MeshElement* elem, bool basicOn
         myIsQuad = elem->IsQuadratic();
         if ( myType == SMDSAbs_Volume && !basicOnly )
         {
-          vector<int > quant = static_cast<const SMDS_VtkVolume* >( elem )->GetQuantities();
+          vector<int> quant = static_cast<const SMDS_MeshVolume* >( elem )->GetQuantities();
           myPolyhedQuantities.swap( quant );
         }
       }
@@ -380,7 +369,7 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
 
   default:;
   }
-  if ( e ) myLastCreatedElems.Append( e );
+  if ( e ) myLastCreatedElems.push_back( e );
   return e;
 }
 
@@ -414,8 +403,7 @@ SMDS_MeshElement* SMESH_MeshEditor::AddElement(const vector<int> & nodeIDs,
 int SMESH_MeshEditor::Remove (const list< int >& theIDs,
                               const bool         isNodes )
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
   set< SMESH_subMesh *> smmap;
@@ -495,7 +483,7 @@ void SMESH_MeshEditor::Create0DElementsOnAllNodes( const TIDSortedElemSet& eleme
   }
   else
   {
-    elemIt = elemSetIterator( elements );
+    elemIt = SMESHUtils::elemSetIterator( elements );
   }
 
   while ( elemIt->more() )
@@ -508,8 +496,8 @@ void SMESH_MeshEditor::Create0DElementsOnAllNodes( const TIDSortedElemSet& eleme
       SMDS_ElemIteratorPtr it0D = n->GetInverseElementIterator( SMDSAbs_0DElement );
       if ( duplicateElements || !it0D->more() )
       {
-        myLastCreatedElems.Append( GetMeshDS()->Add0DElement( n ));
-        all0DElems.insert( myLastCreatedElems.Last() );
+        myLastCreatedElems.push_back( GetMeshDS()->Add0DElement( n ));
+        all0DElems.insert( myLastCreatedElems.back() );
       }
       while ( it0D->more() )
         all0DElems.insert( it0D->next() );
@@ -525,8 +513,7 @@ void SMESH_MeshEditor::Create0DElementsOnAllNodes( const TIDSortedElemSet& eleme
 
 int SMESH_MeshEditor::FindShape (const SMDS_MeshElement * theElem)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   SMESHDS_Mesh * aMesh = GetMeshDS();
   if ( aMesh->ShapeToMesh().IsNull() )
@@ -693,19 +680,18 @@ static bool getNodesFromTwoTria(const SMDS_MeshElement * theTria1,
 bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
                                     const SMDS_MeshElement * theTria2 )
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
-  if (!theTria1 || !theTria2)
+  if ( !theTria1 || !theTria2 ||
+       !dynamic_cast<const SMDS_MeshCell*>( theTria1 ) ||
+       !dynamic_cast<const SMDS_MeshCell*>( theTria2 ) ||
+       theTria1->GetType() != SMDSAbs_Face ||
+       theTria2->GetType() != SMDSAbs_Face )
     return false;
 
-  const SMDS_VtkFace* F1 = dynamic_cast<const SMDS_VtkFace*>( theTria1 );
-  if (!F1) return false;
-  const SMDS_VtkFace* F2 = dynamic_cast<const SMDS_VtkFace*>( theTria2 );
-  if (!F2) return false;
   if ((theTria1->GetEntityType() == SMDSEntity_Triangle) &&
-      (theTria2->GetEntityType() == SMDSEntity_Triangle)) {
-
+      (theTria2->GetEntityType() == SMDSEntity_Triangle))
+  {
     //  1 +--+ A  theTria1: ( 1 A B ) A->2 ( 1 2 B ) 1 +--+ A
     //    | /|    theTria2: ( B A 2 ) B->1 ( 1 A 2 )   |\ |
     //    |/ |                                         | \|
@@ -819,9 +805,9 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
     gp_Pnt xyz;
     if ( F.IsNull() )
     {
-      xyz = ( SMESH_TNodeXYZ( nodes[3] ) +
-              SMESH_TNodeXYZ( nodes[4] ) +
-              SMESH_TNodeXYZ( nodes[5] )) / 3.;
+      xyz = ( SMESH_NodeXYZ( nodes[3] ) +
+              SMESH_NodeXYZ( nodes[4] ) +
+              SMESH_NodeXYZ( nodes[5] )) / 3.;
     }
     else
     {
@@ -894,17 +880,16 @@ static bool findTriangles(const SMDS_MeshNode *    theNode1,
 bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshNode * theNode1,
                                     const SMDS_MeshNode * theNode2)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   const SMDS_MeshElement *tr1, *tr2;
   if ( !findTriangles( theNode1, theNode2, tr1, tr2 ))
     return false;
 
-  const SMDS_VtkFace* F1 = dynamic_cast<const SMDS_VtkFace*>( tr1 );
-  if (!F1) return false;
-  const SMDS_VtkFace* F2 = dynamic_cast<const SMDS_VtkFace*>( tr2 );
-  if (!F2) return false;
+  if ( !dynamic_cast<const SMDS_MeshCell*>( tr1 ) ||
+       !dynamic_cast<const SMDS_MeshCell*>( tr2 ))
+    return false;
+
   if ((tr1->GetEntityType() == SMDSEntity_Triangle) &&
       (tr2->GetEntityType() == SMDSEntity_Triangle)) {
 
@@ -1015,35 +1000,33 @@ bool getQuadrangleNodes(const SMDS_MeshNode *    theQuadNodes [],
 bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1,
                                    const SMDS_MeshNode * theNode2)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   const SMDS_MeshElement *tr1, *tr2;
   if ( !findTriangles( theNode1, theNode2, tr1, tr2 ))
     return false;
 
-  const SMDS_VtkFace* F1 = dynamic_cast<const SMDS_VtkFace*>( tr1 );
-  if (!F1) return false;
-  const SMDS_VtkFace* F2 = dynamic_cast<const SMDS_VtkFace*>( tr2 );
-  if (!F2) return false;
+  if ( !dynamic_cast<const SMDS_MeshCell*>( tr1 ) ||
+       !dynamic_cast<const SMDS_MeshCell*>( tr2 ))
+    return false;
+
   SMESHDS_Mesh * aMesh = GetMeshDS();
 
   if ((tr1->GetEntityType() == SMDSEntity_Triangle) &&
-      (tr2->GetEntityType() == SMDSEntity_Triangle)) {
-
+      (tr2->GetEntityType() == SMDSEntity_Triangle))
+  {
     const SMDS_MeshNode* aNodes [ 4 ];
     if ( ! getQuadrangleNodes( aNodes, theNode1, theNode2, tr1, tr2 ))
       return false;
 
     const SMDS_MeshElement* newElem = 0;
     newElem = aMesh->AddFace( aNodes[0], aNodes[1], aNodes[2], aNodes[3] );
-    myLastCreatedElems.Append(newElem);
+    myLastCreatedElems.push_back(newElem);
     AddToSameGroups( newElem, tr1, aMesh );
     int aShapeId = tr1->getshapeId();
     if ( aShapeId )
-      {
-        aMesh->SetMeshElementOnShape( newElem, aShapeId );
-      }
+      aMesh->SetMeshElementOnShape( newElem, aShapeId );
+
     aMesh->RemoveElement( tr1 );
     aMesh->RemoveElement( tr2 );
 
@@ -1087,13 +1070,13 @@ bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1,
   const SMDS_MeshElement* newElem = 0;
   newElem = aMesh->AddFace( aNodes[0], aNodes[1], aNodes[2], aNodes[3],
                             aNodes[4], aNodes[5], aNodes[6], aNodes[7]);
-  myLastCreatedElems.Append(newElem);
+  myLastCreatedElems.push_back(newElem);
   AddToSameGroups( newElem, tr1, aMesh );
   int aShapeId = tr1->getshapeId();
   if ( aShapeId )
-    {
-      aMesh->SetMeshElementOnShape( newElem, aShapeId );
-    }
+  {
+    aMesh->SetMeshElementOnShape( newElem, aShapeId );
+  }
   aMesh->RemoveElement( tr1 );
   aMesh->RemoveElement( tr2 );
 
@@ -1110,8 +1093,7 @@ bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1,
 
 bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theElem)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if (!theElem)
     return false;
@@ -1126,8 +1108,7 @@ bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theElem)
   const SMDSAbs_EntityType geomType = theElem->GetEntityType();
   if ( geomType == SMDSEntity_Polyhedra ) // polyhedron
   {
-    const SMDS_VtkVolume* aPolyedre =
-      dynamic_cast<const SMDS_VtkVolume*>( theElem );
+    const SMDS_MeshVolume* aPolyedre = SMDS_Mesh::DownCast< SMDS_MeshVolume >( theElem );
     if (!aPolyedre) {
       MESSAGE("Warning: bad volumic element");
       return false;
@@ -1185,7 +1166,7 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
 
   if ( theFaces.empty() )
   {
-    SMDS_FaceIteratorPtr fIt = GetMeshDS()->facesIterator(/*idInceasingOrder=*/true);
+    SMDS_FaceIteratorPtr fIt = GetMeshDS()->facesIterator(/*idInceasingOrder=true*/);
     while ( fIt->more() )
       theFaces.insert( theFaces.end(), fIt->next() );
   }
@@ -1316,7 +1297,7 @@ int SMESH_MeshEditor::Reorient2DBy3D (TIDSortedElemSet & theFaces,
   if ( theFaces.empty() )
     faceIt = GetMeshDS()->elementsIterator( SMDSAbs_Face );
   else
-    faceIt = elemSetIterator( theFaces );
+    faceIt = SMESHUtils::elemSetIterator( theFaces );
 
   vector< const SMDS_MeshNode* > faceNodes;
   TIDSortedElemSet checkedVolumes;
@@ -1405,17 +1386,17 @@ static double getBadRate (const SMDS_MeshElement*               theElem,
 bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet &                   theElems,
                                   SMESH::Controls::NumericalFunctorPtr theCrit)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if ( !theCrit.get() )
     return false;
 
-  SMESHDS_Mesh * aMesh = GetMeshDS();
-
+  SMESHDS_Mesh *       aMesh = GetMeshDS();
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
+  myLastCreatedElems.reserve( theElems.size() * 2 );
+
   TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ )
   {
@@ -1484,8 +1465,8 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet &                   theElems,
 
     // care of a new element
 
-    myLastCreatedElems.Append(newElem1);
-    myLastCreatedElems.Append(newElem2);
+    myLastCreatedElems.push_back(newElem1);
+    myLastCreatedElems.push_back(newElem2);
     AddToSameGroups( newElem1, elem, aMesh );
     AddToSameGroups( newElem2, elem, aMesh );
 
@@ -1508,15 +1489,15 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet &                   theElems,
 
 void SMESH_MeshEditor::QuadTo4Tri (TIDSortedElemSet & theElems)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
+  myLastCreatedElems.reserve( theElems.size() * 4 );
 
   SMESH_MesherHelper helper( *GetMesh() );
   helper.SetElementsOnShape( true );
 
   SMDS_ElemIteratorPtr faceIt;
   if ( theElems.empty() ) faceIt = GetMeshDS()->elementsIterator(SMDSAbs_Face);
-  else                    faceIt = elemSetIterator( theElems );
+  else                    faceIt = SMESHUtils::elemSetIterator( theElems );
 
   bool   checkUV;
   gp_XY  uv [9]; uv[8] = gp_XY(0,0);
@@ -1573,7 +1554,7 @@ void SMESH_MeshEditor::QuadTo4Tri (TIDSortedElemSet & theElems)
       if ( F.IsNull() )
       {
         for ( ; iN < nodes.size(); ++iN )
-          xyz[ iN ] = SMESH_TNodeXYZ( nodes[ iN ] );
+          xyz[ iN ] = SMESH_NodeXYZ( nodes[ iN ] );
 
         for ( ; iN < 8; ++iN ) // mid-side points of a linear qudrangle
           xyz[ iN ] = 0.5 * ( xyz[ iN - 4 ] + xyz[( iN - 3 )%4 ] );
@@ -1600,7 +1581,7 @@ void SMESH_MeshEditor::QuadTo4Tri (TIDSortedElemSet & theElems)
 
       nCentral = helper.AddNode( xyz[8].X(), xyz[8].Y(), xyz[8].Z(), /*id=*/0,
                                  uv[8].X(), uv[8].Y() );
-      myLastCreatedNodes.Append( nCentral );
+      myLastCreatedNodes.push_back( nCentral );
     }
 
     // create 4 triangles
@@ -1618,7 +1599,7 @@ void SMESH_MeshEditor::QuadTo4Tri (TIDSortedElemSet & theElems)
                                                nodes[(i+1)%4],
                                                nCentral );
       ReplaceElemInGroups( tria, quad, GetMeshDS() );
-      myLastCreatedElems.Append( tria );
+      myLastCreatedElems.push_back( tria );
     }
   }
 }
@@ -1631,8 +1612,7 @@ void SMESH_MeshEditor::QuadTo4Tri (TIDSortedElemSet & theElems)
 int SMESH_MeshEditor::BestSplit (const SMDS_MeshElement*              theQuad,
                                  SMESH::Controls::NumericalFunctorPtr theCrit)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if (!theCrit.get())
     return -1;
@@ -2299,7 +2279,7 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
       volTool.GetBaryCenter( bc[0], bc[1], bc[2] );
       SMDS_MeshNode* gcNode = helper.AddNode( bc[0], bc[1], bc[2] );
       nodes.push_back( gcNode );
-      newNodes.Append( gcNode );
+      newNodes.push_back( gcNode );
     }
     if ( !splitMethod._faceBaryNode.empty() )
     {
@@ -2313,7 +2293,7 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
         if ( !f_n->second )
         {
           volTool.GetFaceBaryCenter( iF_n->first, bc[0], bc[1], bc[2] );
-          newNodes.Append( f_n->second = helper.AddNode( bc[0], bc[1], bc[2] ));
+          newNodes.push_back( f_n->second = helper.AddNode( bc[0], bc[1], bc[2] ));
         }
         nodes.push_back( iF_n->second = f_n->second );
       }
@@ -2324,18 +2304,18 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
     const int* volConn = splitMethod._connectivity;
     if ( splitMethod._nbCorners == 4 ) // tetra
       for ( int i = 0; i < splitMethod._nbSplits; ++i, volConn += splitMethod._nbCorners )
-        newElems.Append( splitVols[ i ] = helper.AddVolume( nodes[ volConn[0] ],
-                                                            nodes[ volConn[1] ],
-                                                            nodes[ volConn[2] ],
-                                                            nodes[ volConn[3] ]));
+        newElems.push_back( splitVols[ i ] = helper.AddVolume( nodes[ volConn[0] ],
+                                                               nodes[ volConn[1] ],
+                                                               nodes[ volConn[2] ],
+                                                               nodes[ volConn[3] ]));
     else // prisms
       for ( int i = 0; i < splitMethod._nbSplits; ++i, volConn += splitMethod._nbCorners )
-        newElems.Append( splitVols[ i ] = helper.AddVolume( nodes[ volConn[0] ],
-                                                            nodes[ volConn[1] ],
-                                                            nodes[ volConn[2] ],
-                                                            nodes[ volConn[3] ],
-                                                            nodes[ volConn[4] ],
-                                                            nodes[ volConn[5] ]));
+        newElems.push_back( splitVols[ i ] = helper.AddVolume( nodes[ volConn[0] ],
+                                                               nodes[ volConn[1] ],
+                                                               nodes[ volConn[2] ],
+                                                               nodes[ volConn[3] ],
+                                                               nodes[ volConn[4] ],
+                                                               nodes[ volConn[5] ]));
 
     ReplaceElemInGroups( elem, splitVols, GetMeshDS() );
 
@@ -2379,7 +2359,7 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
           if ( fSubMesh ) // update position of the bary node on geometry
           {
             if ( subMesh )
-              subMesh->RemoveNode( baryNode, false );
+              subMesh->RemoveNode( baryNode );
             GetMeshDS()->SetNodeOnFace( baryNode, fSubMesh->GetID() );
             const TopoDS_Shape& s = GetMeshDS()->IndexToShape( fSubMesh->GetID() );
             if ( !s.IsNull() && s.ShapeType() == TopAbs_FACE )
@@ -2388,7 +2368,7 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
               gp_XY uv( 1e100, 1e100 );
               double distXYZ[4];
               if ( !fHelper.CheckNodeUV( TopoDS::Face( s ), baryNode,
-                                        uv, /*tol=*/1e-7, /*force=*/true, distXYZ ) &&
+                                         uv, /*tol=*/1e-7, /*force=*/true, distXYZ ) &&
                    uv.X() < 1e100 )
               {
                 // node is too far from the surface
@@ -2442,7 +2422,7 @@ void SMESH_MeshEditor::SplitVolumes (const TFacetOfElem & theElems,
           if ( !triangles[ i ]) continue;
           if ( fSubMesh )
             fSubMesh->AddElement( triangles[ i ]);
-          newElems.Append( triangles[ i ]);
+          newElems.push_back( triangles[ i ]);
         }
         ReplaceElemInGroups( face, triangles, GetMeshDS() );
         GetMeshDS()->RemoveFreeElement( face, fSubMesh, /*fromGroups=*/false );
@@ -2479,7 +2459,7 @@ void SMESH_MeshEditor::GetHexaFacetsToSplit( TIDSortedElemSet& theHexas,
                                              const gp_Ax1&     theFacetNormal,
                                              TFacetOfElem &    theFacets)
 {
-  #define THIS_METHOD "SMESH_MeshEditor::GetHexaFacetsToSplit(): "
+#define THIS_METHOD "SMESH_MeshEditor::GetHexaFacetsToSplit(): "
 
   // Find a hexa closest to the location of theFacetNormal
 
@@ -2933,11 +2913,10 @@ void SMESH_MeshEditor::ReplaceElemInGroups (const SMDS_MeshElement*
 bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
                                   const bool         the13Diag)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
-
-  SMESHDS_Mesh * aMesh = GetMeshDS();
+  ClearLastCreated();
+  myLastCreatedElems.reserve( theElems.size() * 2 );
 
+  SMESHDS_Mesh *       aMesh = GetMeshDS();
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
@@ -2967,8 +2946,8 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
         newElem1 = aMesh->AddFace( aNodes[3], aNodes[0], aNodes[1] );
         newElem2 = aMesh->AddFace( aNodes[3], aNodes[1], aNodes[2] );
       }
-      myLastCreatedElems.Append(newElem1);
-      myLastCreatedElems.Append(newElem2);
+      myLastCreatedElems.push_back(newElem1);
+      myLastCreatedElems.push_back(newElem2);
       // put a new triangle on the same shape and add to the same groups
       if ( aShapeId )
       {
@@ -3010,7 +2989,7 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
         centrNode = helper.GetCentralNode( aNodes[0], aNodes[1], aNodes[2], aNodes[3],
                                            aNodes[4], aNodes[5], aNodes[6], aNodes[7],
                                            surface.IsNull() );
-        myLastCreatedNodes.Append(centrNode);
+        myLastCreatedNodes.push_back(centrNode);
       }
 
       // create a new element
@@ -3028,8 +3007,8 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
         newElem2 = aMesh->AddFace(aNodes[3], aNodes[1], aNodes[2],
                                   centrNode, aNodes[5], aNodes[6] );
       }
-      myLastCreatedElems.Append(newElem1);
-      myLastCreatedElems.Append(newElem2);
+      myLastCreatedElems.push_back(newElem1);
+      myLastCreatedElems.push_back(newElem2);
       // put a new triangle on the same shape and add to the same groups
       if ( aShapeId )
       {
@@ -3153,8 +3132,8 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
                                   SMESH::Controls::NumericalFunctorPtr theCrit,
                                   const double                         theMaxAngle)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
+  myLastCreatedElems.reserve( theElems.size() / 2 );
 
   if ( !theCrit.get() )
     return false;
@@ -3338,7 +3317,7 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
           {
             const SMDS_MeshElement* newElem = 0;
             newElem = aMesh->AddFace(n12[0], n12[1], n12[2], n12[3] );
-            myLastCreatedElems.Append(newElem);
+            myLastCreatedElems.push_back(newElem);
             AddToSameGroups( newElem, tr1, aMesh );
             int aShapeId = tr1->getshapeId();
             if ( aShapeId )
@@ -3369,7 +3348,7 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
             else
               newElem = aMesh->AddFace(aNodes[0], aNodes[1], aNodes[2], aNodes[3],
                                        aNodes[4], aNodes[5], aNodes[6], aNodes[7]);
-            myLastCreatedElems.Append(newElem);
+            myLastCreatedElems.push_back(newElem);
             AddToSameGroups( newElem, tr1, aMesh );
             int aShapeId = tr1->getshapeId();
             if ( aShapeId )
@@ -3392,7 +3371,7 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
           if ( tr1->NbNodes() == 3 ) {
             const SMDS_MeshElement* newElem = 0;
             newElem = aMesh->AddFace(n13[0], n13[1], n13[2], n13[3] );
-            myLastCreatedElems.Append(newElem);
+            myLastCreatedElems.push_back(newElem);
             AddToSameGroups( newElem, tr1, aMesh );
             int aShapeId = tr1->getshapeId();
             if ( aShapeId )
@@ -3423,7 +3402,7 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
             else
               newElem = aMesh->AddFace(aNodes[0], aNodes[1], aNodes[2], aNodes[3],
                                        aNodes[4], aNodes[5], aNodes[6], aNodes[7]);
-            myLastCreatedElems.Append(newElem);
+            myLastCreatedElems.push_back(newElem);
             AddToSameGroups( newElem, tr1, aMesh );
             int aShapeId = tr1->getshapeId();
             if ( aShapeId )
@@ -3451,286 +3430,6 @@ bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
   return true;
 }
 
-
-/*#define DUMPSO(txt) \
-//  cout << txt << endl;
-//=============================================================================
-//
-//
-//
-//=============================================================================
-static void swap( int i1, int i2, int idNodes[], gp_Pnt P[] )
-{
-if ( i1 == i2 )
-return;
-int tmp = idNodes[ i1 ];
-idNodes[ i1 ] = idNodes[ i2 ];
-idNodes[ i2 ] = tmp;
-gp_Pnt Ptmp = P[ i1 ];
-P[ i1 ] = P[ i2 ];
-P[ i2 ] = Ptmp;
-DUMPSO( i1 << "(" << idNodes[ i2 ] << ") <-> " << i2 << "(" << idNodes[ i1 ] << ")");
-}
-
-//=======================================================================
-//function : SortQuadNodes
-//purpose  : Set 4 nodes of a quadrangle face in a good order.
-//           Swap 1<->2 or 2<->3 nodes and correspondingly return
-//           1 or 2 else 0.
-//=======================================================================
-
-int SMESH_MeshEditor::SortQuadNodes (const SMDS_Mesh * theMesh,
-int               idNodes[] )
-{
-  gp_Pnt P[4];
-  int i;
-  for ( i = 0; i < 4; i++ ) {
-    const SMDS_MeshNode *n = theMesh->FindNode( idNodes[i] );
-    if ( !n ) return 0;
-    P[ i ].SetCoord( n->X(), n->Y(), n->Z() );
-  }
-
-  gp_Vec V1(P[0], P[1]);
-  gp_Vec V2(P[0], P[2]);
-  gp_Vec V3(P[0], P[3]);
-
-  gp_Vec Cross1 = V1 ^ V2;
-  gp_Vec Cross2 = V2 ^ V3;
-
-  i = 0;
-  if (Cross1.Dot(Cross2) < 0)
-  {
-    Cross1 = V2 ^ V1;
-    Cross2 = V1 ^ V3;
-
-    if (Cross1.Dot(Cross2) < 0)
-      i = 2;
-    else
-      i = 1;
-    swap ( i, i + 1, idNodes, P );
-
-    //     for ( int ii = 0; ii < 4; ii++ ) {
-    //       const SMDS_MeshNode *n = theMesh->FindNode( idNodes[ii] );
-    //       DUMPSO( ii << "(" << idNodes[ii] <<") : "<<n->X()<<" "<<n->Y()<<" "<<n->Z());
-    //     }
-  }
-  return i;
-}
-
-//=======================================================================
-//function : SortHexaNodes
-//purpose  : Set 8 nodes of a hexahedron in a good order.
-//           Return success status
-//=======================================================================
-
-bool SMESH_MeshEditor::SortHexaNodes (const SMDS_Mesh * theMesh,
-                                      int               idNodes[] )
-{
-  gp_Pnt P[8];
-  int i;
-  DUMPSO( "INPUT: ========================================");
-  for ( i = 0; i < 8; i++ ) {
-    const SMDS_MeshNode *n = theMesh->FindNode( idNodes[i] );
-    if ( !n ) return false;
-    P[ i ].SetCoord( n->X(), n->Y(), n->Z() );
-    DUMPSO( i << "(" << idNodes[i] <<") : "<<n->X()<<" "<<n->Y()<<" "<<n->Z());
-  }
-  DUMPSO( "========================================");
-
-
-  set<int> faceNodes;  // ids of bottom face nodes, to be found
-  set<int> checkedId1; // ids of tried 2-nd nodes
-  Standard_Real leastDist = DBL_MAX; // dist of the 4-th node from 123 plane
-  const Standard_Real tol = 1.e-6;   // tolerance to find nodes in plane
-  int iMin, iLoop1 = 0;
-
-  // Loop to try the 2-nd nodes
-
-  while ( leastDist > DBL_MIN && ++iLoop1 < 8 )
-  {
-    // Find not checked 2-nd node
-    for ( i = 1; i < 8; i++ )
-      if ( checkedId1.find( idNodes[i] ) == checkedId1.end() ) {
-        int id1 = idNodes[i];
-        swap ( 1, i, idNodes, P );
-        checkedId1.insert ( id1 );
-        break;
-      }
-
-    // Find the 3-d node so that 1-2-3 triangle to be on a hexa face,
-    // ie that all but meybe one (id3 which is on the same face) nodes
-    // lay on the same side from the triangle plane.
-
-    bool manyInPlane = false; // more than 4 nodes lay in plane
-    int iLoop2 = 0;
-    while ( ++iLoop2 < 6 ) {
-
-      // get 1-2-3 plane coeffs
-      Standard_Real A, B, C, D;
-      gp_Vec N = gp_Vec (P[0], P[1]).Crossed( gp_Vec (P[0], P[2]) );
-      if ( N.SquareMagnitude() > gp::Resolution() )
-      {
-        gp_Pln pln ( P[0], N );
-        pln.Coefficients( A, B, C, D );
-
-        // find the node (iMin) closest to pln
-        Standard_Real dist[ 8 ], minDist = DBL_MAX;
-        set<int> idInPln;
-        for ( i = 3; i < 8; i++ ) {
-          dist[i] = A * P[i].X() + B * P[i].Y() + C * P[i].Z() + D;
-          if ( fabs( dist[i] ) < minDist ) {
-            minDist = fabs( dist[i] );
-            iMin = i;
-          }
-          if ( fabs( dist[i] ) <= tol )
-            idInPln.insert( idNodes[i] );
-        }
-
-        // there should not be more than 4 nodes in bottom plane
-        if ( idInPln.size() > 1 )
-        {
-          DUMPSO( "### idInPln.size() = " << idInPln.size());
-          // idInPlane does not contain the first 3 nodes
-          if ( manyInPlane || idInPln.size() == 5)
-            return false; // all nodes in one plane
-          manyInPlane = true;
-
-          // set the 1-st node to be not in plane
-          for ( i = 3; i < 8; i++ ) {
-            if ( idInPln.find( idNodes[ i ] ) == idInPln.end() ) {
-              DUMPSO( "### Reset 0-th node");
-              swap( 0, i, idNodes, P );
-              break;
-            }
-          }
-
-          // reset to re-check second nodes
-          leastDist = DBL_MAX;
-          faceNodes.clear();
-          checkedId1.clear();
-          iLoop1 = 0;
-          break; // from iLoop2;
-        }
-
-        // check that the other 4 nodes are on the same side
-        bool sameSide = true;
-        bool isNeg = dist[ iMin == 3 ? 4 : 3 ] <= 0.;
-        for ( i = 3; sameSide && i < 8; i++ ) {
-          if ( i != iMin )
-            sameSide = ( isNeg == dist[i] <= 0.);
-        }
-
-        // keep best solution
-        if ( sameSide && minDist < leastDist ) {
-          leastDist = minDist;
-          faceNodes.clear();
-          faceNodes.insert( idNodes[ 1 ] );
-          faceNodes.insert( idNodes[ 2 ] );
-          faceNodes.insert( idNodes[ iMin ] );
-          DUMPSO( "loop " << iLoop2 << " id2 " << idNodes[ 1 ] << " id3 " << idNodes[ 2 ]
-                  << " leastDist = " << leastDist);
-          if ( leastDist <= DBL_MIN )
-            break;
-        }
-      }
-
-      // set next 3-d node to check
-      int iNext = 2 + iLoop2;
-      if ( iNext < 8 ) {
-        DUMPSO( "Try 2-nd");
-        swap ( 2, iNext, idNodes, P );
-      }
-    } // while ( iLoop2 < 6 )
-  } // iLoop1
-
-  if ( faceNodes.empty() ) return false;
-
-  // Put the faceNodes in proper places
-  for ( i = 4; i < 8; i++ ) {
-    if ( faceNodes.find( idNodes[ i ] ) != faceNodes.end() ) {
-      // find a place to put
-      int iTo = 1;
-      while ( faceNodes.find( idNodes[ iTo ] ) != faceNodes.end() )
-        iTo++;
-      DUMPSO( "Set faceNodes");
-      swap ( iTo, i, idNodes, P );
-    }
-  }
-
-
-  // Set nodes of the found bottom face in good order
-  DUMPSO( " Found bottom face: ");
-  i = SortQuadNodes( theMesh, idNodes );
-  if ( i ) {
-    gp_Pnt Ptmp = P[ i ];
-    P[ i ] = P[ i+1 ];
-    P[ i+1 ] = Ptmp;
-  }
-  //   else
-  //     for ( int ii = 0; ii < 4; ii++ ) {
-  //       const SMDS_MeshNode *n = theMesh->FindNode( idNodes[ii] );
-  //       DUMPSO( ii << "(" << idNodes[ii] <<") : "<<n->X()<<" "<<n->Y()<<" "<<n->Z());
-  //    }
-
-  // Gravity center of the top and bottom faces
-  gp_Pnt aGCb = ( P[0].XYZ() + P[1].XYZ() + P[2].XYZ() + P[3].XYZ() ) / 4.;
-  gp_Pnt aGCt = ( P[4].XYZ() + P[5].XYZ() + P[6].XYZ() + P[7].XYZ() ) / 4.;
-
-  // Get direction from the bottom to the top face
-  gp_Vec upDir ( aGCb, aGCt );
-  Standard_Real upDirSize = upDir.Magnitude();
-  if ( upDirSize <= gp::Resolution() ) return false;
-  upDir / upDirSize;
-
-  // Assure that the bottom face normal points up
-  gp_Vec Nb = gp_Vec (P[0], P[1]).Crossed( gp_Vec (P[0], P[2]) );
-  Nb += gp_Vec (P[0], P[2]).Crossed( gp_Vec (P[0], P[3]) );
-  if ( Nb.Dot( upDir ) < 0 ) {
-    DUMPSO( "Reverse bottom face");
-    swap( 1, 3, idNodes, P );
-  }
-
-  // Find 5-th node - the one closest to the 1-st among the last 4 nodes.
-  Standard_Real minDist = DBL_MAX;
-  for ( i = 4; i < 8; i++ ) {
-    // projection of P[i] to the plane defined by P[0] and upDir
-    gp_Pnt Pp = P[i].Translated( upDir * ( upDir.Dot( gp_Vec( P[i], P[0] ))));
-    Standard_Real sqDist = P[0].SquareDistance( Pp );
-    if ( sqDist < minDist ) {
-      minDist = sqDist;
-      iMin = i;
-    }
-  }
-  DUMPSO( "Set 4-th");
-  swap ( 4, iMin, idNodes, P );
-
-  // Set nodes of the top face in good order
-  DUMPSO( "Sort top face");
-  i = SortQuadNodes( theMesh, &idNodes[4] );
-  if ( i ) {
-    i += 4;
-    gp_Pnt Ptmp = P[ i ];
-    P[ i ] = P[ i+1 ];
-    P[ i+1 ] = Ptmp;
-  }
-
-  // Assure that direction of the top face normal is from the bottom face
-  gp_Vec Nt = gp_Vec (P[4], P[5]).Crossed( gp_Vec (P[4], P[6]) );
-  Nt += gp_Vec (P[4], P[6]).Crossed( gp_Vec (P[4], P[7]) );
-  if ( Nt.Dot( upDir ) < 0 ) {
-    DUMPSO( "Reverse top face");
-    swap( 5, 7, idNodes, P );
-  }
-
-  //   DUMPSO( "OUTPUT: ========================================");
-  //   for ( i = 0; i < 8; i++ ) {
-  //     float *p = ugrid->GetPoint(idNodes[i]);
-  //     DUMPSO( i << "(" << idNodes[i] << ") : " << p[0] << " " << p[1] << " " << p[2]);
-  //   }
-
-  return true;
-}*/
-
 //================================================================================
 /*!
  * \brief Return nodes linked to the given one
@@ -3936,8 +3635,7 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
                                double                      theTgtAspectRatio,
                                const bool                  the2D)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if ( theTgtAspectRatio < 1.0 )
     theTgtAspectRatio = 1.0;
@@ -4130,7 +3828,7 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
         // }
         if ( project ) { // compute new UV
           gp_XY newUV;
-          gp_Pnt pNode = SMESH_TNodeXYZ( node );
+          gp_Pnt pNode = SMESH_NodeXYZ( node );
           if ( !getClosestUV( projector, pNode, newUV )) {
             MESSAGE("Node Projection Failed " << node);
           }
@@ -4143,7 +3841,7 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
             // if ( posType != SMDS_TOP_3DSPACE )
             //   dist2 = pNode.SquareDistance( surface->Value( newUV.X(), newUV.Y() ));
             // if ( dist2 < dist1 )
-              uv = newUV;
+            uv = newUV;
           }
         }
         // store UV in the map
@@ -4385,7 +4083,7 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
         const SMDS_MeshElement* QF = *elemIt;
         if ( QF->IsQuadratic() )
         {
-          nodes.assign( SMDS_MeshElement::iterator( QF->interlacedNodesElemIterator() ),
+          nodes.assign( SMDS_MeshElement::iterator( QF->interlacedNodesIterator() ),
                         SMDS_MeshElement::iterator() );
           nodes.push_back( nodes[0] );
           gp_Pnt xyz;
@@ -4399,9 +4097,9 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
               xyz = surface->Value( uv.X(), uv.Y() );
             }
             else {
-              xyz = 0.5 * ( SMESH_TNodeXYZ( nodes[i-1] ) + SMESH_TNodeXYZ( nodes[i+1] ));
+              xyz = 0.5 * ( SMESH_NodeXYZ( nodes[i-1] ) + SMESH_NodeXYZ( nodes[i+1] ));
             }
-            if (( SMESH_TNodeXYZ( nodes[i] ) - xyz.XYZ() ).Modulus() > disttol )
+            if (( SMESH_NodeXYZ( nodes[i] ) - xyz.XYZ() ).Modulus() > disttol )
               // we have to move a medium node
               aMesh->MoveNode( nodes[i], xyz.X(), xyz.Y(), xyz.Z() );
           }
@@ -4429,8 +4127,8 @@ namespace
                  const int                           iNotSame)
   {
 
-    SMESH_TNodeXYZ pP = prevNodes[ iNotSame ];
-    SMESH_TNodeXYZ pN = nextNodes[ iNotSame ];
+    SMESH_NodeXYZ pP = prevNodes[ iNotSame ];
+    SMESH_NodeXYZ pN = nextNodes[ iNotSame ];
     gp_XYZ extrDir( pN - pP ), faceNorm;
     SMESH_MeshAlgos::FaceNormal( face, faceNorm, /*normalized=*/false );
 
@@ -4663,55 +4361,55 @@ void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement*               elem,
         break;
       }
       case SMDSEntity_Triangle: // TRIANGLE --->
-        {
-          if ( nbDouble > 0 ) break;
-          if ( nbSame == 0 )       // ---> pentahedron
-            aNewElem = aMesh->AddVolume (prevNod[ 0 ], prevNod[ 1 ], prevNod[ 2 ],
-                                         nextNod[ 0 ], nextNod[ 1 ], nextNod[ 2 ] );
-
-          else if ( nbSame == 1 )  // ---> pyramid
-            aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ], prevNod[ iAfterSame ],
-                                         nextNod[ iAfterSame ],  nextNod[ iBeforeSame ],
-                                         nextNod[ iSameNode ]);
-
-          else // 2 same nodes:       ---> tetrahedron
-            aNewElem = aMesh->AddVolume (prevNod[ 0 ], prevNod[ 1 ], prevNod[ 2 ],
-                                         nextNod[ iNotSameNode ]);
-          break;
-        }
+      {
+        if ( nbDouble > 0 ) break;
+        if ( nbSame == 0 )       // ---> pentahedron
+          aNewElem = aMesh->AddVolume (prevNod[ 0 ], prevNod[ 1 ], prevNod[ 2 ],
+                                       nextNod[ 0 ], nextNod[ 1 ], nextNod[ 2 ] );
+
+        else if ( nbSame == 1 )  // ---> pyramid
+          aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ], prevNod[ iAfterSame ],
+                                       nextNod[ iAfterSame ],  nextNod[ iBeforeSame ],
+                                       nextNod[ iSameNode ]);
+
+        else // 2 same nodes:       ---> tetrahedron
+          aNewElem = aMesh->AddVolume (prevNod[ 0 ], prevNod[ 1 ], prevNod[ 2 ],
+                                       nextNod[ iNotSameNode ]);
+        break;
+      }
       case SMDSEntity_Quad_Edge: // sweep quadratic EDGE --->
+      {
+        if ( nbSame == 2 )
+          return;
+        if ( nbDouble+nbSame == 2 )
         {
-          if ( nbSame == 2 )
-            return;
-          if ( nbDouble+nbSame == 2 )
-          {
-            if(nbSame==0) {      // ---> quadratic quadrangle
-              aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1], nextNod[0],
-                                        prevNod[2], midlNod[1], nextNod[2], midlNod[0]);
-            }
-            else { //(nbSame==1) // ---> quadratic triangle
-              if(sames[0]==2) {
-                return; // medium node on axis
-              }
-              else if(sames[0]==0)
-                aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1],
-                                          prevNod[2], midlNod[1], nextNod[2] );
-              else // sames[0]==1
-                aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[0],
-                                          prevNod[2], nextNod[2], midlNod[0]);
-            }
+          if(nbSame==0) {      // ---> quadratic quadrangle
+            aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1], nextNod[0],
+                                      prevNod[2], midlNod[1], nextNod[2], midlNod[0]);
           }
-          else if ( nbDouble == 3 )
-          {
-            if ( nbSame == 0 ) {  // ---> bi-quadratic quadrangle
-              aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1], nextNod[0],
-                                        prevNod[2], midlNod[1], nextNod[2], midlNod[0], midlNod[2]);
+          else { //(nbSame==1) // ---> quadratic triangle
+            if(sames[0]==2) {
+              return; // medium node on axis
             }
+            else if(sames[0]==0)
+              aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1],
+                                        prevNod[2], midlNod[1], nextNod[2] );
+            else // sames[0]==1
+              aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[0],
+                                        prevNod[2], nextNod[2], midlNod[0]);
+          }
+        }
+        else if ( nbDouble == 3 )
+        {
+          if ( nbSame == 0 ) {  // ---> bi-quadratic quadrangle
+            aNewElem = aMesh->AddFace(prevNod[0], prevNod[1], nextNod[1], nextNod[0],
+                                      prevNod[2], midlNod[1], nextNod[2], midlNod[0], midlNod[2]);
           }
-          else
-            return;
-          break;
         }
+        else
+          return;
+        break;
+      }
       case SMDSEntity_Quadrangle: { // sweep QUADRANGLE --->
         if ( nbDouble > 0 ) break;
 
@@ -4933,8 +4631,8 @@ void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement*               elem,
 
     if ( aNewElem ) {
       newElems.push_back( aNewElem );
-      myLastCreatedElems.Append(aNewElem);
-      srcElements.Append( elem );
+      myLastCreatedElems.push_back(aNewElem);
+      srcElements.push_back( elem );
     }
 
     // set new prev nodes
@@ -5024,19 +4722,19 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
       if ( !isQuadratic ) {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
                                vecNewNodes[ 1 ]->second.back())) {
-          myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
-                                                   vecNewNodes[ 1 ]->second.back()));
-          srcElements.Append( elem );
+          myLastCreatedElems.push_back(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
+                                                      vecNewNodes[ 1 ]->second.back()));
+          srcElements.push_back( elem );
         }
       }
       else {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
                                vecNewNodes[ 1 ]->second.back(),
                                vecNewNodes[ 2 ]->second.back())) {
-          myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
-                                                   vecNewNodes[ 1 ]->second.back(),
-                                                   vecNewNodes[ 2 ]->second.back()));
-          srcElements.Append( elem );
+          myLastCreatedElems.push_back(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
+                                                      vecNewNodes[ 1 ]->second.back(),
+                                                      vecNewNodes[ 2 ]->second.back()));
+          srcElements.push_back( elem );
         }
       }
     }
@@ -5064,14 +4762,14 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
           // make a new edge and a ceiling for a new edge
           const SMDS_MeshElement* edge;
           if ( ! ( edge = aMesh->FindEdge( n1, n2 ))) {
-            myLastCreatedElems.Append( edge = aMesh->AddEdge( n1, n2 )); // free link edge
-            srcElements.Append( myLastCreatedElems.Last() );
+            myLastCreatedElems.push_back( edge = aMesh->AddEdge( n1, n2 )); // free link edge
+            srcElements.push_back( myLastCreatedElems.back() );
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           if ( !aMesh->FindEdge( n1, n2 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 )); // new edge ceiling
-            srcElements.Append( edge );
+            myLastCreatedElems.push_back(aMesh->AddEdge( n1, n2 )); // new edge ceiling
+            srcElements.push_back( edge );
           }
         }
       }
@@ -5092,15 +4790,15 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
           // make an edge and a ceiling for a new edge
           // find medium node
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); // free link edge
-            srcElements.Append( elem );
+            myLastCreatedElems.push_back(aMesh->AddEdge( n1, n2, n3 )); // free link edge
+            srcElements.push_back( elem );
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           n3 = vecNewNodes[ iNode+nbn ]->second.back();
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); // ceiling edge
-            srcElements.Append( elem );
+            myLastCreatedElems.push_back(aMesh->AddEdge( n1, n2, n3 )); // ceiling edge
+            srcElements.push_back( elem );
           }
         }
       }
@@ -5134,9 +4832,9 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
         SMDS_VolumeTool vTool( *v, /*ignoreCentralNodes=*/false );
         int iF, nbF = vTool.NbFaces();
         for ( iF = 0; iF < nbF; iF ++ ) {
-          if (vTool.IsFreeFace( iF ) &&
-              vTool.GetFaceNodes( iF, faceNodeSet ) &&
-              initNodeSet != faceNodeSet) // except an initial face
+          if ( vTool.IsFreeFace( iF ) &&
+               vTool.GetFaceNodes( iF, faceNodeSet ) &&
+               initNodeSet != faceNodeSet) // except an initial face
           {
             if ( nbSteps == 1 && faceNodeSet == topNodeSet )
               continue;
@@ -5193,8 +4891,8 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
                 if ( f )
                   aMesh->ChangeElementNodes( f, &newOrder[0], nbn );
                 else
-                  myLastCreatedElems.Append(aMesh->AddFace( newOrder[ 0 ], newOrder[ 1 ],
-                                                            newOrder[ 2 ] ));
+                  myLastCreatedElems.push_back(aMesh->AddFace( newOrder[ 0 ], newOrder[ 1 ],
+                                                               newOrder[ 2 ] ));
               }
             }
             else if ( nbn == 4 )       ///// quadrangle
@@ -5208,8 +4906,8 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
                 if ( f )
                   aMesh->ChangeElementNodes( f, &newOrder[0], nbn );
                 else
-                  myLastCreatedElems.Append(aMesh->AddFace( newOrder[ 0 ], newOrder[ 1 ],
-                                                            newOrder[ 2 ], newOrder[ 3 ]));
+                  myLastCreatedElems.push_back(aMesh->AddFace( newOrder[ 0 ], newOrder[ 1 ],
+                                                               newOrder[ 2 ], newOrder[ 3 ]));
               }
             }
             else if ( nbn == 6 && isQuadratic ) /////// quadratic triangle
@@ -5227,12 +4925,12 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
                 if ( f )
                   aMesh->ChangeElementNodes( f, &newOrder[0], nbn );
                 else
-                  myLastCreatedElems.Append(aMesh->AddFace( newOrder[ 0 ],
-                                                            newOrder[ 1 ],
-                                                            newOrder[ 2 ],
-                                                            newOrder[ 3 ],
-                                                            newOrder[ 4 ],
-                                                            newOrder[ 5 ] ));
+                  myLastCreatedElems.push_back(aMesh->AddFace( newOrder[ 0 ],
+                                                               newOrder[ 1 ],
+                                                               newOrder[ 2 ],
+                                                               newOrder[ 3 ],
+                                                               newOrder[ 4 ],
+                                                               newOrder[ 5 ] ));
               }
             }
             else if ( nbn == 8 && isQuadratic ) /////// quadratic quadrangle
@@ -5253,10 +4951,10 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
                 if ( f )
                   aMesh->ChangeElementNodes( f, &newOrder[0], nbn );
                 else
-                  myLastCreatedElems.Append(aMesh->AddFace(newOrder[ 0 ], newOrder[ 1 ],
-                                                           newOrder[ 2 ], newOrder[ 3 ],
-                                                           newOrder[ 4 ], newOrder[ 5 ],
-                                                           newOrder[ 6 ], newOrder[ 7 ]));
+                  myLastCreatedElems.push_back(aMesh->AddFace(newOrder[ 0 ], newOrder[ 1 ],
+                                                              newOrder[ 2 ], newOrder[ 3 ],
+                                                              newOrder[ 4 ], newOrder[ 5 ],
+                                                              newOrder[ 6 ], newOrder[ 7 ]));
               }
             }
             else if ( nbn == 9 && isQuadratic ) /////// bi-quadratic quadrangle
@@ -5278,11 +4976,11 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
                 if ( f )
                   aMesh->ChangeElementNodes( f, &newOrder[0], nbn );
                 else
-                  myLastCreatedElems.Append(aMesh->AddFace(newOrder[ 0 ], newOrder[ 1 ],
-                                                           newOrder[ 2 ], newOrder[ 3 ],
-                                                           newOrder[ 4 ], newOrder[ 5 ],
-                                                           newOrder[ 6 ], newOrder[ 7 ],
-                                                           newOrder[ 8 ]));
+                  myLastCreatedElems.push_back(aMesh->AddFace(newOrder[ 0 ], newOrder[ 1 ],
+                                                              newOrder[ 2 ], newOrder[ 3 ],
+                                                              newOrder[ 4 ], newOrder[ 5 ],
+                                                              newOrder[ 6 ], newOrder[ 7 ],
+                                                              newOrder[ 8 ]));
               }
             }
             else  //////// polygon
@@ -5301,8 +4999,8 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
               }
             }
 
-            while ( srcElements.Length() < myLastCreatedElems.Length() )
-              srcElements.Append( *srcEdge );
+            while ( srcElements.size() < myLastCreatedElems.size() )
+              srcElements.push_back( *srcEdge );
 
           }  // loop on free faces
 
@@ -5339,8 +5037,8 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
 
         AddElement( nodeVec, anyFace.Init( elem ));
 
-        while ( srcElements.Length() < myLastCreatedElems.Length() )
-          srcElements.Append( elem );
+        while ( srcElements.size() < myLastCreatedElems.size() )
+          srcElements.push_back( elem );
       }
     }
   } // loop on swept elements
@@ -5360,11 +5058,16 @@ SMESH_MeshEditor::RotationSweep(TIDSortedElemSet   theElemSets[2],
                                 const bool         theMakeGroups,
                                 const bool         theMakeWalls)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
+
+  setElemsFirst( theElemSets );
+  myLastCreatedElems.reserve( theElemSets[0].size() * theNbSteps );
+  myLastCreatedNodes.reserve( theElemSets[1].size() * theNbSteps );
 
   // source elements for each generated one
   SMESH_SequenceOfElemPtr srcElems, srcNodes;
+  srcElems.reserve( theElemSets[0].size() );
+  srcNodes.reserve( theElemSets[1].size() );
 
   gp_Trsf aTrsf;
   aTrsf.SetRotation( theAxis, theAngle );
@@ -5384,7 +5087,6 @@ SMESH_MeshEditor::RotationSweep(TIDSortedElemSet   theElemSets[2],
                                      myMesh->NbFaces(ORDER_QUADRATIC) +
                                      myMesh->NbVolumes(ORDER_QUADRATIC) );
   // loop on theElemSets
-  setElemsFirst( theElemSets );
   TIDSortedElemSet::iterator itElem;
   for ( int is2ndSet = 0; is2ndSet < 2; ++is2ndSet )
   {
@@ -5436,8 +5138,8 @@ SMESH_MeshEditor::RotationSweep(TIDSortedElemSet   theElemSets[2],
               {
                 aTrsf2.Transforms( coord[0], coord[1], coord[2] );
                 newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
-                myLastCreatedNodes.Append(newNode);
-                srcNodes.Append( node );
+                myLastCreatedNodes.push_back(newNode);
+                srcNodes.push_back( node );
                 listNewNodes.push_back( newNode );
                 aTrsf2.Transforms( coord[0], coord[1], coord[2] );
               }
@@ -5446,8 +5148,8 @@ SMESH_MeshEditor::RotationSweep(TIDSortedElemSet   theElemSets[2],
               }
               // create a corner node
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
-              myLastCreatedNodes.Append(newNode);
-              srcNodes.Append( node );
+              myLastCreatedNodes.push_back(newNode);
+              srcNodes.push_back( node );
               listNewNodes.push_back( newNode );
             }
             else {
@@ -5621,7 +5323,7 @@ void SMESH_MeshEditor::ExtrusParam::SetElementsToUse( const TIDSortedElemSet& el
         while ( itN->more() ) {
           const SMDS_MeshElement* node = itN->next();
           if ( newNodes.insert( node ).second )
-            myBaseP += SMESH_TNodeXYZ( node );
+            myBaseP += SMESH_NodeXYZ( node );
         }
       }
     }
@@ -5687,7 +5389,7 @@ makeNodesByDir( SMESHDS_Mesh*                     mesh,
                 std::list<const SMDS_MeshNode*> & newNodes,
                 const bool                        makeMediumNodes)
 {
-  gp_XYZ p = SMESH_TNodeXYZ( srcNode );
+  gp_XYZ p = SMESH_NodeXYZ( srcNode );
 
   int nbNodes = 0;
   for ( beginStepIter( makeMediumNodes ); moreSteps(); ++nbNodes ) // loop on steps
@@ -5724,7 +5426,7 @@ makeNodesByDir( SMESHDS_Mesh*                     mesh,
       iSc += int( makeMediumNodes );
       ScaleIt& scale = scales[ iSc % 2 ];
       
-      gp_XYZ xyz = SMESH_TNodeXYZ( *nIt );
+      gp_XYZ xyz = SMESH_NodeXYZ( *nIt );
       xyz = ( *scale * ( xyz - center )) + center;
       mesh->MoveNode( *nIt, xyz.X(), xyz.Y(), xyz.Z() );
 
@@ -5745,7 +5447,7 @@ makeNodesByDirAndSew( SMESHDS_Mesh*                     mesh,
                       std::list<const SMDS_MeshNode*> & newNodes,
                       const bool                        makeMediumNodes)
 {
-  gp_XYZ P1 = SMESH_TNodeXYZ( srcNode );
+  gp_XYZ P1 = SMESH_NodeXYZ( srcNode );
 
   int nbNodes = 0;
   for ( beginStepIter( makeMediumNodes ); moreSteps(); ++nbNodes ) // loop on steps
@@ -5753,13 +5455,14 @@ makeNodesByDirAndSew( SMESHDS_Mesh*                     mesh,
     P1 += myDir.XYZ() * nextStep();
 
     // try to search in sequence of existing nodes
-    // if myNodes.Length()>0 we 'nave to use given sequence
+    // if myNodes.size()>0 we 'nave to use given sequence
     // else - use all nodes of mesh
     const SMDS_MeshNode * node = 0;
-    if ( myNodes.Length() > 0 ) {
-      int i;
-      for(i=1; i<=myNodes.Length(); i++) {
-        gp_XYZ P2 = SMESH_TNodeXYZ( myNodes.Value(i) );
+    if ( myNodes.Length() > 0 )
+    {
+      for ( int i = 1; i <= myNodes.Length(); i++ )
+      {
+        SMESH_NodeXYZ P2 = myNodes.Value(i);
         if (( P1 - P2 ).SquareModulus() < myTolerance * myTolerance )
         {
           node = myNodes.Value(i);
@@ -5767,10 +5470,12 @@ makeNodesByDirAndSew( SMESHDS_Mesh*                     mesh,
         }
       }
     }
-    else {
+    else
+    {
       SMDS_NodeIteratorPtr itn = mesh->nodesIterator();
-      while(itn->more()) {
-        SMESH_TNodeXYZ P2( itn->next() );
+      while(itn->more())
+      {
+        SMESH_NodeXYZ P2 = itn->next();
         if (( P1 - P2 ).SquareModulus() < myTolerance * myTolerance )
         {
           node = P2._node;
@@ -5802,7 +5507,7 @@ makeNodesByNormal2D( SMESHDS_Mesh*                     mesh,
 {
   const bool alongAvgNorm = ( myFlags & EXTRUSION_FLAG_BY_AVG_NORMAL );
 
-  gp_XYZ p = SMESH_TNodeXYZ( srcNode );
+  gp_XYZ p = SMESH_NodeXYZ( srcNode );
 
   // get normals to faces sharing srcNode
   vector< gp_XYZ > norms, baryCenters;
@@ -5822,7 +5527,7 @@ makeNodesByNormal2D( SMESHDS_Mesh*                     mesh,
         gp_XYZ bc(0,0,0);
         int nbN = 0;
         for ( SMDS_ElemIteratorPtr nIt = face->nodesIterator(); nIt->more(); ++nbN )
-          bc += SMESH_TNodeXYZ( nIt->next() );
+          bc += SMESH_NodeXYZ( nIt->next() );
         baryCenters.push_back( bc / nbN );
       }
     }
@@ -5920,13 +5625,17 @@ SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet     theElemSets[2],
                                   ExtrusParam&         theParams,
                                   TTElemOfElemListMap& newElemsMap)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
+
+  setElemsFirst( theElemSets );
+  myLastCreatedElems.reserve( theElemSets[0].size() * theParams.NbSteps() );
+  myLastCreatedNodes.reserve( theElemSets[1].size() * theParams.NbSteps() );
 
   // source elements for each generated one
   SMESH_SequenceOfElemPtr srcElems, srcNodes;
+  srcElems.reserve( theElemSets[0].size() );
+  srcNodes.reserve( theElemSets[1].size() );
 
-  setElemsFirst( theElemSets );
   const int nbSteps = theParams.NbSteps();
   theParams.SetElementsToUse( theElemSets[0], theElemSets[1] );
 
@@ -5985,8 +5694,8 @@ SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet     theElemSets[2],
             list<const SMDS_MeshNode*>::iterator newNodesIt = listNewNodes.begin();
             for ( ; newNodesIt != listNewNodes.end(); ++newNodesIt )
             {
-              myLastCreatedNodes.Append( *newNodesIt );
-              srcNodes.Append( node );
+              myLastCreatedNodes.push_back( *newNodesIt );
+              srcNodes.push_back( node );
             }
           }
           else
@@ -6027,8 +5736,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
                                        const gp_Pnt&        theRefPoint,
                                        const bool           theMakeGroups)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   int aNbE;
   std::list<double> aPrms;
@@ -6087,9 +5795,8 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
       return EXTR_BAD_STARTING_NODE;
     aItN = pSubMeshDS->GetNodes();
     while ( aItN->more() ) {
-      const SMDS_MeshNode* pNode = aItN->next();
-      const SMDS_EdgePosition* pEPos =
-        static_cast<const SMDS_EdgePosition*>( pNode->GetPosition() );
+      const SMDS_MeshNode*  pNode = aItN->next();
+      SMDS_EdgePositionPtr pEPos = pNode->GetPosition();
       double aT = pEPos->GetUParameter();
       aPrms.push_back( aT );
     }
@@ -6132,8 +5839,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
         aItN = locMeshDS->GetNodes();
         while ( aItN->more() ) {
           const SMDS_MeshNode* pNode = aItN->next();
-          const SMDS_EdgePosition* pEPos =
-            static_cast<const SMDS_EdgePosition*>( pNode->GetPosition() );
+          SMDS_EdgePositionPtr pEPos = pNode->GetPosition();
           double aT = pEPos->GetUParameter();
           aPrms.push_back( aT );
         }
@@ -6202,8 +5908,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
                                        const gp_Pnt&        theRefPoint,
                                        const bool           theMakeGroups)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   int aNbE;
   std::list<double> aPrms;
@@ -6256,7 +5961,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
     SMDS_ElemIteratorPtr nIt;
 
     //check start node
-    if( !theTrack->GetMeshDS()->Contains(theN1) ) {
+    if( !theTrack->GetMeshDS()->Contains( theN1 )) {
       return EXTR_BAD_STARTING_NODE;
     }
 
@@ -6316,8 +6021,8 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
     int startNid = theN1->GetID();
     for ( size_t i = 1; i < aNodesList.size(); i++ )
     {
-      gp_Pnt     p1 = SMESH_TNodeXYZ( aNodesList[i-1] );
-      gp_Pnt     p2 = SMESH_TNodeXYZ( aNodesList[i] );
+      gp_Pnt     p1 = SMESH_NodeXYZ( aNodesList[i-1] );
+      gp_Pnt     p2 = SMESH_NodeXYZ( aNodesList[i] );
       TopoDS_Edge e = BRepBuilderAPI_MakeEdge( p1, p2 );
       list<SMESH_MeshEditor_PathPoint> LPP;
       aPrms.clear();
@@ -6373,8 +6078,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
     while ( aItN->more() ) {
       const SMDS_MeshNode* pNode = aItN->next();
       if( pNode==aN1 || pNode==aN2 ) continue;
-      const SMDS_EdgePosition* pEPos =
-        static_cast<const SMDS_EdgePosition*>( pNode->GetPosition() );
+      SMDS_EdgePositionPtr pEPos = pNode->GetPosition();
       double aT = pEPos->GetUParameter();
       aPrms.push_back( aT );
     }
@@ -6430,9 +6134,8 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
         aPrms.clear();
         aItN = locMeshDS->GetNodes();
         while ( aItN->more() ) {
-          const SMDS_MeshNode*     pNode = aItN->next();
-          const SMDS_EdgePosition* pEPos =
-            static_cast<const SMDS_EdgePosition*>( pNode->GetPosition() );
+          const SMDS_MeshNode*  pNode = aItN->next();
+          SMDS_EdgePositionPtr pEPos = pNode->GetPosition();
           double aT = pEPos->GetUParameter();
           aPrms.push_back( aT );
         }
@@ -6590,7 +6293,7 @@ SMESH_MeshEditor::makeExtrElements(TIDSortedElemSet                  theElemSets
         while ( itN->more() ) {
           const SMDS_MeshElement* node = itN->next();
           if ( newNodes.insert( node ).second )
-            aGC += SMESH_TNodeXYZ( node );
+            aGC += SMESH_NodeXYZ( node );
         }
       }
     }
@@ -6634,7 +6337,7 @@ SMESH_MeshEditor::makeExtrElements(TIDSortedElemSet                  theElemSets
           aTolAng=1.e-4;
 
           aV0x = aV0;
-          aPN0 = SMESH_TNodeXYZ( node );
+          aPN0 = SMESH_NodeXYZ( node );
 
           const SMESH_MeshEditor_PathPoint& aPP0 = aPPs[0];
           aP0x = aPP0.Pnt();
@@ -6682,13 +6385,13 @@ SMESH_MeshEditor::makeExtrElements(TIDSortedElemSet                  theElemSets
               // create additional node
               gp_XYZ midP = 0.5 * ( aPN1.XYZ() + aPN0.XYZ() );
               const SMDS_MeshNode* newNode = aMesh->AddNode( midP.X(), midP.Y(), midP.Z() );
-              myLastCreatedNodes.Append(newNode);
-              srcNodes.Append( node );
+              myLastCreatedNodes.push_back(newNode);
+              srcNodes.push_back( node );
               listNewNodes.push_back( newNode );
             }
             const SMDS_MeshNode* newNode = aMesh->AddNode( aPN1.X(), aPN1.Y(), aPN1.Z() );
-            myLastCreatedNodes.Append(newNode);
-            srcNodes.Append( node );
+            myLastCreatedNodes.push_back(newNode);
+            srcNodes.push_back( node );
             listNewNodes.push_back( newNode );
 
             aPN0 = aPN1;
@@ -6714,8 +6417,8 @@ SMESH_MeshEditor::makeExtrElements(TIDSortedElemSet                  theElemSets
               double y = ( N->Y() + P.Y() )/2.;
               double z = ( N->Z() + P.Z() )/2.;
               const SMDS_MeshNode* newN = aMesh->AddNode(x,y,z);
-              srcNodes.Append( node );
-              myLastCreatedNodes.Append(newN);
+              srcNodes.push_back( node );
+              myLastCreatedNodes.push_back(newN);
               aNodes[2*i] = newN;
               aNodes[2*i+1] = N;
               P = gp_XYZ(N->X(),N->Y(),N->Z());
@@ -6808,8 +6511,8 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
                              const bool         theMakeGroups,
                              SMESH_Mesh*        theTargetMesh)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
+  myLastCreatedElems.reserve( theElems.size() );
 
   bool needReverse = false;
   string groupPostfix;
@@ -6904,14 +6607,14 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
         if ( theTargetMesh ) {
           const SMDS_MeshNode * newNode = aTgtMesh->AddNode( coord[0], coord[1], coord[2] );
           n2n_isnew.first->second = newNode;
-          myLastCreatedNodes.Append(newNode);
-          srcNodes.Append( node );
+          myLastCreatedNodes.push_back(newNode);
+          srcNodes.push_back( node );
         }
         else if ( theCopy ) {
           const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
           n2n_isnew.first->second = newNode;
-          myLastCreatedNodes.Append(newNode);
-          srcNodes.Append( node );
+          myLastCreatedNodes.push_back(newNode);
+          srcNodes.push_back( node );
         }
         else {
           aMesh->MoveNode( node, coord[0], coord[1], coord[2] );
@@ -6954,8 +6657,8 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
 
     if ( geomType == SMDSGeom_POLYHEDRA )  // ------------------ polyhedral volume
     {
-      const SMDS_VtkVolume* aPolyedre = dynamic_cast<const SMDS_VtkVolume*>( elem );
-      if (!aPolyedre)
+      const SMDS_MeshVolume* aPolyedre = SMDS_Mesh::DownCast< SMDS_MeshVolume >( elem );
+      if ( !aPolyedre )
         continue;
       nodes.clear();
       bool allTransformed = true;
@@ -7001,7 +6704,7 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
     if ( editor ) {
       // copy in this or a new mesh
       if ( editor->AddElement( nodes, elemType.Init( elem, /*basicOnly=*/false )))
-        srcElems.Append( elem );
+        srcElems.push_back( elem );
     }
     else {
       // reverse element as it was reversed by transformation
@@ -7012,7 +6715,7 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
   } // loop on elements
 
   if ( editor && editor != this )
-    myLastCreatedElems = editor->myLastCreatedElems;
+    myLastCreatedElems.swap( editor->myLastCreatedElems );
 
   PGroupIDs newGroupIDs;
 
@@ -7023,14 +6726,97 @@ SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
   return newGroupIDs;
 }
 
+//================================================================================
+/*!
+ * \brief Make an offset mesh from a source 2D mesh
+ *  \param [in] theElements - source faces
+ *  \param [in] theValue - offset value
+ *  \param [out] theTgtMesh - a mesh to add offset elements to
+ *  \param [in] theMakeGroups - to generate groups
+ *  \return PGroupIDs - IDs of created groups
+ */
+//================================================================================
+
+SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::Offset( TIDSortedElemSet & theElements,
+                                                      const double       theValue,
+                                                      SMESH_Mesh*        theTgtMesh,
+                                                      const bool         theMakeGroups,
+                                                      const bool         theFixSelfIntersection)
+{
+  SMESHDS_Mesh*    meshDS = GetMeshDS();
+  SMESHDS_Mesh* tgtMeshDS = theTgtMesh->GetMeshDS();
+  SMESH_MeshEditor tgtEditor( theTgtMesh );
+
+  SMDS_ElemIteratorPtr eIt;
+  if ( theElements.empty() ) eIt = meshDS->elementsIterator( SMDSAbs_Face );
+  else                       eIt = SMESHUtils::elemSetIterator( theElements );
+
+  SMESH_MeshAlgos::TEPairVec new2OldFaces;
+  SMESH_MeshAlgos::TNPairVec new2OldNodes;
+  std::unique_ptr< SMDS_Mesh > offsetMesh
+    ( SMESH_MeshAlgos::MakeOffset( eIt, *meshDS, theValue,
+                                   theFixSelfIntersection,
+                                   new2OldFaces, new2OldNodes ));
+
+  offsetMesh->Modified();
+  offsetMesh->CompactMesh(); // make IDs start from 1
+
+  // source elements for each generated one
+  SMESH_SequenceOfElemPtr srcElems, srcNodes;
+  srcElems.reserve( new2OldFaces.size() );
+  srcNodes.reserve( new2OldNodes.size() );
+
+  ClearLastCreated();
+  myLastCreatedElems.reserve( new2OldFaces.size() );
+  myLastCreatedNodes.reserve( new2OldNodes.size() );
+
+  // copy offsetMesh to theTgtMesh
+
+  int idShift = meshDS->MaxNodeID();
+  for ( size_t i = 0; i < new2OldNodes.size(); ++i )
+    if ( const SMDS_MeshNode* n = new2OldNodes[ i ].first )
+    {
+      if ( n->NbInverseElements() > 0 )
+      {
+        const SMDS_MeshNode* n2 =
+          tgtMeshDS->AddNodeWithID( n->X(), n->Y(), n->Z(), idShift + n->GetID() );
+        myLastCreatedNodes.push_back( n2 );
+        srcNodes.push_back( new2OldNodes[ i ].second );
+      }
+    }
+
+  ElemFeatures elemType;
+  for ( size_t i = 0; i < new2OldFaces.size(); ++i )
+    if ( const SMDS_MeshElement* f = new2OldFaces[ i ].first )
+    {
+      elemType.Init( f );
+      elemType.myNodes.clear();
+      for ( SMDS_NodeIteratorPtr nIt = f->nodeIterator(); nIt->more(); )
+      {
+        const SMDS_MeshNode* n2 = nIt->next();
+        elemType.myNodes.push_back( tgtMeshDS->FindNode( idShift + n2->GetID() ));
+      }
+      tgtEditor.AddElement( elemType.myNodes, elemType );
+      srcElems.push_back( new2OldFaces[ i ].second );
+    }
+
+  myLastCreatedElems.swap( tgtEditor.myLastCreatedElems );
+
+  PGroupIDs newGroupIDs;
+  if ( theMakeGroups )
+    newGroupIDs = generateGroups( srcNodes, srcElems, "offset", theTgtMesh, false );
+
+  return newGroupIDs;
+}
+
 //=======================================================================
 /*!
  * \brief Create groups of elements made during transformation
  *  \param nodeGens - nodes making corresponding myLastCreatedNodes
  *  \param elemGens - elements making corresponding myLastCreatedElems
- *  \param postfix - to append to names of new groups
+ *  \param postfix - to push_back to names of new groups
  *  \param targetMesh - mesh to create groups in
- *  \param topPresent - is there "top" elements that are created by sweeping
+ *  \param topPresent - is there are "top" elements that are created by sweeping
  */
 //=======================================================================
 
@@ -7083,30 +6869,30 @@ SMESH_MeshEditor::generateGroups(const SMESH_SequenceOfElemPtr& nodeGens,
   {
     const SMESH_SequenceOfElemPtr& gens  = isNodes ? nodeGens : elemGens;
     const SMESH_SequenceOfElemPtr& elems = isNodes ? myLastCreatedNodes : myLastCreatedElems;
-    if ( gens.Length() != elems.Length() )
+    if ( gens.size() != elems.size() )
       throw SALOME_Exception("SMESH_MeshEditor::generateGroups(): invalid args");
 
     // loop on created elements
-    for (int iElem = 1; iElem <= elems.Length(); ++iElem )
+    for (size_t iElem = 0; iElem < elems.size(); ++iElem )
     {
-      const SMDS_MeshElement* sourceElem = gens( iElem );
+      const SMDS_MeshElement* sourceElem = gens[ iElem ];
       if ( !sourceElem ) {
         MESSAGE("generateGroups(): NULL source element");
         continue;
       }
       list< TOldNewGroup > & groupsOldNew = groupsByType[ sourceElem->GetType() ];
       if ( groupsOldNew.empty() ) { // no groups of this type at all
-        while ( iElem < gens.Length() && gens( iElem+1 ) == sourceElem )
+        while ( iElem+1 < gens.size() && gens[ iElem+1 ] == sourceElem )
           ++iElem; // skip all elements made by sourceElem
         continue;
       }
       // collect all elements made by the iElem-th sourceElem
       resultElems.clear();
-      if ( const SMDS_MeshElement* resElem = elems( iElem ))
+      if ( const SMDS_MeshElement* resElem = elems[ iElem ])
         if ( resElem != sourceElem )
           resultElems.push_back( resElem );
-      while ( iElem < gens.Length() && gens( iElem+1 ) == sourceElem )
-        if ( const SMDS_MeshElement* resElem = elems( ++iElem ))
+      while ( iElem+1 < gens.size() && gens[ iElem+1 ] == sourceElem )
+        if ( const SMDS_MeshElement* resElem = elems[ ++iElem ])
           if ( resElem != sourceElem )
             resultElems.push_back( resElem );
 
@@ -7146,7 +6932,7 @@ SMESH_MeshEditor::generateGroups(const SMESH_SequenceOfElemPtr& nodeGens,
           {
             SMDS_MeshGroup & newTopGroup = gOldNew->get<2>()->SMDSGroup();
             newTopGroup.Add( topElem );
-         }
+          }
         }
       }
     } // loop on created elements
@@ -7233,8 +7019,7 @@ void SMESH_MeshEditor::FindCoincidentNodes (TIDSortedNodeSet &   theNodes,
                                             TListOfListOfNodes & theGroupsOfNodes,
                                             bool                 theSeparateCornersAndMedium)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if ( myMesh->NbEdges  ( ORDER_QUADRATIC ) +
        myMesh->NbFaces  ( ORDER_QUADRATIC ) +
@@ -7247,7 +7032,7 @@ void SMESH_MeshEditor::FindCoincidentNodes (TIDSortedNodeSet &   theNodes,
   if ( theNodes.empty() ) // get all nodes in the mesh
   {
     TIDSortedNodeSet* nodes[2] = { &corners, &medium };
-    SMDS_NodeIteratorPtr nIt = GetMeshDS()->nodesIterator(/*idInceasingOrder=*/true);
+    SMDS_NodeIteratorPtr nIt = GetMeshDS()->nodesIterator();
     if ( theSeparateCornersAndMedium )
       while ( nIt->more() )
       {
@@ -7347,8 +7132,7 @@ int SMESH_MeshEditor::SimplifyFace (const vector<const SMDS_MeshNode *>& faceNod
 void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
                                    const bool           theAvoidMakingHoles)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   SMESHDS_Mesh* mesh = GetMeshDS();
 
@@ -7384,8 +7168,11 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
     const SMDS_MeshNode* nToKeep = nnIt->second;
     TNodeNodeMap::iterator nnIt_i = nodeNodeMap.find( nToKeep );
     while ( nnIt_i != nodeNodeMap.end() && nnIt_i->second != nnIt->second )
+    {
       nToKeep = nnIt_i->second;
-    nnIt->second = nToKeep;
+      nnIt->second = nToKeep;
+      nnIt_i = nodeNodeMap.find( nToKeep );
+    }
   }
 
   if ( theAvoidMakingHoles )
@@ -7436,7 +7223,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
       AddToSameGroups( nToKeep, nToRemove, mesh );
       // set _alwaysComputed to a sub-mesh of VERTEX to enable further mesh computing
       // w/o creating node in place of merged ones.
-      const SMDS_PositionPtr& pos = nToRemove->GetPosition();
+      SMDS_PositionPtr pos = nToRemove->GetPosition();
       if ( pos && pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
         if ( SMESH_subMesh* sm = myMesh->GetSubMeshContaining( nToRemove->getshapeId() ))
           sm->SetIsAlwaysComputed( true );
@@ -7624,7 +7411,7 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
       if ( nbUniqueNodes >= 4 )
       {
         // each face has to be analyzed in order to check volume validity
-        if ( const SMDS_VtkVolume* aPolyedre = dynamic_cast<const SMDS_VtkVolume*>( elem ))
+        if ( const SMDS_MeshVolume* aPolyedre = SMDS_Mesh::DownCast< SMDS_MeshVolume >( elem ))
         {
           int nbFaces = aPolyedre->NbFaces();
 
@@ -7942,26 +7729,55 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
 
 
 // ========================================================
-// class   : SortableElement
-// purpose : allow sorting elements basing on their nodes
+// class   : ComparableElement
+// purpose : allow comparing elements basing on their nodes
 // ========================================================
-class SortableElement : public set <const SMDS_MeshElement*>
+
+class ComparableElement : public boost::container::flat_set< int >
 {
+  typedef boost::container::flat_set< int >  int_set;
+
+  const SMDS_MeshElement* myElem;
+  int                     mySumID;
+  mutable int             myGroupID;
+
 public:
 
-  SortableElement( const SMDS_MeshElement* theElem )
+  ComparableElement( const SMDS_MeshElement* theElem ):
+    myElem ( theElem ), mySumID( 0 ), myGroupID( -1 )
   {
-    myElem = theElem;
-    SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator();
-    while ( nodeIt->more() )
-      this->insert( nodeIt->next() );
+    this->reserve( theElem->NbNodes() );
+    for ( SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator(); nodeIt->more(); )
+    {
+      int id = nodeIt->next()->GetID();
+      mySumID += id;
+      this->insert( id );
+    }
   }
 
-  const SMDS_MeshElement* Get() const
-  { return myElem; }
+  const SMDS_MeshElement* GetElem() const { return myElem; }
+
+  int& GroupID() const { return myGroupID; }
+  //int& GroupID() const { return const_cast< int& >( myGroupID ); }
+
+  ComparableElement( const ComparableElement& theSource ) // move copy
+  {
+    ComparableElement& src = const_cast< ComparableElement& >( theSource );
+    (int_set&) (*this ) = boost::move( src );
+    myElem    = src.myElem;
+    mySumID   = src.mySumID;
+    myGroupID = src.myGroupID;
+  }
+
+  static int HashCode(const ComparableElement& se, int limit )
+  {
+    return ::HashCode( se.mySumID, limit );
+  }
+  static Standard_Boolean IsEqual(const ComparableElement& se1, const ComparableElement& se2 )
+  {
+    return ( se1 == se2 );
+  }
 
-private:
-  mutable const SMDS_MeshElement* myElem;
 };
 
 //=======================================================================
@@ -7970,49 +7786,47 @@ private:
 //           Search among theElements or in the whole mesh if theElements is empty
 //=======================================================================
 
-void SMESH_MeshEditor::FindEqualElements(TIDSortedElemSet &        theElements,
-                                         TListOfListOfElementsID & theGroupsOfElementsID)
+void SMESH_MeshEditor::FindEqualElements( TIDSortedElemSet &        theElements,
+                                          TListOfListOfElementsID & theGroupsOfElementsID )
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
-
-  typedef map< SortableElement, int > TMapOfNodeSet;
-  typedef list<int> TGroupOfElems;
+  ClearLastCreated();
 
   SMDS_ElemIteratorPtr elemIt;
   if ( theElements.empty() ) elemIt = GetMeshDS()->elementsIterator();
-  else                       elemIt = elemSetIterator( theElements );
+  else                       elemIt = SMESHUtils::elemSetIterator( theElements );
 
-  vector< TGroupOfElems > arrayOfGroups;
-  TGroupOfElems groupOfElems;
-  TMapOfNodeSet mapOfNodeSet;
+  typedef NCollection_Map< ComparableElement, ComparableElement > TMapOfElements;
+  typedef std::list<int>                                          TGroupOfElems;
+  TMapOfElements               mapOfElements;
+  std::vector< TGroupOfElems > arrayOfGroups;
+  TGroupOfElems                groupOfElems;
 
-  for ( int iGroup = 0; elemIt->more(); )
+  while ( elemIt->more() )
   {
     const SMDS_MeshElement* curElem = elemIt->next();
-    SortableElement SE(curElem);
+    ComparableElement      compElem = curElem;
     // check uniqueness
-    pair< TMapOfNodeSet::iterator, bool> pp = mapOfNodeSet.insert(make_pair(SE, iGroup));
-    if ( !pp.second ) { // one more coincident elem
-      TMapOfNodeSet::iterator& itSE = pp.first;
-      int iG = itSE->second;
+    const ComparableElement& elemInSet = mapOfElements.Added( compElem );
+    if ( elemInSet.GetElem() != curElem ) // coincident elem
+    {
+      int& iG = elemInSet.GroupID();
+      if ( iG < 0 )
+      {
+        iG = arrayOfGroups.size();
+        arrayOfGroups.push_back( groupOfElems );
+        arrayOfGroups[ iG ].push_back( elemInSet.GetElem()->GetID() );
+      }
       arrayOfGroups[ iG ].push_back( curElem->GetID() );
     }
-    else {
-      arrayOfGroups.push_back( groupOfElems );
-      arrayOfGroups.back().push_back( curElem->GetID() );
-      iGroup++;
-    }
   }
 
   groupOfElems.clear();
-  vector< TGroupOfElems >::iterator groupIt = arrayOfGroups.begin();
+  std::vector< TGroupOfElems >::iterator groupIt = arrayOfGroups.begin();
   for ( ; groupIt != arrayOfGroups.end(); ++groupIt )
   {
     if ( groupIt->size() > 1 ) {
-      //groupOfElems.sort(); -- theElements is sorted already
-      theGroupsOfElementsID.push_back( groupOfElems );
-      theGroupsOfElementsID.back().splice( theGroupsOfElementsID.back().end(), *groupIt );
+      //groupOfElems.sort(); -- theElements are sorted already
+      theGroupsOfElementsID.emplace_back( *groupIt );
     }
   }
 }
@@ -8024,8 +7838,7 @@ void SMESH_MeshEditor::FindEqualElements(TIDSortedElemSet &        theElements,
 
 void SMESH_MeshEditor::MergeElements(TListOfListOfElementsID & theGroupsOfElementsID)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   typedef list<int> TListOfIDs;
   TListOfIDs rmElemIds; // IDs of elems to remove
@@ -8064,8 +7877,8 @@ void SMESH_MeshEditor::MergeEqualElements()
   TIDSortedElemSet aMeshElements; /* empty input ==
                                      to merge equal elements in the whole mesh */
   TListOfListOfElementsID aGroupsOfElementsID;
-  FindEqualElements(aMeshElements, aGroupsOfElementsID);
-  MergeElements(aGroupsOfElementsID);
+  FindEqualElements( aMeshElements, aGroupsOfElementsID );
+  MergeElements( aGroupsOfElementsID );
 }
 
 //=======================================================================
@@ -8143,24 +7956,11 @@ bool SMESH_MeshEditor::FindFreeBorder (const SMDS_MeshNode*             theFirst
       if ( e == curElem || foundElems.insert( e ).second ) {
         // get nodes
         int iNode = 0, nbNodes = e->NbNodes();
-        vector<const SMDS_MeshNode*> nodes(nbNodes+1);
-
-        if ( e->IsQuadratic() ) {
-          const SMDS_VtkFace* F =
-            dynamic_cast<const SMDS_VtkFace*>(e);
-          if (!F) throw SALOME_Exception(LOCALIZED("not an SMDS_VtkFace"));
-          // use special nodes iterator
-          SMDS_ElemIteratorPtr anIter = F->interlacedNodesElemIterator();
-          while( anIter->more() ) {
-            nodes[ iNode++ ] = cast2Node(anIter->next());
-          }
-        }
-        else {
-          SMDS_ElemIteratorPtr nIt = e->nodesIterator();
-          while ( nIt->more() )
-            nodes[ iNode++ ] = static_cast<const SMDS_MeshNode*>( nIt->next() );
-        }
-        nodes[ iNode ] = nodes[ 0 ];
+        vector<const SMDS_MeshNode*> nodes( nbNodes+1 );
+        nodes.assign( SMDS_MeshElement::iterator( e->interlacedNodesIterator() ),
+                      SMDS_MeshElement::iterator() );
+        nodes.push_back( nodes[ 0 ]);
+
         // check 2 links
         for ( iNode = 0; iNode < nbNodes; iNode++ )
           if (((nodes[ iNode ] == nStart && nodes[ iNode + 1] != nIgnore ) ||
@@ -8227,7 +8027,7 @@ bool SMESH_MeshEditor::FindFreeBorder (const SMDS_MeshNode*             theFirst
       if ( contNodes[0].empty() && contNodes[1].empty() )
         return false;
 
-      // append the best free border
+      // push_back the best free border
       cNL = & contNodes[ contNodes[0].empty() ? 1 : 0 ];
       cFL = & contFaces[ contFaces[0].empty() ? 1 : 0 ];
       theNodes.pop_back(); // remove nIgnore
@@ -8277,8 +8077,7 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
                                  const bool           toCreatePolygons,
                                  const bool           toCreatePolyedrs)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   Sew_Error aResult = SEW_OK;
 
@@ -8418,27 +8217,13 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
         const SMDS_MeshNode** nodes = isVolume ? volume.GetNodes() : & faceNodes[0];
         if ( isVolume ) // --volume
           hasVolumes = true;
-        else if ( elem->GetType()==SMDSAbs_Face ) { // --face
+        else if ( elem->GetType() == SMDSAbs_Face ) { // --face
           // retrieve all face nodes and find iPrevNode - an index of the prevSideNode
-          if(elem->IsQuadratic()) {
-            const SMDS_VtkFace* F =
-              dynamic_cast<const SMDS_VtkFace*>(elem);
-            if (!F) throw SALOME_Exception(LOCALIZED("not an SMDS_VtkFace"));
-            // use special nodes iterator
-            SMDS_ElemIteratorPtr anIter = F->interlacedNodesElemIterator();
-            while( anIter->more() ) {
-              nodes[ iNode ] = cast2Node(anIter->next());
-              if ( nodes[ iNode++ ] == prevSideNode )
-                iPrevNode = iNode - 1;
-            }
-          }
-          else {
-            SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
-            while ( nIt->more() ) {
-              nodes[ iNode ] = cast2Node( nIt->next() );
-              if ( nodes[ iNode++ ] == prevSideNode )
-                iPrevNode = iNode - 1;
-            }
+          SMDS_NodeIteratorPtr nIt = elem->interlacedNodesIterator();
+          while ( nIt->more() ) {
+            nodes[ iNode ] = cast2Node( nIt->next() );
+            if ( nodes[ iNode++ ] == prevSideNode )
+              iPrevNode = iNode - 1;
           }
           // there are 2 links to check
           nbNodes = 2;
@@ -8731,19 +8516,20 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
   // get new segments
   TIDSortedElemSet segments;
   SMESH_SequenceOfElemPtr newFaces;
-  for ( int i = 1; i <= myLastCreatedElems.Length(); ++i )
+  for ( size_t i = 0; i < myLastCreatedElems.size(); ++i )
   {
-    if ( !myLastCreatedElems(i) ) continue;
-    if ( myLastCreatedElems(i)->GetType() == SMDSAbs_Edge )
-      segments.insert( segments.end(), myLastCreatedElems(i) );
+    if ( !myLastCreatedElems[i] ) continue;
+    if ( myLastCreatedElems[i]->GetType() == SMDSAbs_Edge )
+      segments.insert( segments.end(), myLastCreatedElems[i] );
     else
-      newFaces.Append( myLastCreatedElems(i) );
+      newFaces.push_back( myLastCreatedElems[i] );
   }
   // get segments adjacent to merged nodes
   TListOfListOfNodes::iterator groupIt = nodeGroupsToMerge.begin();
   for ( ; groupIt != nodeGroupsToMerge.end(); groupIt++ )
   {
     const list<const SMDS_MeshNode*>& nodes = *groupIt;
+    if ( nodes.front()->IsNull() ) continue;
     SMDS_ElemIteratorPtr segIt = nodes.front()->GetInverseElementIterator( SMDSAbs_Edge );
     while ( segIt->more() )
       segments.insert( segIt->next() );
@@ -8772,7 +8558,7 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
     myLastCreatedElems = newFaces;
     TIDSortedElemSet::iterator seg = segments.begin();
     for ( ; seg != segments.end(); ++seg )
-      myLastCreatedElems.Append( *seg );
+      myLastCreatedElems.push_back( *seg );
   }
 
   return aResult;
@@ -8842,7 +8628,7 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theElemen
       if ( newElems[i] )
       {
         aMesh->SetMeshElementOnShape( newElems[i], theElement->getshapeId() );
-        myLastCreatedElems.Append( newElems[i] );
+        myLastCreatedElems.push_back( newElems[i] );
       }
     ReplaceElemInGroups( theElement, newElems, aMesh );
     aMesh->RemoveElement( theElement );
@@ -8898,48 +8684,21 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theElemen
 
     // add nodes of face up to first node of link
     bool isFLN = false;
-
-    if ( theFace->IsQuadratic() ) {
-      const SMDS_VtkFace* F = dynamic_cast<const SMDS_VtkFace*>(theFace);
-      if (!F) throw SALOME_Exception(LOCALIZED("not an SMDS_VtkFace"));
-      // use special nodes iterator
-      SMDS_ElemIteratorPtr anIter = F->interlacedNodesElemIterator();
-      while( anIter->more()  && !isFLN ) {
-        const SMDS_MeshNode* n = cast2Node(anIter->next());
-        poly_nodes[iNode++] = n;
-        if (n == nodes[il1]) {
-          isFLN = true;
-        }
-      }
-      // add nodes to insert
-      list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
-      for (; nIt != aNodesToInsert.end(); nIt++) {
-        poly_nodes[iNode++] = *nIt;
-      }
-      // add nodes of face starting from last node of link
-      while ( anIter->more() ) {
-        poly_nodes[iNode++] = cast2Node(anIter->next());
-      }
+    SMDS_NodeIteratorPtr nodeIt = theFace->interlacedNodesIterator();
+    while ( nodeIt->more() && !isFLN ) {
+      const SMDS_MeshNode* n = nodeIt->next();
+      poly_nodes[iNode++] = n;
+      isFLN = ( n == nodes[il1] );
     }
-    else {
-      SMDS_ElemIteratorPtr nodeIt = theFace->nodesIterator();
-      while ( nodeIt->more() && !isFLN ) {
-        const SMDS_MeshNode* n = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-        poly_nodes[iNode++] = n;
-        if (n == nodes[il1]) {
-          isFLN = true;
-        }
-      }
-      // add nodes to insert
-      list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
-      for (; nIt != aNodesToInsert.end(); nIt++) {
-        poly_nodes[iNode++] = *nIt;
-      }
-      // add nodes of face starting from last node of link
-      while ( nodeIt->more() ) {
-        const SMDS_MeshNode* n = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-        poly_nodes[iNode++] = n;
-      }
+    // add nodes to insert
+    list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
+    for (; nIt != aNodesToInsert.end(); nIt++) {
+      poly_nodes[iNode++] = *nIt;
+    }
+    // add nodes of face starting from last node of link
+    while ( nodeIt->more() ) {
+      const SMDS_MeshNode* n = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
+      poly_nodes[iNode++] = n;
     }
 
     // make a new face
@@ -9103,7 +8862,7 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theElemen
     if ( newElems[i] )
     {
       aMesh->SetMeshElementOnShape( newElems[i], theFace->getshapeId() );
-      myLastCreatedElems.Append( newElems[i] );
+      myLastCreatedElems.push_back( newElems[i] );
     }
   ReplaceElemInGroups( theFace, newElems, aMesh );
   aMesh->RemoveElement(theFace);
@@ -9119,8 +8878,7 @@ void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode*        theBetweenNode
                                       const SMDS_MeshNode*        theBetweenNode2,
                                       list<const SMDS_MeshNode*>& theNodesToInsert)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   SMDS_ElemIteratorPtr invElemIt = theBetweenNode1->GetInverseElementIterator(SMDSAbs_Volume);
   while (invElemIt->more()) { // loop on inverse elements of theBetweenNode1
@@ -9182,7 +8940,7 @@ void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode*        theBetweenNode
     if ( SMDS_MeshElement* newElem = aMesh->AddPolyhedralVolume( poly_nodes, quantities ))
     {
       aMesh->SetMeshElementOnShape( newElem, elem->getshapeId() );
-      myLastCreatedElems.Append( newElem );
+      myLastCreatedElems.push_back( newElem );
       ReplaceElemInGroups( elem, newElem, aMesh );
     }
     aMesh->RemoveElement( elem );
@@ -9282,7 +9040,7 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
     const int nbNodes = elem->NbCornerNodes();
     nodes.assign(elem->begin_nodes(), elem->end_nodes());
     if ( aGeomType == SMDSEntity_Polyhedra )
-      nbNodeInFaces = static_cast<const SMDS_VtkVolume* >( elem )->GetQuantities();
+      nbNodeInFaces = static_cast<const SMDS_MeshVolume* >( elem )->GetQuantities();
     else if ( aGeomType == SMDSEntity_Hexagonal_Prism )
       volumeToPolyhedron( elem, nodes, nbNodeInFaces );
 
@@ -9300,52 +9058,52 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
     switch( aType )
     {
     case SMDSAbs_Edge :
-      {
-        NewElem = theHelper.AddEdge(nodes[0], nodes[1], id, theForce3d);
-        break;
-      }
+    {
+      NewElem = theHelper.AddEdge(nodes[0], nodes[1], id, theForce3d);
+      break;
+    }
     case SMDSAbs_Face :
+    {
+      switch(nbNodes)
       {
-        switch(nbNodes)
-        {
-        case 3:
-          NewElem = theHelper.AddFace(nodes[0], nodes[1], nodes[2], id, theForce3d);
-          break;
-        case 4:
-          NewElem = theHelper.AddFace(nodes[0], nodes[1], nodes[2], nodes[3], id, theForce3d);
-          break;
-        default:
-          NewElem = theHelper.AddPolygonalFace(nodes, id, theForce3d);
-        }
+      case 3:
+        NewElem = theHelper.AddFace(nodes[0], nodes[1], nodes[2], id, theForce3d);
+        break;
+      case 4:
+        NewElem = theHelper.AddFace(nodes[0], nodes[1], nodes[2], nodes[3], id, theForce3d);
         break;
+      default:
+        NewElem = theHelper.AddPolygonalFace(nodes, id, theForce3d);
       }
+      break;
+    }
     case SMDSAbs_Volume :
+    {
+      switch( aGeomType )
       {
-        switch( aGeomType )
-        {
-        case SMDSEntity_Tetra:
-          NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], id, theForce3d);
-          break;
-        case SMDSEntity_Pyramid:
-          NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], id, theForce3d);
-          break;
-        case SMDSEntity_Penta:
-        case SMDSEntity_Quad_Penta:
-        case SMDSEntity_BiQuad_Penta:
-          NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], nodes[5], id, theForce3d);
-          break;
-        case SMDSEntity_Hexa:
-        case SMDSEntity_Quad_Hexa:
-        case SMDSEntity_TriQuad_Hexa:
-          NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3],
-                                        nodes[4], nodes[5], nodes[6], nodes[7], id, theForce3d);
-          break;
-        case SMDSEntity_Hexagonal_Prism:
-        default:
-          NewElem = theHelper.AddPolyhedralVolume(nodes, nbNodeInFaces, id, theForce3d);
-        }
+      case SMDSEntity_Tetra:
+        NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], id, theForce3d);
+        break;
+      case SMDSEntity_Pyramid:
+        NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], id, theForce3d);
+        break;
+      case SMDSEntity_Penta:
+      case SMDSEntity_Quad_Penta:
+      case SMDSEntity_BiQuad_Penta:
+        NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], nodes[5], id, theForce3d);
         break;
+      case SMDSEntity_Hexa:
+      case SMDSEntity_Quad_Hexa:
+      case SMDSEntity_TriQuad_Hexa:
+        NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3],
+                                      nodes[4], nodes[5], nodes[6], nodes[7], id, theForce3d);
+        break;
+      case SMDSEntity_Hexagonal_Prism:
+      default:
+        NewElem = theHelper.AddPolyhedralVolume(nodes, nbNodeInFaces, id, theForce3d);
       }
+      break;
+    }
     default :
       continue;
     }
@@ -9503,7 +9261,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
       const int id = volume->GetID();
       vector<const SMDS_MeshNode *> nodes (volume->begin_nodes(), volume->end_nodes());
       if ( type == SMDSEntity_Polyhedra )
-        nbNodeInFaces = static_cast<const SMDS_VtkVolume* >(volume)->GetQuantities();
+        nbNodeInFaces = static_cast<const SMDS_MeshVolume* >(volume)->GetQuantities();
       else if ( type == SMDSEntity_Hexagonal_Prism )
         volumeToPolyhedron( volume, nodes, nbNodeInFaces );
 
@@ -9723,7 +9481,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool        theForce3d,
     if( newElem && smDS )
       smDS->AddElement( newElem );
 
-     // remove central nodes
+    // remove central nodes
     for ( size_t i = nodes.size() - nbCentralNodes; i < nodes.size(); ++i )
       if ( nodes[i]->NbInverseElements() == 0 )
         meshDS->RemoveFreeNode( nodes[i], smDS, /*fromGroups=*/true );
@@ -9857,7 +9615,7 @@ void SMESH_MeshEditor::ConvertFromQuadratic(TIDSortedElemSet& theElements)
   }
 
   // replace given elements by linear ones
-  SMDS_ElemIteratorPtr elemIt = elemSetIterator( theElements );
+  SMDS_ElemIteratorPtr elemIt = SMESHUtils::elemSetIterator( theElements );
   removeQuadElem( /*theSm=*/0, elemIt, /*theShapeID=*/0 );
 
   // we need to convert remaining elements whose all medium nodes are in mediumNodeIDs
@@ -9909,7 +9667,7 @@ void SMESH_MeshEditor::ConvertFromQuadratic(TIDSortedElemSet& theElements)
       }
     }
   }
-  elemIt = elemSetIterator( moreElemsToConvert );
+  elemIt = SMESHUtils::elemSetIterator( moreElemsToConvert );
   removeQuadElem( /*theSm=*/0, elemIt, /*theShapeID=*/0 );
 }
 
@@ -9926,8 +9684,7 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
                                    const SMDS_MeshNode* theSecondNode1,
                                    const SMDS_MeshNode* theSecondNode2)
 {
-  myLastCreatedElems.Clear();
-  myLastCreatedNodes.Clear();
+  ClearLastCreated();
 
   if ( theSide1.size() != theSide2.size() )
     return SEW_DIFF_NB_OF_ELEMENTS;
@@ -10203,12 +9960,12 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
 
   if ( faceSet1.size() != faceSet2.size() ) {
     // delete temporary faces: they are in reverseElements of actual nodes
-//    SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator();
-//    while ( tmpFaceIt->more() )
-//      aTmpFacesMesh.RemoveElement( tmpFaceIt->next() );
-//    list<const SMDS_MeshElement* >::iterator tmpFaceIt = tempFaceList.begin();
-//    for (; tmpFaceIt !=tempFaceList.end(); ++tmpFaceIt)
-//      aMesh->RemoveElement(*tmpFaceIt);
+    //    SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator();
+    //    while ( tmpFaceIt->more() )
+    //      aTmpFacesMesh.RemoveElement( tmpFaceIt->next() );
+    //    list<const SMDS_MeshElement* >::iterator tmpFaceIt = tempFaceList.begin();
+    //    for (; tmpFaceIt !=tempFaceList.end(); ++tmpFaceIt)
+    //      aMesh->RemoveElement(*tmpFaceIt);
     MESSAGE("Diff nb of faces");
     return SEW_TOPO_DIFF_SETS_OF_ELEMENTS;
   }
@@ -10266,20 +10023,8 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
         //cout << " F " << face[ iSide]->GetID() <<endl;
         faceSetPtr[ iSide ]->erase( face[ iSide ]);
         // put face nodes to fnodes
-        if ( face[ iSide ]->IsQuadratic() )
-        {
-          // use interlaced nodes iterator
-          const SMDS_VtkFace* F = dynamic_cast<const SMDS_VtkFace*>( face[ iSide ]);
-          if (!F) throw SALOME_Exception(LOCALIZED("not an SMDS_VtkFace"));
-          SMDS_ElemIteratorPtr nIter = F->interlacedNodesElemIterator();
-          while ( nIter->more() )
-            fnodes[ iSide ].push_back( cast2Node( nIter->next() ));
-        }
-        else
-        {
-          fnodes[ iSide ].assign( face[ iSide ]->begin_nodes(),
-                                  face[ iSide ]->end_nodes() );
-        }
+        SMDS_MeshElement::iterator nIt( face[ iSide ]->interlacedNodesIterator() ), nEnd;
+        fnodes[ iSide ].assign( nIt, nEnd );
         fnodes[ iSide ].push_back( fnodes[ iSide ].front());
       }
     }
@@ -10347,7 +10092,7 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
 
   if ( aResult == SEW_OK &&
        ( //linkIt[0] != linkList[0].end() ||
-         !faceSetPtr[0]->empty() || !faceSetPtr[1]->empty() )) {
+        !faceSetPtr[0]->empty() || !faceSetPtr[1]->empty() )) {
     MESSAGE( (linkIt[0] != linkList[0].end()) <<" "<< (faceSetPtr[0]->empty()) <<
              " " << (faceSetPtr[1]->empty()));
     aResult = SEW_TOPO_DIFF_SETS_OF_ELEMENTS;
@@ -10358,9 +10103,9 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
   // ====================================================================
 
   // delete temporary faces
-//  SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator();
-//  while ( tmpFaceIt->more() )
-//    aTmpFacesMesh.RemoveElement( tmpFaceIt->next() );
+  //  SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator();
+  //  while ( tmpFaceIt->more() )
+  //    aTmpFacesMesh.RemoveElement( tmpFaceIt->next() );
   list<const SMDS_MeshElement* >::iterator tmpFaceIt = tempFaceList.begin();
   for (; tmpFaceIt !=tempFaceList.end(); ++tmpFaceIt)
     aMesh->RemoveElement(*tmpFaceIt);
@@ -11175,14 +10920,14 @@ void SMESH_MeshEditor::DoubleElements( const TIDSortedElemSet& theElements )
       if ( mesh->GetMeshInfo().NbElements( types[i] ))
       {
         type = types[i];
+        elemIt = mesh->elementsIterator( type );
         break;
       }
-    elemIt = mesh->elementsIterator( type );
   }
   else
   {
     type = (*theElements.begin())->GetType();
-    elemIt = elemSetIterator( theElements );
+    elemIt = SMESHUtils::elemSetIterator( theElements );
   }
 
   // un-mark all elements to avoid duplicating just created elements
@@ -11291,7 +11036,7 @@ bool SMESH_MeshEditor::doubleNodes(SMESHDS_Mesh*           theMeshDS,
         aNewNode = theMeshDS->AddNode( aCurrNode->X(), aCurrNode->Y(), aCurrNode->Z() );
         copyPosition( aCurrNode, aNewNode );
         theNodeNodeMap[ aCurrNode ] = aNewNode;
-        myLastCreatedNodes.Append( aNewNode );
+        myLastCreatedNodes.push_back( aNewNode );
       }
       isDuplicate |= (aCurrNode != aNewNode);
       newNodes[ ind++ ] = aNewNode;
@@ -11350,7 +11095,7 @@ bool SMESH_MeshEditor::DoubleNodes( const std::list< int >& theListOfNodes,
     {
       copyPosition( aNode, aNewNode );
       anOldNodeToNewNode[ aNode ] = aNewNode;
-      myLastCreatedNodes.Append( aNewNode );
+      myLastCreatedNodes.push_back( aNewNode );
     }
   }
 
@@ -11385,8 +11130,8 @@ namespace {
 
   //================================================================================
   /*!
-  \brief Check if element located inside shape
-  \return TRUE if IN or ON shape, FALSE otherwise
+    \brief Check if element located inside shape
+    \return TRUE if IN or ON shape, FALSE otherwise
   */
   //================================================================================
 
@@ -11396,8 +11141,7 @@ namespace {
                 const double            theTol)
   {
     gp_XYZ centerXYZ (0, 0, 0);
-    SMDS_ElemIteratorPtr aNodeItr = theElem->nodesIterator();
-    while ( aNodeItr->more() )
+    for ( SMDS_ElemIteratorPtr aNodeItr = theElem->nodesIterator(); aNodeItr->more(); )
       centerXYZ += SMESH_NodeXYZ( aNodeItr->next() );
 
     gp_Pnt aPnt = centerXYZ / theElem->NbNodes();
@@ -11622,7 +11366,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
   SMESHDS_Mesh *meshDS = this->myMesh->GetMeshDS();
   meshDS->BuildDownWardConnectivity(true);
   CHRONO(50);
-  SMDS_UnstructuredGrid *grid = meshDS->getGrid();
+  SMDS_UnstructuredGrid *grid = meshDS->GetGrid();
 
   // --- build the list of faces shared by 2 domains (group of elements), with their domain and volume indexes
   //     build the list of cells with only a node or an edge on the border, with their domain and volume indexes
@@ -11688,7 +11432,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       const SMDS_MeshElement* anElem = *elemItr;
       if (!anElem)
         continue;
-      int vtkId = anElem->getVtkId();
+      int vtkId = anElem->GetVtkID();
       //MESSAGE("  vtkId " << vtkId << " smdsId " << anElem->GetID());
       int neighborsVtkIds[NBMAXNEIGHBORS];
       int downIds[NBMAXNEIGHBORS];
@@ -11696,7 +11440,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       int nbNeighbors = grid->GetNeighbors(neighborsVtkIds, downIds, downTypes, vtkId);
       for (int n = 0; n < nbNeighbors; n++)
       {
-        int smdsId = meshDS->fromVtkToSmds(neighborsVtkIds[n]);
+        int smdsId = meshDS->FromVtkToSmds(neighborsVtkIds[n]);
         const SMDS_MeshElement* elem = meshDS->FindElement(smdsId);
         if (elem && ! domain.count(elem)) // neighbor is in another domain : face is shared
         {
@@ -11759,7 +11503,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
         for (int i=0; i<l.ncells; i++)
         {
           int vtkId = l.cells[i];
-          const SMDS_MeshElement* anElem = GetMeshDS()->FindElement(GetMeshDS()->fromVtkToSmds(vtkId));
+          const SMDS_MeshElement* anElem = GetMeshDS()->FindElement(GetMeshDS()->FromVtkToSmds(vtkId));
           if (!domain.count(anElem))
             continue;
           int vtkType = grid->GetCellType(vtkId);
@@ -11843,7 +11587,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
             double *coords = grid->GetPoint(oldId);
             SMDS_MeshNode *newNode = meshDS->AddNode(coords[0], coords[1], coords[2]);
             copyPosition( meshDS->FindNodeVtk( oldId ), newNode );
-            int newId = newNode->getVtkId();
+            int newId = newNode->GetVtkID();
             nodeDomains[oldId][idom] = newId; // cloned node for other domains
             //MESSAGE("-+-+-c     oldNode " << oldId << " domain " << idomain << " newNode " << newId << " domain " << idom << " size=" <<nodeDomains[oldId].size());
           }
@@ -11916,7 +11660,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
                 gp_Pnt p1(coords[0], coords[1], coords[2]);
                 gp_Pnt gref;
                 int vtkVolIds[1000];  // an edge can belong to a lot of volumes
-                map<int, SMDS_VtkVolume*> domvol; // domain --> a volume with the edge
+                map<int, SMDS_MeshVolume*> domvol; // domain --> a volume with the edge
                 map<int, double> angleDom; // oriented angles between planes defined by edge and volume centers
                 int nbvol = grid->GetParentVolumes(vtkVolIds, downEdgeIds[ie], edgeType[ie]);
                 for ( size_t id = 0; id < doms.size(); id++ )
@@ -11925,26 +11669,31 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
                   const TIDSortedElemSet& domain = (idom == iRestDom) ? theRestDomElems : theElems[idom];
                   for ( int ivol = 0; ivol < nbvol; ivol++ )
                   {
-                    int smdsId = meshDS->fromVtkToSmds(vtkVolIds[ivol]);
-                    SMDS_MeshElement* elem = (SMDS_MeshElement*)meshDS->FindElement(smdsId);
+                    int smdsId = meshDS->FromVtkToSmds(vtkVolIds[ivol]);
+                    const SMDS_MeshElement* elem = meshDS->FindElement(smdsId);
                     if (domain.count(elem))
                     {
-                      SMDS_VtkVolume* svol = dynamic_cast<SMDS_VtkVolume*>(elem);
-                      domvol[idom] = svol;
+                      const SMDS_MeshVolume* svol = SMDS_Mesh::DownCast<SMDS_MeshVolume>(elem);
+                      domvol[idom] = (SMDS_MeshVolume*) svol;
                       //MESSAGE("  domain " << idom << " volume " << elem->GetID());
-                      double values[3];
+                      double values[3] = { 0,0,0 };
                       vtkIdType npts = 0;
                       vtkIdType* pts = 0;
                       grid->GetCellPoints(vtkVolIds[ivol], npts, pts);
-                      SMDS_VtkVolume::gravityCenter(grid, pts, npts, values);
-                      if (id ==0)
+                      for ( vtkIdType i = 0; i < npts; ++i )
+                      {
+                        double *coords = grid->GetPoint( pts[i] );
+                        for ( int j = 0; j < 3; ++j )
+                          values[j] += coords[j] / npts;
+                      }
+                      if ( id == 0 )
                       {
-                        gref.SetXYZ(gp_XYZ(values[0], values[1], values[2]));
+                        gref.SetCoord( values[0], values[1], values[2] );
                         angleDom[idom] = 0;
                       }
                       else
                       {
-                        gp_Pnt g(values[0], values[1], values[2]);
+                        gp_Pnt g( values[0], values[1], values[2] );
                         angleDom[idom] = OrientedAngle(p0, p1, gref, g); // -pi<angle<+pi
                         //MESSAGE("  angle=" << angleDom[idom]);
                       }
@@ -12133,7 +11882,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
               feDom[vtkId] = idomain;
               faceOrEdgeDom[aCell] = emptyMap;
               faceOrEdgeDom[aCell][idomain] = vtkId; // affect face or edge to the first domain only
-              //MESSAGE("affect cell " << this->GetMeshDS()->fromVtkToSmds(vtkId) << " domain " << idomain
+              //MESSAGE("affect cell " << this->GetMeshDS()->FromVtkToSmds(vtkId) << " domain " << idomain
               //        << " type " << vtkType << " downId " << downId);
             }
       }
@@ -12165,7 +11914,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       {
         int idom = itdom->first;
         int vtkVolId = itdom->second;
-        //MESSAGE("modify nodes of cell " << this->GetMeshDS()->fromVtkToSmds(vtkVolId) << " domain " << idom);
+        //MESSAGE("modify nodes of cell " << this->GetMeshDS()->FromVtkToSmds(vtkVolId) << " domain " << idom);
         localClonedNodeIds.clear();
         for (itn = oldNodes.begin(); itn != oldNodes.end(); ++itn)
         {
@@ -12232,8 +11981,7 @@ bool SMESH_MeshEditor::CreateFlatElementsOnFacesGroups(const std::vector<TIDSort
     TIDSortedElemSet::const_iterator elemItr = domain.begin();
     for ( ; elemItr != domain.end(); ++elemItr )
     {
-      SMDS_MeshElement* anElem = (SMDS_MeshElement*) *elemItr;
-      SMDS_MeshFace* aFace = dynamic_cast<SMDS_MeshFace*> (anElem);
+      const SMDS_MeshFace* aFace = meshDS->DownCast<SMDS_MeshFace> ( *elemItr );
       if (!aFace)
         continue;
       // MESSAGE("aFace=" << aFace->GetID());
@@ -12242,11 +11990,11 @@ bool SMESH_MeshEditor::CreateFlatElementsOnFacesGroups(const std::vector<TIDSort
 
       // --- clone the nodes, create intermediate nodes for non medium nodes of a quad face
 
-      SMDS_ElemIteratorPtr nodeIt = aFace->nodesIterator();
+      SMDS_NodeIteratorPtr nodeIt = aFace->nodeIterator();
       while (nodeIt->more())
       {
-        const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*> (nodeIt->next());
-        bool isMedium = isQuad && (aFace->IsMediumNode(node));
+        const SMDS_MeshNode* node = nodeIt->next();
+        bool isMedium = ( isQuad && aFace->IsMediumNode( node ));
         if (isMedium)
           ln2.push_back(node);
         else
@@ -12354,7 +12102,7 @@ bool SMESH_MeshEditor::CreateFlatElementsOnFacesGroups(const std::vector<TIDSort
 
       // --- modify the face
 
-      aFace->ChangeNodes(&ln[0], ln.size());
+      const_cast<SMDS_MeshFace*>( aFace )->ChangeNodes( &ln[0], ln.size() );
     }
   }
   return true;
@@ -12465,7 +12213,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
 
   SMESHDS_Mesh *meshDS = this->myMesh->GetMeshDS();
   meshDS->BuildDownWardConnectivity(true);
-  SMDS_UnstructuredGrid* grid = meshDS->getGrid();
+  SMDS_UnstructuredGrid* grid = meshDS->GetGrid();
 
   // --- set of volumes detected inside
 
@@ -12492,7 +12240,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
       while (volItr->more())
       {
         vol = (SMDS_MeshElement*)volItr->next();
-        setOfInsideVol.insert(vol->getVtkId());
+        setOfInsideVol.insert(vol->GetVtkID());
         sgrp->Add(vol->GetID());
       }
     }
@@ -12547,7 +12295,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
     while (volItr->more())
     {
       startVol = (SMDS_MeshElement*)volItr->next();
-      setOfVolToCheck.insert(startVol->getVtkId());
+      setOfVolToCheck.insert(startVol->GetVtkID());
     }
     if (setOfVolToCheck.empty())
     {
@@ -12566,7 +12314,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
     {
       std::set<int>::iterator it = setOfVolToCheck.begin();
       int vtkId = *it;
-      //MESSAGE("volume to check,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+      //MESSAGE("volume to check,  vtkId " << vtkId << " smdsId " << meshDS->FromVtkToSmds(vtkId));
       bool volInside = false;
       vtkIdType npts = 0;
       vtkIdType* pts = 0;
@@ -12600,14 +12348,14 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
         if (distance2 < radius2)
         {
           volInside = true; // one or more nodes inside the domain
-          sgrp->Add(meshDS->fromVtkToSmds(vtkId));
+          sgrp->Add(meshDS->FromVtkToSmds(vtkId));
           break;
         }
       }
       if (volInside)
       {
         setOfInsideVol.insert(vtkId);
-        //MESSAGE("  volume inside,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+        //MESSAGE("  volume inside,  vtkId " << vtkId << " smdsId " << meshDS->FromVtkToSmds(vtkId));
         int neighborsVtkIds[NBMAXNEIGHBORS];
         int downIds[NBMAXNEIGHBORS];
         unsigned char downTypes[NBMAXNEIGHBORS];
@@ -12619,7 +12367,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
       else
       {
         setOfOutsideVol.insert(vtkId);
-        //MESSAGE("  volume outside, vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+        //MESSAGE("  volume outside, vtkId " << vtkId << " smdsId " << meshDS->FromVtkToSmds(vtkId));
       }
       setOfVolToCheck.erase(vtkId);
     }
@@ -12654,7 +12402,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
       int vtkId = *it;
       if (grid->GetCellType(vtkId) == VTK_HEXAHEDRON)
       {
-        //MESSAGE("volume to recheck,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+        //MESSAGE("volume to recheck,  vtkId " << vtkId << " smdsId " << meshDS->FromVtkToSmds(vtkId));
         int countInside = 0;
         int neighborsVtkIds[NBMAXNEIGHBORS];
         int downIds[NBMAXNEIGHBORS];
@@ -12666,9 +12414,9 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
         //MESSAGE("countInside " << countInside);
         if (countInside > 1)
         {
-          //MESSAGE("  volume inside,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+          //MESSAGE("  volume inside,  vtkId " << vtkId << " smdsId " << meshDS->FromVtkToSmds(vtkId));
           setOfInsideVol.insert(vtkId);
-          sgrp->Add(meshDS->fromVtkToSmds(vtkId));
+          sgrp->Add(meshDS->FromVtkToSmds(vtkId));
           addedInside = true;
         }
         else
@@ -12689,7 +12437,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
   for (; it != setOfInsideVol.end(); ++it)
   {
     int vtkId = *it;
-    //MESSAGE("  vtkId " << vtkId  << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+    //MESSAGE("  vtkId " << vtkId  << " smdsId " << meshDS->FromVtkToSmds(vtkId));
     int neighborsVtkIds[NBMAXNEIGHBORS];
     int downIds[NBMAXNEIGHBORS];
     unsigned char downTypes[NBMAXNEIGHBORS];
@@ -12708,7 +12456,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
         int vtkFaceId = grid->getDownArray(downTypes[n])->getVtkCellId(downIds[n]);
         if (vtkFaceId >= 0)
         {
-          sgrpi->Add(meshDS->fromVtkToSmds(vtkFaceId));
+          sgrpi->Add(meshDS->FromVtkToSmds(vtkFaceId));
           // find also the smds edges on this face
           int nbEdges = grid->getDownArray(downTypes[n])->getNumberOfDownCells(downIds[n]);
           const int* dEdges = grid->getDownArray(downTypes[n])->getDownCells(downIds[n]);
@@ -12717,7 +12465,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
           {
             int vtkEdgeId = grid->getDownArray(dTypes[i])->getVtkCellId(dEdges[i]);
             if (vtkEdgeId >= 0)
-              sgrpei->Add(meshDS->fromVtkToSmds(vtkEdgeId));
+              sgrpei->Add(meshDS->FromVtkToSmds(vtkEdgeId));
           }
         }
       }
@@ -12727,7 +12475,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
         skinFaces[face] = vtkId;
         int vtkFaceId = grid->getDownArray(downTypes[n])->getVtkCellId(downIds[n]);
         if (vtkFaceId >= 0)
-          sgrps->Add(meshDS->fromVtkToSmds(vtkFaceId));
+          sgrps->Add(meshDS->FromVtkToSmds(vtkFaceId));
       }
     }
   }
@@ -12746,7 +12494,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
   {
     const SMDS_MeshElement *elem = itelem->next();
     int shapeId = elem->getshapeId();
-    int vtkId = elem->getVtkId();
+    int   vtkId = elem->GetVtkID();
     if (!shapeIdToVtkIdSet.count(shapeId))
     {
       shapeIdToVtkIdSet[shapeId] = emptySet;
@@ -12781,7 +12529,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
       {
         if (neighborsVtkIds[n]<0) // only smds faces are considered as neighbors here
           continue;
-        int smdsId = meshDS->fromVtkToSmds(neighborsVtkIds[n]);
+        int smdsId = meshDS->FromVtkToSmds(neighborsVtkIds[n]);
         const SMDS_MeshElement* elem = meshDS->FindElement(smdsId);
         if ( shapeIds.count(elem->getshapeId()) && !sgrps->Contains(elem)) // edge : neighbor in the set of shape, not in the group
         {
@@ -13019,9 +12767,9 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
 
   SMDS_ElemIteratorPtr eIt;
   if (elements.empty()) eIt = aMesh->elementsIterator(elemType);
-  else                  eIt = elemSetIterator( elements );
+  else                  eIt = SMESHUtils::elemSetIterator( elements );
 
-  while (eIt->more())
+  while ( eIt->more() )
   {
     const SMDS_MeshElement* elem = eIt->next();
     const int              iQuad = elem->IsQuadratic();
@@ -13102,7 +12850,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
     else if ( elem->GetType() == SMDSAbs_Face ) // elem is a face ------------------------
     {
       avoidSet.clear(), avoidSet.insert( elem );
-      elemNodes.assign( SMDS_MeshElement::iterator( elem->interlacedNodesElemIterator() ),
+      elemNodes.assign( SMDS_MeshElement::iterator( elem->interlacedNodesIterator() ),
                         SMDS_MeshElement::iterator() );
       elemNodes.push_back( elemNodes[0] );
       nodes.resize( 2 + iQuad );
@@ -13198,7 +12946,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
     else // store present elements to add them to a group
       for ( size_t i = 0 ; i < presentBndElems.size(); ++i )
       {
-        presentEditor->myLastCreatedElems.Append( presentBndElems[ i ]);
+        presentEditor->myLastCreatedElems.push_back( presentBndElems[ i ]);
       }
 
   } // loop on given elements
@@ -13209,11 +12957,11 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
   if ( group )
   {
     if ( SMESHDS_Group* g = dynamic_cast<SMESHDS_Group*>( group->GetGroupDS() ))
-      for ( int i = 0; i < tgtEditor.myLastCreatedElems.Size(); ++i )
-        g->SMDSGroup().Add( tgtEditor.myLastCreatedElems( i+1 ));
+      for ( size_t i = 0; i < tgtEditor.myLastCreatedElems.size(); ++i )
+        g->SMDSGroup().Add( tgtEditor.myLastCreatedElems[ i ]);
   }
-  tgtEditor.myLastCreatedElems.Clear();
-  tgtEditor2.myLastCreatedElems.Clear();
+  tgtEditor.myLastCreatedElems.clear();
+  tgtEditor2.myLastCreatedElems.clear();
 
   // -----------------------
   // 5. Copy given elements
@@ -13221,7 +12969,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
   if ( toCopyElements && targetMesh != myMesh )
   {
     if (elements.empty()) eIt = aMesh->elementsIterator(elemType);
-    else                  eIt = elemSetIterator( elements );
+    else                  eIt = SMESHUtils::elemSetIterator( elements );
     while (eIt->more())
     {
       const SMDS_MeshElement* elem = eIt->next();
@@ -13230,7 +12978,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
         tgtNodes[inode] = getNodeWithSameID( tgtMeshDS, elem->GetNode(inode) );
       tgtEditor.AddElement( tgtNodes, elemToCopy.Init( elem ));
 
-      tgtEditor.myLastCreatedElems.Clear();
+      tgtEditor.myLastCreatedElems.clear();
     }
   }
   return nbAddedBnd;
@@ -13256,7 +13004,7 @@ void SMESH_MeshEditor::copyPosition( const SMDS_MeshNode* from,
 
   case SMDS_TOP_FACE:
   {
-    const SMDS_FacePosition* fPos = static_cast< const SMDS_FacePosition* >( pos );
+    SMDS_FacePositionPtr fPos = pos;
     GetMeshDS()->SetNodeOnFace( to, from->getshapeId(),
                                 fPos->GetUParameter(), fPos->GetVParameter() );
     break;
@@ -13264,7 +13012,7 @@ void SMESH_MeshEditor::copyPosition( const SMDS_MeshNode* from,
   case SMDS_TOP_EDGE:
   {
     // WARNING: it is dangerous to set equal nodes on one EDGE!!!!!!!!
-    const SMDS_EdgePosition* ePos = static_cast< const SMDS_EdgePosition* >( pos );
+    SMDS_EdgePositionPtr ePos = pos;
     GetMeshDS()->SetNodeOnEdge( to, from->getshapeId(), ePos->GetUParameter() );
     break;
   }
@@ -13716,15 +13464,15 @@ void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments&   theSegments,
     if ( !nPrev || ( SMESH_NodeXYZ( nPrev ) - path.myPoints[0] ).SquareModulus() > tol*tol )
     {
       nPrev = mesh->AddNode( path.myPoints[0].X(), path.myPoints[0].Y(), path.myPoints[0].Z() );
-      myLastCreatedNodes.Append( nPrev );
+      myLastCreatedNodes.push_back( nPrev );
     }
     for ( size_t iP = 1; iP < path.myPoints.size(); ++iP )
     {
       n = mesh->AddNode( path.myPoints[iP].X(), path.myPoints[iP].Y(), path.myPoints[iP].Z() );
-      myLastCreatedNodes.Append( n );
+      myLastCreatedNodes.push_back( n );
 
       const SMDS_MeshElement* elem = mesh->AddEdge( nPrev, n );
-      myLastCreatedElems.Append( elem );
+      myLastCreatedElems.push_back( elem );
       if ( theGroup )
         theGroup->Add( elem );
 
index 9a54cb7addd85487c6a3cde93ecb1d2976efb4b0..a864e4d233e47cb6a248c009145cdaa8e6df99b4 100644 (file)
@@ -465,6 +465,13 @@ public:
                        SMESH_Mesh*        theTargetMesh=0);
   // Move or copy theElements applying theTrsf to their nodes
 
+  PGroupIDs Offset( TIDSortedElemSet & theElements,
+                    const double       theValue,
+                    SMESH_Mesh*        theTgtMesh,
+                    const bool         theMakeGroups,
+                    const bool         theFixSelfIntersection);
+  // Make an offset mesh from a source 2D mesh
+
   typedef std::list< std::list< const SMDS_MeshNode* > > TListOfListOfNodes;
 
   void FindCoincidentNodes (TIDSortedNodeSet &   theNodes,
index 0a9251a26bb14960bb6184948cfd8ad53cf62588..ad48bd49d1bdb8a90e740ac56b004ef0086318ec 100644 (file)
@@ -643,22 +643,22 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
 {
   gp_Pnt2d uv( Precision::Infinite(), Precision::Infinite() );
 
-  const SMDS_PositionPtr Pos = n->GetPosition();
+  SMDS_PositionPtr pos = n->GetPosition();
   bool uvOK = false;
-  if ( Pos->GetTypeOfPosition() == SMDS_TOP_FACE )
+  if ( pos->GetTypeOfPosition() == SMDS_TOP_FACE )
   {
     // node has position on face
-    const SMDS_FacePosition* fpos = static_cast<const SMDS_FacePosition*>( Pos );
+    SMDS_FacePositionPtr fpos = pos;
     uv.SetCoord( fpos->GetUParameter(), fpos->GetVParameter() );
     if ( check )
       uvOK = CheckNodeUV( F, n, uv.ChangeCoord(), 2.*getFaceMaxTol( F )); // 2. from 22830
   }
-  else if ( Pos->GetTypeOfPosition() == SMDS_TOP_EDGE )
+  else if ( pos->GetTypeOfPosition() == SMDS_TOP_EDGE )
   {
     // node has position on EDGE => it is needed to find
     // corresponding EDGE from FACE, get pcurve for this
     // EDGE and retrieve value from this pcurve
-    const SMDS_EdgePosition* epos = static_cast<const SMDS_EdgePosition*>( Pos );
+    SMDS_EdgePositionPtr epos = pos;
     const int              edgeID = n->getshapeId();
     const TopoDS_Edge& E = TopoDS::Edge( GetMeshDS()->IndexToShape( edgeID ));
     double f, l, u = epos->GetUParameter();
@@ -699,7 +699,7 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
       uv = newUV;
     }
   }
-  else if ( Pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+  else if ( pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
   {
     if ( int vertexID = n->getshapeId() ) {
       const TopoDS_Vertex& V = TopoDS::Vertex(GetMeshDS()->IndexToShape(vertexID));
@@ -1031,8 +1031,7 @@ double SMESH_MesherHelper::GetNodeU(const TopoDS_Edge&   E,
   const SMDS_PositionPtr pos = n->GetPosition();
   if ( pos->GetTypeOfPosition()==SMDS_TOP_EDGE )
   {
-    const SMDS_EdgePosition* epos = static_cast<const SMDS_EdgePosition*>( pos );
-    param =  epos->GetUParameter();
+    param = pos->GetParameters()[0];
   }
   else if( pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
   {
@@ -4143,9 +4142,9 @@ namespace { // Structures used by FixQuadraticElements()
   {
     // code is valid for convex faces only
     gp_XYZ gc(0,0,0);
-    for ( TIDSortedNodeSet::const_iterator n = begin(); n!=end(); ++n)
-      gc += XYZ( *n ) / size();
-    for (unsigned i = 0; i < _sides.size(); ++i )
+    for ( TIDSortedNodeSet::const_iterator n = begin(); n != end(); ++n )
+      gc += XYZ( *n ) / double( size() );
+    for ( size_t i = 0; i < _sides.size(); ++i )
     {
       if ( _sides[i] == bentLink ) continue;
       gp_Vec linkNorm = _normal ^ gp_Vec( XYZ(_sides[i]->node1()), XYZ(_sides[i]->node2()));
@@ -4161,12 +4160,12 @@ namespace { // Structures used by FixQuadraticElements()
         return true;
     }
     return false;
-    
+
   }
 
   //================================================================================
   /*!
-   * \brief Find pairs of continues faces 
+   * \brief Find pairs of continues faces
    */
   //================================================================================
 
@@ -4562,8 +4561,16 @@ namespace { // Structures used by FixQuadraticElements()
     TopoDS_Shape  shape = theHelper.GetSubShape().Oriented( TopAbs_FORWARD );
     if ( shape.IsNull() ) return;
 
-    if ( !theError ) theError = SMESH_ComputeError::New();
-
+    if ( !dynamic_cast<SMESH_BadInputElements*>( theError.get() ))
+    {
+      if ( !theError )
+        theError.reset( new SMESH_BadInputElements( meshDS ));
+      else
+        theError.reset( new SMESH_BadInputElements( meshDS,
+                                                    theError->myName,
+                                                    theError->myComment,
+                                                    theError->myAlgo));
+    }
     gp_XYZ faceNorm;
 
     if ( shape.ShapeType() == TopAbs_FACE ) // 2D
@@ -4681,13 +4688,13 @@ namespace { // Structures used by FixQuadraticElements()
                 gp_XYZ pMid3D = 0.5 * ( pN0 + SMESH_TNodeXYZ( nOnEdge[1] ));
                 meshDS->MoveNode( n, pMid3D.X(), pMid3D.Y(), pMid3D.Z() );
                 MSG( "move OUT of face " << n );
-                theError->myBadElements.push_back( f );
+                static_cast<SMESH_BadInputElements*>( theError.get() )->add( f );
               }
             }
           }
         }
       }
-      if ( !theError->myBadElements.empty() )
+      if ( theError->HasBadElems() )
         theError->myName = EDITERR_NO_MEDIUM_ON_GEOM;
       return;
 
@@ -4875,13 +4882,13 @@ namespace { // Structures used by FixQuadraticElements()
                   MSG( "move OUT of solid " << nMedium );
                 }
               }
-              theError->myBadElements.push_back( vol );
+              static_cast<SMESH_BadInputElements*>( theError.get() )->add( vol );
             }
           } // loop on volumes sharing a node on FACE
         } // loop on nodes on FACE
       }  // loop on FACEs of a SOLID
 
-      if ( !theError->myBadElements.empty() )
+      if ( theError->HasBadElems() )
         theError->myName = EDITERR_NO_MEDIUM_ON_GEOM;
     } // 3D case
   }
@@ -4893,7 +4900,7 @@ namespace { // Structures used by FixQuadraticElements()
  * \brief Move medium nodes of faces and volumes to fix distorted elements
  * \param error - container of fixed distorted elements
  * \param volumeOnly - to fix nodes on faces or not, if the shape is solid
- * 
+ *
  * Issue 0020307: EDF 992 SMESH : Linea/Quadratic with Medium Node on Geometry
  */
 //=======================================================================
@@ -5268,8 +5275,7 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
               gp_XY newUV   = ApplyIn2D( s, oldUV, gp_XY( move.X(),move.Y()), gp_XY_Added );
               gp_Pnt newPnt = s->Value( newUV.X(), newUV.Y());
               move = gp_Vec( XYZ((*link1)->_mediumNode), newPnt.Transformed(loc) );
-              if ( SMDS_FacePosition* nPos =
-                   dynamic_cast< SMDS_FacePosition* >((*link1)->_mediumNode->GetPosition()))
+              if ( SMDS_FacePositionPtr nPos = (*link1)->_mediumNode->GetPosition())
                 nPos->SetParameters( newUV.X(), newUV.Y() );
 #ifdef _DEBUG_
               if ( (XYZ((*link1)->node1()) - XYZ((*link1)->node2())).SquareModulus() <
index b307ba31c334759c7869b2b73ec0beb83d7c857a..f032ae475df0b522a7bfba9215e39cd17377f41b 100644 (file)
@@ -801,8 +801,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
             ++nbMeduimNodes;
             continue;
           }
-          const SMDS_EdgePosition* epos =
-            static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+          SMDS_EdgePositionPtr epos = node->GetPosition();
           double u = epos->GetUParameter();
           paramNodeMap.insert( make_pair( u, node ));
         }
@@ -929,8 +928,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         if ( theProject || edgesUVBox.IsOut( p->myInitUV ) )
           p->myInitUV = project( node, projector );
         else {
-          const SMDS_FacePosition* pos =
-            static_cast<const SMDS_FacePosition*>(node->GetPosition());
+          SMDS_FacePositionPtr pos = node->GetPosition();
           p->myInitUV.SetCoord( pos->GetUParameter(), pos->GetVParameter() );
         }
         p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
@@ -3288,8 +3286,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*         theMesh,
         const SMDS_MeshNode* node = nIt->next();
         if ( isQuadMesh && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
           continue;
-        const SMDS_EdgePosition* epos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr epos = node->GetPosition();
         double u = ( epos->GetUParameter() - f ) / ( l - f );
         (*pIt)->myInitXYZ.SetCoord( iCoord, isForward ? u : 1 - u );
       }
@@ -4172,7 +4169,8 @@ bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
     createElements( theMesh, nodesVector, myElemPointIDs, myElements );
   }
 
-  aMeshDS->compactMesh();
+  aMeshDS->Modified();
+  aMeshDS->CompactMesh();
 
   if ( myToKeepNodes )
     myOutNodes.swap( nodesVector );
index a28033fda4fe6c43d0bf337a5b1ec1ea1f66f75c..9e2e34792d130057528f85c1d3107b734bddcdc4 100644 (file)
  */
 //================================================================================
 
-SMESH_ProxyMesh::SMESH_ProxyMesh():_mesh(0)
+SMESH_ProxyMesh::SMESH_ProxyMesh():_mesh(0), _subContainer(0)
 {
 }
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+SMESH_ProxyMesh::SMESH_ProxyMesh(const SMESH_Mesh& mesh)
+  : _mesh( &mesh ),
+    _subContainer( new SubMesh( GetMeshDS() ) )
+{
+}
+
 //================================================================================
 /*!
  * \brief Make a proxy mesh from components. Components become empty
@@ -59,7 +71,7 @@ SMESH_ProxyMesh::SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components):
 
     takeTmpElemsInMesh( m );
 
-    if ( !_mesh ) _mesh = m->_mesh;
+    if ( !_mesh && m->_mesh ) setMesh( *( m->_mesh ));
     if ( _allowedTypes.empty() ) _allowedTypes = m->_allowedTypes;
 
     if ( _subMeshes.size() < m->_subMeshes.size() )
@@ -101,6 +113,8 @@ SMESH_ProxyMesh::SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components):
 
 SMESH_ProxyMesh::~SMESH_ProxyMesh()
 {
+  delete _subContainer;
+
   for ( size_t i = 0; i < _subMeshes.size(); ++i )
     delete _subMeshes[i];
   _subMeshes.clear();
@@ -111,6 +125,19 @@ SMESH_ProxyMesh::~SMESH_ProxyMesh()
   _elemsInMesh.clear();
 }
 
+//================================================================================
+/*!
+ * \brief Set mesh
+ */
+//================================================================================
+
+void SMESH_ProxyMesh::setMesh(const SMESH_Mesh& mesh)
+{
+  _mesh = &mesh;
+  if ( _mesh )
+    _subContainer = new SubMesh( GetMeshDS() );
+}
+
 //================================================================================
 /*!
  * \brief Returns index of a shape
@@ -122,6 +149,19 @@ int SMESH_ProxyMesh::shapeIndex(const TopoDS_Shape& shape) const
   return ( shape.IsNull() || !_mesh->HasShapeToMesh() ? 0 : GetMeshDS()->ShapeToIndex(shape));
 }
 
+//================================================================================
+/*!
+ * \brief Create a SubMesh
+ *  \param [ino] index - shape index
+ *  \return SubMesh* - new SubMesh
+ */
+//================================================================================
+
+SMESH_ProxyMesh::SubMesh* SMESH_ProxyMesh::newSubmesh(int index) const
+{
+  return new SubMesh( GetMeshDS(),index );
+}
+
 //================================================================================
 /*!
  * \brief Returns the submesh of a shape; it can be a proxy sub-mesh
@@ -245,15 +285,15 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::GetFaces(const TopoDS_Shape& shape) const
   if ( !_mesh->HasShapeToMesh() )
     return SMDS_ElemIteratorPtr();
 
-  _subContainer.RemoveAllSubmeshes();
+  _subContainer->RemoveAllSubmeshes();
 
   TopTools_IndexedMapOfShape FF;
   TopExp::MapShapes( shape, TopAbs_FACE, FF );
   for ( int i = 1; i <= FF.Extent(); ++i )
     if ( const SMESHDS_SubMesh* sm = GetSubMesh( FF(i)))
-      _subContainer.AddSubMesh( sm );
+      _subContainer->AddSubMesh( sm );
 
-  return _subContainer.SMESHDS_SubMesh::GetElements();
+  return _subContainer->SMESHDS_SubMesh::GetElements();
 }
 
 //================================================================================
@@ -268,16 +308,16 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::GetFaces() const
   if ( _mesh->HasShapeToMesh() )
     return SMDS_ElemIteratorPtr();
 
-  _subContainer.RemoveAllSubmeshes();
+  _subContainer->RemoveAllSubmeshes();
   for ( unsigned i = 0; i < _subMeshes.size(); ++i )
     if ( _subMeshes[i] )
-      _subContainer.AddSubMesh( _subMeshes[i] );
+      _subContainer->AddSubMesh( _subMeshes[i] );
 
-  if ( _subContainer.NbSubMeshes() == 0 ) // no elements substituted
+  if ( _subContainer->NbSubMeshes() == 0 ) // no elements substituted
     return GetMeshDS()->elementsIterator(SMDSAbs_Face);
 
   // if _allowedTypes is empty, only elements from _subMeshes are returned,...
-  SMDS_ElemIteratorPtr proxyIter = _subContainer.SMESHDS_SubMesh::GetElements();
+  SMDS_ElemIteratorPtr proxyIter = _subContainer->SMESHDS_SubMesh::GetElements();
   if ( _allowedTypes.empty() || NbFaces() == _mesh->NbFaces() )
     return proxyIter;
 
@@ -533,7 +573,7 @@ int SMESH_ProxyMesh::SubMesh::NbElements() const
  */
 //================================================================================
 
-SMDS_ElemIteratorPtr SMESH_ProxyMesh::SubMesh::GetElements(bool reverse) const
+SMDS_ElemIteratorPtr SMESH_ProxyMesh::SubMesh::GetElements() const
 {
   return SMDS_ElemIteratorPtr
     ( new SMDS_ElementVectorIterator( _elements.begin(), _elements.end() ));
@@ -558,7 +598,7 @@ int SMESH_ProxyMesh::SubMesh::NbNodes() const
  */
 //================================================================================
 
-SMDS_NodeIteratorPtr SMESH_ProxyMesh::SubMesh::GetNodes(bool reverse) const
+SMDS_NodeIteratorPtr SMESH_ProxyMesh::SubMesh::GetNodes() const
 {
   if ( !_uvPtStructVec.empty() )
     return SMDS_NodeIteratorPtr ( new SMDS_SetIterator
index a64002e02527730fc238d6ca4568f4efeed9927b..35a4c3a97b8ff6d2804084a0a6d7d1cd89ed7a47 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "SMESH_SMESH.hxx"
 
+#include "SMDS_ElementHolder.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_TypeDefs.hxx"
 
@@ -56,7 +57,7 @@ public:
   /*!
    * \brief Proxy sub-mesh
    */
-  class SMESH_EXPORT SubMesh : public SMESHDS_SubMesh
+  class SMESH_EXPORT SubMesh : public SMESHDS_SubMesh, SMDS_ElementHolder
   {
   public:
 
@@ -66,19 +67,20 @@ public:
     virtual void         AddElement(const SMDS_MeshElement * e);
     virtual int          NbElements() const;
     virtual int          NbNodes() const;
-    virtual SMDS_ElemIteratorPtr GetElements(bool reverse=false) const;
-    virtual SMDS_NodeIteratorPtr GetNodes(bool reverse=false) const;
+    virtual SMDS_ElemIteratorPtr GetElements() const;
+    virtual SMDS_NodeIteratorPtr GetNodes() const;
     virtual void         Clear();
     virtual bool         Contains(const SMDS_MeshElement * ME) const;
 
     template< class ITERATOR >
-    void ChangeElements( ITERATOR it, ITERATOR end )
+      void ChangeElements( ITERATOR it, ITERATOR end )
     {
       // change SubMesh contents without deleting tmp elements
       // for which the caller is responsible
       _elements.assign( it, end );
     }
-    SubMesh(int index=0):SMESHDS_SubMesh(0,index),_n2n(0) {}
+    SubMesh(const SMDS_Mesh* mesh, int index=0)
+      :SMESHDS_SubMesh(0,index), SMDS_ElementHolder(mesh), _n2n(0) {}
     virtual ~SubMesh() { Clear(); }
 
   protected:
@@ -86,13 +88,20 @@ public:
     TN2NMap*                              _n2n;
     UVPtStructVec                         _uvPtStructVec; // for SubMesh of EDGE
     friend class SMESH_ProxyMesh;
+
+  protected: // methods of SMDS_ElementHolder; remove elements before mesh compacting or clearing
+    virtual SMDS_ElemIteratorPtr getElements() { Clear(); return GetElements(); }
+    virtual void tmpClear() {}
+    virtual void add( const SMDS_MeshElement* element ) {}
+    virtual void compact() {}
+    virtual void clear() { Clear(); }
   };
   //--------------------------------------------------------------------------------
   // Public interface
 
   SMESH_ProxyMesh();
   SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components);
-  SMESH_ProxyMesh(const SMESH_Mesh& mesh) { _mesh = &mesh; }
+  SMESH_ProxyMesh(const SMESH_Mesh& mesh);
   virtual ~SMESH_ProxyMesh();
 
   // Returns the submesh of a shape; it can be a proxy sub-mesh
@@ -129,11 +138,11 @@ public:
   // Interface for descendants
  protected:
 
-  void     setMesh(const SMESH_Mesh& mesh) { _mesh = &mesh; }
+  void     setMesh(const SMESH_Mesh& mesh);
 
   int      shapeIndex(const TopoDS_Shape& shape) const;
 
-  virtual SubMesh* newSubmesh(int index=0) const { return new SubMesh(index); }
+  virtual SubMesh* newSubmesh(int index=0) const;
 
   // returns a proxy sub-mesh; zero index is for the case of mesh w/o shape
   SubMesh* findProxySubMesh(int shapeIndex=0) const;
@@ -177,7 +186,7 @@ public:
   std::set< const SMDS_MeshElement* > _elemsInMesh;
 
   // Complex submesh used to iterate over elements in other sub-meshes
-  mutable SubMesh _subContainer;
+  mutable SubMesh* _subContainer;
 };
 
 #endif
index 184a45a51cffdcfef1cbe856d757efc5086a97f5..e8a61f295e8675f80d042240b222e5d77b3c80f9 100644 (file)
@@ -512,25 +512,25 @@ bool SMESH_subMesh::CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) cons
 }
 
 //=======================================================================
-//function : IsApplicableHypotesis
+//function : IsApplicableHypothesis
 //purpose  : check if this sub-mesh can be computed using a hypothesis
 //=======================================================================
 
-bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis) const
+bool SMESH_subMesh::IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis) const
 {
   if ( !_father->HasShapeToMesh() && _subShape.ShapeType() == TopAbs_SOLID )
     return true; // true for the PseudoShape
 
-  return IsApplicableHypotesis( theHypothesis, _subShape.ShapeType() );
+  return IsApplicableHypothesis( theHypothesis, _subShape.ShapeType() );
 }
 
 //=======================================================================
-//function : IsApplicableHypotesis
+//function : IsApplicableHypothesis
 //purpose  : compare shape type and hypothesis type
 //=======================================================================
 
-bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
-                                          const TopAbs_ShapeEnum  theShapeType)
+bool SMESH_subMesh::IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis,
+                                           const TopAbs_ShapeEnum  theShapeType)
 {
   if ( theHypothesis->GetType() > SMESHDS_Hypothesis::PARAM_ALGO)
   {
@@ -622,7 +622,7 @@ SMESH_Hypothesis::Hypothesis_Status
   bool modifiedHyp = (event == MODIF_HYP);  // if set to true, force event MODIF_ALGO_STATE
   SMESH_Algo* algoRequiringCleaning = 0;
 
-  bool isApplicableHyp = IsApplicableHypotesis( anHyp );
+  bool isApplicableHyp = IsApplicableHypothesis( anHyp );
 
   if (event == ADD_ALGO || event == ADD_FATHER_ALGO)
   {
@@ -1072,7 +1072,7 @@ bool SMESH_subMesh::IsConform(const SMESH_Algo* theAlgo)
   if ( !theAlgo ) return false;
 
   // Suppose that theAlgo is applicable to _subShape, do not check it here
-  //if ( !IsApplicableHypotesis( theAlgo )) return false;
+  //if ( !IsApplicableHypothesis( theAlgo )) return false;
 
   // check only algo that doesn't NeedDiscreteBoundary(): because mesh made
   // on a sub-shape will be ignored by theAlgo
@@ -1293,40 +1293,19 @@ static void cleanSubMesh( SMESH_subMesh * subMesh )
       SMESHDS_Mesh * meshDS = subMesh->GetFather()->GetMeshDS();
       int nbElems = subMeshDS->NbElements();
       if ( nbElems > 0 )
-      {
-        // start from elem with max ID to avoid filling the pool of IDs
-        bool rev = true;
-        SMDS_ElemIteratorPtr ite = subMeshDS->GetElements( rev );
-        const SMDS_MeshElement * lastElem = ite->next();
-        rev = ( lastElem->GetID() == meshDS->MaxElementID() );
-        if ( !rev )
-          ite = subMeshDS->GetElements( rev );
-        else
-          meshDS->RemoveFreeElement( lastElem, subMeshDS );
-        while (ite->more()) {
-          const SMDS_MeshElement * elt = ite->next();
-          meshDS->RemoveFreeElement( elt, subMeshDS );
-        }
-      }
+        for ( SMDS_ElemIteratorPtr ite = subMeshDS->GetElements(); ite->more(); )
+          meshDS->RemoveFreeElement( ite->next(), subMeshDS );
+
       int nbNodes = subMeshDS->NbNodes();
       if ( nbNodes > 0 )
-      {
-        bool rev = true;
-        SMDS_NodeIteratorPtr itn = subMeshDS->GetNodes( rev );
-        const SMDS_MeshNode * lastNode = itn->next();
-        rev = ( lastNode->GetID() == meshDS->MaxNodeID() );
-        if ( !rev )
-          itn = subMeshDS->GetNodes( rev );
-        else
-          meshDS->RemoveNode( lastNode );
-        while (itn->more()) {
+        for ( SMDS_NodeIteratorPtr itn = subMeshDS->GetNodes(); itn->more() ; )
+        {
           const SMDS_MeshNode * node = itn->next();
           if ( node->NbInverseElements() == 0 )
             meshDS->RemoveFreeNode( node, subMeshDS );
           else // for StdMeshers_CompositeSegment_1D: node in one submesh, edge in another
-            meshDS->RemoveNode(node);
+            meshDS->RemoveNode( node );
         }
-      }
       subMeshDS->Clear();
     }
   }
@@ -2207,13 +2186,13 @@ const SMESH_Hypothesis* SMESH_subMesh::getSimilarAttached(const TopoDS_Shape&
 }
 
 //=======================================================================
-//function : CheckConcurentHypothesis
+//function : CheckConcurrentHypothesis
 //purpose  : check if there are several applicable hypothesis attached to
 //           ancestors
 //=======================================================================
 
 SMESH_Hypothesis::Hypothesis_Status
-  SMESH_subMesh::CheckConcurentHypothesis (const int theHypType)
+  SMESH_subMesh::CheckConcurrentHypothesis (const int theHypType)
 {
   // is there local hypothesis on me?
   if ( getSimilarAttached( _subShape, 0, theHypType ) )
@@ -2235,7 +2214,7 @@ SMESH_Hypothesis::Hypothesis_Status
         aPrevHyp     = hyp;
       }
       else if ( aPrevWithHyp.ShapeType() == ancestor.ShapeType() && aPrevHyp != hyp )
-        return SMESH_Hypothesis::HYP_CONCURENT;
+        return SMESH_Hypothesis::HYP_CONCURRENT;
       else
         return SMESH_Hypothesis::HYP_OK;
     }
index ef3cb629f46f3da9e982fa4f59f3bcfb81e9f01c..3d26972411c1d608281f2d65ebcbad36789f47e5 100644 (file)
@@ -238,14 +238,14 @@ public:
   // return true if theHypothesis can be attached to me:
   // its dimension is checked
 
-  static bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
+  static bool IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis,
                                     const TopAbs_ShapeEnum  theShapeType);
 
-  bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis) const;
+  bool IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis) const;
   // return true if theHypothesis can be used to mesh me:
   // its shape type is checked
   
-  SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType);
+  SMESH_Hypothesis::Hypothesis_Status CheckConcurrentHypothesis (const int theHypType);
   // check if there are several applicable hypothesis on fathers
 
   /*!
index 6dcea0662cb37fadfacc1dea2a646a99bc70324c..d31762a53350eeac0a7da7a385d4bbd40cc0e16c 100644 (file)
@@ -25,7 +25,7 @@ INCLUDE_DIRECTORIES(
   ${GEOM_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${OMNIORB_INCLUDE_DIR}
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/Driver
@@ -43,7 +43,7 @@ INCLUDE_DIRECTORIES(
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${OMNIORB_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -64,7 +64,7 @@ SET(_link_LIBRARIES
   ${KERNEL_SALOMELocalTrace}
   ${GEOM_NMTDS}
   ${GEOM_SalomeIDLGEOM}  
-  ${CAS_KERNEL}
+  ${OpenCASCADE_KERNEL}
   SalomeIDLSMESH
   SMDS
   SMESHimpl
index f556f1a9245d175477f2d6f2900fc7597f3d4f8b..73ad16111c6d62fc1f33011195dc58f3ffa54dc4 100644 (file)
@@ -749,30 +749,30 @@ namespace
                                      SMESH::log_array_var& theSeq,
                                      CORBA::Long theId)
   {
-    const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long iind = 0, aNbElems = theSeq[theId].number;
-
-    for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++)
-    {
-      // find element
-      const SMDS_MeshElement* elem = FindElement(theMesh, anIndexes[iind++]);
-      // nb nodes
-      int nbNodes = anIndexes[iind++];
-      // nodes
-      std::vector<const SMDS_MeshNode*> aNodes (nbNodes);
-      for (int iNode = 0; iNode < nbNodes; iNode++) {
-        aNodes[iNode] = FindNode(theMesh, anIndexes[iind++]);
-      }
-      // nb faces
-      int nbFaces = anIndexes[iind++];
-      // quantities
-      std::vector<int> quantities (nbFaces);
-      for (int iFace = 0; iFace < nbFaces; iFace++) {
-        quantities[iFace] = anIndexes[iind++];
-      }
-      // change
-      theMesh->ChangePolyhedronNodes(elem, aNodes, quantities);
-    }
+    // const SMESH::long_array& anIndexes = theSeq[theId].indexes;
+    // CORBA::Long iind = 0, aNbElems = theSeq[theId].number;
+
+    // for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++)
+    // {
+    //   // find element
+    //   const SMDS_MeshElement* elem = FindElement(theMesh, anIndexes[iind++]);
+    //   // nb nodes
+    //   int nbNodes = anIndexes[iind++];
+    //   // nodes
+    //   std::vector<const SMDS_MeshNode*> aNodes (nbNodes);
+    //   for (int iNode = 0; iNode < nbNodes; iNode++) {
+    //     aNodes[iNode] = FindNode(theMesh, anIndexes[iind++]);
+    //   }
+    //   // nb faces
+    //   int nbFaces = anIndexes[iind++];
+    //   // quantities
+    //   std::vector<int> quantities (nbFaces);
+    //   for (int iFace = 0; iFace < nbFaces; iFace++) {
+    //     quantities[iFace] = anIndexes[iind++];
+    //   }
+    //   // change
+    //   theMesh->ChangePolyhedronNodes(elem, aNodes, quantities);
+    // }
   }
 }
 
@@ -986,10 +986,10 @@ SMESH_Client::Update(bool theIsClear)
           ChangePolyhedronNodes(mySMDSMesh, aSeq, anId);
           break;
         case SMESH::RENUMBER:
-          for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3)
-          {
-            mySMDSMesh->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] );
-          }
+          // for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3)
+          // {
+          //   mySMDSMesh->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] );
+          // }
           break;
 
         default:;
index e5c153ceae634850a87c02347701cb2497501081..c68058be62e594fddc9c88000f0446bd866804ab 100644 (file)
@@ -26,7 +26,7 @@ ENDIF(SALOME_SMESH_USE_TBB)
 
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMDS
@@ -35,7 +35,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -45,8 +45,8 @@ ENDIF(SALOME_SMESH_USE_TBB)
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_KERNEL}
-  ${CAS_TKBRep}
+  ${OpenCASCADE_KERNEL}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
   ${KERNEL_SALOMELocalTrace}
   SMDS
   ${TBB_LIBS}
index 6ffa1b19cba4e962fd5ea0db5ade44880a6afd7c..e6df602ff343532c4a4bda2185c1ee3ed681d323 100644 (file)
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
-//  SMESH SMESHDS : idl implementation based on 'SMESH' unit's classes
 //  File   : SMESHDS_Group.cxx
 //  Module : SMESH
-//  $Header$
 //
+
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Mesh.hxx"
 
-using namespace std;
-
 //=============================================================================
 /*!
  *  
@@ -39,8 +35,8 @@ using namespace std;
 SMESHDS_Group::SMESHDS_Group (const int                 theID,
                               const SMESHDS_Mesh*       theMesh,
                               const SMDSAbs_ElementType theType)
-     : SMESHDS_GroupBase(theID,theMesh,theType),
-       myGroup(theMesh,theType)
+  : SMESHDS_GroupBase(theID,theMesh,theType),
+    myGroup(theMesh,theType)
 {
 }
 
@@ -147,20 +143,7 @@ void SMESHDS_Group::Clear()
   myGroup.Clear();
   resetIterator();
 }
-
-// =====================
-// class MyGroupIterator
-// =====================
-
-class MyGroupIterator: public SMDS_ElemIterator
-{
-  const SMDS_MeshGroup& myGroup;
- public:
-  MyGroupIterator(const SMDS_MeshGroup& group): myGroup(group) { myGroup.InitIterator(); }
-  bool more() { return myGroup.More(); }
-  const SMDS_MeshElement* next() { return myGroup.Next(); }
-};
-   
+  
 //=======================================================================
 //function : GetElements
 //purpose  : 
@@ -168,7 +151,7 @@ class MyGroupIterator: public SMDS_ElemIterator
 
 SMDS_ElemIteratorPtr SMESHDS_Group::GetElements() const
 {
-  return SMDS_ElemIteratorPtr( new MyGroupIterator ( myGroup ));
+  return myGroup.GetElements();
 }
 
 //================================================================================
@@ -189,11 +172,14 @@ int SMESHDS_Group::GetTic() const
 
 void SMESHDS_Group::SetType(SMDSAbs_ElementType theType)
 {
-  if ( myGroup.IsEmpty() || GetType() == SMDSAbs_All ) {
+  if ( myGroup.IsEmpty() || GetType() == SMDSAbs_All )
+  {
     SMESHDS_GroupBase::SetType( theType );
     myGroup.SetType ( theType );
   }
   else
+  {
     SMESHDS_GroupBase::SetType( myGroup.GetType() );
+  }
 }
 
index 7653e176ce6811b594cd62b99d60e335bf8d7079..e5b2fb736bd3d75362f0f6aae9a85343fc3cf8bf 100644 (file)
 #include "SMESHDS_GroupOnFilter.hxx"
 
 #include "SMDS_SetIterator.hxx"
+#include "ObjectPool.hxx"
 #include "SMESHDS_Mesh.hxx"
 
 #include <numeric>
 #include <limits>
 
+#include <boost/make_shared.hpp>
+
 using namespace std;
 
 //#undef WITH_TBB
@@ -45,11 +48,12 @@ SMESHDS_GroupOnFilter::SMESHDS_GroupOnFilter (const int                 theID,
                                               const SMESHDS_Mesh*       theMesh,
                                               const SMDSAbs_ElementType theType,
                                               const SMESH_PredicatePtr& thePredicate)
-  : SMESHDS_GroupBase(theID,theMesh,theType),
+  : SMESHDS_GroupBase( theID, theMesh, theType ),
+    SMDS_ElementHolder( theMesh ),
     myMeshInfo( SMDSEntity_Last, 0 ),
-    myMeshModifTime(0),
-    myPredicateTic(0),
-    myNbElemToSkip(0)
+    myMeshModifTime( 0 ),
+    myPredicateTic( 0 ),
+    myNbElemToSkip( 0 )
 {
   SetPredicate( thePredicate );
 }
@@ -532,3 +536,38 @@ SMESHDS_GroupOnFilter::setNbElemToSkip( SMDS_ElemIteratorPtr& okElemIt )
   }
   return firstOkElem;
 }
+
+//================================================================================
+/*!
+ * \brief Return elements before mesh compacting
+ */
+//================================================================================
+
+SMDS_ElemIteratorPtr SMESHDS_GroupOnFilter::getElements()
+{
+  return boost::make_shared< SMDS_ElementVectorIterator >( myElements.begin(), myElements.end() );
+}
+
+//================================================================================
+/*!
+ * \brief clear myElements before re-filling after mesh compacting
+ */
+//================================================================================
+
+void SMESHDS_GroupOnFilter::tmpClear()
+{
+  std::vector< const SMDS_MeshElement*> newElems( myElements.size() );
+  myElements.swap( newElems );
+  myElements.clear();
+}
+
+//================================================================================
+/*!
+ * \brief Re-fill myElements after mesh compacting
+ */
+//================================================================================
+
+void SMESHDS_GroupOnFilter::add( const SMDS_MeshElement* element )
+{
+  myElements.push_back( element );
+}
index 94bc25af44f4dde93e41f5ef24a565f1084c2e46..9b235c1a318dc31a1da240da1d7adae7284350b7 100644 (file)
 
 #include "SMESH_SMESHDS.hxx"
 
+#include "SMDS_ElementHolder.hxx"
 #include "SMESHDS_GroupBase.hxx"
 #include "SMESH_Controls.hxx"
-  
+
 /*!
  * \brief Groups whose contents is dynamically updated using the filter
  */
-class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase
+class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase, SMDS_ElementHolder
 {
  public:
 
@@ -69,6 +70,13 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase
 
   bool         IsUpToDate() const;
 
+ protected: // methods of SMDS_ElementHolder
+
+  virtual SMDS_ElemIteratorPtr getElements();
+  virtual void tmpClear();
+  virtual void add( const SMDS_MeshElement* element );
+  virtual void compact() {};
+
  private:
 
   void update() const;
index 865e700c13332585d7087bbc0cf6195ac25c0bcd..7a8714424974831a8fe72e7c73b9aa4a7041c9aa 100644 (file)
@@ -50,8 +50,6 @@
 
 #include "utilities.h"
 
-using namespace std;
-
 class SMESHDS_Mesh::SubMeshHolder : public SMESHDS_TSubMeshHolder< const SMESHDS_SubMesh >
 {
 };
@@ -105,7 +103,7 @@ int SMESHDS_Mesh::GetPersistentId() const
 //=======================================================================
 void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
 {
-  if ( !myShape.IsNull() && S.IsNull() )
+  if ( !myShape.IsNull() && S.IsNull() ) // case: "save study" after geometry removal
   {
     // removal of a shape to mesh, delete ...
     // - hypotheses
@@ -116,7 +114,7 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
       if ( !sm->IsComplexSubmesh() ) {
         SMDS_NodeIteratorPtr nIt = sm->GetNodes();
         while ( nIt->more() )
-          sm->RemoveNode(nIt->next(), false);
+          sm->RemoveNode(nIt->next());
       }
     }
     // - sub-meshes
@@ -124,7 +122,7 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
 
     myIndexToShape.Clear();
     // - groups on geometry
-    set<SMESHDS_GroupBase*>::iterator gr = myGroups.begin();
+    std::set<SMESHDS_GroupBase*>::iterator gr = myGroups.begin();
     while ( gr != myGroups.end() ) {
       if ( dynamic_cast<SMESHDS_GroupOnGeom*>( *gr ))
         myGroups.erase( gr++ );
@@ -137,6 +135,8 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
     if ( !S.IsNull() )
       TopExp::MapShapes(myShape, myIndexToShape);
   }
+
+  SMDS_Mesh::setNbShapes( MaxShapeIndex() );
 }
 
 //=======================================================================
@@ -148,14 +148,14 @@ bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
                                  const SMESHDS_Hypothesis * H)
 {
   if (!myShapeToHypothesis.IsBound(SS/*.Oriented(TopAbs_FORWARD)*/)) {
-    list<const SMESHDS_Hypothesis *> aList;
+    std::list<const SMESHDS_Hypothesis *> aList;
     myShapeToHypothesis.Bind(SS/*.Oriented(TopAbs_FORWARD)*/, aList);
   }
-  list<const SMESHDS_Hypothesis *>& alist =
+  std::list<const SMESHDS_Hypothesis *>& alist =
     myShapeToHypothesis(SS/*.Oriented(TopAbs_FORWARD)*/); // ignore orientation of SS
 
   //Check if the Hypothesis is still present
-  list<const SMESHDS_Hypothesis*>::iterator ith = find(alist.begin(),alist.end(), H );
+  std::list<const SMESHDS_Hypothesis*>::iterator ith = find(alist.begin(),alist.end(), H );
 
   if (alist.end() != ith) return false;
 
@@ -173,8 +173,8 @@ bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape &       S,
 {
   if( myShapeToHypothesis.IsBound( S/*.Oriented(TopAbs_FORWARD)*/ ) )
   {
-    list<const SMESHDS_Hypothesis *>& alist=myShapeToHypothesis.ChangeFind( S/*.Oriented(TopAbs_FORWARD)*/ );
-    list<const SMESHDS_Hypothesis*>::iterator ith=find(alist.begin(),alist.end(), H );
+    std::list<const SMESHDS_Hypothesis *>& alist=myShapeToHypothesis.ChangeFind( S/*.Oriented(TopAbs_FORWARD)*/ );
+    std::list<const SMESHDS_Hypothesis*>::iterator ith=find(alist.begin(),alist.end(), H );
     if (ith != alist.end())
     {
       alist.erase(ith);
@@ -223,7 +223,7 @@ bool SMESHDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
   if ( ! SMDS_Mesh::ChangeElementNodes( elem, nodes, nbnodes ))
     return false;
 
-  vector<int> IDs( nbnodes );
+  std::vector<int> IDs( nbnodes );
   for ( int i = 0; i < nbnodes; i++ )
     IDs [ i ] = nodes[ i ]->GetID();
   myScript->ChangeElementNodes( elem->GetID(), &IDs[0], nbnodes);
@@ -236,8 +236,8 @@ bool SMESHDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
 //purpose  : 
 //=======================================================================
 bool SMESHDS_Mesh::ChangePolygonNodes
-                   (const SMDS_MeshElement *     elem,
                   vector<const SMDS_MeshNode*> nodes)
+(const SMDS_MeshElement *     elem,
std::vector<const SMDS_MeshNode*> nodes)
 {
   ASSERT(nodes.size() > 3);
 
@@ -249,14 +249,14 @@ bool SMESHDS_Mesh::ChangePolygonNodes
 //purpose  : 
 //=======================================================================
 bool SMESHDS_Mesh::ChangePolyhedronNodes
-                   (const SMDS_MeshElement * elem,
                   std::vector<const SMDS_MeshNode*> nodes,
                   std::vector<int>                  quantities)
+(const SMDS_MeshElement * elem,
+ std::vector<const SMDS_MeshNode*> nodes,
+ std::vector<int>                  quantities)
 {
   ASSERT(nodes.size() > 3);
 
-  if (!SMDS_Mesh::ChangePolyhedronNodes(elem, nodes, quantities))
-    return false;
+  //if (!SMDS_Mesh::ChangePolyhedronNodes(elem, nodes, quantities))
+  return false;
 
   int i, len = nodes.size();
   std::vector<int> nodes_ids (len);
@@ -276,10 +276,10 @@ bool SMESHDS_Mesh::ChangePolyhedronNodes
 void SMESHDS_Mesh::Renumber (const bool isNodes, const int startID, const int deltaID)
 {
   // TODO not possible yet to have node numbers not starting to O and continuous.
-  if (!this->isCompacted())
-    this->compactMesh();
-//  SMDS_Mesh::Renumber( isNodes, startID, deltaID );
-//  myScript->Renumber( isNodes, startID, deltaID );
+  if ( !this->IsCompacted() )
+    this->CompactMesh();
+  //  SMDS_Mesh::Renumber( isNodes, startID, deltaID );
+  //  myScript->Renumber( isNodes, startID, deltaID );
 }
 
 //=======================================================================
@@ -294,7 +294,7 @@ SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID(int nodeID, int ID)
 }
 
 SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID
-                                  (const SMDS_MeshNode * node, int ID)
+(const SMDS_MeshNode * node, int ID)
 {
   return Add0DElementWithID(node->GetID(), ID);
 }
@@ -801,9 +801,9 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<int>
 }
 
 SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID
-                               (const std::vector<const SMDS_MeshNode*>& nodes,
                               const std::vector<int>&                  quantities,
                               const int                                ID)
+(const std::vector<const SMDS_MeshNode*>& nodes,
+ const std::vector<int>&                  quantities,
+ const int                                ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
   if (anElem) {
@@ -818,8 +818,8 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID
 }
 
 SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolume
-                               (const std::vector<const SMDS_MeshNode*>& nodes,
                               const std::vector<int>&                  quantities)
+(const std::vector<const SMDS_MeshNode*>& nodes,
+ const std::vector<int>&                  quantities)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolume(nodes, quantities);
   if (anElem) {
@@ -838,10 +838,9 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolume
 //purpose  : 
 //=======================================================================
 
-static void removeFromContainers (SMESHDS_Mesh*                  theMesh,
-                                  set<SMESHDS_GroupBase*>&       theGroups,
-                                  list<const SMDS_MeshElement*>& theElems,
-                                  const bool                     isNode)
+static void removeFromContainers (SMESHDS_Mesh*                         theMesh,
+                                  std::set<SMESHDS_GroupBase*>&         theGroups,
+                                  std::vector<const SMDS_MeshElement*>& theElems)
 {
   if ( theElems.empty() )
     return;
@@ -850,13 +849,13 @@ static void removeFromContainers (SMESHDS_Mesh*                  theMesh,
   // Element can belong to several groups
   if ( !theGroups.empty() )
   {
-    set<SMESHDS_GroupBase*>::iterator GrIt = theGroups.begin();
+    std::set<SMESHDS_GroupBase*>::iterator GrIt = theGroups.begin();
     for ( ; GrIt != theGroups.end(); GrIt++ )
     {
       SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>( *GrIt );
       if ( !group || group->IsEmpty() ) continue;
 
-      list<const SMDS_MeshElement *>::iterator elIt = theElems.begin();
+      std::vector<const SMDS_MeshElement *>::iterator elIt = theElems.begin();
       for ( ; elIt != theElems.end(); elIt++ )
       {
         group->SMDSGroup().Remove( *elIt );
@@ -865,24 +864,24 @@ static void removeFromContainers (SMESHDS_Mesh*                  theMesh,
     }
   }
 
-  const bool deleted=true;
+  //const bool deleted=true;
 
   // Rm from sub-meshes
   // Element should belong to only one sub-mesh
-  if ( theMesh->SubMeshes()->more() )
-  {
-    list<const SMDS_MeshElement *>::iterator elIt = theElems.begin();
-    if ( isNode ) {
-      for ( ; elIt != theElems.end(); ++elIt )
-        if ( SMESHDS_SubMesh* sm = theMesh->MeshElements( (*elIt)->getshapeId() ))
-          sm->RemoveNode( static_cast<const SMDS_MeshNode*> (*elIt), deleted );
-    }
-    else {
-      for ( ; elIt != theElems.end(); ++elIt )
-        if ( SMESHDS_SubMesh* sm = theMesh->MeshElements( (*elIt)->getshapeId() ))
-          sm->RemoveElement( *elIt, deleted );
-    }
-  }
+  // if ( theMesh->SubMeshes()->more() )
+  // {
+  //   std::list<const SMDS_MeshElement *>::iterator elIt = theElems.begin();
+  //   if ( isNode ) {
+  //     for ( ; elIt != theElems.end(); ++elIt )
+  //       if ( SMESHDS_SubMesh* sm = theMesh->MeshElements( (*elIt)->getshapeId() ))
+  //         sm->RemoveNode( static_cast<const SMDS_MeshNode*> (*elIt), deleted );
+  //   }
+  //   else {
+  //     for ( ; elIt != theElems.end(); ++elIt )
+  //       if ( SMESHDS_SubMesh* sm = theMesh->MeshElements( (*elIt)->getshapeId() ))
+  //         sm->RemoveElement( *elIt, deleted );
+  //   }
+  // }
 }
 
 //=======================================================================
@@ -891,56 +890,69 @@ static void removeFromContainers (SMESHDS_Mesh*                  theMesh,
 //=======================================================================
 void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n)
 {
-  if ( n->NbInverseElements() == 0 && !(hasConstructionEdges() || hasConstructionFaces()))
-  {
-    RemoveFreeNode( n, 0, true );
+  if ( RemoveFreeNode( n, 0, true ))
     return;
-  }
 
   myScript->RemoveNode(n->GetID());
 
-  list<const SMDS_MeshElement *> removedElems;
-  list<const SMDS_MeshElement *> removedNodes;
+  // remove inverse elements from the sub-meshes
+  for ( SMDS_ElemIteratorPtr eIt = n->GetInverseElementIterator(); eIt->more() ; )
+  {
+    const SMDS_MeshElement* e = eIt->next();
+    if ( SMESHDS_SubMesh * sm = MeshElements( e->getshapeId() ))
+      sm->RemoveElement( e );
+  }
+  if ( SMESHDS_SubMesh * sm = MeshElements( n->getshapeId() ))
+    sm->RemoveNode( n );
+    
+  
+  std::vector<const SMDS_MeshElement *> removedElems;
+  std::vector<const SMDS_MeshElement *> removedNodes;
 
   SMDS_Mesh::RemoveElement( n, removedElems, removedNodes, true );
 
-  removeFromContainers( this, myGroups, removedElems, false );
-  removeFromContainers( this, myGroups, removedNodes, true );
+  removeFromContainers( this, myGroups, removedElems );
+  removeFromContainers( this, myGroups, removedNodes );
 }
 
 //=======================================================================
 //function : RemoveFreeNode
 //purpose  : 
 //=======================================================================
-void SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n,
+bool SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n,
                                   SMESHDS_SubMesh *     subMesh,
                                   bool                  fromGroups)
 {
+  if ( n->NbInverseElements() > 0 )
+    return false;
+
   myScript->RemoveNode(n->GetID());
 
   // Rm from group
   // Node can belong to several groups
-  if (fromGroups && !myGroups.empty()) {
-    set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
+  if ( fromGroups && !myGroups.empty() ) {
+    std::set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
     for (; GrIt != myGroups.end(); GrIt++) {
       SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
-      if (group && !group->IsEmpty())
+      if (group && group->GetType() == SMDSAbs_Node )
         group->SMDSGroup().Remove(n);
     }
   }
 
   // Rm from sub-mesh
   // Node should belong to only one sub-mesh
-  if ( !subMesh || !subMesh->RemoveNode(n,/*deleted=*/false))
+  if ( !subMesh || !subMesh->RemoveNode( n ))
     if (( subMesh = MeshElements( n->getshapeId() )))
-      subMesh->RemoveNode(n,/*deleted=*/false );
+      subMesh->RemoveNode(n);
 
   SMDS_Mesh::RemoveFreeElement(n);
+
+  return true;
 }
 
 //=======================================================================
 //function : RemoveElement
-//purpose  : 
+//purpose  :
 //========================================================================
 void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt)
 {
@@ -949,7 +961,7 @@ void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt)
     RemoveNode( static_cast<const SMDS_MeshNode*>( elt ));
     return;
   }
-  if (!hasConstructionEdges() && !hasConstructionFaces())
+  //if (!hasConstructionEdges() && !hasConstructionFaces())
   {
     SMESHDS_SubMesh* subMesh=0;
     if ( elt->getshapeId() > 0 )
@@ -961,12 +973,12 @@ void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt)
  
   myScript->RemoveElement(elt->GetID());
 
-  list<const SMDS_MeshElement *> removedElems;
-  list<const SMDS_MeshElement *> removedNodes;
+  std::vector<const SMDS_MeshElement *> removedElems;
+  std::vector<const SMDS_MeshElement *> removedNodes;
 
-  SMDS_Mesh::RemoveElement(elt, removedElems, removedNodes, false );
+  SMDS_Mesh::RemoveElement(elt, removedElems, removedNodes );
   
-  removeFromContainers( this, myGroups, removedElems, false );
+  removeFromContainers( this, myGroups, removedElems );
 }
 
 //=======================================================================
@@ -982,16 +994,16 @@ void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt,
     return;
   }
 
-  if (hasConstructionEdges() || hasConstructionFaces())
-    // this methods is only for meshes without descendants
-    return;
+  // if (hasConstructionEdges() || hasConstructionFaces())
+  //   // this methods is only for meshes without descendants
+  //   return;
 
   myScript->RemoveElement(elt->GetID());
 
   // Rm from group
   // Element can belong to several groups
   if ( fromGroups && !myGroups.empty() ) {
-    set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
+    std::set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
     for (; GrIt != myGroups.end(); GrIt++) {
       SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
       if (group && !group->IsEmpty())
@@ -1004,7 +1016,7 @@ void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt,
   if ( !subMesh && elt->getshapeId() > 0 )
     subMesh = MeshElements( elt->getshapeId() );
   if ( subMesh )
-    subMesh->RemoveElement( elt, /*deleted=*/false );
+    subMesh->RemoveElement( elt );
 
   SMDS_Mesh::RemoveFreeElement( elt );
 }
@@ -1035,7 +1047,7 @@ void SMESHDS_Mesh::ClearMesh()
     }
     else
     {
-      (*group)->Extent(); // to free cashed elements in GroupOnFilter's
+      (*group)->Extent(); // to free cached elements in GroupOnFilter's
     }
   }
 }
@@ -1043,8 +1055,8 @@ void SMESHDS_Mesh::ClearMesh()
 //================================================================================
 /*!
  * \brief return submesh by shape
 * \param shape - the sub-shape
 * \retval SMESHDS_SubMesh* - the found submesh
+ * \param shape - the sub-shape
+ * \retval SMESHDS_SubMesh* - the found submesh
  */
 //================================================================================
 
@@ -1059,84 +1071,81 @@ SMESHDS_SubMesh* SMESHDS_Mesh::getSubmesh( const TopoDS_Shape & shape )
 //================================================================================
 /*!
  * \brief Add element or node to submesh
 * \param elem - element to add
 * \param subMesh - submesh to be filled in
+ * \param elem - element to add
+ * \param subMesh - submesh to be filled in
  */
 //================================================================================
 
-bool SMESHDS_Mesh::add(const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh )
+int SMESHDS_Mesh::add(const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh )
 {
   if ( elem && subMesh ) {
-    if ( elem->GetType() == SMDSAbs_Node )
-      subMesh->AddNode( static_cast<const SMDS_MeshNode* >( elem ));
-    else
-      subMesh->AddElement( elem );
-    return true;
+    subMesh->AddElement( elem );
+    return subMesh->GetID();
   }
-  return false;
+  return 0;
 }
 
 //=======================================================================
 //function : SetNodeOnVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode,
                                    const TopoDS_Shell & S)
 {
-  if ( add( aNode, getSubmesh(S) ))
+  if ( int shapeID = add( aNode, getSubmesh( S )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition( SMDS_SpacePosition::originSpacePosition() );
+      ( aNode )->SetPosition( SMDS_SpacePosition::originSpacePosition(), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode *      aNode,
                                    const TopoDS_Solid & S)
 {
-  if ( add( aNode, getSubmesh(S) ))
+  if ( int shapeID = add( aNode, getSubmesh( S )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition( SMDS_SpacePosition::originSpacePosition() );
+      ( aNode )->SetPosition( SMDS_SpacePosition::originSpacePosition(), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnFace
-//purpose  : 
+//purpose  :
 //=======================================================================
-void SMESHDS_Mesh::SetNodeOnFace(const SMDS_MeshNode *     aNode,
-                                 const TopoDS_Face & S,
-                                 double              u,
-                                 double              v)
+void SMESHDS_Mesh::SetNodeOnFace(const SMDS_MeshNode * aNode,
+                                 const TopoDS_Face &   S,
+                                 double                u,
+                                 double                v)
 {
-  if ( add( aNode, getSubmesh(S) ))
+  if ( int shapeID = add( aNode, getSubmesh( S )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_FacePosition( u, v)));
+      ( aNode )->SetPosition(SMDS_PositionPtr( new SMDS_FacePosition( u, v )), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnEdge
-//purpose  : 
+//purpose  :
 //=======================================================================
-void SMESHDS_Mesh::SetNodeOnEdge(const SMDS_MeshNode *     aNode,
-                                 const TopoDS_Edge & S,
-                                 double              u)
+void SMESHDS_Mesh::SetNodeOnEdge(const SMDS_MeshNode * aNode,
+                                 const TopoDS_Edge &   S,
+                                 double                u)
 {
-  if ( add( aNode, getSubmesh(S) ))
+  if ( int shapeID = add( aNode, getSubmesh( S )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_EdgePosition(u)));
+      ( aNode )->SetPosition(SMDS_PositionPtr( new SMDS_EdgePosition( u )), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnVertex
-//purpose  : 
+//purpose  :
 //=======================================================================
-void SMESHDS_Mesh::SetNodeOnVertex(const SMDS_MeshNode *       aNode,
+void SMESHDS_Mesh::SetNodeOnVertex(const SMDS_MeshNode * aNode,
                                    const TopoDS_Vertex & S)
 {
-  if ( add( aNode, getSubmesh(S) ))
+  if ( int shapeID = add( aNode, getSubmesh( S )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_VertexPosition()));
+      ( aNode )->SetPosition(SMDS_PositionPtr( new SMDS_VertexPosition()), shapeID );
 }
 
 //=======================================================================
@@ -1148,12 +1157,12 @@ void SMESHDS_Mesh::UnSetNodeOnShape(const SMDS_MeshNode* aNode)
   int shapeId = aNode->getshapeId();
   if (shapeId > 0)
     if ( SMESHDS_SubMesh* sm = MeshElements( shapeId ))
-      sm->RemoveNode(aNode, /*deleted=*/false);
+      sm->RemoveNode(aNode);
 }
 
 //=======================================================================
 //function : SetMeshElementOnShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement * anElement,
                                          const TopoDS_Shape &     S)
@@ -1169,12 +1178,7 @@ void SMESHDS_Mesh::UnSetMeshElementOnShape(const SMDS_MeshElement * elem,
                                            const TopoDS_Shape &     S)
 {
   if ( SMESHDS_SubMesh* sm = MeshElements( S ))
-  {
-    if (elem->GetType() == SMDSAbs_Node)
-      sm->RemoveNode(static_cast<const SMDS_MeshNode*> (elem), /*deleted=*/false);
-    else
-      sm->RemoveElement(elem, /*deleted=*/false);
-  }
+    sm->RemoveElement(elem);
 }
 
 //=======================================================================
@@ -1226,9 +1230,9 @@ SMESHDS_SubMesh * SMESHDS_Mesh::MeshElements(const int Index) const
 //function : SubMeshIndices
 //purpose  : 
 //=======================================================================
-list<int> SMESHDS_Mesh::SubMeshIndices() const
+std::list<int> SMESHDS_Mesh::SubMeshIndices() const
 {
-  list<int> anIndices;
+  std::list<int> anIndices;
   SMESHDS_SubMeshIteratorPtr smIt = SubMeshes();
   while ( const SMESHDS_SubMesh* sm = smIt->next() )
     anIndices.push_back( sm->GetID() );
@@ -1251,13 +1255,13 @@ SMESHDS_SubMeshIteratorPtr SMESHDS_Mesh::SubMeshes() const
 //purpose  : 
 //=======================================================================
 
-const list<const SMESHDS_Hypothesis*>&
+const std::list<const SMESHDS_Hypothesis*>&
 SMESHDS_Mesh::GetHypothesis(const TopoDS_Shape & S) const
 {
   if ( myShapeToHypothesis.IsBound( S/*.Oriented(TopAbs_FORWARD)*/ ) ) // ignore orientation of S
-     return myShapeToHypothesis.Find( S/*.Oriented(TopAbs_FORWARD)*/ );
+    return myShapeToHypothesis.Find( S/*.Oriented(TopAbs_FORWARD)*/ );
 
-  static list<const SMESHDS_Hypothesis*> empty;
+  static std::list<const SMESHDS_Hypothesis*> empty;
   return empty;
 }
 
@@ -1282,7 +1286,7 @@ bool SMESHDS_Mesh::IsUsedHypothesis(const SMESHDS_Hypothesis * H) const
 //=======================================================================
 SMESHDS_Script* SMESHDS_Mesh::GetScript()
 {
-        return myScript;
+  return myScript;
 }
 
 //=======================================================================
@@ -1291,7 +1295,7 @@ SMESHDS_Script* SMESHDS_Mesh::GetScript()
 //=======================================================================
 void SMESHDS_Mesh::ClearScript()
 {
-        myScript->Clear();
+  myScript->Clear();
 }
 
 //=======================================================================
@@ -1408,46 +1412,46 @@ int SMESHDS_Mesh::ShapeToIndex(const TopoDS_Shape & S) const
 //=======================================================================
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode, int Index)
 {
-  if ( add( aNode, NewSubMesh( Index )))
-    ((SMDS_MeshNode*) aNode)->SetPosition( SMDS_SpacePosition::originSpacePosition());
+  if ( int shapeID = add( aNode, NewSubMesh( Index )))
+    ((SMDS_MeshNode*) aNode)->SetPosition( SMDS_SpacePosition::originSpacePosition(), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnFace
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeOnFace(const SMDS_MeshNode* aNode, int Index, double u, double v)
 {
   //Set Position on Node
-  if ( add( aNode, NewSubMesh( Index )))
+  if ( int shapeID = add( aNode, NewSubMesh( Index )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_FacePosition( u, v)));
+      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_FacePosition( u, v )), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnEdge
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeOnEdge(const SMDS_MeshNode* aNode,
                                  int                  Index,
                                  double               u)
 {
   //Set Position on Node
-  if ( add( aNode, NewSubMesh( Index )))
+  if (  int shapeID = add( aNode, NewSubMesh( Index )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_EdgePosition(u)));
+      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_EdgePosition( u )), shapeID );
 }
 
 //=======================================================================
 //function : SetNodeOnVertex
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeOnVertex(const SMDS_MeshNode* aNode, int Index)
 {
   //Set Position on Node
-  if ( add( aNode, NewSubMesh( Index )))
+  if (  int shapeID = add( aNode, NewSubMesh( Index )))
     const_cast< SMDS_MeshNode* >
-      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_VertexPosition()));
+      ( aNode )->SetPosition(SMDS_PositionPtr(new SMDS_VertexPosition()), shapeID );
 }
 
 //=======================================================================
@@ -2213,7 +2217,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n15,
                                                const SMDS_MeshNode * n26,
                                                const SMDS_MeshNode * n37,
-                                               const SMDS_MeshNode * n48, 
+                                               const SMDS_MeshNode * n48,
                                                const SMDS_MeshNode * n1234,
                                                const SMDS_MeshNode * n1256,
                                                const SMDS_MeshNode * n2367,
@@ -2232,126 +2236,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                          n1458->GetID(),n5678->GetID(),nCenter->GetID(), ID);
 }
 
-void SMESHDS_Mesh::compactMesh()
+void SMESHDS_Mesh::CompactMesh()
 {
-  if ( isCompacted() )
+  if ( IsCompacted() )
     return;
-  SMDS_Mesh::compactMesh();
-
-  int newNodeSize = 0;
-  int nbNodes     = myNodes.size();
-  int nbVtkNodes  = myGrid->GetNumberOfPoints();
-  int nbNodeTemp  = Max( nbVtkNodes, nbNodes );
-  vector<int> idNodesOldToNew(nbNodeTemp, -1); // all unused id will be -1
-
-  for (int i = 0; i < nbNodes; i++)
-  {
-    if (myNodes[i])
-    {
-      int vtkid = myNodes[i]->getVtkId();
-      idNodesOldToNew[vtkid] = i; // old vtkId --> old smdsId (valid smdsId are >= 0)
-      newNodeSize++;
-    }
-  }
-  bool areNodesModified = (newNodeSize != nbVtkNodes);
-  areNodesModified = true;
-
-  int newCellSize = 0;
-  int nbCells     = myCells.size();
-  int nbVtkCells  = myGrid->GetNumberOfCells();
-  int nbCellTemp  = Max( nbVtkCells, nbCells );
-  vector<int> idCellsOldToNew(nbCellTemp, -1); // all unused id will be -1
-
-  for (int i = 0; i < nbCells; i++)
-  {
-    if (myCells[i])
-    {
-      newCellSize++;
-    }
-  }
-  if (areNodesModified)
-    myGrid->compactGrid(idNodesOldToNew, newNodeSize, idCellsOldToNew, newCellSize);
-  else
-    myGrid->compactGrid(idNodesOldToNew, 0, idCellsOldToNew, newCellSize);
-
-  int nbVtkPts = myGrid->GetNumberOfPoints();
-  nbVtkCells = myGrid->GetNumberOfCells();
-  if (nbVtkPts != newNodeSize)
-  {
-    MESSAGE("===> nbVtkPts != newNodeSize " << nbVtkPts << " " << newNodeSize);
-    if (nbVtkPts > newNodeSize) newNodeSize = nbVtkPts; // several points with same SMDS Id
-  }
-  if (nbVtkCells != newCellSize)
-  {
-    MESSAGE("===> nbVtkCells != newCellSize " << nbVtkCells << " " << newCellSize);
-    if (nbVtkCells > newCellSize) newCellSize = nbVtkCells; // several cells with same SMDS Id
-  }
 
-  // --- SMDS_MeshNode and myNodes, myNodeIdFactory
-
-  if ( true )
-  {
-    SetOfNodes newNodes(newNodeSize+1,NULL); // 0 not used, SMDS numbers 1..n
-    int newSmdsId = 0;
-    for (int i = 0; i < nbNodes; i++)
-    {
-      if (myNodes[i])
-      {
-        newSmdsId++; // SMDS id starts from 1
-        int oldVtkId = myNodes[i]->getVtkId();
-        int newVtkId = idNodesOldToNew[oldVtkId];
-        myNodes[i]->setVtkId(newVtkId);
-        myNodes[i]->setId(newSmdsId);
-        newNodes[newSmdsId] = myNodes[i];
-      }
-    }
-    myNodes.swap(newNodes);
-    this->myNodeIDFactory->emptyPool(newSmdsId); // newSmdsId = number of nodes
-  }
-
-  // --- SMDS_MeshCell, myCellIdVtkToSmds, myCellIdSmdsToVtk, myCells
-
-  int vtkIndexSize = myCellIdVtkToSmds.size();
-  for (int oldVtkId = 0; oldVtkId < vtkIndexSize; oldVtkId++)
-  {
-    int oldSmdsId = this->myCellIdVtkToSmds[oldVtkId];
-    if (oldSmdsId > 0)
-    {
-      int newVtkId = idCellsOldToNew[oldVtkId];
-      myCells[oldSmdsId]->setVtkId(newVtkId);
-    }
-  }
-
-  SetOfCells      newCells(newCellSize+1, NULL); // 0 not used, SMDS numbers 1..n
-  vector<int> newVtkToSmds(newCellSize+1, -1);
-
-  int myCellsSize = myCells.size();
-  int newSmdsId = 0;
-  for (int i = 0; i < myCellsSize; i++)
-  {
-    if ( myCells[i] )
-    {
-      newSmdsId++; // SMDS id starts from 1
-      assert(newSmdsId <= newCellSize);
-      newCells[newSmdsId] = myCells[i];
-      newCells[newSmdsId]->setId(newSmdsId);
-      int idvtk = myCells[i]->getVtkId();
-      assert(idvtk < newCellSize);
-      newVtkToSmds[idvtk] = newSmdsId;
-    }
-  }
-
-  myCells.swap(newCells);
-  myCellIdVtkToSmds.swap(newVtkToSmds);
-  this->myElementIDFactory->emptyPool(newSmdsId);
+  SMDS_Mesh::CompactMesh();
 
   this->myScript->SetModified(true); // notify GUI client for buildPrs when update
-
-  // --- compact list myNodes and myElements in submeshes
-
-  SMESHDS_SubMeshIteratorPtr smIt = SubMeshes();
-  while ( SMESHDS_SubMesh* sm = const_cast< SMESHDS_SubMesh* >( smIt->next() ))
-    sm->compactList();
 }
 
 void SMESHDS_Mesh::CleanDownWardConnectivity()
index 92f631890ed558fb02a0d17d91a74548c109ae84..51baee630af1e6b3b9adbd17a5785de8e66b1128 100644 (file)
@@ -66,7 +66,7 @@ class DownIdType;
 
 class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
 {
-public:
+ public:
   SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode);
   bool IsEmbeddedMode();
   void SetPersistentId(int id);
@@ -566,18 +566,18 @@ public:
   virtual SMDS_MeshFace* AddQuadPolygonalFace(const std::vector<const SMDS_MeshNode*> & nodes);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID
-                           (const std::vector<int>& nodes_ids,
-                            const std::vector<int>& quantities,
-                            const int               ID);
+    (const std::vector<int>& nodes_ids,
+     const std::vector<int>& quantities,
+     const int               ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID
-                           (const std::vector<const SMDS_MeshNode*>& nodes,
-                            const std::vector<int>&                  quantities,
-                            const int                                ID);
+    (const std::vector<const SMDS_MeshNode*>& nodes,
+     const std::vector<int>&                  quantities,
+     const int                                ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolume
-                           (const std::vector<const SMDS_MeshNode*>& nodes,
-                            const std::vector<int>&                  quantities);
+    (const std::vector<const SMDS_MeshNode*>& nodes,
+     const std::vector<int>&                  quantities);
 
   virtual void MoveNode(const SMDS_MeshNode *, double x, double y, double z);
   virtual void RemoveNode(const SMDS_MeshNode *);
@@ -587,7 +587,7 @@ public:
    *  Methods do not work for meshes with descendants.
    *  Implemented for fast cleaning of meshes.
    */
-  void RemoveFreeNode   (const SMDS_MeshNode *,    SMESHDS_SubMesh *, bool fromGroups=true);
+  bool RemoveFreeNode   (const SMDS_MeshNode *,    SMESHDS_SubMesh *, bool fromGroups=true);
   void RemoveFreeElement(const SMDS_MeshElement *, SMESHDS_SubMesh *, bool fromGroups=true);
 
   void ClearMesh();
@@ -646,13 +646,13 @@ public:
 
   bool IsGroupOfSubShapes (const TopoDS_Shape& aSubShape) const;
 
-  virtual void compactMesh();
+  virtual void CompactMesh();
   void CleanDownWardConnectivity();
   void BuildDownWardConnectivity(bool withEdges);
 
   ~SMESHDS_Mesh();
   
-private:
+ private:
 
   ShapeToHypothesis          myShapeToHypothesis;
 
@@ -665,12 +665,12 @@ private:
   TopTools_IndexedMapOfShape myIndexToShape;
 
   typedef std::set<SMESHDS_GroupBase*> TGroups;
-  TGroups myGroups;
+  TGroups                    myGroups;
 
   SMESHDS_Script*            myScript;
   bool                       myIsEmbeddedMode;
 
-  bool add( const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh );
+  int add( const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh );
   SMESHDS_SubMesh* getSubmesh( const TopoDS_Shape & shape);
 };
 
index 89287301641073332320037784571d4cf499aa12..4a086e3b7073fc8d84be84192fe8c158b8302076 100644 (file)
 //  $Header: 
 //
 #include "SMESHDS_SubMesh.hxx"
-#include "SMESHDS_Mesh.hxx"
 
-#include "utilities.h"
+#include "SMESHDS_Mesh.hxx"
 #include "SMDS_SetIterator.hxx"
-#include <iostream>
-#include <cassert>
-
-using namespace std;
+#include "SMDS_ElementFactory.hxx"
 
+#include <utilities.h>
 
 //================================================================================
 /*!
@@ -47,8 +44,8 @@ SMESHDS_SubMesh::SMESHDS_SubMesh(SMESHDS_Mesh *parent, int index)
 {
   myParent = parent;
   myIndex = index;
-  myUnusedIdNodes = 0;
-  myUnusedIdElements = 0;
+  myNbElements = 0;
+  myNbNodes = 0;
 }
 
 //================================================================================
@@ -66,16 +63,16 @@ SMESHDS_SubMesh::~SMESHDS_SubMesh()
 //purpose  :
 //=======================================================================
 
-void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME)
+void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * elem)
 {
   if (!IsComplexSubmesh())
   {
-    if ( ME->GetType() == SMDSAbs_Node )
+    if ( elem->GetType() == SMDSAbs_Node )
     {
-      AddNode( static_cast< const SMDS_MeshNode* >( ME ));
+      AddNode( static_cast< const SMDS_MeshNode* >( elem ));
       return;
     }
-    int oldShapeId = ME->getshapeId();
+    int oldShapeId = elem->GetShapeID();
     if ( oldShapeId > 0 )
     {
       if (oldShapeId != myIndex)
@@ -83,28 +80,10 @@ void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME)
         throw SALOME_Exception
           (LOCALIZED("add element in subshape already belonging to a subshape"));
       }
-      int idInSubShape = ME->getIdInShape();
-      if (idInSubShape >= 0)
-      {
-        MESSAGE("add element in subshape already belonging to that subshape "
-                << ME->GetID() << " " << oldShapeId << " " << idInSubShape);
-        // check if ok: do nothing if ok
-        if (idInSubShape >= (int)myElements.size())
-        {
-          throw SALOME_Exception(LOCALIZED("out of bounds"));
-        }
-        if (ME != myElements[idInSubShape])
-        {
-          throw SALOME_Exception(LOCALIZED("not the same element"));
-        }
-        return;
-      }
     }
 
-    SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME);
-    elem->setShapeId(myIndex);
-    elem->setIdInShape(myElements.size());
-    myElements.push_back(ME);
+    elem->setShapeID( myIndex );
+    myNbElements++;
   }
 }
 
@@ -113,41 +92,17 @@ void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME)
 //purpose  :
 //=======================================================================
 
-bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted)
+bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * elem )
 {
-  if (!ME)
+  if ( !elem || elem->IsNull() || elem->getshapeId() != myIndex )
   {
     return false;
   }
-  if (!IsComplexSubmesh())
+  if ( !IsComplexSubmesh() )
   {
-    if ( ME->getshapeId() != myIndex ) // elem not in a pool can loose it's data already
-    {
-      if ( isElemDeleted )
-        for ( size_t i = 0; i < myElements.size(); ++i )
-          if ( myElements[i] == ME )
-          {
-            myElements[i] = 0;
-            ++myUnusedIdElements;
-            return true;
-          }
-      return false;
-    }
-    int idInSubShape = ME->getIdInShape();
-    SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME);
-    elem->setShapeId(0);
-    elem->setIdInShape(-1);
-    if ((idInSubShape >= 0) && (idInSubShape < (int) myElements.size()))
-    {
-      myElements[idInSubShape] = 0; // this vector entry is no more used
-      if ( ++myUnusedIdElements == (int) myElements.size() )
-      {
-        clearVector( myElements );
-        myUnusedIdElements = 0;
-      }
-      return true;
-    }
-    return false;
+    elem->setShapeID( 0 );
+    myNbElements--;
+    return true;
   }
   return false;
 }
@@ -161,22 +116,16 @@ void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N)
 {
   if ( !IsComplexSubmesh() )
   {
-    const int idInSubShape = N->getIdInShape();
-    const int shapeId      = N->getshapeId();
-    if ((shapeId > 0) && (idInSubShape >= 0))
+    const int shapeId = N->getshapeId();
+    if ( shapeId > 0 )
     {
       if ( shapeId != myIndex )
         throw SALOME_Exception
           (LOCALIZED("a node being in sub-mesh is added to another sub-mesh"));
-      if ( idInSubShape >= (int)myNodes.size() || myNodes[ idInSubShape ] != N )
-        throw SALOME_Exception
-          (LOCALIZED("a node with wrong idInSubShape is re-added to the same sub-mesh"));
       return; // already in
     }
-    SMDS_MeshNode* node = (SMDS_MeshNode*)(N);
-    node->setShapeId(myIndex);
-    node->setIdInShape(myNodes.size());
-    myNodes.push_back(N);
+    N->setShapeID( myIndex );
+    myNbNodes++;
   }
 }
 
@@ -185,38 +134,18 @@ void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N)
 //purpose  :
 //=======================================================================
 
-bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N, bool isNodeDeleted)
+bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N)
 {
-  if (!IsComplexSubmesh())
+  if ( !N || N->getshapeId() != myIndex )
   {
-    if ( N->getshapeId() != myIndex )
-    {
-      if ( isNodeDeleted )
-        for ( size_t i = 0; i < myNodes.size(); ++i )
-          if ( myNodes[i] == N )
-          {
-            myNodes[i] = 0;
-            ++myUnusedIdNodes;
-            return true;
-          }
-      return false;
-    }
-    int idInSubShape = N->getIdInShape();
-    SMDS_MeshNode* node = (SMDS_MeshNode*) (N);
-    node->setShapeId(0);
-    node->setIdInShape(-1);
-    if ((idInSubShape >= 0) && (idInSubShape < (int) myNodes.size()))
-    {
-      myNodes[idInSubShape] = 0; // this vector entry is no more used
-      if ( ++myUnusedIdNodes == (int) myNodes.size() )
-      {
-        clearVector( myNodes );
-        myUnusedIdNodes = 0;
-      }
-      return true;
-    }
     return false;
   }
+  if ( !IsComplexSubmesh() )
+  {
+    N->setShapeID( 0 );
+    myNbNodes--;
+    return true;
+  }
   return false;
 }
 
@@ -228,10 +157,10 @@ bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N, bool isNodeDeleted)
 int SMESHDS_SubMesh::NbElements() const
 {
   if ( !IsComplexSubmesh() )
-    return myElements.size() - myUnusedIdElements;
+    return myNbElements;
 
   int nbElems = 0;
-  set<const SMESHDS_SubMesh*>::const_iterator it = mySubMeshes.begin();
+  TSubMeshSet::const_iterator it = mySubMeshes.begin();
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbElements();
 
@@ -246,10 +175,10 @@ int SMESHDS_SubMesh::NbElements() const
 int SMESHDS_SubMesh::NbNodes() const
 {
   if ( !IsComplexSubmesh() )
-    return myNodes.size() - myUnusedIdNodes;
+    return myNbNodes;
 
   int nbElems = 0;
-  set<const SMESHDS_SubMesh*>::const_iterator it = mySubMeshes.begin();
+  TSubMeshSet::const_iterator it = mySubMeshes.begin();
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbNodes();
 
@@ -306,7 +235,7 @@ public:
 template<typename VALUE> class MyIterator : public SMDS_Iterator<VALUE>
 {
 public:
-  MyIterator (const set<const SMESHDS_SubMesh*>& theSubMeshes)
+  MyIterator (const TSubMeshSet& theSubMeshes)
     : myMore(false), mySubIt( theSubMeshes.begin() ), mySubEnd( theSubMeshes.end() )
   {}
   bool more()
@@ -331,9 +260,9 @@ protected:
   getElements(const SMESHDS_SubMesh*) const = 0;
 
 private:
-  bool                                        myMore;
-  set<const SMESHDS_SubMesh*>::const_iterator mySubIt, mySubEnd;
-  boost::shared_ptr< SMDS_Iterator<VALUE> >   myElemIt;
+  bool                                      myMore;
+  TSubMeshSet::const_iterator               mySubIt, mySubEnd;
+  boost::shared_ptr< SMDS_Iterator<VALUE> > myElemIt;
 };
 
 // =====================
@@ -343,7 +272,7 @@ private:
 class MyElemIterator: public MyIterator<const SMDS_MeshElement*>
 {
 public:
-  MyElemIterator (const set<const SMESHDS_SubMesh*>& theSubMeshes)
+  MyElemIterator (const TSubMeshSet& theSubMeshes)
     :MyIterator<const SMDS_MeshElement*>( theSubMeshes ) {}
   SMDS_ElemIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const
   { return theSubMesh->GetElements(); }
@@ -356,7 +285,7 @@ public:
 class MyNodeIterator: public MyIterator<const SMDS_MeshNode*>
 {
 public:
-  MyNodeIterator (const set<const SMESHDS_SubMesh*>& theSubMeshes)
+  MyNodeIterator (const TSubMeshSet& theSubMeshes)
     :MyIterator<const SMDS_MeshNode*>( theSubMeshes ) {}
   SMDS_NodeIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const
   { return theSubMesh->GetNodes(); }
@@ -367,13 +296,12 @@ public:
 //purpose  :
 //=======================================================================
 
-SMDS_ElemIteratorPtr SMESHDS_SubMesh::GetElements( bool reverse ) const
+SMDS_ElemIteratorPtr SMESHDS_SubMesh::GetElements() const
 {
   if ( IsComplexSubmesh() )
     return SMDS_ElemIteratorPtr( new MyElemIterator( mySubMeshes ));
 
-  typedef MySetIterator< const SMDS_MeshElement*, std::vector<const SMDS_MeshElement*> > TIter;
-  return SMDS_ElemIteratorPtr( new TIter( myElements, reverse ));
+  return myParent->shapeElementsIterator( myIndex, myNbElements );
 }
 
 //=======================================================================
@@ -381,13 +309,12 @@ SMDS_ElemIteratorPtr SMESHDS_SubMesh::GetElements( bool reverse ) const
 //purpose  :
 //=======================================================================
 
-SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes( bool reverse ) const
+SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes() const
 {
   if ( IsComplexSubmesh() )
     return SMDS_NodeIteratorPtr( new MyNodeIterator( mySubMeshes ));
 
-  typedef MySetIterator< const SMDS_MeshNode*, std::vector<const SMDS_MeshNode*> > TIter;
-  return SMDS_NodeIteratorPtr( new TIter( myNodes, reverse ));
+  return myParent->shapeNodesIterator( myIndex, myNbNodes );
 }
 
 //=======================================================================
@@ -397,35 +324,18 @@ SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes( bool reverse ) const
 
 bool SMESHDS_SubMesh::Contains(const SMDS_MeshElement * ME) const
 {
-  // DO NOT TRY TO FIND A REMOVED ELEMENT !!
-  //if ( IsComplexSubmesh() || !ME )
-  if (!ME)
+  if ( !ME || ME->IsNull() )
     return false;
 
   if ( IsComplexSubmesh() )
   {
-    set<const SMESHDS_SubMesh*>::const_iterator aSubIt = mySubMeshes.begin();
+    TSubMeshSet::const_iterator aSubIt = mySubMeshes.begin();
     for (; aSubIt != mySubMeshes.end(); aSubIt++)
       if ((*aSubIt)->Contains(ME))
         return true;
     return false;
   }
-
-  if (ME->GetType() == SMDSAbs_Node)
-  {
-    int idInShape = ME->getIdInShape();
-    if ((idInShape >= 0) && (idInShape < (int) myNodes.size()))
-      if (myNodes[idInShape] == ME)
-        return true;
-  }
-  else
-  {
-    int idInShape = ME->getIdInShape();
-    if ((idInShape >= 0) && (idInShape < (int) myElements.size()))
-      if (myElements[idInShape] == ME)
-        return true;
-  }
-  return false;
+  return ME->getshapeId() == myIndex;
 }
 
 //=======================================================================
@@ -437,18 +347,18 @@ bool SMESHDS_SubMesh::IsQuadratic() const
 {
   if ( IsComplexSubmesh() )
   {
-    set<const SMESHDS_SubMesh*>::const_iterator aSubIt = mySubMeshes.begin();
+    TSubMeshSet::const_iterator aSubIt = mySubMeshes.begin();
     for (; aSubIt != mySubMeshes.end(); aSubIt++)
       if ((*aSubIt)->IsQuadratic())
         return true;
     return false;
   }
 
-  for ( size_t i = 0; i < myElements.size(); ++i )
-    if ( myElements[i] )
-      return myElements[i]->IsQuadratic();
+  if ( myNbElements == 0 )
+    return false;
 
-  return false;
+  SMDS_ElemIteratorPtr it = GetElements();
+  return it->more() && it->next()->IsQuadratic();
 }
 
 //=======================================================================
@@ -499,10 +409,8 @@ bool SMESHDS_SubMesh::ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const
 
 SMESHDS_SubMeshIteratorPtr SMESHDS_SubMesh::GetSubMeshIterator() const
 {
-  typedef set<const SMESHDS_SubMesh*>::const_iterator TIterator;
-  return SMESHDS_SubMeshIteratorPtr
-    ( new SMDS_SetIterator< const SMESHDS_SubMesh*, TIterator >( mySubMeshes.begin(),
-                                                                 mySubMeshes.end()));
+  typedef SMDS_SetIterator< const SMESHDS_SubMesh*, TSubMeshSet::const_iterator > TIterator;
+  return boost::make_shared< TIterator >( mySubMeshes.begin(), mySubMeshes.end());
 }
 
 //=======================================================================
@@ -514,26 +422,22 @@ void SMESHDS_SubMesh::Clear()
 {
   if ( myParent && myParent->NbNodes() > 0 )
   {
-    for ( size_t i = 0; i < myElements.size(); ++i )
-    {
-      if ( myElements[i] &&
-           myElements[i]->GetID() > 0 &&
-           myElements[i] == myParent->FindElement( myElements[i]->GetID() )) // not deleted
-        const_cast< SMDS_MeshElement* >( myElements[i] )->setShapeId( 0 );
-    }
-    for ( size_t i = 0; i < myNodes.size(); ++i )
-    {
-      if ( myNodes[i] &&
-           myNodes[i]->GetID() > 0 &&
-           myNodes[i] == myParent->FindNode( myNodes[i]->GetID() )) // not deleted
-        const_cast< SMDS_MeshNode* >( myNodes[i] )->setShapeId( 0 );
-    }
+    if ( myNbElements > 0 )
+      for ( SMDS_ElemIteratorPtr it = GetElements(); it->more(); )
+      {
+        const SMDS_MeshElement * elem = it->next();
+        elem->setShapeID( 0 );
+      }
+    if ( myNbNodes > 0 )
+      for ( SMDS_NodeIteratorPtr it = GetNodes(); it->more(); )
+      {
+        const SMDS_MeshNode * elem = it->next();
+        elem->setShapeID( 0 );
+      }
   }
 
-  clearVector( myElements );
-  clearVector( myNodes );
-  myUnusedIdNodes = 0;
-  myUnusedIdElements = 0;
+  myNbElements = 0;
+  myNbNodes = 0;
   if ( NbSubMeshes() > 0 )
   {
     SMESHDS_SubMeshIteratorPtr sub = GetSubMeshIterator();
@@ -543,71 +447,3 @@ void SMESHDS_SubMesh::Clear()
     }
   }
 }
-
-int SMESHDS_SubMesh::getSize()
-{
-  int c = NbNodes();
-  int d = NbElements();
-  return c+d;
-}
-
-void SMESHDS_SubMesh::compactList()
-{
-  if ( myUnusedIdElements > 0 )
-  {
-    std::vector<const SMDS_MeshElement*> newElems;
-    newElems.reserve( myElements.size() - myUnusedIdElements );
-    for ( size_t i = 0; i < myElements.size(); i++)
-      if ( myElements[i] )
-      {
-        SMDS_MeshElement* elem = (SMDS_MeshElement*)myElements[i];
-        elem->setIdInShape( newElems.size() );
-        newElems.push_back( elem );
-      }
-    myElements.swap(newElems);
-    myUnusedIdElements = 0;
-  }
-  else
-  {
-    std::vector<const SMDS_MeshElement*>( myElements ).swap( myElements );
-  }
-
-  if ( myUnusedIdNodes > 0 )
-  {
-    std::vector<const SMDS_MeshNode*> newNodes;
-    newNodes.reserve( myNodes.size() - myUnusedIdNodes );
-    for ( size_t i = 0; i < myNodes.size(); i++ )
-      if ( myNodes[i] )
-      {
-        SMDS_MeshNode* node = (SMDS_MeshNode*)myNodes[i];
-        node->setIdInShape( newNodes.size() );
-        newNodes.push_back( node );
-      }
-    myNodes.swap(newNodes);
-    myUnusedIdNodes = 0;
-  }
-  else
-  {
-    std::vector<const SMDS_MeshNode*>( myNodes ).swap( myNodes );
-  }
-}
-
-//=======================================================================
-//function : GetElement
-//purpose  : Return an element by its IdInShape
-//=======================================================================
-
-const SMDS_MeshElement* SMESHDS_SubMesh::GetElement( size_t idInShape ) const
-{
-  return ( !IsComplexSubmesh() && idInShape < myElements.size() ) ? myElements[idInShape] : 0;
-}
-
-//=======================================================================
-//function : GetElement
-//purpose  : Return a node by its IdInShape
-//=======================================================================
-
-const SMDS_MeshNode* SMESHDS_SubMesh::GetNode( size_t idInShape ) const
-{
-  return ( !IsComplexSubmesh() && idInShape < myNodes.size() ) ? myNodes[idInShape] : 0;
-}
index 9a9d61f63db944e90b705aa40d657d1423cd43c5..2caffb10b15b8e91a117f79f85abfaf3701feee2 100644 (file)
 #include "SMESH_SMESHDS.hxx"
 
 #include "SMDS_Mesh.hxx"
-#include <set>
 #include <vector>
 
+#include <boost/container/flat_set.hpp>
+class SMESHDS_SubMesh;
+typedef boost::container::flat_set< const SMESHDS_SubMesh* > TSubMeshSet;
+
 class SMESHDS_SubMesh;
 typedef SMDS_Iterator<const SMESHDS_SubMesh*> SMESHDS_SubMeshIterator;
 typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr;
@@ -49,11 +52,11 @@ class SMESHDS_EXPORT SMESHDS_SubMesh
 
   // if !IsComplexSubmesh()
   virtual void AddElement(const SMDS_MeshElement * ME);
-  virtual bool RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted); // ret true if ME was in
+  virtual bool RemoveElement(const SMDS_MeshElement * ME); // ret true if ME was in
   virtual void AddNode(const SMDS_MeshNode * ME);
-  virtual bool RemoveNode(const SMDS_MeshNode * ME, bool isNodeDeleted);       // ret true if ME was in
-  virtual const SMDS_MeshElement* GetElement( size_t idInShape ) const;
-  virtual const SMDS_MeshNode*    GetNode   ( size_t idInShape ) const;
+  virtual bool RemoveNode(const SMDS_MeshNode * ME);       // ret true if ME was in
+  //virtual const SMDS_MeshElement* GetElement( size_t idInShape ) const;
+  //virtual const SMDS_MeshNode*    GetNode   ( size_t idInShape ) const;
 
   // if IsComplexSubmesh()
   void AddSubMesh( const SMESHDS_SubMesh* theSubMesh );
@@ -65,29 +68,25 @@ class SMESHDS_EXPORT SMESHDS_SubMesh
 
   // for both types
   virtual int NbElements() const;
-  virtual SMDS_ElemIteratorPtr GetElements(bool reverse=false) const;
   virtual int NbNodes() const;
-  virtual SMDS_NodeIteratorPtr GetNodes(bool reverse=false) const;
+  virtual SMDS_ElemIteratorPtr GetElements() const;
+  virtual SMDS_NodeIteratorPtr GetNodes() const;
   virtual bool Contains(const SMDS_MeshElement * ME) const;      // check if elem or node is in
   virtual bool IsQuadratic() const;
 
   // clear the contents
   virtual void Clear();
-  int  getSize();
-  void compactList();
 
   SMESHDS_Mesh* GetParent() const { return const_cast< SMESHDS_Mesh*>( myParent ); }
   int           GetID()     const { return myIndex; }
 
  private:
-  SMESHDS_Mesh *                       myParent;
-  std::vector<const SMDS_MeshElement*> myElements;
-  std::vector<const SMDS_MeshNode*>    myNodes;
 
-  int myUnusedIdNodes;
-  int myUnusedIdElements;
-  int myIndex;
+  int             myIndex;
+  int             myNbElements;
+  int             myNbNodes;
+  SMESHDS_Mesh *  myParent;
+  TSubMeshSet     mySubMeshes;
 
-  std::set<const SMESHDS_SubMesh*> mySubMeshes;
 };
 #endif
index 9c13dc614113d2824e11ac6ec456504415e8a7f0..9c9bf99c5f94f7bac88db962e281628e0921f4a8 100644 (file)
@@ -20,7 +20,8 @@
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
+  ${QT_INCLUDES}
   ${PYTHON_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
@@ -36,7 +37,7 @@ INCLUDE_DIRECTORIES(
 ADD_DEFINITIONS(
   ${OMNIORB_DEFINITIONS}
   ${PYTHON_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
 )
 
 # libraries to link to
@@ -48,9 +49,8 @@ SET(_link_LIBRARIES
   ${GUI_LightApp}
   ${GEOM_GEOM}
   ${GEOM_GEOMClient}
-  ${CAS_TKernel}
-  ${CAS_TKMath}
-  ${CAS_TKBRep}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
   SalomeIDLSMESH
 )
 
index a06cac1571ce8964d8841ed66d46cacb0182cd00..258033585a049cc6c69990c3755613dd0da04486 100644 (file)
@@ -25,7 +25,7 @@ INCLUDE_DIRECTORIES(
   ${QT_INCLUDES}
   ${VTK_INCLUDE_DIRS}
   ${OGL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${PYTHON_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
   ${GUI_INCLUDE_DIRS}
@@ -49,7 +49,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
 )
@@ -61,7 +61,7 @@ ENDIF(WIN32)
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_TKV3d}
+  ${OpenCASCADE_Visualization_LIBRARIES}
   ${GUI_SalomePrs}
   ${GUI_suit}
   ${GUI_SUITApp}
@@ -111,6 +111,7 @@ SET(_moc_HEADERS
   SMESHGUI_RotationDlg.h
   SMESHGUI_TranslationDlg.h
   SMESHGUI_ScaleDlg.h
+  SMESHGUI_OffsetDlg.h
   SMESHGUI_SymmetryDlg.h
   SMESHGUI_SewingDlg.h
   SMESHGUI_DuplicateNodesDlg.h
@@ -142,7 +143,6 @@ SET(_moc_HEADERS
   SMESHGUI_FieldSelectorWdg.h
   SMESHGUI_DisplayEntitiesDlg.h
   SMESHGUI_SplitBiQuad.h
-  SMESHGUI_PreVisualObj.h
   SMESHGUI_IdPreview.h
 )
 
@@ -206,6 +206,7 @@ SET(_other_SOURCES
   SMESHGUI_RotationDlg.cxx
   SMESHGUI_TranslationDlg.cxx
   SMESHGUI_ScaleDlg.cxx
+  SMESHGUI_OffsetDlg.cxx
   SMESHGUI_SymmetryDlg.cxx
   SMESHGUI_SewingDlg.cxx
   SMESHGUI_DuplicateNodesDlg.cxx
index 2e698c6ded5431d7b3d2393f6b807129692e2667..73dee46ef1a8b731d07bcc703899e65ae025f3ec 100644 (file)
@@ -74,6 +74,7 @@
 #include "SMESHGUI_RevolutionDlg.h"
 #include "SMESHGUI_RotationDlg.h"
 #include "SMESHGUI_ScaleDlg.h"
+#include "SMESHGUI_OffsetDlg.h"
 #include "SMESHGUI_Selection.h"
 #include "SMESHGUI_SewingDlg.h"
 #include "SMESHGUI_SingleEditDlg.h"
@@ -1654,7 +1655,9 @@ namespace
     ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume );
     ActionControl.Bind( SMESHOp::OpEqualVolume,           SMESH_Actor::eCoincidentElems3D );
 
-    return theReversed ? ActionControl.Find2( theID ) : ActionControl.Find1( theID );
+    if ( theReversed )
+      return ActionControl.IsBound2( theID ) ? ActionControl.Find2( theID ) : 0;
+    return   ActionControl.IsBound1( theID ) ? ActionControl.Find1( theID ) : 0;
   }
 
   void Control( int theCommandID )
@@ -1808,20 +1811,24 @@ void SMESHGUI::OnEditDelete()
   int objectCount = 0;
   QString aNameList;
   QString aParentComponent = QString::null;
-  Handle(SALOME_InteractiveObject) anIO;
+  
   for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() )
   {
-    anIO = anIt.Value();
-    QString cur = anIO->getComponentDataType();
-    _PTR(SObject) aSO = aStudy->FindObjectID(anIO->getEntry());
+    Handle(SALOME_InteractiveObject) anIO = anIt.Value();
+    if ( anIO.IsNull() ) continue;
+    
+    QString father = "unknown";
+
+    _PTR(SObject) aSO = aStudy->FindObjectID( anIO->getEntry() );
     if (aSO) {
+      father = QString::fromStdString( aSO->GetFatherComponent()->ComponentDataType() );
       // check if object is reference
       _PTR(SObject) aRefSObj;
       aNameList.append("\n    - ");
       if ( aSO->ReferencedObject( aRefSObj ) ) {
         QString aRefName = QString::fromStdString ( aRefSObj->GetName() );
         aNameList.append( aRefName );
-        cur = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() );
+        father = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() );
       }
       else
         aNameList.append(anIO->getName());
@@ -1829,8 +1836,8 @@ void SMESHGUI::OnEditDelete()
     }
 
     if( aParentComponent.isNull() )
-      aParentComponent = cur;
-    else if( !aParentComponent.isEmpty() && aParentComponent!=cur )
+      aParentComponent = father;
+    else if( !aParentComponent.isEmpty() && aParentComponent!=father )
       aParentComponent = "";
   }
 
@@ -3464,6 +3471,20 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       break;
     }
 
+  case SMESHOp::OpOffset:
+    {
+      if(isStudyLocked()) break;
+      if ( vtkwnd ) {
+        EmitSignalDeactivateDialog();
+        ( new SMESHGUI_OffsetDlg( this ) )->show();
+      }
+      else {
+        SUIT_MessageBox::warning(SMESHGUI::desktop(),
+                                 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"));
+      }
+      break;
+    }
+
   case SMESHOp::OpSewing:
     {
       if(isStudyLocked()) break;
@@ -3914,6 +3935,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpRotation,               "ROT",             "ICON_DLG_MESH_ROTATION" );
   createSMESHAction( SMESHOp::OpSymmetry,               "SYM",             "ICON_SMESH_SYMMETRY_PLANE" );
   createSMESHAction( SMESHOp::OpScale,                  "SCALE",           "ICON_DLG_MESH_SCALE" );
+  createSMESHAction( SMESHOp::OpOffset,                 "OFFSET",          "ICON_DLG_MESH_OFFSET" );
   createSMESHAction( SMESHOp::OpSewing,                 "SEW",             "ICON_SMESH_SEWING_FREEBORDERS" );
   createSMESHAction( SMESHOp::OpMergeNodes,             "MERGE",           "ICON_SMESH_MERGE_NODES" );
   createSMESHAction( SMESHOp::OpMergeElements,          "MERGE_ELEMENTS",  "ICON_DLG_MERGE_ELEMENTS" );
@@ -4152,31 +4174,32 @@ void SMESHGUI::initialize( CAM_Application* app )
   //createMenu( SMESHOp::OpRenumberingNodes,    renumId, -1 );
   //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 );
 
+  createMenu( SMESHOp::OpMergeNodes,     transfId, -1 );
+  createMenu( SMESHOp::OpMergeElements,  transfId, -1 );
   createMenu( SMESHOp::OpTranslation,    transfId, -1 );
   createMenu( SMESHOp::OpRotation,       transfId, -1 );
   createMenu( SMESHOp::OpSymmetry,       transfId, -1 );
   createMenu( SMESHOp::OpScale,          transfId, -1 );
+  createMenu( SMESHOp::OpOffset,         transfId, -1 );
   createMenu( SMESHOp::OpSewing,         transfId, -1 );
-  createMenu( SMESHOp::OpMergeNodes,     transfId, -1 );
-  createMenu( SMESHOp::OpMergeElements,  transfId, -1 );
   createMenu( SMESHOp::OpDuplicateNodes, transfId, -1 );
 
+  createMenu( SMESHOp::OpConvertMeshToQuadratic, modifyId, -1 );
+  createMenu( SMESHOp::OpCreateBoundaryElements, modifyId, -1 );
+  createMenu( SMESHOp::OpExtrusion,              modifyId, -1 );
+  createMenu( SMESHOp::OpExtrusionAlongAPath,    modifyId, -1 );
+  createMenu( SMESHOp::OpRevolution,             modifyId, -1 );
+  createMenu( SMESHOp::OpOrientation,            modifyId, -1 );
+  createMenu( SMESHOp::OpReorientFaces,          modifyId, -1 );
   createMenu( SMESHOp::OpMoveNode,               modifyId, -1 );
   createMenu( SMESHOp::OpDiagonalInversion,      modifyId, -1 );
   createMenu( SMESHOp::OpUnionOfTwoTriangle,     modifyId, -1 );
-  createMenu( SMESHOp::OpOrientation,            modifyId, -1 );
-  createMenu( SMESHOp::OpReorientFaces,          modifyId, -1 );
   createMenu( SMESHOp::OpUnionOfTriangles,       modifyId, -1 );
   createMenu( SMESHOp::OpCuttingOfQuadrangles,   modifyId, -1 );
   createMenu( SMESHOp::OpSplitVolumes,           modifyId, -1 );
   createMenu( SMESHOp::OpSplitBiQuadratic,       modifyId, -1 );
   createMenu( SMESHOp::OpSmoothing,              modifyId, -1 );
-  createMenu( SMESHOp::OpExtrusion,              modifyId, -1 );
-  createMenu( SMESHOp::OpExtrusionAlongAPath ,   modifyId, -1 );
-  createMenu( SMESHOp::OpRevolution,             modifyId, -1 );
   createMenu( SMESHOp::OpPatternMapping,         modifyId, -1 );
-  createMenu( SMESHOp::OpConvertMeshToQuadratic, modifyId, -1 );
-  createMenu( SMESHOp::OpCreateBoundaryElements, modifyId, -1 );
 
   createMenu( SMESHOp::OpMinimumDistance,  measureId,   -1 );
   createMenu( SMESHOp::OpBoundingBox,      measureId,   -1 );
@@ -4296,31 +4319,32 @@ void SMESHGUI::initialize( CAM_Application* app )
   //createTool( SMESHOp::OpRenumberingNodes,    renumbTb );
   //createTool( SMESHOp::OpRenumberingElements, renumbTb );
 
+  createTool( SMESHOp::OpMergeNodes,     transformTb );
+  createTool( SMESHOp::OpMergeElements,  transformTb );
   createTool( SMESHOp::OpTranslation,    transformTb );
   createTool( SMESHOp::OpRotation,       transformTb );
   createTool( SMESHOp::OpSymmetry,       transformTb );
   createTool( SMESHOp::OpScale,          transformTb );
+  createTool( SMESHOp::OpOffset,         transformTb );
   createTool( SMESHOp::OpSewing,         transformTb );
-  createTool( SMESHOp::OpMergeNodes,     transformTb );
-  createTool( SMESHOp::OpMergeElements,  transformTb );
   createTool( SMESHOp::OpDuplicateNodes, transformTb );
 
+  createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb );
+  createTool( SMESHOp::OpCreateBoundaryElements, modifyTb );
+  createTool( SMESHOp::OpExtrusion,              modifyTb );
+  createTool( SMESHOp::OpExtrusionAlongAPath,    modifyTb );
+  createTool( SMESHOp::OpRevolution,             modifyTb );
+  createTool( SMESHOp::OpOrientation,            modifyTb );
+  createTool( SMESHOp::OpReorientFaces,          modifyTb );
   createTool( SMESHOp::OpMoveNode,               modifyTb );
   createTool( SMESHOp::OpDiagonalInversion,      modifyTb );
   createTool( SMESHOp::OpUnionOfTwoTriangle,     modifyTb );
-  createTool( SMESHOp::OpOrientation,            modifyTb );
-  createTool( SMESHOp::OpReorientFaces,          modifyTb );
   createTool( SMESHOp::OpUnionOfTriangles,       modifyTb );
   createTool( SMESHOp::OpCuttingOfQuadrangles,   modifyTb );
   createTool( SMESHOp::OpSplitVolumes,           modifyTb );
   createTool( SMESHOp::OpSplitBiQuadratic,       modifyTb );
   createTool( SMESHOp::OpSmoothing,              modifyTb );
-  createTool( SMESHOp::OpExtrusion,              modifyTb );
-  createTool( SMESHOp::OpExtrusionAlongAPath,    modifyTb );
-  createTool( SMESHOp::OpRevolution,             modifyTb );
   createTool( SMESHOp::OpPatternMapping,         modifyTb );
-  createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb );
-  createTool( SMESHOp::OpCreateBoundaryElements, modifyTb );
 
   createTool( SMESHOp::OpMinimumDistance, measuremTb );
 
index a015b4181e1bdd6b9b04185f0d633b1ea2023cfc..c97769b31ecd2a2a38a620b69e24fc6b3b6f2210 100644 (file)
@@ -222,7 +222,7 @@ SMESHGUI_Add0DElemsOnAllNodesOp::SMESHGUI_Add0DElemsOnAllNodesOp()
    myDlg( new SMESHGUI_Add0DElemsOnAllNodesDlg ),
    myFilterDlg( 0 )
 {
-  myHelpFileName = "adding_nodes_and_elements_page.html#adding_0delems_on_all_nodes_anchor";
+  myHelpFileName = "adding_nodes_and_elements.html#adding-0delems-on-all-nodes-anchor";
 
   connect( myDlg,              SIGNAL( selTypeChanged(int) ), SLOT( onSelTypeChange(int)));
   connect( myDlg->myFilterBtn, SIGNAL( clicked()),            SLOT( onSetFilter() ));
index aea995c8823cd43610f476b0bde02abcaff123e4..642244cc69cd237b2b80d86145af953e98313cdc 100644 (file)
@@ -40,7 +40,7 @@
 #include <SMESH_FaceOrientationFilter.h>
 #include <SMDS_Mesh.hxx>
 
-// SALOME GUI inclues
+// SALOME GUI includes
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
@@ -56,7 +56,7 @@
 #include <Qtx.h>
 
 
-// IDL incldues
+// IDL includes
 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 // OCCT includes
@@ -307,68 +307,68 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI*          theMo
     myNbNodes = 1;
     myElementType = SMDSAbs_0DElement;
     elemName = "ELEM0D";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_0delems_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-0delems-anchor";
     break;
   case SMDSEntity_Ball:
     myNbNodes = 1;
     myElementType = SMDSAbs_Ball;
     elemName = "BALL";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_ball_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-balls-anchor";
     break;
   case SMDSEntity_Edge:
     myNbNodes = 2;
     myElementType = SMDSAbs_Edge;
     elemName = "EDGE";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_edges_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-edges-anchor";
     break;
   case SMDSEntity_Triangle:
     myNbNodes = 3;
     elemName = "TRIANGLE";
     myElementType = SMDSAbs_Face;
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_triangles_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-triangles-anchor";
     break;
   case SMDSEntity_Quadrangle:
     myNbNodes = 4;
     myElementType = SMDSAbs_Face;
     elemName = "QUADRANGLE";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_quadrangles_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-quadrangles-anchor";
     break;
   case SMDSEntity_Polygon:
     myNbNodes = 0;
     myElementType = SMDSAbs_Face;
     elemName = "POLYGON";
     myIsPoly = true;
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_polygons_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-polygons-anchor";
     break;
   case SMDSEntity_Tetra:
     myNbNodes = 4;
     elemName = "TETRAS";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_tetrahedrons_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-tetrahedrons-anchor";
     break;
   case SMDSEntity_Pyramid:
     myNbNodes = 5;
     elemName = "PYRAMID";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_pyramids_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-pyramids-anchor";
     break;
   case SMDSEntity_Hexa:
     myNbNodes = 8;
     elemName = "HEXAS";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_hexahedrons_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-hexahedrons-anchor";
     break;
   case SMDSEntity_Penta:
     myNbNodes = 6;
     elemName = "PENTA";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_pentahedrons_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-pentahedrons-anchor";
     break;
   case SMDSEntity_Hexagonal_Prism:
     myNbNodes = 12;
     elemName = "OCTA";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_octahedrons_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-octahedrons-anchor";
     break;
   default:
     myNbNodes = 2;
     elemName = "EDGE";
-    myHelpFileName = "adding_nodes_and_elements_page.html#adding_edges_anchor";
+    myHelpFileName = "adding_nodes_and_elements.html#adding-edges-anchor";
   }
 
   QString iconName      = tr(QString("ICON_DLG_%1").arg(elemName).toLatin1().data());
@@ -777,7 +777,7 @@ void SMESHGUI_AddMeshElementDlg::onTextChange (const QString& theNewText)
 
   mySimulation->SetVisibility(false);
 
-  // hilight entered nodes
+  // highlight entered nodes
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 0c8b92b1926e5d4352171a811a57153fe59cd393..d6fe5d426dcd5dc1d83281ee41bb11cc01ee2075 100644 (file)
@@ -546,67 +546,67 @@ void SMESHGUI_AddQuadraticElementDlg::Init()
   case SMDSEntity_Quad_Edge:
     aNumRows = 1;
     myNbCorners = 2;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_edges
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_edges
     break;
   case SMDSEntity_Quad_Triangle:
     aNumRows = 3;
     myNbCorners = 3;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_triangles
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_triangles
     break;
   case SMDSEntity_BiQuad_Triangle:
     aNumRows = 3;
     myNbCorners = 3;
     myNbCenterNodes = 1;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_triangles
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_triangles
     break;
   case SMDSEntity_Quad_Quadrangle:
     aNumRows = 4;
     myNbCorners = 4;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_quadrangles
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_quadrangles
     break;
   case SMDSEntity_BiQuad_Quadrangle:
     aNumRows = 4;
     myNbCorners = 4;
     myNbCenterNodes = 1;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_quadrangles
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_quadrangles
     break;
   case SMDSEntity_Quad_Polygon:
     aNumRows = 5;
     myNbCorners = 0; // no limit
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_polygons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_polygons
     break;
   case SMDSEntity_Quad_Tetra:
     aNumRows = 6;
     myNbCorners = 4;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_tetrahedrons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_tetrahedrons
     break;
   case SMDSEntity_Quad_Pyramid:
     aNumRows = 8;
     myNbCorners = 5;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_pyramids
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_pyramids
     break;
   case SMDSEntity_Quad_Penta:
     aNumRows = 9;
     myNbCorners = 6;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_pentahedrons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_pentahedrons
     break;
   case SMDSEntity_BiQuad_Penta:
     aNumRows = 9;
     myNbCorners = 6;
     myNbMidFaceNodes = 3;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_pentahedrons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_pentahedrons
     break;
   case SMDSEntity_Quad_Hexa:
     aNumRows = 12;
     myNbCorners = 8;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_hexahedrons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_hexahedrons
     break;
   case SMDSEntity_TriQuad_Hexa:
     aNumRows = 12;
     myNbCorners = 8;
     myNbMidFaceNodes = 6;
     myNbCenterNodes = 1;
-    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_hexahedrons
+    myHelpFileName = "adding_quadratic_elements.html#?"; //Adding_hexahedrons
     break;
   default:;
   }
@@ -977,7 +977,7 @@ void SMESHGUI_AddQuadraticElementDlg::onTextChange (const QString& theNewText)
 
   mySimulation->SetVisibility(false);
 
-  // hilight entered nodes
+  // highlight entered nodes
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 0cd63352b9c86ce79a25a0f6561459fda6ef0c86..1791c6b3a019bcd6826094ed8f59d6dcf16ba082 100644 (file)
@@ -179,7 +179,7 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule )
   aTopLayout->addWidget(GroupArgs);
   aTopLayout->addWidget(GroupButtons);
 
-  myHelpFileName = "building_compounds_page.html";
+  myHelpFileName = "building_compounds.html";
 
   Init(); // Initialisations
 }
index 55a87509d6480b73bd28f60640a6244d00e53c2f..18aede561ad2457ed2965a9348177aa63d491b1c 100644 (file)
@@ -552,7 +552,7 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg( SMESHGUI* theModule, SVTK_ViewWindow
 
   myIsSelectPlane = false;
 
-  myHelpFileName = "clipping_page.html";
+  myHelpFileName = "clipping.html";
 
   // signals and slots connections :
   connect( ComboBoxPlanes, SIGNAL( activated( int ) ), this, SLOT( onSelectPlane( int ) ) );
index 3c3363d6fdbb23533da667858396eb0739f8db29..e4b23363e053429e8052ec490e72aca4cd42a12d 100644 (file)
@@ -657,7 +657,7 @@ SMESHGUI_BaseComputeOp::SMESHGUI_BaseComputeOp()
   myBadMeshDisplayer = 0;
 
   //myHelpFileName = "/files/about_meshes.htm"; // V3
-  myHelpFileName = "about_meshes_page.html"; // V4
+  myHelpFileName = "about_meshes.html"; // V4
 }
 
 SMESH::SMESH_Mesh_ptr SMESHGUI_BaseComputeOp::getMesh()
@@ -1529,7 +1529,7 @@ QTableWidget* SMESHGUI_BaseComputeOp::table()
 SMESHGUI_ComputeOp::SMESHGUI_ComputeOp()
  : SMESHGUI_BaseComputeOp()
 {
-  myHelpFileName = "constructing_meshes_page.html#compute_anchor";
+  myHelpFileName = "constructing_meshes.html#compute-anchor";
 }
 
 
@@ -1639,7 +1639,7 @@ LightApp_Dialog* SMESHGUI_PrecomputeOp::dlg() const
 
 void SMESHGUI_PrecomputeOp::startOperation()
 {
-  myHelpFileName = "constructing_meshes_page.html#preview_anchor"; // other anchor onCompute()
+  myHelpFileName = "constructing_meshes.html#preview-anchor"; // other anchor onCompute()
 
   if ( !myDlg )
   {
@@ -1876,7 +1876,7 @@ void SMESHGUI_PrecomputeOp::onCompute()
     myOrderMgr->SetMeshOrder();
   myMapShapeId.clear();
   myActiveDlg = computeDlg();
-  myHelpFileName = "constructing_meshes_page.html#compute_anchor";
+  myHelpFileName = "constructing_meshes.html#compute-anchor";
   computeMesh();
 }
 
@@ -1988,7 +1988,7 @@ void SMESHGUI_PrecomputeOp::onPreview()
     {
       computeFailed = false;
       myPreviewDisplayer->SetData( previewRes );
-      // append shape indeces with computed mesh entities
+      // append shape indices with computed mesh entities
       for ( int i = 0, n = aShapesId->length(); i < n; i++ )
         myMapShapeId[ aShapesId[ i ] ] = 0;
     }
@@ -2142,7 +2142,7 @@ SMESHGUI_MeshOrderBox* SMESHGUI_PrecomputeDlg::getMeshOrderBox() const
 SMESHGUI_EvaluateOp::SMESHGUI_EvaluateOp()
  : SMESHGUI_BaseComputeOp()
 {
-  myHelpFileName = "constructing_meshes_page.html#evaluate_anchor";
+  myHelpFileName = "constructing_meshes.html#evaluate-anchor";
 }
 
 
index 2e25f2c5220487ab2e325a2f6f285e495929579e..4d2b01e0b12bccb85bf9d61568f71142e58aac0b 100644 (file)
@@ -101,7 +101,7 @@ void SMESHGUI_ConvToQuadOp::startOperation()
   }
   connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
 
-  myHelpFileName = "convert_to_from_quadratic_mesh_page.html";
+  myHelpFileName = "convert_to_from_quadratic_mesh.html";
 
   SMESHGUI_SelectionOp::startOperation();
 
index b6609fcff170f51dbd081d3852524135d9223d89..f1d45f3880c65b01a6894ebb35f9fad11443c43e 100644 (file)
@@ -218,7 +218,7 @@ SMESHGUI_CopyMeshDlg::SMESHGUI_CopyMeshDlg( SMESHGUI* theModule )
   // Selection filter
   myIdSourceFilter = new SMESH_TypeFilter( SMESH::IDSOURCE );
 
-  myHelpFileName = "copy_mesh_page.html";
+  myHelpFileName = "copy_mesh.html";
 
   Init();
 
@@ -452,7 +452,7 @@ void SMESHGUI_CopyMeshDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements
+  // highlight entered elements
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 0f061100302b716a540192067a33ada86f45e197..6f7e51b7b0e66d9e7219718dda3275daadc5728b 100755 (executable)
@@ -105,7 +105,7 @@ SMESHGUI_CreatePatternDlg::SMESHGUI_CreatePatternDlg( SMESHGUI*   theModule,
 
   aDlgLay->setStretchFactor( aMainFrame, 1 );
 
-  myHelpFileName = "pattern_mapping_page.html";
+  myHelpFileName = "pattern_mapping.html";
 
   Init( theType );
 }
@@ -622,7 +622,7 @@ void SMESHGUI_CreatePatternDlg::onSelectionDone()
 
 //=======================================================================
 // function : onDeactivate()
-// purpose  : SLOT called when dialog must be deativated
+// purpose  : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_CreatePatternDlg::onDeactivate()
 {
index 38f64d2ad93ae9a334323a1e19e2e3a7ec0c6bde..37b0745e35e42c4f3d79240f669fc4c8ed533fb4 100644 (file)
@@ -302,7 +302,7 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI
  
   mySMESHGUI->SetActiveDialogBox( (QDialog*)this );
 
-  myHelpFileName = "adding_nodes_and_elements_page.html#adding_polyhedrons_anchor";
+  myHelpFileName = "adding_nodes_and_elements.html#adding-polyhedrons-anchor";
   
   Init();
 }
@@ -717,7 +717,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText)
         buttonOk->setEnabled( false );
         buttonApply->setEnabled( false );
       
-        // check entered ids of faces and hilight them
+        // check entered ids of faces and highlight them
         QStringList aListId;
         if ( aMesh ) {
           TColStd_MapOfInteger newIndices;
index 6f589a9a0e42c5bd7568036fab40709e6c3f8bc9..e308e3043609ad9825ed85a660d4df6e3d525832 100644 (file)
@@ -90,7 +90,7 @@ SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg (SMESHGUI* theModule):
   aDlgLay->addWidget(aMainFrame);
   aDlgLay->addWidget(aBtnFrame);
 
-  myHelpFileName = "deleting_groups_page.html";
+  myHelpFileName = "deleting_groups.html";
 
   Init();
 }
@@ -315,7 +315,7 @@ void SMESHGUI_DeleteGroupDlg::onSelectionDone()
 
 //=================================================================================
 // function : onDeactivate()
-// purpose  : SLOT called when dialog must be deativated
+// purpose  : SLOT called when dialog must be deactivated
 //=================================================================================
 void SMESHGUI_DeleteGroupDlg::onDeactivate()
 {
index fd673c22a2ba68d98f2ef6549fd71bf674f77987..808f6e219aa2363567b318f675fb8f79ed81500c 100644 (file)
@@ -220,7 +220,7 @@ void SMESHGUI_DisplayEntitiesDlg::onChangeEntityMode( bool isChecked )
 void SMESHGUI_DisplayEntitiesDlg::onHelp()
 {
   LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
-  app->onHelpContextModule( "SMESH", "display_entity_page.html" );
+  app->onHelpContextModule( "SMESH", "display_entity.html" );
 }
 
 /*!
index 383c936857b0565912a7c94e6420ad71fe703751..d288a5b1d5d23ee964c21cd9d593ef116058c53a 100644 (file)
@@ -688,7 +688,7 @@ bool SMESHGUI_DuplicateNodesDlg::isValid()
 }
 
 /*!
-  \brief SLOT called when dialog shoud be deativated.
+  \brief SLOT called when dialog should be deactivated.
 */
 void SMESHGUI_DuplicateNodesDlg::onDeactivate()
 {
index 417d1f803f4a813800dca173f6df50f98a9948aa..a49334d9800c2971e4ab29bd853581cfcf45fd71 100644 (file)
@@ -289,7 +289,7 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
 
   myPathMeshFilter = new SMESH_TypeFilter(SMESH::MESHorSUBMESH);
 
-  myHelpFileName = "extrusion_along_path_page.html";
+  myHelpFileName = "extrusion_along_path.html";
 
   Init();
 
index 7a37a17158400f98af2d3fad2914c06d2a20197e..b2aa6bd4534258d9505430dede8ce4564af2727f 100644 (file)
@@ -337,7 +337,7 @@ void SMESHGUI_3TypesSelector::onTextChange( const QString& theNewText )
 
   myBusy = true;
 
-  // hilight entered elements/nodes
+  // highlight entered elements/nodes
 
   myIDSource[ iType ]->length( 0 );
 
@@ -819,7 +819,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule)
 
   mySMESHGUI->SetActiveDialogBox(this);
 
-  myHelpFileName = "extrusion_page.html";
+  myHelpFileName = "extrusion.html";
 
   Init();
 
@@ -1289,7 +1289,7 @@ void SMESHGUI_ExtrusionDlg::ClickOnHelp()
 #endif
     SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
                              tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                             arg(app->resourceMgr()->stringValue("ExternalBrowser", 
+                             arg(app->resourceMgr()->stringValue("ExternalBrowser",
                                                                  platform)).
                              arg(myHelpFileName));
   }
@@ -1323,7 +1323,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
       return;
 
     const SMDS_MeshFace* face =
-      dynamic_cast<const SMDS_MeshFace*>(aMesh->FindElement(aMapIndex(1)));
+      aMesh->DownCast< SMDS_MeshFace >(aMesh->FindElement(aMapIndex(1)));
     if (!face)
       return;
 
index d0f3a6512b620fd47c8dee5249af031c30cbd371..567ba381f2cf2dc599b4923ca9a405ffa1d15896 100755 (executable)
@@ -2740,7 +2740,7 @@ void SMESHGUI_FilterDlg::construct (const QList<int>& theTypes)
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
-  myHelpFileName = "selection_filter_library_page.html";
+  myHelpFileName = "selection_filter_library.html";
 
   Init(myTypes);
 }
@@ -3072,7 +3072,7 @@ void SMESHGUI_FilterDlg::onHelp()
 
 //=======================================================================
 // name    : SMESHGUI_FilterDlg::onDeactivate
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_FilterDlg::onDeactivate()
 {
index acb75c27319dfe500a97ca49f449e0e1d15a710c..2972d8cda38fadd75a7ef840350523c3e19806ac 100644 (file)
@@ -153,7 +153,7 @@ void SMESHGUI_FilterLibraryDlg::construct (const QList<int>& theTypes,
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
-  myHelpFileName = "selection_filter_library_page.html";
+  myHelpFileName = "selection_filter_library.html";
   
   Init(myTypes, myMode);
 }
@@ -517,7 +517,7 @@ void SMESHGUI_FilterLibraryDlg::onHelp()
 
 //=======================================================================
 // name    : SMESHGUI_FilterLibraryDlg::onDeactivate
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_FilterLibraryDlg::onDeactivate()
 {
@@ -602,7 +602,7 @@ QStringList SMESHGUI_FilterLibraryDlg::prepareFilters() const
 
 //================================================================
 // Function : onBrowse
-// Purpose  : SLOT. Display "Open file" dialog for chosing library name
+// Purpose  : SLOT. Display "Open file" dialog for choosing library name
 //================================================================
 void SMESHGUI_FilterLibraryDlg::onBrowse()
 {
index a23d80aa330af5e6685a294cc48c8add33c50edd..f3c23cfb59b16c551d25e0500e6930c7f1f22297 100644 (file)
@@ -240,7 +240,7 @@ SMESHGUI_FindElemByPointOp::SMESHGUI_FindElemByPointOp()
   mySimulation = 0;
   mySMESHGUI = 0;
   myDlg = new SMESHGUI_FindElemByPointDlg;
-  myHelpFileName = "find_element_by_point_page.html";
+  myHelpFileName = "find_element_by_point.html";
 
   QList<SUIT_SelectionFilter*> filters;
   filters.append( new SMESH_TypeFilter( SMESH::MESH ) );
@@ -346,7 +346,7 @@ void SMESHGUI_FindElemByPointOp::onCloseView()
 }
 //================================================================================
 /*!
- * \brief hilight found selected elements
+ * \brief highlight found selected elements
  */
 //================================================================================
 
index dc1a29fa3b5c42cf4c09a45bd8222090c01842d6..9a0d91656d17eb576dc8981fbfa746044eac57d8 100644 (file)
@@ -192,7 +192,7 @@ void SMESHGUI_GroupDlg::initDialog( bool create)
   QPixmap image0( SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap( "SMESH", tr( "ICON_SELECT" ) ) );
 
   setWindowTitle( create ? tr( "SMESH_CREATE_GROUP_TITLE" ) : tr( "SMESH_EDIT_GROUP_TITLE" ) );
-  myHelpFileName = create ? "creating_groups_page.html" : "editing_groups_page.html";
+  myHelpFileName = create ? "creating_groups.html" : "editing_groups.html";
 
   setSizeGripEnabled( true);
 
@@ -1192,7 +1192,7 @@ bool SMESHGUI_GroupDlg::onApply()
             anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break;          
             break;
           }
-          // update a visible group accoding to a changed contents
+          // update a visible group according to a changed contents
           if ( !isConversion && anActor->GetVisibility() )
           {
             SMESH::Update( anIO, true );
@@ -1420,8 +1420,9 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
           aGroupMainShape = aGeomGroup;
           aGroupMainShape->Register();
         }
+        CORBA::String_var entry = aGroupMainShape->GetStudyEntry();
         _PTR(SObject) aGroupMainShapeSO =
-          SMESH::getStudy()->FindObjectID(aGroupMainShape->GetStudyEntry());
+          SMESH::getStudy()->FindObjectID( entry.in() );
 
         _PTR(SObject) anObj, aRef;
         bool isRefOrSubShape = false;
@@ -1445,10 +1446,10 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 
       myGeomObjects->length(i);
       if ( i == 0 )
-        {
-          myIsBusy = false;
-          return;
-        }
+      {
+        myIsBusy = false;
+        return;
+      }
 
       aNbSel = i;
     }
@@ -2303,7 +2304,7 @@ void SMESHGUI_GroupDlg::onHelp()
 
 //=================================================================================
 // function : SMESHGUI_GroupDlg::onDeactivate
-// purpose  : SLOT called when dialog must be deativated
+// purpose  : SLOT called when dialog must be deactivated
 //=================================================================================
 void SMESHGUI_GroupDlg::onDeactivate()
 {
index 3c32b743eea5fa8d1accec0b353cc8044b23e2a5..263e6e368612a8478ad0a757340e4b68fa665b1c 100644 (file)
@@ -134,7 +134,7 @@ SMESHGUI_GroupOnShapeDlg::~SMESHGUI_GroupOnShapeDlg()
 
 //================================================================================
 /*!
- * \brief slot to enable/diable [Apply]
+ * \brief slot to enable/disable [Apply]
  */
 //================================================================================
 
@@ -180,7 +180,7 @@ SMESHGUI_GroupOnShapeOp::SMESHGUI_GroupOnShapeOp()
   : SMESHGUI_SelectionOp(ActorSelection),
     myDlg( 0 )
 {
-  myHelpFileName = "create_groups_from_geometry_page.html";
+  myHelpFileName = "create_groups_from_geometry.html";
 }
 
 SMESHGUI_GroupOnShapeOp::~SMESHGUI_GroupOnShapeOp()
@@ -504,6 +504,6 @@ void SMESHGUI_GroupOnShapeOp::selectionDone()
     myNodeGeoIDs = goodIds;
   }
 
-  // enable/diable Apply, which can change at selection
+  // enable/disable Apply, which can change at selection
   myDlg->updateButtons();
 }
index b4084b6655b391f4cf23e1a6d91dbff3b7e09e78..f74cd803cbf3ea1fb266c5e94e49e1683446c6ba 100644 (file)
@@ -482,7 +482,7 @@ void SMESHGUI_GroupOpDlg::setVisible( bool visible )
 }
 
 /*!
-  \brief SLOT called when dialog must be deativated
+  \brief SLOT called when dialog must be deactivated
 */
 void SMESHGUI_GroupOpDlg::onDeactivate()
 {
@@ -596,7 +596,7 @@ SMESHGUI_UnionGroupsDlg::SMESHGUI_UnionGroupsDlg( SMESHGUI* theModule )
 : SMESHGUI_GroupOpDlg( theModule )
 {
   setWindowTitle(tr("UNION_OF_GROUPS"));
-  setHelpFileName( "using_operations_on_groups_page.html#union_anchor" );
+  setHelpFileName( "using_operations_on_groups.html#union-anchor" );
 
   QGroupBox* anArgGrp = getArgGrp();
   myListWg = new QListWidget( anArgGrp );
@@ -705,7 +705,7 @@ SMESHGUI_IntersectGroupsDlg::SMESHGUI_IntersectGroupsDlg( SMESHGUI* theModule )
 : SMESHGUI_GroupOpDlg( theModule )
 {
   setWindowTitle(tr("INTERSECTION_OF_GROUPS"));
-  setHelpFileName( "using_operations_on_groups_page.html#intersection_anchor" );
+  setHelpFileName( "using_operations_on_groups.html#intersection-anchor" );
 
   QGroupBox* anArgGrp = getArgGrp();
   myListWg = new QListWidget( anArgGrp );
@@ -814,7 +814,7 @@ SMESHGUI_CutGroupsDlg::SMESHGUI_CutGroupsDlg( SMESHGUI* theModule )
 : SMESHGUI_GroupOpDlg( theModule )
 {
   setWindowTitle(tr("CUT_OF_GROUPS"));
-  setHelpFileName( "using_operations_on_groups_page.html#cut_anchor" );
+  setHelpFileName( "using_operations_on_groups.html#cut-anchor" );
 
   QGroupBox* anArgGrp = getArgGrp();
 
@@ -996,7 +996,7 @@ SMESHGUI_DimGroupDlg::SMESHGUI_DimGroupDlg( SMESHGUI* theModule )
   : SMESHGUI_GroupOpDlg( theModule )
 {
   setWindowTitle( tr( "CREATE_GROUP_OF_UNDERLYING_ELEMS" ) );
-  setHelpFileName( "group_of_underlying_elements_page.html" );
+  setHelpFileName( "group_of_underlying_elements.html" );
 
   QGroupBox* anArgGrp = getArgGrp();
 
index bbb79cfe37e233e780e26c3fdc47f52d0e42e886..b00ac68d7f51508f4d0718035857194e5fa91185 100644 (file)
@@ -583,53 +583,53 @@ QString SMESHGUI_GenericHypothesisCreator::helpPage() const
   QString aHypType = hypType();
   QString aHelpFileName = "";
   if ( aHypType == "LocalLength" )
-    aHelpFileName = "a1d_meshing_hypo_page.html#average_length_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#average-length-anchor";
   else if ( aHypType == "MaxLength" )
-    aHelpFileName = "a1d_meshing_hypo_page.html#max_length_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#max-length-anchor";
   else if ( aHypType == "Arithmetic1D")
-    aHelpFileName = "a1d_meshing_hypo_page.html#arithmetic_1d_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#arithmetic-1d-anchor";
   else if ( aHypType == "GeometricProgression")
-    aHelpFileName = "a1d_meshing_hypo_page.html#geometric_1d_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#geometric-1d-anchor";
   else if ( aHypType == "FixedPoints1D")
-    aHelpFileName = "a1d_meshing_hypo_page.html#fixed_points_1d_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#fixed-points-1d-anchor";
   else if ( aHypType == "MaxElementArea")
-    aHelpFileName = "a2d_meshing_hypo_page.html#max_element_area_anchor";
+    aHelpFileName = "2d_meshing_hypo.html#max-element-area-anchor";
   else if ( aHypType == "MaxElementVolume")
-    aHelpFileName = "max_element_volume_hypo_page.html";
+    aHelpFileName = "max_element_volume_hypo.html";
   else if ( aHypType == "StartEndLength")
-    aHelpFileName = "a1d_meshing_hypo_page.html#start_and_end_length_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#start-and-end-length-anchor";
   else if ( aHypType == "Deflection1D")
-    aHelpFileName = "a1d_meshing_hypo_page.html#deflection_1d_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#deflection-1d-anchor";
   else if ( aHypType == "Adaptive1D")
-    aHelpFileName = "a1d_meshing_hypo_page.html#adaptive_1d_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#adaptive-1d-anchor";
   else if ( aHypType == "AutomaticLength")
-    aHelpFileName = "a1d_meshing_hypo_page.html#automatic_length_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#automatic-length-anchor";
   else if ( aHypType == "NumberOfSegments")
-    aHelpFileName = "a1d_meshing_hypo_page.html#number_of_segments_anchor";
+    aHelpFileName = "1d_meshing_hypo.html#number-of-segments-anchor";
   else if ( aHypType == "ProjectionSource1D")
-    aHelpFileName = "projection_algos_page.html";
+    aHelpFileName = "projection_algos.html";
   else if ( aHypType == "ProjectionSource2D")
-    aHelpFileName = "projection_algos_page.html";
+    aHelpFileName = "projection_algos.html";
   else if ( aHypType == "ProjectionSource3D")
-    aHelpFileName = "projection_algos_page.html";
+    aHelpFileName = "projection_algos.html";
   else if ( aHypType == "NumberOfLayers")
-    aHelpFileName = "radial_prism_algo_page.html";
+    aHelpFileName = "radial_prism_algo.html";
   else if ( aHypType == "NumberOfLayers2D")
-    aHelpFileName = "radial_quadrangle_1D2D_algo_page.html";
+    aHelpFileName = "radial_quadrangle_1D2D_algo.html";
   else if ( aHypType == "LayerDistribution")
-    aHelpFileName = "radial_prism_algo_page.html";
+    aHelpFileName = "radial_prism_algo.html";
   else if ( aHypType == "LayerDistribution2D")
-    aHelpFileName = "radial_quadrangle_1D2D_algo_page.html";
+    aHelpFileName = "radial_quadrangle_1D2D_algo.html";
   else if ( aHypType == "SegmentLengthAroundVertex")
-    aHelpFileName = "segments_around_vertex_algo_page.html";
+    aHelpFileName = "segments_around_vertex_algo.html";
   else if ( aHypType == "QuadrangleParams")
-    aHelpFileName = "a2d_meshing_hypo_page.html#hypo_quad_params_anchor";
+    aHelpFileName = "2d_meshing_hypo.html#hypo-quad-params-anchor";
   else if ( aHypType == "ViscousLayers")
-    aHelpFileName = "additional_hypo_page.html#viscous_layers_anchor";
+    aHelpFileName = "additional_hypo.html#viscous-layers-anchor";
   else if ( aHypType == "ViscousLayers2D")
-    aHelpFileName = "additional_hypo_page.html#viscous_layers_anchor";
+    aHelpFileName = "additional_hypo.html#viscous-layers-anchor";
   else if ( aHypType == "ImportSource1D" || aHypType == "ImportSource2D")
-    aHelpFileName = "import_algos_page.html";
+    aHelpFileName = "use_existing_algos.html";
   return aHelpFileName;
 }
 
index 73c54eb1ca251a616187e101b1ebc48490b97ea8..54918c0f6e92c88f6eaf7108fbf66c919916be76 100644 (file)
@@ -238,7 +238,7 @@ void SMESHGUI_Make2DFrom3DOp::startOperation()
   if( !myDlg )
     myDlg = new SMESHGUI_Make2DFrom3DDlg( desktop() );
 
-  myHelpFileName = "make_2dmesh_from_3d_page.html";
+  myHelpFileName = "make_2dmesh_from_3d.html";
 
   SMESHGUI_SelectionOp::startOperation();
 
index cd5a89ff5c3de644c2369612222b06d3cde59c82..bc3fd0723d7b19cbc6834966bbcf5adcd6152315 100644 (file)
@@ -355,7 +355,7 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
   mySMESHGUI = 0;
   myDlg = new SMESHGUI_MakeNodeAtPointDlg;
   myFilter = 0;
-  myHelpFileName = "mesh_through_point_page.html";
+  myHelpFileName = "mesh_through_point.html";
 
   myNoPreview = false;
   myUpdateDestination = false;
index c58a8c9c67fee4d967dc45197820425587a1fec4..1f1d5aa8a0315d1db7057afd6f17ddc92c6f5dcb 100644 (file)
@@ -1457,11 +1457,11 @@ void SMESHGUI_MeasureDlg::help()
 {
   QString aHelpFile;
   if ( myTabWidget->currentIndex() == MinDistance ) {
-    aHelpFile = "measurements_page.html#min_distance_anchor";
+    aHelpFile = "measurements.html#min-distance-anchor";
   } else if ( myTabWidget->currentIndex() == BoundingBox ) {
-    aHelpFile = "measurements_page.html#bounding_box_anchor";
+    aHelpFile = "measurements.html#bounding-box-anchor";
   } else {
-    aHelpFile = "measurements_page.html#basic_properties_anchor";
+    aHelpFile = "measurements.html#basic-properties-anchor";
   }
 
   SMESH::ShowHelpFile( aHelpFile );
index d25b65970ef32240d3939f6cc4d85ac96475330e..6bba06313aced59eb31f9ac401b664c94b0062f1 100644 (file)
@@ -462,9 +462,9 @@ void SMESHGUI_MergeDlg::Init()
   updateControls();
   
   if ( myAction == MERGE_NODES )
-    myHelpFileName = "merging_nodes_page.html";
+    myHelpFileName = "merging_nodes.html";
   else
-    myHelpFileName = "merging_elements_page.html";
+    myHelpFileName = "merging_elements.html";
 }
 
 //=================================================================================
index b99c8a4f6a59a4931f56fb51f5ae63a5c8513650..bb0b265f78cfc8c30502de98e8bdb04716e4688f 100644 (file)
@@ -692,7 +692,7 @@ void SMESHGUI_MeshDlg::reset()
 
 //================================================================================
 /*!
- * \brief Sets curent tab
+ * \brief Sets current tab
  */
 //================================================================================    
 void SMESHGUI_MeshDlg::setCurrentTab( const int theId  )
index 780ea97f8f8c044079c0689500d003a5f04367f3..f69cc76b86181ba9c644097a27dfeab2a816a983 100644 (file)
@@ -1121,7 +1121,7 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement*
 */
 SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::normal( const SMDS_MeshElement* element )
 {
-  gp_XYZ n = SMESH::getNormale( dynamic_cast<const SMDS_MeshFace*>( element ));
+  gp_XYZ n = SMESH::getNormale( SMDS_Mesh::DownCast<SMDS_MeshFace>( element ));
   return XYZ(n.X(), n.Y(), n.Z());
 }
 
@@ -1397,7 +1397,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
         if ( e->GetEntityType() > SMDSEntity_0D && e->GetEntityType() < SMDSEntity_Ball ) {
           myInfo->append( QString( "<b>%1?</b> %2" ).arg( SMESHGUI_ElemInfo::tr( "QUADRATIC" )).arg( e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" )) );
         }
-        if ( const SMDS_BallElement* ball = dynamic_cast<const SMDS_BallElement*>( e )) {
+        if ( const SMDS_BallElement* ball = SMDS_Mesh::DownCast<SMDS_BallElement>( e )) {
           // Ball diameter
           myInfo->append( QString( "<b>%1:</b> %2" ).arg( SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" )).arg( ball->GetDiameter() ));
         }
@@ -1915,7 +1915,7 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
         case SMDSEntity_Polyhedra:
         case SMDSEntity_Quad_Polyhedra:
           gtype = SMESHGUI_ElemInfo::tr( "POLYHEDRON" ); break;
-        default: 
+        default:
           break;
         }
         if ( !gtype.isEmpty() ) {
@@ -1930,7 +1930,7 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
           quadItem->setText( 0, SMESHGUI_ElemInfo::tr( "QUADRATIC" ));
           quadItem->setText( 1, e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" ));
         }
-        if ( const SMDS_BallElement* ball = dynamic_cast<const SMDS_BallElement*>( e )) {
+        if ( const SMDS_BallElement* ball = SMDS_Mesh::DownCast< SMDS_BallElement >( e )) {
           // ball diameter
           QTreeWidgetItem* diamItem = createItem( elemItem, Bold );
           diamItem->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" ));
@@ -1949,12 +1949,14 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
           }
         }
         else {
-          const SMDS_VtkVolume* aVtkVolume = dynamic_cast<const SMDS_VtkVolume*>(e);
-          SMDS_ElemIteratorPtr nodeIt = aVtkVolume->uniqueNodesIterator();
+          SMDS_NodeIteratorPtr nodeIt = e->nodeIterator();
+          std::set< const SMDS_MeshNode* > addedNodes;
           QList<const SMDS_MeshElement*> uniqueNodes;
-          while ( nodeIt->more() )
-            uniqueNodes.append( nodeIt->next() );
-
+          while ( nodeIt->more() ) {
+            const SMDS_MeshNode* node = nodeIt->next();
+            if ( addedNodes.insert( node ).second )
+              uniqueNodes.append( nodeIt->next() );
+          }
           SMDS_VolumeTool vtool( e );
           const int nbFaces = vtool.NbFaces();
           for( int face_id = 0; face_id < nbFaces; face_id++ ) {
@@ -1963,10 +1965,10 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
             faceItem->setExpanded( true );
 
             const SMDS_MeshNode** aNodeIds = vtool.GetFaceNodes( face_id );
-            const int nbNodes = vtool.NbFaceNodes( face_id );
+            const int              nbNodes = vtool.NbFaceNodes ( face_id );
             for( int node_id = 0; node_id < nbNodes; node_id++ ) {
               const SMDS_MeshNode* node = aNodeIds[node_id];
-              nodeInfo( node, uniqueNodes.indexOf(node) + 1, aVtkVolume->NbUniqueNodes(), faceItem );
+              nodeInfo( node, uniqueNodes.indexOf(node) + 1, uniqueNodes.size(), faceItem );
             }
           }
         }
@@ -2081,7 +2083,9 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
         afunctor->SetMesh( actor()->GetObject()->GetMesh() );
         QTreeWidgetItem* minEdgeItem = createItem( cntrItem, Bold );
         minEdgeItem->setText( 0, tr( "MIN_ELEM_EDGE" ));
-        minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
+        SMESH::Controls::TSequenceOfXYZ points;
+        afunctor->GetPoints( e, points ); // "non-standard" way, to make it work for all elem types
+        minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( points )) );
 
         // gravity center
         XYZ gc = gravityCenter( e );
@@ -2373,7 +2377,7 @@ void SMESHGUI_TreeElemInfo::saveInfo( QTextStream &out )
 */
 
 /*!
-  \brief Contructor
+  \brief Constructor
 */
 GrpComputor::GrpComputor( SMESH::SMESH_GroupBase_ptr grp,
                           QTreeWidgetItem*           item,
@@ -3114,8 +3118,8 @@ void SMESHGUI_MeshInfoDlg::updateSelection()
 void SMESHGUI_MeshInfoDlg::help()
 {
   SMESH::ShowHelpFile( ( myTabWidget->currentIndex() == BaseInfo || myTabWidget->currentIndex() == AddInfo ) ?
-                       "mesh_infos_page.html#advanced_mesh_infos_anchor" : 
-                       "mesh_infos_page.html#mesh_element_info_anchor" );
+                       "mesh_infos.html#advanced-mesh-infos-anchor" : 
+                       "mesh_infos.html#mesh-element-info-anchor" );
 }
 
 /*!
@@ -4029,5 +4033,5 @@ void SMESHGUI_CtrlInfoDlg::dump()
  */
 void SMESHGUI_CtrlInfoDlg::help()
 {
-  SMESH::ShowHelpFile("mesh_infos_page.html#mesh_quality_info_anchor");
+  SMESH::ShowHelpFile("mesh_infos.html#mesh_quality_info_anchor");
 }
index f9f5ab83ab4fe362ec1f26df2d76926d30d3a309..66a205082e97472f6db20cee6d8beb5afd948147 100644 (file)
@@ -218,11 +218,11 @@ void SMESHGUI_MeshOp::startOperation()
     connect( myDlg, SIGNAL( geomSelectionByMesh( bool )), SLOT( onGeomSelectionByMesh( bool )));
     connect( myDlg, SIGNAL( selectMeshType( const int, const int ) ), SLOT( onAlgoSetByMeshType( const int, const int)));
     if ( myToCreate ) {
-      if ( myIsMesh ) myHelpFileName = "constructing_meshes_page.html";
-      else            myHelpFileName = "constructing_submeshes_page.html";
+      if ( myIsMesh ) myHelpFileName = "constructing_meshes.html";
+      else            myHelpFileName = "constructing_submeshes.html";
     }
     else {
-      myHelpFileName = "editing_meshes_page.html";
+      myHelpFileName = "editing_meshes.html";
     }
   }
   SMESHGUI_SelectionOp::startOperation();
index d009508d3796eb361e1673574e6fc607400e1fa4..5e18d5f350e3f86814d614971811adce3dad1b71 100644 (file)
@@ -122,7 +122,7 @@ static void addMeshItem( QListWidget* theList,
 
 // =========================================================================================
 /*!
- * \brief Clear submesh names and indeces
+ * \brief Clear submesh names and indices
  */
 // =========================================================================================
 
@@ -134,7 +134,7 @@ void SMESHGUI_MeshOrderBox::Clear()
 
 // =========================================================================================
 /*!
- * \brief Set submesh names and indeces
+ * \brief Set submesh names and indices
  */
 // =========================================================================================
 
@@ -159,7 +159,7 @@ void SMESHGUI_MeshOrderBox::SetMeshes(const ListListName& theMeshNames,
 
 // =========================================================================================
 /*!
- * \brief cehck that item exists and not a separator
+ * \brief check that item exists and not a separator
  */
 // =========================================================================================
 
@@ -191,7 +191,7 @@ ListListId SMESHGUI_MeshOrderBox::GetMeshIds() const
 
 // =========================================================================================
 /*!
- * \brief Returns result (ordered by user) mesh indeces
+ * \brief Returns result (ordered by user) mesh indices
  */
 // =========================================================================================
 
index dce14acab65dda781e0549c8e1f3755371270685..1992fe0fb02124d426fc3824c026368a73d0beaa 100644 (file)
@@ -57,7 +57,7 @@ class SMESHGUI_EXPORT SMESHGUI_MeshOrderBox : public QGroupBox
   //! Clear mesh box
   void         Clear();
 
-  //! Set mesh (submesh) names and indeces
+  //! Set mesh (submesh) names and indices
   void         SetMeshes(const ListListName& theMeshNames,
                          const ListListId&   theMeshIds);
 
@@ -66,7 +66,7 @@ class SMESHGUI_EXPORT SMESHGUI_MeshOrderBox : public QGroupBox
 
   //! Returns result (ordered by user) mesh names
   ListListId   GetMeshIds() const;
-  //! Returns result (ordered by user) mesh indeces
+  //! Returns result (ordered by user) mesh indices
   ListListName GetMeshNames() const;
  
  private slots:
index cab1695a5f155c89bccdd0734724236020e5582e..2b4d02c9271c73189e3045467da7949b026999b9 100644 (file)
@@ -52,7 +52,7 @@ SMESHGUI_MeshOrderOp::SMESHGUI_MeshOrderOp()
 {
   myDlg = new SMESHGUI_MeshOrderDlg( desktop() );
   
-  myHelpFileName = "constructing_meshes_page.html#mesh_order_anchor";
+  myHelpFileName = "constructing_meshes.html#mesh-order-anchor";
 }
 
 //================================================================================
@@ -120,7 +120,7 @@ void SMESHGUI_MeshOrderOp::initDialog()
   if ( !myMgr->GetMeshOrder() ) {
     SUIT_MessageBox::information(desktop(),
                              tr("SMESH_INFORMATION"),
-                             tr("SMESH_NO_CONCURENT_MESH"));
+                             tr("SMESH_NO_CONCURRENT_MESH"));
     
     onCancel();
     return;
@@ -199,7 +199,7 @@ void SMESHGUI_MeshOrderMgr::SetMesh(SMESH::SMESH_Mesh_var& theMesh)
 
 //================================================================================
 /*!
- * \brief Check for concurents between submesh objects
+ * \brief Check for concurrents between submesh objects
  */
 //================================================================================
 
@@ -211,7 +211,7 @@ bool SMESHGUI_MeshOrderMgr::GetMeshOrder()
 
 //================================================================================
 /*!
- * \brief Check for concurents between submesh objects
+ * \brief Check for concurrents between submesh objects
  */
 //================================================================================
 
@@ -300,8 +300,8 @@ bool SMESHGUI_MeshOrderMgr::SetMeshOrder( const  ListListId& theListListIds )
     }
   }
 
-  // is it enought to set modifid attribute on root mesh objects only?
-  //  it is seems that modifaction flag will be set on child submeshes 
+  // is it enough to set modified attribute on root mesh objects only?
+  //  it is seems that modifcation flag will be set on child submeshes 
   //  automatically  (see SMESH::ModifiedMesh for details)
   SMESH::ModifiedMesh( aMeshSObj, false, false );
 
index 2ddad6318ea5d84f3374fa484b696942accb9a42..b17d45a7cab98b307acf0d00a58e6fa673506593 100644 (file)
@@ -45,9 +45,9 @@ public:
   virtual ~SMESHGUI_MeshOrderMgr();
   //! Set root mesh object
   void                   SetMesh( SMESH::SMESH_Mesh_var& theMesh );
-  //! Check for concurents between submesh objects
+  //! Check for concurrents between submesh objects
   bool                   GetMeshOrder();
-  //! Check for concurents between submesh objects
+  //! Check for concurrents between submesh objects
   bool                   GetMeshOrder( ListListId& theIds );
   //! Store submesh priority order
   bool                   SetMeshOrder();
index 8b0bd227c3e17d9b62df382b7feb1a28691f5deb..fb9c60a25cf182100bc4622bbd5072640fbe7f6f 100755 (executable)
@@ -129,7 +129,7 @@ SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg( SMESHGUI* theModule )
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
-  myHelpFileName = "pattern_mapping_page.html";
+  myHelpFileName = "pattern_mapping.html";
 
   Init();
 }
@@ -723,7 +723,7 @@ void SMESHGUI_MeshPatternDlg::resetSelInput()
 
 //=======================================================================
 // name    : SMESHGUI_MeshPatternDlg::onDeactivate
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_MeshPatternDlg::onDeactivate()
 {
@@ -1400,7 +1400,7 @@ void SMESHGUI_MeshPatternDlg::onTextChanged (const QString& theNewText)
     activateSelection();
   }
 
-  // hilight entered elements/nodes
+  // highlight entered elements/nodes
   SMDS_Mesh* aMesh = 0;
   SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
   if (anActor)
index 2c0ae0edabc67f19ed5b0d01a0f46d75bb4e1355..09a7c6055a2087915a89b3660f91e6f03d133b5e 100755 (executable)
@@ -600,7 +600,7 @@ void SMESHGUI_MultiEditDlg::onSelectionDone()
 
 //=======================================================================
 // name    : SMESHGUI_MultiEditDlg::onDeactivate
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_MultiEditDlg::onDeactivate()
 {
@@ -883,7 +883,7 @@ void SMESHGUI_MultiEditDlg::onListSelectionChanged()
     if (myListBox->item(i)->isSelected())
     {
       int anId = myListBox->item(i)->text().toInt();
-      if (anObj->GetElemVTKId(anId) >= 0) // avoid exception in hilight
+      if (anObj->GetElemVTKId(anId) >= 0) // avoid exception in highlight
         anIndexes.Add(anId);
     }
   }
@@ -1093,7 +1093,7 @@ SMESHGUI_ChangeOrientationDlg
   SMESHGUI_MultiEditDlg(theModule, SMESH::FaceFilter, true)
 {
   setWindowTitle(tr("CAPTION"));
-  myHelpFileName = "changing_orientation_of_elements_page.html";
+  myHelpFileName = "changing_orientation_of_elements.html";
 }
 
 SMESHGUI_ChangeOrientationDlg::~SMESHGUI_ChangeOrientationDlg()
@@ -1161,7 +1161,7 @@ SMESHGUI_UnionOfTrianglesDlg
   myPreviewCheckBox->setChecked(false);
   onDisplaySimulation(false);
 
-  myHelpFileName = "uniting_set_of_triangles_page.html";
+  myHelpFileName = "uniting_set_of_triangles.html";
 }
 
 SMESHGUI_UnionOfTrianglesDlg::~SMESHGUI_UnionOfTrianglesDlg()
@@ -1289,7 +1289,7 @@ SMESHGUI_CuttingOfQuadsDlg
   connect(myComboBoxFunctor, SIGNAL(activated(int)),       this, SLOT(onPreviewChk()));
   connect(this,              SIGNAL(ListContensChanged()), this, SLOT(onPreviewChk()));
 
-  myHelpFileName = "cutting_quadrangles_page.html";
+  myHelpFileName = "cutting_quadrangles.html";
 }
 
 SMESHGUI_CuttingOfQuadsDlg::~SMESHGUI_CuttingOfQuadsDlg()
@@ -1551,7 +1551,7 @@ SMESHGUI_SplitVolumesDlg::SMESHGUI_SplitVolumesDlg(SMESHGUI* theModule)
   : SMESHGUI_MultiEditDlg(theModule, SMESH::VolumeFilter, /*the3d2d=*/true, /*doInit=*/false)
 {
   setWindowTitle(tr("CAPTION"));
-  myHelpFileName = "split_to_tetra_page.html";
+  myHelpFileName = "split_to_tetra.html";
   myEntityType = 1;
   myCellSize = -1.;
 
@@ -1628,7 +1628,7 @@ SMESHGUI_SplitVolumesDlg::SMESHGUI_SplitVolumesDlg(SMESHGUI* theModule)
       gb->setTitle( tr("TARGET_ELEM_TYPE"));
   }
 
-  myToAllChk->setChecked( true ); //aplly to the whole mesh by default
+  myToAllChk->setChecked( true ); //apply to the whole mesh by default
 
   bool hasHexa = true;//myMesh->_is_nil() ? false : myMesh->NbHexas();
   if ( hasHexa )
index 5f2f2d9219df22fafb0819ace97a245f5cbe1ff5..3a2d3308cf06fa7f83de4d86bf823f68627e7dab 100644 (file)
@@ -329,7 +329,7 @@ SMESHGUI_NodesDlg::SMESHGUI_NodesDlg( SMESHGUI* theModule ):
   SMESHGUI_NodesDlgLayout->addWidget( GroupGroups );
   SMESHGUI_NodesDlgLayout->addWidget( GroupButtons );
 
-  myHelpFileName = "adding_nodes_and_elements_page.html#adding_nodes_anchor";
+  myHelpFileName = "adding_nodes_and_elements.html#adding-nodes-anchor";
 
   /* Initialisation and display */
   Init();
diff --git a/src/SMESHGUI/SMESHGUI_OffsetDlg.cxx b/src/SMESHGUI/SMESHGUI_OffsetDlg.cxx
new file mode 100644 (file)
index 0000000..111a841
--- /dev/null
@@ -0,0 +1,937 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SMESHGUI_OffsetDlg.cxx
+
+//  SMESH includes
+
+#include "SMESHGUI_OffsetDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_IdValidator.h"
+#include "SMESHGUI_FilterDlg.h"
+#include "SMESHGUI_MeshEditPreview.h"
+
+#include <SMESH_Actor.h>
+#include <SMESH_TypeFilter.hxx>
+#include <SMESH_LogicalFilter.hxx>
+#include <SMDS_Mesh.hxx>
+
+// SALOME GUI includes
+#include <LightApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+#include <SALOME_ListIO.hxx>
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+#include <SalomeApp_Tools.h>
+
+// SALOME KERNEL includes
+#include <SALOMEDSClient.hxx>
+#include <SALOMEDSClient_SObject.hxx>
+
+// OCCT includes
+#include <TColStd_MapOfInteger.hxx>
+
+// Qt includes
+#include <QApplication>
+#include <QButtonGroup>
+#include <QGroupBox>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QSpinBox>
+#include <QKeyEvent>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
+
+/*!
+  \class BusyLocker
+  \brief Simple 'busy state' flag locker.
+  \internal
+*/
+class BusyLocker
+{
+public:
+  //! Constructor. Sets passed boolean flag to \c true.
+  BusyLocker( bool& busy ) : myBusy( busy ) { myBusy = true; }
+  //! Destructor. Clear external boolean flag passed as parameter to the constructor to \c false.
+  ~BusyLocker() { myBusy = false; }
+private:
+  bool& myBusy; //! External 'busy state' boolean flag
+};
+
+#define SPACING 6
+#define MARGIN  11
+
+//=================================================================================
+// class    : SMESHGUI_OffsetDlg()
+// purpose  :
+//=================================================================================
+SMESHGUI_OffsetDlg::SMESHGUI_OffsetDlg( SMESHGUI* theModule ) :
+  SMESHGUI_MultiPreviewDlg( theModule ),
+  mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
+  myFilterDlg(0)
+{
+  QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_MESH_OFFSET")));
+  QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  setModal(false);
+  setAttribute(Qt::WA_DeleteOnClose, true);
+  setWindowTitle(tr("SMESH_OFFSET_TITLE"));
+  setSizeGripEnabled(true);
+
+  QVBoxLayout* dlgLayout = new QVBoxLayout(this);
+  dlgLayout->setSpacing(SPACING);
+  dlgLayout->setMargin(MARGIN);
+
+  /***************************************************************/
+  ConstructorsBox = new QGroupBox(tr("SMESH_OFFSET"), this);
+  QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox);
+  ConstructorsBoxLayout->setSpacing(SPACING);
+  ConstructorsBoxLayout->setMargin(MARGIN);
+
+  QRadioButton* RadioButton1= new QRadioButton(ConstructorsBox);
+  RadioButton1->setIcon(image0);
+
+  ConstructorsBoxLayout->addWidget(RadioButton1);
+
+  /***************************************************************/
+  GroupArguments = new QGroupBox(tr("SMESH_ARGUMENTS"), this);
+  QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments);
+  GroupArgumentsLayout->setSpacing(SPACING);
+  GroupArgumentsLayout->setMargin(MARGIN);
+
+  myIdValidator = new SMESHGUI_IdValidator(this);
+
+  // Controls for elements selection
+  TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments);
+  // SelectElementsButton = new QPushButton(GroupArguments);
+  // 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()));
+
+  // Control for the whole mesh selection
+  CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments);
+
+  // offset
+  QLabel* TextLabel1 = new QLabel(tr("OFFSET_VALUE"), GroupArguments);
+  SpinBox = new SMESHGUI_SpinBox(GroupArguments);
+
+
+  // switch of action type
+  ActionBox = new QGroupBox(GroupArguments);
+  ActionGroup = new QButtonGroup(GroupArguments);
+  QVBoxLayout* ActionBoxLayout = new QVBoxLayout(ActionBox);
+  ActionBoxLayout->addSpacing(SPACING);
+  ActionBoxLayout->setMargin(MARGIN);
+
+  QRadioButton* aMoveElements = new QRadioButton(tr("SMESH_MOVE_ELEMENTS"), ActionBox);
+  QRadioButton* aCopyElements = new QRadioButton(tr("SMESH_COPY_ELEMENTS"), ActionBox);
+  QRadioButton* aCreateMesh   = new QRadioButton(tr("SMESH_CREATE_MESH"),   ActionBox);
+
+  ActionBoxLayout->addWidget(aMoveElements);
+  ActionBoxLayout->addWidget(aCopyElements);
+  ActionBoxLayout->addWidget(aCreateMesh);
+  ActionGroup->addButton(aMoveElements, MOVE_ELEMS_BUTTON);
+  ActionGroup->addButton(aCopyElements, COPY_ELEMS_BUTTON);
+  ActionGroup->addButton(aCreateMesh,   MAKE_MESH_BUTTON);
+
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(false);
+
+  // Name of a mesh to create
+  LineEditNewMesh = new QLineEdit(GroupArguments);
+
+  //Preview check box
+  myPreviewCheckBox = new QCheckBox(tr("PREVIEW"), GroupArguments);
+
+  // layout
+  GroupArgumentsLayout->addWidget(TextLabelElements,    0, 0);
+  //GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
+  GroupArgumentsLayout->addWidget(LineEditElements,     0, 2, 1, 5);
+  GroupArgumentsLayout->addWidget(myFilterBtn,          0, 7);
+  GroupArgumentsLayout->addWidget(CheckBoxMesh,         1, 0, 1, 8);
+  GroupArgumentsLayout->addWidget(TextLabel1,           2, 0);
+  GroupArgumentsLayout->addWidget(SpinBox,              2, 3);
+  GroupArgumentsLayout->addWidget(ActionBox,            3, 0, 3, 4);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck,      4, 5, 1, 4);
+  GroupArgumentsLayout->addWidget(LineEditNewMesh,      5, 5, 1, 4);
+  GroupArgumentsLayout->addWidget(myPreviewCheckBox,    6, 0);
+
+  /***************************************************************/
+  GroupButtons = new QGroupBox(this);
+  QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons);
+  GroupButtonsLayout->setSpacing(SPACING);
+  GroupButtonsLayout->setMargin(MARGIN);
+
+  buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
+  buttonOk->setAutoDefault(true);
+  buttonOk->setDefault(true);
+  buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
+  buttonApply->setAutoDefault(true);
+  buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
+  buttonCancel->setAutoDefault(true);
+  buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
+  buttonHelp->setAutoDefault(true);
+
+  GroupButtonsLayout->addWidget(buttonOk);
+  GroupButtonsLayout->addSpacing(10);
+  GroupButtonsLayout->addWidget(buttonApply);
+  GroupButtonsLayout->addSpacing(10);
+  GroupButtonsLayout->addStretch();
+  GroupButtonsLayout->addWidget(buttonCancel);
+  GroupButtonsLayout->addWidget(buttonHelp);
+
+  /***************************************************************/
+  dlgLayout->addWidget(ConstructorsBox);
+  dlgLayout->addWidget(GroupArguments);
+  dlgLayout->addWidget(GroupButtons);
+
+  /* Initialisations */
+  SpinBox->RangeStepAndValidator(COORD_MIN, COORD_MAX, 1.0, "length_precision");
+
+  RadioButton1->setChecked(true);
+
+  mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  // Costruction of the logical filter
+  SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (SMESH::MESHorSUBMESH);
+  SMESH_TypeFilter* aSmeshGroupFilter    = new SMESH_TypeFilter (SMESH::GROUP);
+
+  QList<SUIT_SelectionFilter*> aListOfFilters;
+  if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
+  if (aSmeshGroupFilter)    aListOfFilters.append(aSmeshGroupFilter);
+
+  myMeshOrSubMeshOrGroupFilter =
+    new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
+
+  myHelpFileName = "Offset_page.html";
+
+  Init();
+
+  /* signals and slots connections */
+  connect(buttonOk,     SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
+  connect(buttonApply,  SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
+
+  //connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument()));
+
+  connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()),   this, SLOT(SelectionIntoArgument()));
+  /* to close dialog if study change */
+  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()),      this, SLOT(reject()));
+  connect(mySMESHGUI, SIGNAL(SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  connect(mySMESHGUI, SIGNAL(SignalCloseView()),            this, SLOT(onCloseView()));
+
+  connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
+  connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                  SLOT(onSelectMesh(bool)));
+  connect(ActionGroup,      SIGNAL(buttonClicked(int)),             SLOT(onActionClicked(int)));
+
+  connect(SpinBox,  SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
+
+  //To Connect preview check box
+  connectPreviewControl();
+
+  SelectionIntoArgument();
+  onActionClicked(MOVE_ELEMS_BUTTON);
+}
+
+//=================================================================================
+// function : ~SMESHGUI_OffsetDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_OffsetDlg::~SMESHGUI_OffsetDlg()
+{
+  if ( myFilterDlg ) {
+    myFilterDlg->setParent( 0 );
+    delete myFilterDlg;
+    myFilterDlg = 0;
+  }
+}
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::Init (bool ResetControls)
+{
+  myBusy = false;
+  myObjects.clear();
+  myObjectsNames.clear();
+  myMeshes.clear();
+
+  LineEditElements->clear();
+  myElementsId = "";
+  myNbOkElements = 0;
+
+  buttonOk->setEnabled(false);
+  buttonApply->setEnabled(false);
+
+  myActor = 0;
+
+  if (ResetControls)
+  {
+    SpinBox->SetValue(1.0);
+    myPreviewCheckBox->setChecked(false);
+    onDisplaySimulation(false);
+
+    ActionGroup->button( MOVE_ELEMS_BUTTON )->setChecked(true);
+    CheckBoxMesh->setChecked(true);
+    onSelectMesh(true);
+  }
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool SMESHGUI_OffsetDlg::ClickOnApply()
+{
+  if (mySMESHGUI->isStudyLocked())
+    return false;
+
+  if( !isValid() )
+    return false;
+
+  SUIT_OverrideCursor aWaitCursor;
+
+  if (myNbOkElements)
+  {
+    QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
+
+    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    anElementsId->length(aListElementsId.count());
+    for (int i = 0; i < aListElementsId.count(); i++)
+      anElementsId[i] = aListElementsId[i].toInt();
+
+    double offsetValue = SpinBox->value();
+
+    QStringList aParameters;
+    aParameters << SpinBox->text();
+
+    int actionButton = ActionGroup->checkedId();
+    bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
+    SMESH::ListOfGroups_var groups;
+    SMESH::SMESH_Mesh_var mesh;
+    QStringList anEntryList;
+    try
+    {
+      switch ( actionButton ) {
+
+      case MOVE_ELEMS_BUTTON:
+        if ( CheckBoxMesh->isChecked() )
+          for ( int i = 0; i < myObjects.count(); i++ ) {
+            SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[i]->GetMeshEditor();
+            myMeshes[i]->SetParameters( aParameters.join( ":" ).toLatin1().constData() );
+            mesh = aMeshEditor->Offset( myObjects[i], offsetValue, true, "", groups.out() );
+          }
+        else {
+          SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+          SMESH::IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::FACE);
+          myMeshes[0]->SetParameters( aParameters.join( ":" ).toLatin1().constData() );
+          mesh = aMeshEditor->Offset( src, offsetValue, true, "", groups.out() );
+        }
+        break;
+
+      case COPY_ELEMS_BUTTON:
+        if ( CheckBoxMesh->isChecked() )
+          for ( int i = 0; i < myObjects.count(); i++ ) {
+            SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[i]->GetMeshEditor();
+            myMeshes[i]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
+            mesh = aMeshEditor->Offset( myObjects[i], offsetValue, makeGroups, "", groups.out() );
+          }
+        else {
+          SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+          SMESH::IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::FACE );
+          myMeshes[0]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
+          mesh = aMeshEditor->Offset( src, offsetValue, makeGroups, "", groups.out() );
+        }
+        break;
+
+      case MAKE_MESH_BUTTON: {
+        SMESH::SMESH_Mesh_var mesh;
+        if ( CheckBoxMesh->isChecked() ) {
+          for ( int i = 0; i < myObjects.count(); i++ ) {
+            QString aName =
+              SMESH::UniqueMeshName( LineEditNewMesh->text().replace( "*", myObjectsNames[i] ));
+            SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[i]->GetMeshEditor();
+            myMeshes[i]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
+            mesh = aMeshEditor->Offset( myObjects[i], offsetValue, makeGroups,
+                                        aName.toLatin1().data(), groups.out() );
+            if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ))
+              anEntryList.append( aSObject->GetID().c_str() );
+          }
+        }
+        else {
+          SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+          myMeshes[0]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
+          SMESH::IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::FACE );
+          mesh = aMeshEditor->Offset( src, offsetValue, makeGroups,
+                                      LineEditNewMesh->text().toLatin1().data(), groups.out() );
+          if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
+            anEntryList.append( aSObject->GetID().c_str() );
+        }
+        break;
+      }
+      }
+    }
+    catch ( const SALOME::SALOME_Exception& S_ex ) {
+      SalomeApp_Tools::QtCatchCorbaException( S_ex );
+    }
+    catch (...) {
+    }
+
+    for ( int i = 0; i < myObjects.count(); i++ ) {
+      SMESH_Actor* actor = SMESH::FindActorByObject( myObjects[i] );
+      if ( actor ) SMESH::Update( actor->getIO(), true );
+    }
+
+    if ( makeGroups || actionButton == MAKE_MESH_BUTTON )
+    {
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
+      if( LightApp_Application* anApp =
+          dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+        anApp->browseObjects( anEntryList, isApplyAndClose() );
+    }
+    if ( !isApplyAndClose() )
+    {
+      Init(false);
+      SelectionIntoArgument();
+    }
+    SMESHGUI::Modified();
+  }
+
+  return true;
+}
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::ClickOnOk()
+{
+  setIsApplyAndClose( true );
+  if( ClickOnApply() )
+    reject();
+}
+
+//=================================================================================
+// function : reject()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::reject()
+{
+  disconnect(mySelectionMgr, 0, this, 0);
+  mySelectionMgr->clearFilters();
+  if (SMESH::GetCurrentVtkView()) {
+    SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters
+    SMESH::SetPointRepresentation(false);
+  }
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode( ActorSelection );
+  mySMESHGUI->ResetState();
+  QDialog::reject();
+}
+
+//=================================================================================
+// function : onOpenView()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::onOpenView()
+{
+  if ( mySelector ) {
+    SMESH::SetPointRepresentation(false);
+  }
+  else {
+    mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector();
+    ActivateThisDialog();
+  }
+}
+
+//=================================================================================
+// function : onCloseView()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::onCloseView()
+{
+  DeactivateActiveDialog();
+  mySelector = 0;
+}
+
+//=================================================================================
+// function : ClickOnHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_OffsetDlg::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 : onTextChange()
+// purpose  :
+//=======================================================================
+
+void SMESHGUI_OffsetDlg::onTextChange (const QString& theNewText)
+{
+  if (myBusy) return;
+  BusyLocker lock( myBusy );
+
+  myNbOkElements = 0;
+
+  buttonOk->setEnabled(false);
+  buttonApply->setEnabled(false);
+
+  // highlight entered elements
+  SMDS_Mesh* aMesh = 0;
+  if (myActor)
+    aMesh = myActor->GetObject()->GetMesh();
+
+  if (aMesh) {
+    Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
+
+    TColStd_MapOfInteger newIndices;
+
+    QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
+    for (int i = 0; i < aListId.count(); i++)
+    {
+      if ( const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()))
+        newIndices.Add( e->GetID() );
+      myNbOkElements++;
+    }
+
+    mySelector->AddOrRemoveIndex( anIO, newIndices, false );
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->highlight( anIO, true, true );
+
+    myElementsId = theNewText;
+  }
+
+  if (myNbOkElements) {
+    buttonOk->setEnabled(true);
+    buttonApply->setEnabled(true);
+  }
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void SMESHGUI_OffsetDlg::SelectionIntoArgument()
+{
+  if (myBusy) return;
+  if (myFilterDlg && myFilterDlg->isVisible()) return; // filter dlg active
+
+  BusyLocker lock( myBusy );
+
+  // clear
+  myActor = 0;
+  QString aString = "";
+  onDisplaySimulation(false);
+
+  LineEditElements->setText(aString);
+  myNbOkElements = 0;
+  buttonOk->setEnabled(false);
+  buttonApply->setEnabled(false);
+
+  if (!GroupButtons->isEnabled()) // inactive
+    return;
+
+  // get selected mesh
+  SALOME_ListIO aList;
+  mySelectionMgr->selectedObjects(aList);
+
+  int nbSel = aList.Extent();
+  if (nbSel < 1)
+    return;
+
+  myElementsId = "";
+  myObjects.clear();
+  myObjectsNames.clear();
+  myMeshes.clear();
+
+  for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() )
+  {
+    Handle(SALOME_InteractiveObject) IO = it.Value();
+    SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
+    if ( aMesh->_is_nil() || aMesh->NbFaces() == 0 )
+      return;
+
+    myActor = SMESH::FindActorByObject( aMesh );
+    if ( !myActor )
+      myActor = SMESH::FindActorByEntry( IO->getEntry() );
+
+    SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
+    if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
+    {
+      std::string name = obj->GetName();
+      if ( !name.empty() )
+      {
+        myObjects << idSrc;
+        myObjectsNames << name.c_str();
+        myMeshes << aMesh;
+      }
+    }
+  }
+
+  // MakeGroups is available if there are groups and "Copy"
+  int aNbGroups = 0;
+  for ( int i = 0; i < myMeshes.count(); i++ )
+    aNbGroups += myMeshes[i]->NbGroups();
+
+  if ( aNbGroups == 0 ) {
+    MakeGroupsCheck->setChecked(false);
+    MakeGroupsCheck->setEnabled(false);
+  }
+  else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) {
+    MakeGroupsCheck->setEnabled(true);
+  }
+
+  if (CheckBoxMesh->isChecked()) {
+    if (myMeshes.isEmpty())
+      return;
+    SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
+  }
+  else {
+    int aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
+    myElementsId = aString;
+    if (aNbUnits < 1)
+      return;
+  }
+
+  myNbOkElements = true;
+  
+  LineEditElements->setText(aString);
+  LineEditElements->repaint();
+  LineEditElements->setEnabled(false); // to fully update lineedit IPAL 19809
+  LineEditElements->setEnabled(true);
+  setNewMeshName();
+
+  buttonOk->setEnabled(true);
+  buttonApply->setEnabled(true);
+
+  onDisplaySimulation(true);
+}
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+
+void SMESHGUI_OffsetDlg::DeactivateActiveDialog()
+{
+  if (ConstructorsBox->isEnabled())
+  {
+    ConstructorsBox->setEnabled(false);
+    GroupArguments->setEnabled(false);
+    GroupButtons->setEnabled(false);
+    mySMESHGUI->ResetState();
+    mySMESHGUI->SetActiveDialogBox(0);
+  }
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+
+void SMESHGUI_OffsetDlg::ActivateThisDialog()
+{
+  /* Emit a signal to deactivate the active dialog */
+  mySMESHGUI->EmitSignalDeactivateDialog();
+  ConstructorsBox->setEnabled(true);
+  GroupArguments->setEnabled(true);
+  GroupButtons->setEnabled(true);
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode( CellSelection );
+
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+
+void SMESHGUI_OffsetDlg::enterEvent (QEvent*)
+{
+  if (!ConstructorsBox->isEnabled()) {
+    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
+    if ( aViewWindow && !mySelector) {
+      mySelector = aViewWindow->GetSelector();
+    }
+    ActivateThisDialog();
+  }
+}
+
+//=======================================================================
+//function : onSelectMesh
+//purpose  :
+//=======================================================================
+
+void SMESHGUI_OffsetDlg::onSelectMesh (bool toSelectMesh)
+{
+  if (toSelectMesh)
+    TextLabelElements->setText(tr("SMESH_NAME"));
+  else
+    TextLabelElements->setText(tr("SMESH_ID_ELEMENTS"));
+  myFilterBtn->setEnabled(!toSelectMesh);
+
+  mySelectionMgr->clearFilters();
+  SMESH::SetPointRepresentation(false);
+
+  if (toSelectMesh)
+  {
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->SetSelectionMode( ActorSelection );
+    mySelectionMgr->installFilter( myMeshOrSubMeshOrGroupFilter );
+    LineEditElements->setReadOnly( true );
+    LineEditElements->setValidator( 0 );
+  }
+  else
+  {
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->SetSelectionMode( FaceSelection );
+    LineEditElements->setReadOnly( false );
+    LineEditElements->setValidator( myIdValidator );
+    onTextChange(LineEditElements->text());
+    hidePreview();
+  }
+
+  SelectionIntoArgument();
+}
+
+//=======================================================================
+//function : onActionClicked
+//purpose  : slot called when an action type changed
+//=======================================================================
+
+void SMESHGUI_OffsetDlg::onActionClicked(int button)
+{
+  int aNbGroups = 0;
+  for ( int i = 0; i < myMeshes.count(); i++ )
+    aNbGroups += myMeshes[i]->NbGroups();
+
+  switch ( button ) {
+  case MOVE_ELEMS_BUTTON:
+    MakeGroupsCheck->setEnabled(false);
+    LineEditNewMesh->setEnabled(false);
+    break;
+  case COPY_ELEMS_BUTTON:
+    LineEditNewMesh->setEnabled(false);
+    MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
+    MakeGroupsCheck->setEnabled( myMeshes.isEmpty() || aNbGroups > 0 );
+    break;
+  case MAKE_MESH_BUTTON:
+    LineEditNewMesh->setEnabled(true);
+    MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
+    MakeGroupsCheck->setEnabled( myMeshes.isEmpty() || aNbGroups > 0 );
+    break;
+  }
+  setNewMeshName();
+  //toDisplaySimulation();
+}
+
+//=======================================================================
+//function : setNewMeshName
+//purpose  : update contents of LineEditNewMesh
+//=======================================================================
+
+void SMESHGUI_OffsetDlg::setNewMeshName()
+{
+  LineEditNewMesh->setText("");
+  if ( LineEditNewMesh->isEnabled() && !myMeshes.isEmpty() ) {
+    QString name;
+    if ( CheckBoxMesh->isChecked() ) {
+      name = myObjects.count() > 1 ? "*" : LineEditElements->text();
+    }
+    else {
+      _PTR(SObject) meshSO = SMESH::FindSObject( myMeshes[0] );
+      name = meshSO->GetName().c_str();
+    }
+    if ( !name.isEmpty() )
+      LineEditNewMesh->setText( SMESH::UniqueMeshName( name, "Offset"));
+  }
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+
+void SMESHGUI_OffsetDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Qt::Key_F1 ) {
+    e->accept();
+    ClickOnHelp();
+  }
+}
+
+//=================================================================================
+// function : setFilters()
+// purpose  : SLOT. Called when "Filter" button pressed.
+//=================================================================================
+
+void SMESHGUI_OffsetDlg::setFilters()
+{
+  if ( myMeshes.isEmpty() ) {
+    SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
+    return;
+  }
+  if ( !myFilterDlg ) {
+    myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
+    connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
+  }
+
+  myFilterDlg->Init( SMESH::FACE );
+  myFilterDlg->SetSelection();
+  myFilterDlg->SetMesh( myMeshes[0] );
+  myFilterDlg->SetSourceWg( LineEditElements );
+
+  myFilterDlg->show();
+}
+
+//=======================================================================
+// name    : onFilterAccepted()
+// Purpose : SLOT. Called when Filter dlg closed with OK button.
+//           Activate [Apply] if no Actor is available
+//=======================================================================
+
+void SMESHGUI_OffsetDlg::onFilterAccepted()
+{
+  if ( myMeshes.length() > 0 && !buttonOk->isEnabled() )
+  {
+    myElementsId = LineEditElements->text();
+    QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
+    myNbOkElements = aListElementsId.count();
+    buttonOk->setEnabled   ( myNbOkElements );
+    buttonApply->setEnabled( myNbOkElements );
+  }
+}
+
+//=================================================================================
+// function : isValid
+// purpose  :
+//=================================================================================
+
+bool SMESHGUI_OffsetDlg::isValid()
+{
+  return true;
+}
+
+//=================================================================================
+// function : onDisplaySimulation
+// purpose  : Show/Hide preview
+//=================================================================================
+void SMESHGUI_OffsetDlg::onDisplaySimulation( bool toDisplayPreview )
+{
+  SUIT_OverrideCursor aWaitCursor;
+
+  if (myPreviewCheckBox->isChecked() && toDisplayPreview)
+  {
+    if ( myNbOkElements && isValid() )
+    {
+      double offsetValue = SpinBox->value();
+
+      SMESH::ListOfGroups_var groups;
+      SMESH::SMESH_Mesh_var mesh;
+
+      try
+      {
+        QList<SMESH::MeshPreviewStruct_var> aMeshPreviewStruct;
+
+        if ( CheckBoxMesh->isChecked())
+          for ( int i = 0; i < myObjects.count(); i++ )
+          {
+            SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[i]->GetMeshEditPreviewer();
+            mesh = aMeshEditor->Offset( myObjects[i], offsetValue, false, "", groups.out() );
+            aMeshPreviewStruct << aMeshEditor->GetPreviewData();
+          }
+        else
+        {
+          SMESH::long_array_var anElementsId = new SMESH::long_array;
+          QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
+          anElementsId->length(aListElementsId.count());
+          for (int i = 0; i < aListElementsId.count(); i++)
+            anElementsId[i] = aListElementsId[i].toInt();
+
+          SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditPreviewer();
+          SMESH::IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::FACE);
+          mesh = aMeshEditor->Offset( src, offsetValue, false, "", groups.out() );
+          aMeshPreviewStruct << aMeshEditor->GetPreviewData();
+        }
+        setSimulationPreview(aMeshPreviewStruct);
+
+      } catch (...) {
+        hidePreview();
+      }
+    } else {
+      hidePreview();
+    }
+  } else {
+    hidePreview();
+  }
+}
diff --git a/src/SMESHGUI/SMESHGUI_OffsetDlg.h b/src/SMESHGUI/SMESHGUI_OffsetDlg.h
new file mode 100644 (file)
index 0000000..e8f4b9c
--- /dev/null
@@ -0,0 +1,134 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// SMESH SMESHGUI : GUI for SMESH component
+// File   : SMESHGUI_OffsetDlg.h
+//
+#ifndef SMESHGUI_OffsetDLG_H
+#define SMESHGUI_OffsetDLG_H
+
+// SMESH includes
+#include "SMESH_SMESHGUI.hxx"
+#include "SMESHGUI_PreviewDlg.h"
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+class QButtonGroup;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class QCheckBox;
+class SMESHGUI;
+class SMESHGUI_IdValidator;
+class SMESHGUI_SpinBox;
+class SMESHGUI_FilterDlg;
+class SMESH_Actor;
+class SVTK_Selector;
+class LightApp_SelectionMgr;
+class SMESH_LogicalFilter;
+
+//=================================================================================
+// class    : SMESHGUI_OffsetDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_EXPORT SMESHGUI_OffsetDlg : public SMESHGUI_MultiPreviewDlg
+{
+  Q_OBJECT
+
+ public:
+  SMESHGUI_OffsetDlg( SMESHGUI* );
+  ~SMESHGUI_OffsetDlg();
+
+ private:
+  void                   Init( bool = true );
+  void                   enterEvent( QEvent* );           /* mouse enter the QWidget */
+  void                   keyPressEvent( QKeyEvent* );
+  int                    GetConstructorId();
+  void                   setNewMeshName();
+
+  bool                   isValid();
+  void                   getOffset( SMESH::PointStruct& thePoint,
+                                    SMESH::double_array_var& theOffsetFact);
+
+  SMESHGUI_IdValidator*  myIdValidator;
+  LightApp_SelectionMgr* mySelectionMgr;          /* User shape selection */
+  QString                myElementsId;
+  int                    myNbOkElements;          /* to check when elements are defined */
+
+  SVTK_Selector*         mySelector;
+
+  QWidget*               myEditCurrentArgument;
+
+  bool                   myBusy;
+  SMESH_Actor*           myActor;
+  SMESH_LogicalFilter*   myMeshOrSubMeshOrGroupFilter;
+
+  QList<SMESH::SMESH_IDSource_var> myObjects;
+  QList<QString>                   myObjectsNames;
+  QList<SMESH::SMESH_Mesh_var>     myMeshes;
+
+
+  QGroupBox*             ConstructorsBox;
+  QGroupBox*             GroupButtons;
+  QPushButton*           buttonOk;
+  QPushButton*           buttonCancel;
+  QPushButton*           buttonApply;
+  QPushButton*           buttonHelp;
+  QGroupBox*             GroupArguments;
+  QLabel*                TextLabelElements;
+  //QPushButton*           SelectElementsButton;
+  QLineEdit*             LineEditElements;
+  QCheckBox*             CheckBoxMesh;
+  SMESHGUI_SpinBox*      SpinBox;
+  QGroupBox*             ActionBox;
+  QButtonGroup*          ActionGroup;
+  QCheckBox*             MakeGroupsCheck;
+  QLineEdit*             LineEditNewMesh;
+
+  QString                myHelpFileName;
+
+  QPushButton*           myFilterBtn;
+  SMESHGUI_FilterDlg*    myFilterDlg;
+
+
+protected slots:
+  virtual void           onDisplaySimulation( bool );
+  virtual void           reject();
+  void                   onFilterAccepted();
+   
+private slots:
+  void                   ClickOnOk();
+  bool                   ClickOnApply();
+  void                   ClickOnHelp();
+  void                   SelectionIntoArgument();
+  void                   DeactivateActiveDialog();
+  void                   ActivateThisDialog();
+  void                   onTextChange( const QString& );
+  void                   onSelectMesh( bool );
+  void                   onActionClicked( int );
+  void                   onOpenView();
+  void                   onCloseView();
+  void                   setFilters();
+};
+
+#endif // SMESHGUI_OffsetDLG_H
index 3f3e891517cef6a322a7bbeaf952723df9874d9d..0ddbff46dd3be180a3473c9b88492af13b710665 100755 (executable)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-// SMESH SMDS : implementaion of Salome mesh data structure
+// SMESH SMDS : implementation of Salome mesh data structure
 // File   : SMESHGUI_Operation.h
 // Author : Sergey LITONIN, Open CASCADE S.A.S.
 //
index c45b9eae15288d4f6fee9404f1275b2d09bbc045..46387cc525a43016dc56f072f71ce1e329a72635 100644 (file)
@@ -166,6 +166,7 @@ namespace SMESHOp {
     OpMergeNodes             = 4405,   // MENU MODIFICATION - TRANSFORMATION - MERGE NODES
     OpMergeElements          = 4406,   // MENU MODIFICATION - TRANSFORMATION - MERGE ELEMENTS
     OpDuplicateNodes         = 4407,   // MENU MODIFICATION - TRANSFORMATION - DUPLICATE NODES OR/AND ELEMENTS
+    OpOffset                 = 4408,   // MENU MODIFICATION - TRANSFORMATION - OFFSET
     OpMoveNode               = 4500,   // MENU MODIFICATION - MOVE NODE
     OpDiagonalInversion      = 4501,   // MENU MODIFICATION - DIAGONAL INVERSION
     OpUnionOfTwoTriangle     = 4502,   // MENU MODIFICATION - UNION OF TWO TRIANGLE
index 5b350d06e62ac0436bf3934e84ca7f4441776778..1aa8e927e941ea3ee8ac3b7e776f141bd9cbcc60 100644 (file)
@@ -98,7 +98,7 @@ bool SMESHGUI_PreVisualObj::IsValid() const
 
 vtkUnstructuredGrid* SMESHGUI_PreVisualObj::GetUnstructuredGrid()
 {
-  return myMesh->getGrid();
+  return myMesh->GetGrid();
 }
 
 
@@ -116,13 +116,13 @@ vtkIdType SMESHGUI_PreVisualObj::GetNodeVTKId( int theObjID )
 
 vtkIdType SMESHGUI_PreVisualObj::GetElemObjId( int theVTKID )
 {
-  return this->GetMesh()->fromVtkToSmds(theVTKID);
+  return this->GetMesh()->FromVtkToSmds(theVTKID);
 }
 
 vtkIdType SMESHGUI_PreVisualObj::GetElemVTKId( int theObjID )
 {
   const SMDS_MeshElement* e = myMesh->FindElement(theObjID);
-  return e ? e->getVtkId() : -1;
+  return e ? e->GetVtkID() : -1;
 }
 
 void SMESHGUI_PreVisualObj::ClearEntitiesFlags()
index 69648ffccdaee5703e1053748ee94b41860dabf3..7059582ecb8041e4b914d99db3a4bdf94a6aa048 100644 (file)
@@ -448,7 +448,7 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI*
   connect( mySelectionMgr,      SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
   connect( mySMESHGUI,          SIGNAL( SignalCloseAllDialogs() ),   this, SLOT( reject() ) );
 
-  myHelpFileName = "scalar_bar_dlg.html";
+  myHelpFileName = "scalar_bar.html";
 }
 
 //=================================================================================================
index 6318d7e30f0a37c08b225d8f11cb30f89747da79..f0b8a0c9dd9e90541e38ebe6c8378df86bccc5ee 100644 (file)
@@ -669,5 +669,5 @@ void SMESHGUI_PropertiesDlg::showControls( int elements, bool nodes )
 void SMESHGUI_PropertiesDlg::onHelp()
 {
   LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
-  app->onHelpContextModule( "SMESH", "colors_size_page.html" );
+  app->onHelpContextModule( "SMESH", "colors_size.html" );
 }
index 620996d18f42eb585650ddd95a902ab52e592a83..48206643adffa8476fb0c7856f7d4b757b87c0a3 100644 (file)
@@ -162,7 +162,7 @@ SMESHGUI_RemoveElementsDlg
   SMESHGUI_RemoveElementsDlgLayout->addWidget(GroupC1);
   SMESHGUI_RemoveElementsDlgLayout->addWidget(GroupButtons);
 
-  myHelpFileName = "removing_nodes_and_elements_page.html#removing_elements_anchor";
+  myHelpFileName = "removing_nodes_and_elements.html#removing-elements-anchor";
 
   Init(); /* Initialisations */
 }
@@ -247,15 +247,13 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply()
 
     } catch (const SALOME::SALOME_Exception& S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
-      myEditCurrentArgument->clear();
-    } catch (...){
-      myEditCurrentArgument->clear();
+    } catch (...) {
     }
 
+    myEditCurrentArgument->clear();
     if (aResult) {
-      myEditCurrentArgument->clear();
       mySelector->ClearIndex();
-      SMESH::UpdateView();
+      SMESH::UpdateView( /*withChildrenOfSelected=*/true );
       SMESHGUI::Modified();
     }
   }
@@ -345,7 +343,7 @@ void SMESHGUI_RemoveElementsDlg::onTextChange(const QString& theNewText)
 
   myNbOkElements = 0;
 
-  // hilight entered elements
+  // highlight entered elements
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
index a94f4b488077fa5241bd3bbcef3ddc4703d7c4ff..adef42a6c3e28478a1ca72adecdb6be9e6e1235c 100644 (file)
@@ -162,7 +162,7 @@ SMESHGUI_RemoveNodesDlg
   SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupC1);
   SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupButtons);
 
-  myHelpFileName = "removing_nodes_and_elements_page.html#removing_nodes_anchor";
+  myHelpFileName = "removing_nodes_and_elements.html#removing-nodes-anchor";
 
   Init(); /* Initialisations */
 }
@@ -351,7 +351,7 @@ void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText)
 
   myNbOkNodes = 0;
 
-  // hilight entered nodes
+  // highlight entered nodes
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
index 9f21446747fc566a90f5c7e7eb7e2dee94b7dc5e..aafe585222e58ac40e6c3b45fab53b264feccd1f 100644 (file)
@@ -99,8 +99,8 @@ SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( SMESHGUI* theModule, const int
                                     tr("SMESH_ELEMENTS"), 
                                     this);
   myHelpFileName = unit == 0 ? 
-    "renumbering_nodes_and_elements_page.html#renumbering_nodes_anchor" :
-    "renumbering_nodes_and_elements_page.html#renumbering_elements_anchor";
+    "renumbering_nodes_and_elements.html#renumbering-nodes-anchor" :
+    "renumbering_nodes_and_elements.html#renumbering-elements-anchor";
 
   QButtonGroup* ButtonGroup = new QButtonGroup(this);
   QHBoxLayout* GroupConstructorsLayout = new QHBoxLayout(GroupConstructors);
index f6f72edb2bc5f549b42e0299baa375aadc0dc956..b09abbaf4e171430dcab12f5b3d0882472f5ca60 100644 (file)
@@ -331,7 +331,7 @@ SMESHGUI_ReorientFacesOp::SMESHGUI_ReorientFacesOp()
   :SMESHGUI_SelectionOp( ActorSelection )
 {
   //myVectorPreview = 0;
-  myHelpFileName = "reorient_faces_page.html";
+  myHelpFileName = "reorient_faces.html";
 
   myDlg = new SMESHGUI_ReorientFacesDlg;
   myDlg->constructorChange( CONSTRUCTOR_POINT );
index f23c6d2f652688145b890e611b82b215925d306c..034c854caed5464edb4af06a0a798ecded22162a 100644 (file)
@@ -261,7 +261,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule )
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
 
-  myHelpFileName = "revolution_page.html";
+  myHelpFileName = "revolution.html";
 
   Init();
 
@@ -641,7 +641,7 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
     else if ( isFaceSelected )
     {
       const SMDS_MeshFace* face =
-        dynamic_cast<const SMDS_MeshFace*>(aMesh->FindElement(aMapIndex(1)));
+        SMDS_Mesh::DownCast<SMDS_MeshFace>( aMesh->FindElement( aMapIndex( 1 )));
       if (!face)
         return;
       gp_XYZ aNormale = SMESH::getNormale(face);
index 291d908ddbb5686d539621f604c7126ee0fde7aa..50e40b3f3573f451f8f9ac9e076da65686044727 100644 (file)
@@ -287,7 +287,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule ) :
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "rotation_page.html";
+  myHelpFileName = "rotation.html";
 
   Init();
 
@@ -635,7 +635,7 @@ void SMESHGUI_RotationDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements
+  // highlight entered elements
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 001ee7d9440a02acbd4667a707abe59ec48c3fb6..87310c71b6925568e56ba5d906c36f1274f0edd9 100644 (file)
@@ -291,7 +291,7 @@ SMESHGUI_ScaleDlg::SMESHGUI_ScaleDlg( SMESHGUI* theModule ) :
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "scale_page.html";
+  myHelpFileName = "scale.html";
 
   Init();
 
@@ -674,7 +674,7 @@ void SMESHGUI_ScaleDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements
+  // highlight entered elements
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index a8704b8b977b460cc353abfa742720cccf13130d..b04d9fabe143d50e04e03c752f86a3d54bb2d3f4 100644 (file)
@@ -384,6 +384,7 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
     case SMESH_Actor::eCoincidentElems1D:     mode = "eCoincidentElems1D";     break;
     case SMESH_Actor::eCoincidentElems2D:     mode = "eCoincidentElems2D";     break;
     case SMESH_Actor::eCoincidentElems3D:     mode = "eCoincidentElems3D";     break;
+    case SMESH_Actor::eCustomControl:         mode = "eCustomControl";         break;
     default:break;
     }
   }
index ed560b87ee5400108f0be8733d2db59ea87be068..e57e65c7711bedca692cd47332a097e093a75e7b 100644 (file)
@@ -250,11 +250,11 @@ void SMESHGUI_SelectionOp::setSelectionMode( const Selection_Mode mode )
 // Purpose : Highlight object in 3d viewer
 //=======================================================================
 void SMESHGUI_SelectionOp::highlight( const Handle( SALOME_InteractiveObject )& obj,
-                                      const bool hilight, const bool immediately )
+                                      const bool highlight, const bool immediately )
 {
   SVTK_ViewWindow* wnd = viewWindow();
   if( wnd )
-    wnd->highlight( obj, hilight, immediately );
+    wnd->highlight( obj, highlight, immediately );
 }
 
 //=======================================================================
index b60a88c07502dfec364f311296777b307cbe0ff0..69a5c016c0a5f8bcf46468dcf9b8e6ac4de2e643 100644 (file)
@@ -104,7 +104,7 @@ protected:
   //! Set selection mode in VTK viewer
   void                          setSelectionMode( const Selection_Mode );
 
-  //! Hilight object in VTK viewer
+  //! Highlight object in VTK viewer
   void                          highlight( const Handle( SALOME_InteractiveObject )&,
                                            const bool, const bool = true );
                                
index 27dfe06e75e49695312599ab83ce2a0f6bf61e3e..cc27ffed285889363d6e8416d03fd65096833ccd 100644 (file)
@@ -452,7 +452,7 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule )
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
 
-  myHelpFileName = "sewing_meshes_page.html";
+  myHelpFileName = "sewing_meshes.html";
 
   myActor = 0;
   myStoredEntityMode = 0;
@@ -1532,7 +1532,7 @@ void SMESHGUI_SewingDlg::onTextChange (const QString& theNewText)
   else if (send == LineEdit6)
     myOk6 = false;
 
-  // hilight entered elements/nodes
+  // highlight entered elements/nodes
   SMDS_Mesh* aMesh = 0;
 
   if (myActor)
index b3c14cb521d8dff03ad77b1cb5e2352dbc985e7c..8afb333c113d4073456b955a6bd495eb59dd8454 100755 (executable)
@@ -341,7 +341,7 @@ void SMESHGUI_SingleEditDlg::onTextChange (const QString& theNewText)
   myOkBtn->setEnabled(false);
   myApplyBtn->setEnabled(false);
 
-  // hilight entered edge
+  // highlight entered edge
   if(myActor){
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
@@ -439,7 +439,7 @@ void SMESHGUI_SingleEditDlg::onSelectionDone()
 
 //=======================================================================
 // name    : onDeactivate()
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_SingleEditDlg::onDeactivate()
 {
@@ -560,7 +560,7 @@ SMESHGUI_TrianglesInversionDlg
 : SMESHGUI_SingleEditDlg(theModule)
 {
   setWindowTitle(tr("CAPTION"));
-  myHelpFileName = "diagonal_inversion_of_elements_page.html";
+  myHelpFileName = "diagonal_inversion_of_elements.html";
 }
 
 SMESHGUI_TrianglesInversionDlg::~SMESHGUI_TrianglesInversionDlg()
@@ -584,7 +584,7 @@ SMESHGUI_UnionOfTwoTrianglesDlg
 : SMESHGUI_SingleEditDlg(theModule)
 {
   setWindowTitle(tr("CAPTION"));
-  myHelpFileName = "uniting_two_triangles_page.html";
+  myHelpFileName = "uniting_two_triangles.html";
 }
 
 SMESHGUI_UnionOfTwoTrianglesDlg::~SMESHGUI_UnionOfTwoTrianglesDlg()
index 3f79c3292f28fee5482d190a51deff9a976d0e4f..f79817a8cda1eeefd120d971975128aa06afb2aa 100644 (file)
@@ -268,7 +268,7 @@ SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule )
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "smoothing_page.html";
+  myHelpFileName = "smoothing.html";
 
   Init();
 
@@ -518,7 +518,7 @@ void SMESHGUI_SmoothingDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements/nodes
+  // highlight entered elements/nodes
   SMDS_Mesh* aMesh = myActor ? myActor->GetObject()->GetMesh() : 0;
   QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
index 75e03affbc832b5109a83cc0ef97f0fda2c7384f..d7b8a1a910534aff5ccdf843667919a2cc763e91 100644 (file)
@@ -125,7 +125,7 @@ void SMESHGUI_SplitBiQuadOp::startOperation()
   {
     myDlg = new SMESHGUI_SplitBiQuadDlg();
   }
-  myHelpFileName = "split_biquad_to_linear_page.html";
+  myHelpFileName = "split_biquad_to_linear.html";
 
   SMESHGUI_SelectionOp::startOperation();
 
index f994189fd2df0932fe2c40f7dd43e79c54e070ec..c7e65a36df4d0b91e9b37b94cad52fb3ed5db1ce 100644 (file)
@@ -289,7 +289,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule )
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "symmetry_page.html";
+  myHelpFileName = "symmetry.html";
 
   Init();
 
@@ -693,7 +693,7 @@ void SMESHGUI_SymmetryDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements
+  // highlight entered elements
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 21342aebd88abef9f96f027c89ac26ab713ecb64..e162e6ae299af2c7797917811b7f21d6a35e445f 100644 (file)
@@ -295,7 +295,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule ) :
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "translation_page.html";
+  myHelpFileName = "translation.html";
 
   Init();
 
@@ -705,7 +705,7 @@ void SMESHGUI_TranslationDlg::onTextChange (const QString& theNewText)
   buttonOk->setEnabled(false);
   buttonApply->setEnabled(false);
 
-  // hilight entered elements
+  // highlight entered elements
   SMDS_Mesh* aMesh = 0;
   if (myActor)
     aMesh = myActor->GetObject()->GetMesh();
index 2ecc7d220b34eca1e7e23024e7b8fecea4da93c0..161d431ab1cc90c9f303acf805569a3c2154d0a0 100644 (file)
@@ -143,7 +143,7 @@ SMESHGUI_TransparencyDlg::SMESHGUI_TransparencyDlg( SMESHGUI* theModule )
   connect( mySMESHGUI,     SIGNAL( SignalCloseAllDialogs() ),   this, SLOT( ClickOnOk() ) );
   connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
 
-  myHelpFileName = "transparency_page.html";
+  myHelpFileName = "transparency.html";
 }
 
 //=================================================================================
@@ -191,7 +191,7 @@ void SMESHGUI_TransparencyDlg::ClickOnHelp()
 //=================================================================================
 // function : SetTransparency()
 // purpose  : Called when value of slider change
-//          : or the first time as initilisation
+//          : or the first time as initialisation
 //=================================================================================
 void SMESHGUI_TransparencyDlg::SetTransparency()
 {
index eac67620e4a542e269441013450f698dad1d8e94..98549bdc8e0a1ab74ef3ff47a1f17cd1474758ad 100644 (file)
@@ -774,12 +774,13 @@ namespace SMESH
     return false;
   }
 
-  void UpdateView(){
+  void UpdateView( bool withChildrenOfSelected )
+  {
     if ( SVTK_ViewWindow* aWnd = SMESH::GetCurrentVtkView()) {
       LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr();
       SALOME_ListIO selected; mgr->selectedObjects( selected );
 
-      if( selected.Extent() == 0){
+      if ( selected.Extent() == 0 ) {
         vtkRenderer* aRenderer = aWnd->getRenderer();
         VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
         vtkActorCollection *aCollection = aCopy.GetActors();
@@ -791,12 +792,36 @@ namespace SMESH
                 break; // avoid multiple warinings if visu failed
           }
         }
-      }else{
+      }
+      else
+      {
         SALOME_ListIteratorOfListIO anIter( selected );
-        for( ; anIter.More(); anIter.Next()){
+        for( ; anIter.More(); anIter.Next())
+        {
           Handle(SALOME_InteractiveObject) anIO = anIter.Value();
-          if ( !Update(anIO,true) )
+          if ( !Update( anIO, true ))
             break; // avoid multiple warinings if visu failed
+
+          if ( withChildrenOfSelected ) // update all visible children
+          {
+            QString aFatherID = anIO->getEntry();
+            vtkRenderer* aRenderer = aWnd->getRenderer();
+            VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
+            vtkActorCollection *aCollection = aCopy.GetActors();
+            aCollection->InitTraversal();
+            while ( vtkActor *anAct = aCollection->GetNextActor() ) {
+              if ( SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>( anAct )) {
+                if ( anActor->hasIO() && anActor->GetVisibility() )
+                {
+                  QString aChildID = anActor->getIO()->getEntry();
+                  if ( aChildID.size() > aFatherID.size() &&
+                       aChildID.startsWith( aFatherID ))
+                    if ( ! Update( anActor->getIO(), true ))
+                      break;
+                }
+              }
+            }
+          }
         }
       }
       RepaintCurrentView();
index 217b1995da5f4190a58477e14c7f1a980f62e1a3..48c0d5993cda91495bd68a8e676ffce2da0bcaff 100644 (file)
@@ -119,7 +119,7 @@ SMESHGUI_EXPORT
   bool UpdateView( EDisplaing, const char* = "" );
 
 SMESHGUI_EXPORT
-  void UpdateView();
+  void UpdateView( bool withChildrenOfSelected = false );
 
 SMESHGUI_EXPORT
   bool UpdateNulData( const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay);
index a3c1c5b19b43a451297b2d350df3f8d18028ca8a..f3e863ad495e07773a3a115f8a7f453ac71f9e87 100644 (file)
@@ -85,7 +85,7 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
       myPluginName = atts.value("name");
       myServerLib  = atts.value("server-lib");
       myClientLib  = atts.value("gui-lib");
-      /* It's Need to tranlate lib name for WIN32 or X platform
+      /* It's Need to translate lib name for WIN32 or X platform
        * (only client lib, because server lib translates in SMESH_Gen_i::createHypothesis
        *  for normal work of *.py files )
        */
index 27ce2523f9887c0aed4d35ff9fce82bb98f1bfd2..629c0d1073a24ff2e9e8b2b46d4d24dacf23af3a 100644 (file)
             <source>ICON_DLG_MESH_SCALE</source>
             <translation>scale.png</translation>
         </message>
+        <message>
+            <source>ICON_DLG_MESH_OFFSET</source>
+            <translation>mesh_offset.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_SCALE_ALONG_AXES</source>
             <translation>scale_along_axes.png</translation>
index dba59dba77b8aa6c4b013400b0cff0b805bd4d80..8af2e2d7c7618fae7dafcd522fa2516c987a1e77 100644 (file)
         <source>MEN_SCALE</source>
         <translation>Scale Transform</translation>
     </message>
+    <message>
+        <source>MEN_OFFSET</source>
+        <translation>Offset</translation>
+    </message>
     <message>
         <source>MEN_DUPLICATE_NODES</source>
         <translation>Duplicate Nodes or/and Elements</translation>
@@ -1919,7 +1923,7 @@ add the exported data to its contents?</translation>
         <translation>Hexahedrons</translation>
     </message>
     <message>
-        <source>SMESH_HILIGHT_COLOR</source>
+        <source>SMESH_HIGHLIGHT_COLOR</source>
         <translation>Highlight Color</translation>
     </message>
     <message>
@@ -3547,6 +3551,10 @@ Use Display Entity menu command to show them.
         <source>STB_SCALE</source>
         <translation>Scale Transform</translation>
     </message>
+    <message>
+        <source>STB_OFFSET</source>
+        <translation>Offset</translation>
+    </message>
     <message>
         <source>STB_DUPLICATE_NODES</source>
         <translation>Duplicate Nodes or/and Elements</translation>
@@ -4227,6 +4235,10 @@ Use Display Entity menu command to show them.
         <source>TOP_SCALE</source>
         <translation>Scale Transform</translation>
     </message>
+    <message>
+        <source>TOP_OFFSET</source>
+        <translation>Offset</translation>
+    </message>
     <message>
         <source>TOP_DUPLICATE_NODES</source>
         <translation>Duplicate Nodes or/and Elements</translation>
@@ -4502,6 +4514,21 @@ It can&apos;t be deleted </translation>
         <translation>Export Fields</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_OffsetDlg</name>
+    <message>
+        <source>SMESH_OFFSET_TITLE</source>
+        <translation>Offset</translation>
+    </message>
+    <message>
+        <source>SMESH_OFFSET</source>
+        <translation>Offset</translation>
+    </message>
+    <message>
+        <source>OFFSET_VALUE</source>
+        <translation>Offset Value</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_AddMeshElementDlg</name>
     <message>
@@ -7073,7 +7100,7 @@ It is impossible to read point coordinates from file</translation>
     <name>SMESHGUI_MeshOrderOp</name>
     <message>
         <source>SMESH_NO_CONCURENT_MESH</source>
-        <translation>No concurent sub-meshes detected</translation>
+        <translation>No concurrent sub-meshes detected</translation>
     </message>
 </context>
 <context>
index 5418e81c646357078c34d5dc30388a0d6640e71e..b26fe665c624a1d0e86736364749205b7d50bd3f 100755 (executable)
@@ -1903,7 +1903,7 @@ les données exportées ?</translation>
         <translation>Hexaèdres</translation>
     </message>
     <message>
-        <source>SMESH_HILIGHT_COLOR</source>
+        <source>SMESH_HIGHLIGHT_COLOR</source>
         <translation>Couleur de sélection</translation>
     </message>
     <message>
index 5ea6dbe1d8291aaa21ed2434984cc894b92b6a08..c266cb993585fd281c4bea12543bcb1648828165 100644 (file)
       <translation>六面体</translation>
     </message>
     <message>
-      <source>SMESH_HILIGHT_COLOR</source>
+      <source>SMESH_HIGHLIGHT_COLOR</source>
       <translation>選択色</translation>
     </message>
     <message>
index 6750f063c00709a06de560f81766339d186074fd..ae011b71ade048abc82f45bce647c72eb09f6b97 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMDS
@@ -29,25 +29,18 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
 # libraries to link to
 SET(_link_LIBRARIES
-  ${CAS_TKShHealing}
-  ${CAS_TKPrim}
-  ${CAS_TKernel}
-  ${CAS_TKBRep}
-  ${CAS_TKG2d}
-  ${CAS_TKG3d}
-  ${CAS_TKGeomBase}
-  ${CAS_TKGeomAlgo}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKMesh}
-  ${Boost_LIBRARIES}
-  SMDS
-  )
+   ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
+   ${OpenCASCADE_FoundationClasses_LIBRARIES}
+   ${OpenCASCADE_ModelingData_LIBRARIES}
+   ${Boost_LIBRARIES}
+   SMDS
+)
 
 # --- headers ---
 
@@ -87,6 +80,8 @@ SET(SMESHUtils_SOURCES
   SMESH_DeMerge.cxx
   SMESH_Delaunay.cxx
   SMESH_FillHole.cxx
+  SMESH_Triangulate.cxx
+  SMESH_Offset.cxx
   )
 
 # --- rules ---
index 4055741ff4a7c4b11facdaac06b50cf79f2e2824..cf78362b27f22c3b828934c4024a43559bfd6991 100644 (file)
@@ -25,6 +25,7 @@
 #define SMESH_ComputeError_HeaderFile
 
 #include "SMESH_Utils.hxx"
+#include "SMDS_ElementHolder.hxx"
 
 #include <string>
 #include <list>
@@ -75,22 +76,20 @@ struct SMESHUtils_EXPORT SMESH_ComputeError
   std::string       myComment;
   const SMESH_Algo* myAlgo;
 
-  std::list<const SMDS_MeshElement*> myBadElements; //!< to explain COMPERR_BAD_INPUT_MESH
-
   static SMESH_ComputeErrorPtr New( int               error   = COMPERR_OK,
                                     std::string       comment = "",
                                     const SMESH_Algo* algo    = 0)
   { return SMESH_ComputeErrorPtr( new SMESH_ComputeError( error, comment, algo )); }
 
-  SMESH_ComputeError(int               error   = COMPERR_OK,
-                     std::string       comment = "",
-                     const SMESH_Algo* algo    = 0)
-    :myName(error),myComment(comment),myAlgo(algo) {}
+  SMESH_ComputeError( int               error   = COMPERR_OK,
+                      std::string       comment = "",
+                      const SMESH_Algo* algo    = 0)
+    : myName(error), myComment(comment), myAlgo(algo) {}
 
   bool IsOK()        const { return myName == COMPERR_OK; }
   bool IsKO()        const { return myName != COMPERR_OK && myName != COMPERR_WARNING; }
   bool IsCommon()    const { return myName < 0 && myName > COMPERR_LAST_ALGO_ERROR; }
-  bool HasBadElems() const { return !myBadElements.empty(); }
+  virtual bool HasBadElems() const { return false; }
 
   // not inline methods are implemented in   src/SMESHUtils/SMESH_TryCatch.cxx
 
@@ -100,6 +99,31 @@ struct SMESHUtils_EXPORT SMESH_ComputeError
   // Return the most severe error
   static SMESH_ComputeErrorPtr Worst( SMESH_ComputeErrorPtr er1,
                                       SMESH_ComputeErrorPtr er2 );
+
+  virtual ~SMESH_ComputeError() {}
+};
+
+struct SMESHUtils_EXPORT SMESH_BadInputElements : public SMESH_ComputeError, SMDS_ElementHolder
+{
+  typedef std::list<const SMDS_MeshElement*> TElemList;
+  TElemList myBadElements; //!< to explain COMPERR_BAD_INPUT_MESH
+
+  SMESH_BadInputElements(const SMDS_Mesh*  mesh,
+                         int               error   = COMPERR_OK,
+                         std::string       comment = "",
+                         const SMESH_Algo* algo    = 0)
+    :SMESH_ComputeError(error, comment ,algo), SMDS_ElementHolder(mesh) {}
+
+  const SMDS_Mesh* GetMesh() const { return myMesh; }
+  const TElemList& GetElements()   { return myBadElements; }
+
+  virtual bool HasBadElems() const { return !myBadElements.empty(); }
+
+  // methods of SMDS_ElementHolder
+  virtual SMDS_ElemIteratorPtr getElements();
+  virtual void tmpClear();
+  virtual void add( const SMDS_MeshElement* element );
+  virtual void compact() { }
 };
 
 #endif
index ee22ef944fd4d79ea7b1ab427c19d4ceeb043b8c..cc724d3ce8174be926d542469b41bfd19a6f3663 100644 (file)
@@ -28,8 +28,9 @@
 
 #include "SMESH_Comment.hxx"
 
-#include "SMESH_TypeDefs.hxx"
+#include "ObjectPool.hxx"
 #include "SMDS_Mesh.hxx"
+#include "SMESH_TypeDefs.hxx"
 
 #include <Utils_SALOME_Exception.hxx>
 
index d098604656bde77db45f5dd3de814c60cdbfd816..2793d4cda206a58009129e77bb523ac79f59fee9 100644 (file)
@@ -92,7 +92,7 @@ namespace
       myNodes[0] = node1->Node();
       myNodes[1] = node2->Node();
       myFace     = face;
-      setId( ID ); // mesh element ID
+      setID( ID ); // mesh element ID
     }
     bool IsInGroup() const
     {
index fbaac9eaee7b76bda3479c100fca9c8fd4d52e83..257ef5e75bb9847fe6b5c6486d05f1eec282321d 100644 (file)
@@ -56,7 +56,7 @@ namespace SMESH_MAT2d
   //-------------------------------------------------------------------------------------
   // type of Branch end point
   enum BranchEndType { BE_UNDEF,
-                       BE_ON_VERTEX, // branch ends at a convex VRTEX
+                       BE_ON_VERTEX, // branch ends at a convex VERTEX
                        BE_BRANCH_POINT, // branch meats 2 or more other branches
                        BE_END // branch end equidistant from several adjacent segments
   };
index dbf355e111bf188d1a2811c18f0c0e9ed06e6f92..c953da5155596fde6f73177c80acad78a284b118 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "SMESH_MeshAlgos.hxx"
 
+#include "ObjectPool.hxx"
 #include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_LinearEdge.hxx"
 #include "SMDS_Mesh.hxx"
@@ -48,7 +49,7 @@
 #include <limits>
 #include <numeric>
 
-using namespace std;
+#include <boost/container/flat_set.hpp>
 
 //=======================================================================
 /*!
@@ -69,7 +70,7 @@ struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
 
     TIDSortedNodeSet nodes;
     if ( theMesh ) {
-      SMDS_NodeIteratorPtr nIt = theMesh->nodesIterator(/*idInceasingOrder=*/true);
+      SMDS_NodeIteratorPtr nIt = theMesh->nodesIterator();
       while ( nIt->more() )
         nodes.insert( nodes.end(), nIt->next() );
     }
@@ -110,21 +111,22 @@ struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
    */
   const SMDS_MeshNode* FindClosestTo( const gp_Pnt& thePnt )
   {
-    map<double, const SMDS_MeshNode*> dist2Nodes;
+    std::map<double, const SMDS_MeshNode*> dist2Nodes;
     myOctreeNode->NodesAround( thePnt.Coord(), dist2Nodes, myHalfLeafSize );
     if ( !dist2Nodes.empty() )
       return dist2Nodes.begin()->second;
-    list<const SMDS_MeshNode*> nodes;
+
+    std::vector<const SMDS_MeshNode*> nodes;
     //myOctreeNode->NodesAround( &tgtNode, &nodes, myHalfLeafSize );
 
     double minSqDist = DBL_MAX;
     if ( nodes.empty() )  // get all nodes of OctreeNode's closest to thePnt
     {
       // sort leafs by their distance from thePnt
-      typedef map< double, SMESH_OctreeNode* > TDistTreeMap;
+      typedef std::multimap< double, SMESH_OctreeNode* > TDistTreeMap;
       TDistTreeMap treeMap;
-      list< SMESH_OctreeNode* > treeList;
-      list< SMESH_OctreeNode* >::iterator trIt;
+      std::list< SMESH_OctreeNode* > treeList;
+      std::list< SMESH_OctreeNode* >::iterator trIt;
       treeList.push_back( myOctreeNode );
 
       gp_XYZ pointNode( thePnt.X(), thePnt.Y(), thePnt.Z() );
@@ -143,9 +145,7 @@ struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
         {
           const Bnd_B3d& box = *tree->getBox();
           double sqDist = thePnt.SquareDistance( 0.5 * ( box.CornerMin() + box.CornerMax() ));
-          pair<TDistTreeMap::iterator,bool> it_in = treeMap.insert( make_pair( sqDist, tree ));
-          if ( !it_in.second ) // not unique distance to box center
-            treeMap.insert( it_in.first, make_pair( sqDist + 1e-13*treeMap.size(), tree ));
+          treeMap.insert( std::make_pair( sqDist, tree ));
         }
       }
       // find distance after which there is no sense to check tree's
@@ -162,17 +162,17 @@ struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
         if ( sqDist_tree->first > sqLimit )
           break;
         SMESH_OctreeNode* tree = sqDist_tree->second;
-        tree->NodesAround( tree->GetNodeIterator()->next(), &nodes );
+        tree->AllNodesAround( tree->GetNodeIterator()->next(), &nodes );
       }
     }
     // find closest among nodes
     minSqDist = DBL_MAX;
     const SMDS_MeshNode* closestNode = 0;
-    list<const SMDS_MeshNode*>::iterator nIt = nodes.begin();
-    for ( ; nIt != nodes.end(); ++nIt ) {
-      double sqDist = thePnt.SquareDistance( SMESH_TNodeXYZ( *nIt ) );
+    for ( size_t i = 0; i < nodes.size(); ++i )
+    {
+      double sqDist = thePnt.SquareDistance( SMESH_NodeXYZ( nodes[ i ]));
       if ( minSqDist > sqDist ) {
-        closestNode = *nIt;
+        closestNode = nodes[ i ];
         minSqDist = sqDist;
       }
     }
@@ -181,7 +181,7 @@ struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
 
   //---------------------------------------------------------------------
   /*!
-   * \brief Finds nodes located within a tolerance near a point 
+   * \brief Finds nodes located within a tolerance near a point
    */
   int FindNearPoint(const gp_Pnt&                        point,
                     const double                         tolerance,
@@ -226,15 +226,16 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
   {
   public:
 
+    typedef boost::container::flat_set< const SMDS_MeshElement*, TIDCompare > TElemSeq;
+
     ElementBndBoxTree(const SMDS_Mesh&     mesh,
                       SMDSAbs_ElementType  elemType,
                       SMDS_ElemIteratorPtr theElemIt = SMDS_ElemIteratorPtr(),
                       double               tolerance = NodeRadius );
-    void getElementsNearPoint( const gp_Pnt& point, vector<const SMDS_MeshElement*>& foundElems );
-    void getElementsNearLine ( const gp_Ax1& line,  vector<const SMDS_MeshElement*>& foundElems);
-    void getElementsInSphere ( const gp_XYZ&                    center,
-                               const double                     radius,
-                               vector<const SMDS_MeshElement*>& foundElems);
+    void getElementsNearPoint( const gp_Pnt& point, TElemSeq& foundElems );
+    void getElementsNearLine ( const gp_Ax1& line,  TElemSeq& foundElems );
+    void getElementsInBox    ( const Bnd_B3d& box,  TElemSeq& foundElems );
+    void getElementsInSphere ( const gp_XYZ& center, const double radius, TElemSeq& foundElems );
     ElementBndBoxTree* getLeafAtPoint( const gp_XYZ& point );
 
   protected:
@@ -247,18 +248,16 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
     struct ElementBox : public Bnd_B3d
     {
       const SMDS_MeshElement* _element;
-      bool                    _isMarked;
       void init(const SMDS_MeshElement* elem, double tolerance);
     };
-    vector< ElementBox* > _elements;
+    std::vector< ElementBox* > _elements;
 
     typedef ObjectPool< ElementBox > TElementBoxPool;
 
     //!< allocator of ElementBox's and SMESH_TreeLimit
     struct LimitAndPool : public SMESH_TreeLimit
     {
-      TElementBoxPool            _elBoPool;
-      std::vector< ElementBox* > _markedElems;
+      TElementBoxPool _elBoPool;
       LimitAndPool():SMESH_TreeLimit( MaxLevel, /*minSize=*/0. ) {}
     };
     LimitAndPool* getLimitAndPool() const
@@ -345,37 +344,21 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
    */
   //================================================================================
 
-  void ElementBndBoxTree::getElementsNearPoint( const gp_Pnt&                    point,
-                                                vector<const SMDS_MeshElement*>& foundElems)
+  void ElementBndBoxTree::getElementsNearPoint( const gp_Pnt& point, TElemSeq& foundElems)
   {
     if ( getBox()->IsOut( point.XYZ() ))
       return;
 
     if ( isLeaf() )
     {
-      LimitAndPool* pool = getLimitAndPool();
-
       for ( size_t i = 0; i < _elements.size(); ++i )
-        if ( !_elements[i]->IsOut( point.XYZ() ) &&
-             !_elements[i]->_isMarked )
-        {
-          foundElems.push_back( _elements[i]->_element );
-          _elements[i]->_isMarked = true;
-          pool->_markedElems.push_back( _elements[i] );
-        }
+        if ( !_elements[i]->IsOut( point.XYZ() ))
+          foundElems.insert( _elements[i]->_element );
     }
     else
     {
       for (int i = 0; i < 8; i++)
         ((ElementBndBoxTree*) myChildren[i])->getElementsNearPoint( point, foundElems );
-
-      if ( level() == 0 )
-      {
-        LimitAndPool* pool = getLimitAndPool();
-        for ( size_t i = 0; i < pool->_markedElems.size(); ++i )
-          pool->_markedElems[i]->_isMarked = false;
-        pool->_markedElems.clear();
-      }
     }
   }
 
@@ -385,37 +368,21 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
    */
   //================================================================================
 
-  void ElementBndBoxTree::getElementsNearLine( const gp_Ax1&                    line,
-                                               vector<const SMDS_MeshElement*>& foundElems)
+  void ElementBndBoxTree::getElementsNearLine( const gp_Ax1& line, TElemSeq& foundElems )
   {
     if ( getBox()->IsOut( line ))
       return;
 
     if ( isLeaf() )
     {
-      LimitAndPool* pool = getLimitAndPool();
-
       for ( size_t i = 0; i < _elements.size(); ++i )
-        if ( !_elements[i]->IsOut( line ) &&
-             !_elements[i]->_isMarked )
-        {
-          foundElems.push_back( _elements[i]->_element );
-          _elements[i]->_isMarked = true;
-          pool->_markedElems.push_back( _elements[i] );
-        }
+        if ( !_elements[i]->IsOut( line ) )
+          foundElems.insert( _elements[i]->_element );
     }
     else
     {
       for (int i = 0; i < 8; i++)
         ((ElementBndBoxTree*) myChildren[i])->getElementsNearLine( line, foundElems );
-
-      if ( level() == 0 )
-      {
-        LimitAndPool* pool = getLimitAndPool();
-        for ( size_t i = 0; i < pool->_markedElems.size(); ++i )
-          pool->_markedElems[i]->_isMarked = false;
-        pool->_markedElems.clear();
-      }
     }
   }
 
@@ -425,38 +392,47 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
    */
   //================================================================================
 
-  void ElementBndBoxTree::getElementsInSphere ( const gp_XYZ&                    center,
-                                                const double                     radius,
-                                                vector<const SMDS_MeshElement*>& foundElems)
+  void ElementBndBoxTree::getElementsInSphere ( const gp_XYZ& center,
+                                                const double  radius,
+                                                TElemSeq&     foundElems)
   {
     if ( getBox()->IsOut( center, radius ))
       return;
 
     if ( isLeaf() )
     {
-      LimitAndPool* pool = getLimitAndPool();
-
       for ( size_t i = 0; i < _elements.size(); ++i )
-        if ( !_elements[i]->IsOut( center, radius ) &&
-             !_elements[i]->_isMarked )
-        {
-          foundElems.push_back( _elements[i]->_element );
-          _elements[i]->_isMarked = true;
-          pool->_markedElems.push_back( _elements[i] );
-        }
+        if ( !_elements[i]->IsOut( center, radius ))
+          foundElems.insert( _elements[i]->_element );
     }
     else
     {
       for (int i = 0; i < 8; i++)
         ((ElementBndBoxTree*) myChildren[i])->getElementsInSphere( center, radius, foundElems );
+    }
+  }
 
-      if ( level() == 0 )
-      {
-        LimitAndPool* pool = getLimitAndPool();
-        for ( size_t i = 0; i < pool->_markedElems.size(); ++i )
-          pool->_markedElems[i]->_isMarked = false;
-        pool->_markedElems.clear();
-      }
+  //================================================================================
+  /*!
+   * \brief Return elements from leaves intersecting the box
+   */
+  //================================================================================
+
+  void ElementBndBoxTree::getElementsInBox( const Bnd_B3d& box,  TElemSeq& foundElems )
+  {
+    if ( getBox()->IsOut( box ))
+      return;
+
+    if ( isLeaf() )
+    {
+      for ( size_t i = 0; i < _elements.size(); ++i )
+        if ( !_elements[i]->IsOut( box ))
+          foundElems.insert( _elements[i]->_element );
+    }
+    else
+    {
+      for (int i = 0; i < 8; i++)
+        ((ElementBndBoxTree*) myChildren[i])->getElementsInBox( box, foundElems );
     }
   }
 
@@ -493,7 +469,6 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
   void ElementBndBoxTree::ElementBox::init(const SMDS_MeshElement* elem, double tolerance)
   {
     _element  = elem;
-    _isMarked = false;
     SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
     while ( nIt->more() )
       Add( SMESH_NodeXYZ( nIt->next() ));
@@ -515,15 +490,15 @@ SMESH_ElementSearcher::~SMESH_ElementSearcher()
 
 struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher
 {
-  SMDS_Mesh*                   _mesh;
-  SMDS_ElemIteratorPtr         _meshPartIt;
-  ElementBndBoxTree*           _ebbTree      [SMDSAbs_NbElementTypes];
-  int                          _ebbTreeHeight[SMDSAbs_NbElementTypes];
-  SMESH_NodeSearcherImpl*      _nodeSearcher;
-  SMDSAbs_ElementType          _elementType;
-  double                       _tolerance;
-  bool                         _outerFacesFound;
-  set<const SMDS_MeshElement*> _outerFaces; // empty means "no internal faces at all"
+  SMDS_Mesh*                        _mesh;
+  SMDS_ElemIteratorPtr              _meshPartIt;
+  ElementBndBoxTree*                _ebbTree      [SMDSAbs_NbElementTypes];
+  int                               _ebbTreeHeight[SMDSAbs_NbElementTypes];
+  SMESH_NodeSearcherImpl*           _nodeSearcher;
+  SMDSAbs_ElementType               _elementType;
+  double                            _tolerance;
+  bool                              _outerFacesFound;
+  std::set<const SMDS_MeshElement*> _outerFaces; // empty means "no internal faces at all"
 
   SMESH_ElementSearcherImpl( SMDS_Mesh&           mesh,
                              double               tol=-1,
@@ -545,20 +520,23 @@ struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher
     }
     if ( _nodeSearcher ) delete _nodeSearcher; _nodeSearcher = 0;
   }
-  virtual int FindElementsByPoint(const gp_Pnt&                      point,
-                                  SMDSAbs_ElementType                type,
-                                  vector< const SMDS_MeshElement* >& foundElements);
+  virtual int FindElementsByPoint(const gp_Pnt&                           point,
+                                  SMDSAbs_ElementType                     type,
+                                  std::vector< const SMDS_MeshElement* >& foundElements);
   virtual TopAbs_State GetPointState(const gp_Pnt& point);
   virtual const SMDS_MeshElement* FindClosestTo( const gp_Pnt&       point,
                                                  SMDSAbs_ElementType type );
 
-  virtual void GetElementsNearLine( const gp_Ax1&                      line,
-                                    SMDSAbs_ElementType                type,
-                                    vector< const SMDS_MeshElement* >& foundElems);
-  virtual void GetElementsInSphere( const gp_XYZ&                      center,
-                                    const double                       radius,
-                                    SMDSAbs_ElementType                type,
-                                    vector< const SMDS_MeshElement* >& foundElems);
+  virtual void GetElementsNearLine( const gp_Ax1&                           line,
+                                    SMDSAbs_ElementType                     type,
+                                    std::vector< const SMDS_MeshElement* >& foundElems);
+  virtual void GetElementsInSphere( const gp_XYZ&                           center,
+                                    const double                            radius,
+                                    SMDSAbs_ElementType                     type,
+                                    std::vector< const SMDS_MeshElement* >& foundElems);
+  virtual void GetElementsInBox( const Bnd_B3d&                          box,
+                                 SMDSAbs_ElementType                     type,
+                                 std::vector< const SMDS_MeshElement* >& foundElems);
   virtual gp_XYZ Project(const gp_Pnt&            point,
                          SMDSAbs_ElementType      type,
                          const SMDS_MeshElement** closestElem);
@@ -649,7 +627,7 @@ double SMESH_ElementSearcherImpl::getTolerance()
         while ( nodeIt->more() )
         {
           double dist = n1.Distance( static_cast<const SMDS_MeshNode*>( nodeIt->next() ));
-          elemSize = max( dist, elemSize );
+          elemSize = std::max( dist, elemSize );
         }
       }
       _tolerance = 1e-4 * elemSize;
@@ -707,10 +685,10 @@ void SMESH_ElementSearcherImpl::findOuterBoundary(const SMDS_MeshElement* outerF
   // and BTW find out if there are internal faces at all.
 
   // checked links and links where outer boundary meets internal one
-  set< SMESH_TLink > visitedLinks, seamLinks;
+  std::set< SMESH_TLink > visitedLinks, seamLinks;
 
   // links to treat with already visited faces sharing them
-  list < TFaceLink > startLinks;
+  std::list < TFaceLink > startLinks;
 
   // load startLinks with the first outerFace
   startLinks.push_back( TFaceLink( outerFace->GetNode(0), outerFace->GetNode(1), outerFace));
@@ -752,8 +730,8 @@ void SMESH_ElementSearcherImpl::findOuterBoundary(const SMDS_MeshElement* outerF
         // direction from the link inside outerFace
         gp_Vec dirInOF = gp_Vec( ofNorm ) ^ n1n2;
         // sort all other faces by angle with the dirInOF
-        map< double, const SMDS_MeshElement* > angle2Face;
-        set< const SMDS_MeshElement*, TIDCompare >::const_iterator face = faces.begin();
+        std::map< double, const SMDS_MeshElement* > angle2Face;
+        std::set< const SMDS_MeshElement*, TIDCompare >::const_iterator face = faces.begin();
         for ( ; face != faces.end(); ++face )
         {
           if ( *face == outerFace ) continue;
@@ -762,7 +740,7 @@ void SMESH_ElementSearcherImpl::findOuterBoundary(const SMDS_MeshElement* outerF
           gp_Vec dirInF = gp_Vec( fNorm ) ^ n1n2;
           double angle = dirInOF.AngleWithRef( dirInF, n1n2 );
           if ( angle < 0 ) angle += 2. * M_PI;
-          angle2Face.insert( make_pair( angle, *face ));
+          angle2Face.insert( std::make_pair( angle, *face ));
         }
         if ( !angle2Face.empty() )
           outerFace2 = angle2Face.begin()->second;
@@ -807,9 +785,9 @@ void SMESH_ElementSearcherImpl::findOuterBoundary(const SMDS_MeshElement* outerF
 //=======================================================================
 
 int SMESH_ElementSearcherImpl::
-FindElementsByPoint(const gp_Pnt&                      point,
-                    SMDSAbs_ElementType                type,
-                    vector< const SMDS_MeshElement* >& foundElements)
+FindElementsByPoint(const gp_Pnt&                           point,
+                    SMDSAbs_ElementType                     type,
+                    std::vector< const SMDS_MeshElement* >& foundElements)
 {
   foundElements.clear();
   _elementType = type;
@@ -850,9 +828,9 @@ FindElementsByPoint(const gp_Pnt&                      point,
     {
       _ebbTree[_elementType] = new ElementBndBoxTree( *_mesh, type, _meshPartIt, tolerance );
     }
-    vector< const SMDS_MeshElement* > suspectElems;
+    ElementBndBoxTree::TElemSeq suspectElems;
     _ebbTree[ type ]->getElementsNearPoint( point, suspectElems );
-    vector< const SMDS_MeshElement* >::iterator elem = suspectElems.begin();
+    ElementBndBoxTree::TElemSeq::iterator elem = suspectElems.begin();
     for ( ; elem != suspectElems.end(); ++elem )
       if ( !SMESH_MeshAlgos::IsOut( *elem, point, tolerance ))
         foundElements.push_back( *elem );
@@ -883,7 +861,7 @@ SMESH_ElementSearcherImpl::FindClosestTo( const gp_Pnt&       point,
     if ( !ebbTree )
       ebbTree = new ElementBndBoxTree( *_mesh, type, _meshPartIt );
 
-    vector<const SMDS_MeshElement*> suspectElems;
+    ElementBndBoxTree::TElemSeq suspectElems;
     ebbTree->getElementsNearPoint( point, suspectElems );
 
     if ( suspectElems.empty() && ebbTree->maxSize() > 0 )
@@ -902,20 +880,20 @@ SMESH_ElementSearcherImpl::FindClosestTo( const gp_Pnt&       point,
       }
     }
     double minDist = std::numeric_limits<double>::max();
-    multimap< double, const SMDS_MeshElement* > dist2face;
-    vector<const SMDS_MeshElement*>::iterator elem = suspectElems.begin();
+    std::multimap< double, const SMDS_MeshElement* > dist2face;
+    ElementBndBoxTree::TElemSeq::iterator elem = suspectElems.begin();
     for ( ; elem != suspectElems.end(); ++elem )
     {
       double dist = SMESH_MeshAlgos::GetDistance( *elem, point );
       if ( dist < minDist + 1e-10)
       {
         minDist = dist;
-        dist2face.insert( dist2face.begin(), make_pair( dist, *elem ));
+        dist2face.insert( dist2face.begin(), std::make_pair( dist, *elem ));
       }
     }
     if ( !dist2face.empty() )
     {
-      multimap< double, const SMDS_MeshElement* >::iterator d2f = dist2face.begin();
+      std::multimap< double, const SMDS_MeshElement* >::iterator d2f = dist2face.begin();
       closestElem = d2f->second;
       // if there are several elements at the same distance, select one
       // with GC closest to the point
@@ -974,21 +952,21 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
 
   const int nbAxes = 3;
   gp_Dir axisDir[ nbAxes ] = { gp::DX(), gp::DY(), gp::DZ() };
-  map< double, TInters >   paramOnLine2TInters[ nbAxes ];
-  list< TInters > tangentInters[ nbAxes ]; // of faces whose plane includes the line
-  multimap< int, int > nbInt2Axis; // to find the simplest case
+  std::map< double, TInters >   paramOnLine2TInters[ nbAxes ];
+  std::list< TInters > tangentInters[ nbAxes ]; // of faces whose plane includes the line
+  std::multimap< int, int > nbInt2Axis; // to find the simplest case
   for ( int axis = 0; axis < nbAxes; ++axis )
   {
     gp_Ax1 lineAxis( point, axisDir[axis]);
     gp_Lin line    ( lineAxis );
 
-    vector<const SMDS_MeshElement*> suspectFaces; // faces possibly intersecting the line
+    ElementBndBoxTree::TElemSeq suspectFaces; // faces possibly intersecting the line
     ebbTree->getElementsNearLine( lineAxis, suspectFaces );
 
     // Intersect faces with the line
 
-    map< double, TInters > & u2inters = paramOnLine2TInters[ axis ];
-    vector<const SMDS_MeshElement*>::iterator face = suspectFaces.begin();
+    std::map< double, TInters > & u2inters = paramOnLine2TInters[ axis ];
+    ElementBndBoxTree::TElemSeq::iterator face = suspectFaces.begin();
     for ( ; face != suspectFaces.end(); ++face )
     {
       // get face plane
@@ -1009,7 +987,7 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
         double tol = 1e-4 * Sqrt( fNorm.Modulus() );
         gp_Pnt intersectionPoint = intersection.Point(1);
         if ( !SMESH_MeshAlgos::IsOut( *face, intersectionPoint, tol ))
-          u2inters.insert(make_pair( intersection.ParamOnConic(1), TInters( *face, fNorm )));
+          u2inters.insert( std::make_pair( intersection.ParamOnConic(1), TInters( *face, fNorm )));
       }
     }
     // Analyse intersections roughly
@@ -1033,7 +1011,7 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
     if ( nbIntBeforePoint == 1 || nbIntAfterPoint == 1 )
       return TopAbs_IN;
 
-    nbInt2Axis.insert( make_pair( min( nbIntBeforePoint, nbIntAfterPoint ), axis ));
+    nbInt2Axis.insert( std::make_pair( std::min( nbIntBeforePoint, nbIntAfterPoint ), axis ));
 
     if ( _outerFacesFound ) break; // pass to thorough analysis
 
@@ -1047,29 +1025,29 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
 
   for ( int hasPositionInfo = _outerFacesFound; hasPositionInfo < 2; ++hasPositionInfo )
   {
-    multimap< int, int >::const_iterator nb_axis = nbInt2Axis.begin();
+    std::multimap< int, int >::const_iterator nb_axis = nbInt2Axis.begin();
     for ( ; nb_axis != nbInt2Axis.end(); ++nb_axis )
     {
       int axis = nb_axis->second;
-      map< double, TInters > & u2inters = paramOnLine2TInters[ axis ];
+      std::map< double, TInters > & u2inters = paramOnLine2TInters[ axis ];
 
       gp_Ax1 lineAxis( point, axisDir[axis]);
       gp_Lin line    ( lineAxis );
 
       // add tangent intersections to u2inters
       double param;
-      list< TInters >::const_iterator tgtInt = tangentInters[ axis ].begin();
+      std::list< TInters >::const_iterator tgtInt = tangentInters[ axis ].begin();
       for ( ; tgtInt != tangentInters[ axis ].end(); ++tgtInt )
         if ( getIntersParamOnLine( line, tgtInt->_face, tolerance, param ))
-          u2inters.insert(make_pair( param, *tgtInt ));
+          u2inters.insert( std::make_pair( param, *tgtInt ));
       tangentInters[ axis ].clear();
 
       // Count intersections before and after the point excluding touching ones.
       // If hasPositionInfo we count intersections of outer boundary only
 
       int nbIntBeforePoint = 0, nbIntAfterPoint = 0;
-      double f = numeric_limits<double>::max(), l = -numeric_limits<double>::max();
-      map< double, TInters >::iterator u_int1 = u2inters.begin(), u_int2 = u_int1;
+      double f = std::numeric_limits<double>::max(), l = -std::numeric_limits<double>::max();
+      std::map< double, TInters >::iterator u_int1 = u2inters.begin(), u_int2 = u_int1;
       bool ok = ! u_int1->second._coincides;
       while ( ok && u_int1 != u2inters.end() )
       {
@@ -1118,8 +1096,8 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
           // decide if we skipped a touching intersection
           if ( nbSamePnt + nbTgt > 0 )
           {
-            double minDot = numeric_limits<double>::max(), maxDot = -numeric_limits<double>::max();
-            map< double, TInters >::iterator u_int = u_int1;
+            double minDot = std::numeric_limits<double>::max(), maxDot = -minDot;
+            std::map< double, TInters >::iterator u_int = u_int1;
             for ( ; u_int != u_int2; ++u_int )
             {
               if ( u_int->second._coincides ) continue;
@@ -1172,7 +1150,7 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
     if ( !hasPositionInfo )
     {
       // gather info on faces position - is face in the outer boundary or not
-      map< double, TInters > & u2inters = paramOnLine2TInters[ 0 ];
+      std::map< double, TInters > & u2inters = paramOnLine2TInters[ 0 ];
       findOuterBoundary( u2inters.begin()->second._face );
     }
 
@@ -1187,16 +1165,20 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
  */
 //=======================================================================
 
-void SMESH_ElementSearcherImpl::GetElementsNearLine( const gp_Ax1&                      line,
-                                                     SMDSAbs_ElementType                type,
-                                                     vector< const SMDS_MeshElement* >& foundElems)
+void SMESH_ElementSearcherImpl::
+GetElementsNearLine( const gp_Ax1&                           line,
+                     SMDSAbs_ElementType                     type,
+                     std::vector< const SMDS_MeshElement* >& foundElems)
 {
   _elementType = type;
   ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
   if ( !ebbTree )
     ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt );
 
-  ebbTree->getElementsNearLine( line, foundElems );
+  ElementBndBoxTree::TElemSeq elems;
+  ebbTree->getElementsNearLine( line, elems );
+
+  foundElems.insert( foundElems.end(), elems.begin(), elems.end() );
 }
 
 //=======================================================================
@@ -1205,17 +1187,43 @@ void SMESH_ElementSearcherImpl::GetElementsNearLine( const gp_Ax1&
  */
 //=======================================================================
 
-void SMESH_ElementSearcherImpl::GetElementsInSphere( const gp_XYZ&                      center,
-                                                     const double                       radius,
-                                                     SMDSAbs_ElementType                type,
-                                                     vector< const SMDS_MeshElement* >& foundElems)
+void SMESH_ElementSearcherImpl::
+GetElementsInSphere( const gp_XYZ&                           center,
+                     const double                            radius,
+                     SMDSAbs_ElementType                     type,
+                     std::vector< const SMDS_MeshElement* >& foundElems)
 {
   _elementType = type;
   ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
   if ( !ebbTree )
     ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt );
 
-  ebbTree->getElementsInSphere( center, radius, foundElems );
+  ElementBndBoxTree::TElemSeq elems;
+  ebbTree->getElementsInSphere( center, radius, elems );
+
+  foundElems.insert( foundElems.end(), elems.begin(), elems.end() );
+}
+
+//=======================================================================
+/*
+ * Return elements whose bounding box intersects a given bounding box
+ */
+//=======================================================================
+
+void SMESH_ElementSearcherImpl::
+GetElementsInBox( const Bnd_B3d&                          box,
+                  SMDSAbs_ElementType                     type,
+                  std::vector< const SMDS_MeshElement* >& foundElems)
+{
+  _elementType = type;
+  ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
+  if ( !ebbTree )
+    ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt, getTolerance() );
+
+  ElementBndBoxTree::TElemSeq elems;
+  ebbTree->getElementsInBox( box, elems );
+
+  foundElems.insert( foundElems.end(), elems.begin(), elems.end() );
 }
 
 //=======================================================================
@@ -1242,7 +1250,7 @@ gp_XYZ SMESH_ElementSearcherImpl::Project(const gp_Pnt&            point,
   const Bnd_B3d* box = ebbLeaf->getBox();
   double radius = ( box->CornerMax() - box->CornerMin() ).Modulus();
 
-  vector< const SMDS_MeshElement* > elems;
+  ElementBndBoxTree::TElemSeq elems;
   ebbTree->getElementsInSphere( p, radius, elems );
   while ( elems.empty() )
   {
@@ -1252,13 +1260,14 @@ gp_XYZ SMESH_ElementSearcherImpl::Project(const gp_Pnt&            point,
   gp_XYZ proj, bestProj;
   const SMDS_MeshElement* elem = 0;
   double minDist = 2 * radius;
-  for ( size_t i = 0; i < elems.size(); ++i )
+  ElementBndBoxTree::TElemSeq::iterator e = elems.begin();
+  for ( ; e != elems.end(); ++e )
   {
-    double d = SMESH_MeshAlgos::GetDistance( elems[i], p, &proj );
+    double d = SMESH_MeshAlgos::GetDistance( *e, p, &proj );
     if ( d < minDist )
     {
       bestProj = proj;
-      elem = elems[i];
+      elem = *e;
       minDist = d;
     }
   }
@@ -1282,9 +1291,9 @@ bool SMESH_MeshAlgos::IsOut( const SMDS_MeshElement* element, const gp_Pnt& poin
 
   // get ordered nodes
 
-  vector< SMESH_TNodeXYZ > xyz; xyz.reserve( element->NbNodes()+1 );
+  std::vector< SMESH_TNodeXYZ > xyz; xyz.reserve( element->NbNodes()+1 );
 
-  SMDS_ElemIteratorPtr nodeIt = element->interlacedNodesElemIterator();
+  SMDS_NodeIteratorPtr nodeIt = element->interlacedNodesIterator();
   for ( int i = 0; nodeIt->more(); ++i )
     xyz.push_back( SMESH_TNodeXYZ( nodeIt->next() ));
 
@@ -1347,7 +1356,7 @@ bool SMESH_MeshAlgos::IsOut( const SMDS_MeshElement* element, const gp_Pnt& poin
     if ( n2pSize * n2pSize > fNormSize * 100 ) return true; // point is very far
     plnNorm /= n2pSize;
     // for each node of the face, compute its signed distance to the cutting plane
-    vector<double> dist( nbNodes + 1);
+    std::vector<double> dist( nbNodes + 1);
     for ( i = 0; i < nbNodes; ++i )
     {
       gp_Vec n2p( xyz[i], point );
@@ -1520,11 +1529,11 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshElement* elem,
   switch ( elem->GetType() )
   {
   case SMDSAbs_Volume:
-    return GetDistance( dynamic_cast<const SMDS_MeshVolume*>( elem ), point, closestPnt );
+    return GetDistance( static_cast<const SMDS_MeshVolume*>( elem ), point, closestPnt );
   case SMDSAbs_Face:
-    return GetDistance( dynamic_cast<const SMDS_MeshFace*>( elem ), point, closestPnt );
+    return GetDistance( static_cast<const SMDS_MeshFace*>( elem ), point, closestPnt );
   case SMDSAbs_Edge:
-    return GetDistance( dynamic_cast<const SMDS_MeshEdge*>( elem ), point, closestPnt );
+    return GetDistance( static_cast<const SMDS_MeshEdge*>( elem ), point, closestPnt );
   case SMDSAbs_Node:
     if ( closestPnt ) *closestPnt = SMESH_TNodeXYZ( elem );
     return point.Distance( SMESH_TNodeXYZ( elem ));
@@ -1550,7 +1559,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
 
   // coordinates of nodes (medium nodes, if any, ignored)
   typedef SMDS_StdIterator< SMESH_TNodeXYZ, SMDS_ElemIteratorPtr > TXyzIterator;
-  vector<gp_XYZ> xyz( TXyzIterator( face->nodesIterator()), TXyzIterator() );
+  std::vector<gp_XYZ> xyz( TXyzIterator( face->nodesIterator()), TXyzIterator() );
   xyz.resize( face->NbCornerNodes()+1 );
 
   // transformation to get xyz[0] lies on the origin, xyz[1] lies on the Z axis,
@@ -1574,7 +1583,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
   trsf.SetTransformation( tgtCS );
 
   // move all the nodes to 2D
-  vector<gp_XY> xy( xyz.size() );
+  std::vector<gp_XY> xy( xyz.size() );
   for ( size_t i = 0;i < xyz.size()-1; ++i )
   {
     gp_XYZ p3d = xyz[i];
@@ -1590,7 +1599,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
   gp_XY point2D( tmpPnt.X(), tmpPnt.Z() );
 
   // loop on edges of the face to analyze point position ralative to the face
-  set< PointPos > pntPosSet;
+  std::set< PointPos > pntPosSet;
   for ( size_t i = 1; i < xy.size(); ++i )
   {
     PointPos pos = getPointPosition( point2D, &xy[0], i-1 );
@@ -1608,7 +1617,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
     gp_Vec n1p ( xyz[ pos._index ], point  );
     double u = ( edge * n1p ) / edge.SquareMagnitude(); // param [0,1] on the edge
     // projection of the point on the edge
-    gp_XYZ proj = ( 1. - u ) * xyz[ pos._index ] + u * xyz[ pos._index+1 ];
+    gp_XYZ proj = xyz[ pos._index ] + u * edge.XYZ();
     if ( closestPnt ) *closestPnt = proj;
     return point.Distance( proj );
   }
@@ -1655,10 +1664,9 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshEdge* seg,
 
   int i = 0, nbNodes = seg->NbNodes();
 
-  vector< SMESH_TNodeXYZ > xyz( nbNodes );
-  SMDS_ElemIteratorPtr nodeIt = seg->interlacedNodesElemIterator();
-  while ( nodeIt->more() )
-    xyz[ i++ ].Set( nodeIt->next() );
+  std::vector< SMESH_TNodeXYZ > xyz( nbNodes );
+  for ( SMDS_NodeIteratorPtr nodeIt = seg->interlacedNodesIterator(); nodeIt->more(); i++ )
+    xyz[ i ].Set( nodeIt->next() );
 
   for ( i = 1; i < nbNodes; ++i )
   {
@@ -1734,7 +1742,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshVolume* volume,
       break;
     }
     default:
-      vector<const SMDS_MeshNode *> nvec( nodes, nodes + vTool.NbFaceNodes( iF ));
+      std::vector<const SMDS_MeshNode *> nvec( nodes, nodes + vTool.NbFaceNodes( iF ));
       SMDS_PolygonalFaceOfNodes tmpFace( nvec );
       dist = GetDistance( &tmpFace, point, closestPnt );
     }
@@ -1828,7 +1836,7 @@ SMESH_MeshAlgos::FindFaceInSet(const SMDS_MeshNode*    n1,
     if ( !face && elem->IsQuadratic())
     {
       // analysis for quadratic elements using all nodes
-      SMDS_ElemIteratorPtr anIter = elem->interlacedNodesElemIterator();
+      SMDS_NodeIteratorPtr anIter = elem->interlacedNodesIterator();
       const SMDS_MeshNode* prevN = static_cast<const SMDS_MeshNode*>( anIter->next() );
       for ( i1 = -1, i2 = 0; anIter->more() && !face; i1++, i2++ )
       {
@@ -1839,7 +1847,7 @@ SMESH_MeshAlgos::FindFaceInSet(const SMDS_MeshNode*    n1,
         }
         else if ( n2 == prevN && n1 == n )
         {
-          face = elem; swap( i1, i2 );
+          face = elem; std::swap( i1, i2 );
         }
         prevN = n;
       }
@@ -1874,7 +1882,7 @@ bool SMESH_MeshAlgos::FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool
     normal += ( p[2] - p[1] ) ^ ( p[0] - p[1] );
   }
   double size2 = normal.SquareModulus();
-  bool ok = ( size2 > numeric_limits<double>::min() * numeric_limits<double>::min());
+  bool ok = ( size2 > std::numeric_limits<double>::min() * std::numeric_limits<double>::min());
   if ( normalized && ok )
     normal /= sqrt( size2 );
 
@@ -1886,10 +1894,10 @@ bool SMESH_MeshAlgos::FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool
 //purpose  : Return nodes common to two elements
 //=======================================================================
 
-vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_MeshElement* e1,
-                                                              const SMDS_MeshElement* e2)
+std::vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_MeshElement* e1,
+                                                                   const SMDS_MeshElement* e2)
 {
-  vector< const SMDS_MeshNode*> common;
+  std::vector< const SMDS_MeshNode*> common;
   for ( int i = 0 ; i < e1->NbNodes(); ++i )
     if ( e2->GetNodeIndex( e1->GetNode( i )) >= 0 )
       common.push_back( e1->GetNode( i ));
index 88b1c6d247c8f7d950bded2407e61c4a248069e6..3b1097a66002f67e43fb836fa4caf53d63f04e42 100644 (file)
@@ -24,7 +24,7 @@
 // Author    : Edward AGAPOV (eap)
 
 // This file holds some low level algorithms extracted from SMESH_MeshEditor
-// to make them accessible from Controls package
+// to make them accessible from Controls package, and more
 
 
 #ifndef __SMESH_MeshAlgos_HXX__
@@ -41,6 +41,7 @@
 
 class gp_Pnt;
 class gp_Ax1;
+class Bnd_B3d;
 class SMDS_MeshNode;
 class SMDS_MeshElement;
 class SMDS_Mesh;
@@ -96,6 +97,12 @@ struct SMESHUtils_EXPORT SMESH_ElementSearcher
                                     const double                            radius,
                                     SMDSAbs_ElementType                     type,
                                     std::vector< const SMDS_MeshElement* >& foundElems) = 0;
+  /*!
+   * \brief Return elements whose bounding box intersects a given bounding box
+   */
+  virtual void GetElementsInBox( const Bnd_B3d&                          box,
+                                 SMDSAbs_ElementType                     type,
+                                 std::vector< const SMDS_MeshElement* >& foundElems) = 0;
   /*!
    * \brief Find out if the given point is out of closed 2D mesh.
    */
@@ -114,6 +121,27 @@ struct SMESHUtils_EXPORT SMESH_ElementSearcher
 
 namespace SMESH_MeshAlgos
 {
+  /*!
+   * \brief Return SMESH_NodeSearcher. The caller is responsible for deleting it
+   */
+  SMESHUtils_EXPORT
+  SMESH_NodeSearcher* GetNodeSearcher( SMDS_Mesh& mesh );
+
+  SMESHUtils_EXPORT
+  SMESH_NodeSearcher* GetNodeSearcher( SMDS_ElemIteratorPtr elemIt );
+
+  /*!
+   * \brief Return SMESH_ElementSearcher. The caller is responsible for deleting it
+   */
+  SMESHUtils_EXPORT
+  SMESH_ElementSearcher* GetElementSearcher( SMDS_Mesh& mesh,
+                                             double     tolerance=-1.);
+  SMESHUtils_EXPORT
+  SMESH_ElementSearcher* GetElementSearcher( SMDS_Mesh& mesh,
+                                             SMDS_ElemIteratorPtr elemIt,
+                                             double     tolerance=-1. );
+
+
   /*!
    * \brief Return true if the point is IN or ON of the element
    */
@@ -219,26 +247,6 @@ namespace SMESH_MeshAlgos
         MarkElems( (*it)->nodesIterator(), isMarked );
   }
 
-  /*!
-   * \brief Return SMESH_NodeSearcher. The caller is responsible for deleting it
-   */
-  SMESHUtils_EXPORT
-  SMESH_NodeSearcher* GetNodeSearcher( SMDS_Mesh& mesh );
-
-  SMESHUtils_EXPORT
-  SMESH_NodeSearcher* GetNodeSearcher( SMDS_ElemIteratorPtr elemIt );
-
-  /*!
-   * \brief Return SMESH_ElementSearcher. The caller is responsible for deleting it
-   */
-  SMESHUtils_EXPORT
-  SMESH_ElementSearcher* GetElementSearcher( SMDS_Mesh& mesh,
-                                             double     tolerance=-1.);
-  SMESHUtils_EXPORT
-  SMESH_ElementSearcher* GetElementSearcher( SMDS_Mesh& mesh,
-                                             SMDS_ElemIteratorPtr elemIt,
-                                             double     tolerance=-1. );
-
 
 
   typedef std::vector<const SMDS_MeshNode*> TFreeBorder;
@@ -262,18 +270,16 @@ namespace SMESH_MeshAlgos
    * Returns TFreeBorder's coincident within the given tolerance.
    * If the tolerance <= 0.0 then one tenth of an average size of elements adjacent
    * to free borders being compared is used.
-   *
-   * (Implemented in ./SMESH_FreeBorders.cxx)
    */
   SMESHUtils_EXPORT
   void FindCoincidentFreeBorders(SMDS_Mesh&              mesh,
                                  double                  tolerance,
                                  CoincidentFreeBorders & foundFreeBordes);
+  // Implemented in ./SMESH_FreeBorders.cxx
+
   /*!
    * Returns all or only closed TFreeBorder's.
    * Optionally check if the mesh is manifold and if faces are correctly oriented.
-   *
-   * (Implemented in ./SMESH_FreeBorders.cxx)
    */
   SMESHUtils_EXPORT
   void FindFreeBorders(SMDS_Mesh&       mesh,
@@ -281,26 +287,84 @@ namespace SMESH_MeshAlgos
                        const bool       closedOnly,
                        bool*            isManifold = 0,
                        bool*            isGoodOri = 0);
+  // Implemented in ./SMESH_FreeBorders.cxx
+
   /*!
    * Fill a hole defined by a TFreeBorder with 2D elements.
-   *
-   * (Implemented in ./SMESH_FillHole.cxx)
    */
   SMESHUtils_EXPORT
   void FillHole(const TFreeBorder &                   freeBorder,
                 SMDS_Mesh&                            mesh,
                 std::vector<const SMDS_MeshElement*>& newFaces);
+  // Implemented in ./SMESH_FillHole.cxx
 
 
   /*!
    * \brief Find nodes whose merge makes the element invalid
-   *
-   * (Implemented in SMESH_DeMerge.cxx)
    */
   SMESHUtils_EXPORT
   void DeMerge(const SMDS_MeshElement*              elem,
                std::vector< const SMDS_MeshNode* >& newNodes,
                std::vector< const SMDS_MeshNode* >& noMergeNodes);
+  // Implemented in SMESH_DeMerge.cxx
+
+
+  typedef std::vector< std::pair< const SMDS_MeshElement*, const SMDS_MeshElement* > > TEPairVec;
+  typedef std::vector< std::pair< const SMDS_MeshNode*, const SMDS_MeshNode* > >       TNPairVec;
+  /*!
+   * \brief Create an offset mesh of given faces
+   *  \param [in] faceIt - the input faces
+   *  \param [in] theFixIntersections - to fix self intersections of the offset mesh or not
+   *  \param [out] new2OldFaces - history of faces
+   *  \param [out] new2OldNodes - history of nodes
+   *  \return SMDS_Mesh* - the new offset mesh, a caller should delete
+   */
+  SMESHUtils_EXPORT
+  SMDS_Mesh* MakeOffset( SMDS_ElemIteratorPtr faceIt,
+                         SMDS_Mesh&           mesh,
+                         const double         offset,
+                         const bool           theFixIntersections,
+                         TEPairVec&           new2OldFaces,
+                         TNPairVec&           new2OldNodes );
+  // Implemented in ./SMESH_Offset.cxx
+
+
+  /*!
+   * \brief Divide a mesh face into triangles
+   */
+  // Implemented in ./SMESH_Triangulate.cxx
+
+  class SMESHUtils_EXPORT Triangulate
+  {
+  public:
+
+    static int GetNbTriangles( const SMDS_MeshElement* face );
+
+    int GetTriangles( const SMDS_MeshElement*             face,
+                      std::vector< const SMDS_MeshNode*>& nodes);
+  private:
+
+    bool triangulate( std::vector< const SMDS_MeshNode*>& nodes, const size_t nbNodes );
+
+    /*!
+     * \brief Vertex of a polygon. Together with 2 neighbor Vertices represents a triangle
+     */
+    struct PolyVertex
+    {
+      SMESH_NodeXYZ _nxyz;
+      gp_XY         _xy;
+      PolyVertex*   _prev;
+      PolyVertex*   _next;
+
+      void   SetNodeAndNext( const SMDS_MeshNode* n, PolyVertex& v );
+      void   GetTriaNodes( const SMDS_MeshNode** nodes) const;
+      double TriaArea() const;
+      bool   IsInsideTria( const PolyVertex* v );
+      PolyVertex* Delete();
+    };
+    std::vector< PolyVertex > _pv;
+  };
+
 
 } // namespace SMESH_MeshAlgos
 
index 03e99b50f99d2b207ba40008698350284c3deb68..94e76ad77932c620bb26e0a96904a77e723e6d2c 100644 (file)
@@ -30,7 +30,9 @@
 #include "SMESH_OctreeNode.hxx"
 
 #include "SMDS_SetIterator.hxx"
+#include "SMESH_MeshAlgos.hxx"
 #include "SMESH_TypeDefs.hxx"
+
 #include <gp_Pnt.hxx>
 
 using namespace std;
@@ -48,7 +50,7 @@ using namespace std;
 SMESH_OctreeNode::SMESH_OctreeNode (const TIDSortedNodeSet & theNodes, const int maxLevel,
                                     const int maxNbNodes , const double minBoxSize )
   :SMESH_Octree( new Limit( maxLevel,minBoxSize,maxNbNodes)),
-   myNodes(theNodes)
+   myNodes( theNodes.begin(), theNodes.end() )
 {
   compute();
 }
@@ -96,12 +98,9 @@ SMESH_Octree* SMESH_OctreeNode::newChild() const
 Bnd_B3d* SMESH_OctreeNode::buildRootBox()
 {
   Bnd_B3d* box = new Bnd_B3d;
-  TIDSortedNodeSet::iterator it = myNodes.begin();
-  for (; it != myNodes.end(); it++) {
-    const SMDS_MeshNode* n1 = *it;
-    gp_XYZ p1( n1->X(), n1->Y(), n1->Z() );
-    box->Add(p1);
-  }
+  for ( size_t i = 0; i < myNodes.size(); ++i )
+    box->Add( SMESH_NodeXYZ( myNodes[ i ]));
+
   if ((int) myNodes.size() <= getMaxNbNodes() )
     myIsLeaf = true;
 
@@ -117,12 +116,13 @@ Bnd_B3d* SMESH_OctreeNode::buildRootBox()
  */
 //====================================================================================
 
-const bool SMESH_OctreeNode::isInside (const gp_XYZ& p, const double precision)
+const bool SMESH_OctreeNode::isInside ( const gp_XYZ& p, const double precision )
 {
-  if (precision <= 0.)
-    return !(getBox()->IsOut(p));
+  if ( precision <= 0.)
+    return !( getBox()->IsOut(p) );
+
   Bnd_B3d BoxWithPrecision = *getBox();
-  BoxWithPrecision.Enlarge(precision);
+  BoxWithPrecision.Enlarge( precision );
   return ! BoxWithPrecision.IsOut(p);
 }
 
@@ -132,27 +132,37 @@ const bool SMESH_OctreeNode::isInside (const gp_XYZ& p, const double precision)
  * Shares the father's data with each of his child
  */
 //================================================
+
 void SMESH_OctreeNode::buildChildrenData()
 {
   gp_XYZ min = getBox()->CornerMin();
   gp_XYZ max = getBox()->CornerMax();
   gp_XYZ mid = (min + max)/2.;
 
-  TIDSortedNodeSet::iterator it = myNodes.begin();
-  while (it != myNodes.end())
+  for ( int i = 0; i < 8; i++ )
   {
-    const SMDS_MeshNode* n1 = *it;
-    int ChildBoxNum = getChildIndex( n1->X(), n1->Y(), n1->Z(), mid );
-    SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[ChildBoxNum]);
-    myChild->myNodes.insert(myChild->myNodes.end(),n1);
-    myNodes.erase( it );
-    it = myNodes.begin();
+    SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*>( myChildren[ i ]);
+    myChild->myNodes.reserve( myNodes.size() / 8 );
   }
-  for (int i = 0; i < 8; i++)
+
+  for ( size_t i = 0; i < myNodes.size(); ++i )
   {
-    SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[i]);
+    SMESH_NodeXYZ n = myNodes[ i ];
+    int ChildBoxNum = getChildIndex( n.X(), n.Y(), n.Z(), mid );
+    SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*>( myChildren[ ChildBoxNum ]);
+    myChild->myNodes.push_back( myNodes[ i ]);
+  }
+  SMESHUtils::FreeVector( myNodes );
+
+  for ( int i = 0; i < 8; i++ )
+  {
+    SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*>( myChildren[ i ]);
     if ((int) myChild->myNodes.size() <= getMaxNbNodes() )
+    {
       myChild->myIsLeaf = true;
+      if ( myChild->myNodes.empty() )
+        SMESHUtils::FreeVector( myChild->myNodes );
+    }
   }
 }
 
@@ -164,23 +174,24 @@ void SMESH_OctreeNode::buildChildrenData()
  * \param Result - list of Nodes potentials to be near Node
  */
 //====================================================================
-void SMESH_OctreeNode::NodesAround (const SMDS_MeshNode * Node,
-                                    list<const SMDS_MeshNode*>* Result,
-                                    const double precision)
+
+void SMESH_OctreeNode::AllNodesAround (const SMDS_MeshNode *              Node,
+                                       std::vector<const SMDS_MeshNode*>* Result,
+                                       const double                       precision)
 {
-  SMESH_TNodeXYZ p(Node);
-  if (isInside(p, precision))
+  SMESH_NodeXYZ p = Node;
+  if ( isInside( p, precision ))
   {
-    if (isLeaf())
+    if ( isLeaf() )
     {
-      Result->insert(Result->end(), myNodes.begin(), myNodes.end());
+      Result->insert( Result->end(), myNodes.begin(), myNodes.end() );
     }
     else
     {
-      for (int i = 0; i < 8; i++)
+      for ( int i = 0; i < 8; i++ )
       {
-        SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[i]);
-        myChild->NodesAround(Node, Result, precision);
+        SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*> (myChildren[i]);
+        myChild->AllNodesAround( Node, Result, precision );
       }
     }
   }
@@ -197,7 +208,7 @@ void SMESH_OctreeNode::NodesAround (const SMDS_MeshNode * Node,
  */
 //================================================================================
 
-bool SMESH_OctreeNode::NodesAround(const gp_XYZ &node,
+bool SMESH_OctreeNode::NodesAround(const gp_XYZ &                     node,
                                    map<double, const SMDS_MeshNode*>& dist2Nodes,
                                    double                             precision)
 {
@@ -206,16 +217,16 @@ bool SMESH_OctreeNode::NodesAround(const gp_XYZ &node,
   else if ( precision == 0. )
     precision = maxSize() / 2;
 
-  if (isInside(node, precision))
+  if ( isInside( node, precision ))
   {
-    if (!isLeaf())
+    if ( !isLeaf() )
     {
       // first check a child containing node
       gp_XYZ mid = (getBox()->CornerMin() + getBox()->CornerMax()) / 2.;
       int nodeChild  = getChildIndex( node.X(), node.Y(), node.Z(), mid );
       if ( ((SMESH_OctreeNode*) myChildren[nodeChild])->NodesAround(node, dist2Nodes, precision))
         return true;
-      
+
       for (int i = 0; i < 8; i++)
         if ( i != nodeChild )
           if (((SMESH_OctreeNode*) myChildren[i])->NodesAround(node, dist2Nodes, precision))
@@ -224,16 +235,15 @@ bool SMESH_OctreeNode::NodesAround(const gp_XYZ &node,
     else if ( NbNodes() > 0 )
     {
       double minDist = precision * precision;
-      TIDSortedNodeSet::iterator nIt = myNodes.begin();
-      for ( ; nIt != myNodes.end(); ++nIt )
+      for ( size_t i = 0; i < myNodes.size(); ++i )
       {
-        SMESH_TNodeXYZ p2( *nIt );
-        double dist2 = ( node - p2 ).SquareModulus();
+        SMESH_NodeXYZ p2 = myNodes[ i ];
+        double     dist2 = ( node - p2 ).SquareModulus();
         if ( dist2 < minDist )
-          dist2Nodes.insert( make_pair( minDist = dist2, p2._node ));
+          dist2Nodes.insert( std::make_pair( minDist = dist2, myNodes[ i ] ));
       }
-//       if ( dist2Nodes.size() > 1 ) // leave only closest node in dist2Nodes
-//         dist2Nodes.erase( ++dist2Nodes.begin(), dist2Nodes.end());
+      // if ( dist2Nodes.size() > 1 ) // leave only closest node in dist2Nodes
+      //   dist2Nodes.erase( ++dist2Nodes.begin(), dist2Nodes.end());
 
       // true if an exact overlapping found
       return ( sqrt( minDist ) <= precision * 1e-12 );
@@ -260,21 +270,20 @@ void SMESH_OctreeNode::NodesAround(const gp_XYZ&                      point,
     if ( isLeaf() && NbNodes() )
     {
       double minDist2 = precision * precision;
-      TIDSortedNodeSet::iterator nIt = myNodes.begin();
-      for ( ; nIt != myNodes.end(); ++nIt )
+      for ( size_t i = 0; i < myNodes.size(); ++i )
       {
-        SMESH_TNodeXYZ p2( *nIt );
+        SMESH_NodeXYZ p2 = myNodes[ i ];
         double dist2 = ( point - p2 ).SquareModulus();
         if ( dist2 <= minDist2 )
-          nodes.push_back( p2._node );
+          nodes.push_back( myNodes[ i ] );
       }
     }
     else if ( myChildren )
     {
       for (int i = 0; i < 8; i++)
       {
-        SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[i]);
-        myChild->NodesAround( point, nodes, precision);
+        SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*>( myChildren[ i ]);
+        myChild->NodesAround( point, nodes, precision );
       }
     }
   }
@@ -292,15 +301,19 @@ void SMESH_OctreeNode::NodesAround(const gp_XYZ&                      point,
  * \param maxNbNodes - maximum Nodes in a Leaf of the SMESH_OctreeNode constructed, default value is 5
  */
 //=============================
+
 void SMESH_OctreeNode::FindCoincidentNodes (TIDSortedNodeSet& theSetOfNodes,
-                                            list< list< const SMDS_MeshNode*> >* theGroupsOfNodes,
-                                            const double theTolerance,
-                                            const int maxLevel,
-                                            const int maxNbNodes)
+                                            TListOfNodeLists* theGroupsOfNodes,
+                                            const double      theTolerance,
+                                            const int         maxLevel,
+                                            const int         maxNbNodes)
 {
-  // VSR 14/10/2011: limit max number of the levels in order to avoid endless recursing
+  // VSR 14/10/2011: limit max number of the levels in order to avoid endless recursion
   const int MAX_LEVEL = 10;
-  SMESH_OctreeNode theOctreeNode(theSetOfNodes, maxLevel < 0 ? MAX_LEVEL : maxLevel, maxNbNodes, theTolerance);
+  SMESH_OctreeNode theOctreeNode(theSetOfNodes,
+                                 maxLevel < 0 ? MAX_LEVEL : maxLevel,
+                                 maxNbNodes,
+                                 theTolerance);
   theOctreeNode.FindCoincidentNodes (&theSetOfNodes, theTolerance, theGroupsOfNodes);
 }
 
@@ -314,36 +327,40 @@ void SMESH_OctreeNode::FindCoincidentNodes (TIDSortedNodeSet& theSetOfNodes,
  * \param theGroupsOfNodes - list of nodes closed to each other returned
  */
 //=============================
-void SMESH_OctreeNode::FindCoincidentNodes ( TIDSortedNodeSet*                    theSetOfNodes,
-                                             const double                         theTolerance,
-                                             list< list< const SMDS_MeshNode*> >* theGroupsOfNodes)
+
+void SMESH_OctreeNode::FindCoincidentNodes ( TIDSortedNodeSet* theSetOfNodes,
+                                             const double      theTolerance,
+                                             TListOfNodeLists* theGroupsOfNodes )
 {
-  TIDSortedNodeSet::iterator it1 = theSetOfNodes->begin();
-  list<const SMDS_MeshNode*>::iterator it2;
+  // un-mark all nodes; we mark nodes added to theGroupsOfNodes
+  SMESH_MeshAlgos::MarkElems( SMESHUtils::elemSetIterator( *theSetOfNodes ), false );
 
-  list<const SMDS_MeshNode*> ListOfCoincidentNodes;
+  vector<const SMDS_MeshNode*> coincidentNodes;
   TIDCompare idLess;
 
-  while (it1 != theSetOfNodes->end())
+  TIDSortedNodeSet::iterator it1 = theSetOfNodes->begin();
+  for ( ; it1 != theSetOfNodes->end(); ++it1 )
   {
     const SMDS_MeshNode * n1 = *it1;
+    if ( n1->isMarked() )
+      continue;
+    n1->setIsMarked( true );
 
-    // Searching for Nodes around n1 and put them in ListofCoincidentNodes.
+    // Searching for Nodes around n1 and put them in coincidentNodes.
     // Found nodes are also erased from theSetOfNodes
-    FindCoincidentNodes(n1, theSetOfNodes, &ListOfCoincidentNodes, theTolerance);
+    coincidentNodes.clear();
+    findCoincidentNodes( n1, theSetOfNodes, &coincidentNodes, theTolerance );
 
-    if ( !ListOfCoincidentNodes.empty() )
+    if ( !coincidentNodes.empty() )
     {
       // We build a list {n1 + his neighbors} and add this list in theGroupsOfNodes
-      if ( idLess( n1, ListOfCoincidentNodes.front() )) ListOfCoincidentNodes.push_front( n1 );
-      else                                              ListOfCoincidentNodes.push_back ( n1 );
-      ListOfCoincidentNodes.sort( idLess );
-      theGroupsOfNodes->push_back( list<const SMDS_MeshNode*>() );
-      theGroupsOfNodes->back().splice( theGroupsOfNodes->back().end(), ListOfCoincidentNodes );
-    }
+      std::sort( coincidentNodes.begin(), coincidentNodes.end(), idLess );
+      list<const SMDS_MeshNode*> newGroup;
+      newGroup.push_back( n1 );
+      newGroup.insert( newGroup.end(), coincidentNodes.begin(), coincidentNodes.end() );
 
-    theSetOfNodes->erase(it1);
-    it1 = theSetOfNodes->begin();
+      theGroupsOfNodes->emplace_back( newGroup );
+    }
   }
 }
 
@@ -357,57 +374,45 @@ void SMESH_OctreeNode::FindCoincidentNodes ( TIDSortedNodeSet*
  * \param precision - Precision used
  */
 //======================================================================================
-void SMESH_OctreeNode::FindCoincidentNodes (const SMDS_MeshNode *       Node,
-                                            TIDSortedNodeSet*           SetOfNodes,
-                                            list<const SMDS_MeshNode*>* Result,
-                                            const double                precision)
+
+void SMESH_OctreeNode::findCoincidentNodes (const SMDS_MeshNode *              Node,
+                                            TIDSortedNodeSet*                  SetOfNodes,
+                                            std::vector<const SMDS_MeshNode*>* Result,
+                                            const double                       precision)
 {
-  gp_Pnt p1 (Node->X(), Node->Y(), Node->Z());
-  bool isInsideBool = isInside( p1.XYZ(), precision );
+  SMESH_NodeXYZ p1 = Node;
 
-  if (isInsideBool)
+  if ( isInside( p1, precision ))
   {
     // I'm only looking in the leaves, since all the nodes are stored there.
-    if (isLeaf())
+    if ( isLeaf() )
     {
-      TIDSortedNodeSet::iterator it = myNodes.begin();
       const double tol2 = precision * precision;
-      bool squareBool;
 
-      while (it != myNodes.end())
+      for ( size_t i = 0; i < myNodes.size(); ++i )
       {
-        const SMDS_MeshNode* n2 = *it;
-        squareBool = false;
-        // We're only looking at nodes with a superior Id.
-        // JFA: Why?
-        //if (Node->GetID() < n2->GetID())
-        if (Node->GetID() != n2->GetID()) // JFA: for bug 0020185
-        {
-          gp_Pnt p2 (n2->X(), n2->Y(), n2->Z());
-          // Distance optimized computation
-          squareBool = (p1.SquareDistance( p2 ) <= tol2);
+        if ( myNodes[ i ]->isMarked() ) // coincident node already found
+          continue;
 
-          // If n2 inside the SquareDistance, we add it in Result and remove it from SetOfNodes and myNodes
-          if (squareBool)
+        //if ( Node != myNodes[ i ]) // JFA: for bug 0020185
+        {
+          // If n2 inside the SquareDistance, we add it in Result
+          bool coincide = ( p1.SquareDistance( myNodes[ i ]) <= tol2 );
+          if ( coincide )
           {
-            Result->insert(Result->begin(), n2);
-            SetOfNodes->erase( n2 );
-            myNodes.erase( *it++ ); // it++ goes forward and returns it's previous position
+            Result->push_back ( myNodes[ i ]);
+            myNodes[ i ]->setIsMarked( true );
           }
         }
-        if ( !squareBool )
-          it++;
       }
-      if ( !Result->empty() )
-        myNodes.erase(Node); // JFA: for bug 0020185
     }
     else
     {
       // If I'm not a leaf, I'm going to see my children !
-      for (int i = 0; i < 8; i++)
+      for ( int i = 0; i < 8; i++ )
       {
-        SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[i]);
-        myChild->FindCoincidentNodes(Node, SetOfNodes, Result, precision);
+        SMESH_OctreeNode* myChild = static_cast<SMESH_OctreeNode*> (myChildren[i]);
+        myChild->findCoincidentNodes( Node, SetOfNodes, Result, precision );
       }
     }
   }
@@ -423,17 +428,18 @@ void SMESH_OctreeNode::UpdateByMoveNode( const SMDS_MeshNode* node, const gp_Pnt
 {
   if ( isLeaf() )
   {
-    TIDSortedNodeSet::iterator pNode = myNodes.find( node );
-    bool nodeInMe = ( pNode != myNodes.end() );
+    std::vector< const SMDS_MeshNode* >::iterator pNode =
+      std::find( myNodes.begin(), myNodes.end(), node );
 
+    bool  nodeInMe = ( pNode != myNodes.end() );
     bool pointInMe = isInside( toPnt.Coord(), 1e-10 );
 
     if ( pointInMe != nodeInMe )
     {
       if ( pointInMe )
-        myNodes.insert( node );
+        myNodes.push_back( node );
       else
-        myNodes.erase( node );
+        myNodes.erase( pNode );
     }
   }
   else if ( myChildren )
@@ -454,6 +460,7 @@ void SMESH_OctreeNode::UpdateByMoveNode( const SMDS_MeshNode* node, const gp_Pnt
  * \brief Return iterator over children
  */
 //================================================================================
+
 SMESH_OctreeNodeIteratorPtr SMESH_OctreeNode::GetChildrenIterator()
 {
   return SMESH_OctreeNodeIteratorPtr
@@ -466,9 +473,8 @@ SMESH_OctreeNodeIteratorPtr SMESH_OctreeNode::GetChildrenIterator()
  * \brief Return nodes iterator
  */
 //================================================================================
+
 SMDS_NodeIteratorPtr SMESH_OctreeNode::GetNodeIterator()
 {
-  return SMDS_NodeIteratorPtr
-    ( new SMDS_SetIterator< SMDS_pNode, TIDSortedNodeSet::const_iterator >
-      ( myNodes.begin(), myNodes.size() ? myNodes.end() : myNodes.begin()));
+  return boost::make_shared< SMDS_NodeVectorIterator >( myNodes.begin(), myNodes.end());
 }
index 1675f724bb397aed0240264b46134dd6382d3acc..ffb5e500d2a508f4036c5c71e36f417f9790aab2 100644 (file)
@@ -49,6 +49,7 @@ class SMESH_OctreeNode;
 typedef SMDS_Iterator<SMESH_OctreeNode*>              SMESH_OctreeNodeIterator;
 typedef boost::shared_ptr<SMESH_OctreeNodeIterator>   SMESH_OctreeNodeIteratorPtr;
 typedef std::set< const SMDS_MeshNode*, TIDCompare >  TIDSortedNodeSet;
+typedef std::list< std::list< const SMDS_MeshNode*> > TListOfNodeLists;
 
 class SMESHUtils_EXPORT SMESH_OctreeNode : public SMESH_Octree
 {
@@ -65,9 +66,9 @@ class SMESHUtils_EXPORT SMESH_OctreeNode : public SMESH_Octree
   virtual const bool isInside(const gp_XYZ& p, const double precision = 0.);
 
   // Return in Result a list of Nodes potentials to be near Node
-  void               NodesAround(const SMDS_MeshNode *            node,
-                                 std::list<const SMDS_MeshNode*>* result,
-                                 const double                     precision = 0.);
+  void               AllNodesAround(const SMDS_MeshNode *              node,
+                                    std::vector<const SMDS_MeshNode*>* result,
+                                    const double                       precision = 0.);
 
   // Return in dist2Nodes nodes mapped to their square distance from Node
   bool               NodesAround(const gp_XYZ&                           point,
@@ -81,21 +82,21 @@ class SMESHUtils_EXPORT SMESH_OctreeNode : public SMESH_Octree
 
   // Return in theGroupsOfNodes a list of group of nodes close to each other within theTolerance
   // Search for all the nodes in nodes
-  void               FindCoincidentNodes ( TIDSortedNodeSet*           nodes,
-                                           const double                theTolerance,
-                                           std::list< std::list< const SMDS_MeshNode*> >* theGroupsOfNodes);
+  void               FindCoincidentNodes ( TIDSortedNodeSet*  nodes,
+                                           const double       theTolerance,
+                                           TListOfNodeLists * theGroupsOfNodes);
 
   // Static method that return in theGroupsOfNodes a list of group of nodes close to each other within
   // theTolerance search for all the nodes in nodes
-  static void        FindCoincidentNodes ( TIDSortedNodeSet&                              nodes,
-                                           std::list< std::list< const SMDS_MeshNode*> >* theGroupsOfNodes,
-                                           const double theTolerance = 0.00001,
-                                           const int maxLevel = -1,
-                                           const int maxNbNodes = 5);
+  static void        FindCoincidentNodes ( TIDSortedNodeSet& nodes,
+                                           TListOfNodeLists* theGroupsOfNodes,
+                                           const double      theTolerance = 0.00001,
+                                           const int         maxLevel = -1,
+                                           const int         maxNbNodes = 5);
   /*!
    * \brief Update data according to node movement
    */
-  void                        UpdateByMoveNode( const SMDS_MeshNode* node, const gp_Pnt& toPnt );
+  void               UpdateByMoveNode( const SMDS_MeshNode* node, const gp_Pnt& toPnt );
   /*!
    * \brief Return iterator over children
    */
@@ -131,14 +132,14 @@ protected:
   // Construct an empty SMESH_OctreeNode used by SMESH_Octree::buildChildren()
   virtual SMESH_Octree* newChild() const;
 
-  // Return in result a list of nodes closed to Node and remove it from SetOfNodes
-  void                  FindCoincidentNodes( const SMDS_MeshNode *            Node,
-                                             TIDSortedNodeSet*                SetOfNodes,
-                                             std::list<const SMDS_MeshNode*>* Result,
-                                             const double                     precision);
+  // Return in result a list of nodes closed to Node
+  void                  findCoincidentNodes( const SMDS_MeshNode *              Node,
+                                             TIDSortedNodeSet*                  SetOfNodes,
+                                             std::vector<const SMDS_MeshNode*>* Result,
+                                             const double                       precision);
 
   // The set of nodes inside the box of the Octree (Empty if Octree is not a leaf)
-  TIDSortedNodeSet   myNodes;
+  std::vector< const SMDS_MeshNode* > myNodes;
 
 };
 
diff --git a/src/SMESHUtils/SMESH_Offset.cxx b/src/SMESHUtils/SMESH_Offset.cxx
new file mode 100644 (file)
index 0000000..efd648a
--- /dev/null
@@ -0,0 +1,2914 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File      : SMESH_Offset.cxx
+// Created   : Mon Dec 25 15:52:38 2017
+// Author    : Edward AGAPOV (eap)
+
+#include "SMESH_MeshAlgos.hxx"
+
+#include <SMDS_PolygonalFaceOfNodes.hxx>
+#include "SMDS_Mesh.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+
+#include <Bnd_B3d.hxx>
+#include <NCollection_Map.hxx>
+#include <gp_Lin.hxx>
+#include <gp_Pln.hxx>
+
+#include <boost/container/flat_set.hpp>
+#include <boost/dynamic_bitset.hpp>
+
+namespace
+{
+  const int theMaxNbFaces = 256; // max number of faces sharing a node
+
+  typedef NCollection_DataMap< Standard_Address, const SMDS_MeshNode* > TNNMap;
+  typedef NCollection_Map< SMESH_Link, SMESH_Link >                     TLinkMap;
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Intersected face side storing a node created at this intersection
+   *        and a intersected face
+   */
+  struct CutLink
+  {
+    bool                     myReverse;
+    const SMDS_MeshNode*     myNode[2]; // side nodes
+    mutable SMESH_NodeXYZ    myIntNode; // intersection node
+    const SMDS_MeshElement*  myFace;    // cutter face
+    int                      myIndex;   // index of a node on the same link
+
+    CutLink(const SMDS_MeshNode*    node1=0,
+            const SMDS_MeshNode*    node2=0,
+            const SMDS_MeshElement* face=0,
+            const int               index=0) { Set ( node1, node2, face, index ); }
+
+    void Set( const SMDS_MeshNode*    node1,
+              const SMDS_MeshNode*    node2,
+              const SMDS_MeshElement* face,
+              const int               index=0)
+    {
+      myNode[0] = node1; myNode[1] = node2; myFace = face; myIndex = index; myReverse = false;
+      if ( myNode[0] && ( myReverse = ( myNode[0]->GetID() > myNode[1]->GetID() )))
+        std::swap( myNode[0], myNode[1] );
+    }
+    const SMDS_MeshNode* IntNode() const { return myIntNode.Node(); }
+    const SMDS_MeshNode* Node1() const { return myNode[ myReverse ]; }
+    const SMDS_MeshNode* Node2() const { return myNode[ !myReverse ]; }
+
+    static Standard_Integer HashCode(const CutLink&         link,
+                                     const Standard_Integer upper)
+    {
+      Standard_Integer n = ( link.myNode[0]->GetID() +
+                             link.myNode[1]->GetID() +
+                             link.myIndex );
+      return ::HashCode( n, upper );
+    }
+    static Standard_Boolean IsEqual(const CutLink& link1, const CutLink& link2 )
+    {
+      return ( link1.myNode[0] == link2.myNode[0] &&
+               link1.myNode[1] == link2.myNode[1] &&
+               link1.myIndex == link2.myIndex );
+    }
+  };
+
+  typedef NCollection_Map< CutLink, CutLink > TCutLinkMap;
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Part of a divided face edge
+   */
+  struct EdgePart
+  {
+    const SMDS_MeshNode*    myNode1;
+    const SMDS_MeshNode*    myNode2;
+    int                     myIndex; // positive -> side index, negative -> State
+    const SMDS_MeshElement* myFace;
+
+    enum State { _INTERNAL = -1, _COPLANAR = -2 };
+
+    void Set( const SMDS_MeshNode*    Node1,
+              const SMDS_MeshNode*    Node2,
+              const SMDS_MeshElement* Face = 0,
+              int                     EdgeIndex = _INTERNAL )
+    { myNode1 = Node1; myNode2 = Node2; myIndex = EdgeIndex; myFace = Face; }
+
+    // bool HasSameNode( const EdgePart& other ) { return ( myNode1 == other.myNode1 ||
+    //                                                      myNode1 == other.myNode2 ||
+    //                                                      myNode2 == other.myNode1 ||
+    //                                                      myNode2 == other.myNode2 );
+    // }
+    bool IsInternal() const { return myIndex < 0; }
+    bool IsTwin( const EdgePart& e ) const { return myNode1 == e.myNode2 && myNode2 == e.myNode1; }
+    bool IsSame( const EdgePart& e ) const {
+      return (( myNode1 == e.myNode2 && myNode2 == e.myNode1 ) ||
+              ( myNode1 == e.myNode1 && myNode2 == e.myNode2 )); }
+    bool ReplaceCoplanar( const EdgePart& e );
+    operator SMESH_Link() const { return SMESH_Link( myNode1, myNode2 ); }
+    operator gp_Vec() const { return SMESH_NodeXYZ( myNode2 ) - SMESH_NodeXYZ( myNode1 ); }
+  };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Loop of EdgePart's forming a new face which is a part of CutFace
+   */
+  struct EdgeLoop : public SMDS_PolygonalFaceOfNodes
+  {
+    std::vector< const EdgePart* > myLinks;
+    bool                           myIsBndConnected; //!< is there a path to CutFace side edges
+    bool                           myHasPending;     //!< an edge encounters twice
+
+    EdgeLoop() : SMDS_PolygonalFaceOfNodes( std::vector<const SMDS_MeshNode *>() ) {}
+    void Clear() { myLinks.clear(); myIsBndConnected = false; myHasPending = false; }
+    bool SetConnected() { bool was = myIsBndConnected; myIsBndConnected = true; return !was; }
+    bool Contains( const SMDS_MeshNode* n ) const
+    {
+      for ( size_t i = 0; i < myLinks.size(); ++i )
+        if ( myLinks[i]->myNode1 == n ) return true;
+      return false;
+    }
+    virtual int NbNodes() const { return myLinks.size(); }
+    virtual SMDS_ElemIteratorPtr nodesIterator() const
+    {
+      return setNodes(), SMDS_PolygonalFaceOfNodes::nodesIterator();
+    }
+    virtual SMDS_NodeIteratorPtr nodeIterator() const
+    {
+      return setNodes(), SMDS_PolygonalFaceOfNodes::nodeIterator();
+    }
+    void setNodes() const //!< set nodes to SMDS_PolygonalFaceOfNodes
+    {
+      EdgeLoop* me = const_cast<EdgeLoop*>( this );
+      me->myNodes.resize( NbNodes() );
+      size_t iMin = 0;
+      for ( size_t i = 1; i < myNodes.size(); ++i ) {
+        if ( myLinks[ i ]->myNode1->GetID() < myLinks[ iMin ]->myNode1->GetID() )
+          iMin = i;
+      }
+      for ( size_t i = 0; i < myNodes.size(); ++i )
+        me->myNodes[ i ] = myLinks[ ( iMin + i ) % myNodes.size() ]->myNode1;
+    }
+  };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Set of EdgeLoop's constructed from a CutFace
+   */
+  struct EdgeLoopSet
+  {
+    std::vector< EdgeLoop >  myLoops;       //!< buffer of EdgeLoop's
+    size_t                   myNbLoops;     //!< number of constructed loops
+
+    const EdgePart*          myEdge0;       //!< & CutFace.myLinks[0]
+    size_t                   myNbUsedEdges; //!< nb of EdgePart's added to myLoops
+    boost::dynamic_bitset<>  myIsUsedEdge;  //!< is i-th EdgePart of CutFace is in any EdgeLoop
+    std::vector< EdgeLoop* > myLoopOfEdge;  //!< EdgeLoop of CutFace.myLinks[i]
+    std::vector< EdgePart* > myCandidates;  //!< EdgePart's starting at the same node
+
+    EdgeLoopSet(): myLoops(100) {}
+
+    void Init( const std::vector< EdgePart >& edges )
+    {
+      size_t nb = edges.size();
+      myEdge0 = & edges[0];
+      myNbLoops = 0;
+      myNbUsedEdges = 0;
+      myIsUsedEdge.reset();
+      myIsUsedEdge.resize( nb, false );
+      myLoopOfEdge.clear();
+      myLoopOfEdge.resize( nb, (EdgeLoop*) 0 );
+    }
+    EdgeLoop& AddNewLoop()
+    {
+      if ( ++myNbLoops >= myLoops.size() )
+        myLoops.resize( myNbLoops + 10 );
+      myLoops[ myNbLoops-1 ].Clear();
+      return myLoops[ myNbLoops-1 ];
+    }
+    bool AllEdgesUsed() const { return myNbUsedEdges == myLoopOfEdge.size(); }
+
+    bool AddEdge( EdgePart& edge )
+    {
+      size_t i = Index( edge );
+      if ( myIsUsedEdge[ i ])
+        return false;
+      myLoops[ myNbLoops-1 ].myLinks.push_back( &edge );
+      myLoopOfEdge[ i ] = & myLoops[ myNbLoops-1 ];
+      myIsUsedEdge[ i ] = true;
+      ++myNbUsedEdges;
+      return true;
+    }
+    void Erase( EdgeLoop* loop )
+    {
+      for ( size_t iE = 0; iE < loop->myLinks.size(); ++iE )
+        myLoopOfEdge[ Index( *loop->myLinks[ iE ] )] = 0;
+      loop->Clear();
+    }
+    size_t    Index( const EdgePart& edge ) const { return &edge - myEdge0; }
+    EdgeLoop* GetLoopOf( const EdgePart* edge ) { return myLoopOfEdge[ Index( *edge )]; }
+  };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Intersections of a face
+   */
+  struct CutFace
+  {
+    mutable std::vector< EdgePart > myLinks;
+    const SMDS_MeshElement*         myInitFace;
+
+    CutFace( const SMDS_MeshElement* face ): myInitFace( face ) {}
+    void AddEdge( const CutLink&          p1,
+                  const CutLink&          p2,
+                  const SMDS_MeshElement* cutter,
+                  const int               nbOnPlane,
+                  const int               iNotOnPlane = -1) const;
+    void AddPoint( const CutLink& p1, const CutLink& p2, double tol ) const;
+    bool ReplaceNodes( const TNNMap& theRm2KeepMap ) const;
+    bool IsCut() const;
+    int  NbInternalEdges() const;
+    void MakeLoops( EdgeLoopSet& loops, const gp_XYZ& theFaceNorm ) const;
+    bool RemoveInternalLoops( EdgeLoopSet& theLoops ) const;
+    void CutOffLoops( EdgeLoopSet&                 theLoops,
+                      const double                 theSign,
+                      const std::vector< gp_XYZ >& theNormals,
+                      std::vector< EdgePart >&     theCutOffLinks,
+                      TLinkMap&                    theCutOffCoplanarLinks) const;
+    void InitLinks() const;
+    bool IsCoplanar( const EdgePart* edge ) const;
+
+    static Standard_Integer HashCode(const CutFace& f, const Standard_Integer upper)
+    {
+      return ::HashCode( f.myInitFace->GetID(), upper );
+    }
+    static Standard_Boolean IsEqual(const CutFace& f1, const CutFace& f2 )
+    {
+      return f1.myInitFace == f2.myInitFace;
+    }
+    void Dump() const;
+
+  private:
+
+    EdgePart* getTwin( const EdgePart* edge ) const;
+  };
+
+  typedef NCollection_Map< CutFace, CutFace > TCutFaceMap;
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Intersection point of two edges of co-planar triangles
+   */
+  struct IntPoint2D
+  {
+    size_t        myEdgeInd[2]; //!< edge indices of triangles
+    double        myU      [2]; //!< parameter [0,1] on edges of triangles
+    SMESH_NodeXYZ myNode;       //!< intersection node
+    bool          myIsCollinear;//!< edges are collinear
+
+    IntPoint2D() : myIsCollinear( false ) {}
+
+    void InitLink( CutLink& link, int iFace, const std::vector< SMESH_NodeXYZ >& nodes ) const
+    {
+      link.Set( nodes[  myEdgeInd[ iFace ]                      ].Node(),
+                nodes[( myEdgeInd[ iFace ] + 1 ) % nodes.size() ].Node(),
+                link.myFace );
+      link.myIntNode = myNode;
+    }
+    const SMDS_MeshNode* Node() const { return myNode.Node(); }
+  };
+  struct IntPoint2DCompare
+  {
+    int myI;
+    IntPoint2DCompare( int iFace=0 ): myI( iFace ) {}
+    bool operator() ( const IntPoint2D* ip1, const IntPoint2D* ip2 ) const
+    {
+      return ip1->myU[ myI ] < ip2->myU[ myI ];
+    }
+    bool operator() ( const IntPoint2D& ip1, const IntPoint2D& ip2 ) const
+    {
+      return ip1.myU[ myI ] < ip2.myU[ myI ];
+    }
+  };
+  typedef boost::container::flat_set< IntPoint2D, IntPoint2DCompare >  TIntPointSet;
+  typedef boost::container::flat_set< IntPoint2D*, IntPoint2DCompare > TIntPointPtrSet;
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Face used to find translated position of the node
+   */
+  struct Face
+  {
+    const SMDS_MeshElement* myFace;
+    SMESH_TNodeXYZ          myNode1; //!< nodes neighboring another node of myFace
+    SMESH_TNodeXYZ          myNode2;
+    const gp_XYZ*           myNorm;
+    bool                    myNodeRightOrder;
+    void operator=(const SMDS_MeshElement* f) { myFace = f; }
+    const SMDS_MeshElement* operator->() { return myFace; }
+    void SetNodes( int i0, int i1 ) //!< set myNode's
+    {
+      myNode1.Set( myFace->GetNode( i1 ));
+      int i2 = ( i0 - 1 + myFace->NbCornerNodes() ) % myFace->NbCornerNodes();
+      if ( i2 == i1 )
+        i2 = ( i0 + 1 ) % myFace->NbCornerNodes();
+      myNode2.Set( myFace->GetNode( i2 ));
+      myNodeRightOrder = ( Abs( i2-i1 ) == 1 ) ?  i2 > i1  :  i2 < i1;
+    }
+    void SetOldNodes( const SMDS_Mesh& theSrcMesh )
+    {
+      myNode1.Set( theSrcMesh.FindNode( myNode1->GetID() ));
+      myNode2.Set( theSrcMesh.FindNode( myNode2->GetID() ));
+    }
+    bool SetNormal( const std::vector< gp_XYZ >& faceNormals )
+    {
+      myNorm = & faceNormals[ myFace->GetID() ];
+      return ( myNorm->SquareModulus() > gp::Resolution() * gp::Resolution() );
+    }
+    const gp_XYZ& Norm() const { return *myNorm; }
+  };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Offset plane used to find translated position of the node
+   */
+  struct OffsetPlane
+  {
+    gp_XYZ myNode;
+    Face*  myFace;
+    gp_Pln myPln;
+    gp_Lin myLines[2]; //!< line of intersection with neighbor OffsetPlane's
+    bool   myIsLineOk[2];
+    double myWeight[2];
+
+    void   Init( const gp_XYZ& node, Face& tria, double offset )
+    {
+      myNode = node;
+      myFace = & tria;
+      myPln  = gp_Pln( node + tria.Norm() * offset, tria.Norm() );
+      myIsLineOk[0] = myIsLineOk[1] = false;
+      myWeight[0] = myWeight[1] = 0;
+    }
+    bool   ComputeIntersectionLine( OffsetPlane& pln );
+    void   SetSkewLine( const gp_Lin& line );
+    gp_XYZ GetCommonPoint( int & nbOkPoints, double& sumWeight );
+    gp_XYZ ProjectNodeOnLine( int & nbOkPoints );
+    double Weight() const { return myWeight[0] + myWeight[1]; }
+  };
+
+  //================================================================================
+  /*!
+   * \brief Set the second line
+   */
+  //================================================================================
+
+  void OffsetPlane::SetSkewLine( const gp_Lin& line )
+  {
+    myLines[1] = line;
+    gp_XYZ n = myLines[0].Direction().XYZ() ^ myLines[1].Direction().XYZ();
+    if (( myIsLineOk[1] = n.SquareModulus() > gp::Resolution() ))
+      myPln = gp_Pln( myPln.Location(), n );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Project myNode on myLine[0]
+   */
+  //================================================================================
+
+  gp_XYZ OffsetPlane::ProjectNodeOnLine( int & nbOkPoints )
+  {
+    gp_XYZ p = gp::Origin().XYZ();
+    if ( myIsLineOk[0] )
+    {
+      gp_Vec l2n( myLines[0].Location(), myNode );
+      double u = l2n * myLines[0].Direction();
+      p = myLines[0].Location().XYZ() + u * myLines[0].Direction().XYZ();
+      ++nbOkPoints;
+    }
+    return p;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Computes intersection point of myLines
+   */
+  //================================================================================
+
+  gp_XYZ OffsetPlane::GetCommonPoint( int & nbOkPoints, double& sumWeight )
+  {
+    if ( !myIsLineOk[0] || !myIsLineOk[1] )
+    {
+      // sumWeight += myWeight[0];
+      // return ProjectNodeOnLine( nbOkPoints ) * myWeight[0];
+      return gp::Origin().XYZ();
+    }
+
+    gp_XYZ p;
+
+    gp_Vec lPerp0 = myLines[0].Direction().XYZ() ^ myPln.Axis().Direction().XYZ();
+    double  dot01 = lPerp0 * myLines[1].Direction().XYZ();
+    if ( Abs( dot01 ) > 0.05 )
+    {
+      gp_Vec l0l1 = myLines[1].Location().XYZ() - myLines[0].Location().XYZ();
+      double   u1 = - ( lPerp0 * l0l1 ) / dot01;
+      p = ( myLines[1].Location().XYZ() + myLines[1].Direction().XYZ() * u1 );
+    }
+    else
+    {
+      gp_Vec  lv0( myLines[0].Location(), myNode),  lv1(myLines[1].Location(), myNode );
+      double dot0( lv0 * myLines[0].Direction() ), dot1( lv1 * myLines[1].Direction() );
+      p  = 0.5 * ( myLines[0].Location().XYZ() + myLines[0].Direction().XYZ() * dot0 );
+      p += 0.5 * ( myLines[1].Location().XYZ() + myLines[1].Direction().XYZ() * dot1 );
+    }
+
+    sumWeight += Weight();
+    ++nbOkPoints;
+
+    return p * Weight();
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute line of intersection of 2 planes
+   */
+  //================================================================================
+
+  bool OffsetPlane::ComputeIntersectionLine( OffsetPlane& theNextPln )
+  {
+    const gp_XYZ& n1 = myFace->Norm();
+    const gp_XYZ& n2 = theNextPln.myFace->Norm();
+
+    gp_XYZ lineDir = n1 ^ n2;
+    gp_Pnt linePos;
+
+    double x = Abs( lineDir.X() );
+    double y = Abs( lineDir.Y() );
+    double z = Abs( lineDir.Z() );
+
+    int cooMax; // max coordinate
+    if (x > y) {
+      if (x > z) cooMax = 1;
+      else       cooMax = 3;
+    }
+    else {
+      if (y > z) cooMax = 2;
+      else       cooMax = 3;
+    }
+
+    bool ok = true;
+    if ( Abs( lineDir.Coord( cooMax )) < 0.05 )
+    {
+      // parallel planes - intersection is an offset of the common edge
+      linePos  = 0.5 * ( myPln.Location().XYZ() + theNextPln.myPln.Location().XYZ() );
+      lineDir  = myNode - myFace->myNode2;
+      ok       = false;
+      myWeight[0] = 0;
+    }
+    else
+    {
+      // the constants in the 2 plane equations
+      double d1 = - ( n1 * myPln.Location().XYZ() );
+      double d2 = - ( n2 * theNextPln.myPln.Location().XYZ() );
+
+      switch ( cooMax ) {
+      case 1:
+        linePos.SetX(  0 );
+        linePos.SetY(( d2*n1.Z() - d1*n2.Z()) / lineDir.X() );
+        linePos.SetZ(( d1*n2.Y() - d2*n1.Y()) / lineDir.X() );
+        break;
+      case 2:
+        linePos.SetX(( d1*n2.Z() - d2*n1.Z()) / lineDir.Y() );
+        linePos.SetY(  0 );
+        linePos.SetZ(( d2*n1.X() - d1*n2.X()) / lineDir.Y() );
+        break;
+      case 3:
+        linePos.SetX(( d2*n1.Y() - d1*n2.Y()) / lineDir.Z() );
+        linePos.SetY(( d1*n2.X() - d2*n1.X()) / lineDir.Z() );
+        linePos.SetZ(  0 );
+      }
+      myWeight[0] = lineDir.SquareModulus();
+      if ( n1 * n2 < 0 )
+        myWeight[0] = 2. - myWeight[0];
+    }
+    myLines   [ 0 ].SetDirection( lineDir );
+    myLines   [ 0 ].SetLocation ( linePos );
+    myIsLineOk[ 0 ] = ok;
+
+    theNextPln.myLines   [ 1 ] = myLines[ 0 ];
+    theNextPln.myIsLineOk[ 1 ] = ok;
+    theNextPln.myWeight  [ 1 ] = myWeight[ 0 ];
+
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return a translated position of a node
+   *  \param [in] new2OldNodes - new and old nodes
+   *  \param [in] faceNormals - normals to input faces
+   *  \param [in] theSrcMesh - initial mesh
+   *  \param [in] theNewPos - a computed normal
+   *  \return bool - true if theNewPos is computed
+   */
+  //================================================================================
+
+  bool getTranslatedPosition( const SMDS_MeshNode*         theNewNode,
+                              const double                 theOffset,
+                              const double                 theTol,
+                              const double                 theSign,
+                              const std::vector< gp_XYZ >& theFaceNormals,
+                              SMDS_Mesh&                   theSrcMesh,
+                              gp_XYZ&                      theNewPos)
+  {
+    bool useOneNormal = true;
+
+    // check if theNewNode needs an average position, i.e. theNewNode is convex
+    // SMDS_ElemIteratorPtr faceIt = theNewNode->GetInverseElementIterator();
+    // const SMDS_MeshElement*  f0 = faceIt->next();
+    // const gp_XYZ&         norm0 = theFaceNormals[ f0->GetID() ];
+    // const SMESH_NodeXYZ nodePos = theNewNode;
+    // while ( faceIt->more() )
+    // {
+    //   const SMDS_MeshElement* f = faceIt->next();
+    //   const int         nodeInd = f->GetNodeIndex( theNewNode );
+    //   SMESH_NodeXYZ    nodePos2 = f->GetWrapNode( nodeInd + 1 );
+    //   try {
+    //     const gp_XYZ      nnDir = ( nodePos2 - nodePos ).Normalized();
+    //   }
+    //   catch {
+    //     continue;
+    //   }
+    //   const double dot = norm0 * nnDir;
+    //   bool isConvex = 
+
+
+
+    // get faces surrounding theNewNode and sort them
+    Face faces[ theMaxNbFaces ];
+    SMDS_ElemIteratorPtr faceIt = theNewNode->GetInverseElementIterator();
+    faces[0] = faceIt->next();
+    while ( !faces[0].SetNormal( theFaceNormals ) && faceIt->more() )
+      faces[0] = faceIt->next();
+    int i0 = faces[0]->GetNodeIndex( theNewNode );
+    int i1 = ( i0 + 1 ) % faces[0]->NbCornerNodes();
+    faces[0].SetNodes( i0, i1 );
+    TIDSortedElemSet elemSet, avoidSet;
+    int iFace = 0;
+    const SMDS_MeshElement* f;
+    for ( ; faceIt->more() && iFace < theMaxNbFaces; faceIt->next() )
+    {
+      avoidSet.insert( faces[ iFace ].myFace );
+      f = SMESH_MeshAlgos::FindFaceInSet( theNewNode, faces[ iFace ].myNode2.Node(),
+                                          elemSet, avoidSet, &i0, &i1 );
+      if ( !f )
+      {
+        std::reverse( &faces[0], &faces[0] + iFace + 1 );
+        for ( int i = 0; i <= iFace; ++i )
+        {
+          std::swap( faces[i].myNode1, faces[i].myNode2 );
+          faces[i].myNodeRightOrder = !faces[i].myNodeRightOrder;
+        }
+        f = SMESH_MeshAlgos::FindFaceInSet( theNewNode, faces[ iFace ].myNode2.Node(),
+                                            elemSet, avoidSet, &i0, &i1 );
+        if ( !f )
+          break;
+      }
+      faces[ ++iFace ] = f;
+      faces[ iFace ].SetNodes( i0, i1 );
+      faces[ iFace ].SetNormal( theFaceNormals );
+    }
+    int nbFaces = iFace + 1;
+
+    theNewPos.SetCoord( 0, 0, 0 );
+    gp_XYZ oldXYZ = SMESH_NodeXYZ( theNewNode );
+
+    // check if all faces are co-planar
+    bool isPlanar = true;
+    const double tol = 1e-2;
+    for ( int i = 1; i < nbFaces &&  isPlanar;  ++i )
+      isPlanar = ( faces[i].Norm() - faces[i-1].Norm() ).SquareModulus() < tol*tol;
+
+    if ( isPlanar )
+    {
+      theNewPos = oldXYZ + faces[0].Norm() * theOffset;
+      return useOneNormal;
+    }
+
+    // prepare OffsetPlane's
+    OffsetPlane pln[ theMaxNbFaces ];
+    for ( int i = 0; i < nbFaces; ++i )
+    {
+      faces[i].SetOldNodes( theSrcMesh );
+      pln[i].Init( oldXYZ, faces[i], theOffset );
+    }
+    // intersect neighboring OffsetPlane's
+    int nbOkPoints = 0;
+    for ( int i = 1; i < nbFaces; ++i )
+      nbOkPoints += pln[ i-1 ].ComputeIntersectionLine( pln[ i ]);
+    nbOkPoints += pln[ nbFaces-1 ].ComputeIntersectionLine( pln[ 0 ]);
+
+    // move intersection lines to over parallel planes
+    if ( nbOkPoints > 1 )
+      for ( int i = 0; i < nbFaces; ++i )
+        if ( pln[i].myIsLineOk[0] && !pln[i].myIsLineOk[1] )
+          for ( int j = 1; j < nbFaces &&  !pln[i].myIsLineOk[1]; ++j )
+          {
+            int i2 = ( i + j ) % nbFaces;
+            if ( pln[i2].myIsLineOk[0] )
+              pln[i].SetSkewLine( pln[i2].myLines[0] );
+          }
+
+    // get the translated position
+    nbOkPoints = 0;
+    double sumWegith = 0;
+    const double minWeight = Sin( 30 * M_PI / 180. ) * Sin( 30 * M_PI / 180. );
+    for ( int i = 0; i < nbFaces; ++i )
+      if ( pln[ i ].Weight() > minWeight )
+        theNewPos += pln[ i ].GetCommonPoint( nbOkPoints, sumWegith );
+
+    if ( nbOkPoints == 0 )
+    {
+      // there is only one feature edge;
+      // find the theNewPos by projecting oldXYZ to any intersection line
+      for ( int i = 0; i < nbFaces; ++i )
+        theNewPos += pln[ i ].ProjectNodeOnLine( nbOkPoints );
+
+      if ( nbOkPoints == 0 )
+      {
+        theNewPos = oldXYZ + faces[0].Norm() * theOffset;
+        return useOneNormal;
+      }
+      sumWegith = nbOkPoints;
+    }
+    theNewPos /= sumWegith;
+
+
+    // mark theNewNode if it is concave
+    useOneNormal = false;
+    gp_Vec moveVec( oldXYZ, theNewPos );
+    for ( int i = 0, iPrev = nbFaces-1; i < nbFaces; iPrev = i++ )
+    {
+      gp_Vec nodeVec( oldXYZ, faces[ i ].myNode1 );
+      double u = ( moveVec * nodeVec ) / nodeVec.SquareMagnitude();
+      if ( u > 0.5 ) // param [0,1] on nodeVec
+      {
+        theNewNode->setIsMarked( true );
+      }
+      if ( !useOneNormal )
+      {
+        gp_XYZ inFaceVec = faces[ i ].Norm() ^ nodeVec.XYZ();
+        double       dot = inFaceVec * faces[ iPrev ].Norm();
+        if ( !faces[ i ].myNodeRightOrder )
+          dot *= -1;
+        if ( dot * theSign < 0 )
+        {
+          useOneNormal = true;
+          // gp_XYZ p1 = oldXYZ + faces[ i ].Norm()     * theOffset;
+          // gp_XYZ p2 = oldXYZ + faces[ iPrev ].Norm() * theOffset;
+          // useOneNormal = ( p1 - p2 ).SquareModulus() > theTol * theTol;
+        }
+      }
+      if ( useOneNormal && theNewNode->isMarked() )
+        break;
+    }
+
+    return useOneNormal;
+  }
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Intersect faces of a mesh
+   */
+  struct Intersector
+  {
+    SMDS_Mesh*                   myMesh;
+    double                       myTol, myEps;
+    const std::vector< gp_XYZ >& myNormals;
+    TCutLinkMap                  myCutLinks; //!< assure sharing of new nodes
+    TCutFaceMap                  myCutFaces;
+    TNNMap                       myRemove2KeepNodes; //!< node merge map
+
+    // data to intersect 2 faces
+    const SMDS_MeshElement*      myFace1;
+    const SMDS_MeshElement*      myFace2;
+    std::vector< SMESH_NodeXYZ > myNodes1, myNodes2;
+    std::vector< double >        myDist1,  myDist2;
+    int                          myInd1, myInd2; // coordinate indices on an axis-aligned plane
+    int                          myNbOnPlane1, myNbOnPlane2;
+    TIntPointSet                 myIntPointSet;
+
+    Intersector( SMDS_Mesh* mesh, double tol, const std::vector< gp_XYZ >& normals )
+      : myMesh( mesh ),
+        myTol( tol ),
+        myEps( 1e-100 ),
+        //myEps( Sqrt( std::numeric_limits<double>::min() )),
+        //myEps( gp::Resolution() ),
+        myNormals( normals )
+    {}
+    void Cut( const SMDS_MeshElement* face1,
+              const SMDS_MeshElement* face2,
+              const int               nbCommonNodes );
+    void MakeNewFaces( SMESH_MeshAlgos::TEPairVec& theNew2OldFaces,
+                       SMESH_MeshAlgos::TNPairVec& theNew2OldNodes,
+                       const double                theSign );
+
+  private:
+
+    bool isPlaneIntersected( const gp_XYZ&                       n2,
+                             const double                        d2,
+                             const std::vector< SMESH_NodeXYZ >& nodes1,
+                             std::vector< double > &             dist1,
+                             int &                               nbOnPlane1,
+                             int &                               iNotOnPlane1);
+    void computeIntervals( const std::vector< SMESH_NodeXYZ >& nodes,
+                           const std::vector< double >&        dist,
+                           const int                           nbOnPln,
+                           const int                           iMaxCoo,
+                           double *                            u,
+                           int*                                iE);
+    void cutCoplanar();
+    void addLink ( CutLink& link );
+    bool findLink( CutLink& link );
+    bool coincide( const gp_XYZ& p1, const gp_XYZ& p2, const double tol ) const
+    {
+      return ( p1 - p2 ).SquareModulus() < tol * tol;
+    }
+    gp_XY p2D( const gp_XYZ& p ) const { return gp_XY( p.Coord( myInd1 ), p.Coord( myInd2 )); }
+
+    void intersectLink( const std::vector< SMESH_NodeXYZ >& nodes1,
+                        const std::vector< double > &       dist1,
+                        const int                           iEdge1,
+                        const SMDS_MeshElement*             face2,
+                        CutLink&                            link1);
+    void findIntPointOnPlane( const std::vector< SMESH_NodeXYZ >& nodes,
+                              const std::vector< double > &       dist,
+                              CutLink&                            link );
+    void replaceIntNode( const SMDS_MeshNode* nToKeep, const SMDS_MeshNode* nToRemove );
+    void computeIntPoint( const double           u1,
+                          const double           u2,
+                          const int              iE1,
+                          const int              iE2,
+                          CutLink &              link,
+                          const SMDS_MeshNode* & node1,
+                          const SMDS_MeshNode* & node2);
+    void cutCollinearLink( const int                           iNotOnPlane1,
+                           const std::vector< SMESH_NodeXYZ >& nodes1,
+                           const SMDS_MeshElement*             face2,
+                           const CutLink&                      link1,
+                           const CutLink&                      link2);
+    void setPlaneIndices( const gp_XYZ& planeNorm );
+    bool intersectEdgeEdge( const gp_XY s1p0, const gp_XY s1p1,
+                            const gp_XY s2p0, const gp_XY s2p1,
+                            double &    t1,   double &    t2,
+                            bool &      isCollinear  );
+    bool intersectEdgeEdge( int iE1, int iE2, IntPoint2D& intPoint );
+    bool isPointInTriangle( const gp_XYZ& p, const std::vector< SMESH_NodeXYZ >& nodes );
+    void intersectNewEdges( const CutFace& theCFace );
+    const SMDS_MeshNode* createNode( const gp_XYZ& p );
+  };
+
+  //================================================================================
+  /*!
+   * \brief Return coordinate index with maximal abs value
+   */
+  //================================================================================
+
+  int MaxIndex( const gp_XYZ& x )
+  {
+    int iMaxCoo = ( Abs( x.X()) < Abs( x.Y() )) + 1;
+    if ( Abs( x.Coord( iMaxCoo )) < Abs( x.Z() ))
+      iMaxCoo = 3;
+    return iMaxCoo;
+  }
+  //================================================================================
+  /*!
+   * \brief Store a CutLink
+   */
+  //================================================================================
+
+  const SMDS_MeshNode* Intersector::createNode( const gp_XYZ& p )
+  {
+    const SMDS_MeshNode* n = myMesh->AddNode( p.X(), p.Y(), p.Z() );
+    n->setIsMarked( true ); // cut nodes are marked
+    return n;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Store a CutLink
+   */
+  //================================================================================
+
+  void Intersector::addLink( CutLink& link )
+  {
+    link.myIndex = 0;
+    const CutLink* added = & myCutLinks.Added( link );
+    while ( added->myIntNode.Node() != link.myIntNode.Node() )
+    {
+      if ( !added->myIntNode )
+      {
+        added->myIntNode = link.myIntNode;
+        break;
+      }
+      else
+      {
+        link.myIndex++;
+        added = & myCutLinks.Added( link );
+      }
+    }
+    link.myIndex = 0;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Find a CutLink with an intersection point coincident with that of a given link
+   */
+  //================================================================================
+
+  bool Intersector::findLink( CutLink& link )
+  {
+    link.myIndex = 0;
+    while ( myCutLinks.Contains( link ))
+    {
+      const CutLink* added = & myCutLinks.Added( link );
+      if ( !!added->myIntNode && coincide( added->myIntNode, link.myIntNode, myTol ))
+      {
+        link.myIntNode = added->myIntNode;
+        return true;
+      }
+      link.myIndex++;
+    }
+    return false;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if a triangle intersects the plane of another triangle
+   *  \param [in] nodes1 - nodes of triangle 1
+   *  \param [in] n2 - normal of triangle 2
+   *  \param [in] d2 - a constant of the plane equation 2
+   *  \param [out] dist1 - distance of nodes1 from the plane 2
+   *  \param [out] nbOnPlane - number of nodes1 lying on the plane 2
+   *  \return bool - true if the triangle intersects the plane 2
+   */
+  //================================================================================
+
+  bool Intersector::isPlaneIntersected( const gp_XYZ&                       n2,
+                                        const double                        d2,
+                                        const std::vector< SMESH_NodeXYZ >& nodes1,
+                                        std::vector< double > &             dist1,
+                                        int &                               nbOnPlane1,
+                                        int &                               iNotOnPlane1)
+  {
+    iNotOnPlane1 = nbOnPlane1 = 0;
+    dist1.resize( nodes1.size() );
+    for ( size_t i = 0; i < nodes1.size(); ++i )
+    {
+      dist1[i] = n2 * nodes1[i] + d2;
+      if ( Abs( dist1[i] ) < myTol )
+      {
+        ++nbOnPlane1;
+        dist1[i] = 0.;
+      }
+      else
+      {
+        iNotOnPlane1 = i;
+      }
+    }
+    if ( nbOnPlane1 == 0 )
+      for ( size_t i = 0; i < nodes1.size(); ++i )
+        if ( dist1[iNotOnPlane1] * dist1[i] < 0 )
+          return true;
+
+    return nbOnPlane1;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute parameters on the plane intersection line of intersections
+   *        of edges of a triangle
+   *  \param [in] nodes - triangle nodes
+   *  \param [in] dist - distance of triangle nodes from the plane of another triangle
+   *  \param [in] nbOnPln - number of nodes lying on the plane of another triangle
+   *  \param [in] iMaxCoo - index of coordinate of max component of the plane intersection line
+   *  \param [out] u - two computed parameters on the plane intersection line
+   *  \param [out] iE - indices of intersected edges
+   */
+  //================================================================================
+
+  void Intersector::computeIntervals( const std::vector< SMESH_NodeXYZ >& nodes,
+                                      const std::vector< double >&        dist,
+                                      const int                           nbOnPln, 
+                                      const int                           iMaxCoo,
+                                      double *                            u,
+                                      int*                                iE)
+  {
+    if ( nbOnPln == 3 )
+    {
+      u[0] = u[1] = 1e+100;
+      return;
+    }
+    int nb = 0;
+    int i1 = 2, i2 = 0;
+    if ( nbOnPln == 1 && ( dist[i1] == 0. || dist[i2] == 0 ))
+    {
+      int i = dist[i1] == 0 ? i1 : i2;
+      u [ 1 ] = nodes[ i ].Coord( iMaxCoo );
+      iE[ 1 ] = i;
+      i1 = i2++;
+    }
+    for ( ; i2 < 3 && nb < 2;  i1 = i2++ )
+    {
+      double dd = dist[i1] - dist[i2];
+      if ( dd != 0. && dist[i2] * dist[i1] <= 0. )
+      {
+        double x1 = nodes[i1].Coord( iMaxCoo );
+        double x2 = nodes[i2].Coord( iMaxCoo );
+        u [ nb ] = x1 + ( x2 - x1 ) * dist[i1] / dd;
+        iE[ nb ] = i1;
+        ++nb;
+      }
+    }
+    if ( u[0] > u[1] )
+    {
+      std::swap( u [0], u [1] );
+      std::swap( iE[0], iE[1] );
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Try to find an intersection node on a link collinear with the plane intersection line
+   */
+  //================================================================================
+
+  void Intersector::findIntPointOnPlane( const std::vector< SMESH_NodeXYZ >& nodes,
+                                         const std::vector< double > &       dist,
+                                         CutLink&                            link )
+  {
+    int i1 = ( dist[0] == 0 ? 0 : 1 ), i2 = ( dist[2] == 0 ? 2 : 1 );
+    CutLink link2 = link;
+    link2.Set( nodes[i1].Node(), nodes[i2].Node(), 0 );
+    if ( findLink( link2 ))
+      link.myIntNode = link2.myIntNode;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute intersection point of a link1 with a face2
+   */
+  //================================================================================
+
+  void Intersector::intersectLink( const std::vector< SMESH_NodeXYZ >& nodes1,
+                                   const std::vector< double > &       dist1,
+                                   const int                           iEdge1,
+                                   const SMDS_MeshElement*             face2,
+                                   CutLink&                            link1)
+  {
+    const int iEdge2 = ( iEdge1 + 1 ) % nodes1.size();
+    const SMESH_NodeXYZ& p1 = nodes1[ iEdge1 ];
+    const SMESH_NodeXYZ& p2 = nodes1[ iEdge2 ];
+
+    link1.Set( p1.Node(), p2.Node(), face2 );
+    const CutLink* link = & myCutLinks.Added( link1 );
+    if ( !link->IntNode() )
+    {
+      if      ( dist1[ iEdge1 ] == 0. ) link1.myIntNode = p1;
+      else if ( dist1[ iEdge2 ] == 0. ) link1.myIntNode = p2;
+      else
+      {
+        gp_XYZ p = p1 + ( p2 - p1 ) * dist1[ iEdge1 ] / ( dist1[ iEdge1 ] - dist1[ iEdge2 ]);
+        (gp_XYZ&)link1.myIntNode = p;
+      }
+    }
+    else
+    {
+      gp_XYZ p = p1 + ( p2 - p1 ) * dist1[ iEdge1 ] / ( dist1[ iEdge1 ] - dist1[ iEdge2 ]);
+      while ( link->IntNode() )
+      {
+        if ( coincide( p, link->myIntNode, myTol ))
+        {
+          link1.myIntNode = link->myIntNode;
+          break;
+        }
+        link1.myIndex++;
+        link = & myCutLinks.Added( link1 );
+      }
+      if ( !link1.IntNode() )
+      {
+        if      ( dist1[ iEdge1 ] == 0. ) link1.myIntNode = p1;
+        else if ( dist1[ iEdge2 ] == 0. ) link1.myIntNode = p2;
+        else                     (gp_XYZ&)link1.myIntNode = p;
+      }
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Store node replacement in myCutFaces
+   */
+  //================================================================================
+
+  void Intersector::replaceIntNode( const SMDS_MeshNode* nToKeep,
+                                    const SMDS_MeshNode* nToRemove )
+  {
+    if ( nToKeep == nToRemove )
+      return;
+    if ( nToRemove->GetID() < nToKeep->GetID() ) // keep node with lower ID
+      myRemove2KeepNodes.Bind((void*) nToKeep, nToRemove );
+    else
+      myRemove2KeepNodes.Bind((void*) nToRemove, nToKeep );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute intersection point on a link of either of faces by choosing
+   *        a link whose parameter on the intersection line in maximal
+   *  \param [in] u1 - parameter on the intersection line of link iE1 of myFace1
+   *  \param [in] u2 - parameter on the intersection line of link iE2 of myFace2
+   *  \param [in] iE1 - index of a link myFace1
+   *  \param [in] iE2 - index of a link myFace2
+   *  \param [out] link - CutLink storing the intersection point
+   *  \param [out] node1 - a node of the 2nd link if two links intersect
+   *  \param [out] node2 - a node of the 2nd link if two links intersect
+   */
+  //================================================================================
+
+  void Intersector::computeIntPoint( const double           u1,
+                                     const double           u2,
+                                     const int              iE1,
+                                     const int              iE2,
+                                     CutLink &              link,
+                                     const SMDS_MeshNode* & node1,
+                                     const SMDS_MeshNode* & node2)
+  {
+    if      ( u1 > u2 + myTol )
+    {
+      intersectLink( myNodes1, myDist1, iE1, myFace2, link );
+      node1 = node2 = 0;
+      if ( myNbOnPlane2 == 2 )
+        findIntPointOnPlane( myNodes2, myDist2, link );
+    }
+    else if ( u2 > u1 + myTol )
+    {
+      intersectLink( myNodes2, myDist2, iE2, myFace1, link );
+      node1 = node2 = 0;
+      if ( myNbOnPlane1 == 2 )
+        findIntPointOnPlane( myNodes1, myDist1, link );
+    }
+    else // edges of two faces intersect the line at the same point
+    {
+      CutLink link2;
+      intersectLink( myNodes1, myDist1, iE1, myFace2, link );
+      intersectLink( myNodes2, myDist2, iE2, myFace1, link2 );
+      node1 = link2.Node1();
+      node2 = link2.Node2();
+
+      if      ( !link.IntNode() && link2.IntNode() )
+        link.myIntNode = link2.myIntNode;
+
+      else if ( !link.IntNode() && !link2.IntNode() )
+        (gp_XYZ&)link.myIntNode = 0.5 * ( link.myIntNode + link2.myIntNode );
+
+      else if ( link.IntNode() && link2.IntNode() )
+        replaceIntNode( link.IntNode(), link2.IntNode() );
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Add intersections to a link collinear with the intersection line
+   */
+  //================================================================================
+
+  void Intersector::cutCollinearLink( const int                           iNotOnPlane1,
+                                      const std::vector< SMESH_NodeXYZ >& nodes1,
+                                      const SMDS_MeshElement*             face2,
+                                      const CutLink&                      link1,
+                                      const CutLink&                      link2)
+
+  {
+    int iN1 = ( iNotOnPlane1 + 1 ) % 3;
+    int iN2 = ( iNotOnPlane1 + 2 ) % 3;
+    CutLink link( nodes1[ iN1 ].Node(), nodes1[ iN2 ].Node(), face2 );
+    if ( link1.myFace != face2 )
+    {
+      link.myIntNode = link1.myIntNode;
+      addLink( link );
+    }
+    if ( link2.myFace != face2 )
+    {
+      link.myIntNode = link2.myIntNode;
+      addLink( link );
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Choose indices on an axis-aligned plane
+   */
+  //================================================================================
+
+  void Intersector::setPlaneIndices( const gp_XYZ& planeNorm )
+  {
+    switch ( MaxIndex( planeNorm )) {
+    case 1: myInd1 = 2; myInd2 = 3; break;
+    case 2: myInd1 = 3; myInd2 = 1; break;
+    case 3: myInd1 = 1; myInd2 = 2; break;
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Intersect two faces
+   */
+  //================================================================================
+
+  void Intersector::Cut( const SMDS_MeshElement* face1,
+                         const SMDS_MeshElement* face2,
+                         const int               nbCommonNodes)
+  {
+    myFace1 = face1;
+    myFace2 = face2;
+    myNodes1.assign( face1->begin_nodes(), face1->end_nodes() );
+    myNodes2.assign( face2->begin_nodes(), face2->end_nodes() );
+
+    const gp_XYZ& n1 = myNormals[ face1->GetID() ];
+    const gp_XYZ& n2 = myNormals[ face2->GetID() ];
+
+    // check if triangles intersect
+    int iNotOnPlane1, iNotOnPlane2;
+    const double d2 = -( n2 * myNodes2[0]);
+    if ( !isPlaneIntersected( n2, d2, myNodes1, myDist1, myNbOnPlane1, iNotOnPlane1 ))
+      return;
+    const double d1 = -( n1 * myNodes1[0]);
+    if ( !isPlaneIntersected( n1, d1, myNodes2, myDist2, myNbOnPlane2, iNotOnPlane2 ))
+      return;
+
+    if ( myNbOnPlane1 == 3 || myNbOnPlane2 == 3 )// triangles are co-planar
+    {
+      setPlaneIndices( myNbOnPlane1 == 3 ? n2 : n1 ); // choose indices on an axis-aligned plane
+      cutCoplanar();
+    }
+    else if ( nbCommonNodes < 2 ) // triangle planes intersect
+    {
+      gp_XYZ lineDir = n1 ^ n2; // intersection line
+
+      // check if intervals of intersections of triangles with lineDir overlap
+
+      double u1[2], u2 [2]; // parameters on lineDir of edge intersection points { minU, maxU }
+      int   iE1[2], iE2[2]; // indices of edges
+      int iMaxCoo = MaxIndex( lineDir );
+      computeIntervals( myNodes1, myDist1, myNbOnPlane1, iMaxCoo, u1, iE1 );
+      computeIntervals( myNodes2, myDist2, myNbOnPlane2, iMaxCoo, u2, iE2 );
+      if ( u1[1] < u2[0] - myTol || u2[1] < u1[0] - myTol )
+        return; // intervals do not overlap
+
+      // make intersection nodes
+
+      const SMDS_MeshNode *l1n1, *l1n2, *l2n1, *l2n2;
+      CutLink link1; // intersection with smaller u on lineDir
+      computeIntPoint( u1[0], u2[0], iE1[0], iE2[0], link1, l1n1, l1n2 );
+      CutLink link2; // intersection with larger u on lineDir
+      computeIntPoint( -u1[1], -u2[1], iE1[1], iE2[1], link2, l2n1, l2n2 );
+
+      const CutFace& cf1 = myCutFaces.Added( CutFace( face1 ));
+      const CutFace& cf2 = myCutFaces.Added( CutFace( face2 ));
+
+      if ( coincide( link1.myIntNode, link2.myIntNode, myTol ))
+      {
+        // intersection is a point
+        if ( link1.IntNode() && link2.IntNode() )
+          replaceIntNode( link1.IntNode(), link2.IntNode() );
+
+        CutLink* link = link2.IntNode() ? &link2 : &link1;
+        if ( !link->IntNode() )
+        {
+          gp_XYZ p = 0.5 * ( link1.myIntNode + link2.myIntNode );
+          link->myIntNode.Set( createNode( p ));
+        }
+        if ( !link1.IntNode() ) link1.myIntNode = link2.myIntNode;
+        if ( !link2.IntNode() ) link2.myIntNode = link1.myIntNode;
+
+        cf1.AddPoint( link1, link2, myTol );
+        cf2.AddPoint( link1, link2, myTol );
+      }
+      else
+      {
+        // intersection is a line segment
+        if ( !link1.IntNode() )
+          link1.myIntNode.Set( createNode( link1.myIntNode ));
+        if ( !link2.IntNode() )
+          link2.myIntNode.Set( createNode( link2.myIntNode ));
+
+        cf1.AddEdge( link1, link2, face2, myNbOnPlane1, iNotOnPlane1 );
+        if ( l1n1 ) link1.Set( l1n1, l1n2, face2 );
+        if ( l2n1 ) link2.Set( l2n1, l2n2, face2 );
+        cf2.AddEdge( link1, link2, face1, myNbOnPlane2, iNotOnPlane2 );
+
+        // add intersections to a link collinear with the intersection line
+        if ( myNbOnPlane1 == 2 && ( link1.myFace != face2 || link2.myFace != face2 ))
+          cutCollinearLink( iNotOnPlane1, myNodes1, face2, link1, link2 );
+
+        if ( myNbOnPlane2 == 2 && ( link1.myFace != face1 || link2.myFace != face1 ))
+          cutCollinearLink( iNotOnPlane2, myNodes2, face1, link1, link2 );
+      }
+
+      addLink( link1 );
+      addLink( link2 );
+
+    } // non co-planar case
+
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Intersect two 2D line segments
+   */
+  //================================================================================
+
+  bool Intersector::intersectEdgeEdge( const gp_XY s1p0, const gp_XY s1p1,
+                                       const gp_XY s2p0, const gp_XY s2p1,
+                                       double &    t1,   double &    t2,
+                                       bool &      isCollinear )
+  {
+    gp_XY u = s1p1 - s1p0;
+    gp_XY v = s2p1 - s2p0;
+    gp_XY w = s1p0 - s2p0;
+    double perpDotUV = u * gp_XY( -v.Y(), v.X() );
+    double perpDotVW = v * gp_XY( -w.Y(), w.X() );
+    double perpDotUW = u * gp_XY( -w.Y(), w.X() );
+    double        u2 = u.SquareModulus();
+    double        v2 = v.SquareModulus();
+    if ( u2 < myEps * myEps || v2 < myEps * myEps )
+      return false;
+    if ( perpDotUV * perpDotUV / u2 / v2 < 1e-6 ) // cos ^ 2
+    {
+      if ( !isCollinear )
+        return false; // no need in collinear solution
+      if ( perpDotUW * perpDotUW / u2 > myTol * myTol )
+        return false; // parallel
+
+      // collinear
+      gp_XY w2 = s1p1 - s2p0;
+      if ( Abs( v.X()) + Abs( u.X()) > Abs( v.Y()) + Abs( u.Y())) {
+        t1 = w.X() / v.X();  // params on segment 2
+        t2 = w2.X() / v.X();
+      }
+      else {
+        t1 = w.Y() / v.Y();
+        t2 = w2.Y() / v.Y();
+      }
+      if ( Max( t1,t2 ) <= 0 || Min( t1,t2 ) >= 1 )
+        return false; // no overlap
+      return true;
+    }
+    isCollinear = false;
+
+    t1 = perpDotVW / perpDotUV; // param on segment 1
+    if ( t1 < 0. || t1 > 1. )
+      return false; // intersection not within the segment
+
+    t2 = perpDotUW / perpDotUV; // param on segment 2
+    if ( t2 < 0. || t2 > 1. )
+      return false; // intersection not within the segment
+
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Intersect two edges of co-planar triangles
+   *  \param [inout] iE1 - edge index of triangle 1
+   *  \param [inout] iE2 - edge index of triangle 2
+   *  \param [inout] intPoints - intersection points
+   *  \param [inout] nbIntPoints - nb of found intersection points
+   */
+  //================================================================================
+
+  bool Intersector::intersectEdgeEdge( int iE1, int iE2, IntPoint2D& intPoint )
+  {
+    int i01 = iE1, i11 = ( iE1 + 1 ) % 3;
+    int i02 = iE2, i12 = ( iE2 + 1 ) % 3;
+    if (( !intPoint.myIsCollinear ) &&
+        ( myNodes1[ i01 ] == myNodes2[ i02 ] ||
+          myNodes1[ i01 ] == myNodes2[ i12 ] ||
+          myNodes1[ i11 ] == myNodes2[ i02 ] ||
+          myNodes1[ i11 ] == myNodes2[ i12 ] ))
+      return false;
+
+    // segment 1
+    gp_XY s1p0 = p2D( myNodes1[ i01 ]);
+    gp_XY s1p1 = p2D( myNodes1[ i11 ]);
+
+    // segment 2
+    gp_XY s2p0 = p2D( myNodes2[ i02 ]);
+    gp_XY s2p1 = p2D( myNodes2[ i12 ]);
+
+    double t1, t2;
+    if ( !intersectEdgeEdge( s1p0,s1p1, s2p0,s2p1, t1, t2, intPoint.myIsCollinear ))
+      return false;
+
+    intPoint.myEdgeInd[0] = iE1;
+    intPoint.myEdgeInd[1] = iE2;
+    intPoint.myU[0] = t1;
+    intPoint.myU[1] = t2;
+    (gp_XYZ&)intPoint.myNode = myNodes1[i01] * ( 1 - t1 ) + myNodes1[i11] * t1;
+
+    if ( intPoint.myIsCollinear )
+      return true;
+
+    // try to find existing node at intPoint.myNode
+
+    if ( myNodes1[ i01 ] == myNodes2[ i02 ] ||
+         myNodes1[ i01 ] == myNodes2[ i12 ] ||
+         myNodes1[ i11 ] == myNodes2[ i02 ] ||
+         myNodes1[ i11 ] == myNodes2[ i12 ] )
+      return false;
+
+    const double coincTol = myTol * 1e-3;
+
+    CutLink link1( myNodes1[i01].Node(), myNodes1[i11].Node(), myFace2 );
+    CutLink link2( myNodes2[i02].Node(), myNodes2[i12].Node(), myFace1 );
+
+    SMESH_NodeXYZ& n1 = myNodes1[ t1 < 0.5 ? i01 : i11 ];
+    bool same1 = coincide( n1, intPoint.myNode, coincTol );
+    if ( same1 )
+    {
+      link2.myIntNode = intPoint.myNode = n1;
+      addLink( link2 );
+    }
+    SMESH_NodeXYZ& n2 = myNodes2[ t2 < 0.5 ? i02 : i12 ];
+    bool same2 = coincide( n2, intPoint.myNode, coincTol );
+    if ( same2 )
+    {
+      link1.myIntNode = intPoint.myNode = n2;
+      addLink( link1 );
+      if ( same1 )
+      {
+        replaceIntNode( n1.Node(), n2.Node() );
+        return false;
+      }
+      return true;
+    }
+    if ( same1 )
+      return true;
+
+    link1.myIntNode = intPoint.myNode;
+    if ( findLink( link1 ))
+    {
+      intPoint.myNode = link2.myIntNode = link1.myIntNode;
+      addLink( link2 );
+      return true;
+    }
+
+    link2.myIntNode = intPoint.myNode;
+    if ( findLink( link2 ))
+    {
+      intPoint.myNode = link1.myIntNode = link2.myIntNode;
+      addLink( link1 );
+      return true;
+    }
+
+    for ( int is2nd = 0; is2nd < 2; ++is2nd )
+    {
+      const SMDS_MeshElement* f = is2nd ? myFace1 : myFace2;
+      if ( !f ) continue;
+      const CutFace& cf = myCutFaces.Added( CutFace( is2nd ? myFace2 : myFace1 ));
+      for ( size_t i = 0; i < cf.myLinks.size(); ++i )
+        if ( cf.myLinks[i].myFace == f &&
+             //cf.myLinks[i].myIndex != EdgePart::_COPLANAR &&
+             coincide( intPoint.myNode, SMESH_NodeXYZ( cf.myLinks[i].myNode1 ), coincTol ))
+        {
+          intPoint.myNode.Set( cf.myLinks[i].myNode1 );
+          return true;
+        }
+    }
+
+    // make a new node
+
+    intPoint.myNode._node = createNode( intPoint.myNode );
+    link1.myIntNode = link2.myIntNode = intPoint.myNode;
+    addLink( link1 );
+    addLink( link2 );
+
+    return true;
+  }
+
+
+  //================================================================================
+  /*!
+   * \brief Check if a point is contained in a triangle
+   */
+  //================================================================================
+
+  bool Intersector::isPointInTriangle( const gp_XYZ& p, const std::vector< SMESH_NodeXYZ >& nodes )
+  {
+    double bc1, bc2;
+    SMESH_MeshAlgos::GetBarycentricCoords( p2D( p ),
+                                           p2D( nodes[0] ), p2D( nodes[1] ), p2D( nodes[2] ),
+                                           bc1, bc2 );
+    return ( 0. < bc1 && 0. < bc2 && bc1 + bc2 < 1. );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Intersect two co-planar faces
+   */
+  //================================================================================
+
+  void Intersector::cutCoplanar()
+  {
+    // find intersections of edges
+
+    IntPoint2D intPoints[ 6 ];
+    int      nbIntPoints = 0;
+    for ( int iE1 = 0; iE1 < 3; ++iE1 )
+    {
+      int maxNbIntPoints = nbIntPoints + 2;
+      for ( int iE2 = 0; iE2 < 3 &&  nbIntPoints < maxNbIntPoints; ++iE2 )
+        nbIntPoints += intersectEdgeEdge( iE1, iE2, intPoints[ nbIntPoints ]);
+    }
+    const int minNbOnPlane = Min( myNbOnPlane1, myNbOnPlane2 );
+
+    if ( nbIntPoints == 0 ) // no intersections of edges
+    {
+      bool is1in2;
+      if      ( isPointInTriangle( myNodes1[0], myNodes2 )) // face2 includes face1
+        is1in2 = true;
+      else if ( isPointInTriangle( myNodes2[0], myNodes1 )) // face1 includes face2
+        is1in2 = false;
+      else
+        return;
+
+      // add edges of an inner triangle to an outer one
+
+      const std::vector< SMESH_NodeXYZ >& nodesIn = is1in2 ? myNodes1 : myNodes2;
+      const SMDS_MeshElement*             faceOut = is1in2 ? myFace2  : myFace1;
+      const SMDS_MeshElement*              faceIn = is1in2 ? myFace1  : myFace2;
+
+      const CutFace& outFace = myCutFaces.Added( CutFace( faceOut ));
+      CutLink link1( nodesIn.back().Node(), nodesIn.back().Node(), faceOut );
+      CutLink link2( nodesIn.back().Node(), nodesIn.back().Node(), faceOut );
+
+      link1.myIntNode = nodesIn.back();
+      for ( size_t i = 0; i < nodesIn.size(); ++i )
+      {
+        link2.myIntNode = nodesIn[ i ];
+        outFace.AddEdge( link1, link2, faceIn, minNbOnPlane );
+        link1.myIntNode = link2.myIntNode;
+      }
+    }
+    else
+    {
+      // add parts of edges to a triangle including them
+
+      CutLink link1, link2;
+      IntPoint2D ip0, ip1;
+      ip0.myU[0] = ip0.myU[1] = 0.;
+      ip1.myU[0] = ip1.myU[1] = 1.;
+      ip0.myEdgeInd[0] = ip0.myEdgeInd[1] = ip1.myEdgeInd[0] = ip1.myEdgeInd[1] = 0;
+
+      for ( int isFromFace1 = 0; isFromFace1 < 2; ++isFromFace1 )
+      {
+        const SMDS_MeshElement*                faceTo = isFromFace1 ? myFace2  : myFace1;
+        const SMDS_MeshElement*              faceFrom = isFromFace1 ? myFace1  : myFace2;
+        const std::vector< SMESH_NodeXYZ >&   nodesTo = isFromFace1 ? myNodes2 : myNodes1;
+        const std::vector< SMESH_NodeXYZ >& nodesFrom = isFromFace1 ? myNodes1 : myNodes2;
+        const int                                 iTo = isFromFace1 ? 1 : 0;
+        const int                               iFrom = isFromFace1 ? 0 : 1;
+        //const int                       nbOnPlaneFrom = isFromFace1 ? myNbOnPlane1 : myNbOnPlane2;
+
+        const CutFace* cutFaceTo   = & myCutFaces.Added( CutFace( faceTo ));
+        // const CutFace* cutFaceFrom = 0;
+        // if ( nbOnPlaneFrom > minNbOnPlane )
+        //   cutFaceFrom = & myCutFaces.Added( CutFace( faceTo ));
+
+        link1.myFace = link2.myFace = faceTo;
+
+        IntPoint2DCompare ipCompare( iFrom );
+        TIntPointPtrSet pointsOnEdge( ipCompare ); // IntPoint2D sorted by parameter on edge
+
+        for ( size_t iE = 0; iE < nodesFrom.size(); ++iE )
+        {
+          // get parts of an edge iE
+
+          ip0.myEdgeInd[ iTo ] = iE;
+          ip1.myEdgeInd[ iTo ] = ( iE + 1 ) % nodesFrom.size();
+          ip0.myNode = nodesFrom[ ip0.myEdgeInd[ iTo ]];
+          ip1.myNode = nodesFrom[ ip1.myEdgeInd[ iTo ]];
+
+          pointsOnEdge.clear();
+
+          for ( int iP = 0; iP < nbIntPoints; ++iP )
+            if ( intPoints[ iP ].myEdgeInd[ iFrom ] == iE )
+              pointsOnEdge.insert( & intPoints[ iP ] );
+
+          pointsOnEdge.insert( pointsOnEdge.begin(), & ip0 );
+          pointsOnEdge.insert( pointsOnEdge.end(),   & ip1 );
+
+          // add edge parts to faceTo
+
+          TIntPointPtrSet::iterator ipIt = pointsOnEdge.begin() + 1;
+          for ( ; ipIt != pointsOnEdge.end(); ++ipIt )
+          {
+            const IntPoint2D* p1 = *(ipIt-1);
+            const IntPoint2D* p2 = *ipIt;
+            gp_XYZ middle = 0.5 * ( p1->myNode + p2->myNode );
+            if ( isPointInTriangle( middle, nodesTo ))
+            {
+              p1->InitLink( link1, iTo, ( p1 != & ip0 ) ? nodesTo : nodesFrom );
+              p2->InitLink( link2, iTo, ( p2 != & ip1 ) ? nodesTo : nodesFrom );
+              cutFaceTo->AddEdge( link1, link2, faceFrom, minNbOnPlane );
+
+              // if ( cutFaceFrom )
+              // {
+              //   p1->InitLink( link1, iFrom, nodesFrom );
+              //   p2->InitLink( link2, iFrom, nodesFrom );
+              //   cutFaceTo->AddEdge( link1, link2, faceTo, minNbOnPlane );
+              // }
+            }
+          }
+        }
+      }
+    }
+    return;
+
+  } // Intersector::cutCoplanar()
+
+  //================================================================================
+  /*!
+   * \brief Intersect edges added to myCutFaces
+   */
+  //================================================================================
+
+  void Intersector::intersectNewEdges( const CutFace& cf )
+  {
+    IntPoint2D intPoint;
+
+    if ( cf.NbInternalEdges() < 2 )
+      return;
+
+    const gp_XYZ& faceNorm = myNormals[ cf.myInitFace->GetID() ];
+    setPlaneIndices( faceNorm ); // choose indices on an axis-aligned plane
+
+    size_t limit = cf.myLinks.size() * cf.myLinks.size() * 2;
+
+    for ( size_t i1 = 3; i1 < cf.myLinks.size(); ++i1 )
+    {
+      if ( !cf.myLinks[i1].IsInternal() )
+        continue;
+
+      myIntPointSet.clear();
+      for ( size_t i2 = i1 + 2; i2 < cf.myLinks.size(); ++i2 )
+      {
+        if ( !cf.myLinks[i2].IsInternal() )
+          continue;
+
+        // prepare to intersection
+        myFace1     = cf.myLinks[i1].myFace;
+        myNodes1[0] = cf.myLinks[i1].myNode1;
+        myNodes1[1] = cf.myLinks[i1].myNode2;
+        myFace2     = cf.myLinks[i2].myFace;
+        myNodes2[0] = cf.myLinks[i2].myNode1;
+        myNodes2[1] = cf.myLinks[i2].myNode2;
+
+        // intersect
+        intPoint.myIsCollinear = true; // to find collinear solutions
+        if ( intersectEdgeEdge( 0, 0, intPoint ))
+        {
+          if ( cf.myLinks[i1].IsSame( cf.myLinks[i2] )) // remove i2
+          {
+            cf.myLinks[i1].ReplaceCoplanar( cf.myLinks[i2] );
+            cf.myLinks.erase( cf.myLinks.begin() + i2, cf.myLinks.begin() + i2 + 2 );
+            --i2;
+            continue;
+          }
+          if ( !intPoint.myIsCollinear )
+          {
+            intPoint.myEdgeInd[1] = i2;
+            myIntPointSet.insert( intPoint );
+          }
+          else // if ( intPoint.myIsCollinear ) // overlapping edges
+          {
+            myIntPointSet.clear(); // to recompute
+
+            if ( intPoint.myU[0] > intPoint.myU[1] ) // orient in same direction
+            {
+              std::swap( intPoint.myU[0], intPoint.myU[1] );
+              std::swap( myNodes1[0], myNodes1[1] );
+            }
+            // replace _COPLANAR by _INTERNAL
+            cf.myLinks[i1].ReplaceCoplanar( cf.myLinks[i1+1] );
+            cf.myLinks[i2].ReplaceCoplanar( cf.myLinks[i2+1] );
+
+            if ( coincide( myNodes1[0], myNodes2[0], myTol ) &&
+                 coincide( myNodes1[1], myNodes2[1], myTol ))
+            {
+              cf.myLinks.erase( cf.myLinks.begin() + i2, cf.myLinks.begin() + i2 + 2 );
+              --i2;
+              continue;
+            }
+
+            EdgePart common = cf.myLinks[i1];
+            common.ReplaceCoplanar( cf.myLinks[i2] );
+
+            const SMDS_MeshNode* n1 = myNodes1[0].Node(); // end nodes of an overlapping part
+            const SMDS_MeshNode* n2 = myNodes1[1].Node();
+            size_t i3 = cf.myLinks.size();
+
+            if ( myNodes1[0] != myNodes2[0] ) // a part before the overlapping one
+            {
+              if ( intPoint.myU[0] < 0 )
+                cf.myLinks[i1].Set( myNodes1[0].Node(), myNodes2[0].Node(),
+                                    cf.myLinks[i1].myFace, cf.myLinks[i1].myIndex );
+              else
+                cf.myLinks[i1].Set( myNodes2[0].Node(), myNodes1[0].Node(),
+                                    cf.myLinks[i2].myFace, cf.myLinks[i2].myIndex );
+
+              cf.myLinks[i1+1].Set( cf.myLinks[i1].myNode2,
+                                    cf.myLinks[i1].myNode1,
+                                    cf.myLinks[i1].myFace,
+                                    cf.myLinks[i1].myIndex);
+              n1 = cf.myLinks[i1].myNode2;
+            }
+            else
+              i3 = i1;
+
+            if ( myNodes1[1] != myNodes2[1] ) // a part after the overlapping one
+            {
+              if ( intPoint.myU[1] < 1 )
+                cf.myLinks[i2].Set( myNodes1[1].Node(), myNodes2[1].Node(),
+                                    cf.myLinks[i2].myFace, cf.myLinks[i2].myIndex );
+              else
+                cf.myLinks[i2].Set( myNodes2[1].Node(), myNodes1[1].Node(),
+                                    cf.myLinks[i1].myFace, cf.myLinks[i1].myIndex );
+
+              cf.myLinks[i2+1].Set( cf.myLinks[i2].myNode2,
+                                    cf.myLinks[i2].myNode1,
+                                    cf.myLinks[i2].myFace,
+                                    cf.myLinks[i2].myIndex);
+              n2 = cf.myLinks[i2].myNode1;
+            }
+            else
+              i3 = i2;
+
+            if ( i3 == cf.myLinks.size() )
+              cf.myLinks.resize( i3 + 2 );
+
+            cf.myLinks[i3].Set  ( n1, n2, common.myFace, common.myIndex );
+            cf.myLinks[i3+1].Set( n2, n1, common.myFace, common.myIndex );
+
+            i2 = i1 + 1; // recheck modified i1
+            continue;
+          }
+          //else
+          // {
+          //   // remember a new node
+          //   CutLink link1( myNodes1[0].Node(), myNodes1[1].Node(), cf.myInitFace );
+          //   CutLink link2( myNodes2[0].Node(), myNodes2[1].Node(), cf.myInitFace );
+          //   link2.myIntNode = link1.myIntNode = intPoint.myNode;
+          //   addLink( link1 );
+          //   addLink( link2 );
+
+          //   // split edges
+          //   size_t i = cf.myLinks.size();
+          //   if ( intPoint.myNode != cf.myLinks[ i1 ].myNode1 &&
+          //        intPoint.myNode != cf.myLinks[ i1 ].myNode2 )
+          //   {
+          //     cf.myLinks.push_back( cf.myLinks[ i1 ]);
+          //     cf.myLinks.push_back( cf.myLinks[ i1 + 1 ]);
+          //     cf.myLinks[ i1 ].myNode2 = cf.myLinks[ i1 + 1 ].myNode1 = intPoint.Node();
+          //     cf.myLinks[ i  ].myNode1 = cf.myLinks[ i  + 1 ].myNode2 = intPoint.Node();
+          //   }
+          //   if ( intPoint.myNode != cf.myLinks[ i2 ].myNode1 &&
+          //        intPoint.myNode != cf.myLinks[ i2 ].myNode2 )
+          //   {
+          //     i = cf.myLinks.size();
+          //     cf.myLinks.push_back( cf.myLinks[ i2 ]);
+          //     cf.myLinks.push_back( cf.myLinks[ i2 + 1 ]);
+          //     cf.myLinks[ i2 ].myNode2 = cf.myLinks[ i2 + 1 ].myNode1 = intPoint.Node();
+          //     cf.myLinks[ i  ].myNode1 = cf.myLinks[ i  + 1 ].myNode2 = intPoint.Node();
+          //   }
+          // }
+
+        } // if ( intersectEdgeEdge( 0, 0, intPoint ))
+
+        ++i2;
+        --limit;
+      }
+
+      // split i1 edge and all edges it intersects
+      // don't do it inside intersection loop in order not to loose direction of i1 edge
+      if ( !myIntPointSet.empty() )
+      {
+        cf.myLinks.reserve( cf.myLinks.size() + myIntPointSet.size() * 2 + 2 );
+
+        EdgePart* edge1 = &cf.myLinks[ i1 ];
+        EdgePart* twin1 = &cf.myLinks[ i1 + 1 ];
+
+        TIntPointSet::iterator ipIt = myIntPointSet.begin();
+        for ( ; ipIt != myIntPointSet.end(); ++ipIt ) // int points sorted on i1 edge
+        {
+          size_t i = cf.myLinks.size();
+          if ( ipIt->myNode != edge1->myNode1 &&
+               ipIt->myNode != edge1->myNode2 )
+          {
+            cf.myLinks.push_back( *edge1 );
+            cf.myLinks.push_back( *twin1 );
+            edge1->myNode2          = twin1->myNode1              = ipIt->Node();
+            cf.myLinks[ i ].myNode1 = cf.myLinks[ i + 1 ].myNode2 = ipIt->Node();
+            edge1 = & cf.myLinks[ i ];
+            twin1 = & cf.myLinks[ i + 1 ];
+          }
+          size_t i2 = ipIt->myEdgeInd[1];
+          if ( ipIt->myNode != cf.myLinks[ i2 ].myNode1 &&
+               ipIt->myNode != cf.myLinks[ i2 ].myNode2 )
+          {
+            i = cf.myLinks.size();
+            cf.myLinks.push_back( cf.myLinks[ i2 ]);
+            cf.myLinks.push_back( cf.myLinks[ i2 + 1 ]);
+            cf.myLinks[ i2 ].myNode2 = cf.myLinks[ i2 + 1 ].myNode1 = ipIt->Node();
+            cf.myLinks[ i  ].myNode1 = cf.myLinks[ i  + 1 ].myNode2 = ipIt->Node();
+          }
+        }
+        if ( cf.myLinks.size() >= limit )
+          throw SALOME_Exception( "Infinite loop in Intersector::intersectNewEdges()" );
+      }
+      ++i1; // each internal edge encounters twice
+    }
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Split intersected faces
+   */
+  //================================================================================
+
+  void Intersector::MakeNewFaces( SMESH_MeshAlgos::TEPairVec& theNew2OldFaces,
+                                  SMESH_MeshAlgos::TNPairVec& theNew2OldNodes,
+                                  const double                theSign)
+  {
+    // unmark all nodes except intersection ones
+
+    for ( SMDS_NodeIteratorPtr nIt = myMesh->nodesIterator(); nIt->more(); )
+    {
+      const SMDS_MeshNode* n = nIt->next();
+      if ( n->isMarked() && n->GetID()-1 < (int) theNew2OldNodes.size() )
+        n->setIsMarked( false );
+    }
+    // SMESH_MeshAlgos::MarkElems( myMesh->nodesIterator(), false );
+
+    TCutLinkMap::const_iterator cutLinksIt = myCutLinks.cbegin();
+    // for ( ; cutLinksIt != myCutLinks.cend(); ++cutLinksIt )
+    // {
+    //   const CutLink& link = *cutLinksIt;
+    //   if ( link.IntNode() && link.IntNode()->GetID()-1 < (int) theNew2OldNodes.size() )
+    //     link.IntNode()->setIsMarked( true );
+    // }
+
+    // intersect edges added to myCutFaces
+
+    TCutFaceMap::const_iterator cutFacesIt = myCutFaces.cbegin();
+    for ( ; cutFacesIt != myCutFaces.cend(); ++cutFacesIt )
+    {
+      const CutFace& cf = *cutFacesIt;
+      cf.ReplaceNodes( myRemove2KeepNodes );
+      intersectNewEdges( cf );
+    }
+
+    // make new faces
+
+    EdgeLoopSet                            loopSet;
+    SMESH_MeshAlgos::Triangulate           triangulator;
+    std::vector< EdgePart >                cutOffLinks;
+    TLinkMap                               cutOffCoplanarLinks;
+    std::vector< const CutFace* >          touchedFaces;
+    SMESH_MeshAlgos::TEPairVec::value_type new2OldTria;
+    CutFace                                cutFace(0);
+    std::vector< const SMDS_MeshNode* >    nodes;
+    std::vector<const SMDS_MeshElement *>  faces;
+
+    cutOffLinks.reserve( myCutFaces.Extent() * 2 );
+
+    for ( cutFacesIt = myCutFaces.cbegin(); cutFacesIt != myCutFaces.cend(); ++cutFacesIt )
+    {
+      const CutFace& cf = *cutFacesIt;
+      if ( !cf.IsCut() )
+      {
+        touchedFaces.push_back( & cf );
+        continue;
+      }
+
+      const gp_XYZ& normal = myNormals[ cf.myInitFace->GetID() ];
+
+      // form loops of new faces
+      cf.ReplaceNodes( myRemove2KeepNodes );
+      cf.MakeLoops( loopSet, normal );
+
+      // avoid loops that are not connected to boundary edges of cf.myInitFace
+      if ( cf.RemoveInternalLoops( loopSet ))
+      {
+        intersectNewEdges( cf );
+        cf.MakeLoops( loopSet, normal );
+      }
+      // erase loops that are cut off by face intersections
+      cf.CutOffLoops( loopSet, theSign, myNormals, cutOffLinks, cutOffCoplanarLinks );
+
+      int index = cf.myInitFace->GetID(); // index in theNew2OldFaces
+
+      const SMDS_MeshElement* tria;
+      for ( size_t iL = 0; iL < loopSet.myNbLoops; ++iL )
+      {
+        EdgeLoop& loop = loopSet.myLoops[ iL ];
+        if ( loop.myLinks.size() == 0 )
+          continue;
+
+        int nbTria  = triangulator.GetTriangles( &loop, nodes );
+        int nbNodes = 3 * nbTria;
+        for ( int i = 0; i < nbNodes; i += 3 )
+        {
+          if ( nodes[i] == nodes[i+1] || nodes[i] == nodes[i+2] || nodes[i+1] == nodes[i+2] )
+          {
+#ifdef _DEBUG_
+            std::cerr << "BAD tria" << std::endl;
+            cf.Dump();
+#endif
+            continue;
+          }
+          if (!( tria = myMesh->FindFace( nodes[i], nodes[i+1], nodes[i+2] )))
+            tria = myMesh->AddFace( nodes[i], nodes[i+1], nodes[i+2] );
+          tria->setIsMarked( true ); // not to remove it
+
+          new2OldTria = std::make_pair( tria, theNew2OldFaces[ index ].second );
+          if ( tria->GetID() < (int)theNew2OldFaces.size() )
+            theNew2OldFaces[ tria->GetID() ] = new2OldTria;
+          else
+            theNew2OldFaces.push_back( new2OldTria );
+
+          if ( index == tria->GetID() )
+            index = 0; // do not remove tria
+        }
+      }
+      theNew2OldFaces[ index ].first = 0;
+    }
+
+    // remove split faces
+    for ( size_t id = 1; id < theNew2OldFaces.size(); ++id )
+    {
+      if ( theNew2OldFaces[id].first )
+        continue;
+      if ( const SMDS_MeshElement* f = myMesh->FindElement( id ))
+        myMesh->RemoveFreeElement( f );
+    }
+
+    // remove face connected to cut off parts of cf.myInitFace
+
+    nodes.resize(2);
+    for ( size_t i = 0; i < cutOffLinks.size(); ++i )
+    {
+      //break;
+      nodes[0] = cutOffLinks[i].myNode1;
+      nodes[1] = cutOffLinks[i].myNode2;
+
+      if ( nodes[0] != nodes[1] &&
+           myMesh->GetElementsByNodes( nodes, faces ))
+      {
+        if ( cutOffLinks[i].myFace &&
+             cutOffLinks[i].myIndex != EdgePart::_COPLANAR &&
+             faces.size() == 2 )
+          continue;
+        for ( size_t iF = 0; iF < faces.size(); ++iF )
+        {
+          int index = faces[iF]->GetID();
+          // if ( //faces[iF]->isMarked()         ||  // kept part of cutFace
+          //      !theNew2OldFaces[ index ].first ) // already removed
+          //   continue;
+          cutFace.myInitFace = faces[iF];
+          // if ( myCutFaces.Contains( cutFace )) // keep cutting faces needed in CutOffLoops()
+          // {
+          //   if ( !myCutFaces.Added( cutFace ).IsCut() )
+          //     theNew2OldFaces[ index ].first = 0;
+          //   continue;
+          // }
+          cutFace.myLinks.clear();
+          cutFace.InitLinks();
+          for ( size_t iL = 0; iL < cutFace.myLinks.size(); ++iL )
+            if ( !cutOffLinks[i].IsSame( cutFace.myLinks[ iL ]))
+              cutOffLinks.push_back( cutFace.myLinks[ iL ]);
+
+          theNew2OldFaces[ index ].first = 0;
+          myMesh->RemoveFreeElement( faces[iF] );
+        }
+      }
+    }
+
+    // replace nodes in touched faces
+
+    // treat touched faces
+    for ( size_t i = 0; i < touchedFaces.size(); ++i )
+    {
+      const CutFace& cf = *touchedFaces[i];
+
+      int index = cf.myInitFace->GetID(); // index in theNew2OldFaces
+      if ( !theNew2OldFaces[ index ].first )
+        continue; // already cut off
+
+      if ( !cf.ReplaceNodes( myRemove2KeepNodes ))
+        continue; // just keep as is
+
+      if ( cf.myLinks.size() == 3 )
+      {
+        const SMDS_MeshElement* tria = myMesh->AddFace( cf.myLinks[0].myNode1,
+                                                        cf.myLinks[1].myNode1,
+                                                        cf.myLinks[2].myNode1 );
+        new2OldTria = std::make_pair( tria, theNew2OldFaces[ index ].second );
+        if ( tria->GetID() < (int)theNew2OldFaces.size() )
+          theNew2OldFaces[ tria->GetID() ] = new2OldTria;
+        else
+          theNew2OldFaces.push_back( new2OldTria );
+      }
+      theNew2OldFaces[ index ].first = 0;
+    }
+
+
+    // add used new nodes to theNew2OldNodes
+    SMESH_MeshAlgos::TNPairVec::value_type new2OldNode;
+    new2OldNode.second = NULL;
+    for ( cutLinksIt = myCutLinks.cbegin(); cutLinksIt != myCutLinks.cend(); ++cutLinksIt )
+    {
+      const CutLink& link = *cutLinksIt;
+      if ( link.IntNode() ) // && link.IntNode()->NbInverseElements() > 0 )
+      {
+        new2OldNode.first = link.IntNode();
+        theNew2OldNodes.push_back( new2OldNode );
+      }
+    }
+
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Debug
+   */
+  //================================================================================
+
+  void CutFace::Dump() const
+  {
+    std::cout << std::endl << "INI F " << myInitFace->GetID() << std::endl;
+    for ( size_t i = 0; i < myLinks.size(); ++i )
+      std::cout << "[" << i << "] ("
+                << char(( myLinks[i].IsInternal() ? 'j' : '0' ) + myLinks[i].myIndex ) << ") "
+                << myLinks[i].myNode1->GetID() << " - " << myLinks[i].myNode2->GetID()
+                << " " << ( myLinks[i].myFace ? 'F' : 'C' )
+                << ( myLinks[i].myFace ? myLinks[i].myFace->GetID() : 0 ) << " " << std::endl;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Add an edge cutting this face
+   *  \param [in] p1 - start point of the edge
+   *  \param [in] p2 - end point of the edge
+   *  \param [in] cutter - a face producing the added cut edge.
+   *  \param [in] nbOnPlane - nb of triangle nodes lying on the plane of the cutter face
+   */
+  //================================================================================
+
+  void CutFace::AddEdge( const CutLink&          p1,
+                         const CutLink&          p2,
+                         const SMDS_MeshElement* cutterFace,
+                         const int               nbOnPlane,
+                         const int               iNotOnPlane) const
+  {
+    int iN[2] = { myInitFace->GetNodeIndex( p1.IntNode() ),
+                  myInitFace->GetNodeIndex( p2.IntNode() ) };
+    if ( iN[0] >= 0 && iN[1] >= 0 )
+    {
+      // the cutting edge is a whole side
+      if ((  cutterFace && nbOnPlane < 3 ) &&
+          !( cutterFace->GetNodeIndex( p1.IntNode() ) >= 0 &&
+             cutterFace->GetNodeIndex( p2.IntNode() ) >= 0 ))
+      {
+        InitLinks();
+        myLinks[ Abs( iN[0] - iN[1] ) == 1 ? Min( iN[0], iN[1] ) : 2 ].myFace = cutterFace;
+      }
+      return;
+    }
+
+    if ( p1.IntNode() == p2.IntNode() )
+    {
+      AddPoint( p1, p2, 1e-10 );
+      return;
+    }
+
+    InitLinks();
+
+    // cut side edges by a new one
+
+    int iEOnPlane = ( nbOnPlane == 2 ) ? ( iNotOnPlane + 1 ) % 3  :  -1;
+
+    double dist[2];
+    for ( int is2nd = 0; is2nd < 2; ++is2nd )
+    {
+      const CutLink& p = is2nd ? p2 : p1;
+      dist[ is2nd ] = 0;
+      if ( iN[ is2nd ] >= 0 )
+        continue;
+
+      int iE = Max( iEOnPlane, myInitFace->GetNodeIndex( p.Node1() ));
+      if ( iE < 0 )
+        continue; // link of other face
+
+      SMESH_NodeXYZ n0 = myLinks[iE].myNode1;
+      dist[ is2nd ]    = ( n0 - p.myIntNode ).SquareModulus();
+
+      for ( size_t i = 0; i < myLinks.size(); ++i )
+        if ( myLinks[i].myIndex == iE )
+        {
+          double d1 = n0.SquareDistance( myLinks[i].myNode1 );
+          if ( d1 < dist[ is2nd ] )
+          {
+            double d2 = n0.SquareDistance( myLinks[i].myNode2 );
+            if ( dist[ is2nd ] < d2 )
+            {
+              myLinks.push_back( myLinks[i] );
+              myLinks.back().myNode1 = myLinks[i].myNode2 = p.IntNode();
+              break;
+            }
+          }
+        }
+    }
+
+    int state = nbOnPlane == 3 ? EdgePart::_COPLANAR : EdgePart::_INTERNAL;
+
+    // look for an existing equal edge
+    if ( nbOnPlane == 2 )
+    {
+      SMESH_NodeXYZ n0 = myLinks[ iEOnPlane ].myNode1;
+      if ( iN[0] >= 0 ) dist[0] = ( n0 - p1.myIntNode ).SquareModulus();
+      if ( iN[1] >= 0 ) dist[1] = ( n0 - p2.myIntNode ).SquareModulus();
+      if ( dist[0] > dist[1] )
+        std::swap( dist[0], dist[1] );
+      for ( size_t i = 0; i < myLinks.size(); ++i )
+      {
+        if ( myLinks[i].myIndex != iEOnPlane )
+          continue;
+        gp_XYZ mid = 0.5 * ( SMESH_NodeXYZ( myLinks[i].myNode1 ) +
+                             SMESH_NodeXYZ( myLinks[i].myNode2 ));
+        double d = ( n0 - mid ).SquareModulus();
+        if ( dist[0] < d && d < dist[1] )
+          myLinks[i].myFace = cutterFace;
+      }
+      return;
+    }
+    else
+    {
+      EdgePart newEdge; newEdge.Set( p1.IntNode(), p2.IntNode(), cutterFace, state );
+      for ( size_t i = 0; i < myLinks.size(); ++i )
+      {
+        if ( myLinks[i].IsSame( newEdge ))
+        {
+          // if ( !myLinks[i].IsInternal() )
+          //   myLinks[ i ].myFace = cutterFace;
+          // else
+          myLinks[ i   ].ReplaceCoplanar( newEdge );
+          myLinks[ i+1 ].ReplaceCoplanar( newEdge );
+          return;
+        }
+        i += myLinks[i].IsInternal();
+      }
+    }
+
+    size_t  i = myLinks.size();
+    myLinks.resize( i + 2 );
+    myLinks[ i   ].Set( p1.IntNode(), p2.IntNode(), cutterFace, state );
+    myLinks[ i+1 ].Set( p2.IntNode(), p1.IntNode(), cutterFace, state );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Add a point cutting this face
+   */
+  //================================================================================
+
+  void CutFace::AddPoint( const CutLink& p1, const CutLink& p2, double tol ) const
+  {
+    if ( myInitFace->GetNodeIndex( p1.IntNode() ) >= 0 ||
+         myInitFace->GetNodeIndex( p2.IntNode() ) >= 0 )
+      return;
+
+    InitLinks();
+
+    const CutLink* link = &p1;
+    int iE = myInitFace->GetNodeIndex( link->Node1() );
+    if ( iE < 0 )
+    {
+      link = &p2;
+      iE = myInitFace->GetNodeIndex( link->Node1() );
+    }
+    if ( iE >= 0 )
+    {
+      // cut an existing edge by the point
+      SMESH_NodeXYZ n0 = link->Node1();
+      double         d = ( n0 - link->myIntNode ).SquareModulus();
+
+      for ( size_t i = 0; i < myLinks.size(); ++i )
+        if ( myLinks[i].myIndex == iE )
+        {
+          double d1 = n0.SquareDistance( myLinks[i].myNode1 );
+          if ( d1 < d )
+          {
+            double d2 = n0.SquareDistance( myLinks[i].myNode2 );
+            if ( d < d2 )
+            {
+              myLinks.push_back( myLinks[i] );
+              myLinks.back().myNode1 = myLinks[i].myNode2 = link->IntNode();
+              return;
+            }
+          }
+        }
+    }
+    else // point is inside the triangle
+    {
+      // // check if a point already added
+      // for ( size_t i = 3; i < myLinks.size(); ++i )
+      //   if ( myLinks[i].myNode1 == p1.IntNode() )
+      //     return;
+
+      // // create a link between the point and the closest corner node
+      // const SMDS_MeshNode* closeNode = myLinks[0].myNode1;
+      // double minDist = p1.myIntNode.SquareDistance( closeNode );
+      // for ( int i = 1; i < 3; ++i )
+      // {
+      //   double dist = p1.myIntNode.SquareDistance( myLinks[i].myNode1 );
+      //   if ( dist < minDist )
+      //   {
+      //     minDist = dist;
+      //     closeNode = myLinks[i].myNode1;
+      //   }
+      // }
+      // if ( minDist > tol * tol )
+      // {
+      //   size_t i = myLinks.size();
+      //   myLinks.resize( i + 2 );
+      //   myLinks[ i   ].Set( p1.IntNode(), closeNode );
+      //   myLinks[ i+1 ].Set( closeNode, p1.IntNode() );
+      // }
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Perform node replacement
+   */
+  //================================================================================
+
+  bool CutFace::ReplaceNodes( const TNNMap& theRm2KeepMap ) const
+  {
+    bool replaced = false;
+    for ( size_t i = 0; i < myLinks.size(); ++i )
+    {
+      while ( theRm2KeepMap.IsBound((Standard_Address) myLinks[i].myNode1 ))
+        replaced = ( myLinks[i].myNode1 = theRm2KeepMap((Standard_Address) myLinks[i].myNode1 ));
+
+      while ( theRm2KeepMap.IsBound((Standard_Address) myLinks[i].myNode2 ))
+        replaced = ( myLinks[i].myNode2 = theRm2KeepMap((Standard_Address) myLinks[i].myNode2 ));
+    }
+
+    //if ( replaced ) // remove equal links
+    {
+      for ( size_t i1 = 0; i1 < myLinks.size(); ++i1 )
+      {
+        if ( myLinks[i1].myNode1 == myLinks[i1].myNode2 )
+        {
+          myLinks.erase( myLinks.begin() + i1,
+                         myLinks.begin() + i1 + 1 + myLinks[i1].IsInternal() );
+          --i1;
+          continue;
+        }
+        size_t i2 = i1 + 1 + myLinks[i1].IsInternal();
+        for ( ; i2 < myLinks.size(); ++i2 )
+        {
+          if ( !myLinks[i2].IsInternal() )
+            continue;
+          if ( myLinks[i1].IsSame( myLinks[i2] ))
+          {
+            myLinks[i1].  ReplaceCoplanar( myLinks[i2] );
+            if ( myLinks[i1].IsInternal() )
+              myLinks[i1+1].ReplaceCoplanar( myLinks[i2+1] );
+            if ( !myLinks[i1].myFace && myLinks[i2].myFace )
+            {
+              myLinks[i1].  myFace = myLinks[i2].myFace;
+              if ( myLinks[i1].IsInternal() )
+                myLinks[i1+1].myFace = myLinks[i2+1].myFace;
+            }
+            myLinks.erase( myLinks.begin() + i2,
+                           myLinks.begin() + i2 + 2 );
+            --i2;
+            continue;
+          }
+          ++i2;
+        }
+        i1 += myLinks[i1].IsInternal();
+      }
+    }
+
+    return replaced;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Initialize myLinks with edges of myInitFace
+   */
+  //================================================================================
+
+  void CutFace::InitLinks() const
+  {
+    if ( !myLinks.empty() ) return;
+
+    int nbNodes = myInitFace->NbNodes();
+    myLinks.reserve( nbNodes * 2 );
+    myLinks.resize( nbNodes );
+
+    for ( int i = 0; i < nbNodes; ++i )
+    {
+      const SMDS_MeshNode* n1 = myInitFace->GetNode( i );
+      const SMDS_MeshNode* n2 = myInitFace->GetNodeWrap( i + 1);
+      myLinks[i].Set( n1, n2, 0, i );
+    }
+  }
+  
+  //================================================================================
+  /*!
+   * \brief Return number of internal edges
+   */
+  //================================================================================
+
+  int CutFace::NbInternalEdges() const
+  {
+    int nb = 0;
+    for ( size_t i = 3; i < myLinks.size(); ++i )
+      nb += myLinks[i].IsInternal();
+
+    return nb / 2; // each internal edge encounters twice
+  }
+
+  //================================================================================
+  /*!
+   * \brief Remove loops that are not connected to boundary edges of myFace by
+   *        adding edges connecting these loops to the boundary
+   */
+  //================================================================================
+
+  bool CutFace::RemoveInternalLoops( EdgeLoopSet& theLoops ) const
+  {
+    size_t nbReachedLoops = 0;
+
+    // count loops including boundary EdgeParts
+    for ( size_t iL = 0; iL < theLoops.myNbLoops; ++iL )
+    {
+      EdgeLoop& loop = theLoops.myLoops[ iL ];
+
+      for ( size_t iE = 0; iE < loop.myLinks.size(); ++iE )
+        if ( !loop.myLinks[ iE ]->IsInternal() )
+        {
+          nbReachedLoops += loop.SetConnected();
+          break;
+        }
+    }
+    if ( nbReachedLoops == theLoops.myNbLoops )
+      return false; // no unreachable loops
+
+
+    // try to reach all loops by propagating via internal edges shared by loops
+    size_t prevNbReached;
+    do
+    {
+      prevNbReached = nbReachedLoops;
+
+      for ( size_t iL = 0; iL < theLoops.myNbLoops; ++iL )
+      {
+        EdgeLoop& loop = theLoops.myLoops[ iL ];
+        if ( !loop.myIsBndConnected )
+          continue;
+
+        for ( size_t iE = 0; iE < loop.myLinks.size(); ++iE )
+          if ( loop.myLinks[ iE ]->IsInternal() )
+          {
+            const EdgePart* twinEdge = getTwin( loop.myLinks[ iE ]);
+            EdgeLoop*          loop2 = theLoops.GetLoopOf( twinEdge );
+            if ( loop2->SetConnected() && ++nbReachedLoops == theLoops.myNbLoops )
+              return false; // no unreachable loops
+          }
+      }
+    }
+    while ( prevNbReached < nbReachedLoops );
+
+
+    // add links connecting internal loops with the boundary ones
+
+    for ( size_t iL = 0; iL < theLoops.myNbLoops; ++iL )
+    {
+      EdgeLoop& loop = theLoops.myLoops[ iL ];
+      if ( loop.myIsBndConnected )
+        continue;
+
+      // find a pair of closest nodes
+      const SMDS_MeshNode *closestNode1, *closestNode2;
+      double minDist = 1e100;
+      for ( size_t iE = 0; iE < loop.myLinks.size(); ++iE )
+      {
+        SMESH_NodeXYZ n1 = loop.myLinks[ iE ]->myNode1;
+
+        for ( size_t i = 0; i < myLinks.size(); ++i )
+        {
+          if ( !loop.Contains( myLinks[i].myNode1 ))
+          {
+            double dist = n1.SquareDistance( myLinks[i].myNode1 );
+            if ( dist < minDist )
+            {
+              minDist = dist;
+              closestNode1 = loop.myLinks[ iE ]->myNode1;
+              closestNode2 = myLinks[i].myNode1;
+            }
+          }
+          if ( myLinks[i].IsInternal() )
+            ++i;
+        }
+      }
+
+      size_t i = myLinks.size();
+      myLinks.resize( i + 2 );
+      myLinks[ i   ].Set( closestNode1, closestNode2 );
+      myLinks[ i+1 ].Set( closestNode2, closestNode1 );
+    }
+
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return equal reversed edge
+   */
+  //================================================================================
+
+  EdgePart* CutFace::getTwin( const EdgePart* edge ) const
+  {
+    size_t i = edge - & myLinks[0];
+
+    if ( i > 2 && myLinks[ i-1 ].IsTwin( *edge ))
+      return & myLinks[ i-1 ];
+
+    if ( i+1 < myLinks.size() &&
+         myLinks[ i+1 ].IsTwin( *edge ))
+      return & myLinks[ i+1 ];
+
+    return 0;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Fill loops of edges
+   */
+  //================================================================================
+
+  void CutFace::MakeLoops( EdgeLoopSet& theLoops, const gp_XYZ& theFaceNorm ) const
+  {
+    theLoops.Init( myLinks );
+
+    if ( myLinks.size() == 3 )
+    {
+      theLoops.AddNewLoop();
+      theLoops.AddEdge( myLinks[0] );
+      theLoops.AddEdge( myLinks[1] );
+      theLoops.AddEdge( myLinks[2] );
+      return;
+    }
+
+    while ( !theLoops.AllEdgesUsed() )
+    {
+      theLoops.AddNewLoop();
+
+      // add 1st edge to a new loop
+      size_t i1;
+      for ( i1 = theLoops.myNbLoops - 1; i1 < myLinks.size(); ++i1 )
+        if ( theLoops.AddEdge( myLinks[i1] ))
+          break;
+
+      EdgePart*             lastEdge = & myLinks[ i1 ];
+      EdgePart*             twinEdge = getTwin( lastEdge );
+      const SMDS_MeshNode* firstNode = lastEdge->myNode1;
+      const SMDS_MeshNode*  lastNode = lastEdge->myNode2;
+
+      do // add the rest edges
+      {
+        theLoops.myCandidates.clear(); // edges starting at lastNode
+        int nbInternal = 0;
+
+        // find candidate edges
+        for ( size_t i = i1 + 1; i < myLinks.size(); ++i )
+          if ( myLinks[ i ].myNode1 == lastNode &&
+               &myLinks[ i ] != twinEdge &&
+               !theLoops.myIsUsedEdge[ i ])
+          {
+            theLoops.myCandidates.push_back( & myLinks[ i ]);
+            nbInternal += myLinks[ i ].IsInternal();
+          }
+
+        // choose among candidates
+        if ( theLoops.myCandidates.size() == 0 )
+        {
+          theLoops.GetLoopOf( lastEdge )->myHasPending = true;
+          lastEdge = twinEdge;
+        }
+        else if ( theLoops.myCandidates.size() == 1 )
+        {
+          lastEdge = theLoops.myCandidates[0];
+        }
+        else if ( nbInternal == 1 && !lastEdge->IsInternal() )
+        {
+          lastEdge = theLoops.myCandidates[ !theLoops.myCandidates[0]->IsInternal() ];
+        }
+        else
+        {
+          gp_Vec  lastVec = *lastEdge;
+          double maxAngle = -2 * M_PI;
+          for ( size_t i = 0; i < theLoops.myCandidates.size(); ++i )
+          {
+            double angle = lastVec.AngleWithRef( *theLoops.myCandidates[i], theFaceNorm );
+            if ( angle > maxAngle )
+            {
+              maxAngle = angle;
+              lastEdge = theLoops.myCandidates[i];
+            }
+          }
+        }
+        theLoops.AddEdge( *lastEdge );
+        lastNode = lastEdge->myNode2;
+        twinEdge = getTwin( lastEdge );
+      }
+      while ( lastNode != firstNode );
+
+    } // while ( !theLoops.AllEdgesUsed() )
+
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Erase loops that are cut off by face intersections
+   */
+  //================================================================================
+
+  void CutFace::CutOffLoops( EdgeLoopSet&                 theLoops,
+                             const double                 theSign,
+                             const std::vector< gp_XYZ >& theNormals,
+                             std::vector< EdgePart >&     theCutOffLinks,
+                             TLinkMap&                    theCutOffCoplanarLinks) const
+  {
+    EdgePart sideEdge;
+    for ( size_t i = 0; i < myLinks.size(); ++i )
+    {
+      if ( !myLinks[i].myFace )
+        continue;
+
+      EdgeLoop* loop = theLoops.GetLoopOf( & myLinks[i] );
+      if ( !loop || loop->myLinks.empty() || loop->myHasPending )
+        continue;
+
+      bool toErase, isCoplanar = ( myLinks[i].myIndex == EdgePart::_COPLANAR );
+
+      gp_Vec iniNorm = theNormals[ myInitFace->GetID() ];
+      if ( isCoplanar )
+      {
+        toErase = ( myLinks[i].myFace->GetID() > myInitFace->GetID() );
+
+        const EdgePart* twin = getTwin( & myLinks[i] );
+        if ( !twin || twin->myFace == myLinks[i].myFace )
+        {
+          // only one co-planar face includes myLinks[i]
+          gp_Vec inFaceDir = iniNorm ^ myLinks[i];
+          gp_XYZ   edgePnt = SMESH_NodeXYZ( myLinks[i].myNode1 );
+          for ( int iN = 0; iN < 3; ++iN )
+          {
+            gp_Vec inCutFaceDir = ( SMESH_NodeXYZ( myLinks[i].myFace->GetNode( iN )) - edgePnt );
+            if ( inCutFaceDir * inFaceDir < 0 )
+            {
+              toErase = false;
+              break;
+            }
+          }
+        }
+      }
+      else
+      {
+        gp_Vec   cutNorm = theNormals[ myLinks[i].myFace->GetID() ];
+        gp_Vec inFaceDir = iniNorm ^ myLinks[i];
+
+        toErase = inFaceDir * cutNorm * theSign < 0;
+        if ( !toErase )
+        {
+          // erase a neighboring loop
+          loop = 0;
+          if ( const EdgePart* twin = getTwin( & myLinks[i] ))
+            loop = theLoops.GetLoopOf( twin );
+          toErase = ( loop && !loop->myLinks.empty() );
+        }
+      }
+
+      if ( toErase )
+      {
+        if ( !isCoplanar )
+        {
+          // remember whole sides of myInitFace that are cut off
+          for ( size_t iE = 0; iE < loop->myLinks.size(); ++iE )
+          {
+            if ( !loop->myLinks[ iE ]->myFace              &&
+                 !loop->myLinks[ iE ]->IsInternal()     )//   &&
+                 // !loop->myLinks[ iE ]->myNode1->isMarked() && // cut nodes are marked
+                 // !loop->myLinks[ iE ]->myNode2->isMarked() )
+            {
+              int i = loop->myLinks[ iE ]->myIndex;
+              sideEdge.Set( myInitFace->GetNode    ( i   ),
+                            myInitFace->GetNodeWrap( i+1 ));
+              theCutOffLinks.push_back( sideEdge );
+
+              if ( !sideEdge.IsSame( *loop->myLinks[ iE ] )) // nodes replaced
+              {
+                theCutOffLinks.push_back( *loop->myLinks[ iE ] );
+              }
+            }
+            else if ( IsCoplanar( loop->myLinks[ iE ]))
+            {
+              // propagate erasure to a co-planar face
+              theCutOffLinks.push_back( *loop->myLinks[ iE ]);
+            }
+            else if ( loop->myLinks[ iE ]->myFace &&
+                      loop->myLinks[ iE ]->IsInternal() )
+              theCutOffLinks.push_back( *loop->myLinks[ iE ]);
+          }
+
+          // clear the loop
+          theLoops.Erase( loop );
+        }
+      }
+    }
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if the face has cut edges
+   */
+  //================================================================================
+
+  bool CutFace::IsCut() const
+  {
+    if ( myLinks.size() > 3 )
+      return true;
+
+    if ( myLinks.size() == 3 )
+      for ( size_t i = 0; i < 3; ++i )
+        if ( myLinks[i].myFace )
+          return true;
+
+    return false;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if an edge is produced by a co-planar cut
+   */
+  //================================================================================
+
+  bool CutFace::IsCoplanar( const EdgePart* edge ) const
+  {
+    if ( edge->myIndex == EdgePart::_COPLANAR )
+    {
+      const EdgePart* twin = getTwin( edge );
+      return ( !twin || twin->myIndex == EdgePart::_COPLANAR );
+    }
+    return false;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Replace _COPLANAR cut edge by _INTERNAL oe vice versa
+   */
+  //================================================================================
+
+  bool EdgePart::ReplaceCoplanar( const EdgePart& e )
+  {
+    if ( myIndex + e.myIndex == _COPLANAR + _INTERNAL )
+    {
+      //check if the faces are connected
+      int nbCommonNodes = SMESH_MeshAlgos::GetCommonNodes( e.myFace, myFace ).size();
+      bool toReplace = (( myIndex == _INTERNAL && nbCommonNodes > 1 ) ||
+                        ( myIndex == _COPLANAR && nbCommonNodes < 2 ));
+      if ( toReplace )
+      {
+        myIndex = e.myIndex;
+        myFace  = e.myFace;
+        return true;
+      }
+    }
+    return false;
+  }
+
+} // namespace
+
+//================================================================================
+/*!
+ * \brief Create an offsetMesh of given faces
+ *  \param [in] faceIt - the input faces
+ *  \param [out] new2OldFaces - history of faces
+ *  \param [out] new2OldNodes - history of nodes
+ *  \return SMDS_Mesh* - the new offset mesh, a caller should delete
+ */
+//================================================================================
+
+SMDS_Mesh* SMESH_MeshAlgos::MakeOffset( SMDS_ElemIteratorPtr theFaceIt,
+                                        SMDS_Mesh&           theSrcMesh,
+                                        const double         theOffset,
+                                        const bool           theFixIntersections,
+                                        TEPairVec&           theNew2OldFaces,
+                                        TNPairVec&           theNew2OldNodes)
+{
+  SMDS_Mesh* newMesh = new SMDS_Mesh;
+  theNew2OldFaces.clear();
+  theNew2OldNodes.clear();
+  theNew2OldFaces.push_back
+    ( std::make_pair(( const SMDS_MeshElement*) 0,
+                     ( const SMDS_MeshElement*) 0)); // to have index == face->GetID()
+
+  if ( theSrcMesh.GetMeshInfo().NbFaces( ORDER_QUADRATIC ) > 0 )
+    throw SALOME_Exception( "Offset of quadratic mesh not supported" );
+  if ( theSrcMesh.GetMeshInfo().NbFaces() > theSrcMesh.GetMeshInfo().NbTriangles() )
+    throw SALOME_Exception( "Offset of non-triangular mesh not supported" );
+
+  // copy input faces to the newMesh keeping IDs of nodes
+
+  double minNodeDist = 1e100;
+
+  std::vector< const SMDS_MeshNode* > nodes;
+  while ( theFaceIt->more() )
+  {
+    const SMDS_MeshElement* face = theFaceIt->next();
+    if ( face->GetType() != SMDSAbs_Face ) continue;
+
+    // copy nodes
+    nodes.assign( face->begin_nodes(), face->end_nodes() );
+    for ( size_t i = 0; i < nodes.size(); ++i )
+    {
+      const SMDS_MeshNode* newNode = newMesh->FindNode( nodes[i]->GetID() );
+      if ( !newNode )
+      {
+        SMESH_NodeXYZ xyz( nodes[i] );
+        newNode = newMesh->AddNodeWithID( xyz.X(), xyz.Y(), xyz.Z(), nodes[i]->GetID() );
+        theNew2OldNodes.push_back( std::make_pair( newNode, nodes[i] ));
+        nodes[i] = newNode;
+      }
+    }
+    const SMDS_MeshElement* newFace = 0;
+    switch ( face->GetEntityType() )
+    {
+    case SMDSEntity_Triangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2] );
+      break;
+    case SMDSEntity_Quad_Triangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2],
+                                  nodes[3],nodes[4],nodes[5] );
+      break;
+    case SMDSEntity_BiQuad_Triangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2],
+                                  nodes[3],nodes[4],nodes[5],nodes[6] );
+      break;
+    case SMDSEntity_Quadrangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2],nodes[3] );
+      break;
+    case SMDSEntity_Quad_Quadrangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2],nodes[3],
+                                  nodes[4],nodes[5],nodes[6],nodes[7] );
+      break;
+    case SMDSEntity_BiQuad_Quadrangle:
+      newFace = newMesh->AddFace( nodes[0],nodes[1],nodes[2],nodes[3],nodes[4],
+                                  nodes[5],nodes[6],nodes[7],nodes[8] );
+      break;
+    case SMDSEntity_Polygon:
+      newFace = newMesh->AddPolygonalFace( nodes );
+      break;
+    case SMDSEntity_Quad_Polygon:
+      newFace = newMesh->AddQuadPolygonalFace( nodes );
+      break;
+    default:
+      continue;
+    }
+    theNew2OldFaces.push_back( std::make_pair( newFace, face ));
+
+    SMESH_NodeXYZ pPrev = nodes.back(), p;
+    for ( size_t i = 0; i < nodes.size(); ++i )
+    {
+      p.Set( nodes[i] );
+      double dist = ( pPrev - p ).SquareModulus();
+      if ( dist > std::numeric_limits<double>::min() )
+        minNodeDist = dist;
+      pPrev = p;
+    }
+  } // while ( faceIt->more() )
+
+
+  // compute normals to faces
+  std::vector< gp_XYZ > normals( theNew2OldFaces.size() );
+  for ( size_t i = 1; i < normals.size(); ++i )
+  {
+    if ( !SMESH_MeshAlgos::FaceNormal( theNew2OldFaces[i].second, normals[i] ))
+      normals[i].SetCoord( 0,0,0 ); // TODO find norm by neighbors
+  }
+
+  const double  tol = 1e-3 * Sqrt( minNodeDist );
+  const double sign = ( theOffset < 0 ? -1 : +1 );
+
+  // translate new nodes by normal to input faces
+  gp_XYZ newXYZ;
+  std::vector< const SMDS_MeshNode* > multiNormalNodes;
+  for ( size_t i = 0; i < theNew2OldNodes.size(); ++i )
+  {
+    const SMDS_MeshNode* newNode = theNew2OldNodes[i].first;
+
+    if ( getTranslatedPosition( newNode, theOffset, tol*10., sign, normals, theSrcMesh, newXYZ ))
+      newMesh->MoveNode( newNode, newXYZ.X(), newXYZ.Y(), newXYZ.Z() );
+    else
+      multiNormalNodes.push_back( newNode );
+  }
+  // make multi-normal translation
+  std::vector< SMESH_NodeXYZ > multiPos(10);
+  for ( size_t i = 0; i < multiNormalNodes.size(); ++i )
+  {
+    const SMDS_MeshNode* newNode = multiNormalNodes[i];
+    newNode->setIsMarked( true );
+    SMESH_NodeXYZ oldXYZ = newNode;
+    multiPos.clear();
+    for ( SMDS_ElemIteratorPtr fIt = newNode->GetInverseElementIterator(); fIt->more(); )
+    {
+      const SMDS_MeshElement* newFace = fIt->next();
+      const int             faceIndex = newFace->GetID();
+      const gp_XYZ&           oldNorm = normals[ faceIndex ];
+      const gp_XYZ             newXYZ = oldXYZ + oldNorm * theOffset;
+      if ( multiPos.empty() )
+      {
+        newMesh->MoveNode( newNode, newXYZ.X(), newXYZ.Y(), newXYZ.Z() );
+        multiPos.emplace_back( newNode );
+      }
+      else
+      {
+        newNode = 0;
+        for ( size_t iP = 0; iP < multiPos.size() &&  !newNode; ++iP )
+          if (( multiPos[iP] - newXYZ ).SquareModulus() < tol * tol )
+            newNode = multiPos[iP].Node();
+        if ( !newNode )
+        {
+          newNode = newMesh->AddNode( newXYZ.X(), newXYZ.Y(), newXYZ.Z() );
+          newNode->setIsMarked( true );
+          theNew2OldNodes.push_back( std::make_pair( newNode, theNew2OldNodes[i].second ));
+          multiPos.emplace_back( newNode );
+        }
+      }
+      if ( newNode != oldXYZ.Node() )
+      {
+        nodes.assign( newFace->begin_nodes(), newFace->end_nodes() );
+        nodes[ newFace->GetNodeIndex( oldXYZ.Node() )] = newNode;
+        newMesh->ChangeElementNodes( newFace, & nodes[0], nodes.size() );
+      }
+    }
+  }
+
+  if ( !theFixIntersections )
+    return newMesh;
+
+
+  // remove new faces around concave nodes (they are marked) if the faces are inverted
+  gp_XYZ faceNorm;
+  for ( size_t i = 0; i < theNew2OldNodes.size(); ++i )
+  {
+    const SMDS_MeshNode* newNode = theNew2OldNodes[i].first;
+    //const SMDS_MeshNode* oldNode = theNew2OldNodes[i].second;
+    if ( newNode->isMarked() )
+    {
+      //gp_XYZ moveVec = sign * ( SMESH_NodeXYZ( newNode ) - SMESH_NodeXYZ( oldNode ));
+
+      //bool haveInverseFace = false;
+      for ( SMDS_ElemIteratorPtr fIt = newNode->GetInverseElementIterator(); fIt->more(); )
+      {
+        const SMDS_MeshElement* newFace = fIt->next();
+        const int             faceIndex = newFace->GetID();
+        const gp_XYZ&           oldNorm = normals[ faceIndex ];
+        if ( !SMESH_MeshAlgos::FaceNormal( newFace, faceNorm, /*normalize=*/false ) ||
+             //faceNorm * moveVec < 0 )
+             faceNorm * oldNorm < 0 )
+        {
+          //haveInverseFace = true;
+          theNew2OldFaces[ faceIndex ].first = 0;
+          newMesh->RemoveFreeElement( newFace );
+          //break;
+        }
+      }
+      // if ( haveInverseFace )
+      // {
+      //   newMesh->MoveNode( newNode, oldNode->X(), oldNode->Y(), oldNode->Z() );
+
+      //   for ( SMDS_ElemIteratorPtr fIt = newNode->GetInverseElementIterator(); fIt->more(); )
+      //   {
+      //     const SMDS_MeshElement* newFace = fIt->next();
+      //     if ( !SMESH_MeshAlgos::FaceNormal( newFace, normals[ newFace->GetID() ] ))
+      //       normals[i].SetCoord( 0,0,0 ); // TODO find norm by neighbors
+      //   }
+      // }
+    }
+    // mark all new nodes located closer than theOffset from theSrcMesh
+  }
+
+  // ==================================================
+  // find self-intersections of new faces and fix them
+  // ==================================================
+
+  std::unique_ptr< SMESH_ElementSearcher > fSearcher
+    ( SMESH_MeshAlgos::GetElementSearcher( *newMesh, tol ));
+
+  Intersector intersector( newMesh, tol, normals );
+
+  std::vector< const SMDS_MeshElement* > closeFaces;
+  std::vector< const SMDS_MeshNode* >    faceNodes;
+  Bnd_B3d faceBox;
+  for ( size_t iF = 1; iF < theNew2OldFaces.size(); ++iF )
+  {
+    const SMDS_MeshElement* newFace = theNew2OldFaces[iF].first;
+    if ( !newFace ) continue;
+    faceNodes.assign( newFace->begin_nodes(), newFace->end_nodes() );
+
+    bool isConcaveNode1 = false;
+    for ( size_t iN = 0; iN < faceNodes.size() && !isConcaveNode1; ++iN )
+      isConcaveNode1 = faceNodes[iN]->isMarked();
+
+    // get faces close to a newFace
+    closeFaces.clear();
+    faceBox.Clear();
+    for ( size_t i = 0; i < faceNodes.size(); ++i )
+      faceBox.Add( SMESH_NodeXYZ( faceNodes[i] ));
+    faceBox.Enlarge( tol );
+
+    fSearcher->GetElementsInBox( faceBox, SMDSAbs_Face, closeFaces );
+
+    // intersect the newFace with closeFaces
+
+    for ( size_t i = 0; i < closeFaces.size(); ++i )
+    {
+      const SMDS_MeshElement* closeFace = closeFaces[i];
+      if ( closeFace->GetID() <= newFace->GetID() )
+        continue; // this pair already treated
+
+      // do not intersect connected faces if they have no concave nodes
+      int nbCommonNodes = 0;
+      for ( size_t iN = 0; iN < faceNodes.size(); ++iN )
+        nbCommonNodes += ( closeFace->GetNodeIndex( faceNodes[iN] ) >= 0 );
+
+      if ( !isConcaveNode1 )
+      {
+        bool isConcaveNode2 = false;
+        for ( SMDS_ElemIteratorPtr nIt = closeFace->nodesIterator(); nIt->more(); )
+          if (( isConcaveNode2 = nIt->next()->isMarked() ))
+            break;
+
+        if ( !isConcaveNode2 && nbCommonNodes > 0 )
+          continue;
+      }
+
+      intersector.Cut( newFace, closeFace, nbCommonNodes );
+    }
+  }
+  intersector.MakeNewFaces( theNew2OldFaces, theNew2OldNodes, sign );
+
+  return newMesh;
+}
index 6afd6e03f0dcf519c863cd9daf353c895fccf2b2..16ab6b80570d9e687f740690e584e8429ee8ffbf 100644 (file)
@@ -268,14 +268,14 @@ int SMESH_Tree<BND_BOX,NB_CHILDREN>::getHeight(const bool full) const
   if ( isLeaf() )
     return 1;
 
-  int heigth = 0;
+  int height = 0;
   for (int i = 0; i<NB_CHILDREN; i++)
   {
     int h = myChildren[i]->getHeight( false );
-    if ( h > heigth )
-      heigth = h;
+    if ( h > height )
+      height = h;
   }
-  return heigth + 1;
+  return height + 1;
 }
 
 #endif
diff --git a/src/SMESHUtils/SMESH_Triangulate.cxx b/src/SMESHUtils/SMESH_Triangulate.cxx
new file mode 100644 (file)
index 0000000..6652aea
--- /dev/null
@@ -0,0 +1,341 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File      : SMESH_Triangulate.cxx
+// Created   : Thu Jan 18 18:00:13 2018
+// Author    : Edward AGAPOV (eap)
+
+// Extracted from ../DriverSTL/DriverSTL_W_SMDS_Mesh.cxx
+
+#include "SMESH_MeshAlgos.hxx"
+
+#include <Standard_ErrorHandler.hxx>
+#include <Standard_Failure.hxx>
+#include <gp_Ax2.hxx>
+
+using namespace SMESH_MeshAlgos;
+
+//================================================================================
+/*!
+ * \brief Initialization
+ */
+//================================================================================
+
+void Triangulate::PolyVertex::SetNodeAndNext( const SMDS_MeshNode* n,
+                                              PolyVertex&          v )
+{
+  _nxyz.Set( n );
+  _next = &v;
+  v._prev = this;
+}
+//================================================================================
+/*!
+ * \brief Remove self from a polygon
+ */
+//================================================================================
+
+Triangulate::PolyVertex* Triangulate::PolyVertex::Delete()
+{
+  _prev->_next = _next;
+  _next->_prev = _prev;
+  return _next;
+}
+
+//================================================================================
+/*!
+ * \brief Return nodes of a triangle
+ */
+//================================================================================
+
+void Triangulate::PolyVertex::GetTriaNodes( const SMDS_MeshNode** nodes) const
+{
+  nodes[0] = _prev->_nxyz._node;
+  nodes[1] =  this->_nxyz._node;
+  nodes[2] = _next->_nxyz._node;
+}
+
+//================================================================================
+/*!
+ * \brief Compute triangle area
+ */
+//================================================================================
+
+inline static double Area( const gp_XY& xy0, const gp_XY& xy1, const gp_XY& xy2 )
+{
+  gp_XY vPrev = xy0 - xy1;
+  gp_XY vNext = xy2 - xy1;
+  return vNext ^ vPrev;
+}
+
+//================================================================================
+/*!
+ * \brief Compute triangle area
+ */
+//================================================================================
+
+double Triangulate::PolyVertex::TriaArea() const
+{
+  return Area( _prev->_xy, this->_xy, _next->_xy );
+}
+
+//================================================================================
+/*!
+ * \brief Check if a vertex is inside a triangle
+ */
+//================================================================================
+
+bool Triangulate::PolyVertex::IsInsideTria( const PolyVertex* v )
+{
+  if ( this ->_nxyz == v->_nxyz ||
+       _prev->_nxyz == v->_nxyz ||
+       _next->_nxyz == v->_nxyz )
+    return false;
+
+  gp_XY p = _prev->_xy - v->_xy;
+  gp_XY t =  this->_xy - v->_xy;
+  gp_XY n = _next->_xy - v->_xy;
+  const double tol = -1e-12;
+  return (( p ^ t ) >= tol &&
+          ( t ^ n ) >= tol &&
+          ( n ^ p ) >= tol );
+  // return ( Area( _prev, this, v ) > 0 &&
+  //          Area( this, _next, v ) > 0 &&
+  //          Area( _next, _prev, v ) > 0 );
+}
+
+//================================================================================
+/*!
+ * \brief Triangulate a polygon. Assure correct orientation for concave polygons
+ */
+//================================================================================
+
+bool Triangulate::triangulate( std::vector< const SMDS_MeshNode*>& nodes,
+                               const size_t                        nbNodes )
+{
+  // connect nodes into a ring
+  _pv.resize( nbNodes );
+  for ( size_t i = 1; i < nbNodes; ++i )
+    _pv[i-1].SetNodeAndNext( nodes[i-1], _pv[i] );
+  _pv[ nbNodes-1 ].SetNodeAndNext( nodes[ nbNodes-1 ], _pv[0] );
+
+  // get a polygon normal
+  gp_XYZ normal(0,0,0), p0,v01,v02;
+  p0  = _pv[0]._nxyz;
+  v01 = _pv[1]._nxyz - p0;
+  for ( size_t i = 2; i < nbNodes; ++i )
+  {
+    v02 = _pv[i]._nxyz - p0;
+    normal += v01 ^ v02;
+    v01 = v02;
+  }
+  // project nodes to the found plane
+  gp_Ax2 axes;
+  try {
+    axes = gp_Ax2( p0, normal, v01 );
+  }
+  catch ( Standard_Failure ) {
+    return false;
+  }
+  for ( size_t i = 0; i < nbNodes; ++i )
+  {
+    gp_XYZ p = _pv[i]._nxyz - p0;
+    _pv[i]._xy.SetX( axes.XDirection().XYZ() * p );
+    _pv[i]._xy.SetY( axes.YDirection().XYZ() * p );
+  }
+
+  // in a loop, find triangles with positive area and having no vertices inside
+  int iN = 0, nbTria = nbNodes - 2;
+  nodes.reserve( nbTria * 3 );
+  const double minArea = 1e-6;
+  PolyVertex* v = &_pv[0], *vi;
+  int nbVertices = nbNodes, nbBadTria = 0, isGoodTria;
+  while ( nbBadTria < nbVertices )
+  {
+    if (( isGoodTria = v->TriaArea() > minArea ))
+    {
+      for ( vi = v->_next->_next;
+            vi != v->_prev;
+            vi = vi->_next )
+      {
+        if ( v->IsInsideTria( vi ))
+          break;
+      }
+      isGoodTria = ( vi == v->_prev );
+    }
+    if ( isGoodTria )
+    {
+      v->GetTriaNodes( &nodes[ iN ] );
+      iN += 3;
+      v = v->Delete();
+      if ( --nbVertices == 3 )
+      {
+        // last triangle remains
+        v->GetTriaNodes( &nodes[ iN ] );
+        return true;
+      }
+      nbBadTria = 0;
+    }
+    else
+    {
+      v = v->_next;
+      ++nbBadTria;
+    }
+  }
+
+  // the polygon is invalid; add triangles with positive area
+  nbBadTria = 0;
+  while ( nbBadTria < nbVertices )
+  {
+    isGoodTria = v->TriaArea() > minArea;
+    if ( isGoodTria )
+    {
+      v->GetTriaNodes( &nodes[ iN ] );
+      iN += 3;
+      v = v->Delete();
+      if ( --nbVertices == 3 )
+      {
+        // last triangle remains
+        v->GetTriaNodes( &nodes[ iN ] );
+        return true;
+      }
+      nbBadTria = 0;
+    }
+    else
+    {
+      v = v->_next;
+      ++nbBadTria;
+    }
+  }
+
+  // add all the rest triangles
+  while ( nbVertices >= 3 )
+  {
+    v->GetTriaNodes( &nodes[ iN ] );
+    iN += 3;
+    v = v->Delete();
+    --nbVertices;
+  }
+
+  return true;
+
+} // triangulate()
+
+//================================================================================
+/*!
+ * \brief Return nb triangles in a decomposed mesh face
+ *  \retval int - number of triangles
+ */
+//================================================================================
+
+int Triangulate::GetNbTriangles( const SMDS_MeshElement* face )
+{
+  // WARNING: counting triangles must be coherent with GetTriangles()
+  switch ( face->GetEntityType() )
+  {
+  case SMDSEntity_BiQuad_Triangle:
+  case SMDSEntity_BiQuad_Quadrangle:
+    return face->NbNodes() - 1;
+    // case SMDSEntity_Triangle:
+    // case SMDSEntity_Quad_Triangle:
+    // case SMDSEntity_Quadrangle:
+    // case SMDSEntity_Quad_Quadrangle:
+    // case SMDSEntity_Polygon:
+    // case SMDSEntity_Quad_Polygon:
+  default:
+    return face->NbNodes() - 2;
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Decompose a mesh face into triangles
+ *  \retval int - number of triangles
+ */
+//================================================================================
+
+int Triangulate::GetTriangles( const SMDS_MeshElement*             face,
+                               std::vector< const SMDS_MeshNode*>& nodes)
+{
+  if ( face->GetType() != SMDSAbs_Face )
+    return 0;
+
+  // WARNING: decomposing into triangles must be coherent with getNbTriangles()
+  int nbTria, i = 0, nbNodes = face->NbNodes();
+  SMDS_NodeIteratorPtr nIt = face->interlacedNodesIterator();
+  nodes.resize( nbNodes * 3 );
+  nodes[ i++ ] = nIt->next();
+  nodes[ i++ ] = nIt->next();
+
+  const SMDSAbs_EntityType type = face->GetEntityType();
+  switch ( type )
+  {
+  case SMDSEntity_BiQuad_Triangle:
+  case SMDSEntity_BiQuad_Quadrangle:
+
+    nbTria = ( type == SMDSEntity_BiQuad_Triangle ) ? 6 : 8;
+    nodes[ i++ ] = face->GetNode( nbTria );
+    for ( i = 3; i < 3*(nbTria-1); i += 3 )
+    {
+      nodes[ i+0 ] = nodes[ i-2 ];
+      nodes[ i+1 ] = nIt->next();
+      nodes[ i+2 ] = nodes[ 2 ];
+    }
+    nodes[ i+0 ] = nodes[ i-2 ];
+    nodes[ i+1 ] = nodes[ 0 ];
+    nodes[ i+2 ] = nodes[ 2 ];
+    break;
+
+  case SMDSEntity_Triangle:
+
+    nbTria = 1;
+    nodes[ i++ ] = nIt->next();
+    break;
+
+  default:
+
+    // case SMDSEntity_Quad_Triangle:
+    // case SMDSEntity_Quadrangle:
+    // case SMDSEntity_Quad_Quadrangle:
+    // case SMDSEntity_Polygon:
+    // case SMDSEntity_Quad_Polygon:
+
+    nbTria = nbNodes - 2;
+    while ( nIt->more() )
+      nodes[ i++ ] = nIt->next();
+
+    if ( nbTria > 1 && !triangulate( nodes, nbNodes ))
+    {
+      nIt = face->interlacedNodesIterator();
+      nodes[ 0 ] = nIt->next();
+      nodes[ 1 ] = nIt->next();
+      nodes[ 2 ] = nIt->next();
+      for ( i = 3; i < 3*nbTria; i += 3 )
+      {
+        nodes[ i+0 ] = nodes[ 0 ];
+        nodes[ i+1 ] = nodes[ i-1 ];
+        nodes[ i+2 ] = nIt->next();
+      }
+    }
+  }
+
+  return nbTria;
+}
diff --git a/src/SMESHUtils/SMESH_Triangulate.hxx b/src/SMESHUtils/SMESH_Triangulate.hxx
new file mode 100644 (file)
index 0000000..8734c4b
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File      : SMESH_Triangulate.hxx
+// Created   : Thu Jan 18 17:51:34 2018
+// Author    : Edward AGAPOV (eap)
+
+
+#ifndef __SMESH_Triangulate_HXX__
+#define __SMESH_Triangulate_HXX__
+
+/*!
+ * \brief Divide a mesh face into triangles
+ */
+class SMESHUtils_EXPORT SMESH_Triangulate
+{
+ public:
+
+  static int GetNbTriangles( const SMDS_MeshElement* face );
+
+  int GetTriangles( const SMDS_MeshElement*             face,
+                    std::vector< const SMDS_MeshNode*>& nodes);
+
+ private:
+
+  bool triangulate( std::vector< const SMDS_MeshNode*>& nodes, const size_t nbNodes );
+
+  struct PolyVertex;
+  std::vector< PolyVertex > _pv;
+};
+
+
+#endif
index 71e587caa6f566ecb4432640588176d0a7475bfc..b026cdd6bf8427c9a309ec25c97830915b6f1d53 100644 (file)
@@ -39,7 +39,10 @@ const char* SMESH::returnError(const char* txt)
 }
 
 // ------------------------------------------------------------------
+
 #include "SMESH_ComputeError.hxx"
+#include "SMDS_SetIterator.hxx"
+#include <boost/make_shared.hpp>
 
 #define _case2char(err) case err: return #err;
 
@@ -78,11 +81,31 @@ SMESH_ComputeErrorPtr SMESH_ComputeError::Worst( SMESH_ComputeErrorPtr er1,
   if ( !er1->IsKO() ) return er2;
   if ( !er2->IsKO() ) return er1;
   // both KO
-  bool hasInfo1 = er1->myComment.size() || !er1->myBadElements.empty();
-  bool hasInfo2 = er2->myComment.size() || !er2->myBadElements.empty();
+  bool hasInfo1 = er1->myComment.size() || er1->HasBadElems();
+  bool hasInfo2 = er2->myComment.size() || er2->HasBadElems();
   if ( er1->myName == er2->myName ||
        hasInfo1    != hasInfo2 )
     return hasInfo1 < hasInfo2 ? er2 : er1;
 
   return er1->myName == COMPERR_CANCELED ? er2 : er1;
 }
+
+// Return bad elements
+SMDS_ElemIteratorPtr SMESH_BadInputElements::getElements()
+{
+  typedef SMDS_SetIterator< const SMDS_MeshElement*,
+                            std::list< const SMDS_MeshElement* >::const_iterator> TIterator;
+  return boost::make_shared< TIterator >( myBadElements.begin(), myBadElements.end() );
+}
+
+// Temporary remove its elements before the mesh compacting
+void SMESH_BadInputElements::tmpClear()
+{
+  myBadElements.clear();
+}
+
+// Re-add elements after the mesh compacting
+void SMESH_BadInputElements::add( const SMDS_MeshElement* element )
+{
+  myBadElements.push_back( element );
+}
index dc74b070247dbd56726b7030b4641d3312a4e28e..9fbc5b076ade419dc7c865af26091a5a74b79c3b 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "SMESH_Utils.hxx"
 
+#include "SMDS_SetIterator.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include <gp_XYZ.hxx>
@@ -39,6 +40,8 @@
 #include <set>
 #include <cassert>
 
+#include <boost/make_shared.hpp>
+
 typedef std::map<const SMDS_MeshElement*,
                  std::list<const SMDS_MeshElement*>, TIDCompare > TElemOfElemListMap;
 typedef std::map<const SMDS_MeshElement*,
@@ -100,6 +103,14 @@ namespace SMESHUtils
   private:
     ArrayDeleter( const ArrayDeleter& );
   };
+
+  template < class ELEM_SET >
+  SMDS_ElemIteratorPtr elemSetIterator( const ELEM_SET& elements )
+  {
+    typedef SMDS_SetIterator
+      < SMDS_pElement, typename ELEM_SET::const_iterator> TSetIterator;
+    return boost::make_shared< TSetIterator >( elements.begin(), elements.end() );
+  }
 }
 
 //=======================================================================
@@ -127,6 +138,7 @@ struct SMESH_TLink: public NLink
     return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() );
   }
 };
+typedef SMESH_TLink SMESH_Link;
 
 //=======================================================================
 /*!
@@ -163,9 +175,13 @@ struct SMESH_TNodeXYZ : public gp_XYZ
     }
     return false;
   }
+  const SMDS_MeshNode* Node() const { return _node; }
   double Distance(const SMDS_MeshNode* n)       const { return (SMESH_TNodeXYZ( n )-*this).Modulus(); }
   double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); }
   bool operator==(const SMESH_TNodeXYZ& other)  const { return _node == other._node; }
+  bool operator!=(const SMESH_TNodeXYZ& other)  const { return _node != other._node; }
+  bool operator!() const { return !_node; }
+  const SMDS_MeshNode* operator->() const { return _node; }
 };
 typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
 
@@ -198,17 +214,12 @@ typedef std::vector< UVPtStruct > UVPtStructVec;
 
 // --------------------------------------------------------------------------------
 // class SMESH_SequenceOfElemPtr
-#include <NCollection_DefineSequence.hxx>
-
-class SMDS_MeshElement;
-
-typedef const SMDS_MeshElement* SMDS_MeshElementPtr;
-
-DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr)
 
+typedef std::vector< const SMDS_MeshElement* > SMESH_SequenceOfElemPtr;
 
 // --------------------------------------------------------------------------------
 // class SMESH_SequenceOfNode
+#include <NCollection_DefineSequence.hxx>
 typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
 
 DEFINE_SEQUENCE(SMESH_SequenceOfNode,
index 2bb789ab37364c982d7d8cf051976bd86163597b..b5183dbe7b14c9c54ad8ce8b211bc582686bb724 100644 (file)
@@ -21,7 +21,7 @@
 # additional include directories
 INCLUDE_DIRECTORIES(
   ${OMNIORB_INCLUDE_DIR}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${HDF5_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
@@ -44,7 +44,7 @@ INCLUDE_DIRECTORIES(
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${OMNIORB_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -70,11 +70,10 @@ SET(_link_LIBRARIES
   ${KERNEL_SalomeIDLKERNEL}
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_SalomeKernelHelpers}
-  ${CAS_TKCDF}
-  ${CAS_TKBO}
-  ${CAS_TKShHealing}
+  ${OpenCASCADE_ApplicationFramework_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   ${GEOM_GEOMClient}
-  ${GEOM_SalomeIDLGEOM}  
+  ${GEOM_SalomeIDLGEOM}
   SalomeIDLSMESH
   SMESHimpl
   SMDS
index aed61ba95ee2c267a97bd70cdadc7996e7f0d6bd..28b641e3a4f74a15bd8b2c51b3adc47dfe76f510 100644 (file)
@@ -5082,7 +5082,7 @@ bool _pyStringFamily::Add( const char* str )
 
     _strings.erase( itLess, ++itMore );
   }
-  else // to few string to make a family fot them
+  else // too few string to make a family for them
   {
     _strings.insert( itStr, str );
   }
@@ -5156,7 +5156,7 @@ int _pyStringFamily::isIn( const char* str )
       if (( len = itSub->isIn( str + itSub->_prefix.Length() )) >= 0 )
         return itSub->_prefix.Length() + len;
     }
-    else if ( cmp > 0 )
+    else if ( cmp < 0 )
       break;
   }
   if ( !_strings.empty() )
index bdf44dc4908d288304aa161f28a143cf7f080d9c..25f0c2c7faa0c680b485a26728beeae876271157 100644 (file)
@@ -85,7 +85,6 @@
 #include "MED_Factory.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_SpacePosition.hxx"
 #include "SMDS_VertexPosition.hxx"
@@ -179,7 +178,23 @@ PortableServer::ServantBase_var SMESH_Gen_i::GetServant( CORBA::Object_ptr theOb
     PortableServer::Servant aServant = GetPOA()->reference_to_servant( theObject );
     return aServant;
   }
-  catch (...) {
+  catch (PortableServer::POA::ObjectNotActive &ex)
+  {
+    INFOS("GetServant: ObjectNotActive");
+    return NULL;
+  }
+  catch (PortableServer::POA::WrongAdapter &ex)
+  {
+    INFOS("GetServant: WrongAdapter: OK when several servants used to build several mesh in parallel...");
+    return NULL;
+  }
+  catch (PortableServer::POA::WrongPolicy &ex)
+  {
+    INFOS("GetServant: WrongPolicy");
+    return NULL;
+  }
+  catch (...)
+  {
     INFOS( "GetServant - Unknown exception was caught!!!" );
     return NULL;
   }
@@ -1610,7 +1625,7 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr
           else {
             errStruct.algoName = error->myAlgo->GetName();
           }
-          errStruct.hasBadMesh = !error->myBadElements.empty();
+          errStruct.hasBadMesh = error->HasBadElems();
         }
       }
       error_array->length( nbErr );
@@ -1652,7 +1667,7 @@ SMESH_Gen_i::GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
       {
         // compute error
         SMESH_ComputeErrorPtr error = sm->GetComputeError();
-        if ( error && !error->myBadElements.empty())
+        if ( error && error->HasBadElems() )
         {
           typedef map<const SMDS_MeshElement*, int > TNode2LocalIDMap;
           typedef TNode2LocalIDMap::iterator         TNodeLocalID;
@@ -1662,8 +1677,10 @@ SMESH_Gen_i::GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
           list< TNodeLocalID > connectivity;
           int i, nbElements = 0, nbConnNodes = 0;
 
-          list<const SMDS_MeshElement*>::iterator elemIt  = error->myBadElements.begin();
-          list<const SMDS_MeshElement*>::iterator elemEnd = error->myBadElements.end();
+          const list<const SMDS_MeshElement*>& badElems =
+            static_cast<SMESH_BadInputElements*>( error.get() )->myBadElements;
+          list<const SMDS_MeshElement*>::const_iterator elemIt  = badElems.begin();
+          list<const SMDS_MeshElement*>::const_iterator elemEnd = badElems.end();
           for ( ; elemIt != elemEnd; ++elemIt, ++nbElements )
           {
             SMDS_ElemIteratorPtr nIt = (*elemIt)->nodesIterator();
@@ -1690,7 +1707,7 @@ SMESH_Gen_i::GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
           }
           // fill element types
           result->elementTypes.length( nbElements );
-          for ( i = 0, elemIt = error->myBadElements.begin(); i <nbElements; ++i, ++elemIt )
+          for ( i = 0, elemIt = badElems.begin(); i <nbElements; ++i, ++elemIt )
           {
             const SMDS_MeshElement* elem = *elemIt;
             result->elementTypes[i].SMDS_ElementType = (SMESH::ElementType) elem->GetType();
@@ -2443,281 +2460,240 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
                                CORBA::Boolean                theCommonGroups)
   throw ( SALOME::SALOME_Exception )
 {
-  typedef list<SMESH::SMESH_Group_var> TListOfNewGroups;
-  typedef map< pair<string, SMESH::ElementType>, TListOfNewGroups > TGroupsMap;
-
-  TPythonDump* pPythonDump = new TPythonDump;
-  TPythonDump& aPythonDump = *pPythonDump; // prevent dump of called methods
+  std::unique_ptr< TPythonDump > pPythonDump( new TPythonDump );
+  TPythonDump& pythonDump = *pPythonDump; // prevent dump of called methods
 
   // create mesh
-  SMESH::SMESH_Mesh_var aNewMesh = CreateEmptyMesh();
-
-  if ( aNewMesh->_is_nil() )
-    return aNewMesh._retn();
+  SMESH::SMESH_Mesh_var newMesh = CreateEmptyMesh();
+  SMESH_Mesh_i*         newImpl = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
+  if ( !newImpl ) return newMesh._retn();
 
-  SMESH_Mesh_i* aNewImpl = SMESH::DownCast<SMESH_Mesh_i*>( aNewMesh );
-  if ( !aNewImpl )
-    return aNewMesh._retn();
+  ::SMESH_Mesh&   locMesh = newImpl->GetImpl();
+  SMESHDS_Mesh* newMeshDS = locMesh.GetMeshDS();
 
-  ::SMESH_Mesh& aLocMesh = aNewImpl->GetImpl();
-  SMESHDS_Mesh* aNewMeshDS = aLocMesh.GetMeshDS();
+  typedef std::list<SMESH::SMESH_Group_var>          TListOfNewGroups;
+  typedef std::pair<string, SMESH::ElementType >     TNameAndType;
+  typedef std::map< TNameAndType, TListOfNewGroups > TGroupsMap;
+  TGroupsMap       groupsMap;
+  TListOfNewGroups listOfNewGroups;
 
-  TGroupsMap aGroupsMap;
-  TListOfNewGroups aListOfNewGroups;
-  ::SMESH_MeshEditor aNewEditor(&aLocMesh);
-  SMESH::ListOfGroups_var aListOfGroups;
-
-  ::SMESH_MeshEditor::ElemFeatures  elemType;
-  std::vector<const SMDS_MeshNode*> aNodesArray;
+  ::SMESH_MeshEditor               newEditor( &locMesh );
+  ::SMESH_MeshEditor::ElemFeatures elemType;
 
   // loop on sub-meshes
-  for ( CORBA::ULong i = 0; i < theMeshesArray.length(); i++)
+  for ( CORBA::ULong i = 0; i < theMeshesArray.length(); i++ )
   {
     if ( CORBA::is_nil( theMeshesArray[i] )) continue;
-    SMESH::SMESH_Mesh_var anInitMesh = theMeshesArray[i]->GetMesh();
-    if ( anInitMesh->_is_nil() ) continue;
-    SMESH_Mesh_i* anInitImpl = SMESH::DownCast<SMESH_Mesh_i*>( anInitMesh );
-    if ( !anInitImpl ) continue;
-    anInitImpl->Load();
-
-    //::SMESH_Mesh& aInitLocMesh = anInitImpl->GetImpl();
-    //SMESHDS_Mesh* anInitMeshDS = aInitLocMesh.GetMeshDS();
+    SMESH::SMESH_Mesh_var initMesh = theMeshesArray[i]->GetMesh();
+    SMESH_Mesh_i*         initImpl = SMESH::DownCast<SMESH_Mesh_i*>( initMesh );
+    if ( !initImpl ) continue;
+    initImpl->Load();
+
+    // assure that IDs increments by one during iteration
+    ::SMESH_Mesh& initLocMesh = initImpl->GetImpl();
+    SMESHDS_Mesh*  initMeshDS = initLocMesh.GetMeshDS();
+    if ( initMeshDS->MaxNodeID()    > initMeshDS->NbNodes() ||
+         initMeshDS->MaxElementID() > initMeshDS->NbElements() )
+    {
+      initMeshDS->Modified();
+      initMeshDS->CompactMesh();
+    }
 
     // remember nb of elements before filling in
-    SMESH::long_array_var prevState =  aNewMesh->GetNbElementsByType();
+    SMESH::long_array_var prevState =  newMesh->GetNbElementsByType();
 
-    typedef std::map<const SMDS_MeshElement*, const SMDS_MeshElement*, TIDCompare > TEEMap;
-    TEEMap elemsMap, nodesMap;
+    // copy nodes
+
+    std::vector< const SMDS_MeshElement* > newNodes( initMeshDS->NbNodes() + 1, 0 );
+    SMDS_ElemIteratorPtr elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::NODE );
+    while ( elemIt->more() )
+    {
+      SMESH_NodeXYZ node = elemIt->next();
+      newNodes[ node->GetID() ] = newMeshDS->AddNode( node.X(), node.Y(), node.Z() );
+    }
 
-    // loop on elements of a sub-mesh
-    SMDS_ElemIteratorPtr itElems = anInitImpl->GetElements( theMeshesArray[i], SMESH::ALL );
-    const SMDS_MeshElement* anElem;
-    const SMDS_MeshElement* aNewElem;
-    const SMDS_MeshNode*    aNode;
-    const SMDS_MeshNode*    aNewNode;
-    int anElemNbNodes;
+    // copy elements
 
-    while ( itElems->more() )
+    std::vector< const SMDS_MeshElement* > newElems( initMeshDS->NbElements() + 1, 0 );
+    elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::ALL );
+    while ( elemIt->more() )
     {
-      anElem = itElems->next();
-      anElemNbNodes = anElem->NbNodes();
-      aNodesArray.resize( anElemNbNodes );
+      const SMDS_MeshElement* elem = elemIt->next();
+      elemType.myNodes.resize( elem->NbNodes() );
 
-      // loop on nodes of an element
-      SMDS_ElemIteratorPtr itNodes = anElem->nodesIterator();
+      SMDS_NodeIteratorPtr itNodes = elem->nodeIterator();
       for ( int k = 0; itNodes->more(); k++)
       {
-        aNode = static_cast<const SMDS_MeshNode*>( itNodes->next() );
-        TEEMap::iterator n2nnIt = nodesMap.find( aNode );
-        if ( n2nnIt == nodesMap.end() )
-        {
-          aNewNode = aNewMeshDS->AddNode(aNode->X(), aNode->Y(), aNode->Z());
-          nodesMap.insert( make_pair( aNode, aNewNode ));
-        }
-        else
-        {
-          aNewNode = static_cast<const SMDS_MeshNode*>( n2nnIt->second );
-        }
-        aNodesArray[k] = aNewNode;
+        const SMDS_MeshNode* node = itNodes->next();
+        elemType.myNodes[ k ] = static_cast< const SMDS_MeshNode*> ( newNodes[ node->GetID() ]);
       }
 
       // creates a corresponding element on existent nodes in new mesh
-      if ( anElem->GetType() == SMDSAbs_Node )
-        aNewElem = 0;
-      else
-        aNewElem =
-          aNewEditor.AddElement( aNodesArray, elemType.Init( anElem, /*basicOnly=*/false ));
-
-      if ( aNewElem )
-        elemsMap.insert( make_pair( anElem, aNewElem ));
-
-    } //elems loop
-
-    aNewEditor.ClearLastCreated(); // forget the history
+      newElems[ elem->GetID() ] =
+        newEditor.AddElement( elemType.myNodes, elemType.Init( elem, /*basicOnly=*/false ));
+    }
+    newEditor.ClearLastCreated(); // forget the history
 
 
     // create groups of just added elements
-    SMESH::SMESH_Group_var aNewGroup;
-    SMESH::ElementType aGroupType;
+    SMESH::SMESH_Group_var newGroup;
+    SMESH::ElementType     groupType;
     if ( theCommonGroups )
     {
-      SMESH::long_array_var curState = aNewMesh->GetNbElementsByType();
+      // type names
+      const char* typeNames[] = { "All","Nodes","Edges","Faces","Volumes","0DElems","Balls" };
+      { // check of typeNames: compilation failure mains that NB_ELEMENT_TYPES changed:
+        const int nbNames = sizeof(typeNames) / sizeof(const char*);
+        int _assert[( nbNames == SMESH::NB_ELEMENT_TYPES ) ? 2 : -1 ]; _assert[0]=_assert[1]=0;
+      }
+
+      SMESH::long_array_var curState = newMesh->GetNbElementsByType();
 
-      for( aGroupType = SMESH::NODE;
-           aGroupType < SMESH::NB_ELEMENT_TYPES;
-           aGroupType = (SMESH::ElementType)( aGroupType + 1 ))
+      for( groupType = SMESH::NODE;
+           groupType < SMESH::NB_ELEMENT_TYPES;
+           groupType = (SMESH::ElementType)( groupType + 1 ))
       {
-        if ( curState[ aGroupType ] <= prevState[ aGroupType ])
-          continue;
+        if ( curState[ groupType ] <= prevState[ groupType ])
+          continue; // no elements of groupType added from the i-th mesh
 
         // make a group name
-        const char* typeNames[] = { "All","Nodes","Edges","Faces","Volumes","0DElems","Balls" };
-        { // check of typeNames: compilation failure mains that NB_ELEMENT_TYPES changed:
-          const int nbNames = sizeof(typeNames) / sizeof(const char*);
-          int _assert[( nbNames == SMESH::NB_ELEMENT_TYPES ) ? 2 : -1 ]; _assert[0]=_assert[1]=0;
-        }
-        string groupName = "Gr";
-        SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( theMeshesArray[i] );
-        if ( aMeshSObj ) {
-          CORBA::String_var name = aMeshSObj->GetName();
+        std::string groupName = "Gr";
+        SALOMEDS::SObject_wrap meshSO = ObjectToSObject( theMeshesArray[i] );
+        if ( meshSO ) {
+          CORBA::String_var name = meshSO->GetName();
           groupName += name;
         }
         groupName += "_";
-        groupName += typeNames[ aGroupType ];
+        groupName += typeNames[ groupType ];
 
         // make and fill a group
-        TEEMap & e2neMap = ( aGroupType == SMESH::NODE ) ? nodesMap : elemsMap;
-        aNewGroup = aNewImpl->CreateGroup( aGroupType, groupName.c_str() );
-        if ( SMESH_Group_i* grp_i = SMESH::DownCast<SMESH_Group_i*>( aNewGroup ))
+        newGroup = newImpl->CreateGroup( groupType, groupName.c_str() );
+        std::vector< const SMDS_MeshElement* > & elemVec =
+          ( groupType == SMESH::NODE ) ? newNodes : newElems;
+        if ( SMESH_Group_i* grp_i = SMESH::DownCast<SMESH_Group_i*>( newGroup ))
         {
           if ( SMESHDS_Group* grpDS = dynamic_cast<SMESHDS_Group*>( grp_i->GetGroupDS() ))
           {
-            TEEMap::iterator e2neIt = e2neMap.begin();
-            for ( ; e2neIt != e2neMap.end(); ++e2neIt )
+            for ( size_t j = 0; j < elemVec.size(); ++j )
             {
-              aNewElem = e2neIt->second;
-              if ( aNewElem->GetType() == grpDS->GetType() )
-              {
-                grpDS->Add( aNewElem );
-
-                if ( prevState[ aGroupType ]++ >= curState[ aGroupType ] )
-                  break;
-              }
+              if ( elemVec[j] && elemVec[j]->GetType() == grpDS->GetType() )
+                grpDS->Add( elemVec[j] );
             }
           }
         }
-        aListOfNewGroups.clear();
-        aListOfNewGroups.push_back(aNewGroup);
-        aGroupsMap.insert(make_pair( make_pair(groupName, aGroupType), aListOfNewGroups ));
+        listOfNewGroups.clear();
+        listOfNewGroups.push_back( newGroup );
+        groupsMap.insert( std::make_pair( TNameAndType( groupName, groupType ),
+                                          listOfNewGroups ));
       }
     }
 
-    if ( SMESH_Mesh_i* anSrcImpl = SMESH::DownCast<SMESH_Mesh_i*>( theMeshesArray[i] ))
+    if ( SMESH_Mesh_i* initImpl = SMESH::DownCast<SMESH_Mesh_i*>( theMeshesArray[i] ))
     {
-      // copy orphan nodes
-      if ( anSrcImpl->NbNodes() > (int)nodesMap.size() )
-      {
-        SMDS_ElemIteratorPtr itNodes = anInitImpl->GetElements( theMeshesArray[i], SMESH::NODE );
-        while ( itNodes->more() )
-        {
-          const SMDS_MeshNode* aNode = static_cast< const SMDS_MeshNode* >( itNodes->next() );
-          if ( aNode->NbInverseElements() == 0 )
-          {
-            aNewNode = aNewMeshDS->AddNode(aNode->X(), aNode->Y(), aNode->Z());
-            nodesMap.insert( make_pair( aNode, aNewNode ));
-          }
-        }
-      }
-
       // copy groups
 
-      SMESH::SMESH_GroupBase_ptr aGroup;
-      CORBA::String_var aGroupName;
-      SMESH::long_array_var anNewIDs = new SMESH::long_array();
+      SMESH::SMESH_GroupBase_ptr group;
+      CORBA::String_var          groupName;
+      SMESH::long_array_var newIDs = new SMESH::long_array();
 
       // loop on groups of a source mesh
-      aListOfGroups = anSrcImpl->GetGroups();
-      for ( CORBA::ULong iG = 0; iG < aListOfGroups->length(); iG++ )
+      SMESH::ListOfGroups_var listOfGroups = initImpl->GetGroups();
+      for ( CORBA::ULong iG = 0; iG < listOfGroups->length(); iG++ )
       {
-        aGroup = aListOfGroups[iG];
-        aGroupType = aGroup->GetType();
-        aGroupName = aGroup->GetName();
-        string aName = aGroupName.in();
+        group     = listOfGroups[iG];
+        groupType = group->GetType();
+        groupName = group->GetName();
+        std::string name = groupName.in();
 
         // convert a list of IDs
-        anNewIDs->length( aGroup->Size() );
-        TEEMap & e2neMap = ( aGroupType == SMESH::NODE ) ? nodesMap : elemsMap;
-        SMDS_ElemIteratorPtr itGrElems = anSrcImpl->GetElements( aGroup, SMESH::ALL );
-        int iElem = 0;
+        newIDs->length( group->Size() );
+        std::vector< const SMDS_MeshElement* > & elemVec =
+          ( groupType == SMESH::NODE ) ? newNodes : newElems;
+        SMDS_ElemIteratorPtr itGrElems = initImpl->GetElements( group, SMESH::ALL );
+        int nbElems = 0;
         while ( itGrElems->more() )
         {
-          anElem = itGrElems->next();
-          TEEMap::iterator e2neIt = e2neMap.find( anElem );
-          if ( e2neIt != e2neMap.end() )
-            anNewIDs[ iElem++ ] = e2neIt->second->GetID();
+          const SMDS_MeshElement*    elem = itGrElems->next();
+          const SMDS_MeshElement* newElem = elemVec[ elem->GetID() ];
+          if ( newElem )
+            newIDs[ nbElems++ ] = newElem->GetID();
         }
-        anNewIDs->length( iElem );
+        newIDs->length( nbElems );
 
-        // check a current group name and type don't have identical ones in final mesh
-        aListOfNewGroups.clear();
-        TGroupsMap::iterator anIter = aGroupsMap.find( make_pair( aName, aGroupType ));
-        if ( anIter == aGroupsMap.end() ) {
+        // check that a current group name and type don't have identical ones in final mesh
+        listOfNewGroups.clear();
+        TNameAndType nameAndType( name, groupType );
+        TGroupsMap::iterator anIter = groupsMap.find( nameAndType );
+        if ( anIter == groupsMap.end() )
+        {
           // add a new group in the mesh
-          aNewGroup = aNewImpl->CreateGroup( aGroupType, aGroupName.in() );
-          // add elements into new group
-          aNewGroup->Add( anNewIDs );
+          newGroup = newImpl->CreateGroup( groupType, groupName.in() );
+          newGroup->Add( newIDs );
 
-          aListOfNewGroups.push_back(aNewGroup);
-          aGroupsMap.insert(make_pair( make_pair(aName, aGroupType), aListOfNewGroups ));
+          listOfNewGroups.push_back( newGroup );
+          groupsMap.insert( std::make_pair( nameAndType, listOfNewGroups ));
         }
-
-        else if ( theUniteIdenticalGroups ) {
+        else if ( theUniteIdenticalGroups )
+        {
           // unite identical groups
           TListOfNewGroups& aNewGroups = anIter->second;
-          aNewGroups.front()->Add( anNewIDs );
+          aNewGroups.front()->Add( newIDs );
         }
-
-        else {
+        else
+        {
           // rename identical groups
-          aNewGroup = aNewImpl->CreateGroup(aGroupType, aGroupName.in());
-          aNewGroup->Add( anNewIDs );
+          newGroup = newImpl->CreateGroup( groupType, groupName );
+          newGroup->Add( newIDs );
 
-          TListOfNewGroups& aNewGroups = anIter->second;
-          string aNewGroupName;
-          if (aNewGroups.size() == 1) {
-            aNewGroupName = aName + "_1";
-            aNewGroups.front()->SetName(aNewGroupName.c_str());
+          TListOfNewGroups& newGroups = anIter->second;
+          std::string newGroupName;
+          if ( newGroups.size() == 1 )
+          {
+            newGroupName = name + "_1";
+            newGroups.front()->SetName( newGroupName.c_str() );
           }
-          char aGroupNum[128];
-          sprintf(aGroupNum, "%u", (unsigned int)aNewGroups.size()+1);
-          aNewGroupName = aName + "_" + string(aGroupNum);
-          aNewGroup->SetName(aNewGroupName.c_str());
-          aNewGroups.push_back(aNewGroup);
+          newGroupName = name + "_" + SMESH_Comment( newGroups.size() + 1 );
+          newGroup->SetName( newGroupName.c_str() );
+          newGroups.push_back( newGroup );
         }
-      } //groups loop
+      } // loop on groups
     } // if an IDSource is a mesh
   } //meshes loop
 
-  if (theMergeNodesAndElements) // merge nodes
+  if ( theMergeNodesAndElements ) // merge nodes
   {
-    TIDSortedNodeSet aMeshNodes; // no input nodes
-    SMESH_MeshEditor::TListOfListOfNodes aGroupsOfNodes;
-    aNewEditor.FindCoincidentNodes( aMeshNodes, theMergeTolerance, aGroupsOfNodes,
-                                    /*SeparateCornersAndMedium=*/ false );
-    aNewEditor.MergeNodes( aGroupsOfNodes );
+    TIDSortedNodeSet meshNodes; // no input nodes == treat all
+    SMESH_MeshEditor::TListOfListOfNodes groupsOfNodes;
+    newEditor.FindCoincidentNodes( meshNodes, theMergeTolerance, groupsOfNodes,
+                                   /*SeparateCornersAndMedium=*/ false );
+    newEditor.MergeNodes( groupsOfNodes );
     // merge elements
-    aNewEditor.MergeEqualElements();
+    newEditor.MergeEqualElements();
   }
 
   // Update Python script
-  aPythonDump << aNewMesh << " = " << this << "."
-              << ( theCommonGroups ? "ConcatenateWithGroups" : "Concatenate" )
-              << "([";
-  for ( CORBA::ULong i = 0; i < theMeshesArray.length(); i++) {
-    if (i > 0) aPythonDump << ", ";
-    aPythonDump << theMeshesArray[i];
-  }
-  aPythonDump << "], ";
-  aPythonDump << theUniteIdenticalGroups << ", "
-              << theMergeNodesAndElements << ", "
-              << TVar( theMergeTolerance ) << ")";
+  pythonDump << newMesh << " = " << this
+             << "." << ( theCommonGroups ? "ConcatenateWithGroups" : "Concatenate" ) << "("
+             << theMeshesArray << ", "
+             << theUniteIdenticalGroups << ", "
+             << theMergeNodesAndElements << ", "
+             << TVar( theMergeTolerance ) << ")";
 
-  delete pPythonDump; // enable python dump from GetGroups()
+  pPythonDump.reset(); // enable python dump from GetGroups()
 
   // 0020577: EDF 1164 SMESH: Bad dump of concatenate with create common groups
-  if ( !aNewMesh->_is_nil() )
+  if ( !newMesh->_is_nil() )
   {
-    SMESH::ListOfGroups_var groups = aNewMesh->GetGroups();
+    SMESH::ListOfGroups_var groups = newMesh->GetGroups();
   }
 
   // IPAL21468 Change icon of compound because it need not be computed.
-  SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( aNewMesh );
-  SetPixMap( aMeshSObj, "ICON_SMESH_TREE_MESH" );
+  SALOMEDS::SObject_wrap meshSO = ObjectToSObject( newMesh );
+  SetPixMap( meshSO, "ICON_SMESH_TREE_MESH" );
 
-  if (aNewMeshDS)
-    aNewMeshDS->Modified();
+  newMeshDS->Modified();
 
-  return aNewMesh._retn();
+  return newMesh._retn();
 }
 
 //================================================================================
@@ -3144,8 +3120,9 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
           if ( !myHyp->_is_nil() ) {
             SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
             if ( myImpl ) {
-              string hypname = string( myHyp->GetName() );
-              string libname = string( myHyp->GetLibName() );
+              CORBA::String_var hn = myHyp->GetName(), ln = myHyp->GetLibName();
+              std::string hypname = hn.in();
+              std::string libname = ln.in();
               // BUG SWP13062
               // Needs for save crossplatform libname, i.e. parth of name ( ".dll" for
               // WIN32 and ".so" for X-system) must be deleted
@@ -3157,13 +3134,13 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               // PAL17753 (Regression: missing hypothesis in restored study)
               // "lib" also should be removed from the beginning
               //if( libname_len > 3 )
-                //libname.resize( libname_len - 3 );
+              //libname.resize( libname_len - 3 );
               if( libname_len > 6 )
                 libname = libname.substr( 3, libname_len - 3 - 3 );
 #endif
-              CORBA::String_var objStr = GetORB()->object_to_string( anObject );
-              int    id      = myStudyContext->findId( string( objStr.in() ) );
-              string hypdata = string( myImpl->SaveTo() );
+              CORBA::String_var  objStr = GetORB()->object_to_string( anObject );
+              CORBA::String_var hypdata = myImpl->SaveTo();
+              int                    id = myStudyContext->findId( string( objStr.in() ));
 
               // for each hypothesis create HDF group basing on its id
               char hypGrpName[30];
@@ -3183,10 +3160,10 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
               aDataset->CloseOnDisk();
               // --> persistent data of hypothesis
-              aSize[ 0 ] = hypdata.length() + 1;
+              aSize[ 0 ] = strlen( hypdata.in() ) + 1;
               aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
               aDataset->CreateOnDisk();
-              aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
+              aDataset->WriteOnDisk( ( char* )( hypdata.in() ) );
               aDataset->CloseOnDisk();
               // close hypothesis HDF group
               aGroup->CloseOnDisk();
@@ -3213,8 +3190,9 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
           if ( !myHyp->_is_nil() ) {
             SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
             if ( myImpl ) {
-              string hypname = string( myHyp->GetName() );
-              string libname = string( myHyp->GetLibName() );
+              CORBA::String_var hn = myHyp->GetName(), ln = myHyp->GetLibName();
+              std::string hypname = hn.in();
+              std::string libname = ln.in();
               // BUG SWP13062
               // Needs for save crossplatform libname, i.e. parth of name ( ".dll" for
               // WIN32 and ".so" for X-system) must be deleted
@@ -3226,13 +3204,13 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               // PAL17753 (Regression: missing hypothesis in restored study)
               // "lib" also should be removed from the beginning
               //if( libname_len > 3 )
-                //libname.resize( libname_len - 3 );
+              //libname.resize( libname_len - 3 );
               if( libname_len > 6 )
                 libname = libname.substr( 3, libname_len - 3 - 3 );
 #endif
-              CORBA::String_var objStr = GetORB()->object_to_string( anObject );
-              int    id      = myStudyContext->findId( string( objStr.in() ) );
-              string hypdata = string( myImpl->SaveTo() );
+              CORBA::String_var  objStr = GetORB()->object_to_string( anObject );
+              CORBA::String_var hypdata = myImpl->SaveTo();
+              int                    id = myStudyContext->findId( string( objStr.in() ) );
 
               // for each algorithm create HDF group basing on its id
               char hypGrpName[30];
@@ -3252,10 +3230,10 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
               aDataset->CloseOnDisk();
               // --> persistent data of algorithm
-              aSize[0] = hypdata.length() + 1;
+              aSize[0] = strlen( hypdata.in() ) + 1;
               aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
               aDataset->CreateOnDisk();
-              aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
+              aDataset->WriteOnDisk( ( char* )( hypdata.in() ));
               aDataset->CloseOnDisk();
               // close algorithm HDF group
               aGroup->CloseOnDisk();
@@ -3337,13 +3315,14 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               SALOMEDS::SObject_wrap myShape;
               bool ok = myRef->ReferencedObject( myShape.inout() );
               if ( ok ) {
-                shapeRefFound = (! CORBA::is_nil( myShape->GetObject() ));
-                string myRefOnObject = myShape->GetID();
-                if ( shapeRefFound && myRefOnObject.length() > 0 ) {
-                  aSize[ 0 ] = myRefOnObject.length() + 1;
+                CORBA::Object_var shapeObj = myShape->GetObject();
+                shapeRefFound = (! CORBA::is_nil( shapeObj ));
+                CORBA::String_var myRefOnObject = myShape->GetID();
+                if ( shapeRefFound && myRefOnObject.in()[0] ) {
+                  aSize[ 0 ] = strlen( myRefOnObject.in() ) + 1;
                   aDataset = new HDFdataset( "Ref on shape", aTopGroup, HDF_STRING, aSize, 1 );
                   aDataset->CreateOnDisk();
-                  aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                  aDataset->WriteOnDisk( ( char* )( myRefOnObject.in() ) );
                   aDataset->CloseOnDisk();
                 }
               }
@@ -3352,7 +3331,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             // write applied hypotheses if exist
             SALOMEDS::SObject_wrap myHypBranch;
             found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch.inout() );
-            if ( found && !shapeRefFound && hasShape) { // remove applied hyps
+            if ( found && !shapeRefFound && hasShape ) { // remove applied hyps
               aStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
             }
             if ( found && (shapeRefFound || !hasShape) ) {
@@ -3689,8 +3668,8 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
 
                     // For each group, create a dataset named "Group <group_persistent_id>"
                     // and store the group's user name into it
-                    const char* grpName = aGrpBaseDS->GetStoreName();
-                    char* aUserName = myGroupImpl->GetName();
+                    const char*         grpName = aGrpBaseDS->GetStoreName();
+                    CORBA::String_var aUserName = myGroupImpl->GetName();
                     aSize[ 0 ] = strlen( aUserName ) + 1;
 
                     aDataset = new HDFdataset( grpName, aGroup, HDF_STRING, aSize, 1 );
@@ -3728,14 +3707,14 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                           mySubRef->ReferencedObject( myShape.inout() ) &&
                           !CORBA::is_nil( myShape->GetObject() ))
                       {
-                        string myRefOnObject = myShape->GetID();
-                        if ( myRefOnObject.length() > 0 ) {
+                        CORBA::String_var myRefOnObject = myShape->GetID();
+                        if ( myRefOnObject.in()[0] ) {
                           char aRefName[ 30 ];
                           sprintf( aRefName, "Ref on shape %d", anId);
-                          aSize[ 0 ] = myRefOnObject.length() + 1;
+                          aSize[ 0 ] = strlen( myRefOnObject.in() ) + 1;
                           aDataset = new HDFdataset(aRefName, aGroup, HDF_STRING, aSize, 1);
                           aDataset->CreateOnDisk();
-                          aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                          aDataset->WriteOnDisk( ( char* )( myRefOnObject.in() ));
                           aDataset->CloseOnDisk();
                         }
                       }
@@ -3883,8 +3862,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                       // Position
                       const SMDS_PositionPtr pos = node->GetPosition();
                       if ( onFace ) { // on FACE
-                        const SMDS_FacePosition* fPos =
-                          dynamic_cast<const SMDS_FacePosition*>( pos );
+                        SMDS_FacePositionPtr fPos = pos;
                         if ( fPos ) {
                           aUPos[ iNode ] = fPos->GetUParameter();
                           aVPos[ iNode ] = fPos->GetVParameter();
@@ -3894,8 +3872,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                           nbNodes--;
                       }
                       else { // on EDGE
-                        const SMDS_EdgePosition* ePos =
-                          dynamic_cast<const SMDS_EdgePosition*>( pos );
+                        SMDS_EdgePositionPtr ePos = pos;
                         if ( ePos ) {
                           aUPos[ iNode ] = ePos->GetUParameter();
                           iNode++;
@@ -4569,6 +4546,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                     myStudyContext->mapOldToNew( subid, newSubId );
                   }
                 }
+                delete [] refFromFile;
               }
 
               if ( aSubMesh->_is_nil() )
@@ -4603,6 +4581,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                           myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
                       }
                     }
+                    delete [] refFromFile;
                   }
                 }
                 // close "applied algorithms" HDF group
@@ -4638,6 +4617,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                           myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
                       }
                     }
+                    delete [] refFromFile;
                   }
                 }
                 // close "APPLIED HYPOTHESES" hdf group
@@ -4719,6 +4699,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                       aShape = GeomObjectToShape( aShapeObject );
                   }
                 }
+                delete [] refFromFile;
               }
               // Try to read a filter of SMESH_GroupOnFilter
               SMESH::Filter_var filter;
@@ -4737,12 +4718,14 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                   predicate = SMESH_GroupOnFilter_i::GetPredicate( filter );
                   filters.push_back( filter );
                 }
+                delete [] persistStr;
               }
 
               // Create group servant
               SMESH::ElementType type = (SMESH::ElementType)(ii - GetNodeGroupsTag() + 1);
               SMESH::SMESH_GroupBase_var aNewGroup = SMESH::SMESH_GroupBase::_duplicate
                 ( myNewMeshImpl->createGroup( type, nameFromFile, aShape, predicate ) );
+              delete [] nameFromFile;
               // Obtain a SMESHDS_Group object
               if ( aNewGroup->_is_nil() )
                 continue;
@@ -4781,6 +4764,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                 aDataset->CloseOnDisk();
                 Quantity_Color aColor( anRGB[0], anRGB[1], anRGB[2], Quantity_TOC_RGB );
                 aGroupBaseDS->SetColor( aColor );
+                delete [] anRGB;
               }
             }
           }
@@ -4798,7 +4782,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
       }
 
       // read Sub-Mesh ORDER if any
-      if( aTopGroup->ExistInternalObject( "Mesh Order" ) ) {
+      if ( aTopGroup->ExistInternalObject( "Mesh Order" )) {
         aDataset = new HDFdataset( "Mesh Order", aTopGroup );
         aDataset->OpenOnDisk();
         size = aDataset->GetSize();
@@ -4814,6 +4798,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
             anOrderIds.back().push_back(smIDs[ i ]);
 
         myNewMeshImpl->GetImpl().SetMeshOrder( anOrderIds );
+        delete [] smIDs;
       }
     } // loop on meshes
 
index a0667465611147aab0f9b9af9bea00c3f6201736..1cc0ae4aa44d5172994d06c617c222c5d1064b1a 100644 (file)
@@ -117,10 +117,7 @@ private:
   // get next free object identifier
   int getNextId()
   {
-    int id = 1;
-    while( mapIdToIOR.IsBound( id ) )
-      id++;
-    return id;
+    return mapIdToIOR.Extent() + 1;
   }
 
   TInt2StringMap mapIdToIOR; // persistent-to-transient map
index 6b3da78a1efcc5e3c0909a379c9bd534f64de8b7..e1499f8a7ccc4e05c2221cb710382efe092d0c7f 100644 (file)
@@ -308,10 +308,10 @@ static SALOMEDS::SObject_ptr publish(CORBA::Object_ptr     theIOR,
     if ( !sameIOR )
     {
       iorAttr->SetValue( objStr.in() );
-      // UnRegister() !!!
-      SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
-      if ( !genObj->_is_nil() )
-        genObj->UnRegister();
+      // UnRegister() !!! --> No: random problems when meshing in parallel (yacs foreach) in distributed python scripts
+//      SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
+//      if ( !genObj->_is_nil() )
+//        genObj->UnRegister();
     }
   }
 
@@ -499,7 +499,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::SObject_ptr theSObje
   // Publishing a hypothesis or algorithm
   SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( theIOR );
   if ( aSO->_is_nil() && !aHyp->_is_nil() )
-    aSO = PublishHypothesis( aHyp );
+    aSO = PublishHypothesis( aHyp, theName );
 
   // Publishing a group
   SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(theIOR);
@@ -1013,7 +1013,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
   myLastObj.clear();
   myLastParameters.clear();
   myLastParamIndex.clear(); /* vector holding indices of virables within the string
-                               of all varibles used for theObject */ 
+                               of all variables used for theObject */ 
   int nbVars = 0;
   int pos = 0, prevPos = 0, len = strlen( theParameters );
   if ( len == 0 ) return;
@@ -1042,7 +1042,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
     return;
 
   // store
-  // (1) variable names in the string of all varibles used for theObject and
+  // (1) variable names in the string of all variables used for theObject and
   // (2) indices of found variables in myLastParamIndex.
 
   // remember theObject
index ca0103c016e6cb9994a8eb21f1d0ef7c35dcb8cf..2fcac5a7f9122551b4efb276f0f3c77fd0daf3a0 100644 (file)
@@ -255,16 +255,13 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
       enlargeBoundingBox( aMesh->FindNode( aElementsId[i] ), theMeasure);
     else
     {
-      const SMDS_MeshElement* elem = aMesh->FindElement( aElementsId[i] );
-      if (!elem)
-        continue;
-      SMDS_ElemIteratorPtr aNodeIter = elem->nodesIterator();
-      while( aNodeIter->more() )
-        enlargeBoundingBox( dynamic_cast<const SMDS_MeshNode*>( aNodeIter->next() ), theMeasure);
+      if ( const SMDS_MeshElement* elem = aMesh->FindElement( aElementsId[i] ))
+        for (SMDS_NodeIteratorPtr aNodeIter = elem->nodeIterator(); aNodeIter->more(); )
+          enlargeBoundingBox( aNodeIter->next(), theMeasure);
     }
   }
 }
-                               
+
 //=======================================================================
 // name    : BoundingBox
 // Purpose : compute common bounding box of entities
index 4f8809f99951434c43091235847d92b1b40eabe4..9007b1b95ea9a575ce3e66558e3ae09058278e50 100644 (file)
@@ -42,7 +42,6 @@
 #include "SMDS_Mesh0DElement.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshVolume.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_Group.hxx"
@@ -165,7 +164,10 @@ namespace MeshEditor_I {
     }
     void Remove( SMDSAbs_ElementType type )
     {
-      SMDS_ElemIteratorPtr eIt = GetMeshDS()->elementsIterator( type );
+      Remove( GetMeshDS()->elementsIterator( type ));
+    }
+    void Remove( SMDS_ElemIteratorPtr eIt )
+    {
       while ( eIt->more() )
         GetMeshDS()->RemoveFreeElement( eIt->next(), /*sm=*/0, /*fromGroups=*/false );
     }
@@ -522,16 +524,18 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
   SMESH_TRY;
   const bool hasBadElems = ( getEditor().GetError() && getEditor().GetError()->HasBadElems() );
 
-  if ( myIsPreviewMode || hasBadElems ) { // --- MeshPreviewStruct filling ---
-
+  if ( myIsPreviewMode || hasBadElems )
+  {
     list<int> aNodesConnectivity;
     typedef map<int, int> TNodesMap;
     TNodesMap nodesMap;
 
     SMESHDS_Mesh* aMeshDS;
-    std::auto_ptr< SMESH_MeshPartDS > aMeshPartDS;
+    std::unique_ptr< SMESH_MeshPartDS > aMeshPartDS;
     if ( hasBadElems ) {
-      aMeshPartDS.reset( new SMESH_MeshPartDS( getEditor().GetError()->myBadElements ));
+      const list<const SMDS_MeshElement*>& badElems =
+        static_cast<SMESH_BadInputElements*>( getEditor().GetError().get() )->myBadElements;
+      aMeshPartDS.reset( new SMESH_MeshPartDS( badElems ));
       aMeshDS = aMeshPartDS.get();
     }
     else {
@@ -615,9 +619,9 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
   SMESH::long_array_var myLastCreatedNodes = new SMESH::long_array();
 
   const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedNodes();
-  myLastCreatedNodes->length( aSeq.Length() );
-  for (int i = 1; i <= aSeq.Length(); i++)
-    myLastCreatedNodes[i-1] = aSeq.Value(i)->GetID();
+  myLastCreatedNodes->length( aSeq.size() );
+  for ( size_t i = 0; i < aSeq.size(); i++)
+    myLastCreatedNodes[i] = aSeq[i]->GetID();
 
   return myLastCreatedNodes._retn();
   SMESH_CATCH( SMESH::throwCorbaException );
@@ -638,9 +642,9 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
   SMESH::long_array_var myLastCreatedElems = new SMESH::long_array();
 
   const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedElems();
-  myLastCreatedElems->length( aSeq.Length() );
-  for ( int i = 1; i <= aSeq.Length(); i++ )
-    myLastCreatedElems[i-1] = aSeq.Value(i)->GetID();
+  myLastCreatedElems->length( aSeq.size() );
+  for ( size_t i = 0; i < aSeq.size(); i++ )
+    myLastCreatedElems[i] = aSeq[i]->GetID();
 
   return myLastCreatedElems._retn();
   SMESH_CATCH( SMESH::throwCorbaException );
@@ -677,7 +681,7 @@ SMESH::ComputeError* SMESH_MeshEditor_i::GetLastError()
     errOut->code       = -( errIn->myName < 0 ? errIn->myName + 1: errIn->myName ); // -1 -> 0
     errOut->comment    = errIn->myComment.c_str();
     errOut->subShapeID = -1;
-    errOut->hasBadMesh = !errIn->myBadElements.empty();
+    errOut->hasBadMesh = errIn->HasBadElems();
   }
   else
   {
@@ -4014,6 +4018,84 @@ SMESH_MeshEditor_i::ScaleMakeMesh(SMESH::SMESH_IDSource_ptr  theObject,
   return mesh._retn();
 }
 
+//================================================================================
+/*!
+ * \brief Make an offset mesh from a source 2D mesh
+ *  \param [inout] theObject - source mesh. New elements are added to this mesh
+ *         if \a theMeshName is empty.
+ *  \param [in] theValue - offset value
+ *  \param [in] theCopyGroups - to generate groups
+ *  \param [in] theMeshName - optional name of a new mesh
+ *  \param [out] theGroups - new groups
+ *  \return SMESH::SMESH_Mesh_ptr - the modified mesh
+ */
+//================================================================================
+
+SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::Offset( SMESH::SMESH_IDSource_ptr theObject,
+                                                  CORBA::Double             theValue,
+                                                  CORBA::Boolean            theCopyGroups,
+                                                  const char*               theMeshName,
+                                                  SMESH::ListOfGroups_out   theGroups)
+  throw (SALOME::SALOME_Exception)
+{
+  SMESH_TRY;
+  initData();
+
+  SMESHDS_Mesh* aMeshDS = getMeshDS();
+
+  SMESH::SMESH_Mesh_var         mesh_var;
+  ::SMESH_MeshEditor::PGroupIDs groupIds;
+
+  TPythonDump pyDump;
+
+  TIDSortedElemSet elements, copyElements;
+  if ( idSourceToSet( theObject, aMeshDS, elements, SMDSAbs_Face,
+                      /*emptyIfIsMesh=*/ !myIsPreviewMode ))
+  {
+    // mesh to modify
+    SMESH_Mesh* tgtMesh = 0;
+    if ( myIsPreviewMode )
+    {
+      TPreviewMesh * tmpMesh = getPreviewMesh();
+      tgtMesh = tmpMesh;
+      tmpMesh->Copy( elements, copyElements );
+      theCopyGroups = false;
+    }
+    else
+    {
+      mesh_var =
+        *theMeshName ? makeMesh( theMeshName ) : SMESH::SMESH_Mesh::_duplicate( myMesh_i->_this() );
+      SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh_var );
+      tgtMesh = & mesh_i->GetImpl();
+    }
+    groupIds = getEditor().Offset( elements, theValue, tgtMesh, theCopyGroups, !myIsPreviewMode );
+
+    tgtMesh->GetMeshDS()->Modified();
+  }
+
+  if ( myIsPreviewMode )
+  {
+    getPreviewMesh()->Remove( SMESHUtils::elemSetIterator( copyElements ));
+  }
+  else
+  {
+    theGroups = theCopyGroups ? getGroups( groupIds.get() ) : new SMESH::ListOfGroups;
+
+    // result of Offset() is a tuple (mesh, groups)
+    if ( mesh_var->_is_nil() ) pyDump << myMesh_i->_this() << ", ";
+    else                       pyDump << mesh_var          << ", ";
+    pyDump << theGroups << " = "
+           << this << ".Offset( "
+           << theValue << ", "
+           << theCopyGroups << ", "
+           << "'" << theMeshName<< "')";
+  }
+
+  return mesh_var._retn();
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+  return SMESH::SMESH_Mesh::_nil();
+}
 
 //=======================================================================
 //function : findCoincidentNodes
@@ -4713,8 +4795,7 @@ void SMESH_MeshEditor_i::FillHole(const SMESH::FreeBorder& theHole)
     getEditor().ClearLastCreated();
     SMESH_SequenceOfElemPtr& aSeq =
       const_cast<SMESH_SequenceOfElemPtr&>( getEditor().GetLastCreatedElems() );
-    for ( size_t i = 0; i < newFaces.size(); ++i )
-      aSeq.Append( newFaces[i] );
+    aSeq.swap( newFaces );
 
     TPythonDump() << this << ".FillHole( SMESH.FreeBorder(" << theHole.nodeIDs << " ))";
   }
@@ -5528,7 +5609,7 @@ bool SMESH_MeshEditor_i::idSourceToSet(SMESH::SMESH_IDSource_ptr  theIDSource,
  * \param theElements - container of elements to duplicate.
  * \param theGroupName - a name of group to contain the generated elements.
  *                    If a group with such a name already exists, the new elements
- *                    are added to the existng group, else a new group is created.
+ *                    are added to the existing group, else a new group is created.
  *                    If \a theGroupName is empty, new elements are not added 
  *                    in any group.
  * \return a group where the new elements are added. NULL if theGroupName == "".
@@ -5553,11 +5634,11 @@ SMESH_MeshEditor_i::DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
   {
     getEditor().DoubleElements( elems );
 
-    if ( strlen( theGroupName ) && !getEditor().GetLastCreatedElems().IsEmpty() )
+    if ( strlen( theGroupName ) && !getEditor().GetLastCreatedElems().empty() )
     {
       // group type
       SMESH::ElementType type =
-        SMESH::ElementType( getEditor().GetLastCreatedElems().Value(1)->GetType() );
+        SMESH::ElementType( getEditor().GetLastCreatedElems()[0]->GetType() );
       // find existing group
       SMESH::ListOfGroups_var groups = myMesh_i->GetGroups();
       for ( size_t i = 0; i < groups->length(); ++i )
@@ -5577,8 +5658,8 @@ SMESH_MeshEditor_i::DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
       {
         SMESHDS_Group* groupDS = static_cast< SMESHDS_Group* >( group_i->GetGroupDS() );
         const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedElems();
-        for ( int i = 1; i <= aSeq.Length(); i++ )
-          groupDS->SMDSGroup().Add( aSeq(i) );
+        for ( size_t i = 0; i < aSeq.size(); i++ )
+          groupDS->SMDSGroup().Add( aSeq[i] );
       }
     }
   }
@@ -6069,14 +6150,14 @@ SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
     // Create group with newly created elements
     CORBA::String_var elemGroupName = theElems->GetName();
     std::string aNewName = generateGroupName( std::string(elemGroupName.in()) + "_double");
-    if ( !getEditor().GetLastCreatedElems().IsEmpty() && theElemGroupNeeded )
+    if ( !getEditor().GetLastCreatedElems().empty() && theElemGroupNeeded )
     {
       SMESH::long_array_var anIds = GetLastCreatedElems();
       SMESH::ElementType aGroupType = myMesh_i->GetElementType(anIds[0], true);
       aNewElemGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
       aNewElemGroup->Add(anIds);
     }
-    if ( !getEditor().GetLastCreatedNodes().IsEmpty() && theNodeGroupNeeded )
+    if ( !getEditor().GetLastCreatedNodes().empty() && theNodeGroupNeeded )
     {
       SMESH::long_array_var anIds = GetLastCreatedNodes();
       aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
@@ -6301,14 +6382,14 @@ SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems
     // Create group with newly created elements
     CORBA::String_var elemGroupName = theElems[0]->GetName();
     std::string aNewName = generateGroupName( std::string(elemGroupName.in()) + "_double");
-    if ( !getEditor().GetLastCreatedElems().IsEmpty() && theElemGroupNeeded )
+    if ( !getEditor().GetLastCreatedElems().empty() && theElemGroupNeeded )
     {
       SMESH::long_array_var anIds = GetLastCreatedElems();
       SMESH::ElementType aGroupType = myMesh_i->GetElementType(anIds[0], true);
       aNewElemGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
       aNewElemGroup->Add(anIds);
     }
-    if ( !getEditor().GetLastCreatedNodes().IsEmpty() && theNodeGroupNeeded )
+    if ( !getEditor().GetLastCreatedNodes().empty() && theNodeGroupNeeded )
     {
       SMESH::long_array_var anIds = GetLastCreatedNodes();
       aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
@@ -6882,7 +6963,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
   // group of boundary elements
   SMESH_Group* smesh_group = 0;
   SMDSAbs_ElementType elemType = (dim == SMESH::BND_2DFROM3D) ? SMDSAbs_Volume : SMDSAbs_Face;
-  if ( strlen(groupName) )
+  if ( strlen( groupName ))
   {
     SMESH::ElementType groupType = SMESH::ElementType( int(elemType)-1 );
     group_var = mesh_i->CreateGroup( groupType, groupName );
index bcc0dfc64393f0eb06c0833b3f579b64cef59c8a..72a5c31c24420448868d0fa324545933fa43cc77 100644 (file)
@@ -472,11 +472,18 @@ public:
                                        const SMESH::double_array& theScaleFact)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr Object,
-                                      const SMESH::PointStruct& Point,
+  SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr  Object,
+                                      const SMESH::PointStruct&  Point,
                                       const SMESH::double_array& theScaleFact,
-                                      CORBA::Boolean            CopyGroups,
-                                      const char*               MeshName)
+                                      CORBA::Boolean             CopyGroups,
+                                      const char*                MeshName)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::SMESH_Mesh_ptr Offset( SMESH::SMESH_IDSource_ptr theObject,
+                                CORBA::Double             Value,
+                                CORBA::Boolean            CopyGroups,
+                                const char*               MeshName,
+                                SMESH::ListOfGroups_out   Groups)
     throw (SALOME::SALOME_Exception);
 
   void FindCoincidentNodes (CORBA::Double                  Tolerance,
@@ -983,8 +990,6 @@ public:
 
   // temporary IDSources
   struct _IDSource;
-  // std::list< _IDSource* >      myAuxIDSources;
-  // void                         deleteAuxIDSources();
 };
 
 #endif
index 986ee3c06ad4ffa93801c99a3f1b5fd76c453842..4c81674a2e069eefdf212f784b21676aa9028f33 100644 (file)
@@ -47,10 +47,10 @@ public:
   SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr                    meshPart);
   SMESH_MeshPartDS(const std::list< const SMDS_MeshElement* > & badElems );
 
-  virtual SMDS_NodeIteratorPtr   nodesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_EdgeIteratorPtr   edgesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_FaceIteratorPtr   facesIterator     (bool idInceasingOrder=false) const;
-  virtual SMDS_VolumeIteratorPtr volumesIterator   (bool idInceasingOrder=false) const;
+  virtual SMDS_NodeIteratorPtr   nodesIterator  () const;
+  virtual SMDS_EdgeIteratorPtr   edgesIterator  () const;
+  virtual SMDS_FaceIteratorPtr   facesIterator  () const;
+  virtual SMDS_VolumeIteratorPtr volumesIterator() const;
 
   virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type=SMDSAbs_All) const;
   virtual SMDS_ElemIteratorPtr elementGeomIterator(SMDSAbs_GeometryType type) const;
@@ -61,24 +61,6 @@ public:
 private:
   TIDSortedElemSet _elements[ SMDSAbs_NbElementTypes ];
   SMESHDS_Mesh*    _meshDS;
-  /*!
-   * \brief Class used to access to protected data of SMDS_MeshInfo
-   */
-  struct TMeshInfo : public SMDS_MeshInfo
-  {
-    void Add(const SMDS_MeshElement* e) { SMDS_MeshInfo::addWithPoly( e ); }
-  };
-  /*!
-   * \brief Element holing its ID only
-   */
-  struct TElemID : public SMDS_MeshElement
-  {
-    TElemID(int ID) : SMDS_MeshElement( ID ) {}
-    virtual SMDSAbs_ElementType  GetType() const { return SMDSAbs_All; }
-    virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Last; }
-    virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_NONE; }
-    virtual vtkIdType            GetVtkType() const { return -1; }
-  };
 };
 
 #endif
index a38dd896f89afe2660bf15b49ef60e6f300c3472..d8ddcf6b92565a157ba7488ca01e8ad8b143c7f2 100644 (file)
 #include "DriverMED_W_Field.h"
 #include "DriverMED_W_SMESHDS_Mesh.h"
 #include "MED_Factory.hxx"
+#include "SMDS_LinearEdge.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_ElemIterator.hxx"
 #include "SMDS_FacePosition.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_MeshGroup.hxx"
 #include "SMDS_SetIterator.hxx"
+#include "SMDS_StdIterator.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMESHDS_CommandType.hxx"
@@ -156,7 +158,7 @@ SMESH_Mesh_i::~SMESH_Mesh_i()
   }
   _mapHypo.clear();
 
-  // clear cashed shapes if no more meshes remain; (the cash is blame,
+  // clear cached shapes if no more meshes remain; (the cache is blame,
   // together with publishing, of spent time increasing in issue 22874)
   if ( _impl->NbMeshes() == 1 )
     _gen_i->GetShapeReader()->ClearClientBuffer();
@@ -546,7 +548,7 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::ConvertHypothesisStatus
   switch (theStatus) {
   RETURNCASE( HYP_OK            );
   RETURNCASE( HYP_MISSING       );
-  RETURNCASE( HYP_CONCURENT     );
+  RETURNCASE( HYP_CONCURRENT    );
   RETURNCASE( HYP_BAD_PARAMETER );
   RETURNCASE( HYP_HIDDEN_ALGO   );
   RETURNCASE( HYP_HIDING_ALGO   );
@@ -1071,7 +1073,8 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
     return;
 
   vector<int> nodeIds; // to remove nodes becoming free
-  if ( !theGroup->IsEmpty() )
+  bool isNodal = ( theGroup->GetType() == SMESH::NODE );
+  if ( !isNodal && !theGroup->IsEmpty() )
   {
     CORBA::Long elemID = theGroup->GetID( 1 );
     int nbElemNodes = GetElemNbNodes( elemID );
@@ -1079,36 +1082,46 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
       nodeIds.reserve( theGroup->Size() * nbElemNodes );
   }
 
-  // Remove contents
+  // Retrieve contents
   SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( theGroup );
   SMDS_ElemIteratorPtr     elemIt = GetElements( idSrc, theGroup->GetType() );
-  while ( elemIt->more() )
-  {
-    const SMDS_MeshElement* e = elemIt->next();
+  SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > elemBeg( elemIt ), elemEnd;
+  std::vector< const SMDS_MeshElement* > elems( theGroup->Size() );
+  elems.assign( elemBeg, elemEnd );
 
-    SMDS_ElemIteratorPtr nIt = e->nodesIterator();
-    while ( nIt->more() )
-      nodeIds.push_back( nIt->next()->GetID() );
+  TPythonDump pyDump; // Suppress dump from RemoveGroup()
 
-    _impl->GetMeshDS()->RemoveElement( e );
+  // Remove group
+  RemoveGroup( theGroup );
+
+  // Remove contents
+  for ( size_t i = 0; i < elems.size(); ++i )
+  {
+    // if ( !_impl->GetMeshDS()->Contains( elems[i] ))
+    //   continue;
+    if ( !isNodal )
+    {
+      for ( SMDS_ElemIteratorPtr nIt = elems[i]->nodesIterator(); nIt->more(); )
+        nodeIds.push_back( nIt->next()->GetID() );
+
+      _impl->GetMeshDS()->RemoveFreeElement( elems[i], /*sm=*/0 );
+    }
+    else
+    {
+      _impl->GetMeshDS()->RemoveElement( elems[i] );
+    }
   }
 
   // Remove free nodes
-  if ( theGroup->GetType() != SMESH::NODE )
-    for ( size_t i = 0 ; i < nodeIds.size(); ++i )
-      if ( const SMDS_MeshNode* n = _impl->GetMeshDS()->FindNode( nodeIds[i] ))
-        if ( n->NbInverseElements() == 0 )
-          _impl->GetMeshDS()->RemoveFreeNode( n, /*sm=*/0 );
-
-  TPythonDump pyDump; // Suppress dump from RemoveGroup()
+  for ( size_t i = 0 ; i < nodeIds.size(); ++i )
+    if ( const SMDS_MeshNode* n = _impl->GetMeshDS()->FindNode( nodeIds[i] ))
+      if ( n->NbInverseElements() == 0 )
+        _impl->GetMeshDS()->RemoveFreeNode( n, /*sm=*/0 );
 
   // Update Python script (theGroup must be alive for this)
   pyDump << SMESH::SMESH_Mesh_var(_this())
          << ".RemoveGroupWithContents( " << theGroup << " )";
 
-  // Remove group
-  RemoveGroup( theGroup );
-
   SMESH_CATCH( SMESH::throwCorbaException );
 }
 
@@ -2512,7 +2525,7 @@ SMESH::SMESH_GroupBase_ptr SMESH_Mesh_i::createGroup (SMESH::ElementType
                                                       const SMESH_PredicatePtr& thePredicate )
 {
   std::string newName;
-  if ( !theName || strlen( theName ) == 0 )
+  if ( !theName || !theName[0] )
   {
     std::set< std::string > presentNames;
     std::map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator i_gr = _mapGroups.begin();
@@ -4012,14 +4025,14 @@ SMESH::long_array* SMESH_Mesh_i::GetNodesId()
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::long_array_var aResult = new SMESH::long_array();
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
 
-  if ( aSMESHDS_Mesh == NULL )
+  if ( aMeshDS == NULL )
     return aResult._retn();
 
   long nbNodes = NbNodes();
   aResult->length( nbNodes );
-  SMDS_NodeIteratorPtr anIt = aSMESHDS_Mesh->nodesIterator(/*idInceasingOrder=*/true);
+  SMDS_NodeIteratorPtr anIt = aMeshDS->nodesIterator();
   for ( int i = 0, n = nbNodes; i < n && anIt->more(); i++ )
     aResult[i] = anIt->next()->GetID();
 
@@ -4239,12 +4252,12 @@ SMESH::double_array* SMESH_Mesh_i::GetNodeXYZ(const CORBA::Long id)
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::double_array_var aResult = new SMESH::double_array();
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL )
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL )
     return aResult._retn();
 
   // find node
-  const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(id);
+  const SMDS_MeshNode* aNode = aMeshDS->FindNode(id);
   if(!aNode)
     return aResult._retn();
 
@@ -4270,12 +4283,12 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long id)
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::long_array_var aResult = new SMESH::long_array();
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL )
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL )
     return aResult._retn();
 
   // find node
-  const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(id);
+  const SMDS_MeshNode* aNode = aMeshDS->FindNode(id);
   if(!aNode)
     return aResult._retn();
 
@@ -4317,17 +4330,16 @@ SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(CORBA::Long NodeID)
       case SMDS_TOP_EDGE:
         aNodePosition->shapeType = GEOM::EDGE;
         aNodePosition->params.length(1);
-        aNodePosition->params[0] =
-          static_cast<SMDS_EdgePosition*>( pos )->GetUParameter();
+        aNodePosition->params[0] = SMDS_EdgePositionPtr( pos )->GetUParameter();
         break;
-      case SMDS_TOP_FACE:
+      case SMDS_TOP_FACE: {
+        SMDS_FacePositionPtr fPos = pos;
         aNodePosition->shapeType = GEOM::FACE;
         aNodePosition->params.length(2);
-        aNodePosition->params[0] =
-          static_cast<SMDS_FacePosition*>( pos )->GetUParameter();
-        aNodePosition->params[1] =
-          static_cast<SMDS_FacePosition*>( pos )->GetVParameter();
+        aNodePosition->params[0] = fPos->GetUParameter();
+        aNodePosition->params[1] = fPos->GetVParameter();
         break;
+      }
       case SMDS_TOP_VERTEX:
         aNodePosition->shapeType = GEOM::VERTEX;
         break;
@@ -4402,12 +4414,12 @@ CORBA::Long SMESH_Mesh_i::GetShapeID(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL )
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL )
     return -1;
 
   // try to find node
-  const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(id);
+  const SMDS_MeshNode* aNode = aMeshDS->FindNode(id);
   if(aNode) {
     return aNode->getshapeId();
   }
@@ -4429,12 +4441,12 @@ CORBA::Long SMESH_Mesh_i::GetShapeIDForElem(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL )
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL )
     return -1;
 
   // try to find element
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem)
     return -1;
 
@@ -4459,10 +4471,10 @@ CORBA::Long SMESH_Mesh_i::GetElemNbNodes(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return -1;
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return -1;
   // try to find element
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return -1;
   return elem->NbNodes();
 }
@@ -4481,9 +4493,9 @@ CORBA::Long SMESH_Mesh_i::GetElemNode(const CORBA::Long id, const CORBA::Long in
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return -1;
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return -1;
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return -1;
   if( index>=elem->NbNodes() || index<0 ) return -1;
   return elem->GetNode(index)->GetID();
@@ -4501,9 +4513,9 @@ SMESH::long_array* SMESH_Mesh_i::GetElemNodes(const CORBA::Long id)
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::long_array_var aResult = new SMESH::long_array();
-  if ( SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS() )
+  if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() )
   {
-    if ( const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id) )
+    if ( const SMDS_MeshElement* elem = aMeshDS->FindElement(id) )
     {
       aResult->length( elem->NbNodes() );
       for ( int i = 0; i < elem->NbNodes(); ++i )
@@ -4525,13 +4537,13 @@ CORBA::Boolean SMESH_Mesh_i::IsMediumNode(const CORBA::Long ide, const CORBA::Lo
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return false;
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return false;
   // try to find node
-  const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(idn);
+  const SMDS_MeshNode* aNode = aMeshDS->FindNode(idn);
   if(!aNode) return false;
   // try to find element
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(ide);
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(ide);
   if(!elem) return false;
 
   return elem->IsMediumNode(aNode);
@@ -4551,11 +4563,11 @@ CORBA::Boolean SMESH_Mesh_i::IsMediumNodeOfAnyElem(const CORBA::Long idn,
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return false;
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return false;
 
   // try to find node
-  const SMDS_MeshNode* aNode = aSMESHDS_Mesh->FindNode(idn);
+  const SMDS_MeshNode* aNode = aMeshDS->FindNode(idn);
   if(!aNode) return false;
 
   SMESH_MesherHelper aHelper( *(_impl) );
@@ -4581,9 +4593,9 @@ CORBA::Long SMESH_Mesh_i::ElemNbEdges(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return -1;
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return -1;
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return -1;
   return elem->NbEdges();
 }
@@ -4600,9 +4612,9 @@ CORBA::Long SMESH_Mesh_i::ElemNbFaces(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return -1;
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return -1;
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return -1;
   return elem->NbFaces();
 }
@@ -4619,9 +4631,9 @@ SMESH::long_array* SMESH_Mesh_i::GetElemFaceNodes(CORBA::Long  elemId,
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::long_array_var aResult = new SMESH::long_array();
-  if ( SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS() )
+  if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() )
   {
-    if ( const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(elemId) )
+    if ( const SMDS_MeshElement* elem = aMeshDS->FindElement(elemId) )
     {
       SMDS_VolumeTool vtool( elem );
       if ( faceIndex < vtool.NbFaces() )
@@ -4732,9 +4744,9 @@ CORBA::Boolean SMESH_Mesh_i::IsPoly(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return false;
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return false;
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return false;
   return elem->IsPoly();
 }
@@ -4751,9 +4763,9 @@ CORBA::Boolean SMESH_Mesh_i::IsQuadratic(const CORBA::Long id)
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL ) return false;
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL ) return false;
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem) return false;
   return elem->IsQuadratic();
 }
@@ -4770,7 +4782,7 @@ CORBA::Double SMESH_Mesh_i::GetBallDiameter(CORBA::Long id)
     _preMeshInfo->FullLoadFromFile();
 
   if ( const SMDS_BallElement* ball =
-       dynamic_cast<const SMDS_BallElement*>( _impl->GetMeshDS()->FindElement( id )))
+       SMDS_Mesh::DownCast<SMDS_BallElement>( _impl->GetMeshDS()->FindElement( id )))
     return ball->GetDiameter();
 
   return 0;
@@ -4788,11 +4800,11 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
     _preMeshInfo->FullLoadFromFile();
 
   SMESH::double_array_var aResult = new SMESH::double_array();
-  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
-  if ( aSMESHDS_Mesh == NULL )
+  SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
+  if ( aMeshDS == NULL )
     return aResult._retn();
 
-  const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
+  const SMDS_MeshElement* elem = aMeshDS->FindElement(id);
   if(!elem)
     return aResult._retn();
 
@@ -4852,12 +4864,14 @@ SMESH_Mesh_i::MakeGroupsOfBadInputElements( int         theSubShapeID,
   {
     // compute error
     SMESH_ComputeErrorPtr error = sm->GetComputeError();
-    if ( error && !error->myBadElements.empty())
+    if ( error && error->HasBadElems() )
     {
       // sort bad elements by type
       vector< const SMDS_MeshElement* > elemsByType[ SMDSAbs_NbElementTypes ];
-      list<const SMDS_MeshElement*>::iterator elemIt  = error->myBadElements.begin();
-      list<const SMDS_MeshElement*>::iterator elemEnd = error->myBadElements.end();
+      const list<const SMDS_MeshElement*>& badElems =
+        static_cast<SMESH_BadInputElements*>( error.get() )->myBadElements;
+      list<const SMDS_MeshElement*>::const_iterator elemIt  = badElems.begin();
+      list<const SMDS_MeshElement*>::const_iterator elemEnd = badElems.end();
       for ( ; elemIt != elemEnd; ++elemIt )
       {
         const SMDS_MeshElement* elem = *elemIt;
@@ -5215,7 +5229,7 @@ SALOMEDS::TMPFile* SMESH_Mesh_i::GetVtkUgStream()
 {
   SALOMEDS::TMPFile_var SeqFile;
   if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() ) {
-    SMDS_UnstructuredGrid* aGrid = aMeshDS->getGrid();
+    SMDS_UnstructuredGrid* aGrid = aMeshDS->GetGrid();
     if(aGrid) {
       vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New();
       aWriter->WriteToOutputStringOn();
@@ -5352,7 +5366,7 @@ namespace /* Iterators used in SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_v
     {
       const SMDS_MeshElement* res = _node;
       _node = 0;
-      while (( _elemIter->more() || _nodeIter->more() ) && !_node )
+      while ( !_node && ( _elemIter->more() || _nodeIter->more() ))
       {
         if ( _nodeIter->more() )
         {
@@ -6014,6 +6028,24 @@ void SMESH_Mesh_i::convertMeshOrder (const TListOfListOfInt&     theIdsOrder,
   }
 }
 
+namespace // utils used by SMESH_MeshPartDS
+{
+  /*!
+   * \brief Class used to access to protected data of SMDS_MeshInfo
+   */
+  struct TMeshInfo : public SMDS_MeshInfo
+  {
+    void Add(const SMDS_MeshElement* e) { SMDS_MeshInfo::addWithPoly( e ); }
+  };
+  /*!
+   * \brief Element holing its ID only
+   */
+  struct TElemID : public SMDS_LinearEdge
+  {
+    TElemID(int ID) : SMDS_LinearEdge(0,0) { setID( ID ); }
+  };
+}
+
 //================================================================================
 //
 // Implementation of SMESH_MeshPartDS
@@ -6120,7 +6152,7 @@ SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementGeomIterator(SMDSAbs_GeometryType
     SMDS_MeshElement::GeomFilter
     > TIter;
 
-  SMDSAbs_ElementType type = SMDS_MeshCell::toSmdsType( geomType );
+  SMDSAbs_ElementType type = SMDS_MeshCell::ElemType( geomType );
 
   return SMDS_ElemIteratorPtr( new TIter( _elements[type].begin(),
                                           _elements[type].end(),
@@ -6138,7 +6170,7 @@ SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementEntityIterator(SMDSAbs_EntityType
     SMDS_MeshElement::EntityFilter
     > TIter;
 
-  SMDSAbs_ElementType type = SMDS_MeshCell::toSmdsType( entity );
+  SMDSAbs_ElementType type = SMDS_MeshCell::ElemType( entity );
 
   return SMDS_ElemIteratorPtr( new TIter( _elements[type].begin(),
                                           _elements[type].end(),
@@ -6165,10 +6197,10 @@ SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementsIterator(SMDSAbs_ElementType type
 }
 // -------------------------------------------------------------------------------------
 #define _GET_ITER_DEFINE( iterType, methName, elem, elemType)                       \
-  iterType SMESH_MeshPartDS::methName( bool idInceasingOrder) const                 \
+  iterType SMESH_MeshPartDS::methName() const                 \
   {                                                                                 \
     typedef SMDS_SetIterator<const elem*, TIDSortedElemSet::const_iterator > TIter; \
-    return _meshDS ? _meshDS->methName(idInceasingOrder) : iterType                 \
+    return _meshDS ? _meshDS->methName() : iterType                 \
       ( new TIter( _elements[elemType].begin(), _elements[elemType].end() ));       \
   }
 // -------------------------------------------------------------------------------------
index 7db67ae582d658b8b00bc540f60bd3625cedcf09..886f4a6d1cfa34de335b7b94ead6c435fc20d77b 100644 (file)
@@ -950,7 +950,7 @@ void SMESH_PreMeshInfo::readSubMeshes(DriverMED_R_SMESHDS_Mesh* reader) const
             if ( isNode ) {
               SMDS_PositionPtr pos = aPositionCreator.MakePosition( smType[ smID ]);
               SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( static_cast<const SMDS_MeshNode*>( elem ));
-              node->SetPosition( pos );
+              node->SetPosition( pos, sm->GetID() );
               sm->AddNode( node );
             } else {
               sm->AddElement( elem );
@@ -1051,8 +1051,7 @@ void SMESH_PreMeshInfo::readSubMeshes(DriverMED_R_SMESHDS_Mesh* reader) const
             // -- Most probably a bad study was saved when there were
             // not fixed bugs in SMDS_MeshInfo
             if ( aPos->GetTypeOfPosition() == SMDS_TOP_FACE ) {
-              SMDS_FacePosition* fPos = const_cast<SMDS_FacePosition*>
-                ( static_cast<const SMDS_FacePosition*>( aPos ));
+              SMDS_FacePositionPtr fPos = aPos;
               fPos->SetUParameter( aUPos[ iNode ]);
               fPos->SetVParameter( aVPos[ iNode ]);
             }
@@ -1060,9 +1059,8 @@ void SMESH_PreMeshInfo::readSubMeshes(DriverMED_R_SMESHDS_Mesh* reader) const
           else {
             // ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_EDGE );-- issue 20182
             if ( aPos->GetTypeOfPosition() == SMDS_TOP_EDGE ) {
-              SMDS_EdgePosition* fPos = const_cast<SMDS_EdgePosition*>
-                ( static_cast<const SMDS_EdgePosition*>( aPos ));
-              fPos->SetUParameter( aUPos[ iNode ]);
+              SMDS_EdgePositionPtr ePos = aPos;
+              ePos->SetUParameter( aUPos[ iNode ]);
             }
           }
         }
index 4c488220be2211f2711c0d51989684b6c7aa13d2..793e4a4a18071b4fcc431fcdf015280df15908ef 100644 (file)
@@ -89,7 +89,7 @@ namespace SMESH
 
   // ===========================================================================================
   /*!
-   * \brief Object used to make TPythonDump know that its held value can be a varible
+   * \brief Object used to make TPythonDump know that its held value can be a variable
    *
    * TPythonDump substitute TVar with names of notebook variables if any.
    */
index 1d3d393d7aed30ef3c3affa262bcb665bcc6854d..48356cac7ee00d4773c136cd5cf1ba085b0a08e3 100644 (file)
@@ -17,9 +17,9 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-##
-# @package StdMeshersBuilder
-# Python API for the standard meshing plug-in module.
+"""
+Python API for the standard meshing plug-in module.
+"""
 
 LIBRARY = "libStdMeshersEngine.so"
 
@@ -30,24 +30,50 @@ import StdMeshers
 # Mesh algo type identifiers
 #----------------------------
 
-## Algorithm type: Regular 1D algorithm, see StdMeshersBuilder_Segment
 REGULAR     = "Regular_1D"
-## Algorithm type: Python 1D algorithm, see StdMeshersBuilder_Segment_Python
+"""
+Algorithm type: Regular 1D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Segment`
+"""
+
 PYTHON      = "Python_1D"
-## Algorithm type: Composite segment 1D algorithm, see StdMeshersBuilder_CompositeSegment
+"""
+Algorithm type: Python 1D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Segment_Python`
+"""
+
 COMPOSITE   = "CompositeSegment_1D"
-## Algorithm type: Triangle MEFISTO 2D algorithm, see StdMeshersBuilder_Triangle_MEFISTO
+"""
+
+Algorithm type: Composite segment 1D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_CompositeSegment`
+"""
 MEFISTO     = "MEFISTO_2D"
-## Algorithm type: Hexahedron 3D (i-j-k) algorithm, see StdMeshersBuilder_Hexahedron
+"""
+Algorithm type: Triangle MEFISTO 2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO`
+"""
+
 Hexa        = "Hexa_3D"
-## Algorithm type: Quadrangle 2D algorithm, see StdMeshersBuilder_Quadrangle
+"""
+Algorithm type: Hexahedron 3D (i-j-k) algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Hexahedron`
+"""
+
 QUADRANGLE  = "Quadrangle_2D"
-## Algorithm type: Radial Quadrangle 1D-2D algorithm, see StdMeshersBuilder_RadialQuadrangle1D2D
+"""
+Algorithm type: Quadrangle 2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Quadrangle`
+"""
+
 RADIAL_QUAD = "RadialQuadrangle_1D2D"
-## Algorithm type: Quadrangle (Medial Axis Projection) 1D-2D algorithm, see StdMeshersBuilder_QuadMA_1D2D
+"""
+Algorithm type: Radial Quadrangle 1D-2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_RadialQuadrangle1D2D`
+"""
+
 QUAD_MA_PROJ = "QuadFromMedialAxis_1D2D"
-## Algorithm type: Polygon Per Face 2D algorithm, see StdMeshersBuilder_PolygonPerFace
+"""
+Algorithm type: Quadrangle (Medial Axis Projection) 1D-2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_QuadMA_1D2D`
+"""
+
 POLYGON     = "PolygonPerFace_2D"
+"""
+Algorithm type: Polygon Per Face 2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_PolygonPerFace`
+"""
 
 # import items of enums
 for e in StdMeshers.QuadType._items: exec('%s = StdMeshers.%s'%(e,e))
@@ -57,52 +83,69 @@ for e in StdMeshers.VLExtrusionMethod._items: exec('%s = StdMeshers.%s'%(e,e))
 # Algorithms
 #----------------------
 
-## Defines segment 1D algorithm for edges discretization.
-#
-#  It can be created by calling smeshBuilder.Mesh.Segment(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Segment(Mesh_Algorithm):
-
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
+    """
+    Defines segment 1D algorithm for edges discretization.
+    
+    It can be created by calling smeshBuilder.Mesh.Segment(geom=0)
+    """
+    
+    
     meshMethod = "Segment"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
+
     algoType   = REGULAR
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
+
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+    of smeshBuilder.Mesh class    
+    """
+
     docHelper  = "Creates segment 1D algorithm for edges"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "LocalLength" hypothesis to cut an edge in several segments with the same length
-    #  @param l for the length of segments that cut an edge
-    #  @param UseExisting if ==true - searches for an  existing hypothesis created with
-    #                    the same parameters, else (default) - creates a new one
-    #  @param p precision, used for calculation of the number of segments.
-    #           The precision should be a positive, meaningful value within the range [0,1].
-    #           In general, the number of segments is calculated with the formula:
-    #           nb = ceil((edge_length / l) - p)
-    #           Function ceil rounds its argument to the higher integer.
-    #           So, p=0 means rounding of (edge_length / l) to the higher integer,
-    #               p=0.5 means rounding of (edge_length / l) to the nearest integer,
-    #               p=1 means rounding of (edge_length / l) to the lower integer.
-    #           Default value is 1e-07.
-    #  @return an instance of StdMeshers_LocalLength hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def LocalLength(self, l, UseExisting=0, p=1e-07):
+        """
+        Defines "LocalLength" hypothesis to cut an edge in several segments with the same length
+        
+        Parameters:
+            l : for the length of segments that cut an edge
+            UseExisting : if == true - searches for an  existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+            p : precision, used for calculation of the number of segments.
+                The precision should be a positive, meaningful value within the range [0,1].
+                In general, the number of segments is calculated with the formula:
+                nb = ceil((edge_length / l) - p)
+                Function ceil rounds its argument to the higher integer.
+                So, p=0 means rounding of (edge_length / l) to the higher integer,
+                p=0.5 means rounding of (edge_length / l) to the nearest integer,
+                p=1 means rounding of (edge_length / l) to the lower integer.
+                Default value is 1e-07.
+                
+        Returns: 
+            an instance of StdMeshers_LocalLength hypothesis
+        """
+
         from salome.smesh.smeshBuilder import IsEqual
         comFun=lambda hyp, args: IsEqual(hyp.GetLength(), args[0]) and IsEqual(hyp.GetPrecision(), args[1])
         hyp = self.Hypothesis("LocalLength", [l,p], UseExisting=UseExisting, CompareMethod=comFun)
@@ -110,14 +153,21 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetPrecision(p)
         return hyp
 
-    ## Defines "MaxSize" hypothesis to cut an edge into segments not longer than given value
-    #  @param length is optional maximal allowed length of segment, if it is omitted
-    #                the preestimated length is used that depends on geometry size
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_MaxLength hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def MaxSize(self, length=0.0, UseExisting=0):
+        """
+        Defines "MaxSize" hypothesis to cut an edge into segments not longer than given value
+
+        Parameters:
+            length : is optional maximal allowed length of segment, if it is omitted
+                the preestimated length is used that depends on geometry size
+            UseExisting : if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        
+        Returns:
+            an instance of StdMeshers_MaxLength hypothesis
+        """
+    
+
         hyp = self.Hypothesis("MaxLength", [length], UseExisting=UseExisting)
         if length > 0.0:
             # set given length
@@ -136,16 +186,23 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetUsePreestimatedLength( length == 0.0 )
         return hyp
 
-    ## Defines "NumberOfSegments" hypothesis to cut an edge in a fixed number of segments
-    #  @param n for the number of segments that cut an edge
-    #  @param s for the scale factor (optional)
-    #  @param reversedEdges is a list of edges to mesh using reversed orientation.
-    #                       A list item can also be a tuple (edge, 1st_vertex_of_edge)
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - create a new one
-    #  @return an instance of StdMeshers_NumberOfSegments hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def NumberOfSegments(self, n, s=[], reversedEdges=[], UseExisting=0):
+        """
+        Defines "NumberOfSegments" hypothesis to cut an edge in a fixed number of segments
+
+        Parameters:
+            n: for the number of segments that cut an edge
+            s: for the scale factor (optional)
+            reversedEdges: is a list of edges to mesh using reversed orientation.
+                    A list item can also be a tuple (edge, 1st_vertex_of_edge)
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                    the same parameters, else (default) - create a new one
+    
+        Returns: 
+            an instance of StdMeshers_NumberOfSegments hypothesis
+        """
+    
+        
         if not isinstance(reversedEdges,list): #old version script, before adding reversedEdges
             reversedEdges, UseExisting = [], reversedEdges
         entry = self.MainShapeEntry()
@@ -164,10 +221,11 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetObjectEntry( entry )
         return hyp
 
-    ## Private method
-    #  
-    #  Checks if the given "NumberOfSegments" hypothesis has the same parameters as the given arguments
     def _compareNumberOfSegments(self, hyp, args):
+        """
+        Private method
+        Checks if the given "NumberOfSegments" hypothesis has the same parameters as the given arguments
+        """
         if hyp.GetNumberOfSegments() == args[0]:
             if len(args) == 3:
                 if hyp.GetReversedEdges() == args[1]:
@@ -182,18 +240,24 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
                                 return True
         return False
 
-    ## Defines "Adaptive" hypothesis to cut an edge into segments keeping segment size
-    #  within the given range and considering (1) deflection of segments from the edge
-    #  and (2) distance from segments to closest edges and faces to have segment length
-    #  not longer than two times shortest distances to edges and faces.
-    #  @param minSize defines the minimal allowed segment length
-    #  @param maxSize defines the maximal allowed segment length
-    #  @param deflection defines the maximal allowed distance from a segment to an edge
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_Adaptive1D hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def Adaptive(self, minSize, maxSize, deflection, UseExisting=False):
+        """
+        Defines "Adaptive" hypothesis to cut an edge into segments keeping segment size
+        within the given range and considering (1) deflection of segments from the edge
+        and (2) distance from segments to closest edges and faces to have segment length
+        not longer than two times shortest distances to edges and faces.
+
+        Parameters:
+            minSize: defines the minimal allowed segment length
+            maxSize: defines the maximal allowed segment length
+            deflection: defines the maximal allowed distance from a segment to an edge
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+
+        Returns:
+            an instance of StdMeshers_Adaptive1D hypothesis
+        """
+        
         from salome.smesh.smeshBuilder import IsEqual
         compFun = lambda hyp, args: ( IsEqual(hyp.GetMinSize(), args[0]) and \
                                       IsEqual(hyp.GetMaxSize(), args[1]) and \
@@ -205,17 +269,23 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetDeflection(deflection)
         return hyp
 
-    ## Defines "Arithmetic1D" hypothesis to cut an edge in several segments with a length
-    #  that changes in arithmetic progression
-    #  @param start defines the length of the first segment
-    #  @param end   defines the length of the last  segment
-    #  @param reversedEdges is a list of edges to mesh using reversed orientation.
-    #                       A list item can also be a tuple (edge, 1st_vertex_of_edge)
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_Arithmetic1D hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def Arithmetic1D(self, start, end, reversedEdges=[], UseExisting=0):
+        """
+        Defines "Arithmetic1D" hypothesis to cut an edge in several segments with a length
+                that changes in arithmetic progression
+
+        Parameters:
+            start: defines the length of the first segment
+            end:   defines the length of the last  segment
+            reversedEdges: is a list of edges to mesh using reversed orientation.
+                A list item can also be a tuple (edge, 1st_vertex_of_edge)
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+
+        Returns:
+                an instance of StdMeshers_Arithmetic1D hypothesis
+        """
+        
         if not isinstance(reversedEdges,list): #old version script, before adding reversedEdges
             reversedEdges, UseExisting = [], reversedEdges
         reversedEdgeInd = self.ReversedEdgeIndices(reversedEdges)
@@ -233,17 +303,23 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetObjectEntry( entry )
         return hyp
 
-    ## Defines "GeometricProgression" hypothesis to cut an edge in several
-    #  segments with a length that changes in Geometric progression
-    #  @param start defines the length of the first segment
-    #  @param ratio defines the common ratio of the geometric progression
-    #  @param reversedEdges is a list of edges to mesh using reversed orientation.
-    #                       A list item can also be a tuple (edge, 1st_vertex_of_edge)
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_Geometric1D hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def GeometricProgression(self, start, ratio, reversedEdges=[], UseExisting=0):
+        """
+            Defines "GeometricProgression" hypothesis to cut an edge in several
+                segments with a length that changes in Geometric progression
+
+            Parameters:
+                start: defines the length of the first segment
+                ratio: defines the common ratio of the geometric progression
+                reversedEdges: is a list of edges to mesh using reversed orientation.
+                    A list item can also be a tuple (edge, 1st_vertex_of_edge)
+                UseExisting: if ==true - searches for an existing hypothesis created with
+                    the same parameters, else (default) - creates a new one
+
+            Returns:
+                an instance of StdMeshers_Geometric1D hypothesis
+        """
+        
         reversedEdgeInd = self.ReversedEdgeIndices(reversedEdges)
         entry = self.MainShapeEntry()
         from salome.smesh.smeshBuilder import IsEqual
@@ -259,20 +335,26 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetObjectEntry( entry )
         return hyp
 
-    ## Defines "FixedPoints1D" hypothesis to cut an edge using parameter
-    # on curve from 0 to 1 (additionally it is neecessary to check
-    # orientation of edges and create list of reversed edges if it is
-    # needed) and sets numbers of segments between given points (default
-    # values are 1)
-    #  @param points defines the list of parameters on curve
-    #  @param nbSegs defines the list of numbers of segments
-    #  @param reversedEdges is a list of edges to mesh using reversed orientation.
-    #                       A list item can also be a tuple (edge, 1st_vertex_of_edge)
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_FixedPoints1D hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def FixedPoints1D(self, points, nbSegs=[1], reversedEdges=[], UseExisting=0):
+        """
+        Defines "FixedPoints1D" hypothesis to cut an edge using parameter
+                on curve from 0 to 1 (additionally it is neecessary to check
+                orientation of edges and create list of reversed edges if it is
+                needed) and sets numbers of segments between given points (default
+                values are 1)
+
+        Parameters:
+            points: defines the list of parameters on curve
+            nbSegs: defines the list of numbers of segments
+            reversedEdges: is a list of edges to mesh using reversed orientation.
+                A list item can also be a tuple (edge, 1st_vertex_of_edge)
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+
+        Returns:
+                an instance of StdMeshers_FixedPoints1D hypothesis
+        """
+        
         if not isinstance(reversedEdges,list): #old version script, before adding reversedEdges
             reversedEdges, UseExisting = [], reversedEdges
         reversedEdgeInd = self.ReversedEdgeIndices(reversedEdges)
@@ -289,16 +371,22 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetObjectEntry(entry)
         return hyp
 
-    ## Defines "StartEndLength" hypothesis to cut an edge in several segments with increasing geometric length
-    #  @param start defines the length of the first segment
-    #  @param end   defines the length of the last  segment
-    #  @param reversedEdges is a list of edges to mesh using reversed orientation.
-    #                       A list item can also be a tuple (edge, 1st_vertex_of_edge)
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @return an instance of StdMeshers_StartEndLength hypothesis
-    #  @ingroup l3_hypos_1dhyps
     def StartEndLength(self, start, end, reversedEdges=[], UseExisting=0):
+        """
+        Defines "StartEndLength" hypothesis to cut an edge in several segments with increasing geometric length
+
+        Parameters:
+            start: defines the length of the first segment
+            end:   defines the length of the last  segment
+            reversedEdges: is a list of edges to mesh using reversed orientation.
+                A list item can also be a tuple (edge, 1st_vertex_of_edge)
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+
+        Returns:
+            an instance of StdMeshers_StartEndLength hypothesis
+        """
+        
         if not isinstance(reversedEdges,list): #old version script, before adding reversedEdges
             reversedEdges, UseExisting = [], reversedEdges
         reversedEdgeInd = self.ReversedEdgeIndices(reversedEdges)
@@ -316,41 +404,53 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetObjectEntry( entry )
         return hyp
 
-    ## Defines "Deflection1D" hypothesis
-    #  @param d for the deflection
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with
-    #                     the same parameters, else (default) - create a new one
-    #  @ingroup l3_hypos_1dhyps
     def Deflection1D(self, d, UseExisting=0):
+        """
+        Defines "Deflection1D" hypothesis
+
+        Parameters:
+            d: for the deflection
+            UseExisting: if ==true - searches for an existing hypothesis created with
+                the same parameters, else (default) - create a new one
+        """
+        
         from salome.smesh.smeshBuilder import IsEqual
         compFun = lambda hyp, args: IsEqual(hyp.GetDeflection(), args[0])
         hyp = self.Hypothesis("Deflection1D", [d], UseExisting=UseExisting, CompareMethod=compFun)
         hyp.SetDeflection(d)
         return hyp
 
-    ## Defines "Propagation" hypothesis that propagates 1D hypotheses
-    #  from an edge where this hypothesis is assigned to
-    #  on all other edges that are at the opposite side in case of quadrangular faces
-    #  This hypothesis should be assigned to an edge to propagate a hypothesis from.
-    #  @ingroup l3_hypos_additi
     def Propagation(self):
+        """
+        Defines "Propagation" hypothesis that propagates 1D hypotheses
+                from an edge where this hypothesis is assigned to
+                on all other edges that are at the opposite side in case of quadrangular faces
+                This hypothesis should be assigned to an edge to propagate a hypothesis from.
+        """
+        
         return self.Hypothesis("Propagation", UseExisting=1, CompareMethod=self.CompareEqualHyp)
 
-    ## Defines "Propagation of Node Distribution" hypothesis that propagates
-    #  distribution of nodes from an edge where this hypothesis is assigned to,
-    #  to opposite edges of quadrangular faces, so that number of segments on all these
-    #  edges will be the same, as well as relations between segment lengths. 
-    #  @ingroup l3_hypos_additi
     def PropagationOfDistribution(self):
+        """
+        Defines "Propagation of Node Distribution" hypothesis that propagates
+                distribution of nodes from an edge where this hypothesis is assigned to,
+                to opposite edges of quadrangular faces, so that number of segments on all these
+                edges will be the same, as well as relations between segment lengths. 
+        """
+        
         return self.Hypothesis("PropagOfDistribution", UseExisting=1,
                                CompareMethod=self.CompareEqualHyp)
 
-    ## Defines "AutomaticLength" hypothesis
-    #  @param fineness for the fineness [0-1]
-    #  @param UseExisting if ==true - searches for an existing hypothesis created with the
-    #                     same parameters, else (default) - create a new one
-    #  @ingroup l3_hypos_1dhyps
     def AutomaticLength(self, fineness=0, UseExisting=0):
+        """
+        Defines "AutomaticLength" hypothesis
+
+        Parameters:
+            fineness: for the fineness [0-1]
+            UseExisting: if ==true - searches for an existing hypothesis created with the
+                same parameters, else (default) - create a new one
+        """
+        
         from salome.smesh.smeshBuilder import IsEqual
         compFun = lambda hyp, args: IsEqual(hyp.GetFineness(), args[0])
         hyp = self.Hypothesis("AutomaticLength",[fineness],UseExisting=UseExisting,
@@ -358,15 +458,19 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetFineness( fineness )
         return hyp
 
-    ## Defines "SegmentLengthAroundVertex" hypothesis
-    #  @param length for the segment length
-    #  @param vertex for the length localization: the vertex index [0,1] | vertex object.
-    #         Any other integer value means that the hypothesis will be set on the
-    #         whole 1D shape, where Mesh_Segment algorithm is assigned.
-    #  @param UseExisting if ==true - searches for an  existing hypothesis created with
-    #                   the same parameters, else (default) - creates a new one
-    #  @ingroup l3_algos_segmarv
     def LengthNearVertex(self, length, vertex=0, UseExisting=0):
+        """
+        Defines "SegmentLengthAroundVertex" hypothesis
+
+        Parameters:
+            length: for the segment length
+            vertex: for the length localization: the vertex index [0,1] | vertex object.
+                Any other integer value means that the hypothesis will be set on the
+                whole 1D shape, where Mesh_Segment algorithm is assigned.
+            UseExisting: if ==true - searches for an  existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+        
         import types
         store_geom = self.geom
         if isinstance(vertex, int):
@@ -402,84 +506,108 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         hyp.SetLength( length )
         return hyp
 
-    ## Defines "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
-    #  If the 2D mesher sees that all boundary edges are quadratic,
-    #  it generates quadratic faces, else it generates linear faces using
-    #  medium nodes as if they are vertices.
-    #  The 3D mesher generates quadratic volumes only if all boundary faces
-    #  are quadratic, else it fails.
-    #
-    #  @ingroup l3_hypos_additi
     def QuadraticMesh(self):
+        """
+        Defines "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
+        If the 2D mesher sees that all boundary edges are quadratic,
+        it generates quadratic faces, else it generates linear faces using
+        medium nodes as if they are vertices.
+        The 3D mesher generates quadratic volumes only if all boundary faces
+        are quadratic, else it fails.
+        """
+        
         hyp = self.Hypothesis("QuadraticMesh", UseExisting=1, CompareMethod=self.CompareEqualHyp)
         return hyp
 
     pass # end of StdMeshersBuilder_Segment class
 
-## Segment 1D algorithm for discretization of a set of adjacent edges as one edge.
-#
-#  It is created by calling smeshBuilder.Mesh.Segment(smeshBuilder.COMPOSITE,geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_CompositeSegment(StdMeshersBuilder_Segment):
+    """
+    Segment 1D algorithm for discretization of a set of adjacent edges as one edge.
+
+    It is created by calling smeshBuilder.Mesh.Segment(smeshBuilder.COMPOSITE,geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Segment"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
+
     algoType   = COMPOSITE
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
+
     isDefault  = False
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
+
     docHelper  = "Creates segment 1D algorithm for edges"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         self.Create(mesh, geom, self.algoType)
         pass
 
     pass # end of StdMeshersBuilder_CompositeSegment class
 
-## Defines a segment 1D algorithm for discretization of edges with Python function
-#
-#  It is created by calling smeshBuilder.Mesh.Segment(smeshBuilder.PYTHON,geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Segment_Python(Mesh_Algorithm):
+    """
+    Defines a segment 1D algorithm for discretization of edges with Python function
+        It is created by calling smeshBuilder.Mesh.Segment(smeshBuilder.PYTHON,geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Segment"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = PYTHON
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates segment 1D algorithm for edges"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         import Python1dPlugin
         self.Create(mesh, geom, self.algoType, "libPython1dEngine.so")
         pass
 
-    ## Defines "PythonSplit1D" hypothesis
-    #  @param n for the number of segments that cut an edge
-    #  @param func for the python function that calculates the length of all segments
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_1dhyps
     def PythonSplit1D(self, n, func, UseExisting=0):
+        """
+        Defines "PythonSplit1D" hypothesis
+
+        Parameters:
+            n: for the number of segments that cut an edge
+            func: for the python function that calculates the length of all segments
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+        
         compFun = lambda hyp, args: False
         hyp = self.Hypothesis("PythonSplit1D", [n], "libPython1dEngine.so",
                               UseExisting=UseExisting, CompareMethod=compFun)
@@ -489,43 +617,54 @@ class StdMeshersBuilder_Segment_Python(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Segment_Python class
 
-## Triangle MEFISTO 2D algorithm
-#
-#  It is created by calling smeshBuilder.Mesh.Triangle(smeshBuilder.MEFISTO,geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Triangle_MEFISTO(Mesh_Algorithm):
+    """
+    Triangle MEFISTO 2D algorithm
+    It is created by calling smeshBuilder.Mesh.Triangle(smeshBuilder.MEFISTO,geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Triangle"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = MEFISTO
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates triangle 2D algorithm for faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "MaxElementArea" hypothesis basing on the definition of the maximum area of each triangle
-    #  @param area for the maximum area of each triangle
-    #  @param UseExisting if ==true - searches for an  existing hypothesis created with the
-    #                     same parameters, else (default) - creates a new one
-    #
-    #  @ingroup l3_hypos_2dhyps
     def MaxElementArea(self, area, UseExisting=0):
+        """
+        Defines "MaxElementArea" hypothesis basing on the definition of the maximum area of each triangle
+
+        Parameters:
+            area: for the maximum area of each triangle
+            UseExisting: if ==true - searches for an  existing hypothesis created with the
+                same parameters, else (default) - creates a new one
+        """
+        
         from salome.smesh.smeshBuilder import IsEqual
         comparator = lambda hyp, args: IsEqual(hyp.GetMaxElementArea(), args[0])
         hyp = self.Hypothesis("MaxElementArea", [area], UseExisting=UseExisting,
@@ -533,85 +672,101 @@ class StdMeshersBuilder_Triangle_MEFISTO(Mesh_Algorithm):
         hyp.SetMaxElementArea(area)
         return hyp
 
-    ## Defines "LengthFromEdges" hypothesis to build triangles
-    #  based on the length of the edges taken from the wire
-    #
-    #  @ingroup l3_hypos_2dhyps
     def LengthFromEdges(self):
+        """
+        Defines "LengthFromEdges" hypothesis to build triangles
+            based on the length of the edges taken from the wire
+        """
+        
         hyp = self.Hypothesis("LengthFromEdges", UseExisting=1, CompareMethod=self.CompareEqualHyp)
         return hyp
 
     pass # end of StdMeshersBuilder_Triangle_MEFISTO class
 
-## Defines a quadrangle 2D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Quadrangle(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Quadrangle(Mesh_Algorithm):
+    """
+    Defines a quadrangle 2D algorithm
+    It is created by calling smeshBuilder.Mesh.Quadrangle(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Quadrangle"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = QUADRANGLE
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates quadrangle 2D algorithm for faces"
-    ## hypothesis associated with algorithm
-    #  @internal
+    """
+    doc string of the method
+    """
     params     = 0
+    """
+    hypothesis associated with algorithm
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "QuadrangleParameters" hypothesis
-    #  @param quadType defines the algorithm of transition between differently descretized
-    #                  sides of a geometrical face:
-    #  - QUAD_STANDARD - both triangles and quadrangles are possible in the transition
-    #                    area along the finer meshed sides.
-    #  - QUAD_TRIANGLE_PREF - only triangles are built in the transition area along the
-    #                    finer meshed sides.
-    #  - QUAD_QUADRANGLE_PREF - only quadrangles are built in the transition area along
-    #                    the finer meshed sides, iff the total quantity of segments on
-    #                    all four sides of the face is even (divisible by 2).
-    #  - QUAD_QUADRANGLE_PREF_REVERSED - same as QUAD_QUADRANGLE_PREF but the transition
-    #                    area is located along the coarser meshed sides.
-    #  - QUAD_REDUCED - only quadrangles are built and the transition between the sides
-    #                    is made gradually, layer by layer. This type has a limitation on
-    #                    the number of segments: one pair of opposite sides must have the
-    #                    same number of segments, the other pair must have an even difference
-    #                    between the numbers of segments on the sides.
-    #  @param triangleVertex: vertex of a trilateral geometrical face, around which triangles
-    #                    will be created while other elements will be quadrangles.
-    #                    Vertex can be either a GEOM_Object or a vertex ID within the
-    #                    shape to mesh
-    #  @param enfVertices: list of shapes defining positions where nodes (enforced nodes)
-    #                    must be created by the mesher. Shapes can be of any type,
-    #                    vertices of given shapes define positions of enforced nodes.
-    #                    Only vertices successfully projected to the face are used.
-    #  @param enfPoints: list of points giving positions of enforced nodes.
-    #                    Point can be defined either as SMESH.PointStruct's
-    #                    ([SMESH.PointStruct(x1,y1,z1), SMESH.PointStruct(x2,y2,z2),...])
-    #                    or triples of values ([[x1,y1,z1], [x2,y2,z2], ...]).
-    #                    In the case if the defined QuadrangleParameters() refer to a sole face,
-    #                    all given points must lie on this face, else the mesher fails.
-    #  @param UseExisting: if \c True - searches for the existing hypothesis created with
-    #                    the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_quad
     def QuadrangleParameters(self, quadType=StdMeshers.QUAD_STANDARD, triangleVertex=0,
                              enfVertices=[],enfPoints=[],UseExisting=0):
+        """
+        Defines "QuadrangleParameters" hypothesis
+            quadType defines the algorithm of transition between differently descretized
+            sides of a geometrical face:
+
+            - QUAD_STANDARD - both triangles and quadrangles are possible in the transition
+                area along the finer meshed sides.
+            - QUAD_TRIANGLE_PREF - only triangles are built in the transition area along the
+                finer meshed sides.
+            - QUAD_QUADRANGLE_PREF - only quadrangles are built in the transition area along
+                the finer meshed sides, iff the total quantity of segments on
+                all four sides of the face is even (divisible by 2).
+            - QUAD_QUADRANGLE_PREF_REVERSED - same as QUAD_QUADRANGLE_PREF but the transition
+                area is located along the coarser meshed sides.
+            - QUAD_REDUCED - only quadrangles are built and the transition between the sides
+                is made gradually, layer by layer. This type has a limitation on
+                the number of segments: one pair of opposite sides must have the
+                same number of segments, the other pair must have an even difference
+                between the numbers of segments on the sides.
+
+        Parameters:
+            triangleVertex: vertex of a trilateral geometrical face, around which triangles
+                will be created while other elements will be quadrangles.
+                Vertex can be either a GEOM_Object or a vertex ID within the
+                shape to mesh
+            enfVertices: list of shapes defining positions where nodes (enforced nodes)
+                must be created by the mesher. Shapes can be of any type,
+                vertices of given shapes define positions of enforced nodes.
+                Only vertices successfully projected to the face are used.
+            enfPoints: list of points giving positions of enforced nodes.
+                Point can be defined either as SMESH.PointStruct's
+                ([SMESH.PointStruct(x1,y1,z1), SMESH.PointStruct(x2,y2,z2),...])
+                or triples of values ([[x1,y1,z1], [x2,y2,z2], ...]).
+                In the case if the defined QuadrangleParameters() refer to a sole face,
+                all given points must lie on this face, else the mesher fails.
+            UseExisting: if *True* - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+        
+
         import GEOM, SMESH
         vertexID = triangleVertex
         if isinstance( triangleVertex, GEOM._objref_GEOM_Object ):
@@ -646,123 +801,157 @@ class StdMeshersBuilder_Quadrangle(Mesh_Algorithm):
         self.params.SetEnforcedNodes( enfVertices, pStructs )
         return self.params
 
-    ## Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
-    #   quadrangles are built in the transition area along the finer meshed sides,
-    #   iff the total quantity of segments on all four sides of the face is even.
-    #  @param reversed if True, transition area is located along the coarser meshed sides.
-    #  @param UseExisting: if ==true - searches for the existing hypothesis created with
-    #                  the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_quad
     def QuadranglePreference(self, reversed=False, UseExisting=0):
+        """
+        Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
+            quadrangles are built in the transition area along the finer meshed sides,
+            if the total quantity of segments on all four sides of the face is even.
+
+        Parameters:
+            reversed: if True, transition area is located along the coarser meshed sides.
+        UseExisting: if ==true - searches for the existing hypothesis created with
+            the same parameters, else (default) - creates a new one
+        """
+        
         if reversed:
             return self.QuadrangleParameters(QUAD_QUADRANGLE_PREF_REVERSED,UseExisting=UseExisting)
         return self.QuadrangleParameters(QUAD_QUADRANGLE_PREF,UseExisting=UseExisting)
 
-    ## Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
-    #   triangles are built in the transition area along the finer meshed sides.
-    #  @param UseExisting: if ==true - searches for the existing hypothesis created with
-    #                  the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_quad
     def TrianglePreference(self, UseExisting=0):
+        """
+        Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
+            triangles are built in the transition area along the finer meshed sides.
+
+        Parameters:
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+    
         return self.QuadrangleParameters(QUAD_TRIANGLE_PREF,UseExisting=UseExisting)
 
-    ## Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
-    #   quadrangles are built and the transition between the sides is made gradually,
-    #   layer by layer. This type has a limitation on the number of segments: one pair
-    #   of opposite sides must have the same number of segments, the other pair must
-    #   have an even difference between the numbers of segments on the sides.
-    #  @param UseExisting: if ==true - searches for the existing hypothesis created with
-    #                  the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_quad
     def Reduced(self, UseExisting=0):
+        """
+        Defines "QuadrangleParams" hypothesis with a type of quadrangulation that only
+            quadrangles are built and the transition between the sides is made gradually,
+            layer by layer. This type has a limitation on the number of segments: one pair
+            of opposite sides must have the same number of segments, the other pair must
+            have an even difference between the numbers of segments on the sides.
+
+        Parameters:
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+        
         return self.QuadrangleParameters(QUAD_REDUCED,UseExisting=UseExisting)
 
-    ## Defines "QuadrangleParams" hypothesis with QUAD_STANDARD type of quadrangulation
-    #  @param vertex: vertex of a trilateral geometrical face, around which triangles
-    #                 will be created while other elements will be quadrangles.
-    #                 Vertex can be either a GEOM_Object or a vertex ID within the
-    #                 shape to mesh
-    #  @param UseExisting: if ==true - searches for the existing hypothesis created with
-    #                   the same parameters, else (default) - creates a new one
-    #  @ingroup l3_hypos_quad
     def TriangleVertex(self, vertex, UseExisting=0):
+        """
+        Defines "QuadrangleParams" hypothesis with QUAD_STANDARD type of quadrangulation
+
+        Parameters:
+            vertex: vertex of a trilateral geometrical face, around which triangles
+                will be created while other elements will be quadrangles.
+                Vertex can be either a GEOM_Object or a vertex ID within the
+                shape to mesh
+             UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
+        
         return self.QuadrangleParameters(QUAD_STANDARD,vertex,UseExisting)
 
     pass # end of StdMeshersBuilder_Quadrangle class
 
-## Defines a hexahedron 3D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Hexahedron(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Hexahedron(Mesh_Algorithm):
+    """
+    Defines a hexahedron 3D algorithm
+    It is created by calling smeshBuilder.Mesh.Hexahedron(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Hexahedron"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = Hexa
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates hexahedron 3D algorithm for volumes"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, Hexa)
         pass
 
     pass # end of StdMeshersBuilder_Hexahedron class
 
-## Defines a projection 1D algorithm
-#  
-#  It is created by calling smeshBuilder.Mesh.Projection1D(geom=0)
-#
-#  @ingroup l3_algos_proj
 class StdMeshersBuilder_Projection1D(Mesh_Algorithm):
+    """
+    Defines a projection 1D algorithm
+    It is created by calling smeshBuilder.Mesh.Projection1D(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Projection1D"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Projection_1D"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates projection 1D algorithm for edges"
-
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
+    """
+    doc string of the method
+    """
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "Source Edge" hypothesis, specifying a meshed edge, from where
-    #  a mesh pattern is taken, and, optionally, the association of vertices
-    #  between the source edge and a target edge (to which a hypothesis is assigned)
-    #  @param edge from which nodes distribution is taken
-    #  @param mesh from which nodes distribution is taken (optional)
-    #  @param srcV a vertex of \a edge to associate with \a tgtV (optional)
-    #  @param tgtV a vertex of \a the edge to which the algorithm is assigned,
-    #  to associate with \a srcV (optional)
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
     def SourceEdge(self, edge, mesh=None, srcV=None, tgtV=None, UseExisting=0):
+        """
+        Defines "Source Edge" hypothesis, specifying a meshed edge, from where
+            a mesh pattern is taken, and, optionally, the association of vertices
+            between the source edge and a target edge (to which a hypothesis is assigned)
+
+        Parameters:
+            edge: from which nodes distribution is taken
+            mesh: from which nodes distribution is taken (optional)
+            srcV: a vertex of *edge* to associate with *tgtV* (optional)
+            tgtV: a vertex of *the edge* to which the algorithm is assigned, to associate with *srcV* (optional)
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
         from salome.smesh.smeshBuilder import AssureGeomPublished, Mesh
         AssureGeomPublished( self.mesh, edge )
         AssureGeomPublished( self.mesh, srcV )
@@ -780,53 +969,65 @@ class StdMeshersBuilder_Projection1D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Projection1D class
 
-## Defines a projection 2D algorithm
-#  
-#  It is created by calling smeshBuilder.Mesh.Projection2D(geom=0)
-#
-#  @ingroup l3_algos_proj
 class StdMeshersBuilder_Projection2D(Mesh_Algorithm):
+    """
+    Defines a projection 2D algorithm
+    It is created by calling smeshBuilder.Mesh.Projection2D(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Projection2D"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Projection_2D"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates projection 2D algorithm for faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+            if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "Source Face" hypothesis, specifying a meshed face, from where
-    #  a mesh pattern is taken, and, optionally, the association of vertices
-    #  between the source face and the target face (to which a hypothesis is assigned)
-    #  @param face from which the mesh pattern is taken
-    #  @param mesh from which the mesh pattern is taken (optional)
-    #  @param srcV1 a vertex of \a face to associate with \a tgtV1 (optional)
-    #  @param tgtV1 a vertex of \a the face to which the algorithm is assigned,
-    #               to associate with \a srcV1 (optional)
-    #  @param srcV2 a vertex of \a face to associate with \a tgtV1 (optional)
-    #  @param tgtV2 a vertex of \a the face to which the algorithm is assigned,
-    #               to associate with \a srcV2 (optional)
-    #  @param UseExisting if ==true - forces the search for the existing hypothesis created with
-    #                     the same parameters, else (default) - forces the creation a new one
-    #
-    #  Note: all association vertices must belong to one edge of a face
+
     def SourceFace(self, face, mesh=None, srcV1=None, tgtV1=None,
                    srcV2=None, tgtV2=None, UseExisting=0):
+        """
+        Defines "Source Face" hypothesis, specifying a meshed face, from where
+            a mesh pattern is taken, and, optionally, the association of vertices
+            between the source face and the target face (to which a hypothesis is assigned)
+
+        Parameters:
+            face: from which the mesh pattern is taken
+            mesh: from which the mesh pattern is taken (optional)
+            srcV1: a vertex of *face* to associate with *tgtV1* (optional)
+            tgtV1: a vertex of *the face* to which the algorithm is assigned, to associate with *srcV1* (optional)
+            srcV2: a vertex of *face* to associate with *tgtV1* (optional)
+            tgtV2: a vertex of *the face* to which the algorithm is assigned, to associate with *srcV2* (optional)
+            UseExisting: if ==true - forces the search for the existing hypothesis created with
+                he same parameters, else (default) - forces the creation a new one
+
+        Note: 
+            all association vertices must belong to one edge of a face
+        """
         from salome.smesh.smeshBuilder import Mesh
         if isinstance(mesh, Mesh):
             mesh = mesh.GetMesh()
@@ -845,76 +1046,93 @@ class StdMeshersBuilder_Projection2D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Projection2D class
 
-## Defines a projection 1D-2D algorithm
-#  
-#  It is created by calling smeshBuilder.Mesh.Projection1D2D(geom=0)
-#
-#  @ingroup l3_algos_proj
 class StdMeshersBuilder_Projection1D2D(StdMeshersBuilder_Projection2D):
+    """
+    Defines a projection 1D-2D algorithm
+    It is created by calling smeshBuilder.Mesh.Projection1D2D(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Projection1D2D"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Projection_1D2D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates projection 1D-2D algorithm for faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         StdMeshersBuilder_Projection2D.__init__(self, mesh, geom)
         pass
 
     pass # end of StdMeshersBuilder_Projection1D2D class
 
-## Defines a projection 3D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Projection3D(geom=0)
-#
-#  @ingroup l3_algos_proj
 class StdMeshersBuilder_Projection3D(Mesh_Algorithm):
+    """
+    Defines a projection 3D algorithm
+    It is created by calling smeshBuilder.Mesh.Projection3D(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Projection3D"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Projection_3D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates projection 3D algorithm for volumes"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom" geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines the "Source Shape 3D" hypothesis, specifying a meshed solid, from where
-    #  the mesh pattern is taken, and, optionally, the  association of vertices
-    #  between the source and the target solid  (to which a hipothesis is assigned)
-    #  @param solid from where the mesh pattern is taken
-    #  @param mesh from where the mesh pattern is taken (optional)
-    #  @param srcV1 a vertex of \a solid to associate with \a tgtV1 (optional)
-    #  @param tgtV1 a vertex of \a the solid where the algorithm is assigned,
-    #  to associate with \a srcV1 (optional)
-    #  @param srcV2 a vertex of \a solid to associate with \a tgtV1 (optional)
-    #  @param tgtV2 a vertex of \a the solid to which the algorithm is assigned,
-    #  to associate with \a srcV2 (optional)
-    #  @param UseExisting - if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
-    #
-    #  Note: association vertices must belong to one edge of a solid
     def SourceShape3D(self, solid, mesh=0, srcV1=0, tgtV1=0,
                       srcV2=0, tgtV2=0, UseExisting=0):
+        """
+        Defines the "Source Shape 3D" hypothesis, specifying a meshed solid, from where
+            the mesh pattern is taken, and, optionally, the  association of vertices
+            between the source and the target solid  (to which a hipothesis is assigned)
+
+        Parameters:
+            solid: from where the mesh pattern is taken
+            mesh: from where the mesh pattern is taken (optional)
+            srcV1: a vertex of *solid* to associate with *tgtV1* (optional)
+            tgtV1: a vertex of *the solid* where the algorithm is assigned, to associate with *srcV1* (optional)
+            srcV2: a vertex of *solid* to associate with *tgtV1* (optional)
+            tgtV2: a vertex of *the solid* to which the algorithm is assigned,to associate with *srcV2* (optional)
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                    the same parameters, else (default) - creates a new one
+
+        Note: 
+            association vertices must belong to one edge of a solid
+        """
         for geom in [ solid, srcV1, tgtV1, srcV2, tgtV2 ]:
             from salome.smesh.smeshBuilder import AssureGeomPublished
             AssureGeomPublished( self.mesh, geom )
@@ -936,33 +1154,40 @@ class StdMeshersBuilder_Projection3D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Projection3D class
 
-## Defines a Prism 3D algorithm, which is either "Extrusion 3D" or "Radial Prism"
-#  depending on geometry
-# 
-#  It is created by calling smeshBuilder.Mesh.Prism(geom=0)
-#
-#  @ingroup l3_algos_3dextr
 class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
+    """
+    Defines a Prism 3D algorithm, which is either "Extrusion 3D" or "Radial Prism" depending on geometry
+    It is created by calling smeshBuilder.Mesh.Prism(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Prism"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Prism_3D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates prism 3D algorithm for volumes"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    doc string of the method
+    """
     isDefault  = True
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         
         shape = geom
@@ -980,16 +1205,24 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
             pass
         pass
 
-    ## Return 3D hypothesis holding the 1D one
     def Get3DHypothesis(self):
+        """
+        Returns: 
+            3D hypothesis holding the 1D one
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         return self.distribHyp
 
-    ## Private method creating a 1D hypothesis and storing it in the LayerDistribution
-    #  hypothesis. Returns the created hypothesis
     def OwnHypothesis(self, hypType, args=[], so="libStdMeshersEngine.so"):
+        """
+        Private method creating a 1D hypothesis and storing it in the LayerDistribution
+            hypothesis. 
+
+        Returns:
+            the created hypothesis
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1004,12 +1237,16 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         self.distribHyp.SetLayerDistribution( hyp )
         return hyp
 
-    ## Defines "NumberOfLayers" hypothesis, specifying the number of layers of
-    #  prisms to build between the inner and outer shells
-    #  @param n number of layers
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
     def NumberOfLayers(self, n, UseExisting=0):
+        """
+        Defines "NumberOfLayers" hypothesis, specifying the number of layers of
+            prisms to build between the inner and outer shells
+
+        Parameters:
+            n: number of layers
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1021,11 +1258,15 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         self.nbLayers.SetNumberOfLayers( n )
         return self.nbLayers
 
-    ## Defines "LocalLength" hypothesis, specifying the segment length
-    #  to build between the inner and the outer shells
-    #  @param l the length of segments
-    #  @param p the precision of rounding
     def LocalLength(self, l, p=1e-07):
+        """
+        Defines "LocalLength" hypothesis, specifying the segment length
+            to build between the inner and the outer shells
+
+        Parameters:
+            l: the length of segments
+            p: the precision of rounding
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1034,11 +1275,15 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         hyp.SetPrecision(p)
         return hyp
 
-    ## Defines "NumberOfSegments" hypothesis, specifying the number of layers of
-    #  prisms to build between the inner and the outer shells.
-    #  @param n the number of layers
-    #  @param s the scale factor (optional)
     def NumberOfSegments(self, n, s=[]):
+        """
+        Defines "NumberOfSegments" hypothesis, specifying the number of layers of
+            prisms to build between the inner and the outer shells.
+
+        Parameters:
+            n: the number of layers
+            s: the scale factor (optional)
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1050,12 +1295,16 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         hyp.SetNumberOfSegments(n)
         return hyp
 
-    ## Defines "Arithmetic1D" hypothesis, specifying the distribution of segments
-    #  to build between the inner and the outer shells with a length that changes
-    #  in arithmetic progression
-    #  @param start  the length of the first segment
-    #  @param end    the length of the last  segment
     def Arithmetic1D(self, start, end ):
+        """
+        Defines "Arithmetic1D" hypothesis, specifying the distribution of segments
+            to build between the inner and the outer shells with a length that changes
+            in arithmetic progression
+
+        Parameters:
+            start:  the length of the first segment
+            end:    the length of the last  segment
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1064,12 +1313,16 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         hyp.SetLength(end  , 0)
         return hyp
 
-    ## Defines "GeometricProgression" hypothesis, specifying the distribution of segments
-    #  to build between the inner and the outer shells with a length that changes
-    #  in Geometric progression
-    #  @param start  the length of the first segment
-    #  @param ratio  the common ratio of the geometric progression
     def GeometricProgression(self, start, ratio ):
+        """
+        Defines "GeometricProgression" hypothesis, specifying the distribution of segments
+            to build between the inner and the outer shells with a length that changes
+            in Geometric progression
+
+        Parameters:
+            start:  the length of the first segment
+            ratio:  the common ratio of the geometric progression
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1078,11 +1331,15 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         hyp.SetCommonRatio( ratio )
         return hyp
 
-    ## Defines "StartEndLength" hypothesis, specifying distribution of segments
-    #  to build between the inner and the outer shells as geometric length increasing
-    #  @param start for the length of the first segment
-    #  @param end   for the length of the last  segment
     def StartEndLength(self, start, end):
+        """
+        Defines "StartEndLength" hypothesis, specifying distribution of segments
+            to build between the inner and the outer shells as geometric length increasing
+
+        Parameters:
+            start: for the length of the first segment
+        end:   for the length of the last  segment
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1091,10 +1348,14 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         hyp.SetLength(end  , 0)
         return hyp
 
-    ## Defines "AutomaticLength" hypothesis, specifying the number of segments
-    #  to build between the inner and outer shells
-    #  @param fineness defines the quality of the mesh within the range [0-1]
     def AutomaticLength(self, fineness=0):
+        """
+        Defines "AutomaticLength" hypothesis, specifying the number of segments
+            to build between the inner and outer shells
+
+        Parameters:
+            fineness: defines the quality of the mesh within the range [0-1]
+        """
         if self.algoType != "RadialPrism_3D":
             print("Prism_3D algorithm doesn't support any hypothesis")
             return None
@@ -1104,28 +1365,35 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Prism3D class
 
-## Defines Radial Prism 3D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Prism(geom=0)
-#
-#  @ingroup l3_algos_3dextr
 class StdMeshersBuilder_RadialPrism3D(StdMeshersBuilder_Prism3D):
+    """
+    Defines Radial Prism 3D algorithm
+    It is created by calling smeshBuilder.Mesh.Prism(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Prism"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "RadialPrism_3D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates Raial Prism 3D algorithm for volumes"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+            if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         
         shape = geom
@@ -1136,9 +1404,10 @@ class StdMeshersBuilder_RadialPrism3D(StdMeshersBuilder_Prism3D):
         self.nbLayers = None
         return
 
-## Base class for algorithms supporting radial distribution hypotheses
-# 
 class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
+    """
+    Base class for algorithms supporting radial distribution hypotheses
+    """ 
 
     def __init__(self):
         Mesh_Algorithm.__init__(self)
@@ -1147,15 +1416,23 @@ class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
         self.nbLayers = None
         pass
 
-    ## Return 2D hypothesis holding the 1D one
     def Get2DHypothesis(self):
+        """
+        Returns:
+            2D hypothesis holding the 1D one
+        """
         if not self.distribHyp:
             self.distribHyp = self.Hypothesis("LayerDistribution2D", UseExisting=0)
         return self.distribHyp
 
-    ## Private method creating a 1D hypothesis and storing it in the LayerDistribution
-    #  hypothesis. Returns the created hypothesis
     def OwnHypothesis(self, hypType, args=[], so="libStdMeshersEngine.so"):
+        """
+        Private method creating a 1D hypothesis and storing it in the LayerDistribution
+            hypothesis. 
+
+        Returns: 
+            the created hypothesis
+        """
         if self.nbLayers:
             self.mesh.GetMesh().RemoveHypothesis( self.geom, self.nbLayers )
         if self.distribHyp is None:
@@ -1168,11 +1445,15 @@ class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
         self.distribHyp.SetLayerDistribution( hyp )
         return hyp
 
-    ## Defines "NumberOfLayers" hypothesis, specifying the number of layers
-    #  @param n number of layers
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
     def NumberOfLayers(self, n, UseExisting=0):
+        """
+        Defines "NumberOfLayers" hypothesis, specifying the number of layers
+
+        Parameters:
+            n: number of layers
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
         if self.distribHyp:
             self.mesh.GetMesh().RemoveHypothesis( self.geom, self.distribHyp )
         from salome.smesh.smeshBuilder import IsEqual
@@ -1182,19 +1463,27 @@ class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
         self.nbLayers.SetNumberOfLayers( n )
         return self.nbLayers
 
-    ## Defines "LocalLength" hypothesis, specifying the segment length
-    #  @param l the length of segments
-    #  @param p the precision of rounding
     def LocalLength(self, l, p=1e-07):
+        """
+        Defines "LocalLength" hypothesis, specifying the segment length
+
+        Parameters:
+            l: the length of segments
+            p: the precision of rounding
+        """
         hyp = self.OwnHypothesis("LocalLength", [l,p])
         hyp.SetLength(l)
         hyp.SetPrecision(p)
         return hyp
 
-    ## Defines "NumberOfSegments" hypothesis, specifying the number of layers
-    #  @param n the number of layers
-    #  @param s the scale factor (optional)
     def NumberOfSegments(self, n, s=[]):
+        """
+        Defines "NumberOfSegments" hypothesis, specifying the number of layers
+
+        Parameters:
+            n: the number of layers
+            s: the scale factor (optional)
+        """
         if s == []:
             hyp = self.OwnHypothesis("NumberOfSegments", [n])
         else:
@@ -1204,67 +1493,89 @@ class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
         hyp.SetNumberOfSegments(n)
         return hyp
 
-    ## Defines "Arithmetic1D" hypothesis, specifying the distribution of segments
-    #  with a length that changes in arithmetic progression
-    #  @param start  the length of the first segment
-    #  @param end    the length of the last  segment
     def Arithmetic1D(self, start, end ):
+        """
+        Defines "Arithmetic1D" hypothesis, specifying the distribution of segments
+            with a length that changes in arithmetic progression
+
+        Parameters:
+            start:  the length of the first segment
+            end:    the length of the last  segment
+        """
         hyp = self.OwnHypothesis("Arithmetic1D", [start, end])
         hyp.SetLength(start, 1)
         hyp.SetLength(end  , 0)
         return hyp
 
-    ## Defines "GeometricProgression" hypothesis, specifying the distribution of segments
-    #  with a length that changes in Geometric progression
-    #  @param start  the length of the first segment
-    #  @param ratio  the common ratio of the geometric progression
     def GeometricProgression(self, start, ratio ):
+        """
+        Defines "GeometricProgression" hypothesis, specifying the distribution of segments
+            with a length that changes in Geometric progression
+
+        Parameters:
+            start:  the length of the first segment
+            ratio:  the common ratio of the geometric progression
+        """
         hyp = self.OwnHypothesis("GeometricProgression", [start, ratio])
         hyp.SetStartLength( start )
         hyp.SetCommonRatio( ratio )
         return hyp
 
-    ## Defines "StartEndLength" hypothesis, specifying distribution of segments
-    #  as geometric length increasing
-    #  @param start for the length of the first segment
-    #  @param end   for the length of the last  segment
     def StartEndLength(self, start, end):
+        """
+        Defines "StartEndLength" hypothesis, specifying distribution of segments
+            as geometric length increasing
+
+        Parameters:
+            start: for the length of the first segment
+            end:   for the length of the last  segment
+        """
         hyp = self.OwnHypothesis("StartEndLength", [start, end])
         hyp.SetLength(start, 1)
         hyp.SetLength(end  , 0)
         return hyp
 
-    ## Defines "AutomaticLength" hypothesis, specifying the number of segments
-    #  @param fineness defines the quality of the mesh within the range [0-1]
     def AutomaticLength(self, fineness=0):
+        """
+        Defines "AutomaticLength" hypothesis, specifying the number of segments
+
+        Parameters:
+            fineness: defines the quality of the mesh within the range [0-1]
+        """
         hyp = self.OwnHypothesis("AutomaticLength")
         hyp.SetFineness( fineness )
         return hyp
 
     pass # end of StdMeshersBuilder_RadialQuadrangle1D2D class
 
-## Defines a Radial Quadrangle 1D-2D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Quadrangle(smeshBuilder.RADIAL_QUAD,geom=0)
-#
-#  @ingroup l2_algos_radialq
 class StdMeshersBuilder_RadialQuadrangle1D2D(StdMeshersBuilder_RadialAlgorithm):
+    """
+    Defines a Radial Quadrangle 1D-2D algorithm 
+    It is created by calling smeshBuilder.Mesh.Quadrangle(smeshBuilder.RADIAL_QUAD,geom=0)
+    """
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Quadrangle"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = RADIAL_QUAD
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates quadrangle 1D-2D algorithm for faces having a shape of disk or a disk segment"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         StdMeshersBuilder_RadialAlgorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
 
@@ -1273,103 +1584,127 @@ class StdMeshersBuilder_RadialQuadrangle1D2D(StdMeshersBuilder_RadialAlgorithm):
         pass
 
 
-## Defines a Quadrangle (Medial Axis Projection) 1D-2D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Quadrangle(smeshBuilder.QUAD_MA_PROJ,geom=0)
-#
-#  @ingroup l2_algos_quad_ma
 class StdMeshersBuilder_QuadMA_1D2D(StdMeshersBuilder_RadialAlgorithm):
+    """
+    Defines a Quadrangle (Medial Axis Projection) 1D-2D algorithm 
+    It is created by calling smeshBuilder.Mesh.Quadrangle(smeshBuilder.QUAD_MA_PROJ,geom=0)
+    """
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Quadrangle"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = QUAD_MA_PROJ
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates quadrangle 1D-2D algorithm for faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         StdMeshersBuilder_RadialAlgorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
     pass
 
-## Defines a Polygon Per Face 2D algorithm
-# 
-#  It is created by calling smeshBuilder.Mesh.Polygon(geom=0)
-#
-#  @ingroup l2_algos_quad_ma
 class StdMeshersBuilder_PolygonPerFace(Mesh_Algorithm):
+    """ Defines a Polygon Per Face 2D algorithm 
+        It is created by calling smeshBuilder.Mesh.Polygon(geom=0)
+    """
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "Polygon"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = POLYGON
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates polygon 2D algorithm for faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
     pass
 
-## Defines a Use Existing Elements 1D algorithm
-#
-#  It is created by calling smeshBuilder.Mesh.UseExisting1DElements(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_UseExistingElements_1D(Mesh_Algorithm):
+    """ Defines a Use Existing Elements 1D algorithm
+
+    It is created by calling smeshBuilder.Mesh.UseExisting1DElements(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "UseExisting1DElements"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Import_1D"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates 1D algorithm for edges with reusing of existing mesh elements"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "Source edges" hypothesis, specifying groups of edges to import
-    #  @param groups list of groups of edges
-    #  @param toCopyMesh if True, the whole mesh \a groups belong to is imported
-    #  @param toCopyGroups if True, all groups of the mesh \a groups belong to are imported
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
     def SourceEdges(self, groups, toCopyMesh=False, toCopyGroups=False, UseExisting=False):
+        """
+        Defines "Source edges" hypothesis, specifying groups of edges to import
+
+        Parameters:
+            groups: list of groups of edges
+            toCopyMesh: if True, the whole mesh *groups* belong to is imported
+            toCopyGroups: if True, all groups of the mesh *groups* belong to are imported
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
         for group in groups:
             from salome.smesh.smeshBuilder import AssureGeomPublished
             AssureGeomPublished( self.mesh, group )
@@ -1383,43 +1718,55 @@ class StdMeshersBuilder_UseExistingElements_1D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_UseExistingElements_1D class
 
-## Defines a Use Existing Elements 1D-2D algorithm
-#
-#  It is created by calling smeshBuilder.Mesh.UseExisting2DElements(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_UseExistingElements_1D2D(Mesh_Algorithm):
+    """ Defines a Use Existing Elements 1D-2D algorithm
+
+    It is created by calling smeshBuilder.Mesh.UseExisting2DElements(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "UseExisting2DElements"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Import_1D2D"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates 1D-2D algorithm for faces with reusing of existing mesh elements"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         Mesh_Algorithm.__init__(self)
         self.Create(mesh, geom, self.algoType)
         pass
 
-    ## Defines "Source faces" hypothesis, specifying groups of faces to import
-    #  @param groups list of groups of faces
-    #  @param toCopyMesh if True, the whole mesh \a groups belong to is imported
-    #  @param toCopyGroups if True, all groups of the mesh \a groups belong to are imported
-    #  @param UseExisting if ==true - searches for the existing hypothesis created with
-    #                     the same parameters, else (default) - creates a new one
     def SourceFaces(self, groups, toCopyMesh=False, toCopyGroups=False, UseExisting=False):
+        """
+        Defines "Source faces" hypothesis, specifying groups of faces to import
+
+        Parameters:
+            groups: list of groups of faces
+            toCopyMesh: if True, the whole mesh *groups* belong to is imported
+            toCopyGroups: if True, all groups of the mesh *groups* belong to are imported
+            UseExisting: if ==true - searches for the existing hypothesis created with
+                the same parameters, else (default) - creates a new one
+        """
         import SMESH
         compFun = lambda hyp, args: ( hyp.GetSourceFaces() == args[0] and \
                                       hyp.GetCopySourceMesh() == args[1], args[2] )
@@ -1434,54 +1781,70 @@ class StdMeshersBuilder_UseExistingElements_1D2D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_UseExistingElements_1D2D class
 
-## Defines a Body Fitting 3D algorithm
-#
-#  It is created by calling smeshBuilder.Mesh.BodyFitted(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
+    """ Defines a Body Fitting 3D algorithm
+
+    It is created by calling smeshBuilder.Mesh.BodyFitted(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "BodyFitted"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "Cartesian_3D"
-    ## flag pointing whether this algorithm should be used by default in dynamic method
-    #  of smeshBuilder.Mesh class
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     isDefault  = True
-    ## doc string of the method
-    #  @internal
+    """
+    flag pointing whether this algorithm should be used by default in dynamic method
+        of smeshBuilder.Mesh class
+    """
     docHelper  = "Creates Body Fitting 3D algorithm for volumes"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         self.Create(mesh, geom, self.algoType)
         self.hyp = None
         pass
 
-    ## Defines "Body Fitting parameters" hypothesis
-    #  @param xGridDef is definition of the grid along the X asix.
-    #  It can be in either of two following forms:
-    #  - Explicit coordinates of nodes, e.g. [-1.5, 0.0, 3.1] or range( -100,200,10)
-    #  - Functions f(t) defining grid spacing at each point on grid axis. If there are
-    #    several functions, they must be accompanied by relative coordinates of
-    #    points dividing the whole shape into ranges where the functions apply; points
-    #    coodrinates should vary within (0.0, 1.0) range. Parameter \a t of the spacing
-    #    function f(t) varies from 0.0 to 1.0 within a shape range. 
-    #    Examples:
-    #    - "10.5" - defines a grid with a constant spacing
-    #    - [["1", "1+10*t", "11"] [0.1, 0.6]] - defines different spacing in 3 ranges.
-    #  @param yGridDef defines the grid along the Y asix the same way as \a xGridDef does.
-    #  @param zGridDef defines the grid along the Z asix the same way as \a xGridDef does.
-    #  @param sizeThreshold (> 1.0) defines a minimal size of a polyhedron so that
-    #         a polyhedron of size less than hexSize/sizeThreshold is not created.
-    #  @param implEdges enables implementation of geometrical edges into the mesh.
     def SetGrid(self, xGridDef, yGridDef, zGridDef, sizeThreshold=4.0, implEdges=False):
+        """
+        Defines "Body Fitting parameters" hypothesis
+
+        Parameters:
+            xGridDef: is definition of the grid along the X asix.
+                It can be in either of two following forms:
+
+                    - Explicit coordinates of nodes, e.g. [-1.5, 0.0, 3.1] or range( -100,200,10)
+                    - Functions f(t) defining grid spacing at each point on grid axis. If there are
+                        several functions, they must be accompanied by relative coordinates of
+                        points dividing the whole shape into ranges where the functions apply; points
+                        coodrinates should vary within (0.0, 1.0) range. Parameter *t* of the spacing
+                        function f(t) varies from 0.0 to 1.0 within a shape range. 
+
+        Examples:
+            "10.5" - defines a grid with a constant spacing
+            [["1", "1+10*t", "11"] [0.1, 0.6]] - defines different spacing in 3 ranges.
+
+        Parameters:
+            yGridDef: defines the grid along the Y asix the same way as *xGridDef* does.
+            zGridDef: defines the grid along the Z asix the same way as *xGridDef* does.
+            sizeThreshold: (> 1.0) defines a minimal size of a polyhedron so that
+                a polyhedron of size less than hexSize/sizeThreshold is not created.
+            implEdges: enables implementation of geometrical edges into the mesh.
+        """
         if not self.hyp:
             compFun = lambda hyp, args: False
             self.hyp = self.Hypothesis("CartesianParameters3D",
@@ -1505,11 +1868,15 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
         self.hyp.SetToAddEdges( implEdges )
         return self.hyp
 
-    ## Defines custom directions of axes of the grid
-    #  @param xAxis either SMESH.DirStruct or a vector, or 3 vector components
-    #  @param yAxis either SMESH.DirStruct or a vector, or 3 vector components
-    #  @param zAxis either SMESH.DirStruct or a vector, or 3 vector components
     def SetAxesDirs( self, xAxis, yAxis, zAxis ):
+        """
+        Defines custom directions of axes of the grid
+
+        Parameters:
+            xAxis: either SMESH.DirStruct or a vector, or 3 vector components
+            yAxis: either SMESH.DirStruct or a vector, or 3 vector components
+            zAxis: either SMESH.DirStruct or a vector, or 3 vector components
+        """
         import GEOM
         if hasattr( xAxis, "__getitem__" ):
             xAxis = self.mesh.smeshpyD.MakeDirStruct( xAxis[0],xAxis[1],xAxis[2] )
@@ -1530,10 +1897,14 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
         self.hyp.SetAxesDirs( xAxis, yAxis, zAxis )
         return self.hyp
 
-    ## Automatically defines directions of axes of the grid at which
-    #  a number of generated hexahedra is maximal
-    #  @param isOrthogonal defines whether the axes mush be orthogonal
     def SetOptimalAxesDirs(self, isOrthogonal=True):
+        """
+        Automatically defines directions of axes of the grid at which
+            a number of generated hexahedra is maximal
+
+        Parameters:
+            isOrthogonal: defines whether the axes mush be orthogonal
+        """
         if not self.hyp:
             self.hyp = self.Hypothesis("CartesianParameters3D")
         if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ):
@@ -1542,13 +1913,17 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
         self.hyp.SetAxesDirs( x,y,z )
         return self.hyp
 
-    ## Sets/unsets a fixed point. The algorithm makes a plane of the grid pass
-    #  through the fixed point in each direction at which the grid is defined
-    #  by spacing
-    #  @param p coordinates of the fixed point. Either SMESH.PointStruct or
-    #         a vertex or 3 components of coordinates.
-    #  @param toUnset defines whether the fixed point is defined or removed.
     def SetFixedPoint( self, p, toUnset=False ):
+        """
+        Sets/unsets a fixed point. The algorithm makes a plane of the grid pass
+            through the fixed point in each direction at which the grid is defined
+            by spacing
+
+        Parameters:
+            p: coordinates of the fixed point. Either SMESH.PointStruct or
+                a vertex or 3 components of coordinates.
+            toUnset: defines whether the fixed point is defined or removed.
+        """
         import SMESH, GEOM
         if toUnset:
             if not self.hyp: return
@@ -1567,57 +1942,71 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Cartesian_3D class
 
-## Defines a stub 1D algorithm, which enables "manual" creation of nodes and
-#  segments usable by 2D algorithms
-#
-#  It is created by calling smeshBuilder.Mesh.UseExistingSegments(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_UseExisting_1D(Mesh_Algorithm):
+    """ Defines a stub 1D algorithm, which enables "manual" creation of nodes and
+        segments usable by 2D algorithms
+
+    It is created by calling smeshBuilder.Mesh.UseExistingSegments(geom=0)
+    """
+
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "UseExistingSegments"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "UseExisting_1D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates 1D algorithm allowing batch meshing of edges"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+                if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         self.Create(mesh, geom, self.algoType)
         pass
 
     pass # end of StdMeshersBuilder_UseExisting_1D class
 
-## Defines a stub 2D algorithm, which enables "manual" creation of nodes and
-#  faces usable by 3D algorithms
-#
-#  It is created by calling smeshBuilder.Mesh.UseExistingFaces(geom=0)
-#
-#  @ingroup l3_algos_basic
 class StdMeshersBuilder_UseExisting_2D(Mesh_Algorithm):
+    """ Defines a stub 2D algorithm, which enables "manual" creation of nodes and
+    faces usable by 3D algorithms
+
+    It is created by calling smeshBuilder.Mesh.UseExistingFaces(geom=0)
+    """
+    
 
-    ## name of the dynamic method in smeshBuilder.Mesh class
-    #  @internal
     meshMethod = "UseExistingFaces"
-    ## type of algorithm used with helper function in smeshBuilder.Mesh class
-    #  @internal
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
     algoType   = "UseExisting_2D"
-    ## doc string of the method
-    #  @internal
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
     docHelper  = "Creates 2D algorithm allowing batch meshing of faces"
+    """
+    doc string of the method
+    """
 
-    ## Private constructor.
-    #  @param mesh parent mesh object algorithm is assigned to
-    #  @param geom geometry (shape/sub-shape) algorithm is assigned to;
-    #              if it is @c 0 (default), the algorithm is assigned to the main shape
     def __init__(self, mesh, geom=0):
+        """
+        Private constructor.
+
+        Parameters:
+            mesh: parent mesh object algorithm is assigned to
+            geom: geometry (shape/sub-shape) algorithm is assigned to;
+            if it is :code:`0` (default), the algorithm is assigned to the main shape
+        """
         self.Create(mesh, geom, self.algoType)
         pass
 
index d1e2f3bb23584320f531ab0386672fb146f5d52f..841dacbdbcb34855381dbc8aa0a4befdbac8e414 100644 (file)
 #  Author : Francis KLOSS, OCC
 #  Module : SMESH
 
-## @package smeshBuilder
-#  Python API for SALOME %Mesh module
-
-## @defgroup l1_auxiliary Auxiliary methods and structures
-## @defgroup l1_creating  Creating meshes
-## @{
-##   @defgroup l2_impexp     Importing and exporting meshes
-##   @{
-##     @details
-##     These are methods of class \ref smeshBuilder.smeshBuilder "smeshBuilder"
-##   @}
-##   @defgroup l2_construct  Constructing meshes
-##   @defgroup l2_algorithms Defining Algorithms
-##   @{
-##     @defgroup l3_algos_basic   Basic meshing algorithms
-##     @defgroup l3_algos_proj    Projection Algorithms
-##     @defgroup l3_algos_segmarv Segments around Vertex
-##     @defgroup l3_algos_3dextr  3D extrusion meshing algorithm
-
-##   @}
-##   @defgroup l2_hypotheses Defining hypotheses
-##   @{
-##     @defgroup l3_hypos_1dhyps 1D Meshing Hypotheses
-##     @defgroup l3_hypos_2dhyps 2D Meshing Hypotheses
-##     @defgroup l3_hypos_maxvol Max Element Volume hypothesis
-##     @defgroup l3_hypos_quad Quadrangle Parameters hypothesis
-##     @defgroup l3_hypos_additi Additional Hypotheses
-
-##   @}
-##   @defgroup l2_submeshes Constructing sub-meshes
-##   @defgroup l2_editing   Editing Meshes
-
-## @}
-## @defgroup l1_meshinfo  Mesh Information
-## @defgroup l1_controls  Quality controls and Filtering
-## @defgroup l1_grouping  Grouping elements
-## @{
-##   @defgroup l2_grps_create Creating groups
-##   @defgroup l2_grps_operon Using operations on groups
-##   @defgroup l2_grps_delete Deleting Groups
-
-## @}
-## @defgroup l1_modifying Modifying meshes
-## @{
-##   @defgroup l2_modif_add      Adding nodes and elements
-##   @defgroup l2_modif_del      Removing nodes and elements
-##   @defgroup l2_modif_edit     Modifying nodes and elements
-##   @defgroup l2_modif_renumber Renumbering nodes and elements
-##   @defgroup l2_modif_trsf     Transforming meshes (Translation, Rotation, Symmetry, Sewing, Merging)
-##   @defgroup l2_modif_unitetri Uniting triangles
-##   @defgroup l2_modif_cutquadr Cutting elements
-##   @defgroup l2_modif_changori Changing orientation of elements
-##   @defgroup l2_modif_smooth   Smoothing
-##   @defgroup l2_modif_extrurev Extrusion and Revolution
-##   @defgroup l2_modif_tofromqu Convert to/from Quadratic Mesh
-##   @defgroup l2_modif_duplicat Duplication of nodes and elements (to emulate cracks)
-
-## @}
-## @defgroup l1_measurements Measurements
-
 import salome
 from salome.geom import geomBuilder
 
@@ -170,9 +110,9 @@ except TypeError:
     omniORB.EnumItem.__ge__ = enumitem_ge
 
 
-## Private class used to workaround a problem that sometimes isinstance(m, Mesh) returns False
-#
 class MeshMeta(type):
+    """Private class used to workaround a problem that sometimes isinstance(m, Mesh) returns False
+    """
     def __instancecheck__(cls, inst):
         """Implement isinstance(inst, cls)."""
         return any(cls.__subclasscheck__(c)
@@ -182,11 +122,9 @@ class MeshMeta(type):
         """Implement issubclass(sub, cls)."""
         return type.__subclasscheck__(cls, sub) or (cls.__name__ == sub.__name__ and cls.__module__ == sub.__module__)
 
-## @addtogroup l1_auxiliary
-## @{
-
-## Convert an angle from degrees to radians
 def DegreesToRadians(AngleInDegrees):
+    """Convert an angle from degrees to radians
+    """
     from math import pi
     return AngleInDegrees * pi / 180.0
 
@@ -195,9 +133,11 @@ notebook = salome_notebook.notebook
 # Salome notebook variable separator
 var_separator = ":"
 
-## Return list of variable values from salome notebook.
-#  The last argument, if is callable, is used to modify values got from notebook
 def ParseParameters(*args):
+    """
+    Return list of variable values from salome notebook.
+    The last argument, if is callable, is used to modify values got from notebook
+    """
     Result = []
     Parameters = ""
     hasVariables = False
@@ -226,20 +166,26 @@ def ParseParameters(*args):
     Result.append( hasVariables )
     return Result
 
-## Parse parameters while converting variables to radians
 def ParseAngles(*args):
+    """
+    Parse parameters while converting variables to radians
+    """
     return ParseParameters( *( args + (DegreesToRadians, )))
 
-## Substitute PointStruct.__init__() to create SMESH.PointStruct using notebook variables.
-#  Parameters are stored in PointStruct.parameters attribute
 def __initPointStruct(point,*args):
+    """
+    Substitute PointStruct.__init__() to create SMESH.PointStruct using notebook variables.
+    Parameters are stored in PointStruct.parameters attribute
+    """
     point.x, point.y, point.z, point.parameters,hasVars = ParseParameters(*args)
     pass
 SMESH.PointStruct.__init__ = __initPointStruct
 
-## Substitute AxisStruct.__init__() to create SMESH.AxisStruct using notebook variables.
-#  Parameters are stored in AxisStruct.parameters attribute
 def __initAxisStruct(ax,*args):
+    """
+    Substitute AxisStruct.__init__() to create SMESH.AxisStruct using notebook variables.
+    Parameters are stored in AxisStruct.parameters attribute
+    """
     if len( args ) != 6:
         raise RuntimeError("Bad nb args (%s) passed in SMESH.AxisStruct(x,y,z,dx,dy,dz)"%(len( args )))
     ax.x, ax.y, ax.z, ax.vx, ax.vy, ax.vz, ax.parameters,hasVars = ParseParameters(*args)
@@ -247,16 +193,22 @@ def __initAxisStruct(ax,*args):
 SMESH.AxisStruct.__init__ = __initAxisStruct
 
 smeshPrecisionConfusion = 1.e-07
-## Compare real values using smeshPrecisionConfusion as tolerance
 def IsEqual(val1, val2, tol=smeshPrecisionConfusion):
+    """Compare real values using smeshPrecisionConfusion as tolerance
+    """
     if abs(val1 - val2) < tol:
         return True
     return False
 
 NO_NAME = "NoName"
 
-## Return object name
 def GetName(obj):
+    """
+    Return a name of an object
+    
+    Returns:
+        object name
+    """
     if obj:
         # object not null
         if isinstance(obj, SALOMEDS._objref_SObject):
@@ -283,8 +235,10 @@ def GetName(obj):
         pass
     raise RuntimeError("Null or invalid object")
 
-## Print error message if a hypothesis was not assigned.
 def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
+    """
+    Print error message if a hypothesis was not assigned.
+    """
     if isAlgo:
         hypType = "algorithm"
     else:
@@ -304,7 +258,7 @@ def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
         reason = hypType + " of the same dimension is already assigned to this shape"
     elif status == HYP_BAD_DIM:
         reason = hypType + " mismatches the shape"
-    elif status == HYP_CONCURENT:
+    elif status == HYP_CONCURRENT :
         reason = "there are concurrent hypotheses on sub-shapes"
     elif status == HYP_BAD_SUBSHAPE:
         reason = "the shape is neither the main one, nor its sub-shape, nor a valid group"
@@ -335,8 +289,10 @@ def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
         print('"%s" was not assigned : %s' %( hypName, reason ))
         pass
 
-## Private method. Add geom (sub-shape of the main shape) into the study if not yet there
 def AssureGeomPublished(mesh, geom, name=''):
+    """
+    Private method. Add geom (sub-shape of the main shape) into the study if not yet there
+    """
     if not isinstance( geom, geomBuilder.GEOM._objref_GEOM_Object ):
         return
     if not geom.GetStudyEntry():
@@ -350,8 +306,11 @@ def AssureGeomPublished(mesh, geom, name=''):
         mesh.geompyD.addToStudyInFather( mesh.geom, geom, name )
     return
 
-## Return the first vertex of a geometrical edge by ignoring orientation
 def FirstVertexOnCurve(mesh, edge):
+    """
+    Returns:
+        the first vertex of a geometrical edge by ignoring orientation
+    """
     vv = mesh.geompyD.SubShapeAll( edge, geomBuilder.geomBuilder.ShapeType["VERTEX"])
     if not vv:
         raise TypeError("Given object has no vertices")
@@ -369,24 +328,21 @@ def FirstVertexOnCurve(mesh, edge):
     else:
         return vv[1]
 
-## Return a long value from enumeration
-def EnumToLong(theItem):
-    return theItem._v
-
-# end of l1_auxiliary
-## @}
-
-
-# Warning: smeshInst is a singleton
 smeshInst = None
+"""
+Warning:
+    smeshInst is a singleton
+"""
 engine = None
 doLcc = False
 created = False
 
-## This class allows to create, load or manipulate meshes.
-#  It has a set of methods to create, load or copy meshes, to combine several meshes, etc.
-#  It also has methods to get infos and measure meshes.
-class smeshBuilder(SMESH._objref_SMESH_Gen):
+class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
+    """
+    This class allows to create, load or manipulate meshes.
+    It has a set of methods to create, load or copy meshes, to combine several meshes, etc.
+    It also has methods to get infos and measure meshes.
+    """
 
     # MirrorType enumeration
     POINT = SMESH_MeshEditor.POINT
@@ -409,7 +365,7 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         global engine
         global smeshInst
         global doLcc
-        #print "==== __new__", engine, smeshInst, doLcc
+        #print("==== __new__", engine, smeshInst, doLcc)
 
         if smeshInst is None:
             # smesh engine is either retrieved from engine, or created
@@ -424,76 +380,108 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
                     # FindOrLoadComponent called:
                     # 1. CORBA resolution of server
                     # 2. the __new__ method is called again
-                    #print "==== smeshInst = lcc.FindOrLoadComponent ", engine, smeshInst, doLcc
+                    #print("==== smeshInst = lcc.FindOrLoadComponent ", engine, smeshInst, doLcc)
                     smeshInst = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" )
             else:
                 # FindOrLoadComponent not called
                 if smeshInst is None:
                     # smeshBuilder instance is created from lcc.FindOrLoadComponent
-                    #print "==== smeshInst = super(smeshBuilder,cls).__new__(cls) ", engine, smeshInst, doLcc
+                    #print("==== smeshInst = super(smeshBuilder,cls).__new__(cls) ", engine, smeshInst, doLcc)
                     smeshInst = super(smeshBuilder,cls).__new__(cls)
                 else:
                     # smesh engine not created: existing engine found
-                    #print "==== existing ", engine, smeshInst, doLcc
+                    #print("==== existing ", engine, smeshInst, doLcc)
                     pass
-            #print "====1 ", smeshInst
+            #print("====1 ", smeshInst)
             return smeshInst
 
-        #print "====2 ", smeshInst
+        #print("====2 ", smeshInst)
         return smeshInst
 
     def __init__(self, *args):
         global created
-        #print "--------------- smeshbuilder __init__ ---", created
+        #print("--------------- smeshbuilder __init__ ---", created)
         if not created:
             created = True
             SMESH._objref_SMESH_Gen.__init__(self, *args)
 
-    ## Dump component to the Python script
-    #  This method overrides IDL function to allow default values for the parameters.
-    #  @ingroup l1_auxiliary
-    def DumpPython(self, theIsPublished=True, theIsMultiFile=True):
-        return SMESH._objref_SMESH_Gen.DumpPython(self, theIsPublished, theIsMultiFile)
-
-    ## Set mode of DumpPython(), \a historical or \a snapshot.
-    #  In the \a historical mode, the Python Dump script includes all commands
-    #  performed by SMESH engine. In the \a snapshot mode, commands
-    #  relating to objects removed from the Study are excluded from the script
-    #  as well as commands not influencing the current state of meshes
-    #  @ingroup l1_auxiliary
+
+    def DumpPython(self, theStudy, theIsPublished=True, theIsMultiFile=True):
+        """
+        Dump component to the Python script.
+        This method overrides IDL function to allow default values for the parameters.
+        """
+
+        return SMESH._objref_SMESH_Gen.DumpPython(self, theStudy, theIsPublished, theIsMultiFile)
+
     def SetDumpPythonHistorical(self, isHistorical):
+        """
+        Set mode of DumpPython(), *historical* or *snapshot*.
+        In the *historical* mode, the Python Dump script includes all commands
+        performed by SMESH engine. In the *snapshot* mode, commands
+        relating to objects removed from the Study are excluded from the script
+        as well as commands not influencing the current state of meshes
+        """
+
         if isHistorical: val = "true"
         else:            val = "false"
         SMESH._objref_SMESH_Gen.SetOption(self, "historical_python_dump", val)
 
-    ## Set Geometry component
-    #  @ingroup l1_auxiliary
-    def init_smesh(self,isPublished = True,geompyD = None):
-        #print "init_smesh"
+    def init_smesh(self,geompyD = None):
+        """
+        Set Geometry component
+        """    
+        #print("init_smesh")
         self.UpdateStudy(geompyD)
-        if isPublished:
-            global notebook
-            notebook.myStudy = salome.myStudy
-
-    ## Create a mesh. This can be either an empty mesh, possibly having an underlying geometry,
-    #  or a mesh wrapping a CORBA mesh given as a parameter.
-    #  @param obj either (1) a CORBA mesh (SMESH._objref_SMESH_Mesh) got e.g. by calling
-    #         salome.myStudy.FindObjectID("0:1:2:3").GetObject() or
-    #         (2) a Geometrical object for meshing or
-    #         (3) none.
-    #  @param name the name for the new mesh.
-    #  @return an instance of Mesh class.
-    #  @ingroup l2_construct
+        notebook.myStudy = salome.myStudy
+
     def Mesh(self, obj=0, name=0):
+        """
+        Create a mesh. This mesh can be either 
+
+        * an empty mesh not bound to geometry, if *obj* == 0
+        * an empty mesh bound to geometry, if *obj* is GEOM.GEOM_Object
+        * a mesh wrapping a :class:`CORBA mesh <SMESH.SMESH_Mesh>` given as *obj* parameter.
+
+        Parameters:
+            obj: either 
+
+                   1. a :class:`CORBA mesh <SMESH.SMESH_Mesh>` got by calling e.g.
+                      ::
+
+                        salome.myStudy.FindObjectID("0:1:2:3").GetObject() 
+
+                   2. a geometrical object for meshing
+                   3. none.
+            name: the name for the new mesh.
+
+        Returns:
+            an instance of class :class:`Mesh`.
+        """
+
         if isinstance(obj,str):
             obj,name = name,obj
-        return Mesh(self,self.geompyD,obj,name)
+        return Mesh(self, self.geompyD, obj, name)
+
+    def EnumToLong(self,theItem):
+        """
+        Return a long value from enumeration
+        """
+
+        return theItem._v
 
-    ## Return a string representation of the color.
-    #  To be used with filters.
-    #  @param c color value (SALOMEDS.Color)
-    #  @ingroup l1_auxiliary
     def ColorToString(self,c):
+        """
+        Convert SALOMEDS.Color to string.
+        To be used with filters.
+
+        Parameters:
+            c: color value (SALOMEDS.Color)
+
+        Returns:
+            a string representation of the color.
+        """
+
         val = ""
         if isinstance(c, SALOMEDS.Color):
             val = "%s;%s;%s" % (c.R, c.G, c.B)
@@ -503,19 +491,31 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
             raise ValueError("Color value should be of string or SALOMEDS.Color type")
         return val
 
-    ## Get PointStruct from vertex
-    #  @param theVertex a GEOM object(vertex)
-    #  @return SMESH.PointStruct
-    #  @ingroup l1_auxiliary
     def GetPointStruct(self,theVertex):
+        """
+        Get :class:`SMESH.PointStruct` from vertex
+
+        Parameters:
+                theVertex (GEOM.GEOM_Object): vertex
+
+        Returns:
+                :class:`SMESH.PointStruct`
+        """
+
         [x, y, z] = self.geompyD.PointCoordinates(theVertex)
         return PointStruct(x,y,z)
 
-    ## Get DirStruct from vector
-    #  @param theVector a GEOM object(vector)
-    #  @return SMESH.DirStruct
-    #  @ingroup l1_auxiliary
     def GetDirStruct(self,theVector):
+        """
+        Get :class:`SMESH.DirStruct` from vector
+
+        Parameters:
+                theVector (GEOM.GEOM_Object): vector
+
+        Returns:
+                :class:`SMESH.DirStruct`
+        """
+
         vertices = self.geompyD.SubShapeAll( theVector, geomBuilder.geomBuilder.ShapeType["VERTEX"] )
         if(len(vertices) != 2):
             print("Error: vector object is incorrect.")
@@ -526,19 +526,30 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         dirst = DirStruct(pnt)
         return dirst
 
-    ## Make DirStruct from a triplet
-    #  @param x,y,z vector components
-    #  @return SMESH.DirStruct
-    #  @ingroup l1_auxiliary
     def MakeDirStruct(self,x,y,z):
+        """
+        Make :class:`SMESH.DirStruct` from a triplet of floats
+
+        Parameters:
+                x,y,z (float): vector components
+
+        Returns:
+                :class:`SMESH.DirStruct`
+        """
+
         pnt = PointStruct(x,y,z)
         return DirStruct(pnt)
 
-    ## Get AxisStruct from object
-    #  @param theObj a GEOM object (line or plane)
-    #  @return SMESH.AxisStruct
-    #  @ingroup l1_auxiliary
     def GetAxisStruct(self,theObj):
+        """
+        Get :class:`SMESH.AxisStruct` from a geometrical object
+
+        Parameters:
+            theObj (GEOM.GEOM_Object): line or plane
+
+        Returns:
+            :class:`SMESH.AxisStruct`
+        """
         import GEOM
         edges = self.geompyD.SubShapeAll( theObj, geomBuilder.geomBuilder.ShapeType["EDGE"] )
         axis = None
@@ -569,11 +580,15 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
     # From SMESH_Gen interface:
     # ------------------------
 
-    ## Set the given name to the object
-    #  @param obj the object to rename
-    #  @param name a new object name
-    #  @ingroup l1_auxiliary
     def SetName(self, obj, name):
+        """
+        Set the given name to an object
+
+        Parameters:
+                obj: the object to rename
+                name: a new object name
+        """
+
         if isinstance( obj, Mesh ):
             obj = obj.GetMesh()
         elif isinstance( obj, Mesh_Algorithm ):
@@ -581,107 +596,146 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         ior  = salome.orb.object_to_string(obj)
         SMESH._objref_SMESH_Gen.SetName(self, ior, name)
 
-    ## Set the current mode
-    #  @ingroup l1_auxiliary
     def SetEmbeddedMode( self,theMode ):
+        """
+        Set the current mode
+        """
+
         SMESH._objref_SMESH_Gen.SetEmbeddedMode(self,theMode)
 
-    ## Get the current mode
-    #  @ingroup l1_auxiliary
     def IsEmbeddedMode(self):
+        """
+        Get the current mode
+        """
+
         return SMESH._objref_SMESH_Gen.IsEmbeddedMode(self)
-    
-    ## Update the current study. Calling UpdateStudy() allows to 
-    #  update meshes at switching GEOM->SMESH
-    #  @ingroup l1_auxiliary
+
     def UpdateStudy( self, geompyD = None  ):
+       """
+        Update the current study. Calling UpdateStudy() allows to 
+       update meshes at switching GEOM->SMESH
+       """
         #self.UpdateStudy()
-        if not geompyD:
+       if not geompyD:
             from salome.geom import geomBuilder
             geompyD = geomBuilder.geom
             pass
-        self.geompyD=geompyD
-        self.SetGeomEngine(geompyD)
-        SMESH._objref_SMESH_Gen.UpdateStudy(self)
-        sb = salome.myStudy.NewBuilder()
-        sc = salome.myStudy.FindComponent("SMESH")
-        if sc: sb.LoadWith(sc, self)
-        pass
-        
-    ## Sets enable publishing in the study. Calling SetEnablePublish( false ) allows to
-    #  switch OFF publishing in the Study of mesh objects.
-    #  @ingroup l1_auxiliary
+       self.geompyD=geompyD
+       self.SetGeomEngine(geompyD)
+       SMESH._objref_SMESH_Gen.UpdateStudy(self)
+       sb = salome.myStudy.NewBuilder()
+       sc = salome.myStudy.FindComponent("SMESH")
+       if sc:
+            sb.LoadWith(sc, self)
+       pass
+    
     def SetEnablePublish( self, theIsEnablePublish ):
+       """
+        Sets enable publishing in the study. Calling SetEnablePublish( false ) allows to
+       switch OFF publishing in the Study of mesh objects.
+       """
         #self.SetEnablePublish(theIsEnablePublish)
-        SMESH._objref_SMESH_Gen.SetEnablePublish(self,theIsEnablePublish)
-        global notebook
-        notebook = salome_notebook.NoteBook( theIsEnablePublish )
+       SMESH._objref_SMESH_Gen.SetEnablePublish(self,theIsEnablePublish)
+       global notebook
+       notebook = salome_notebook.NoteBook( theIsEnablePublish )
+
 
-    ## Create a Mesh object importing data from the given UNV file
-    #  @return an instance of Mesh class
-    #  @ingroup l2_impexp
     def CreateMeshesFromUNV( self,theFileName ):
+        """
+        Create a Mesh object importing data from the given UNV file
+
+        Returns:
+                an instance of class :class:`Mesh`
+        """
+
         aSmeshMesh = SMESH._objref_SMESH_Gen.CreateMeshesFromUNV(self,theFileName)
         aMesh = Mesh(self, self.geompyD, aSmeshMesh)
         return aMesh
 
-    ## Create a Mesh object(s) importing data from the given MED file
-    #  @return a tuple ( list of Mesh class instances, SMESH.DriverMED_ReadStatus )
-    #  @ingroup l2_impexp
     def CreateMeshesFromMED( self,theFileName ):
+        """
+        Create a Mesh object(s) importing data from the given MED file
+
+        Returns:
+                a tuple ( list of class :class:`Mesh` instances, 
+                :class:`SMESH.DriverMED_ReadStatus` )
+        """
+
         aSmeshMeshes, aStatus = SMESH._objref_SMESH_Gen.CreateMeshesFromMED(self,theFileName)
         aMeshes = [ Mesh(self, self.geompyD, m) for m in aSmeshMeshes ]
         return aMeshes, aStatus
 
-    ## Create a Mesh object(s) importing data from the given SAUV file
-    #  @return a tuple ( list of Mesh class instances, SMESH.DriverMED_ReadStatus )
-    #  @ingroup l2_impexp
     def CreateMeshesFromSAUV( self,theFileName ):
+        """
+        Create a Mesh object(s) importing data from the given SAUV file
+
+        Returns:
+                a tuple ( list of class :class:`Mesh` instances, :class:`SMESH.DriverMED_ReadStatus` )
+        """
+
         aSmeshMeshes, aStatus = SMESH._objref_SMESH_Gen.CreateMeshesFromSAUV(self,theFileName)
         aMeshes = [ Mesh(self, self.geompyD, m) for m in aSmeshMeshes ]
         return aMeshes, aStatus
 
-    ## Create a Mesh object importing data from the given STL file
-    #  @return an instance of Mesh class
-    #  @ingroup l2_impexp
     def CreateMeshesFromSTL( self, theFileName ):
+        """
+        Create a Mesh object importing data from the given STL file
+
+        Returns:
+                an instance of class :class:`Mesh`
+        """
+
         aSmeshMesh = SMESH._objref_SMESH_Gen.CreateMeshesFromSTL(self,theFileName)
         aMesh = Mesh(self, self.geompyD, aSmeshMesh)
         return aMesh
 
-    ## Create Mesh objects importing data from the given CGNS file
-    #  @return a tuple ( list of Mesh class instances, SMESH.DriverMED_ReadStatus )
-    #  @ingroup l2_impexp
     def CreateMeshesFromCGNS( self, theFileName ):
+        """
+        Create Mesh objects importing data from the given CGNS file
+
+        Returns:
+                a tuple ( list of class :class:`Mesh` instances, :class:`SMESH.DriverMED_ReadStatus` )
+        """
+
         aSmeshMeshes, aStatus = SMESH._objref_SMESH_Gen.CreateMeshesFromCGNS(self,theFileName)
         aMeshes = [ Mesh(self, self.geompyD, m) for m in aSmeshMeshes ]
         return aMeshes, aStatus
 
-    ## Create a Mesh object importing data from the given GMF file.
-    #  GMF files must have .mesh extension for the ASCII format and .meshb for
-    #  the binary format.
-    #  @return [ an instance of Mesh class, SMESH.ComputeError ]
-    #  @ingroup l2_impexp
     def CreateMeshesFromGMF( self, theFileName ):
+        """
+        Create a Mesh object importing data from the given GMF file.
+        GMF files must have .mesh extension for the ASCII format and .meshb for
+        the binary format.
+
+        Returns:
+                ( an instance of class :class:`Mesh`, :class:`SMESH.ComputeError` )
+        """
+
         aSmeshMesh, error = SMESH._objref_SMESH_Gen.CreateMeshesFromGMF(self,
                                                                         theFileName,
                                                                         True)
         if error.comment: print("*** CreateMeshesFromGMF() errors:\n", error.comment)
         return Mesh(self, self.geompyD, aSmeshMesh), error
 
-    ## Concatenate the given meshes into one mesh. All groups of input meshes will be
-    #  present in the new mesh.
-    #  @param meshes the meshes, sub-meshes and groups to combine into one mesh
-    #  @param uniteIdenticalGroups if true, groups with same names are united, else they are renamed
-    #  @param mergeNodesAndElements if true, equal nodes and elements are merged
-    #  @param mergeTolerance tolerance for merging nodes
-    #  @param allGroups forces creation of groups corresponding to every input mesh
-    #  @param name name of a new mesh
-    #  @return an instance of Mesh class
-    #  @ingroup l1_creating
     def Concatenate( self, meshes, uniteIdenticalGroups,
                      mergeNodesAndElements = False, mergeTolerance = 1e-5, allGroups = False,
                      name = ""):
+        """
+        Concatenate the given meshes into one mesh. All groups of input meshes will be
+        present in the new mesh.
+
+        Parameters:
+                meshes: :class:`meshes, sub-meshes, groups or filters <SMESH.SMESH_IDSource>` to combine into one mesh
+                uniteIdenticalGroups: if True, groups with same names are united, else they are renamed
+                mergeNodesAndElements: if True, equal nodes and elements are merged
+                mergeTolerance: tolerance for merging nodes
+                allGroups: forces creation of groups corresponding to every input mesh
+                name: name of a new mesh
+
+        Returns:
+                an instance of class :class:`Mesh`
+        """
+
         if not meshes: return None
         for i,m in enumerate(meshes):
             if isinstance(m, Mesh):
@@ -697,79 +751,86 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aMesh = Mesh(self, self.geompyD, aSmeshMesh, name=name)
         return aMesh
 
-    ## Create a mesh by copying a part of another mesh.
-    #  @param meshPart a part of mesh to copy, either a Mesh, a sub-mesh or a group;
-    #                  to copy nodes or elements not contained in any mesh object,
-    #                  pass result of Mesh.GetIDSource( list_of_ids, type ) as meshPart
-    #  @param meshName a name of the new mesh
-    #  @param toCopyGroups to create in the new mesh groups the copied elements belongs to
-    #  @param toKeepIDs to preserve order of the copied elements or not
-    #  @return an instance of Mesh class
-    #  @ingroup l1_creating
     def CopyMesh( self, meshPart, meshName, toCopyGroups=False, toKeepIDs=False):
+        """
+        Create a mesh by copying a part of another mesh.
+
+        Parameters:
+                meshPart: a part of mesh to copy, either 
+                        :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+                        To copy nodes or elements not forming any mesh object,
+                        pass result of :meth:`Mesh.GetIDSource` as *meshPart*
+                meshName: a name of the new mesh
+                toCopyGroups: to create in the new mesh groups the copied elements belongs to
+                toKeepIDs: to preserve order of the copied elements or not
+
+        Returns:
+                an instance of class :class:`Mesh`
+        """
+
         if (isinstance( meshPart, Mesh )):
             meshPart = meshPart.GetMesh()
         mesh = SMESH._objref_SMESH_Gen.CopyMesh( self,meshPart,meshName,toCopyGroups,toKeepIDs )
         return Mesh(self, self.geompyD, mesh)
 
-    ## Return IDs of sub-shapes
-    #  @return the list of integer values
-    #  @ingroup l1_auxiliary
     def GetSubShapesId( self, theMainObject, theListOfSubObjects ):
+        """
+        Return IDs of sub-shapes
+
+        Parameters:
+                theMainObject (GEOM.GEOM_Object): a shape
+                theListOfSubObjects: sub-shapes (list of GEOM.GEOM_Object)
+        Returns:
+                the list of integer values
+        """
+
         return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects)
 
-    ## Create a pattern mapper.
-    #  @return an instance of SMESH_Pattern
-    #
-    #  <a href="../tui_modifying_meshes_page.html#tui_pattern_mapping">Example of Patterns usage</a>
-    #  @ingroup l1_modifying
     def GetPattern(self):
+        """
+        Create a pattern mapper.
+
+        Returns:
+                an instance of :class:`SMESH.SMESH_Pattern`
+
+        :ref:`Example of Patterns usage <tui_pattern_mapping>`
+        """
+
         return SMESH._objref_SMESH_Gen.GetPattern(self)
 
-    ## Set number of segments per diagonal of boundary box of geometry, by which
-    #  default segment length of appropriate 1D hypotheses is defined in GUI.
-    #  Default value is 10.
-    #  @ingroup l1_auxiliary
     def SetBoundaryBoxSegmentation(self, nbSegments):
+        """
+        Set number of segments per diagonal of boundary box of geometry, by which
+        default segment length of appropriate 1D hypotheses is defined in GUI.
+        Default value is 10.
+        """
+
         SMESH._objref_SMESH_Gen.SetBoundaryBoxSegmentation(self,nbSegments)
 
     # Filtering. Auxiliary functions:
     # ------------------------------
 
-    ## Create an empty criterion
-    #  @return SMESH.Filter.Criterion
-    #  @ingroup l1_controls
     def GetEmptyCriterion(self):
-        Type = EnumToLong(FT_Undefined)
-        Compare = EnumToLong(FT_Undefined)
+        """
+        Create an empty criterion
+
+        Returns:
+                :class:`SMESH.Filter.Criterion`
+        """
+
+        Type = self.EnumToLong(FT_Undefined)
+        Compare = self.EnumToLong(FT_Undefined)
         Threshold = 0
         ThresholdStr = ""
         ThresholdID = ""
-        UnaryOp = EnumToLong(FT_Undefined)
-        BinaryOp = EnumToLong(FT_Undefined)
+        UnaryOp = self.EnumToLong(FT_Undefined)
+        BinaryOp = self.EnumToLong(FT_Undefined)
         Tolerance = 1e-07
         TypeOfElement = ALL
         Precision = -1 ##@1e-07
         return Filter.Criterion(Type, Compare, Threshold, ThresholdStr, ThresholdID,
                                 UnaryOp, BinaryOp, Tolerance, TypeOfElement, Precision)
 
-    ## Create a criterion by the given parameters
-    #  \n Criterion structures allow to define complex filters by combining them with logical operations (AND / OR) (see example below)
-    #  @param elementType the type of elements(SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
-    #  @param CritType the type of criterion (SMESH.FT_Taper, SMESH.FT_Area, etc.)
-    #          Type SMESH.FunctorType._items in the Python Console to see all values.
-    #          Note that the items starting from FT_LessThan are not suitable for CritType.
-    #  @param Compare  belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
-    #  @param Threshold the threshold value (range of ids as string, shape, numeric)
-    #  @param UnaryOp  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
-    #  @param BinaryOp a binary logical operation SMESH.FT_LogicalAND, SMESH.FT_LogicalOR or
-    #                  SMESH.FT_Undefined
-    #  @param Tolerance the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
-    #         SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces criteria
-    #  @return SMESH.Filter.Criterion
-    #
-    #  <a href="../tui_filters_page.html#combining_filters">Example of Criteria usage</a>
-    #  @ingroup l1_controls
     def GetCriterion(self,elementType,
                      CritType,
                      Compare = FT_EqualTo,
@@ -777,25 +838,47 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
                      UnaryOp=FT_Undefined,
                      BinaryOp=FT_Undefined,
                      Tolerance=1e-07):
+        """
+        Create a criterion by the given parameters
+        Criterion structures allow to define complex filters by combining them with logical operations (AND / OR) (see example below)
+
+        Parameters:
+                elementType: the :class:`type of elements <SMESH.ElementType>` (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
+                CritType: the type of criterion :class:`SMESH.FunctorType` (SMESH.FT_Taper, SMESH.FT_Area, etc.).
+                        Note that the items starting from FT_LessThan are not suitable for *CritType*.
+                Compare:  belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
+                Threshold: the threshold value (range of ids as string, shape, numeric)
+                UnaryOp:  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
+                BinaryOp: a binary logical operation SMESH.FT_LogicalAND, SMESH.FT_LogicalOR or
+                        SMESH.FT_Undefined
+                Tolerance: the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
+                        SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces criteria
+
+        Returns:
+                :class:`SMESH.Filter.Criterion`
+
+        Example: :ref:`combining_filters`
+        """
+
         if not CritType in SMESH.FunctorType._items:
             raise TypeError("CritType should be of SMESH.FunctorType")
         aCriterion               = self.GetEmptyCriterion()
         aCriterion.TypeOfElement = elementType
-        aCriterion.Type          = EnumToLong(CritType)
+        aCriterion.Type          = self.EnumToLong(CritType)
         aCriterion.Tolerance     = Tolerance
 
         aThreshold = Threshold
 
         if Compare in [FT_LessThan, FT_MoreThan, FT_EqualTo]:
-            aCriterion.Compare = EnumToLong(Compare)
+            aCriterion.Compare = self.EnumToLong(Compare)
         elif Compare == "=" or Compare == "==":
-            aCriterion.Compare = EnumToLong(FT_EqualTo)
+            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
         elif Compare == "<":
-            aCriterion.Compare = EnumToLong(FT_LessThan)
+            aCriterion.Compare = self.EnumToLong(FT_LessThan)
         elif Compare == ">":
-            aCriterion.Compare = EnumToLong(FT_MoreThan)
+            aCriterion.Compare = self.EnumToLong(FT_MoreThan)
         elif Compare != FT_Undefined:
-            aCriterion.Compare = EnumToLong(FT_EqualTo)
+            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
             aThreshold = Compare
 
         if CritType in [FT_BelongToGeom,     FT_BelongToPlane, FT_BelongToGenSurface,
@@ -877,7 +960,7 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         elif CritType == FT_ElemGeomType:
             # Check the Threshold
             try:
-                aCriterion.Threshold = EnumToLong(aThreshold)
+                aCriterion.Threshold = self.EnumToLong(aThreshold)
                 assert( aThreshold in SMESH.GeometryType._items )
             except:
                 if isinstance(aThreshold, int):
@@ -889,7 +972,7 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         elif CritType == FT_EntityType:
             # Check the Threshold
             try:
-                aCriterion.Threshold = EnumToLong(aThreshold)
+                aCriterion.Threshold = self.EnumToLong(aThreshold)
                 assert( aThreshold in SMESH.EntityType._items )
             except:
                 if isinstance(aThreshold, int):
@@ -913,7 +996,7 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
                           FT_EqualNodes,FT_EqualEdges,FT_EqualFaces,FT_EqualVolumes ]:
             # At this point the Threshold is unnecessary
             if aThreshold ==  FT_LogicalNOT:
-                aCriterion.UnaryOp = EnumToLong(FT_LogicalNOT)
+                aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
             elif aThreshold in [FT_LogicalAND, FT_LogicalOR]:
                 aCriterion.BinaryOp = aThreshold
         else:
@@ -926,34 +1009,19 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
                 return None
 
         if Threshold ==  FT_LogicalNOT or UnaryOp ==  FT_LogicalNOT:
-            aCriterion.UnaryOp = EnumToLong(FT_LogicalNOT)
+            aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
 
         if Threshold in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = EnumToLong(Threshold)
+            aCriterion.BinaryOp = self.EnumToLong(Threshold)
 
         if UnaryOp in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = EnumToLong(UnaryOp)
+            aCriterion.BinaryOp = self.EnumToLong(UnaryOp)
 
         if BinaryOp in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = EnumToLong(BinaryOp)
+            aCriterion.BinaryOp = self.EnumToLong(BinaryOp)
 
         return aCriterion
 
-    ## Create a filter with the given parameters
-    #  @param elementType the type of elements (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
-    #  @param CritType the type of criterion (SMESH.FT_Taper, SMESH.FT_Area, etc.)
-    #          Type SMESH.FunctorType._items in the Python Console to see all values.
-    #          Note that the items starting from FT_LessThan are not suitable for CritType.
-    #  @param Compare  belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
-    #  @param Threshold the threshold value (range of ids as string, shape, numeric)
-    #  @param UnaryOp  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
-    #  @param Tolerance the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
-    #         SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces and SMESH.FT_EqualNodes criteria
-    #  @param mesh the mesh to initialize the filter with
-    #  @return SMESH_Filter
-    #
-    #  <a href="../tui_filters_page.html#tui_filters">Example of Filters usage</a>
-    #  @ingroup l1_controls
     def GetFilter(self,elementType,
                   CritType=FT_Undefined,
                   Compare=FT_EqualTo,
@@ -961,6 +1029,27 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
                   UnaryOp=FT_Undefined,
                   Tolerance=1e-07,
                   mesh=None):
+        """
+        Create a filter with the given parameters
+
+        Parameters:
+                elementType: the :class:`type of elements <SMESH.ElementType>` (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
+                CritType: the :class:`type of criterion <SMESH.FunctorType>` (SMESH.FT_Taper, SMESH.FT_Area, etc.).
+                        Note that the items starting from FT_LessThan are not suitable for CritType.
+                Compare: belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
+                Threshold: the threshold value (range of ids as string, shape, numeric)
+                UnaryOp:  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
+                Tolerance: the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
+                        SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces and SMESH.FT_EqualNodes criteria
+                mesh: the mesh to initialize the filter with
+
+        Returns:
+                :class:`SMESH.Filter`
+
+        Examples:
+               See :doc:`Filters usage examples <tui_filters>`
+        """
+
         aCriterion = self.GetCriterion(elementType, CritType, Compare, Threshold, UnaryOp, FT_Undefined,Tolerance)
         aFilterMgr = self.CreateFilterManager()
         aFilter = aFilterMgr.CreateFilter()
@@ -973,30 +1062,42 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aFilterMgr.UnRegister()
         return aFilter
 
-    ## Create a filter from criteria
-    #  @param criteria a list of criteria
-    #  @param binOp binary operator used when binary operator of criteria is undefined
-    #  @return SMESH_Filter
-    #
-    #  <a href="../tui_filters_page.html#tui_filters">Example of Filters usage</a>
-    #  @ingroup l1_controls
     def GetFilterFromCriteria(self,criteria, binOp=SMESH.FT_LogicalAND):
+        """
+        Create a filter from criteria
+
+        Parameters:
+                criteria: a list of :class:`SMESH.Filter.Criterion`
+                binOp: binary operator used when binary operator of criteria is undefined
+
+        Returns:
+                :class:`SMESH.Filter`
+
+        Examples:
+               See :doc:`Filters usage examples <tui_filters>`
+        """
+
         for i in range( len( criteria ) - 1 ):
-            if criteria[i].BinaryOp == EnumToLong( SMESH.FT_Undefined ):
-                criteria[i].BinaryOp = EnumToLong( binOp )
+            if criteria[i].BinaryOp == self.EnumToLong( SMESH.FT_Undefined ):
+                criteria[i].BinaryOp = self.EnumToLong( binOp )
         aFilterMgr = self.CreateFilterManager()
         aFilter = aFilterMgr.CreateFilter()
         aFilter.SetCriteria(criteria)
         aFilterMgr.UnRegister()
         return aFilter
 
-    ## Create a numerical functor by its type
-    #  @param theCriterion functor type - an item of SMESH.FunctorType enumeration.
-    #          Type SMESH.FunctorType._items in the Python Console to see all items.
-    #          Note that not all items correspond to numerical functors.
-    #  @return SMESH_NumericalFunctor
-    #  @ingroup l1_controls
     def GetFunctor(self,theCriterion):
+        """
+        Create a numerical functor by its type
+
+        Parameters:
+                theCriterion (SMESH.FunctorType): functor type.
+                        Note that not all items correspond to numerical functors.
+
+        Returns:
+                :class:`SMESH.NumericalFunctor`
+        """
+
         if isinstance( theCriterion, SMESH._objref_NumericalFunctor ):
             return theCriterion
         aFilterMgr = self.CreateFilterManager()
@@ -1040,18 +1141,23 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aFilterMgr.UnRegister()
         return functor
 
-    ## Create hypothesis
-    #  @param theHType mesh hypothesis type (string)
-    #  @param theLibName mesh plug-in library name
-    #  @return created hypothesis instance
     def CreateHypothesis(self, theHType, theLibName="libStdMeshersEngine.so"):
+        """
+        Create hypothesis
+
+        Parameters:
+                theHType (string): mesh hypothesis type
+                theLibName (string): mesh plug-in library name
+
+        Returns:
+                created hypothesis instance
+        """
         hyp = SMESH._objref_SMESH_Gen.CreateHypothesis(self, theHType, theLibName )
 
         if isinstance( hyp, SMESH._objref_SMESH_Algo ):
             return hyp
 
         # wrap hypothesis methods
-        #print "HYPOTHESIS", theHType
         for meth_name in dir( hyp.__class__ ):
             if not meth_name.startswith("Get") and \
                not meth_name in dir ( SMESH._objref_SMESH_Hypothesis ):
@@ -1061,35 +1167,48 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
 
         return hyp
 
-    ## Get the mesh statistic
-    #  @return dictionary "element type" - "count of elements"
-    #  @ingroup l1_meshinfo
     def GetMeshInfo(self, obj):
+        """
+        Get the mesh statistic.
+        Use :meth:`smeshBuilder.EnumToLong` to get an integer from 
+        an item of :class:`SMESH.EntityType`.
+
+        Returns:
+                dictionary { :class:`SMESH.EntityType` - "count of elements" }
+        """
+
         if isinstance( obj, Mesh ):
             obj = obj.GetMesh()
         d = {}
         if hasattr(obj, "GetMeshInfo"):
             values = obj.GetMeshInfo()
-            for i in range(EnumToLong(SMESH.Entity_Last)):
+            for i in range(SMESH.Entity_Last._v):
                 if i < len(values): d[SMESH.EntityType._item(i)]=values[i]
             pass
         return d
 
-    ## Get minimum distance between two objects
-    #
-    #  If @a src2 is None, and @a id2 = 0, distance from @a src1 / @a id1 to the origin is computed.
-    #  If @a src2 is None, and @a id2 != 0, it is assumed that both @a id1 and @a id2 belong to @a src1.
-    #
-    #  @param src1 first source object
-    #  @param src2 second source object
-    #  @param id1 node/element id from the first source
-    #  @param id2 node/element id from the second (or first) source
-    #  @param isElem1 @c True if @a id1 is element id, @c False if it is node id
-    #  @param isElem2 @c True if @a id2 is element id, @c False if it is node id
-    #  @return minimum distance value
-    #  @sa GetMinDistance()
-    #  @ingroup l1_measurements
     def MinDistance(self, src1, src2=None, id1=0, id2=0, isElem1=False, isElem2=False):
+        """
+        Get minimum distance between two objects
+
+        * If *src2* is None, and *id2* = 0, distance from *src1* / *id1* to the origin is computed.
+        * If *src2* is None, and *id2* != 0, it is assumed that both *id1* and *id2* belong to *src1*.
+
+        Parameters:
+                src1 (SMESH.SMESH_IDSource): first source object
+                src2 (SMESH.SMESH_IDSource): second source object
+                id1 (int): node/element id from the first source
+                id2 (int): node/element id from the second (or first) source
+                isElem1 (boolean): *True* if *id1* is element id, *False* if it is node id
+                isElem2 (boolean): *True* if *id2* is element id, *False* if it is node id
+
+        Returns:
+                minimum distance value
+
+        See also: 
+                :meth:`GetMinDistance`
+        """
+
         result = self.GetMinDistance(src1, src2, id1, id2, isElem1, isElem2)
         if result is None:
             result = 0.0
@@ -1097,21 +1216,27 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
             result = result.value
         return result
 
-    ## Get measure structure specifying minimum distance data between two objects
-    #
-    #  If @a src2 is None, and @a id2 = 0, distance from @a src1 / @a id1 to the origin is computed.
-    #  If @a src2 is None, and @a id2 != 0, it is assumed that both @a id1 and @a id2 belong to @a src1.
-    #
-    #  @param src1 first source object
-    #  @param src2 second source object
-    #  @param id1 node/element id from the first source
-    #  @param id2 node/element id from the second (or first) source
-    #  @param isElem1 @c True if @a id1 is element id, @c False if it is node id
-    #  @param isElem2 @c True if @a id2 is element id, @c False if it is node id
-    #  @return Measure structure or None if input data is invalid
-    #  @sa MinDistance()
-    #  @ingroup l1_measurements
     def GetMinDistance(self, src1, src2=None, id1=0, id2=0, isElem1=False, isElem2=False):
+        """
+        Get :class:`SMESH.Measure` structure specifying minimum distance data between two objects
+
+        * If *src2* is None, and *id2*  = 0, distance from *src1* / *id1* to the origin is computed.
+        * If *src2* is None, and *id2* != 0, it is assumed that both *id1* and *id2* belong to *src1*.
+
+        Parameters:
+                src1 (SMESH.SMESH_IDSource): first source object
+                src2 (SMESH.SMESH_IDSource): second source object
+                id1 (int): node/element id from the first source
+                id2 (int): node/element id from the second (or first) source
+                isElem1 (boolean): *True* if **id1** is element id, *False* if it is node id
+                isElem2 (boolean): *True* if **id2** is element id, *False* if it is node id
+
+        Returns:
+                :class:`SMESH.Measure` structure or None if input data is invalid
+        See also: 
+                :meth:`MinDistance`
+        """
+
         if isinstance(src1, Mesh): src1 = src1.mesh
         if isinstance(src2, Mesh): src2 = src2.mesh
         if src2 is None and id2 != 0: src2 = src1
@@ -1145,12 +1270,20 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         result = aMeasurements.MinDistance(src1, src2)
         return result
 
-    ## Get bounding box of the specified object(s)
-    #  @param objects single source object or list of source objects
-    #  @return tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
-    #  @sa GetBoundingBox()
-    #  @ingroup l1_measurements
     def BoundingBox(self, objects):
+        """
+        Get bounding box of the specified object(s)
+
+        Parameters:
+                objects (SMESH.SMESH_IDSource): single source object or list of source objects
+
+        Returns:
+                tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
+
+        See also: 
+               :meth:`GetBoundingBox`
+        """
+
         result = self.GetBoundingBox(objects)
         if result is None:
             result = (0.0,)*6
@@ -1158,12 +1291,20 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
             result = (result.minX, result.minY, result.minZ, result.maxX, result.maxY, result.maxZ)
         return result
 
-    ## Get measure structure specifying bounding box data of the specified object(s)
-    #  @param objects single source object or list of source objects
-    #  @return Measure structure
-    #  @sa BoundingBox()
-    #  @ingroup l1_measurements
     def GetBoundingBox(self, objects):
+        """
+        Get :class:`SMESH.Measure` structure specifying bounding box data of the specified object(s)
+
+        Parameters:
+                objects (SMESH.SMESH_IDSource): single source object or list of source objects
+
+        Returns:
+                :class:`SMESH.Measure` structure
+
+        See also: 
+                :meth:`BoundingBox`
+        """
+
         if isinstance(objects, tuple):
             objects = list(objects)
         if not isinstance(objects, list):
@@ -1182,11 +1323,17 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aMeasurements.UnRegister()
         return result
 
-    ## Get sum of lengths of all 1D elements in the mesh object.
-    #  @param obj mesh, submesh or group
-    #  @return sum of lengths of all 1D elements
-    #  @ingroup l1_measurements
     def GetLength(self, obj):
+        """
+        Get sum of lengths of all 1D elements in the mesh object.
+
+        Parameters:
+                obj: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+                sum of lengths of all 1D elements
+        """
+
         if isinstance(obj, Mesh): obj = obj.mesh
         if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
         aMeasurements = self.CreateMeasurements()
@@ -1194,11 +1341,17 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aMeasurements.UnRegister()
         return value
 
-    ## Get sum of areas of all 2D elements in the mesh object.
-    #  @param obj mesh, submesh or group
-    #  @return sum of areas of all 2D elements
-    #  @ingroup l1_measurements
     def GetArea(self, obj):
+        """
+        Get sum of areas of all 2D elements in the mesh object.
+
+        Parameters:
+                obj: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+                sum of areas of all 2D elements
+        """
+
         if isinstance(obj, Mesh): obj = obj.mesh
         if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
         aMeasurements = self.CreateMeasurements()
@@ -1206,11 +1359,17 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aMeasurements.UnRegister()
         return value
 
-    ## Get sum of volumes of all 3D elements in the mesh object.
-    #  @param obj mesh, submesh or group
-    #  @return sum of volumes of all 3D elements
-    #  @ingroup l1_measurements
     def GetVolume(self, obj):
+        """
+        Get sum of volumes of all 3D elements in the mesh object.
+
+        Parameters:
+                obj: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+                sum of volumes of all 3D elements
+        """
+
         if isinstance(obj, Mesh): obj = obj.mesh
         if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
         aMeasurements = self.CreateMeasurements()
@@ -1218,11 +1377,16 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
         aMeasurements.UnRegister()
         return value
 
-    ## Get gravity center of all nodes of the mesh object.
-    #  @param obj mesh, submesh or group
-    #  @return three components of the gravity center: x,y,z
-    #  @ingroup l1_measurements
     def GetGravityCenter(self, obj):
+        """
+        Get gravity center of all nodes of the mesh object.
+        
+        Parameters:            
+                obj: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:        
+            Three components of the gravity center (x,y,z)
+        """
         if isinstance(obj, Mesh): obj = obj.mesh
         if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
         aMeasurements = self.CreateMeasurements()
@@ -1233,29 +1397,17 @@ class smeshBuilder(SMESH._objref_SMESH_Gen):
     pass # end of class smeshBuilder
 
 import omniORB
-#Registering the new proxy for SMESH_Gen
 omniORB.registerObjref(SMESH._objref_SMESH_Gen._NP_RepositoryId, smeshBuilder)
+"""Registering the new proxy for SMESH.SMESH_Gen"""
 
-## Create a new smeshBuilder instance.The smeshBuilder class provides the Python
-#  interface to create or load meshes.
-#
-#  Typical use is:
-#  \code
-#    import salome
-#    salome.salome_init()
-#    from salome.smesh import smeshBuilder
-#    smesh = smeshBuilder.New()
-#  \endcode
-#  @param  isPublished If False, the notebool will not be used.
-#  @param  instance  CORBA proxy of SMESH Engine. If None, the default Engine is used.
-#  @return smeshBuilder instance
-
-def New( isPublished = True, instance=None):
+
+def New( instance=None, instanceGeom=None):
     """
-    Create a new smeshBuilder instance.The smeshBuilder class provides the Python
+    Create a new smeshBuilder instance. The smeshBuilder class provides the Python
     interface to create or load meshes.
 
     Typical use is:
+
         import salome
         salome.salome_init()
         from salome.smesh import smeshBuilder
@@ -1265,7 +1417,7 @@ def New( isPublished = True, instance=None):
         isPublished If False, the notebool will not be used.
         instance  CORBA proxy of SMESH Engine. If None, the default Engine is used.
     Returns:
-        smeshBuilder instance
+        :class:`smeshBuilder` instance
     """
     global engine
     global smeshInst
@@ -1275,33 +1427,42 @@ def New( isPublished = True, instance=None):
         doLcc = True
     smeshInst = smeshBuilder()
     assert isinstance(smeshInst,smeshBuilder), "Smesh engine class is %s but should be smeshBuilder.smeshBuilder. Import salome.smesh.smeshBuilder before creating the instance."%smeshInst.__class__
-    smeshInst.init_smesh(isPublished)
+    smeshInst.init_smesh(instanceGeom)
     return smeshInst
 
 
 # Public class: Mesh
 # ==================
 
-## This class allows defining and managing a mesh.
-#  It has a set of methods to build a mesh on the given geometry, including the definition of sub-meshes.
-#  It also has methods to define groups of mesh elements, to modify a mesh (by addition of
-#  new nodes and elements and by changing the existing entities), to get information
-#  about a mesh and to export a mesh in different formats.
-class Mesh(metaclass=MeshMeta):
+
+class Mesh(metaclass = MeshMeta):
+    """
+    This class allows defining and managing a mesh.
+    It has a set of methods to build a mesh on the given geometry, including the definition of sub-meshes.
+    It also has methods to define groups of mesh elements, to modify a mesh (by addition of
+    new nodes and elements and by changing the existing entities), to get information
+    about a mesh and to export a mesh in different formats.
+    """    
+
     geom = 0
     mesh = 0
     editor = 0
 
-    ## Constructor
-    #
-    #  Create a mesh on the shape \a obj (or an empty mesh if \a obj is equal to 0) and
-    #  sets the GUI name of this mesh to \a name.
-    #  @param smeshpyD an instance of smeshBuilder class
-    #  @param geompyD an instance of geomBuilder class
-    #  @param obj Shape to be meshed or SMESH_Mesh object
-    #  @param name Study name of the mesh
-    #  @ingroup l2_construct
     def __init__(self, smeshpyD, geompyD, obj=0, name=0):
+
+        """
+        Constructor
+
+        Create a mesh on the shape *obj* (or an empty mesh if *obj* is equal to 0) and
+        sets the GUI name of this mesh to *name*.
+
+        Parameters:
+                smeshpyD: an instance of smeshBuilder class
+                geompyD: an instance of geomBuilder class
+                obj: Shape to be meshed or :class:`SMESH.SMESH_Mesh` object
+                name: Study name of the mesh
+        """
+
         self.smeshpyD = smeshpyD
         self.geompyD = geompyD
         if obj is None:
@@ -1335,7 +1496,7 @@ class Mesh(metaclass=MeshMeta):
             self.geom = self.mesh.GetShapeToMesh()
 
         self.editor   = self.mesh.GetMeshEditor()
-        self.functors = [None] * EnumToLong(SMESH.FT_Undefined)
+        self.functors = [None] * SMESH.FT_Undefined._v
 
         # set self to algoCreator's
         for attrName in dir(self):
@@ -1346,17 +1507,24 @@ class Mesh(metaclass=MeshMeta):
             pass
         pass
 
-    ## Destructor. Clean-up resources
     def __del__(self):
+        """
+        Destructor. Clean-up resources
+        """
         if self.mesh:
             #self.mesh.UnRegister()
             pass
         pass
 
-    ## Initialize the Mesh object from an instance of SMESH_Mesh interface
-    #  @param theMesh a SMESH_Mesh object
-    #  @ingroup l2_construct
     def SetMesh(self, theMesh):
+        """
+        Initialize the Mesh object from an instance of :class:`SMESH.SMESH_Mesh` interface
+
+        Parameters:
+                theMesh: a :class:`SMESH.SMESH_Mesh` object
+        """
+
+
         # do not call Register() as this prevents mesh servant deletion at closing study
         #if self.mesh: self.mesh.UnRegister()
         self.mesh = theMesh
@@ -1365,98 +1533,143 @@ class Mesh(metaclass=MeshMeta):
             self.geom = self.mesh.GetShapeToMesh()
         pass
 
-    ## Return the mesh, that is an instance of SMESH_Mesh interface
-    #  @return a SMESH_Mesh object
-    #  @ingroup l2_construct
     def GetMesh(self):
+        """
+        Return the mesh, that is an encapsulated instance of :class:`SMESH.SMESH_Mesh` interface
+
+        Returns:
+                a :class:`SMESH.SMESH_Mesh` object
+        """
+
         return self.mesh
 
-    ## Get the name of the mesh
-    #  @return the name of the mesh as a string
-    #  @ingroup l2_construct
     def GetName(self):
+        """
+        Get the name of the mesh
+
+        Returns:
+                the name of the mesh as a string
+        """
+
         name = GetName(self.GetMesh())
         return name
 
-    ## Set a name to the mesh
-    #  @param name a new name of the mesh
-    #  @ingroup l2_construct
     def SetName(self, name):
+        """
+        Set a name to the mesh
+
+        Parameters:
+                name: a new name of the mesh
+        """
+
         self.smeshpyD.SetName(self.GetMesh(), name)
 
-    ## Get a sub-mesh object associated to a \a geom geometrical object.
-    #  @param geom a geometrical object (shape)
-    #  @param name a name for the sub-mesh in the Object Browser
-    #  @return an object of type SMESH.SMESH_subMesh, representing a part of mesh,
-    #          which lies on the given shape
-    #
-    #  The sub-mesh object gives access to the IDs of nodes and elements.
-    #  The sub-mesh object has the following methods:
-    #  - SMESH.SMESH_subMesh.GetNumberOfElements()
-    #  - SMESH.SMESH_subMesh.GetNumberOfNodes( all )
-    #  - SMESH.SMESH_subMesh.GetElementsId()
-    #  - SMESH.SMESH_subMesh.GetElementsByType( ElementType )
-    #  - SMESH.SMESH_subMesh.GetNodesId()
-    #  - SMESH.SMESH_subMesh.GetSubShape()
-    #  - SMESH.SMESH_subMesh.GetFather()
-    #  - SMESH.SMESH_subMesh.GetId()
-    #  @note A sub-mesh is implicitly created when a sub-shape is specified at
-    #  creating an algorithm, for example: <code>algo1D = mesh.Segment(geom=Edge_1) </code>
-    #  creates a sub-mesh on @c Edge_1 and assign Wire Discretization algorithm to it.
-    #  The created sub-mesh can be retrieved from the algorithm:
-    #  <code>submesh = algo1D.GetSubMesh()</code>
-    #  @ingroup l2_submeshes
     def GetSubMesh(self, geom, name):
+        """
+        Get a sub-mesh object associated to a *geom* geometrical object.
+
+        Parameters:
+                geom: a geometrical object (shape)
+                name: a name for the sub-mesh in the Object Browser
+
+        Returns:
+                an object of type :class:`SMESH.SMESH_subMesh`, representing a part of mesh,
+                which lies on the given shape
+
+        Note:
+                A sub-mesh is implicitly created when a sub-shape is specified at
+                creating an algorithm, for example::
+
+                   algo1D = mesh.Segment(geom=Edge_1)
+
+                creates a sub-mesh on *Edge_1* and assign Wire Discretization algorithm to it.
+                The created sub-mesh can be retrieved from the algorithm::
+
+                   submesh = algo1D.GetSubMesh()
+        """
+
         AssureGeomPublished( self, geom, name )
         submesh = self.mesh.GetSubMesh( geom, name )
         return submesh
 
-    ## Return the shape associated to the mesh
-    #  @return a GEOM_Object
-    #  @ingroup l2_construct
     def GetShape(self):
+        """
+        Return the shape associated to the mesh
+
+        Returns:
+                a GEOM_Object
+        """
+
         return self.geom
 
-    ## Associate the given shape to the mesh (entails the recreation of the mesh)
-    #  @param geom the shape to be meshed (GEOM_Object)
-    #  @ingroup l2_construct
     def SetShape(self, geom):
+        """
+        Associate the given shape to the mesh (entails the recreation of the mesh)
+
+        Parameters:
+                geom: the shape to be meshed (GEOM_Object)
+        """
+
         self.mesh = self.smeshpyD.CreateMesh(geom)
 
-    ## Load mesh from the study after opening the study
     def Load(self):
+        """
+        Load mesh from the study after opening the study
+        """
         self.mesh.Load()
 
-    ## Return true if the hypotheses are defined well
-    #  @param theSubObject a sub-shape of a mesh shape
-    #  @return True or False
-    #  @ingroup l2_construct
     def IsReadyToCompute(self, theSubObject):
+        """
+        Return true if the hypotheses are defined well
+
+        Parameters:
+                theSubObject: a sub-shape of a mesh shape
+
+        Returns:
+                True or False
+        """
+
         return self.smeshpyD.IsReadyToCompute(self.mesh, theSubObject)
 
-    ## Return errors of hypotheses definition.
-    #  The list of errors is empty if everything is OK.
-    #  @param theSubObject a sub-shape of a mesh shape
-    #  @return a list of errors
-    #  @ingroup l2_construct
     def GetAlgoState(self, theSubObject):
+        """
+        Return errors of hypotheses definition.
+        The list of errors is empty if everything is OK.
+
+        Parameters:
+                theSubObject: a sub-shape of a mesh shape
+
+        Returns:
+                a list of errors
+        """
+
         return self.smeshpyD.GetAlgoState(self.mesh, theSubObject)
 
-    ## Return a geometrical object on which the given element was built.
-    #  The returned geometrical object, if not nil, is either found in the
-    #  study or published by this method with the given name
-    #  @param theElementID the id of the mesh element
-    #  @param theGeomName the user-defined name of the geometrical object
-    #  @return GEOM::GEOM_Object instance
-    #  @ingroup l1_meshinfo
     def GetGeometryByMeshElement(self, theElementID, theGeomName):
+        """
+        Return a geometrical object on which the given element was built.
+        The returned geometrical object, if not nil, is either found in the
+        study or published by this method with the given name
+
+        Parameters:
+            theElementID: the id of the mesh element
+            theGeomName: the user-defined name of the geometrical object
+
+        Returns:
+            GEOM.GEOM_Object instance
+        """
+
         return self.smeshpyD.GetGeometryByMeshElement( self.mesh, theElementID, theGeomName )
 
-    ## Return the mesh dimension depending on the dimension of the underlying shape
-    #  or, if the mesh is not based on any shape, basing on deimension of elements
-    #  @return mesh dimension as an integer value [0,3]
-    #  @ingroup l1_meshinfo
     def MeshDimension(self):
+        """
+        Return the mesh dimension depending on the dimension of the underlying shape
+        or, if the mesh is not based on any shape, basing on deimension of elements
+
+        Returns:
+                mesh dimension as an integer value [0,3]
+        """
+
         if self.mesh.HasShapeToMesh():
             shells = self.geompyD.SubShapeAllIDs( self.geom, self.geompyD.ShapeType["SOLID"] )
             if len( shells ) > 0 :
@@ -1473,12 +1686,17 @@ class Mesh(metaclass=MeshMeta):
             if self.NbEdges()   > 0: return 1
         return 0
 
-    ## Evaluate size of prospective mesh on a shape
-    #  @return a list where i-th element is a number of elements of i-th SMESH.EntityType
-    #  To know predicted number of e.g. edges, inquire it this way
-    #  Evaluate()[ EnumToLong( Entity_Edge )]
-    #  @ingroup l2_construct
     def Evaluate(self, geom=0):
+        """
+        Evaluate size of prospective mesh on a shape
+
+        Returns:
+                a list where i-th element is a number of elements of i-th :class:`SMESH.EntityType`.
+                To know predicted number of e.g. edges, inquire it this way::
+
+                   Evaluate()[ smesh.EnumToLong( SMESH.Entity_Edge )]
+        """
+
         if geom == 0 or not isinstance(geom, geomBuilder.GEOM._objref_GEOM_Object):
             if self.geom == 0:
                 geom = self.mesh.GetShapeToMesh()
@@ -1487,15 +1705,21 @@ class Mesh(metaclass=MeshMeta):
         return self.smeshpyD.Evaluate(self.mesh, geom)
 
 
-    ## Compute the mesh and return the status of the computation
-    #  @param geom geomtrical shape on which mesh data should be computed
-    #  @param discardModifs if True and the mesh has been edited since
-    #         a last total re-compute and that may prevent successful partial re-compute,
-    #         then the mesh is cleaned before Compute()
-    #  @param refresh if @c True, Object browser is automatically updated (when running in GUI)
-    #  @return True or False
-    #  @ingroup l2_construct
     def Compute(self, geom=0, discardModifs=False, refresh=False):
+        """
+        Compute the mesh and return the status of the computation
+
+        Parameters:
+                geom: geomtrical shape on which mesh data should be computed
+                discardModifs: if True and the mesh has been edited since
+                        a last total re-compute and that may prevent successful partial re-compute,
+                        then the mesh is cleaned before Compute()
+                refresh: if *True*, Object Browser is automatically updated (when running in GUI)
+
+        Returns:
+                True or False
+        """
+
         if geom == 0 or not isinstance(geom, geomBuilder.GEOM._objref_GEOM_Object):
             if self.geom == 0:
                 geom = self.mesh.GetShapeToMesh()
@@ -1600,22 +1824,33 @@ class Mesh(metaclass=MeshMeta):
 
         return ok
 
-    ## Return a list of error messages (SMESH.ComputeError) of the last Compute()
-    #  @ingroup l2_construct
     def GetComputeErrors(self, shape=0 ):
+        """
+        Return a list of error messages (:class:`SMESH.ComputeError`) of the last :meth:`Compute`
+        """
+
         if shape == 0:
             shape = self.mesh.GetShapeToMesh()
         return self.smeshpyD.GetComputeErrors( self.mesh, shape )
 
-    ## Return a name of a sub-shape by its ID
-    #  @param subShapeID a unique ID of a sub-shape
-    #  @return a string describing the sub-shape; possible variants:
-    #  - "Face_12"    (published sub-shape)
-    #  - FACE #3      (not published sub-shape)
-    #  - sub-shape #3 (invalid sub-shape ID)
-    #  - #3           (error in this function)
-    #  @ingroup l1_auxiliary
     def GetSubShapeName(self, subShapeID ):
+        """
+        Return a name of a sub-shape by its ID.
+        Possible variants (for *subShapeID* == 3):
+
+                - **"Face_12"** - published sub-shape
+                - **FACE #3** - not published sub-shape
+                - **sub-shape #3** - invalid sub-shape ID
+                - **#3** - error in this function
+
+        Parameters:
+                subShapeID: a unique ID of a sub-shape
+
+        Returns:
+                a string describing the sub-shape
+
+        """
+
         if not self.mesh.HasShapeToMesh():
             return ""
         try:
@@ -1650,12 +1885,18 @@ class Mesh(metaclass=MeshMeta):
             shapeText = "#%s" % (subShapeID)
         return shapeText
 
-    ## Return a list of sub-shapes meshing of which failed, grouped into GEOM groups by
-    #  error of an algorithm
-    #  @param publish if @c True, the returned groups will be published in the study
-    #  @return a list of GEOM groups each named after a failed algorithm
-    #  @ingroup l2_construct
     def GetFailedShapes(self, publish=False):
+        """
+        Return a list of sub-shapes meshing of which failed, grouped into GEOM groups by
+        error of an algorithm
+
+        Parameters:
+                publish: if *True*, the returned groups will be published in the study
+
+        Returns:
+                a list of GEOM groups each named after a failed algorithm
+        """
+
 
         algo2shapes = {}
         computeErrors = self.smeshpyD.GetComputeErrors( self.mesh, self.GetShape() )
@@ -1671,7 +1912,7 @@ class Mesh(metaclass=MeshMeta):
         groups = []
         for algoName, shapes in list(algo2shapes.items()):
             while shapes:
-                groupType = EnumToLong( shapes[0].GetShapeType() )
+                groupType = self.smeshpyD.EnumToLong( shapes[0].GetShapeType() )
                 otherTypeShapes = []
                 sameTypeShapes  = []
                 group = self.geompyD.CreateGroup( self.geom, groupType )
@@ -1693,22 +1934,34 @@ class Mesh(metaclass=MeshMeta):
                 self.geompyD.addToStudyInFather( self.geom, group, group.GetName() )
         return groups
 
-    ## Return sub-mesh objects list in meshing order
-    #  @return list of lists of sub-meshes
-    #  @ingroup l2_construct
     def GetMeshOrder(self):
+        """
+        Return sub-mesh objects list in meshing order
+
+        Returns:
+                list of lists of :class:`sub-meshes <SMESH.SMESH_subMesh>`
+        """
+
         return self.mesh.GetMeshOrder()
 
-    ## Set order in which concurrent sub-meshes should be meshed
-    #  @param submeshes list of lists of sub-meshes
-    #  @ingroup l2_construct
     def SetMeshOrder(self, submeshes):
+        """
+        Set order in which concurrent sub-meshes should be meshed
+
+        Parameters:
+                submeshes: list of lists of :class:`sub-meshes <SMESH.SMESH_subMesh>`
+        """
+
         return self.mesh.SetMeshOrder(submeshes)
 
-    ## Remove all nodes and elements generated on geometry. Imported elements remain.
-    #  @param refresh if @c True, Object browser is automatically updated (when running in GUI)
-    #  @ingroup l2_construct
     def Clear(self, refresh=False):
+        """
+        Remove all nodes and elements generated on geometry. Imported elements remain.
+
+        Parameters:
+                refresh: if *True*, Object browser is automatically updated (when running in GUI)
+        """
+
         self.mesh.Clear()
         if ( salome.sg.hasDesktop() ):
             smeshgui = salome.ImportComponentGUI("SMESH")
@@ -1716,11 +1969,15 @@ class Mesh(metaclass=MeshMeta):
             smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), False, True )
             if refresh: salome.sg.updateObjBrowser()
 
-    ## Remove all nodes and elements of indicated shape
-    #  @param refresh if @c True, Object browser is automatically updated (when running in GUI)
-    #  @param geomId the ID of a sub-shape to remove elements on
-    #  @ingroup l2_submeshes
     def ClearSubMesh(self, geomId, refresh=False):
+        """
+        Remove all nodes and elements of indicated shape
+
+        Parameters:
+                geomId: the ID of a sub-shape to remove elements on
+                refresh: if *True*, Object browser is automatically updated (when running in GUI)
+        """
+
         self.mesh.ClearSubMesh(geomId)
         if salome.sg.hasDesktop():
             smeshgui = salome.ImportComponentGUI("SMESH")
@@ -1728,11 +1985,17 @@ class Mesh(metaclass=MeshMeta):
             smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), False, True )
             if refresh: salome.sg.updateObjBrowser()
 
-    ## Compute a tetrahedral mesh using AutomaticLength + MEFISTO + Tetrahedron
-    #  @param fineness [0.0,1.0] defines mesh fineness
-    #  @return True or False
-    #  @ingroup l3_algos_basic
     def AutomaticTetrahedralization(self, fineness=0):
+        """
+        Compute a tetrahedral mesh using AutomaticLength + MEFISTO + Tetrahedron
+
+        Parameters:
+                fineness: [0.0,1.0] defines mesh fineness
+
+        Returns:
+                True or False
+        """
+
         dim = self.MeshDimension()
         # assign hypotheses
         self.RemoveGlobalHypotheses()
@@ -1745,11 +2008,17 @@ class Mesh(metaclass=MeshMeta):
             pass
         return self.Compute()
 
-    ## Compute an hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron
-    #  @param fineness [0.0, 1.0] defines mesh fineness
-    #  @return True or False
-    #  @ingroup l3_algos_basic
     def AutomaticHexahedralization(self, fineness=0):
+        """
+        Compute an hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron
+
+        Parameters:
+                fineness: [0.0, 1.0] defines mesh fineness
+
+        Returns:
+                True or False
+        """
+
         dim = self.MeshDimension()
         # assign the hypotheses
         self.RemoveGlobalHypotheses()
@@ -1762,12 +2031,18 @@ class Mesh(metaclass=MeshMeta):
             pass
         return self.Compute()
 
-    ## Assign a hypothesis
-    #  @param hyp a hypothesis to assign
-    #  @param geom a subhape of mesh geometry
-    #  @return SMESH.Hypothesis_Status
-    #  @ingroup l2_editing
     def AddHypothesis(self, hyp, geom=0):
+        """
+        Assign a hypothesis
+
+        Parameters:
+                hyp: a hypothesis to assign
+                geom: a subhape of mesh geometry
+
+        Returns:
+                :class:`SMESH.Hypothesis_Status`
+        """
+
         if isinstance( hyp, geomBuilder.GEOM._objref_GEOM_Object ):
             hyp, geom = geom, hyp
         if isinstance( hyp, Mesh_Algorithm ):
@@ -1800,12 +2075,18 @@ class Mesh(metaclass=MeshMeta):
         TreatHypoStatus( status, hyp_name, geom_name, isAlgo, self )
         return status
 
-    ## Return True if an algorithm of hypothesis is assigned to a given shape
-    #  @param hyp a hypothesis to check
-    #  @param geom a subhape of mesh geometry
-    #  @return True of False
-    #  @ingroup l2_editing
     def IsUsedHypothesis(self, hyp, geom):
+        """
+        Return True if an algorithm or hypothesis is assigned to a given shape
+
+        Parameters:
+                hyp: an algorithm or hypothesis to check
+                geom: a subhape of mesh geometry
+
+        Returns:
+                True of False
+        """
+
         if not hyp: # or not geom
             return False
         if isinstance( hyp, Mesh_Algorithm ):
@@ -1817,12 +2098,18 @@ class Mesh(metaclass=MeshMeta):
                 return True
         return False
 
-    ## Unassign a hypothesis
-    #  @param hyp a hypothesis to unassign
-    #  @param geom a sub-shape of mesh geometry
-    #  @return SMESH.Hypothesis_Status
-    #  @ingroup l2_editing
     def RemoveHypothesis(self, hyp, geom=0):
+        """
+        Unassign a hypothesis
+
+        Parameters:
+                hyp (SMESH.SMESH_Hypothesis): a hypothesis to unassign
+                geom (GEOM.GEOM_Object): a sub-shape of mesh geometry
+
+        Returns:
+                :class:`SMESH.Hypothesis_Status`
+        """
+
         if not hyp:
             return None
         if isinstance( hyp, Mesh_Algorithm ):
@@ -1839,44 +2126,54 @@ class Mesh(metaclass=MeshMeta):
         print("WARNING: RemoveHypothesis() failed as '%s' is not assigned to '%s' shape" % ( hypName, geoName ))
         return None
 
-    ## Get the list of hypotheses added on a geometry
-    #  @param geom a sub-shape of mesh geometry
-    #  @return the sequence of SMESH_Hypothesis
-    #  @ingroup l2_editing
     def GetHypothesisList(self, geom):
+        """
+        Get the list of hypotheses added on a geometry
+
+        Parameters:
+                geom (GEOM.GEOM_Object): a sub-shape of mesh geometry
+
+        Returns:
+                the sequence of :class:`SMESH.SMESH_Hypothesis`
+        """
+
         return self.mesh.GetHypothesisList( geom )
 
-    ## Remove all global hypotheses
-    #  @ingroup l2_editing
     def RemoveGlobalHypotheses(self):
+        """
+        Remove all global hypotheses
+        """
+
         current_hyps = self.mesh.GetHypothesisList( self.geom )
         for hyp in current_hyps:
             self.mesh.RemoveHypothesis( self.geom, hyp )
             pass
         pass
-
-    ## Export the mesh in a file in MED format
-    ## allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param fileName is the file name
-    #  @param auto_groups boolean parameter for creating/not creating
-    #  the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
-    #  the typical use is auto_groups=False.
-    #  @param overwrite boolean parameter for overwriting/not overwriting the file
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
-    #         - 1D if all mesh nodes lie on OX coordinate axis, or
-    #         - 2D if all mesh nodes lie on XOY coordinate plane, or
-    #         - 3D in the rest cases.<br>
-    #         If @a autoDimension is @c False, the space dimension is always 3.
-    #  @param fields list of GEOM fields defined on the shape to mesh.
-    #  @param geomAssocFields each character of this string means a need to export a
-    #         corresponding field; correspondence between fields and characters is following:
-    #         - 'v' stands for "_vertices _" field;
-    #         - 'e' stands for "_edges _" field;
-    #         - 'f' stands for "_faces _" field;
-    #         - 's' stands for "_solids _" field.
-    #  @ingroup l2_impexp
     def ExportMED(self, *args, **kwargs):
+        """
+        Export the mesh in a file in MED format
+        allowing to overwrite the file if it exists or add the exported data to its contents
+
+        Parameters:
+                fileName: is the file name
+                auto_groups (boolean): parameter for creating/not creating
+                       the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+                       the typical use is auto_groups=False.
+                overwrite (boolean): parameter for overwriting/not overwriting the file
+                meshPart: a part of mesh (group, sub-mesh) to export instead of the mesh
+                autoDimension if @c True (default), a space dimension of a MED mesh can be either
+                       - 1D if all mesh nodes lie on OX coordinate axis, or
+                       - 2D if all mesh nodes lie on XOY coordinate plane, or
+                       - 3D in the rest cases.
+                        If *autoDimension* is *False*, the space dimension is always 3.
+                fields: list of GEOM fields defined on the shape to mesh.
+                geomAssocFields: each character of this string means a need to export a 
+                        corresponding field; correspondence between fields and characters is following:
+                        - 'v' stands for "_vertices _" field;
+                        - 'e' stands for "_edges _" field;
+                        - 'f' stands for "_faces _" field;
+                        - 's' stands for "_solids _" field.
+        """
         # process positional arguments
         args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
         fileName        = args[0]
@@ -1904,20 +2201,29 @@ class Mesh(metaclass=MeshMeta):
         else:
             self.mesh.ExportMED(fileName, auto_groups, overwrite, autoDimension)
 
-    ## Export the mesh in a file in SAUV format
-    #  @param f is the file name
-    #  @param auto_groups boolean parameter for creating/not creating
-    #  the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
-    #  the typical use is auto_groups=false.
-    #  @ingroup l2_impexp
     def ExportSAUV(self, f, auto_groups=0):
+        """
+        Export the mesh in a file in SAUV format
+
+
+        Parameters:
+                f: is the file name
+                auto_groups: boolean parameter for creating/not creating
+                        the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+                        the typical use is auto_groups=False.
+        """
+
         self.mesh.ExportSAUV(f, auto_groups)
 
-    ## Export the mesh in a file in DAT format
-    #  @param f the file name
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @ingroup l2_impexp
     def ExportDAT(self, f, meshPart=None):
+        """
+        Export the mesh in a file in DAT format
+
+        Parameters:
+                f: the file name
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to export instead of the mesh
+        """
+
         if meshPart:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
@@ -1927,11 +2233,15 @@ class Mesh(metaclass=MeshMeta):
         else:
             self.mesh.ExportDAT(f)
 
-    ## Export the mesh in a file in UNV format
-    #  @param f the file name
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @ingroup l2_impexp
     def ExportUNV(self, f, meshPart=None):
+        """
+        Export the mesh in a file in UNV format
+
+        Parameters:
+                f: the file name
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to export instead of the mesh
+        """
+
         if meshPart:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
@@ -1941,12 +2251,16 @@ class Mesh(metaclass=MeshMeta):
         else:
             self.mesh.ExportUNV(f)
 
-    ## Export the mesh in a file in STL format
-    #  @param f the file name
-    #  @param ascii defines the file encoding
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @ingroup l2_impexp
     def ExportSTL(self, f, ascii=1, meshPart=None):
+        """
+        Export the mesh in a file in STL format
+
+        Parameters:
+                f: the file name
+                ascii: defines the file encoding
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to export instead of the mesh
+        """
+
         if meshPart:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
@@ -1956,15 +2270,19 @@ class Mesh(metaclass=MeshMeta):
         else:
             self.mesh.ExportSTL(f, ascii)
 
-    ## Export the mesh in a file in CGNS format
-    #  @param f is the file name
-    #  @param overwrite boolean parameter for overwriting/not overwriting the file
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @param groupElemsByType if true all elements of same entity type are exported at ones,
-    #         else elements are exported in order of their IDs which can cause creation
-    #         of multiple cgns sections
-    #  @ingroup l2_impexp
     def ExportCGNS(self, f, overwrite=1, meshPart=None, groupElemsByType=False):
+        """
+        Export the mesh in a file in CGNS format
+
+        Parameters:
+                f: is the file name
+                overwrite: boolean parameter for overwriting/not overwriting the file
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to export instead of the mesh
+                groupElemsByType: if True all elements of same entity type are exported at ones,
+                        else elements are exported in order of their IDs which can cause creation
+                        of multiple cgns sections
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( meshPart, list ):
             meshPart = self.GetIDSource( meshPart, SMESH.ALL )
@@ -1975,13 +2293,17 @@ class Mesh(metaclass=MeshMeta):
             meshPart = self.mesh
         self.mesh.ExportCGNS(meshPart, f, overwrite, groupElemsByType)
 
-    ## Export the mesh in a file in GMF format.
-    #  GMF files must have .mesh extension for the ASCII format and .meshb for
-    #  the bynary format. Other extensions are not allowed.
-    #  @param f is the file name
-    #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
-    #  @ingroup l2_impexp
     def ExportGMF(self, f, meshPart=None):
+        """
+        Export the mesh in a file in GMF format.
+        GMF files must have .mesh extension for the ASCII format and .meshb for
+        the bynary format. Other extensions are not allowed.
+
+        Parameters:
+                f: is the file name
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to export instead of the mesh
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( meshPart, list ):
             meshPart = self.GetIDSource( meshPart, SMESH.ALL )
@@ -1992,20 +2314,26 @@ class Mesh(metaclass=MeshMeta):
             meshPart = self.mesh
         self.mesh.ExportGMF(meshPart, f, True)
 
-    ## Deprecated, used only for compatibility! Please, use ExportMED() method instead.
-    #  Export the mesh in a file in MED format
-    #  allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param fileName the file name
-    #  @param opt boolean parameter for creating/not creating
-    #         the groups Group_On_All_Nodes, Group_On_All_Faces, ...
-    #  @param overwrite boolean parameter for overwriting/not overwriting the file
-    #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
-    #         - 1D if all mesh nodes lie on OX coordinate axis, or
-    #         - 2D if all mesh nodes lie on XOY coordinate plane, or
-    #         - 3D in the rest cases.<br>
-    #         If @a autoDimension is @c False, the space dimension is always 3.
-    #  @ingroup l2_impexp
     def ExportToMED(self, *args, **kwargs):
+        """
+        Deprecated, used only for compatibility! Please, use :meth:`ExportMED` method instead.
+        Export the mesh in a file in MED format
+        allowing to overwrite the file if it exists or add the exported data to its contents
+
+        Parameters:
+                fileName: the file name
+                opt (boolean): parameter for creating/not creating
+                        the groups Group_On_All_Nodes, Group_On_All_Faces, ...
+                overwrite: boolean parameter for overwriting/not overwriting the file
+                autoDimension: if *True* (default), a space dimension of a MED mesh can be either
+
+                        - 1D if all mesh nodes lie on OX coordinate axis, or
+                        - 2D if all mesh nodes lie on XOY coordinate plane, or
+                        - 3D in the rest cases.
+
+                        If **autoDimension** is *False*, the space dimension is always 3.
+        """
+    
         print("WARNING: ExportToMED() is deprecated, use ExportMED() instead")
         # process positional arguments
         args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
@@ -2021,20 +2349,25 @@ class Mesh(metaclass=MeshMeta):
         # invoke engine's function
         self.mesh.ExportMED(fileName, auto_groups, overwrite, autoDimension)
 
-    ## Deprecated, used only for compatibility! Please, use ExportMED() method instead.
-    #  Export the mesh in a file in MED format
-    #  allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param fileName the file name
-    #  @param opt boolean parameter for creating/not creating
-    #         the groups Group_On_All_Nodes, Group_On_All_Faces, ...
-    #  @param overwrite boolean parameter for overwriting/not overwriting the file
-    #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
-    #         - 1D if all mesh nodes lie on OX coordinate axis, or
-    #         - 2D if all mesh nodes lie on XOY coordinate plane, or
-    #         - 3D in the rest cases.<br>
-    #         If @a autoDimension is @c False, the space dimension is always 3.
-    #  @ingroup l2_impexp
     def ExportToMEDX(self, *args, **kwargs):
+        """
+        Deprecated, used only for compatibility! Please, use ExportMED() method instead.
+        Export the mesh in a file in MED format
+
+        Parameters:
+                fileName: the file name
+                opt (boolean): parameter for creating/not creating
+                        the groups Group_On_All_Nodes, Group_On_All_Faces, ...
+                overwrite: boolean parameter for overwriting/not overwriting the file
+                autoDimension: if *True* (default), a space dimension of a MED mesh can be either
+
+                        - 1D if all mesh nodes lie on OX coordinate axis, or
+                        - 2D if all mesh nodes lie on XOY coordinate plane, or
+                        - 3D in the rest cases.
+
+                        If **autoDimension** is *False*, the space dimension is always 3.
+               """
+
         print("WARNING: ExportToMEDX() is deprecated, use ExportMED() instead")
         # process positional arguments
         args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
@@ -2051,38 +2384,57 @@ class Mesh(metaclass=MeshMeta):
 
     # Operations with groups:
     # ----------------------
-
-    ## Create an empty mesh group
-    #  @param elementType the type of elements in the group; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
-    #  @param name the name of the mesh group
-    #  @return SMESH_Group
-    #  @ingroup l2_grps_create
     def CreateEmptyGroup(self, elementType, name):
+        """
+        Create an empty mesh group
+
+        Parameters:
+                elementType: the :class:`type <SMESH.ElementType>` of elements in the group; 
+                        either of (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
+                name: the name of the mesh group
+
+        Returns:
+                :class:`SMESH.SMESH_Group`
+        """
+
         return self.mesh.CreateGroup(elementType, name)
 
-    ## Create a mesh group based on the geometric object \a grp
-    #  and gives a \a name, \n if this parameter is not defined
-    #  the name is the same as the geometric group name \n
-    #  Note: Works like GroupOnGeom().
-    #  @param grp  a geometric group, a vertex, an edge, a face or a solid
-    #  @param name the name of the mesh group
-    #  @return SMESH_GroupOnGeom
-    #  @ingroup l2_grps_create
     def Group(self, grp, name=""):
+        """
+        Create a mesh group based on the geometric object *grp*
+        and give it a *name*.
+        If *name* is not defined the name of the geometric group is used
+
+        Note:
+                Works like :meth:`GroupOnGeom`.
+
+        Parameters:
+                grp:  a geometric group, a vertex, an edge, a face or a solid
+                name: the name of the mesh group
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnGeom`
+        """
+
         return self.GroupOnGeom(grp, name)
 
-    ## Create a mesh group based on the geometrical object \a grp
-    #  and gives a \a name, \n if this parameter is not defined
-    #  the name is the same as the geometrical group name
-    #  @param grp  a geometrical group, a vertex, an edge, a face or a solid
-    #  @param name the name of the mesh group
-    #  @param typ  the type of elements in the group; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME). If not set, it is
-    #         automatically detected by the type of the geometry
-    #  @return SMESH_GroupOnGeom
-    #  @ingroup l2_grps_create
     def GroupOnGeom(self, grp, name="", typ=None):
+        """
+        Create a mesh group based on the geometrical object *grp*
+        and gives a *name*.
+        if *name* is not defined the name of the geometric group is used
+
+        Parameters:
+                grp:  a geometrical group, a vertex, an edge, a face or a solid
+                name: the name of the mesh group
+                typ:  the type of elements in the group; either of
+                        (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME). If not set, it is
+                        automatically detected by the type of the geometry
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnGeom`
+        """
+
         AssureGeomPublished( self, grp, name )
         if name == "":
             name = grp.GetName()
@@ -2090,8 +2442,10 @@ class Mesh(metaclass=MeshMeta):
             typ = self._groupTypeFromShape( grp )
         return self.mesh.CreateGroupFromGEOM(typ, name, grp)
 
-    ## Pivate method to get a type of group on geometry
     def _groupTypeFromShape( self, shape ):
+        """
+        Pivate method to get a type of group on geometry
+        """
         tgeo = str(shape.GetShapeType())
         if tgeo == "VERTEX":
             typ = NODE
@@ -2110,26 +2464,38 @@ class Mesh(metaclass=MeshMeta):
             raise ValueError("_groupTypeFromShape(): invalid geometry '%s'" % GetName(shape))
         return typ
 
-    ## Create a mesh group with given \a name based on the \a filter which
-    ## is a special type of group dynamically updating it's contents during
-    ## mesh modification
-    #  @param typ  the type of elements in the group; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
-    #  @param name the name of the mesh group
-    #  @param filter the filter defining group contents
-    #  @return SMESH_GroupOnFilter
-    #  @ingroup l2_grps_create
     def GroupOnFilter(self, typ, name, filter):
+        """
+        Create a mesh group with given *name* based on the *filter* which
+        is a special type of group dynamically updating it's contents during
+        mesh modification
+
+        Parameters:
+                typ: the type of elements in the group; either of
+                        (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
+                name: the name of the mesh group
+                filter (SMESH.Filter): the filter defining group contents
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnFilter`
+        """
+
         return self.mesh.CreateGroupFromFilter(typ, name, filter)
 
-    ## Create a mesh group by the given ids of elements
-    #  @param groupName the name of the mesh group
-    #  @param elementType the type of elements in the group; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
-    #  @param elemIDs either the list of ids, group, sub-mesh, or filter
-    #  @return SMESH_Group
-    #  @ingroup l2_grps_create
     def MakeGroupByIds(self, groupName, elementType, elemIDs):
+        """
+        Create a mesh group by the given ids of elements
+
+        Parameters:
+                groupName: the name of the mesh group
+                elementType: the type of elements in the group; either of
+                        (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
+                elemIDs: either the list of ids, :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+                :class:`SMESH.SMESH_Group`
+        """
+
         group = self.mesh.CreateGroup(elementType, groupName)
         if isinstance( elemIDs, Mesh ):
             elemIDs = elemIDs.GetMesh()
@@ -2141,19 +2507,6 @@ class Mesh(metaclass=MeshMeta):
             group.Add(elemIDs)
         return group
 
-    ## Create a mesh group by the given conditions
-    #  @param groupName the name of the mesh group
-    #  @param elementType the type of elements(SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
-    #  @param CritType the type of criterion (SMESH.FT_Taper, SMESH.FT_Area, etc.)
-    #          Type SMESH.FunctorType._items in the Python Console to see all values.
-    #          Note that the items starting from FT_LessThan are not suitable for CritType.
-    #  @param Compare  belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
-    #  @param Threshold the threshold value (range of ids as string, shape, numeric)
-    #  @param UnaryOp  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
-    #  @param Tolerance the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
-    #         SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces criteria
-    #  @return SMESH_GroupOnFilter
-    #  @ingroup l2_grps_create
     def MakeGroup(self,
                   groupName,
                   elementType,
@@ -2162,59 +2515,119 @@ class Mesh(metaclass=MeshMeta):
                   Threshold="",
                   UnaryOp=FT_Undefined,
                   Tolerance=1e-07):
+        """
+        Create a mesh group by the given conditions
+
+        Parameters:
+                groupName: the name of the mesh group
+                elementType (SMESH.ElementType): the type of elements (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
+                CritType (SMESH.FunctorType): the type of criterion (SMESH.FT_Taper, SMESH.FT_Area, etc.).
+                        Note that the items starting from FT_LessThan are not suitable for CritType.
+                Compare (SMESH.FunctorType): belongs to {SMESH.FT_LessThan, SMESH.FT_MoreThan, SMESH.FT_EqualTo}
+                Threshold: the threshold value (range of ids as string, shape, numeric, depending on *CritType*)
+                UnaryOp (SMESH.FunctorType):  SMESH.FT_LogicalNOT or SMESH.FT_Undefined
+                Tolerance (float): the tolerance used by SMESH.FT_BelongToGeom, SMESH.FT_BelongToSurface,
+                        SMESH.FT_LyingOnGeom, SMESH.FT_CoplanarFaces criteria
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnFilter`
+        """
+
         aCriterion = self.smeshpyD.GetCriterion(elementType, CritType, Compare, Threshold, UnaryOp, FT_Undefined,Tolerance)
         group = self.MakeGroupByCriterion(groupName, aCriterion)
         return group
 
-    ## Create a mesh group by the given criterion
-    #  @param groupName the name of the mesh group
-    #  @param Criterion the instance of Criterion class
-    #  @return SMESH_GroupOnFilter
-    #  @ingroup l2_grps_create
     def MakeGroupByCriterion(self, groupName, Criterion):
+        """
+        Create a mesh group by the given criterion
+
+        Parameters:
+                groupName: the name of the mesh group
+                Criterion: the instance of :class:`SMESH.Filter.Criterion` class
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnFilter`
+
+        See Also:
+                :meth:`smeshBuilder.GetCriterion`
+        """
+
         return self.MakeGroupByCriteria( groupName, [Criterion] )
 
-    ## Create a mesh group by the given criteria (list of criteria)
-    #  @param groupName the name of the mesh group
-    #  @param theCriteria the list of criteria
-    #  @param binOp binary operator used when binary operator of criteria is undefined
-    #  @return SMESH_GroupOnFilter
-    #  @ingroup l2_grps_create
     def MakeGroupByCriteria(self, groupName, theCriteria, binOp=SMESH.FT_LogicalAND):
+        """
+        Create a mesh group by the given criteria (list of :class:`SMESH.Filter.Criterion`)
+
+        Parameters:
+                groupName: the name of the mesh group
+                theCriteria: the list of :class:`SMESH.Filter.Criterion`
+                binOp: binary operator (SMESH.FT_LogicalAND or SMESH.FT_LogicalOR ) used when binary operator of criteria is undefined
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnFilter`
+
+        See Also:
+                :meth:`smeshBuilder.GetCriterion`
+        """
+
         aFilter = self.smeshpyD.GetFilterFromCriteria( theCriteria, binOp )
         group = self.MakeGroupByFilter(groupName, aFilter)
         return group
 
-    ## Create a mesh group by the given filter
-    #  @param groupName the name of the mesh group
-    #  @param theFilter the instance of Filter class
-    #  @return SMESH_GroupOnFilter
-    #  @ingroup l2_grps_create
     def MakeGroupByFilter(self, groupName, theFilter):
-        #group = self.CreateEmptyGroup(theFilter.GetElementType(), groupName)
-        #theFilter.SetMesh( self.mesh )
-        #group.AddFrom( theFilter )
+        """
+        Create a mesh group by the given filter
+
+        Parameters:
+                groupName (string): the name of the mesh group
+                theFilter (SMESH.Filter): the filter
+
+        Returns:
+                :class:`SMESH.SMESH_GroupOnFilter`
+
+        See Also:
+                :meth:`smeshBuilder.GetFilter`
+        """
+
+        #group = self.CreateEmptyGroup(theFilter.GetElementType(), groupName)
+        #theFilter.SetMesh( self.mesh )
+        #group.AddFrom( theFilter )
         group = self.GroupOnFilter( theFilter.GetElementType(), groupName, theFilter )
         return group
 
-    ## Remove a group
-    #  @ingroup l2_grps_delete
     def RemoveGroup(self, group):
+        """
+        Remove a group
+
+        Parameters:
+                group (SMESH.SMESH_GroupBase): group to remove
+        """
+
         self.mesh.RemoveGroup(group)
 
-    ## Remove a group with its contents
-    #  @ingroup l2_grps_delete
     def RemoveGroupWithContents(self, group):
+        """
+        Remove a group with its contents
+
+        Parameters:
+                group (SMESH.SMESH_GroupBase): group to remove
+        """
+
         self.mesh.RemoveGroupWithContents(group)
 
-    ## Get the list of groups existing in the mesh in the order
-    #  of creation (starting from the oldest one)
-    #  @param elemType type of elements the groups contain; either of
-    #         (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME);
-    #         by default groups of elements of all types are returned
-    #  @return a sequence of SMESH_GroupBase
-    #  @ingroup l2_grps_create
     def GetGroups(self, elemType = SMESH.ALL):
+        """
+        Get the list of groups existing in the mesh in the order
+        of creation (starting from the oldest one)
+
+        Parameters:
+                elemType (SMESH.ElementType): type of elements the groups contain;
+                        by default groups of elements of all types are returned
+
+        Returns:
+                a sequence of :class:`SMESH.SMESH_GroupBase`
+        """
+
         groups = self.mesh.GetGroups()
         if elemType == SMESH.ALL:
             return groups
@@ -2226,31 +2639,44 @@ class Mesh(metaclass=MeshMeta):
             pass
         return typedGroups
 
-    ## Get the number of groups existing in the mesh
-    #  @return the quantity of groups as an integer value
-    #  @ingroup l2_grps_create
     def NbGroups(self):
+        """
+        Get the number of groups existing in the mesh
+
+        Returns:
+                the quantity of groups as an integer value
+        """
+
         return self.mesh.NbGroups()
 
-    ## Get the list of names of groups existing in the mesh
-    #  @return list of strings
-    #  @ingroup l2_grps_create
     def GetGroupNames(self):
+        """
+        Get the list of names of groups existing in the mesh
+
+        Returns:
+                list of strings
+        """
+
         groups = self.GetGroups()
         names = []
         for group in groups:
             names.append(group.GetName())
         return names
 
-    ## Find groups by name and type
-    #  @param name name of the group of interest
-    #  @param elemType type of elements the groups contain; either of
-    #         (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME);
-    #         by default one group of any type of elements is returned
-    #         if elemType == SMESH.ALL then all groups of any type are returned
-    #  @return a list of SMESH_GroupBase's
-    #  @ingroup l2_grps_create
     def GetGroupByName(self, name, elemType = None):
+        """
+        Find groups by name and type
+
+        Parameters:
+                name (string): name of the group of interest
+                elemType (SMESH.ElementType): type of elements the groups contain;
+                        by default one group of any type is returned;
+                        if elemType == SMESH.ALL then all groups of any type are returned
+
+        Returns:
+                a list of :class:`SMESH.SMESH_GroupBase`
+        """
+
         groups = []
         for group in self.GetGroups():
             if group.GetName() == name:
@@ -2261,153 +2687,237 @@ class Mesh(metaclass=MeshMeta):
                     groups.append( group )
         return groups
 
-    ## Produce a union of two groups.
-    #  A new group is created. All mesh elements that are
-    #  present in the initial groups are added to the new one
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def UnionGroups(self, group1, group2, name):
+        """
+        Produce a union of two groups.
+        A new group is created. All mesh elements that are
+        present in the initial groups are added to the new one
+
+        Parameters:
+           group1 (SMESH.SMESH_GroupBase): a group
+           group2 (SMESH.SMESH_GroupBase): another group
+
+        Returns:
+                instance of :class:`SMESH.SMESH_Group`
+        """
+
         return self.mesh.UnionGroups(group1, group2, name)
 
-    ## Produce a union list of groups.
-    #  New group is created. All mesh elements that are present in
-    #  initial groups are added to the new one
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def UnionListOfGroups(self, groups, name):
+        """
+        Produce a union list of groups.
+        New group is created. All mesh elements that are present in
+        initial groups are added to the new one
+
+        Parameters:
+           groups: list of :class:`SMESH.SMESH_GroupBase`
+
+        Returns:
+                instance of :class:`SMESH.SMESH_Group`
+        """
         return self.mesh.UnionListOfGroups(groups, name)
 
-    ## Prodice an intersection of two groups.
-    #  A new group is created. All mesh elements that are common
-    #  for the two initial groups are added to the new one.
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def IntersectGroups(self, group1, group2, name):
+        """
+        Prodice an intersection of two groups.
+        A new group is created. All mesh elements that are common
+        for the two initial groups are added to the new one.
+
+        Parameters:
+           group1 (SMESH.SMESH_GroupBase): a group
+           group2 (SMESH.SMESH_GroupBase): another group
+
+        Returns:
+                instance of :class:`SMESH.SMESH_Group`
+        """
+
         return self.mesh.IntersectGroups(group1, group2, name)
 
-    ## Produce an intersection of groups.
-    #  New group is created. All mesh elements that are present in all
-    #  initial groups simultaneously are added to the new one
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def IntersectListOfGroups(self, groups, name):
+        """
+        Produce an intersection of groups.
+        New group is created. All mesh elements that are present in all
+        initial groups simultaneously are added to the new one
+
+        Parameters:
+           groups: a list of :class:`SMESH.SMESH_GroupBase`
+
+        Returns:
+                instance of :class:`SMESH.SMESH_Group`
+        """
         return self.mesh.IntersectListOfGroups(groups, name)
 
-    ## Produce a cut of two groups.
-    #  A new group is created. All mesh elements that are present in
-    #  the main group but are not present in the tool group are added to the new one
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def CutGroups(self, main_group, tool_group, name):
+        """
+        Produce a cut of two groups.
+        A new group is created. All mesh elements that are present in
+        the main group but are not present in the tool group are added to the new one
+
+        Parameters:
+           main_group (SMESH.SMESH_GroupBase): a group to cut from
+           tool_group (SMESH.SMESH_GroupBase): a group to cut by
+
+        Returns:
+                an instance of :class:`SMESH.SMESH_Group`
+        """
+
         return self.mesh.CutGroups(main_group, tool_group, name)
 
-    ## Produce a cut of groups.
-    #  A new group is created. All mesh elements that are present in main groups
-    #  but do not present in tool groups are added to the new one
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def CutListOfGroups(self, main_groups, tool_groups, name):
+        """
+        Produce a cut of groups.
+        A new group is created. All mesh elements that are present in main groups
+        but do not present in tool groups are added to the new one
+
+        Parameters:
+           main_group: groups to cut from  (list of :class:`SMESH.SMESH_GroupBase`)
+           tool_group: groups to cut by    (list of :class:`SMESH.SMESH_GroupBase`)
+
+        Returns:
+                an instance of :class:`SMESH.SMESH_Group`
+        """
+
         return self.mesh.CutListOfGroups(main_groups, tool_groups, name)
 
-    ##
-    #  Create a standalone group of entities basing on nodes of other groups.
-    #  \param groups - list of reference groups, sub-meshes or filters, of any type.
-    #  \param elemType - a type of elements to include to the new group; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
-    #  \param name - a name of the new group.
-    #  \param nbCommonNodes - a criterion of inclusion of an element to the new group
-    #         basing on number of element nodes common with reference \a groups.
-    #         Meaning of possible values are:
-    #         - SMESH.ALL_NODES - include if all nodes are common,
-    #         - SMESH.MAIN - include if all corner nodes are common (meaningful for a quadratic mesh),
-    #         - SMESH.AT_LEAST_ONE - include if one or more node is common,
-    #         - SMEHS.MAJORITY - include if half of nodes or more are common.
-    #  \param underlyingOnly - if \c True (default), an element is included to the
-    #         new group provided that it is based on nodes of an element of \a groups;
-    #         in this case the reference \a groups are supposed to be of higher dimension
-    #         than \a elemType, which can be useful for example to get all faces lying on
-    #         volumes of the reference \a groups.
-    #  @return an instance of SMESH_Group
-    #  @ingroup l2_grps_operon
     def CreateDimGroup(self, groups, elemType, name,
                        nbCommonNodes = SMESH.ALL_NODES, underlyingOnly = True):
+        """
+        Create a standalone group of entities basing on nodes of other groups.
+
+        Parameters:
+                groups: list of reference :class:`sub-meshes, groups or filters <SMESH.SMESH_IDSource>`, of any type.
+                elemType: a type of elements to include to the new group; either of
+                        (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
+                name: a name of the new group.
+                nbCommonNodes: a criterion of inclusion of an element to the new group
+                        basing on number of element nodes common with reference *groups*.
+                        Meaning of possible values are:
+
+                                - SMESH.ALL_NODES - include if all nodes are common,
+                                - SMESH.MAIN - include if all corner nodes are common (meaningful for a quadratic mesh),
+                                - SMESH.AT_LEAST_ONE - include if one or more node is common,
+                                - SMEHS.MAJORITY - include if half of nodes or more are common.
+                underlyingOnly: if *True* (default), an element is included to the
+                        new group provided that it is based on nodes of an element of *groups*;
+                        in this case the reference *groups* are supposed to be of higher dimension
+                        than *elemType*, which can be useful for example to get all faces lying on
+                        volumes of the reference *groups*.
+
+        Returns:
+                an instance of :class:`SMESH.SMESH_Group`
+        """
+
         if isinstance( groups, SMESH._objref_SMESH_IDSource ):
             groups = [groups]
         return self.mesh.CreateDimGroup(groups, elemType, name, nbCommonNodes, underlyingOnly)
 
 
-    ## Convert group on geom into standalone group
-    #  @ingroup l2_grps_operon
     def ConvertToStandalone(self, group):
+        """
+        Convert group on geom into standalone group
+        """
+
         return self.mesh.ConvertToStandalone(group)
 
     # Get some info about mesh:
     # ------------------------
 
-    ## Return the log of nodes and elements added or removed
-    #  since the previous clear of the log.
-    #  @param clearAfterGet log is emptied after Get (safe if concurrents access)
-    #  @return list of log_block structures:
-    #                                        commandType
-    #                                        number
-    #                                        coords
-    #                                        indexes
-    #  @ingroup l1_auxiliary
     def GetLog(self, clearAfterGet):
+        """
+        Return the log of nodes and elements added or removed
+        since the previous clear of the log.
+
+        Parameters:
+                clearAfterGet: log is emptied after Get (safe if concurrents access)
+
+        Returns:
+                list of SMESH.log_block structures { commandType, number, coords, indexes }
+        """
+
         return self.mesh.GetLog(clearAfterGet)
 
-    ## Clear the log of nodes and elements added or removed since the previous
-    #  clear. Must be used immediately after GetLog if clearAfterGet is false.
-    #  @ingroup l1_auxiliary
     def ClearLog(self):
+        """
+        Clear the log of nodes and elements added or removed since the previous
+        clear. Must be used immediately after :meth:`GetLog` if clearAfterGet is false.
+        """
+
         self.mesh.ClearLog()
 
-    ## Toggle auto color mode on the object.
-    #  @param theAutoColor the flag which toggles auto color mode.
-    #
-    #  If switched on, a default color of a new group in Create Group dialog is chosen randomly.
-    #  @ingroup l1_grouping
     def SetAutoColor(self, theAutoColor):
+        """
+        Toggle auto color mode on the object.
+        If switched on, a default color of a new group in Create Group dialog is chosen randomly.
+
+        Parameters:
+                theAutoColor (boolean): the flag which toggles auto color mode.
+        """
+
         self.mesh.SetAutoColor(theAutoColor)
 
-    ## Get flag of object auto color mode.
-    #  @return True or False
-    #  @ingroup l1_grouping
     def GetAutoColor(self):
+        """
+        Get flag of object auto color mode.
+
+        Returns:
+                True or False
+        """
+
         return self.mesh.GetAutoColor()
 
-    ## Get the internal ID
-    #  @return integer value, which is the internal Id of the mesh
-    #  @ingroup l1_auxiliary
     def GetId(self):
+        """
+        Get the internal ID
+
+        Returns:
+            integer value, which is the internal Id of the mesh
+        """
+
         return self.mesh.GetId()
 
-    ## Check the group names for duplications.
-    #  Consider the maximum group name length stored in MED file.
-    #  @return True or False
-    #  @ingroup l1_grouping
     def HasDuplicatedGroupNamesMED(self):
+        """
+        Check the group names for duplications.
+        Consider the maximum group name length stored in MED file.
+
+        Returns:
+            True or False
+        """
+
         return self.mesh.HasDuplicatedGroupNamesMED()
 
-    ## Obtain the mesh editor tool
-    #  @return an instance of SMESH_MeshEditor
-    #  @ingroup l1_modifying
     def GetMeshEditor(self):
+        """
+        Obtain the mesh editor tool
+
+        Returns:
+            an instance of :class:`SMESH.SMESH_MeshEditor`
+        """
+
         return self.editor
 
-    ## Wrap a list of IDs of elements or nodes into SMESH_IDSource which
-    #  can be passed as argument to a method accepting mesh, group or sub-mesh
-    #  @param ids list of IDs
-    #  @param elemType type of elements; this parameter is used to distinguish
-    #         IDs of nodes from IDs of elements; by default ids are treated as
-    #         IDs of elements; use SMESH.NODE if ids are IDs of nodes.
-    #  @return an instance of SMESH_IDSource
-    #  @warning call UnRegister() for the returned object as soon as it is no more useful:
-    #          idSrc = mesh.GetIDSource( [1,3,5], SMESH.NODE )
-    #          mesh.DoSomething( idSrc )
-    #          idSrc.UnRegister()
-    #  @ingroup l1_auxiliary
     def GetIDSource(self, ids, elemType = SMESH.ALL):
+        """
+        Wrap a list of IDs of elements or nodes into :class:`SMESH.SMESH_IDSource` which
+        can be passed as argument to a method accepting :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Parameters:
+                ids: list of IDs
+                elemType: type of elements; this parameter is used to distinguish
+                        IDs of nodes from IDs of elements; by default ids are treated as
+                        IDs of elements; use SMESH.NODE if ids are IDs of nodes.
+
+        Returns:
+            an instance of :class:`SMESH.SMESH_IDSource`
+
+        Warning:
+                call UnRegister() for the returned object as soon as it is no more useful::
+
+                        idSrc = mesh.GetIDSource( [1,3,5], SMESH.NODE )
+                        mesh.DoSomething( idSrc )
+                        idSrc.UnRegister()
+        """
+
         if isinstance( ids, int ):
             ids = [ids]
         return self.editor.MakeIDSource(ids, elemType)
@@ -2416,440 +2926,716 @@ class Mesh(metaclass=MeshMeta):
     # Get information about mesh contents:
     # ------------------------------------
 
-    ## Get the mesh statistic
-    #  @return dictionary type element - count of elements
-    #  @ingroup l1_meshinfo
     def GetMeshInfo(self, obj = None):
+        """
+        Get the mesh statistic.
+        Use :meth:`smeshBuilder.EnumToLong` to get an integer from 
+        an item of :class:`SMESH.EntityType`.
+
+        Returns:
+                dictionary { :class:`SMESH.EntityType` - "count of elements" }
+        """
+
         if not obj: obj = self.mesh
         return self.smeshpyD.GetMeshInfo(obj)
 
-    ## Return the number of nodes in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbNodes(self):
+        """
+        Return the number of nodes in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbNodes()
 
-    ## Return the number of elements in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbElements(self):
+        """
+        Return the number of elements in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbElements()
 
-    ## Return the number of 0d elements in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def Nb0DElements(self):
+        """
+        Return the number of 0d elements in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.Nb0DElements()
 
-    ## Return the number of ball discrete elements in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbBalls(self):
+        """
+        Return the number of ball discrete elements in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbBalls()
 
-    ## Return the number of edges in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbEdges(self):
+        """
+        Return the number of edges in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbEdges()
 
-    ## Return the number of edges with the given order in the mesh
-    #  @param elementOrder the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbEdgesOfOrder(self, elementOrder):
+        """
+        Return the number of edges with the given order in the mesh
+
+        Parameters:
+                elementOrder: the order of elements
+                     (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbEdgesOfOrder(elementOrder)
 
-    ## Return the number of faces in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbFaces(self):
+        """
+        Return the number of faces in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbFaces()
 
-    ## Return the number of faces with the given order in the mesh
-    #  @param elementOrder the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbFacesOfOrder(self, elementOrder):
+        """
+        Return the number of faces with the given order in the mesh
+
+        Parameters:
+                elementOrder: the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbFacesOfOrder(elementOrder)
 
-    ## Return the number of triangles in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbTriangles(self):
+        """
+        Return the number of triangles in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbTriangles()
 
-    ## Return the number of triangles with the given order in the mesh
-    #  @param elementOrder is the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbTrianglesOfOrder(self, elementOrder):
+        """
+        Return the number of triangles with the given order in the mesh
+
+        Parameters:
+                elementOrder: is the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbTrianglesOfOrder(elementOrder)
 
-    ## Return the number of biquadratic triangles in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbBiQuadTriangles(self):
+        """
+        Return the number of biquadratic triangles in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbBiQuadTriangles()
 
-    ## Return the number of quadrangles in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbQuadrangles(self):
+        """
+        Return the number of quadrangles in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbQuadrangles()
 
-    ## Return the number of quadrangles with the given order in the mesh
-    #  @param elementOrder the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbQuadranglesOfOrder(self, elementOrder):
+        """
+        Return the number of quadrangles with the given order in the mesh
+
+        Parameters:
+                elementOrder: the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbQuadranglesOfOrder(elementOrder)
 
-    ## Return the number of biquadratic quadrangles in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbBiQuadQuadrangles(self):
+        """
+        Return the number of biquadratic quadrangles in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbBiQuadQuadrangles()
 
-    ## Return the number of polygons of given order in the mesh
-    #  @param elementOrder the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPolygons(self, elementOrder = SMESH.ORDER_ANY):
+        """
+        Return the number of polygons of given order in the mesh
+
+        Parameters:
+                elementOrder: the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPolygonsOfOrder(elementOrder)
 
-    ## Return the number of volumes in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbVolumes(self):
+        """
+        Return the number of volumes in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbVolumes()
 
-    ## Return the number of volumes with the given order in the mesh
-    #  @param elementOrder  the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
+
     def NbVolumesOfOrder(self, elementOrder):
+        """
+        Return the number of volumes with the given order in the mesh
+
+        Parameters:
+                elementOrder:  the order of elements
+                    (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbVolumesOfOrder(elementOrder)
 
-    ## Return the number of tetrahedrons in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbTetras(self):
+        """
+        Return the number of tetrahedrons in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbTetras()
 
-    ## Return the number of tetrahedrons with the given order in the mesh
-    #  @param elementOrder  the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbTetrasOfOrder(self, elementOrder):
+        """
+        Return the number of tetrahedrons with the given order in the mesh
+
+        Parameters:
+                elementOrder:  the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbTetrasOfOrder(elementOrder)
 
-    ## Return the number of hexahedrons in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbHexas(self):
+        """
+        Return the number of hexahedrons in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbHexas()
 
-    ## Return the number of hexahedrons with the given order in the mesh
-    #  @param elementOrder  the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbHexasOfOrder(self, elementOrder):
+        """
+        Return the number of hexahedrons with the given order in the mesh
+
+        Parameters:
+                elementOrder:  the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbHexasOfOrder(elementOrder)
 
-    ## Return the number of triquadratic hexahedrons in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbTriQuadraticHexas(self):
+        """
+        Return the number of triquadratic hexahedrons in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbTriQuadraticHexas()
 
-    ## Return the number of pyramids in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPyramids(self):
+        """
+        Return the number of pyramids in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPyramids()
 
-    ## Return the number of pyramids with the given order in the mesh
-    #  @param elementOrder  the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPyramidsOfOrder(self, elementOrder):
+        """
+        Return the number of pyramids with the given order in the mesh
+
+        Parameters:
+                elementOrder:  the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPyramidsOfOrder(elementOrder)
 
-    ## Return the number of prisms in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPrisms(self):
+        """
+        Return the number of prisms in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPrisms()
 
-    ## Return the number of prisms with the given order in the mesh
-    #  @param elementOrder  the order of elements:
-    #         SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPrismsOfOrder(self, elementOrder):
+        """
+        Return the number of prisms with the given order in the mesh
+
+        Parameters:
+                elementOrder:  the order of elements
+                        (SMESH.ORDER_ANY, SMESH.ORDER_LINEAR or SMESH.ORDER_QUADRATIC)
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPrismsOfOrder(elementOrder)
 
-    ## Return the number of hexagonal prisms in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbHexagonalPrisms(self):
+        """
+        Return the number of hexagonal prisms in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbHexagonalPrisms()
 
-    ## Return the number of polyhedrons in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbPolyhedrons(self):
+        """
+        Return the number of polyhedrons in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbPolyhedrons()
 
-    ## Return the number of submeshes in the mesh
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def NbSubMesh(self):
+        """
+        Return the number of submeshes in the mesh
+
+        Returns:
+            an integer value
+        """
+
         return self.mesh.NbSubMesh()
 
-    ## Return the list of mesh elements IDs
-    #  @return the list of integer values
-    #  @ingroup l1_meshinfo
     def GetElementsId(self):
+        """
+        Return the list of all mesh elements IDs
+
+        Returns:
+            the list of integer values
+
+        See Also:
+            :meth:`GetElementsByType`
+        """
+
         return self.mesh.GetElementsId()
 
-    ## Return the list of IDs of mesh elements with the given type
-    #  @param elementType  the required type of elements, either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE or SMESH.VOLUME)
-    #  @return list of integer values
-    #  @ingroup l1_meshinfo
     def GetElementsByType(self, elementType):
+        """
+        Return the list of IDs of mesh elements with the given type
+
+        Parameters:
+                elementType (SMESH.ElementType):  the required type of elements
+
+        Returns:
+            list of integer values
+        """
+
         return self.mesh.GetElementsByType(elementType)
 
-    ## Return the list of mesh nodes IDs
-    #  @return the list of integer values
-    #  @ingroup l1_meshinfo
     def GetNodesId(self):
+        """
+        Return the list of mesh nodes IDs
+
+        Returns:
+            the list of integer values
+        """
+
         return self.mesh.GetNodesId()
 
     # Get the information about mesh elements:
     # ------------------------------------
 
-    ## Return the type of mesh element
-    #  @return the value from SMESH::ElementType enumeration
-    #          Type SMESH.ElementType._items in the Python Console to see all possible values.
-    #  @ingroup l1_meshinfo
     def GetElementType(self, id, iselem=True):
+        """
+        Return the type of mesh element or node
+
+        Returns:
+            the value from :class:`SMESH.ElementType` enumeration. 
+            Return SMESH.ALL if element or node with the given ID does not exist
+        """
+
         return self.mesh.GetElementType(id, iselem)
 
-    ## Return the geometric type of mesh element
-    #  @return the value from SMESH::EntityType enumeration
-    #          Type SMESH.EntityType._items in the Python Console to see all possible values.
-    #  @ingroup l1_meshinfo
     def GetElementGeomType(self, id):
+        """
+        Return the geometric type of mesh element
+
+        Returns:
+            the value from :class:`SMESH.EntityType` enumeration.
+        """
+
         return self.mesh.GetElementGeomType(id)
 
-    ## Return the shape type of mesh element
-    #  @return the value from SMESH::GeometryType enumeration.
-    #          Type SMESH.GeometryType._items in the Python Console to see all possible values.
-    #  @ingroup l1_meshinfo
     def GetElementShape(self, id):
+        """
+        Return the shape type of mesh element
+
+        Returns:
+            the value from :class:`SMESH.GeometryType` enumeration.
+        """
+
         return self.mesh.GetElementShape(id)
 
-    ## Return the list of submesh elements IDs
-    #  @param Shape a geom object(sub-shape)
-    #         Shape must be the sub-shape of a ShapeToMesh()
-    #  @return the list of integer values
-    #  @ingroup l1_meshinfo
     def GetSubMeshElementsId(self, Shape):
+        """
+        Return the list of sub-mesh elements IDs
+
+        Parameters:
+                Shape (GEOM.GEOM_Object): a geom object (sub-shape).
+                       *Shape* must be the sub-shape of the :meth:`main shape <GetShape>`
+
+        Returns:
+            list of integer values
+        """
+
         if isinstance( Shape, geomBuilder.GEOM._objref_GEOM_Object):
             ShapeID = self.geompyD.GetSubShapeID( self.geom, Shape )
         else:
             ShapeID = Shape
         return self.mesh.GetSubMeshElementsId(ShapeID)
 
-    ## Return the list of submesh nodes IDs
-    #  @param Shape a geom object(sub-shape)
-    #         Shape must be the sub-shape of a ShapeToMesh()
-    #  @param all If true, gives all nodes of submesh elements, otherwise gives only submesh nodes
-    #  @return the list of integer values
-    #  @ingroup l1_meshinfo
     def GetSubMeshNodesId(self, Shape, all):
+        """
+        Return the list of sub-mesh nodes IDs
+
+        Parameters:
+                Shape: a geom object (sub-shape).
+                       *Shape* must be the sub-shape of a :meth:`GetShape`
+                all: If True, gives all nodes of sub-mesh elements, otherwise gives only sub-mesh nodes
+
+        Returns:
+            list of integer values
+        """
+
         if isinstance( Shape, geomBuilder.GEOM._objref_GEOM_Object):
             ShapeID = self.geompyD.GetSubShapeID( self.geom, Shape )
         else:
             ShapeID = Shape
         return self.mesh.GetSubMeshNodesId(ShapeID, all)
 
-    ## Return type of elements on given shape
-    #  @param Shape a geom object(sub-shape)
-    #         Shape must be a sub-shape of a ShapeToMesh()
-    #  @return element type
-    #  @ingroup l1_meshinfo
     def GetSubMeshElementType(self, Shape):
+        """
+        Return type of elements on given shape
+
+        Parameters:
+                Shape: a geom object (sub-shape).
+                       *Shape* must be a sub-shape of a ShapeToMesh()
+
+        Returns:
+            :class:`SMESH.ElementType`
+        """
+
         if isinstance( Shape, geomBuilder.GEOM._objref_GEOM_Object):
             ShapeID = self.geompyD.GetSubShapeID( self.geom, Shape )
         else:
             ShapeID = Shape
         return self.mesh.GetSubMeshElementType(ShapeID)
 
-    ## Get the mesh description
-    #  @return string value
-    #  @ingroup l1_meshinfo
     def Dump(self):
+        """
+        Get the mesh description
+
+        Returns:
+            string value
+        """
+
         return self.mesh.Dump()
 
 
     # Get the information about nodes and elements of a mesh by its IDs:
     # -----------------------------------------------------------
 
-    ## Get XYZ coordinates of a node
-    #  \n If there is no nodes for the given ID - return an empty list
-    #  @return a list of double precision values
-    #  @ingroup l1_meshinfo
     def GetNodeXYZ(self, id):
+        """
+        Get XYZ coordinates of a node.
+        If there is no node for the given ID - return an empty list
+
+        Returns:
+            list of float values
+        """
+
         return self.mesh.GetNodeXYZ(id)
 
-    ## Return list of IDs of inverse elements for the given node
-    #  \n If there is no node for the given ID - return an empty list
-    #  @return a list of integer values
-    #  @ingroup l1_meshinfo
     def GetNodeInverseElements(self, id):
+        """
+        Return list of IDs of inverse elements for the given node.
+        If there is no node for the given ID - return an empty list
+
+        Returns:
+            list of integer values
+        """
+
         return self.mesh.GetNodeInverseElements(id)
 
-    ## Return the position of a node on the shape
-    #  @return SMESH::NodePosition
-    #  @ingroup l1_meshinfo
     def GetNodePosition(self,NodeID):
+        """
+        Return the position of a node on the shape
+
+        Returns:
+            :class:`SMESH.NodePosition`
+        """
+
         return self.mesh.GetNodePosition(NodeID)
 
-    ## Return the position of an element on the shape
-    #  @return SMESH::ElementPosition
-    #  @ingroup l1_meshinfo
     def GetElementPosition(self,ElemID):
+        """
+        Return the position of an element on the shape
+
+        Returns:
+            :class:`SMESH.ElementPosition`
+        """
+
         return self.mesh.GetElementPosition(ElemID)
 
-    ## Return the ID of the shape, on which the given node was generated.
-    #  @return an integer value > 0 or -1 if there is no node for the given
-    #          ID or the node is not assigned to any geometry
-    #  @ingroup l1_meshinfo
     def GetShapeID(self, id):
+        """
+        Return the ID of the shape, on which the given node was generated.
+
+        Returns:
+            an integer value > 0 or -1 if there is no node for the given
+            ID or the node is not assigned to any geometry
+        """
+
         return self.mesh.GetShapeID(id)
 
-    ## Return the ID of the shape, on which the given element was generated.
-    #  @return an integer value > 0 or -1 if there is no element for the given
-    #          ID or the element is not assigned to any geometry
-    #  @ingroup l1_meshinfo
     def GetShapeIDForElem(self,id):
+        """
+        Return the ID of the shape, on which the given element was generated.
+
+        Returns:
+            an integer value > 0 or -1 if there is no element for the given
+            ID or the element is not assigned to any geometry
+        """
+
         return self.mesh.GetShapeIDForElem(id)
 
-    ## Return the number of nodes of the given element
-    #  @return an integer value > 0 or -1 if there is no element for the given ID
-    #  @ingroup l1_meshinfo
     def GetElemNbNodes(self, id):
+        """
+        Return the number of nodes of the given element
+
+        Returns:
+            an integer value > 0 or -1 if there is no element for the given ID
+        """
+
         return self.mesh.GetElemNbNodes(id)
 
-    ## Return the node ID the given (zero based) index for the given element
-    #  \n If there is no element for the given ID - return -1
-    #  \n If there is no node for the given index - return -2
-    #  @return an integer value
-    #  @ingroup l1_meshinfo
     def GetElemNode(self, id, index):
+        """
+        Return the node ID the given (zero based) index for the given element.
+
+        * If there is no element for the given ID - return -1.
+        * If there is no node for the given index - return -2.
+
+        Parameters:
+            id (int): element ID
+            index (int): node index within the element
+
+        Returns:
+            an integer value (ID)
+
+        See Also:
+            :meth:`GetElemNodes`
+        """
+
         return self.mesh.GetElemNode(id, index)
 
-    ## Return the IDs of nodes of the given element
-    #  @return a list of integer values
-    #  @ingroup l1_meshinfo
     def GetElemNodes(self, id):
+        """
+        Return the IDs of nodes of the given element
+
+        Returns:
+            a list of integer values
+        """
+
         return self.mesh.GetElemNodes(id)
 
-    ## Return true if the given node is the medium node in the given quadratic element
-    #  @ingroup l1_meshinfo
     def IsMediumNode(self, elementID, nodeID):
+        """
+        Return true if the given node is the medium node in the given quadratic element
+        """
+
         return self.mesh.IsMediumNode(elementID, nodeID)
 
-    ## Return true if the given node is the medium node in one of quadratic elements
-    #  @param nodeID ID of the node
-    #  @param elementType  the type of elements to check a state of the node, either of
-    #         (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE or SMESH.VOLUME)
-    #  @ingroup l1_meshinfo
     def IsMediumNodeOfAnyElem(self, nodeID, elementType = SMESH.ALL ):
+        """
+        Return true if the given node is the medium node in one of quadratic elements
+
+        Parameters:
+                nodeID: ID of the node
+                elementType:  the type of elements to check a state of the node, either of
+                        (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE or SMESH.VOLUME)
+        """
+
         return self.mesh.IsMediumNodeOfAnyElem(nodeID, elementType)
 
-    ## Return the number of edges for the given element
-    #  @ingroup l1_meshinfo
     def ElemNbEdges(self, id):
+        """
+        Return the number of edges for the given element
+        """
+
         return self.mesh.ElemNbEdges(id)
 
-    ## Return the number of faces for the given element
-    #  @ingroup l1_meshinfo
     def ElemNbFaces(self, id):
+        """
+        Return the number of faces for the given element
+        """
+
         return self.mesh.ElemNbFaces(id)
 
-    ## Return nodes of given face (counted from zero) for given volumic element.
-    #  @ingroup l1_meshinfo
     def GetElemFaceNodes(self,elemId, faceIndex):
+        """
+        Return nodes of given face (counted from zero) for given volumic element.
+        """
+
         return self.mesh.GetElemFaceNodes(elemId, faceIndex)
 
-    ## Return three components of normal of given mesh face
-    #  (or an empty array in KO case)
-    #  @ingroup l1_meshinfo
     def GetFaceNormal(self, faceId, normalized=False):
+        """
+        Return three components of normal of given mesh face
+        (or an empty array in KO case)
+        """
+
         return self.mesh.GetFaceNormal(faceId,normalized)
 
-    ## Return an element based on all given nodes.
-    #  @ingroup l1_meshinfo
     def FindElementByNodes(self, nodes):
+        """
+        Return an element based on all given nodes.
+        """
+
         return self.mesh.FindElementByNodes(nodes)
 
-    ## Return elements including all given nodes.
-    #  @ingroup l1_meshinfo
     def GetElementsByNodes(self, nodes, elemType=SMESH.ALL):
+        """
+        Return elements including all given nodes.
+        """
+
         return self.mesh.GetElementsByNodes( nodes, elemType )
 
-    ## Return true if the given element is a polygon
-    #  @ingroup l1_meshinfo
     def IsPoly(self, id):
+        """
+        Return true if the given element is a polygon
+        """
+
         return self.mesh.IsPoly(id)
 
-    ## Return true if the given element is quadratic
-    #  @ingroup l1_meshinfo
     def IsQuadratic(self, id):
+        """
+        Return true if the given element is quadratic
+        """
+
         return self.mesh.IsQuadratic(id)
 
-    ## Return diameter of a ball discrete element or zero in case of an invalid \a id
-    #  @ingroup l1_meshinfo
     def GetBallDiameter(self, id):
+        """
+        Return diameter of a ball discrete element or zero in case of an invalid *id*
+        """
+
         return self.mesh.GetBallDiameter(id)
 
-    ## Return XYZ coordinates of the barycenter of the given element
-    #  \n If there is no element for the given ID - return an empty list
-    #  @return a list of three double values
-    #  @ingroup l1_meshinfo
     def BaryCenter(self, id):
+        """
+        Return XYZ coordinates of the barycenter of the given element.
+        If there is no element for the given ID - return an empty list
+
+        Returns:
+            a list of three double values
+        """
+
         return self.mesh.BaryCenter(id)
 
-    ## Pass mesh elements through the given filter and return IDs of fitting elements
-    #  @param theFilter SMESH_Filter
-    #  @return a list of ids
-    #  @ingroup l1_controls
     def GetIdsFromFilter(self, theFilter):
+        """
+        Pass mesh elements through the given filter and return IDs of fitting elements
+
+        Parameters:
+                theFilter: :class:`SMESH.Filter`
+
+        Returns:
+            a list of ids
+
+        See Also:
+            :meth:`SMESH.Filter.GetIDs`
+        """
+
         theFilter.SetMesh( self.mesh )
         return theFilter.GetIDs()
 
     # Get mesh measurements information:
     # ------------------------------------
 
-    ## Verify whether a 2D mesh element has free edges (edges connected to one face only)\n
-    #  Return a list of special structures (borders).
-    #  @return a list of SMESH.FreeEdges.Border structure: edge id and ids of two its nodes.
-    #  @ingroup l1_measurements
     def GetFreeBorders(self):
+        """
+        Verify whether a 2D mesh element has free edges (edges connected to one face only).
+        Return a list of special structures (borders).
+
+        Returns:
+            a list of :class:`SMESH.FreeEdges.Border`
+        """
+
         aFilterMgr = self.smeshpyD.CreateFilterManager()
         aPredicate = aFilterMgr.CreateFreeEdges()
         aPredicate.SetMesh(self.mesh)
@@ -2857,27 +3643,39 @@ class Mesh(metaclass=MeshMeta):
         aFilterMgr.UnRegister()
         return aBorders
 
-    ## Get minimum distance between two nodes, elements or distance to the origin
-    #  @param id1 first node/element id
-    #  @param id2 second node/element id (if 0, distance from @a id1 to the origin is computed)
-    #  @param isElem1 @c True if @a id1 is element id, @c False if it is node id
-    #  @param isElem2 @c True if @a id2 is element id, @c False if it is node id
-    #  @return minimum distance value
-    #  @sa GetMinDistance()
-    #  @ingroup l1_measurements
     def MinDistance(self, id1, id2=0, isElem1=False, isElem2=False):
+        """
+        Get minimum distance between two nodes, elements or distance to the origin
+
+        Parameters:
+                id1: first node/element id
+                id2: second node/element id (if 0, distance from *id1* to the origin is computed)
+                isElem1: *True* if *id1* is element id, *False* if it is node id
+                isElem2: *True* if *id2* is element id, *False* if it is node id
+
+        Returns:
+            minimum distance value **GetMinDistance()**
+        """
+
         aMeasure = self.GetMinDistance(id1, id2, isElem1, isElem2)
         return aMeasure.value
 
-    ## Get measure structure specifying minimum distance data between two objects
-    #  @param id1 first node/element id
-    #  @param id2 second node/element id (if 0, distance from @a id1 to the origin is computed)
-    #  @param isElem1 @c True if @a id1 is element id, @c False if it is node id
-    #  @param isElem2 @c True if @a id2 is element id, @c False if it is node id
-    #  @return Measure structure
-    #  @sa MinDistance()
-    #  @ingroup l1_measurements
     def GetMinDistance(self, id1, id2=0, isElem1=False, isElem2=False):
+        """
+        Get :class:`SMESH.Measure` structure specifying minimum distance data between two objects
+
+        Parameters:
+                id1: first node/element id
+                id2: second node/element id (if 0, distance from *id1* to the origin is computed)
+                isElem1: *True* if *id1* is element id, *False* if it is node id
+                isElem2: *True* if *id2* is element id, *False* if it is node id
+
+        Returns:
+            :class:`SMESH.Measure` structure
+        See Also:
+            :meth:`MinDistance`
+        """
+
         if isElem1:
             id1 = self.editor.MakeIDSource([id1], SMESH.FACE)
         else:
@@ -2896,14 +3694,22 @@ class Mesh(metaclass=MeshMeta):
         genObjUnRegister([aMeasurements,id1, id2])
         return aMeasure
 
-    ## Get bounding box of the specified object(s)
-    #  @param objects single source object or list of source objects or list of nodes/elements IDs
-    #  @param isElem if @a objects is a list of IDs, @c True value in this parameters specifies that @a objects are elements,
-    #  @c False specifies that @a objects are nodes
-    #  @return tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
-    #  @sa GetBoundingBox()
-    #  @ingroup l1_measurements
     def BoundingBox(self, objects=None, isElem=False):
+        """
+        Get bounding box of the specified object(s)
+
+        Parameters:
+                objects: single :class:`source object <SMESH.SMESH_IDSource>` or list of source objects or list of nodes/elements IDs
+                isElem: if *objects* is a list of IDs, *True* value in this parameters specifies that *objects* are elements,
+                        *False* specifies that *objects* are nodes
+
+        Returns:
+            tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
+
+        See Also: 
+            :meth:`GetBoundingBox()`
+        """
+
         result = self.GetBoundingBox(objects, isElem)
         if result is None:
             result = (0.0,)*6
@@ -2911,25 +3717,33 @@ class Mesh(metaclass=MeshMeta):
             result = (result.minX, result.minY, result.minZ, result.maxX, result.maxY, result.maxZ)
         return result
 
-    ## Get measure structure specifying bounding box data of the specified object(s)
-    #  @param IDs single source object or list of source objects or list of nodes/elements IDs
-    #  @param isElem if @a IDs is a list of IDs, @c True value in this parameters specifies that @a objects are elements,
-    #  @c False specifies that @a objects are nodes
-    #  @return Measure structure
-    #  @sa BoundingBox()
-    #  @ingroup l1_measurements
-    def GetBoundingBox(self, IDs=None, isElem=False):
-        if IDs is None:
-            IDs = [self.mesh]
-        elif isinstance(IDs, tuple):
-            IDs = list(IDs)
-        if not isinstance(IDs, list):
-            IDs = [IDs]
-        if len(IDs) > 0 and isinstance(IDs[0], int):
-            IDs = [IDs]
+    def GetBoundingBox(self, objects=None, isElem=False):
+        """
+        Get :class:`SMESH.Measure` structure specifying bounding box data of the specified object(s)
+
+        Parameters:
+                objects: single :class:`source object <SMESH.SMESH_IDSource>` or list of source objects or list of nodes/elements IDs
+                isElem: if *objects* is a list of IDs, True means that *objects* are elements,
+                        False means that *objects* are nodes
+
+        Returns:
+            :class:`SMESH.Measure` structure
+
+        See Also: 
+            :meth:`BoundingBox()`
+        """
+
+        if objects is None:
+            objects = [self.mesh]
+        elif isinstance(objects, tuple):
+            objects = list(objects)
+        if not isinstance(objects, list):
+            objects = [objects]
+        if len(objects) > 0 and isinstance(objects[0], int):
+            objects = [objects]
         srclist = []
         unRegister = genObjUnRegister()
-        for o in IDs:
+        for o in objects:
             if isinstance(o, Mesh):
                 srclist.append(o.mesh)
             elif hasattr(o, "_narrow"):
@@ -2952,55 +3766,87 @@ class Mesh(metaclass=MeshMeta):
     # Mesh edition (SMESH_MeshEditor functionality):
     # ---------------------------------------------
 
-    ## Remove the elements from the mesh by ids
-    #  @param IDsOfElements is a list of ids of elements to remove
-    #  @return True or False
-    #  @ingroup l2_modif_del
     def RemoveElements(self, IDsOfElements):
+        """
+        Remove the elements from the mesh by ids
+
+        Parameters:
+                IDsOfElements: is a list of ids of elements to remove
+
+        Returns:
+            True or False
+        """
+
         return self.editor.RemoveElements(IDsOfElements)
 
-    ## Remove nodes from mesh by ids
-    #  @param IDsOfNodes is a list of ids of nodes to remove
-    #  @return True or False
-    #  @ingroup l2_modif_del
     def RemoveNodes(self, IDsOfNodes):
+        """
+        Remove nodes from mesh by ids
+
+        Parameters:
+                IDsOfNodes: is a list of ids of nodes to remove
+
+        Returns:
+            True or False
+        """
+
         return self.editor.RemoveNodes(IDsOfNodes)
 
-    ## Remove all orphan (free) nodes from mesh
-    #  @return number of the removed nodes
-    #  @ingroup l2_modif_del
     def RemoveOrphanNodes(self):
+        """
+        Remove all orphan (free) nodes from mesh
+
+        Returns:
+            number of the removed nodes
+        """
+
         return self.editor.RemoveOrphanNodes()
 
-    ## Add a node to the mesh by coordinates
-    #  @return Id of the new node
-    #  @ingroup l2_modif_add
     def AddNode(self, x, y, z):
+        """
+        Add a node to the mesh by coordinates
+
+        Returns:
+            ID of the new node
+        """
+
         x,y,z,Parameters,hasVars = ParseParameters(x,y,z)
         if hasVars: self.mesh.SetParameters(Parameters)
         return self.editor.AddNode( x, y, z)
 
-    ## Create a 0D element on a node with given number.
-    #  @param IDOfNode the ID of node for creation of the element.
-    #  @param DuplicateElements to add one more 0D element to a node or not
-    #  @return the Id of the new 0D element
-    #  @ingroup l2_modif_add
     def Add0DElement( self, IDOfNode, DuplicateElements=True ):
+        """
+        Create a 0D element on a node with given number.
+
+        Parameters:
+                IDOfNode: the ID of node for creation of the element.
+                DuplicateElements: to add one more 0D element to a node or not
+
+        Returns:
+            ID of the new 0D element
+        """
+
         return self.editor.Add0DElement( IDOfNode, DuplicateElements )
 
-    ## Create 0D elements on all nodes of the given elements except those
-    #  nodes on which a 0D element already exists.
-    #  @param theObject an object on whose nodes 0D elements will be created.
-    #         It can be mesh, sub-mesh, group, list of element IDs or a holder
-    #         of nodes IDs created by calling mesh.GetIDSource( nodes, SMESH.NODE )
-    #  @param theGroupName optional name of a group to add 0D elements created
-    #         and/or found on nodes of \a theObject.
-    #  @param DuplicateElements to add one more 0D element to a node or not
-    #  @return an object (a new group or a temporary SMESH_IDSource) holding
-    #          IDs of new and/or found 0D elements. IDs of 0D elements
-    #          can be retrieved from the returned object by calling GetIDs()
-    #  @ingroup l2_modif_add
     def Add0DElementsToAllNodes(self, theObject, theGroupName="", DuplicateElements=False):
+        """
+        Create 0D elements on all nodes of the given elements except those
+        nodes on which a 0D element already exists.
+
+        Parameters:
+                theObject: an object on whose nodes 0D elements will be created.
+                        It can be list of element IDs, :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                theGroupName: optional name of a group to add 0D elements created
+                        and/or found on nodes of *theObject*.
+                DuplicateElements: to add one more 0D element to a node or not
+
+        Returns:
+            an object (a new group or a temporary :class:`SMESH.SMESH_IDSource`) holding
+            IDs of new and/or found 0D elements. IDs of 0D elements
+            can be retrieved from the returned object by 
+            calling :meth:`GetIDs() <SMESH.SMESH_IDSource.GetIDs>`
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( theObject, Mesh ):
             theObject = theObject.GetMesh()
@@ -3009,88 +3855,140 @@ class Mesh(metaclass=MeshMeta):
             unRegister.set( theObject )
         return self.editor.Create0DElementsOnAllNodes( theObject, theGroupName, DuplicateElements )
 
-    ## Create a ball element on a node with given ID.
-    #  @param IDOfNode the ID of node for creation of the element.
-    #  @param diameter the bal diameter.
-    #  @return the Id of the new ball element
-    #  @ingroup l2_modif_add
     def AddBall(self, IDOfNode, diameter):
+        """
+        Create a ball element on a node with given ID.
+
+        Parameters:
+                IDOfNode: the ID of node for creation of the element.
+                diameter: the bal diameter.
+
+        Returns:
+            ID of the new ball element
+        """
+
         return self.editor.AddBall( IDOfNode, diameter )
 
-    ## Create a linear or quadratic edge (this is determined
-    #  by the number of given nodes).
-    #  @param IDsOfNodes the list of node IDs for creation of the element.
-    #  The order of nodes in this list should correspond to the description
-    #  of MED. \n This description is located by the following link:
-    #  http://www.code-aster.org/outils/med/html/modele_de_donnees.html#3.
-    #  @return the Id of the new edge
-    #  @ingroup l2_modif_add
     def AddEdge(self, IDsOfNodes):
+        """
+        Create a linear or quadratic edge (this is determined
+        by the number of given nodes).
+
+        Parameters:
+                IDsOfNodes: list of node IDs for creation of the element.
+                        The order of nodes in this list should correspond to
+                        the :ref:`connectivity convention <connectivity_page>`.
+
+        Returns:
+            ID of the new edge
+        """
+
         return self.editor.AddEdge(IDsOfNodes)
 
-    ## Create a linear or quadratic face (this is determined
-    #  by the number of given nodes).
-    #  @param IDsOfNodes the list of node IDs for creation of the element.
-    #  The order of nodes in this list should correspond to the description
-    #  of MED. \n This description is located by the following link:
-    #  http://www.code-aster.org/outils/med/html/modele_de_donnees.html#3.
-    #  @return the Id of the new face
-    #  @ingroup l2_modif_add
     def AddFace(self, IDsOfNodes):
+        """
+        Create a linear or quadratic face (this is determined
+        by the number of given nodes).
+
+        Parameters:
+                IDsOfNodes: list of node IDs for creation of the element.
+                        The order of nodes in this list should correspond to
+                        the :ref:`connectivity convention <connectivity_page>`.
+
+        Returns:
+            ID of the new face
+        """
+
         return self.editor.AddFace(IDsOfNodes)
 
-    ## Add a polygonal face to the mesh by the list of node IDs
-    #  @param IdsOfNodes the list of node IDs for creation of the element.
-    #  @return the Id of the new face
-    #  @ingroup l2_modif_add
     def AddPolygonalFace(self, IdsOfNodes):
+        """
+        Add a polygonal face defined by a list of node IDs
+
+        Parameters:
+                IdsOfNodes: the list of node IDs for creation of the element.
+
+        Returns:
+            ID of the new face
+        """
+
         return self.editor.AddPolygonalFace(IdsOfNodes)
 
-    ## Add a quadratic polygonal face to the mesh by the list of node IDs
-    #  @param IdsOfNodes the list of node IDs for creation of the element;
-    #         corner nodes follow first.
-    #  @return the Id of the new face
-    #  @ingroup l2_modif_add
     def AddQuadPolygonalFace(self, IdsOfNodes):
+        """
+        Add a quadratic polygonal face defined by a list of node IDs
+
+        Parameters:
+                IdsOfNodes: the list of node IDs for creation of the element;
+                        corner nodes follow first.
+
+        Returns:
+            ID of the new face
+        """
+
         return self.editor.AddQuadPolygonalFace(IdsOfNodes)
 
-    ## Create both simple and quadratic volume (this is determined
-    #  by the number of given nodes).
-    #  @param IDsOfNodes the list of node IDs for creation of the element.
-    #  The order of nodes in this list should correspond to the description
-    #  of MED. \n This description is located by the following link:
-    #  http://www.code-aster.org/outils/med/html/modele_de_donnees.html#3.
-    #  @return the Id of the new volumic element
-    #  @ingroup l2_modif_add
     def AddVolume(self, IDsOfNodes):
+        """
+        Create both simple and quadratic volume (this is determined
+        by the number of given nodes).
+
+        Parameters:
+                IDsOfNodes: list of node IDs for creation of the element.
+                        The order of nodes in this list should correspond to
+                        the :ref:`connectivity convention <connectivity_page>`.
+
+        Returns:
+            ID of the new volumic element
+        """
+
         return self.editor.AddVolume(IDsOfNodes)
 
-    ## Create a volume of many faces, giving nodes for each face.
-    #  @param IdsOfNodes the list of node IDs for volume creation face by face.
-    #  @param Quantities the list of integer values, Quantities[i]
-    #         gives the quantity of nodes in face number i.
-    #  @return the Id of the new volumic element
-    #  @ingroup l2_modif_add
     def AddPolyhedralVolume (self, IdsOfNodes, Quantities):
+        """
+        Create a volume of many faces, giving nodes for each face.
+
+        Parameters:
+                IdsOfNodes: list of node IDs for volume creation, face by face.
+                Quantities: list of integer values, Quantities[i]
+                        gives the quantity of nodes in face number i.
+
+        Returns:
+            ID of the new volumic element
+        """
+
         return self.editor.AddPolyhedralVolume(IdsOfNodes, Quantities)
 
-    ## Create a volume of many faces, giving the IDs of the existing faces.
-    #  @param IdsOfFaces the list of face IDs for volume creation.
-    #
-    #  Note:  The created volume will refer only to the nodes
-    #         of the given faces, not to the faces themselves.
-    #  @return the Id of the new volumic element
-    #  @ingroup l2_modif_add
     def AddPolyhedralVolumeByFaces (self, IdsOfFaces):
+        """
+        Create a volume of many faces, giving the IDs of the existing faces.
+
+        Note:
+                The created volume will refer only to the nodes
+                of the given faces, not to the faces themselves.
+
+        Parameters:
+                IdsOfFaces: the list of face IDs for volume creation.
+
+        Returns:
+            ID of the new volumic element
+        """
+
         return self.editor.AddPolyhedralVolumeByFaces(IdsOfFaces)
 
 
-    ## @brief Binds a node to a vertex
-    #  @param NodeID a node ID
-    #  @param Vertex a vertex or vertex ID
-    #  @return True if succeed else raises an exception
-    #  @ingroup l2_modif_add
     def SetNodeOnVertex(self, NodeID, Vertex):
+        """
+        Binds a node to a vertex
+
+        Parameters:
+                NodeID: a node ID
+                Vertex: a vertex (GEOM.GEOM_Object) or vertex ID
+
+        Returns:
+            True if succeed else raises an exception
+        """
+
         if ( isinstance( Vertex, geomBuilder.GEOM._objref_GEOM_Object)):
             VertexID = self.geompyD.GetSubShapeID( self.geom, Vertex )
         else:
@@ -3102,13 +4000,19 @@ class Mesh(metaclass=MeshMeta):
         return True
 
 
-    ## @brief Stores the node position on an edge
-    #  @param NodeID a node ID
-    #  @param Edge an edge or edge ID
-    #  @param paramOnEdge a parameter on the edge where the node is located
-    #  @return True if succeed else raises an exception
-    #  @ingroup l2_modif_add
     def SetNodeOnEdge(self, NodeID, Edge, paramOnEdge):
+        """
+        Stores the node position on an edge
+
+        Parameters:
+                NodeID: a node ID
+                Edge: an edge (GEOM.GEOM_Object) or edge ID
+                paramOnEdge: a parameter on the edge where the node is located
+
+        Returns:
+            True if succeed else raises an exception
+        """
+
         if ( isinstance( Edge, geomBuilder.GEOM._objref_GEOM_Object)):
             EdgeID = self.geompyD.GetSubShapeID( self.geom, Edge )
         else:
@@ -3119,14 +4023,20 @@ class Mesh(metaclass=MeshMeta):
             raise ValueError(inst.details.text)
         return True
 
-    ## @brief Stores node position on a face
-    #  @param NodeID a node ID
-    #  @param Face a face or face ID
-    #  @param u U parameter on the face where the node is located
-    #  @param v V parameter on the face where the node is located
-    #  @return True if succeed else raises an exception
-    #  @ingroup l2_modif_add
     def SetNodeOnFace(self, NodeID, Face, u, v):
+        """
+        Stores node position on a face
+
+        Parameters:
+                NodeID: a node ID
+                Face: a face (GEOM.GEOM_Object) or face ID
+                u: U parameter on the face where the node is located
+                v: V parameter on the face where the node is located
+
+        Returns:
+            True if succeed else raises an exception
+        """
+
         if ( isinstance( Face, geomBuilder.GEOM._objref_GEOM_Object)):
             FaceID = self.geompyD.GetSubShapeID( self.geom, Face )
         else:
@@ -3137,12 +4047,18 @@ class Mesh(metaclass=MeshMeta):
             raise ValueError(inst.details.text)
         return True
 
-    ## @brief Binds a node to a solid
-    #  @param NodeID a node ID
-    #  @param Solid  a solid or solid ID
-    #  @return True if succeed else raises an exception
-    #  @ingroup l2_modif_add
     def SetNodeInVolume(self, NodeID, Solid):
+        """
+        Binds a node to a solid
+
+        Parameters:
+                NodeID: a node ID
+                Solid:  a solid (GEOM.GEOM_Object) or solid ID
+
+        Returns:
+            True if succeed else raises an exception
+        """
+
         if ( isinstance( Solid, geomBuilder.GEOM._objref_GEOM_Object)):
             SolidID = self.geompyD.GetSubShapeID( self.geom, Solid )
         else:
@@ -3153,12 +4069,18 @@ class Mesh(metaclass=MeshMeta):
             raise ValueError(inst.details.text)
         return True
 
-    ## @brief Bind an element to a shape
-    #  @param ElementID an element ID
-    #  @param Shape a shape or shape ID
-    #  @return True if succeed else raises an exception
-    #  @ingroup l2_modif_add
     def SetMeshElementOnShape(self, ElementID, Shape):
+        """
+        Bind an element to a shape
+
+        Parameters:
+                ElementID: an element ID
+                Shape: a shape (GEOM.GEOM_Object) or shape ID
+
+        Returns:
+            True if succeed else raises an exception
+        """
+
         if ( isinstance( Shape, geomBuilder.GEOM._objref_GEOM_Object)):
             ShapeID = self.geompyD.GetSubShapeID( self.geom, Shape )
         else:
@@ -3170,131 +4092,192 @@ class Mesh(metaclass=MeshMeta):
         return True
 
 
-    ## Move the node with the given id
-    #  @param NodeID the id of the node
-    #  @param x  a new X coordinate
-    #  @param y  a new Y coordinate
-    #  @param z  a new Z coordinate
-    #  @return True if succeed else False
-    #  @ingroup l2_modif_edit
     def MoveNode(self, NodeID, x, y, z):
+        """
+        Move the node with the given id
+
+        Parameters:
+                NodeID: the id of the node
+                x:  a new X coordinate
+                y:  a new Y coordinate
+                z:  a new Z coordinate
+
+        Returns:
+            True if succeed else False
+        """
+
         x,y,z,Parameters,hasVars = ParseParameters(x,y,z)
         if hasVars: self.mesh.SetParameters(Parameters)
         return self.editor.MoveNode(NodeID, x, y, z)
 
-    ## Find the node closest to a point and moves it to a point location
-    #  @param x  the X coordinate of a point
-    #  @param y  the Y coordinate of a point
-    #  @param z  the Z coordinate of a point
-    #  @param NodeID if specified (>0), the node with this ID is moved,
-    #  otherwise, the node closest to point (@a x,@a y,@a z) is moved
-    #  @return the ID of a node
-    #  @ingroup l2_modif_edit
-    def MoveClosestNodeToPoint(self, x, y, z, NodeID):
+    def MoveClosestNodeToPoint(self, x, y, z, NodeID):
+        """
+        Find the node closest to a point and moves it to a point location
+
+        Parameters:
+                x:  the X coordinate of a point
+                y:  the Y coordinate of a point
+                z:  the Z coordinate of a point
+                NodeID: if specified (>0), the node with this ID is moved,
+                        otherwise, the node closest to point (*x*, *y*, *z*) is moved
+
+        Returns:
+            the ID of a moved node
+        """
+
         x,y,z,Parameters,hasVars = ParseParameters(x,y,z)
         if hasVars: self.mesh.SetParameters(Parameters)
         return self.editor.MoveClosestNodeToPoint(x, y, z, NodeID)
 
-    ## Find the node closest to a point
-    #  @param x  the X coordinate of a point
-    #  @param y  the Y coordinate of a point
-    #  @param z  the Z coordinate of a point
-    #  @return the ID of a node
-    #  @ingroup l1_meshinfo
     def FindNodeClosestTo(self, x, y, z):
+        """
+        Find the node closest to a point
+
+        Parameters:
+                x:  the X coordinate of a point
+                y:  the Y coordinate of a point
+                z:  the Z coordinate of a point
+
+        Returns:
+            the ID of a node
+        """
+
         #preview = self.mesh.GetMeshEditPreviewer()
         #return preview.MoveClosestNodeToPoint(x, y, z, -1)
         return self.editor.FindNodeClosestTo(x, y, z)
 
-    ## Find the elements where a point lays IN or ON
-    #  @param x  the X coordinate of a point
-    #  @param y  the Y coordinate of a point
-    #  @param z  the Z coordinate of a point
-    #  @param elementType type of elements to find; either of
-    #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME); SMESH.ALL type
-    #         means elements of any type excluding nodes, discrete and 0D elements.
-    #  @param meshPart a part of mesh (group, sub-mesh) to search within
-    #  @return list of IDs of found elements
-    #  @ingroup l1_meshinfo
     def FindElementsByPoint(self, x, y, z, elementType = SMESH.ALL, meshPart=None):
+        """
+        Find the elements where a point lays IN or ON
+
+        Parameters:
+                x,y,z (float): coordinates of the point
+                elementType (SMESH.ElementType): type of elements to find; SMESH.ALL type
+                        means elements of any type excluding nodes, discrete and 0D elements.
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to search within
+
+        Returns:
+            list of IDs of found elements
+        """
         if meshPart:
             return self.editor.FindAmongElementsByPoint( meshPart, x, y, z, elementType );
         else:
             return self.editor.FindElementsByPoint(x, y, z, elementType)
 
-    ## Return point state in a closed 2D mesh in terms of TopAbs_State enumeration:
-    #  0-IN, 1-OUT, 2-ON, 3-UNKNOWN
-    #  UNKNOWN state means that either mesh is wrong or the analysis fails.
-    #  @ingroup l1_meshinfo
     def GetPointState(self, x, y, z):
+        """
+        Return point state in a closed 2D mesh in terms of TopAbs_State enumeration:
+        0-IN, 1-OUT, 2-ON, 3-UNKNOWN.
+        UNKNOWN state means that either mesh is wrong or the analysis fails.
+        """
+
         return self.editor.GetPointState(x, y, z)
 
-    ## Check if a 2D mesh is manifold
-    #  @ingroup l1_controls
     def IsManifold(self):
+        """
+        Check if a 2D mesh is manifold
+        """
+
         return self.editor.IsManifold()
 
-    ## Check if orientation of 2D elements is coherent
-    #  @ingroup l1_controls
     def IsCoherentOrientation2D(self):
+        """
+        Check if orientation of 2D elements is coherent
+        """
+
         return self.editor.IsCoherentOrientation2D()
 
-    ## Find the node closest to a point and moves it to a point location
-    #  @param x  the X coordinate of a point
-    #  @param y  the Y coordinate of a point
-    #  @param z  the Z coordinate of a point
-    #  @return the ID of a moved node
-    #  @ingroup l2_modif_edit
     def MeshToPassThroughAPoint(self, x, y, z):
+        """
+        Find the node closest to a point and moves it to a point location
+
+        Parameters:
+                x:  the X coordinate of a point
+                y:  the Y coordinate of a point
+                z:  the Z coordinate of a point
+
+        Returns:
+            the ID of a moved node
+        """
+
         return self.editor.MoveClosestNodeToPoint(x, y, z, -1)
 
-    ## Replace two neighbour triangles sharing Node1-Node2 link
-    #  with the triangles built on the same 4 nodes but having other common link.
-    #  @param NodeID1  the ID of the first node
-    #  @param NodeID2  the ID of the second node
-    #  @return false if proper faces were not found
-    #  @ingroup l2_modif_cutquadr
     def InverseDiag(self, NodeID1, NodeID2):
+        """
+        Replace two neighbour triangles sharing Node1-Node2 link
+        with the triangles built on the same 4 nodes but having other common link.
+
+        Parameters:
+                NodeID1:  the ID of the first node
+                NodeID2:  the ID of the second node
+
+        Returns:
+            False if proper faces were not found
+        """
         return self.editor.InverseDiag(NodeID1, NodeID2)
 
-    ## Replace two neighbour triangles sharing Node1-Node2 link
-    #  with a quadrangle built on the same 4 nodes.
-    #  @param NodeID1  the ID of the first node
-    #  @param NodeID2  the ID of the second node
-    #  @return false if proper faces were not found
-    #  @ingroup l2_modif_unitetri
     def DeleteDiag(self, NodeID1, NodeID2):
+        """
+        Replace two neighbour triangles sharing *Node1-Node2* link
+        with a quadrangle built on the same 4 nodes.
+
+        Parameters:
+                NodeID1: ID of the first node
+                NodeID2: ID of the second node
+
+        Returns:
+            False if proper faces were not found
+        """
+
         return self.editor.DeleteDiag(NodeID1, NodeID2)
 
-    ## Reorient elements by ids
-    #  @param IDsOfElements if undefined reorients all mesh elements
-    #  @return True if succeed else False
-    #  @ingroup l2_modif_changori
     def Reorient(self, IDsOfElements=None):
+        """
+        Reorient elements by ids
+
+        Parameters:
+                IDsOfElements: if undefined reorients all mesh elements
+
+        Returns:
+            True if succeed else False
+        """
+
         if IDsOfElements == None:
             IDsOfElements = self.GetElementsId()
         return self.editor.Reorient(IDsOfElements)
 
-    ## Reorient all elements of the object
-    #  @param theObject mesh, submesh or group
-    #  @return True if succeed else False
-    #  @ingroup l2_modif_changori
     def ReorientObject(self, theObject):
+        """
+        Reorient all elements of the object
+
+        Parameters:
+                theObject: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+            True if succeed else False
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         return self.editor.ReorientObject(theObject)
 
-    ## Reorient faces contained in \a the2DObject.
-    #  @param the2DObject is a mesh, sub-mesh, group or list of IDs of 2D elements
-    #  @param theDirection is a desired direction of normal of \a theFace.
-    #         It can be either a GEOM vector or a list of coordinates [x,y,z].
-    #  @param theFaceOrPoint defines a face of \a the2DObject whose normal will be
-    #         compared with theDirection. It can be either ID of face or a point
-    #         by which the face will be found. The point can be given as either
-    #         a GEOM vertex or a list of point coordinates.
-    #  @return number of reoriented faces
-    #  @ingroup l2_modif_changori
     def Reorient2D(self, the2DObject, theDirection, theFaceOrPoint ):
+        """
+        Reorient faces contained in *the2DObject*.
+
+        Parameters:
+                the2DObject: is a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>` or list of IDs of 2D elements
+                theDirection: is a desired direction of normal of *theFace*.
+                        It can be either a GEOM vector or a list of coordinates [x,y,z].
+                theFaceOrPoint: defines a face of *the2DObject* whose normal will be
+                        compared with theDirection. It can be either ID of face or a point
+                        by which the face will be found. The point can be given as either
+                        a GEOM vertex or a list of point coordinates.
+
+        Returns:
+            number of reoriented faces
+        """
+
         unRegister = genObjUnRegister()
         # check the2DObject
         if isinstance( the2DObject, Mesh ):
@@ -3321,15 +4304,21 @@ class Mesh(metaclass=MeshMeta):
             theFace = -1
         return self.editor.Reorient2D( the2DObject, theDirection, theFace, thePoint )
 
-    ## Reorient faces according to adjacent volumes.
-    #  @param the2DObject is a mesh, sub-mesh, group or list of
-    #         either IDs of faces or face groups.
-    #  @param the3DObject is a mesh, sub-mesh, group or list of IDs of volumes.
-    #  @param theOutsideNormal to orient faces to have their normals
-    #         pointing either \a outside or \a inside the adjacent volumes.
-    #  @return number of reoriented faces.
-    #  @ingroup l2_modif_changori
     def Reorient2DBy3D(self, the2DObject, the3DObject, theOutsideNormal=True ):
+        """
+        Reorient faces according to adjacent volumes.
+
+        Parameters:
+                the2DObject: is a :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` or list of
+                        either IDs of faces or face groups.
+                the3DObject: is a :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` or list of IDs of volumes.
+                theOutsideNormal: to orient faces to have their normals
+                        pointing either *outside* or *inside* the adjacent volumes.
+
+        Returns:
+            number of reoriented faces.
+        """
+
         unRegister = genObjUnRegister()
         # check the2DObject
         if not isinstance( the2DObject, list ):
@@ -3352,18 +4341,24 @@ class Mesh(metaclass=MeshMeta):
             unRegister.set( the3DObject )
         return self.editor.Reorient2DBy3D( the2DObject, the3DObject, theOutsideNormal )
 
-    ## Fuse the neighbouring triangles into quadrangles.
-    #  @param IDsOfElements The triangles to be fused.
-    #  @param theCriterion  a numerical functor, in terms of enum SMESH.FunctorType, used to
-    #          applied to possible quadrangles to choose a neighbour to fuse with.
-    #          Type SMESH.FunctorType._items in the Python Console to see all items.
-    #          Note that not all items correspond to numerical functors.
-    #  @param MaxAngle      is the maximum angle between element normals at which the fusion
-    #          is still performed; theMaxAngle is measured in radians.
-    #          Also it could be a name of variable which defines angle in degrees.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_unitetri
     def TriToQuad(self, IDsOfElements, theCriterion, MaxAngle):
+        """
+        Fuse the neighbouring triangles into quadrangles.
+
+        Parameters:
+                IDsOfElements: The triangles to be fused.
+                theCriterion:  a numerical functor, in terms of enum :class:`SMESH.FunctorType`, used to
+                        applied to possible quadrangles to choose a neighbour to fuse with.
+                        Note that not all items of :class:`SMESH.FunctorType` corresponds
+                        to numerical functors.
+                MaxAngle: is the maximum angle between element normals at which the fusion
+                        is still performed; theMaxAngle is measured in radians.
+                        Also it could be a name of variable which defines angle in degrees.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         MaxAngle,Parameters,hasVars = ParseAngles(MaxAngle)
         self.mesh.SetParameters(Parameters)
         if not IDsOfElements:
@@ -3371,17 +4366,23 @@ class Mesh(metaclass=MeshMeta):
         Functor = self.smeshpyD.GetFunctor(theCriterion)
         return self.editor.TriToQuad(IDsOfElements, Functor, MaxAngle)
 
-    ## Fuse the neighbouring triangles of the object into quadrangles
-    #  @param theObject is mesh, submesh or group
-    #  @param theCriterion is a numerical functor, in terms of enum SMESH.FunctorType,
-    #          applied to possible quadrangles to choose a neighbour to fuse with.
-    #          Type SMESH.FunctorType._items in the Python Console to see all items.
-    #          Note that not all items correspond to numerical functors.
-    #  @param MaxAngle   a max angle between element normals at which the fusion
-    #          is still performed; theMaxAngle is measured in radians.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_unitetri
     def TriToQuadObject (self, theObject, theCriterion, MaxAngle):
+        """
+        Fuse the neighbouring triangles of the object into quadrangles
+
+        Parameters:
+                theObject: is :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                theCriterion: is a numerical functor, in terms of enum :class:`SMESH.FunctorType`,
+                        applied to possible quadrangles to choose a neighbour to fuse with.
+                        Note that not all items of :class:`SMESH.FunctorType` corresponds
+                        to numerical functors.
+                MaxAngle: a max angle between element normals at which the fusion
+                        is still performed; theMaxAngle is measured in radians.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         MaxAngle,Parameters,hasVars = ParseAngles(MaxAngle)
         self.mesh.SetParameters(Parameters)
         if isinstance( theObject, Mesh ):
@@ -3389,16 +4390,21 @@ class Mesh(metaclass=MeshMeta):
         Functor = self.smeshpyD.GetFunctor(theCriterion)
         return self.editor.TriToQuadObject(theObject, Functor, MaxAngle)
 
-    ## Split quadrangles into triangles.
-    #  @param IDsOfElements the faces to be split.
-    #  @param theCriterion is a numerical functor, in terms of enum SMESH.FunctorType, used to
-    #         choose a diagonal for splitting. If @a theCriterion is None, which is a default
-    #         value, then quadrangles will be split by the smallest diagonal.
-    #         Type SMESH.FunctorType._items in the Python Console to see all items.
-    #         Note that not all items correspond to numerical functors.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def QuadToTri (self, IDsOfElements, theCriterion = None):
+        """
+        Split quadrangles into triangles.
+
+        Parameters:
+                IDsOfElements: the faces to be splitted.
+                theCriterion: is a numerical functor, in terms of enum :class:`SMESH.FunctorType`, used to
+                        choose a diagonal for splitting. If *theCriterion* is None, which is a default
+                        value, then quadrangles will be split by the smallest diagonal.
+                        Note that not all items of :class:`SMESH.FunctorType` corresponds
+                        to numerical functors.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if theCriterion is None:
@@ -3406,17 +4412,22 @@ class Mesh(metaclass=MeshMeta):
         Functor = self.smeshpyD.GetFunctor(theCriterion)
         return self.editor.QuadToTri(IDsOfElements, Functor)
 
-    ## Split quadrangles into triangles.
-    #  @param theObject the object from which the list of elements is taken,
-    #         this is mesh, submesh or group
-    #  @param theCriterion is a numerical functor, in terms of enum SMESH.FunctorType, used to
-    #         choose a diagonal for splitting. If @a theCriterion is None, which is a default
-    #         value, then quadrangles will be split by the smallest diagonal.
-    #         Type SMESH.FunctorType._items in the Python Console to see all items.
-    #         Note that not all items correspond to numerical functors.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def QuadToTriObject (self, theObject, theCriterion = None):
+        """
+        Split quadrangles into triangles.
+
+        Parameters:
+                theObject: the object from which the list of elements is taken,
+                        this is :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                theCriterion: is a numerical functor, in terms of enum :class:`SMESH.FunctorType`, used to
+                        choose a diagonal for splitting. If *theCriterion* is None, which is a default
+                        value, then quadrangles will be split by the smallest diagonal.
+                        Note that not all items of :class:`SMESH.FunctorType` corresponds
+                        to numerical functors.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         if theCriterion is None:
@@ -3424,12 +4435,16 @@ class Mesh(metaclass=MeshMeta):
         Functor = self.smeshpyD.GetFunctor(theCriterion)
         return self.editor.QuadToTriObject(theObject, Functor)
 
-    ## Split each of given quadrangles into 4 triangles. A node is added at the center of
-    #  a quadrangle.
-    #  @param theElements the faces to be split. This can be either mesh, sub-mesh,
-    #         group or a list of face IDs. By default all quadrangles are split
-    #  @ingroup l2_modif_cutquadr
     def QuadTo4Tri (self, theElements=[]):
+        """
+        Split each of given quadrangles into 4 triangles. A node is added at the center of
+        a quadrangle.
+
+        Parameters:
+                theElements: the faces to be splitted. This can be either 
+                        :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>`
+                        or a list of face IDs. By default all quadrangles are split
+        """
         unRegister = genObjUnRegister()
         if isinstance( theElements, Mesh ):
             theElements = theElements.mesh
@@ -3440,46 +4455,65 @@ class Mesh(metaclass=MeshMeta):
             unRegister.set( theElements )
         return self.editor.QuadTo4Tri( theElements )
 
-    ## Split quadrangles into triangles.
-    #  @param IDsOfElements the faces to be split
-    #  @param Diag13        is used to choose a diagonal for splitting.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def SplitQuad (self, IDsOfElements, Diag13):
+        """
+        Split quadrangles into triangles.
+
+        Parameters:
+                IDsOfElements: the faces to be splitted
+                Diag13:        is used to choose a diagonal for splitting.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         return self.editor.SplitQuad(IDsOfElements, Diag13)
 
-    ## Split quadrangles into triangles.
-    #  @param theObject the object from which the list of elements is taken,
-    #         this is mesh, submesh or group
-    #  @param Diag13    is used to choose a diagonal for splitting.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def SplitQuadObject (self, theObject, Diag13):
+        """
+        Split quadrangles into triangles.
+
+        Parameters:
+                theObject: the object from which the list of elements is taken,
+                        this is :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                Diag13:    is used to choose a diagonal for splitting.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         return self.editor.SplitQuadObject(theObject, Diag13)
 
-    ## Find a better splitting of the given quadrangle.
-    #  @param IDOfQuad   the ID of the quadrangle to be split.
-    #  @param theCriterion  is a numerical functor, in terms of enum SMESH.FunctorType, used to
-    #         choose a diagonal for splitting.
-    #         Type SMESH.FunctorType._items in the Python Console to see all items.
-    #         Note that not all items correspond to numerical functors.
-    #  @return 1 if 1-3 diagonal is better, 2 if 2-4
-    #          diagonal is better, 0 if error occurs.
-    #  @ingroup l2_modif_cutquadr
     def BestSplit (self, IDOfQuad, theCriterion):
+        """
+        Find a better splitting of the given quadrangle.
+
+        Parameters:
+                IDOfQuad:   the ID of the quadrangle to be splitted.
+                theCriterion:  is a numerical functor, in terms of enum :class:`SMESH.FunctorType`, used to
+                        choose a diagonal for splitting.
+                        Note that not all items of :class:`SMESH.FunctorType` corresponds
+                        to numerical functors.
+
+        Returns:
+            * 1 if 1-3 diagonal is better, 
+            * 2 if 2-4 diagonal is better, 
+            * 0 if error occurs.
+        """
         return self.editor.BestSplit(IDOfQuad, self.smeshpyD.GetFunctor(theCriterion))
 
-    ## Split volumic elements into tetrahedrons
-    #  @param elems either a list of elements or a mesh or a group or a submesh or a filter
-    #  @param method  flags passing splitting method:
-    #         smesh.Hex_5Tet, smesh.Hex_6Tet, smesh.Hex_24Tet.
-    #         smesh.Hex_5Tet - to split the hexahedron into 5 tetrahedrons, etc.
-    #  @ingroup l2_modif_cutquadr
     def SplitVolumesIntoTetra(self, elems, method=smeshBuilder.Hex_5Tet ):
+        """
+        Split volumic elements into tetrahedrons
+
+        Parameters:
+                elems: either a list of elements or a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                method:  flags passing splitting method:
+                        smesh.Hex_5Tet, smesh.Hex_6Tet, smesh.Hex_24Tet.
+                        smesh.Hex_5Tet - to split the hexahedron into 5 tetrahedrons, etc.
+        """
         unRegister = genObjUnRegister()
         if isinstance( elems, Mesh ):
             elems = elems.GetMesh()
@@ -3489,16 +4523,21 @@ class Mesh(metaclass=MeshMeta):
         self.editor.SplitVolumesIntoTetra(elems, method)
         return
 
-    ## Split bi-quadratic elements into linear ones without creation of additional nodes:
-    #   - bi-quadratic triangle will be split into 3 linear quadrangles;
-    #   - bi-quadratic quadrangle will be split into 4 linear quadrangles;
-    #   - tri-quadratic hexahedron will be split into 8 linear hexahedra.
-    #   Quadratic elements of lower dimension  adjacent to the split bi-quadratic element
-    #   will be split in order to keep the mesh conformal.
-    #  @param elems - elements to split: sub-meshes, groups, filters or element IDs;
-    #         if None (default), all bi-quadratic elements will be split
-    #  @ingroup l2_modif_cutquadr
     def SplitBiQuadraticIntoLinear(self, elems=None):
+        """
+        Split bi-quadratic elements into linear ones without creation of additional nodes:
+
+            - bi-quadratic triangle will be split into 3 linear quadrangles;
+            - bi-quadratic quadrangle will be split into 4 linear quadrangles;
+            - tri-quadratic hexahedron will be split into 8 linear hexahedra.
+
+        Quadratic elements of lower dimension  adjacent to the split bi-quadratic element
+        will be split in order to keep the mesh conformal.
+
+        Parameters:
+            elems: elements to split\: :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` or element IDs;
+                if None (default), all bi-quadratic elements will be split
+        """
         unRegister = genObjUnRegister()
         if elems and isinstance( elems, list ) and isinstance( elems[0], int ):
             elems = self.editor.MakeIDSource(elems, SMESH.ALL)
@@ -3511,22 +4550,25 @@ class Mesh(metaclass=MeshMeta):
             elems = [elems]
         self.editor.SplitBiQuadraticIntoLinear( elems )
 
-    ## Split hexahedra into prisms
-    #  @param elems either a list of elements or a mesh or a group or a submesh or a filter
-    #  @param startHexPoint a point used to find a hexahedron for which @a facetNormal
-    #         gives a normal vector defining facets to split into triangles.
-    #         @a startHexPoint can be either a triple of coordinates or a vertex.
-    #  @param facetNormal a normal to a facet to split into triangles of a
-    #         hexahedron found by @a startHexPoint.
-    #         @a facetNormal can be either a triple of coordinates or an edge.
-    #  @param method  flags passing splitting method: smesh.Hex_2Prisms, smesh.Hex_4Prisms.
-    #         smesh.Hex_2Prisms - to split the hexahedron into 2 prisms, etc.
-    #  @param allDomains if @c False, only hexahedra adjacent to one closest
-    #         to @a startHexPoint are split, else @a startHexPoint
-    #         is used to find the facet to split in all domains present in @a elems.
-    #  @ingroup l2_modif_cutquadr
     def SplitHexahedraIntoPrisms(self, elems, startHexPoint, facetNormal,
                                  method=smeshBuilder.Hex_2Prisms, allDomains=False ):
+        """
+        Split hexahedra into prisms
+
+        Parameters:
+                elems: either a list of elements or a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                startHexPoint: a point used to find a hexahedron for which *facetNormal*
+                        gives a normal vector defining facets to split into triangles.
+                        *startHexPoint* can be either a triple of coordinates or a vertex.
+                facetNormal: a normal to a facet to split into triangles of a
+                        hexahedron found by *startHexPoint*.
+                        *facetNormal* can be either a triple of coordinates or an edge.
+                method:  flags passing splitting method: smesh.Hex_2Prisms, smesh.Hex_4Prisms.
+                        smesh.Hex_2Prisms - to split the hexahedron into 2 prisms, etc.
+                allDomains: if :code:`False`, only hexahedra adjacent to one closest
+                        to *startHexPoint* are split, else *startHexPoint*
+                        is used to find the facet to split in all domains present in *elems*.
+        """
         # IDSource
         unRegister = genObjUnRegister()
         if isinstance( elems, Mesh ):
@@ -3552,10 +4594,10 @@ class Mesh(metaclass=MeshMeta):
 
         self.editor.SplitHexahedraIntoPrisms(elems, startHexPoint, facetNormal, method, allDomains)
 
-    ## Split quadrangle faces near triangular facets of volumes
-    #
-    #  @ingroup l2_modif_cutquadr
     def SplitQuadsNearTriangularFacets(self):
+        """
+        Split quadrangle faces near triangular facets of volumes
+        """
         faces_array = self.GetElementsByType(SMESH.FACE)
         for face_id in faces_array:
             if self.GetElemNbNodes(face_id) == 4: # quadrangle
@@ -3582,31 +4624,38 @@ class Mesh(metaclass=MeshMeta):
                                         isVolumeFound = True
                                         self.SplitQuad([face_id], True) # diagonal 1-3
 
-    ## @brief Splits hexahedrons into tetrahedrons.
-    #
-    #  This operation uses pattern mapping functionality for splitting.
-    #  @param theObject the object from which the list of hexahedrons is taken; this is mesh, submesh or group.
-    #  @param theNode000,theNode001 within the range [0,7]; gives the orientation of the
-    #         pattern relatively each hexahedron: the (0,0,0) key-point of the pattern
-    #         will be mapped into <VAR>theNode000</VAR>-th node of each volume, the (0,0,1)
-    #         key-point will be mapped into <VAR>theNode001</VAR>-th node of each volume.
-    #         The (0,0,0) key-point of the used pattern corresponds to a non-split corner.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def SplitHexaToTetras (self, theObject, theNode000, theNode001):
-        # Pattern:     5.---------.6
-        #              /|#*      /|
-        #             / | #*    / |
-        #            /  |  # * /  |
-        #           /   |   # /*  |
-        # (0,0,1) 4.---------.7 * |
-        #          |#*  |1   | # *|
-        #          | # *.----|---#.2
-        #          |  #/ *   |   /
-        #          |  /#  *  |  /
-        #          | /   # * | /
-        #          |/      #*|/
-        # (0,0,0) 0.---------.3
+        """
+        Split hexahedrons into tetrahedrons.
+
+        This operation uses :doc:`pattern_mapping` functionality for splitting.
+
+        Parameters:
+                theObject: the object from which the list of hexahedrons is taken; 
+                        this is :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+                theNode000,theNode001: within the range [0,7]; gives the orientation of the
+                        pattern relatively each hexahedron: the (0,0,0) key-point of the pattern
+                        will be mapped into *theNode000*-th node of each volume, the (0,0,1)
+                        key-point will be mapped into *theNode001*-th node of each volume.
+                        The (0,0,0) key-point of the used pattern corresponds to a non-split corner.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+#    Pattern:
+#                     5.---------.6
+#                    /|#*      /|
+#                   / | #*    / |
+#                  /  |  # * /  |
+#                 /   |   # /*  |
+#       (0,0,1) 4.---------.7 * |
+#                |#*  |1   | # *|
+#                | # *.----|---#.2
+#                |  #/ *   |   /
+#                |  /#  *  |  /
+#                | /   # * | /
+#                |/      #*|/
+#        (0,0,0) 0.---------.3
         pattern_tetra = "!!! Nb of points: \n 8 \n\
         !!! Points: \n\
         0 0 0  !- 0 \n\
@@ -3640,31 +4689,36 @@ class Mesh(metaclass=MeshMeta):
 
         return isDone
 
-    ## @brief Split hexahedrons into prisms.
-    #
-    #  Uses the pattern mapping functionality for splitting.
-    #  @param theObject the object (mesh, submesh or group) from where the list of hexahedrons is taken;
-    #  @param theNode000,theNode001 (within the range [0,7]) gives the orientation of the
-    #         pattern relatively each hexahedron: keypoint (0,0,0) of the pattern
-    #         will be mapped into the <VAR>theNode000</VAR>-th node of each volume, keypoint (0,0,1)
-    #         will be mapped into the <VAR>theNode001</VAR>-th node of each volume.
-    #         Edge (0,0,0)-(0,0,1) of used pattern connects two not split corners.
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_cutquadr
     def SplitHexaToPrisms (self, theObject, theNode000, theNode001):
-        # Pattern:     5.---------.6
-        #              /|#       /|
-        #             / | #     / |
-        #            /  |  #   /  |
-        #           /   |   # /   |
-        # (0,0,1) 4.---------.7   |
-        #          |    |    |    |
-        #          |   1.----|----.2
-        #          |   / *   |   /
-        #          |  /   *  |  /
-        #          | /     * | /
-        #          |/       *|/
-        # (0,0,0) 0.---------.3
+        """
+        Split hexahedrons into prisms.
+
+        Uses the :doc:`pattern_mapping` functionality for splitting.
+
+        Parameters:
+                theObject: the object (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`) from where the list of hexahedrons is taken;
+                theNode000,theNode001: (within the range [0,7]) gives the orientation of the
+                        pattern relatively each hexahedron: keypoint (0,0,0) of the pattern
+                        will be mapped into the *theNode000* -th node of each volume, keypoint (0,0,1)
+                        will be mapped into the *theNode001* -th node of each volume.
+                        Edge (0,0,0)-(0,0,1) of used pattern connects two not split corners.
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+#        Pattern:     5.---------.6
+#                     /|#       /|
+#                    / | #     / |
+#                   /  |  #   /  |
+#                  /   |   # /   |
+#        (0,0,1) 4.---------.7   |
+#                 |    |    |    |
+#                 |   1.----|----.2
+#                 |   / *   |   /
+#                 |  /   *  |  /
+#                 | /     * | /
+#                 |/       *|/
+#        (0,0,0) 0.---------.3
         pattern_prism = "!!! Nb of points: \n 8 \n\
         !!! Points: \n\
         0 0 0  !- 0 \n\
@@ -3694,18 +4748,24 @@ class Mesh(metaclass=MeshMeta):
 
         return isDone
 
-    ## Smooth elements
-    #  @param IDsOfElements the list if ids of elements to smooth
-    #  @param IDsOfFixedNodes the list of ids of fixed nodes.
-    #  Note that nodes built on edges and boundary nodes are always fixed.
-    #  @param MaxNbOfIterations the maximum number of iterations
-    #  @param MaxAspectRatio varies in range [1.0, inf]
-    #  @param Method is either Laplacian (smesh.LAPLACIAN_SMOOTH)
-    #         or Centroidal (smesh.CENTROIDAL_SMOOTH)
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_smooth
     def Smooth(self, IDsOfElements, IDsOfFixedNodes,
                MaxNbOfIterations, MaxAspectRatio, Method):
+        """
+        Smooth elements
+
+        Parameters:
+                IDsOfElements: the list if ids of elements to smooth
+                IDsOfFixedNodes: the list of ids of fixed nodes.
+                        Note that nodes built on edges and boundary nodes are always fixed.
+                MaxNbOfIterations: the maximum number of iterations
+                MaxAspectRatio: varies in range [1.0, inf]
+                Method: is either Laplacian (smesh.LAPLACIAN_SMOOTH)
+                        or Centroidal (smesh.CENTROIDAL_SMOOTH)
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         MaxNbOfIterations,MaxAspectRatio,Parameters,hasVars = ParseParameters(MaxNbOfIterations,MaxAspectRatio)
@@ -3713,35 +4773,47 @@ class Mesh(metaclass=MeshMeta):
         return self.editor.Smooth(IDsOfElements, IDsOfFixedNodes,
                                   MaxNbOfIterations, MaxAspectRatio, Method)
 
-    ## Smooth elements which belong to the given object
-    #  @param theObject the object to smooth
-    #  @param IDsOfFixedNodes the list of ids of fixed nodes.
-    #  Note that nodes built on edges and boundary nodes are always fixed.
-    #  @param MaxNbOfIterations the maximum number of iterations
-    #  @param MaxAspectRatio varies in range [1.0, inf]
-    #  @param Method is either Laplacian (smesh.LAPLACIAN_SMOOTH)
-    #         or Centroidal (smesh.CENTROIDAL_SMOOTH)
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_smooth
     def SmoothObject(self, theObject, IDsOfFixedNodes,
                      MaxNbOfIterations, MaxAspectRatio, Method):
+        """
+        Smooth elements which belong to the given object
+
+        Parameters:
+                theObject: the object to smooth
+                IDsOfFixedNodes: the list of ids of fixed nodes.
+                        Note that nodes built on edges and boundary nodes are always fixed.
+                MaxNbOfIterations: the maximum number of iterations
+                MaxAspectRatio: varies in range [1.0, inf]
+                Method: is either Laplacian (smesh.LAPLACIAN_SMOOTH)
+                        or Centroidal (smesh.CENTROIDAL_SMOOTH)
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         return self.editor.SmoothObject(theObject, IDsOfFixedNodes,
                                         MaxNbOfIterations, MaxAspectRatio, Method)
 
-    ## Parametrically smooth the given elements
-    #  @param IDsOfElements the list if ids of elements to smooth
-    #  @param IDsOfFixedNodes the list of ids of fixed nodes.
-    #  Note that nodes built on edges and boundary nodes are always fixed.
-    #  @param MaxNbOfIterations the maximum number of iterations
-    #  @param MaxAspectRatio varies in range [1.0, inf]
-    #  @param Method is either Laplacian (smesh.LAPLACIAN_SMOOTH)
-    #         or Centroidal (smesh.CENTROIDAL_SMOOTH)
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_smooth
     def SmoothParametric(self, IDsOfElements, IDsOfFixedNodes,
                          MaxNbOfIterations, MaxAspectRatio, Method):
+        """
+        Parametrically smooth the given elements
+
+        Parameters:
+                IDsOfElements: the list if ids of elements to smooth
+                IDsOfFixedNodes: the list of ids of fixed nodes.
+                        Note that nodes built on edges and boundary nodes are always fixed.
+                MaxNbOfIterations: the maximum number of iterations
+                MaxAspectRatio: varies in range [1.0, inf]
+                Method: is either Laplacian (smesh.LAPLACIAN_SMOOTH)
+                        or Centroidal (smesh.CENTROIDAL_SMOOTH)
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         MaxNbOfIterations,MaxAspectRatio,Parameters,hasVars = ParseParameters(MaxNbOfIterations,MaxAspectRatio)
@@ -3749,33 +4821,49 @@ class Mesh(metaclass=MeshMeta):
         return self.editor.SmoothParametric(IDsOfElements, IDsOfFixedNodes,
                                             MaxNbOfIterations, MaxAspectRatio, Method)
 
-    ## Parametrically smooth the elements which belong to the given object
-    #  @param theObject the object to smooth
-    #  @param IDsOfFixedNodes the list of ids of fixed nodes.
-    #  Note that nodes built on edges and boundary nodes are always fixed.
-    #  @param MaxNbOfIterations the maximum number of iterations
-    #  @param MaxAspectRatio varies in range [1.0, inf]
-    #  @param Method is either Laplacian (smesh.LAPLACIAN_SMOOTH)
-    #         or Centroidal (smesh.CENTROIDAL_SMOOTH)
-    #  @return TRUE in case of success, FALSE otherwise.
-    #  @ingroup l2_modif_smooth
     def SmoothParametricObject(self, theObject, IDsOfFixedNodes,
                                MaxNbOfIterations, MaxAspectRatio, Method):
+        """
+        Parametrically smooth the elements which belong to the given object
+
+        Parameters:
+                theObject: the object to smooth
+                IDsOfFixedNodes: the list of ids of fixed nodes.
+                        Note that nodes built on edges and boundary nodes are always fixed.
+                MaxNbOfIterations: the maximum number of iterations
+                MaxAspectRatio: varies in range [1.0, inf]
+                Method: is either Laplacian (smesh.LAPLACIAN_SMOOTH)
+                        or Centroidal (smesh.CENTROIDAL_SMOOTH)
+
+        Returns:
+            True in case of success, False otherwise.
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         return self.editor.SmoothParametricObject(theObject, IDsOfFixedNodes,
                                                   MaxNbOfIterations, MaxAspectRatio, Method)
 
-    ## Convert the mesh to quadratic or bi-quadratic, deletes old elements, replacing
-    #  them with quadratic with the same id.
-    #  @param theForce3d new node creation method:
-    #         0 - the medium node lies at the geometrical entity from which the mesh element is built
-    #         1 - the medium node lies at the middle of the line segments connecting two nodes of a mesh element
-    #  @param theSubMesh a group or a sub-mesh to convert; WARNING: in this case the mesh can become not conformal
-    #  @param theToBiQuad If True, converts the mesh to bi-quadratic
-    #  @return SMESH.ComputeError which can hold a warning
-    #  @ingroup l2_modif_tofromqu
     def ConvertToQuadratic(self, theForce3d=False, theSubMesh=None, theToBiQuad=False):
+        """
+        Convert the mesh to quadratic or bi-quadratic, deletes old elements, replacing
+        them with quadratic with the same id.
+
+        Parameters:
+                theForce3d: method of new node creation:
+
+                  * False - the medium node lies at the geometrical entity from which the mesh element is built
+                  * True - the medium node lies at the middle of the line segments connecting two nodes of a mesh element
+                theSubMesh: a :class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>` to convert
+                theToBiQuad: If True, converts the mesh to bi-quadratic
+
+        Returns:
+            :class:`SMESH.ComputeError` which can hold a warning
+
+        Warning:
+            If *theSubMesh* is provided, the mesh can become non-conformal
+        """
+
         if isinstance( theSubMesh, Mesh ):
             theSubMesh = theSubMesh.mesh
         if theToBiQuad:
@@ -3790,42 +4878,59 @@ class Mesh(metaclass=MeshMeta):
             print(error.comment)
         return error
 
-    ## Convert the mesh from quadratic to ordinary,
-    #  deletes old quadratic elements, \n replacing
-    #  them with ordinary mesh elements with the same id.
-    #  @param theSubMesh a group or a sub-mesh to convert; WARNING: in this case the mesh can become not conformal
-    #  @ingroup l2_modif_tofromqu
     def ConvertFromQuadratic(self, theSubMesh=None):
+        """
+        Convert the mesh from quadratic to ordinary,
+        deletes old quadratic elements,
+        replacing them with ordinary mesh elements with the same id.
+
+        Parameters:
+            theSubMesh: a :class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>` to convert
+
+        Warning:
+            If *theSubMesh* is provided, the mesh can become non-conformal
+        """
+
         if theSubMesh:
             self.editor.ConvertFromQuadraticObject(theSubMesh)
         else:
             return self.editor.ConvertFromQuadratic()
 
-    ## Create 2D mesh as skin on boundary faces of a 3D mesh
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_add
     def Make2DMeshFrom3D(self):
+        """
+        Create 2D mesh as skin on boundary faces of a 3D mesh
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.Make2DMeshFrom3D()
 
-    ## Create missing boundary elements
-    #  @param elements - elements whose boundary is to be checked:
-    #                    mesh, group, sub-mesh or list of elements
-    #   if elements is mesh, it must be the mesh whose MakeBoundaryMesh() is called
-    #  @param dimension - defines type of boundary elements to create, either of
-    #                     { SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }
-    #    SMESH.BND_1DFROM3D create mesh edges on all borders of free facets of 3D cells
-    #  @param groupName - a name of group to store created boundary elements in,
-    #                     "" means not to create the group
-    #  @param meshName - a name of new mesh to store created boundary elements in,
-    #                     "" means not to create the new mesh
-    #  @param toCopyElements - if true, the checked elements will be copied into
-    #     the new mesh else only boundary elements will be copied into the new mesh
-    #  @param toCopyExistingBondary - if true, not only new but also pre-existing
-    #     boundary elements will be copied into the new mesh
-    #  @return tuple (mesh, group) where boundary elements were added to
-    #  @ingroup l2_modif_add
     def MakeBoundaryMesh(self, elements, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
                          toCopyElements=False, toCopyExistingBondary=False):
+        """
+        Create missing boundary elements
+
+        Parameters:
+                elements: elements whose boundary is to be checked:
+                        :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` or list of elements.
+                        If *elements* is mesh, it must be the mesh whose MakeBoundaryMesh() is called
+                dimension: defines type of boundary elements to create, either of
+                        { SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }.
+                        SMESH.BND_1DFROM3D create mesh edges on all borders of free facets of 3D cells
+                groupName: a name of group to store created boundary elements in,
+                        "" means not to create the group
+                meshName: a name of new mesh to store created boundary elements in,
+                        "" means not to create the new mesh
+                toCopyElements: if True, the checked elements will be copied into
+                        the new mesh else only boundary elements will be copied into the new mesh
+                toCopyExistingBondary: if True, not only new but also pre-existing
+                        boundary elements will be copied into the new mesh
+
+        Returns:
+            tuple (:class:`Mesh`, :class:`group <SMESH.SMESH_Group>`) where boundary elements were added to
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( elements, Mesh ):
             elements = elements.GetMesh()
@@ -3839,43 +4944,51 @@ class Mesh(metaclass=MeshMeta):
         if mesh: mesh = self.smeshpyD.Mesh(mesh)
         return mesh, group
 
-    ##
-    # @brief Create missing boundary elements around either the whole mesh or
-    #    groups of elements
-    #  @param dimension - defines type of boundary elements to create, either of
-    #                     { SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }
-    #  @param groupName - a name of group to store all boundary elements in,
-    #    "" means not to create the group
-    #  @param meshName - a name of a new mesh, which is a copy of the initial
-    #    mesh + created boundary elements; "" means not to create the new mesh
-    #  @param toCopyAll - if true, the whole initial mesh will be copied into
-    #    the new mesh else only boundary elements will be copied into the new mesh
-    #  @param groups - groups of elements to make boundary around
-    #  @retval tuple( long, mesh, groups )
-    #                 long - number of added boundary elements
-    #                 mesh - the mesh where elements were added to
-    #                 group - the group of boundary elements or None
-    #
-    #  @ingroup l2_modif_add
     def MakeBoundaryElements(self, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
                              toCopyAll=False, groups=[]):
+        """
+        Create missing boundary elements around either the whole mesh or
+        groups of elements
+
+        Parameters:
+                dimension: defines type of boundary elements to create, either of
+                        { SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }
+                groupName: a name of group to store all boundary elements in,
+                        "" means not to create the group
+                meshName: a name of a new mesh, which is a copy of the initial
+                        mesh + created boundary elements; "" means not to create the new mesh
+                toCopyAll: if True, the whole initial mesh will be copied into
+                        the new mesh else only boundary elements will be copied into the new mesh
+                groups: list of :class:`sub-meshes, groups or filters <SMESH.SMESH_IDSource>` of elements to make boundary around
+
+        Returns:
+                tuple( long, mesh, groups )
+                       - long - number of added boundary elements
+                       - mesh - the :class:`Mesh` where elements were added to
+                       - group - the :class:`group <SMESH.SMESH_Group>` of boundary elements or None
+        """
+
         nb, mesh, group = self.editor.MakeBoundaryElements(dimension,groupName,meshName,
                                                            toCopyAll,groups)
         if mesh: mesh = self.smeshpyD.Mesh(mesh)
         return nb, mesh, group
 
-    ## Renumber mesh nodes (Obsolete, does nothing)
-    #  @ingroup l2_modif_renumber
     def RenumberNodes(self):
+        """
+        Renumber mesh nodes to remove unused node IDs
+        """
         self.editor.RenumberNodes()
 
-    ## Renumber mesh elements (Obsole, does nothing)
-    #  @ingroup l2_modif_renumber
     def RenumberElements(self):
+        """
+        Renumber mesh elements to remove unused element IDs
+        """
         self.editor.RenumberElements()
 
-    ## Private method converting \a arg into a list of SMESH_IdSource's
     def _getIdSourceList(self, arg, idType, unRegister):
+        """
+        Private method converting *arg* into a list of :class:`SMESH.SMESH_IDSource`
+        """
         if arg and isinstance( arg, list ):
             if isinstance( arg[0], int ):
                 arg = self.GetIDSource( arg, idType )
@@ -3888,22 +5001,28 @@ class Mesh(metaclass=MeshMeta):
             arg = [arg]
         return arg
 
-    ## Generate new elements by rotation of the given elements and nodes around the axis
-    #  @param nodes - nodes to revolve: a list including ids, groups, sub-meshes or a mesh
-    #  @param edges - edges to revolve: a list including ids, groups, sub-meshes or a mesh
-    #  @param faces - faces to revolve: a list including ids, groups, sub-meshes or a mesh
-    #  @param Axis the axis of rotation: AxisStruct, line (geom object) or [x,y,z,dx,dy,dz]
-    #  @param AngleInRadians the angle of Rotation (in radians) or a name of variable
-    #         which defines angle in degrees
-    #  @param NbOfSteps the number of steps
-    #  @param Tolerance tolerance
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param TotalAngle gives meaning of AngleInRadians: if True then it is an angular size
-    #                    of all steps, else - size of each step
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def RotationSweepObjects(self, nodes, edges, faces, Axis, AngleInRadians, NbOfSteps, Tolerance,
                              MakeGroups=False, TotalAngle=False):
+        """
+        Generate new elements by rotation of the given elements and nodes around the axis
+
+        Parameters:
+                nodes: nodes to revolve: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+                edges: edges to revolve: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+                faces: faces to revolve: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+                Axis: the axis of rotation: :class:`SMESH.AxisStruct`, line (geom object) or [x,y,z,dx,dy,dz]
+                AngleInRadians: the angle of Rotation (in radians) or a name of variable
+                        which defines angle in degrees
+                NbOfSteps: the number of steps
+                Tolerance: tolerance
+                MakeGroups: forces the generation of new groups from existing ones
+                TotalAngle: gives meaning of AngleInRadians: if True then it is an angular size
+                        of all steps, else - size of each step
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         unRegister = genObjUnRegister()
         nodes = self._getIdSourceList( nodes, SMESH.NODE, unRegister )
         edges = self._getIdSourceList( edges, SMESH.EDGE, unRegister )
@@ -3924,99 +5043,130 @@ class Mesh(metaclass=MeshMeta):
                                                  Axis, AngleInRadians,
                                                  NbOfSteps, Tolerance, MakeGroups)
 
-    ## Generate new elements by rotation of the elements around the axis
-    #  @param IDsOfElements the list of ids of elements to sweep
-    #  @param Axis the axis of rotation, AxisStruct or line(geom object)
-    #  @param AngleInRadians the angle of Rotation (in radians) or a name of variable which defines angle in degrees
-    #  @param NbOfSteps the number of steps
-    #  @param Tolerance tolerance
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param TotalAngle gives meaning of AngleInRadians: if True then it is an angular size
-    #                    of all steps, else - size of each step
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def RotationSweep(self, IDsOfElements, Axis, AngleInRadians, NbOfSteps, Tolerance,
                       MakeGroups=False, TotalAngle=False):
+        """
+        Generate new elements by rotation of the elements around the axis
+
+        Parameters:
+            IDsOfElements: the list of ids of elements to sweep
+            Axis: the axis of rotation, :class:`SMESH.AxisStruct` or line(geom object)
+            AngleInRadians: the angle of Rotation (in radians) or a name of variable which defines angle in degrees
+            NbOfSteps: the number of steps
+            Tolerance: tolerance
+            MakeGroups: forces the generation of new groups from existing ones
+            TotalAngle: gives meaning of AngleInRadians: if True then it is an angular size
+                of all steps, else - size of each step
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         return self.RotationSweepObjects([], IDsOfElements, IDsOfElements, Axis,
                                          AngleInRadians, NbOfSteps, Tolerance,
                                          MakeGroups, TotalAngle)
 
-    ## Generate new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped.
-    #                   It can be a mesh, a sub mesh or a group.
-    #  @param Axis the axis of rotation, AxisStruct or line(geom object)
-    #  @param AngleInRadians the angle of Rotation
-    #  @param NbOfSteps number of steps
-    #  @param Tolerance tolerance
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param TotalAngle gives meaning of AngleInRadians: if True then it is an angular size
-    #                    of all steps, else - size of each step
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def RotationSweepObject(self, theObject, Axis, AngleInRadians, NbOfSteps, Tolerance,
                             MakeGroups=False, TotalAngle=False):
+        """
+        Generate new elements by rotation of the elements of object around the axis
+        theObject object which elements should be sweeped.
+        It can be a mesh, a sub mesh or a group.
+
+        Parameters:
+            Axis: the axis of rotation, :class:`SMESH.AxisStruct` or line(geom object)
+            AngleInRadians: the angle of Rotation
+            NbOfSteps: number of steps
+            Tolerance: tolerance
+            MakeGroups: forces the generation of new groups from existing ones
+            TotalAngle: gives meaning of AngleInRadians: if True then it is an angular size
+                of all steps, else - size of each step
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         return self.RotationSweepObjects( [], theObject, theObject, Axis,
                                           AngleInRadians, NbOfSteps, Tolerance,
                                           MakeGroups, TotalAngle )
 
-    ## Generate new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped.
-    #                   It can be a mesh, a sub mesh or a group.
-    #  @param Axis the axis of rotation, AxisStruct or line(geom object)
-    #  @param AngleInRadians the angle of Rotation
-    #  @param NbOfSteps number of steps
-    #  @param Tolerance tolerance
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param TotalAngle gives meaning of AngleInRadians: if True then it is an angular size
-    #                    of all steps, else - size of each step
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def RotationSweepObject1D(self, theObject, Axis, AngleInRadians, NbOfSteps, Tolerance,
                               MakeGroups=False, TotalAngle=False):
+        """
+        Generate new elements by rotation of the elements of object around the axis
+        theObject object which elements should be sweeped.
+        It can be a mesh, a sub mesh or a group.
+
+        Parameters:
+            Axis: the axis of rotation, :class:`SMESH.AxisStruct` or line(geom object)
+            AngleInRadians: the angle of Rotation
+            NbOfSteps: number of steps
+            Tolerance: tolerance
+            MakeGroups: forces the generation of new groups from existing ones
+            TotalAngle: gives meaning of AngleInRadians: if True then it is an angular size
+                of all steps, else - size of each step
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, 
+            empty list otherwise
+        """
+
         return self.RotationSweepObjects([],theObject,[], Axis,
                                          AngleInRadians, NbOfSteps, Tolerance,
                                          MakeGroups, TotalAngle)
 
-    ## Generate new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped.
-    #                   It can be a mesh, a sub mesh or a group.
-    #  @param Axis the axis of rotation, AxisStruct or line(geom object)
-    #  @param AngleInRadians the angle of Rotation
-    #  @param NbOfSteps number of steps
-    #  @param Tolerance tolerance
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param TotalAngle gives meaning of AngleInRadians: if True then it is an angular size
-    #                    of all steps, else - size of each step
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def RotationSweepObject2D(self, theObject, Axis, AngleInRadians, NbOfSteps, Tolerance,
                               MakeGroups=False, TotalAngle=False):
+        """
+        Generate new elements by rotation of the elements of object around the axis
+        theObject object which elements should be sweeped.
+        It can be a mesh, a sub mesh or a group.
+
+        Parameters:
+            Axis: the axis of rotation, :class:`SMESH.AxisStruct` or line(geom object)
+            AngleInRadians: the angle of Rotation
+            NbOfSteps: number of steps
+            Tolerance: tolerance
+            MakeGroups: forces the generation of new groups from existing ones
+            TotalAngle: gives meaning of AngleInRadians: if True then it is an angular size
+                of all steps, else - size of each step
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         return self.RotationSweepObjects([],[],theObject, Axis, AngleInRadians,
                                          NbOfSteps, Tolerance, MakeGroups, TotalAngle)
 
-    ## Generate new elements by extrusion of the given elements and nodes
-    #  @param nodes nodes to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param edges edges to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param faces faces to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param scaleFactors optional scale factors to apply during extrusion
-    #  @param linearVariation if @c True, scaleFactors are spread over all @a scaleFactors,
-    #         else scaleFactors[i] is applied to nodes at the i-th extrusion step
-    #  @param basePoint optional scaling center; if not provided, a gravity center of
-    #         nodes and elements being extruded is used as the scaling center.
-    #         It can be either
-    #         - a list of tree components of the point or
-    #         - a node ID or
-    #         - a GEOM point
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionSweepObjects(self, nodes, edges, faces, StepVector, NbOfSteps, MakeGroups=False,
                               scaleFactors=[], linearVariation=False, basePoint=[] ):
+        """
+        Generate new elements by extrusion of the given elements and nodes
+
+        Parameters:
+            nodes: nodes to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            edges: edges to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            faces: faces to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            MakeGroups: forces the generation of new groups from existing ones
+            scaleFactors: optional scale factors to apply during extrusion
+            linearVariation: if *True*, scaleFactors are spread over all *scaleFactors*,
+                else scaleFactors[i] is applied to nodes at the i-th extrusion step
+            basePoint: optional scaling center; if not provided, a gravity center of
+                nodes and elements being extruded is used as the scaling center.
+                It can be either
+
+                        - a list of tree components of the point or
+                        - a node ID or
+                        - a GEOM point
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+
+        Example: :ref:`tui_extrusion`
+        """
         unRegister = genObjUnRegister()
         nodes = self._getIdSourceList( nodes, SMESH.NODE, unRegister )
         edges = self._getIdSourceList( edges, SMESH.EDGE, unRegister )
@@ -4045,46 +5195,58 @@ class Mesh(metaclass=MeshMeta):
                                                   MakeGroups)
 
 
-    ## Generate new elements by extrusion of the elements with given ids
-    #  @param IDsOfElements the list of ids of elements or nodes for extrusion
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param IsNodes is True if elements with given ids are nodes
-    #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionSweep(self, IDsOfElements, StepVector, NbOfSteps, MakeGroups=False, IsNodes = False):
+        """
+        Generate new elements by extrusion of the elements with given ids
+
+        Parameters:
+            IDsOfElements: the list of ids of elements or nodes for extrusion
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            MakeGroups: forces the generation of new groups from existing ones
+            IsNodes: is True if elements with given ids are nodes
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+
+        Example: :ref:`tui_extrusion`
+        """
         n,e,f = [],[],[]
         if IsNodes: n = IDsOfElements
         else      : e,f, = IDsOfElements,IDsOfElements
         return self.ExtrusionSweepObjects(n,e,f, StepVector, NbOfSteps, MakeGroups)
 
-    ## Generate new elements by extrusion along the normal to a discretized surface or wire
-    #  @param Elements elements to extrude - a list including ids, groups, sub-meshes or a mesh.
-    #         Only faces can be extruded so far. A sub-mesh should be a sub-mesh on geom faces.
-    #  @param StepSize length of one extrusion step (the total extrusion
-    #         length will be \a NbOfSteps * \a StepSize ).
-    #  @param NbOfSteps number of extrusion steps.
-    #  @param ByAverageNormal if True each node is translated by \a StepSize
-    #         along the average of the normal vectors to the faces sharing the node;
-    #         else each node is translated along the same average normal till
-    #         intersection with the plane got by translation of the face sharing
-    #         the node along its own normal by \a StepSize.
-    #  @param UseInputElemsOnly to use only \a Elements when computing extrusion direction
-    #         for every node of \a Elements.
-    #  @param MakeGroups forces generation of new groups from existing ones.
-    #  @param Dim dimension of elements to extrude: 2 - faces or 1 - edges. Extrusion of edges
-    #         is not yet implemented. This parameter is used if \a Elements contains
-    #         both faces and edges, i.e. \a Elements is a Mesh.
-    #  @return the list of created groups (SMESH_GroupBase) if \a MakeGroups=True,
-    #          empty list otherwise.
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionByNormal(self, Elements, StepSize, NbOfSteps,
                           ByAverageNormal=False, UseInputElemsOnly=True, MakeGroups=False, Dim = 2):
+        """
+        Generate new elements by extrusion along the normal to a discretized surface or wire
+
+        Parameters:
+            Elements: elements to extrude - a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`.
+                Only faces can be extruded so far. A sub-mesh should be a sub-mesh on geom faces.
+            StepSize: length of one extrusion step (the total extrusion
+                length will be *NbOfSteps* *StepSize*).
+            NbOfSteps: number of extrusion steps.
+            ByAverageNormal: if True each node is translated by *StepSize*
+                along the average of the normal vectors to the faces sharing the node;
+                else each node is translated along the same average normal till
+                intersection with the plane got by translation of the face sharing
+                the node along its own normal by *StepSize*.
+            UseInputElemsOnly: to use only *Elements* when computing extrusion direction
+                for every node of *Elements*.
+            MakeGroups: forces generation of new groups from existing ones.
+            Dim: dimension of elements to extrude: 2 - faces or 1 - edges. Extrusion of edges
+                is not yet implemented. This parameter is used if *Elements* contains
+                both faces and edges, i.e. *Elements* is a Mesh.
+
+        Returns:
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True,
+            empty list otherwise.
+        Example: :ref:`tui_extrusion`
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( Elements, Mesh ):
             Elements = [ Elements.GetMesh() ]
@@ -4101,66 +5263,90 @@ class Mesh(metaclass=MeshMeta):
         return self.editor.ExtrusionByNormal(Elements, StepSize, NbOfSteps,
                                              ByAverageNormal, UseInputElemsOnly, MakeGroups, Dim)
 
-    ## Generate new elements by extrusion of the elements or nodes which belong to the object
-    #  @param theObject the object whose elements or nodes should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param IsNodes is True if elements to extrude are nodes
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionSweepObject(self, theObject, StepVector, NbOfSteps, MakeGroups=False, IsNodes=False):
+        """
+        Generate new elements by extrusion of the elements or nodes which belong to the object
+
+        Parameters:
+            theObject: the object whose elements or nodes should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            MakeGroups: forces the generation of new groups from existing ones
+            IsNodes: is True if elements to extrude are nodes
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        Example: :ref:`tui_extrusion`
+        """
+
         n,e,f = [],[],[]
         if IsNodes: n    = theObject
         else      : e,f, = theObject,theObject
         return self.ExtrusionSweepObjects(n,e,f, StepVector, NbOfSteps, MakeGroups)
 
-    ## Generate new elements by extrusion of edges which belong to the object
-    #  @param theObject object whose 1D elements should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param MakeGroups to generate new groups from existing ones
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionSweepObject1D(self, theObject, StepVector, NbOfSteps, MakeGroups=False):
+        """
+        Generate new elements by extrusion of edges which belong to the object
+
+        Parameters:
+            theObject: object whose 1D elements should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            MakeGroups: to generate new groups from existing ones
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        Example: :ref:`tui_extrusion`
+        """
+
         return self.ExtrusionSweepObjects([],theObject,[], StepVector, NbOfSteps, MakeGroups)
 
-    ## Generate new elements by extrusion of faces which belong to the object
-    #  @param theObject object whose 2D elements should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion example
     def ExtrusionSweepObject2D(self, theObject, StepVector, NbOfSteps, MakeGroups=False):
+        """
+        Generate new elements by extrusion of faces which belong to the object
+
+        Parameters:
+            theObject: object whose 2D elements should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            MakeGroups: forces the generation of new groups from existing ones
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        Example: :ref:`tui_extrusion`
+        """
+
         return self.ExtrusionSweepObjects([],[],theObject, StepVector, NbOfSteps, MakeGroups)
 
-    ## Generate new elements by extrusion of the elements with given ids
-    #  @param IDsOfElements is ids of elements
-    #  @param StepVector vector or DirStruct or 3 vector components, defining
-    #         the direction and value of extrusion for one step (the total extrusion
-    #         length will be NbOfSteps * ||StepVector||)
-    #  @param NbOfSteps the number of steps
-    #  @param ExtrFlags sets flags for extrusion
-    #  @param SewTolerance uses for comparing locations of nodes if flag
-    #         EXTRUSION_FLAG_SEW is set
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_extrurev
     def AdvancedExtrusion(self, IDsOfElements, StepVector, NbOfSteps,
                           ExtrFlags, SewTolerance, MakeGroups=False):
+        """
+        Generate new elements by extrusion of the elements with given ids
+
+        Parameters:
+            IDsOfElements: is ids of elements
+            StepVector: vector or :class:`SMESH.DirStruct` or 3 vector components, defining
+                the direction and value of extrusion for one step (the total extrusion
+                length will be NbOfSteps * ||StepVector||)
+            NbOfSteps: the number of steps
+            ExtrFlags: sets flags for extrusion
+            SewTolerance: uses for comparing locations of nodes if flag
+                EXTRUSION_FLAG_SEW is set
+            MakeGroups: forces the generation of new groups from existing ones
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         if isinstance( StepVector, geomBuilder.GEOM._objref_GEOM_Object):
             StepVector = self.smeshpyD.GetDirStruct(StepVector)
         if isinstance( StepVector, list ):
@@ -4168,30 +5354,38 @@ class Mesh(metaclass=MeshMeta):
         return self.editor.AdvancedExtrusion(IDsOfElements, StepVector, NbOfSteps,
                                              ExtrFlags, SewTolerance, MakeGroups)
 
-    ## Generate new elements by extrusion of the given elements and nodes along the path.
-    #  The path of extrusion must be a meshed edge.
-    #  @param Nodes nodes to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param Edges edges to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param Faces faces to extrude: a list including ids, groups, sub-meshes or a mesh
-    #  @param PathMesh 1D mesh or 1D sub-mesh, along which proceeds the extrusion
-    #  @param PathShape shape (edge) defines the sub-mesh of PathMesh if PathMesh
-    #         contains not only path segments, else it can be None
-    #  @param NodeStart the first or the last node on the path. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the shape is rotated (the mass center of the
-    #         shape by default). The User can specify any point as the Reference Point.
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPathObjects(self, Nodes, Edges, Faces, PathMesh, PathShape=None,
                                   NodeStart=1, HasAngles=False, Angles=[], LinearVariation=False,
                                   HasRefPoint=False, RefPoint=[0,0,0], MakeGroups=False):
+        """
+        Generate new elements by extrusion of the given elements and nodes along the path.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            Nodes: nodes to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            Edges: edges to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            Faces: faces to extrude: a list including ids, :class:`a mesh, sub-meshes, groups or filters <SMESH.SMESH_IDSource>`
+            PathMesh: 1D mesh or 1D sub-mesh, along which proceeds the extrusion
+            PathShape: shape (edge) defines the sub-mesh of PathMesh if PathMesh
+                contains not only path segments, else it can be None
+            NodeStart: the first or the last node on the path. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+            HasRefPoint: allows using the reference point
+            RefPoint: the reference point around which the shape is rotated (the mass center of the
+                shape by default). The User can specify any point as the Reference Point. 
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>`
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         unRegister = genObjUnRegister()
         Nodes = self._getIdSourceList( Nodes, SMESH.NODE, unRegister )
         Edges = self._getIdSourceList( Edges, SMESH.EDGE, unRegister )
@@ -4212,31 +5406,39 @@ class Mesh(metaclass=MeshMeta):
                                                      HasAngles, Angles, LinearVariation,
                                                      HasRefPoint, RefPoint, MakeGroups)
 
-    ## Generate new elements by extrusion of the given elements
-    #  The path of extrusion must be a meshed edge.
-    #  @param Base mesh or group, or sub-mesh, or list of ids of elements for extrusion
-    #  @param Path - 1D mesh or 1D sub-mesh, along which proceeds the extrusion
-    #  @param NodeStart the start node from Path. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles in radians
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the elements are rotated (the mass
-    #         center of the elements by default).
-    #         The User can specify any point as the Reference Point.
-    #         RefPoint can be either GEOM Vertex, [x,y,z] or SMESH.PointStruct
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param ElemType type of elements for extrusion (if param Base is a mesh)
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
-    #          only SMESH::Extrusion_Error otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPathX(self, Base, Path, NodeStart,
                             HasAngles=False, Angles=[], LinearVariation=False,
                             HasRefPoint=False, RefPoint=[0,0,0], MakeGroups=False,
                             ElemType=SMESH.FACE):
+        """
+        Generate new elements by extrusion of the given elements.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            Base: :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>`, or list of ids of elements for extrusion
+            Path: 1D mesh or 1D sub-mesh, along which proceeds the extrusion
+            NodeStart: the start node from Path. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles in radians
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+            HasRefPoint: allows using the reference point
+            RefPoint: the reference point around which the elements are rotated (the mass
+                center of the elements by default).
+                The User can specify any point as the Reference Point.
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+            ElemType: type of elements for extrusion (if param Base is a mesh)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>`
+            if *MakeGroups* == True, only :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>`
+            otherwise
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         n,e,f = [],[],[]
         if ElemType == SMESH.NODE: n = Base
         if ElemType == SMESH.EDGE: e = Base
@@ -4247,28 +5449,36 @@ class Mesh(metaclass=MeshMeta):
         if MakeGroups: return gr,er
         return er
 
-    ## Generate new elements by extrusion of the given elements
-    #  The path of extrusion must be a meshed edge.
-    #  @param IDsOfElements ids of elements
-    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
-    #  @param PathShape shape(edge) defines the sub-mesh for the path
-    #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles in radians
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the shape is rotated (the mass center of the shape by default).
-    #         The User can specify any point as the Reference Point.
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
-    #          only SMESH::Extrusion_Error otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPath(self, IDsOfElements, PathMesh, PathShape, NodeStart,
                            HasAngles=False, Angles=[], HasRefPoint=False, RefPoint=[],
                            MakeGroups=False, LinearVariation=False):
+        """
+        Generate new elements by extrusion of the given elements.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            IDsOfElements: ids of elements
+            PathMesh: mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
+            PathShape: shape (edge) defines the sub-mesh for the path
+            NodeStart: the first or the last node on the edge. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles in radians
+            HasRefPoint: allows using the reference point
+            RefPoint: the reference point around which the shape is rotated (the mass center of the shape by default).
+                The User can specify any point as the Reference Point.
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>`
+            if *MakeGroups* == True, only :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` otherwise
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         n,e,f = [],IDsOfElements,IDsOfElements
         gr,er = self.ExtrusionAlongPathObjects(n,e,f, PathMesh, PathShape,
                                                NodeStart, HasAngles, Angles,
@@ -4277,29 +5487,37 @@ class Mesh(metaclass=MeshMeta):
         if MakeGroups: return gr,er
         return er
 
-    ## Generate new elements by extrusion of the elements which belong to the object
-    #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object whose elements should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
-    #  @param PathShape shape(edge) defines the sub-mesh for the path
-    #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the shape is rotated (the mass center of the shape by default).
-    #         The User can specify any point as the Reference Point.
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
-    #          only SMESH::Extrusion_Error otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPathObject(self, theObject, PathMesh, PathShape, NodeStart,
                                  HasAngles=False, Angles=[], HasRefPoint=False, RefPoint=[],
                                  MakeGroups=False, LinearVariation=False):
+        """
+        Generate new elements by extrusion of the elements which belong to the object.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            theObject: the object whose elements should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            PathMesh: mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
+            PathShape: shape (edge) defines the sub-mesh for the path
+            NodeStart: the first or the last node on the edge. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles
+            HasRefPoint: allows using the reference point
+            RefPoint: the reference point around which the shape is rotated (the mass center of the shape by default).
+                The User can specify any point as the Reference Point.
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` if *MakeGroups* == True,
+            only :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` otherwise
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         n,e,f = [],theObject,theObject
         gr,er = self.ExtrusionAlongPathObjects(n,e,f, PathMesh, PathShape, NodeStart,
                                                HasAngles, Angles, LinearVariation,
@@ -4307,29 +5525,37 @@ class Mesh(metaclass=MeshMeta):
         if MakeGroups: return gr,er
         return er
 
-    ## Generate new elements by extrusion of mesh segments which belong to the object
-    #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object whose 1D elements should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
-    #  @param PathShape shape(edge) defines the sub-mesh for the path
-    #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the shape is rotated (the mass center of the shape by default).
-    #         The User can specify any point as the Reference Point.
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
-    #          only SMESH::Extrusion_Error otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPathObject1D(self, theObject, PathMesh, PathShape, NodeStart,
                                    HasAngles=False, Angles=[], HasRefPoint=False, RefPoint=[],
                                    MakeGroups=False, LinearVariation=False):
+        """
+        Generate new elements by extrusion of mesh segments which belong to the object.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            theObject: the object whose 1D elements should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            PathMesh: mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
+            PathShape: shape (edge) defines the sub-mesh for the path
+            NodeStart: the first or the last node on the edge. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles
+            HasRefPoint: allows using the reference point
+            RefPoint:  the reference point around which the shape is rotated (the mass center of the shape by default).
+                The User can specify any point as the Reference Point.
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` if *MakeGroups* == True,
+            only :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` otherwise
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         n,e,f = [],theObject,[]
         gr,er = self.ExtrusionAlongPathObjects(n,e,f, PathMesh, PathShape, NodeStart,
                                                HasAngles, Angles, LinearVariation,
@@ -4337,29 +5563,37 @@ class Mesh(metaclass=MeshMeta):
         if MakeGroups: return gr,er
         return er
 
-    ## Generate new elements by extrusion of faces which belong to the object
-    #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object whose 2D elements should be processed.
-    #                   It can be a mesh, a sub-mesh or a group.
-    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
-    #  @param PathShape shape(edge) defines the sub-mesh for the path
-    #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
-    #  @param HasAngles allows the shape to be rotated around the path
-    #                   to get the resulting mesh in a helical fashion
-    #  @param Angles list of angles
-    #  @param HasRefPoint allows using the reference point
-    #  @param RefPoint the point around which the shape is rotated (the mass center of the shape by default).
-    #         The User can specify any point as the Reference Point.
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param LinearVariation forces the computation of rotation angles as linear
-    #                         variation of the given Angles along path steps
-    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
-    #          only SMESH::Extrusion_Error otherwise
-    #  @ingroup l2_modif_extrurev
-    #  @ref tui_extrusion_along_path example
     def ExtrusionAlongPathObject2D(self, theObject, PathMesh, PathShape, NodeStart,
                                    HasAngles=False, Angles=[], HasRefPoint=False, RefPoint=[],
                                    MakeGroups=False, LinearVariation=False):
+        """
+        Generate new elements by extrusion of faces which belong to the object.
+        The path of extrusion must be a meshed edge.
+
+        Parameters:
+            theObject: the object whose 2D elements should be processed.
+                It can be a :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`.
+            PathMesh: mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
+            PathShape: shape (edge) defines the sub-mesh for the path
+            NodeStart: the first or the last node on the edge. Defines the direction of extrusion
+            HasAngles: allows the shape to be rotated around the path
+                to get the resulting mesh in a helical fashion
+            Angles: list of angles
+            HasRefPoint: allows using the reference point
+            RefPoint: the reference point around which the shape is rotated (the mass center of the shape by default).
+                The User can specify any point as the Reference Point.
+                *RefPoint* can be either GEOM Vertex, [x,y,z] or :class:`SMESH.PointStruct`
+            MakeGroups: forces the generation of new groups from existing ones
+            LinearVariation: forces the computation of rotation angles as linear
+                variation of the given Angles along path steps
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` if *MakeGroups* == True,
+            only :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>` otherwise
+        Example: :ref:`tui_extrusion_along_path`
+        """
+
         n,e,f = [],[],theObject
         gr,er = self.ExtrusionAlongPathObjects(n,e,f, PathMesh, PathShape, NodeStart,
                                                HasAngles, Angles, LinearVariation,
@@ -4367,16 +5601,22 @@ class Mesh(metaclass=MeshMeta):
         if MakeGroups: return gr,er
         return er
 
-    ## Create a symmetrical copy of mesh elements
-    #  @param IDsOfElements list of elements ids
-    #  @param Mirror is AxisStruct or geom object(point, line, plane)
-    #  @param theMirrorType smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE
-    #         If the Mirror is a geom object this parameter is unnecessary
-    #  @param Copy allows to copy element (Copy is 1) or to replace with its mirroring (Copy is 0)
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def Mirror(self, IDsOfElements, Mirror, theMirrorType=None, Copy=0, MakeGroups=False):
+        """
+        Create a symmetrical copy of mesh elements
+
+        Parameters:
+            IDsOfElements: list of elements ids
+            Mirror: is :class:`SMESH.AxisStruct` or geom object (point, line, plane)
+            theMirrorType: smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE.
+                If the *Mirror* is a geom object this parameter is unnecessary
+            Copy: allows to copy element (Copy is 1) or to replace with its mirroring (Copy is 0)
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Mirror, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4389,16 +5629,22 @@ class Mesh(metaclass=MeshMeta):
         self.editor.Mirror(IDsOfElements, Mirror, theMirrorType, Copy)
         return []
 
-    ## Create a new mesh by a symmetrical copy of mesh elements
-    #  @param IDsOfElements the list of elements ids
-    #  @param Mirror is AxisStruct or geom object (point, line, plane)
-    #  @param theMirrorType smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE
-    #         If the Mirror is a geom object this parameter is unnecessary
-    #  @param MakeGroups to generate new groups from existing ones
-    #  @param NewMeshName a name of the new mesh to create
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def MirrorMakeMesh(self, IDsOfElements, Mirror, theMirrorType=0, MakeGroups=0, NewMeshName=""):
+        """
+        Create a new mesh by a symmetrical copy of mesh elements
+
+        Parameters:
+            IDsOfElements: the list of elements ids
+            Mirror: is :class:`SMESH.AxisStruct` or geom object (point, line, plane)
+            theMirrorType: smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE.
+                If the *Mirror* is a geom object this parameter is unnecessary
+            MakeGroups: to generate new groups from existing ones
+            NewMeshName: a name of the new mesh to create
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Mirror, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4410,16 +5656,22 @@ class Mesh(metaclass=MeshMeta):
                                           MakeGroups, NewMeshName)
         return Mesh(self.smeshpyD,self.geompyD,mesh)
 
-    ## Create a symmetrical copy of the object
-    #  @param theObject mesh, submesh or group
-    #  @param Mirror AxisStruct or geom object (point, line, plane)
-    #  @param theMirrorType smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE
-    #         If the Mirror is a geom object this parameter is unnecessary
-    #  @param Copy allows copying the element (Copy is 1) or replacing it with its mirror (Copy is 0)
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def MirrorObject (self, theObject, Mirror, theMirrorType=None, Copy=0, MakeGroups=False):
+        """
+        Create a symmetrical copy of the object
+
+        Parameters:
+            theObject: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+            Mirror: :class:`SMESH.AxisStruct` or geom object (point, line, plane)
+            theMirrorType: smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE.
+                If the *Mirror* is a geom object this parameter is unnecessary
+            Copy: allows copying the element (Copy==True) or replacing it with its mirror (Copy==False)
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         if ( isinstance( Mirror, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4432,16 +5684,22 @@ class Mesh(metaclass=MeshMeta):
         self.editor.MirrorObject(theObject, Mirror, theMirrorType, Copy)
         return []
 
-    ## Create a new mesh by a symmetrical copy of the object
-    #  @param theObject mesh, submesh or group
-    #  @param Mirror AxisStruct or geom object (point, line, plane)
-    #  @param theMirrorType smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE
-    #         If the Mirror is a geom object this parameter is unnecessary
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param NewMeshName the name of the new mesh to create
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def MirrorObjectMakeMesh (self, theObject, Mirror, theMirrorType=0,MakeGroups=0,NewMeshName=""):
+        """
+        Create a new mesh by a symmetrical copy of the object
+
+        Parameters:
+            theObject: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+            Mirror: :class:`SMESH.AxisStruct` or geom object (point, line, plane)
+            theMirrorType: smeshBuilder.POINT, smeshBuilder.AXIS or smeshBuilder.PLANE.
+                If the *Mirror* is a geom object this parameter is unnecessary
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the new mesh to create
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         if ( isinstance( Mirror, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4453,14 +5711,20 @@ class Mesh(metaclass=MeshMeta):
                                                 MakeGroups, NewMeshName)
         return Mesh( self.smeshpyD,self.geompyD,mesh )
 
-    ## Translate the elements
-    #  @param IDsOfElements list of elements ids
-    #  @param Vector the direction of translation (DirStruct or vector or 3 vector components)
-    #  @param Copy allows copying the translated elements
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def Translate(self, IDsOfElements, Vector, Copy, MakeGroups=False):
+        """
+        Translate the elements
+
+        Parameters:
+            IDsOfElements: list of elements ids
+            Vector: the direction of translation (:class:`SMESH.DirStruct` or vector or 3 vector components)
+            Copy: allows copying the translated elements
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Vector, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4473,14 +5737,20 @@ class Mesh(metaclass=MeshMeta):
         self.editor.Translate(IDsOfElements, Vector, Copy)
         return []
 
-    ## Create a new mesh of translated elements
-    #  @param IDsOfElements list of elements ids
-    #  @param Vector the direction of translation (DirStruct or vector or 3 vector components)
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param NewMeshName the name of the newly created mesh
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def TranslateMakeMesh(self, IDsOfElements, Vector, MakeGroups=False, NewMeshName=""):
+        """
+        Create a new mesh of translated elements
+
+        Parameters:
+            IDsOfElements: list of elements ids
+            Vector: the direction of translation (:class:`SMESH.DirStruct` or vector or 3 vector components)
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the newly created mesh
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Vector, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4491,14 +5761,20 @@ class Mesh(metaclass=MeshMeta):
         mesh = self.editor.TranslateMakeMesh(IDsOfElements, Vector, MakeGroups, NewMeshName)
         return Mesh ( self.smeshpyD, self.geompyD, mesh )
 
-    ## Translate the object
-    #  @param theObject the object to translate (mesh, submesh, or group)
-    #  @param Vector direction of translation (DirStruct or geom vector or 3 vector components)
-    #  @param Copy allows copying the translated elements
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def TranslateObject(self, theObject, Vector, Copy, MakeGroups=False):
+        """
+        Translate the object
+
+        Parameters:
+            theObject: the object to translate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            Vector: direction of translation (:class:`SMESH.DirStruct` or geom vector or 3 vector components)
+            Copy: allows copying the translated elements
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         if ( isinstance( Vector, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4511,14 +5787,20 @@ class Mesh(metaclass=MeshMeta):
         self.editor.TranslateObject(theObject, Vector, Copy)
         return []
 
-    ## Create a new mesh from the translated object
-    #  @param theObject the object to translate (mesh, submesh, or group)
-    #  @param Vector the direction of translation (DirStruct or geom vector or 3 vector components)
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param NewMeshName the name of the newly created mesh
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def TranslateObjectMakeMesh(self, theObject, Vector, MakeGroups=False, NewMeshName=""):
+        """
+        Create a new mesh from the translated object
+
+        Parameters:
+            theObject: the object to translate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            Vector: the direction of translation (:class:`SMESH.DirStruct` or geom vector or 3 vector components)
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the newly created mesh
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if isinstance( theObject, Mesh ):
             theObject = theObject.GetMesh()
         if isinstance( Vector, geomBuilder.GEOM._objref_GEOM_Object ):
@@ -4531,16 +5813,22 @@ class Mesh(metaclass=MeshMeta):
 
 
 
-    ## Scale the object
-    #  @param theObject - the object to translate (mesh, submesh, or group)
-    #  @param thePoint - base point for scale (SMESH.PointStruct or list of 3 coordinates)
-    #  @param theScaleFact - list of 1-3 scale factors for axises
-    #  @param Copy - allows copying the translated elements
-    #  @param MakeGroups - forces the generation of new groups from existing
-    #                      ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True,
-    #          empty list otherwise
     def Scale(self, theObject, thePoint, theScaleFact, Copy, MakeGroups=False):
+        """
+        Scale the object
+
+        Parameters:
+            theObject: the object to translate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            thePoint: base point for scale (:class:`SMESH.PointStruct` or list of 3 coordinates)
+            theScaleFact: list of 1-3 scale factors for axises
+            Copy: allows copying the translated elements
+            MakeGroups: forces the generation of new groups from existing
+                ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True,
+            empty list otherwise
+        """
         unRegister = genObjUnRegister()
         if ( isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
@@ -4561,14 +5849,20 @@ class Mesh(metaclass=MeshMeta):
         self.editor.Scale(theObject, thePoint, theScaleFact, Copy)
         return []
 
-    ## Create a new mesh from the translated object
-    #  @param theObject - the object to translate (mesh, submesh, or group)
-    #  @param thePoint - base point for scale (SMESH.PointStruct or list of 3 coordinates)
-    #  @param theScaleFact - list of 1-3 scale factors for axises
-    #  @param MakeGroups - forces the generation of new groups from existing ones
-    #  @param NewMeshName - the name of the newly created mesh
-    #  @return instance of Mesh class
     def ScaleMakeMesh(self, theObject, thePoint, theScaleFact, MakeGroups=False, NewMeshName=""):
+        """
+        Create a new mesh from the translated object
+
+        Parameters:
+            theObject: the object to translate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            thePoint: base point for scale (:class:`SMESH.PointStruct` or list of 3 coordinates)
+            theScaleFact: list of 1-3 scale factors for axises
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the newly created mesh
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
         unRegister = genObjUnRegister()
         if (isinstance(theObject, Mesh)):
             theObject = theObject.GetMesh()
@@ -4589,15 +5883,22 @@ class Mesh(metaclass=MeshMeta):
 
 
 
-    ## Rotate the elements
-    #  @param IDsOfElements list of elements ids
-    #  @param Axis the axis of rotation (AxisStruct or geom line)
-    #  @param AngleInRadians the angle of rotation (in radians) or a name of variable which defines angle in degrees
-    #  @param Copy allows copying the rotated elements
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def Rotate (self, IDsOfElements, Axis, AngleInRadians, Copy, MakeGroups=False):
+        """
+        Rotate the elements
+
+        Parameters:
+            IDsOfElements: list of elements ids
+            Axis: the axis of rotation (:class:`SMESH.AxisStruct` or geom line)
+            AngleInRadians: the angle of rotation (in radians) or a name of variable which defines angle in degrees
+            Copy: allows copying the rotated elements
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, empty list otherwise
+        """
+
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Axis, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4610,15 +5911,21 @@ class Mesh(metaclass=MeshMeta):
         self.editor.Rotate(IDsOfElements, Axis, AngleInRadians, Copy)
         return []
 
-    ## Create a new mesh of rotated elements
-    #  @param IDsOfElements list of element ids
-    #  @param Axis the axis of rotation (AxisStruct or geom line)
-    #  @param AngleInRadians the angle of rotation (in radians) or a name of variable which defines angle in degrees
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param NewMeshName the name of the newly created mesh
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def RotateMakeMesh (self, IDsOfElements, Axis, AngleInRadians, MakeGroups=0, NewMeshName=""):
+        """
+        Create a new mesh of rotated elements
+
+        Parameters:
+            IDsOfElements: list of element ids
+            Axis: the axis of rotation (:class:`SMESH.AxisStruct` or geom line)
+            AngleInRadians: the angle of rotation (in radians) or a name of variable which defines angle in degrees
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the newly created mesh
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if IDsOfElements == []:
             IDsOfElements = self.GetElementsId()
         if ( isinstance( Axis, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4630,15 +5937,21 @@ class Mesh(metaclass=MeshMeta):
                                           MakeGroups, NewMeshName)
         return Mesh( self.smeshpyD, self.geompyD, mesh )
 
-    ## Rotate the object
-    #  @param theObject the object to rotate( mesh, submesh, or group)
-    #  @param Axis the axis of rotation (AxisStruct or geom line)
-    #  @param AngleInRadians the angle of rotation (in radians) or a name of variable which defines angle in degrees
-    #  @param Copy allows copying the rotated elements
-    #  @param MakeGroups forces the generation of new groups from existing ones (if Copy)
-    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
-    #  @ingroup l2_modif_trsf
     def RotateObject (self, theObject, Axis, AngleInRadians, Copy, MakeGroups=False):
+        """
+        Rotate the object
+
+        Parameters:
+            theObject: the object to rotate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            Axis: the axis of rotation (:class:`SMESH.AxisStruct` or geom line)
+            AngleInRadians: the angle of rotation (in radians) or a name of variable which defines angle in degrees
+            Copy: allows copying the rotated elements
+            MakeGroups: forces the generation of new groups from existing ones (if Copy)
+
+        Returns:
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` if MakeGroups==True, empty list otherwise
+        """
+
         if (isinstance(theObject, Mesh)):
             theObject = theObject.GetMesh()
         if (isinstance(Axis, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4651,15 +5964,21 @@ class Mesh(metaclass=MeshMeta):
         self.editor.RotateObject(theObject, Axis, AngleInRadians, Copy)
         return []
 
-    ## Create a new mesh from the rotated object
-    #  @param theObject the object to rotate (mesh, submesh, or group)
-    #  @param Axis the axis of rotation (AxisStruct or geom line)
-    #  @param AngleInRadians the angle of rotation (in radians)  or a name of variable which defines angle in degrees
-    #  @param MakeGroups forces the generation of new groups from existing ones
-    #  @param NewMeshName the name of the newly created mesh
-    #  @return instance of Mesh class
-    #  @ingroup l2_modif_trsf
     def RotateObjectMakeMesh(self, theObject, Axis, AngleInRadians, MakeGroups=0,NewMeshName=""):
+        """
+        Create a new mesh from the rotated object
+
+        Parameters:
+            theObject: the object to rotate (:class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+            Axis: the axis of rotation (:class:`SMESH.AxisStruct` or geom line)
+            AngleInRadians: the angle of rotation (in radians)  or a name of variable which defines angle in degrees
+            MakeGroups: forces the generation of new groups from existing ones
+            NewMeshName: the name of the newly created mesh
+
+        Returns:
+            instance of class :class:`Mesh`
+        """
+
         if (isinstance( theObject, Mesh )):
             theObject = theObject.GetMesh()
         if (isinstance(Axis, geomBuilder.GEOM._objref_GEOM_Object)):
@@ -4671,27 +5990,64 @@ class Mesh(metaclass=MeshMeta):
         self.mesh.SetParameters(Parameters)
         return Mesh( self.smeshpyD, self.geompyD, mesh )
 
-    ## Find groups of adjacent nodes within Tolerance.
-    #  @param Tolerance the value of tolerance
-    #  @param SeparateCornerAndMediumNodes if @c True, in quadratic mesh puts
-    #         corner and medium nodes in separate groups thus preventing
-    #         their further merge.
-    #  @return the list of groups of nodes IDs (e.g. [[1,12,13],[4,25]])
-    #  @ingroup l2_modif_trsf
+    def Offset(self, theObject, Value, MakeGroups=False, CopyElements=False, NewMeshName=''):
+        """
+        Create an offset mesh from the given 2D object
+
+        Parameters:
+            theObject (SMESH.SMESH_IDSource): the source object (mesh, sub-mesh, group or filter)
+            theValue (float): signed offset size
+            MakeGroups (boolean): forces the generation of new groups from existing ones
+            CopyElements (boolean): if *NewMeshName* is empty, True means to keep original elements, 
+                          False means to remove original elements.
+            NewMeshName (string): the name of a mesh to create. If empty, offset elements are added to this mesh
+
+        Returns:
+            A tuple (:class:`Mesh`, list of :class:`groups <SMESH.SMESH_Group>`)
+        """
+
+        if isinstance( theObject, Mesh ):
+            theObject = theObject.GetMesh()
+        theValue,Parameters,hasVars = ParseParameters(Value)
+        mesh_groups = self.editor.Offset(theObject, Value, MakeGroups, CopyElements, NewMeshName)
+        self.mesh.SetParameters(Parameters)
+        # if mesh_groups[0]:
+        #     return Mesh( self.smeshpyD, self.geompyD, mesh_groups[0] ), mesh_groups[1]
+        return mesh_groups
+
     def FindCoincidentNodes (self, Tolerance, SeparateCornerAndMediumNodes=False):
+        """
+        Find groups of adjacent nodes within Tolerance.
+
+        Parameters:
+            Tolerance (float): the value of tolerance
+            SeparateCornerAndMediumNodes (boolean): if *True*, in quadratic mesh puts
+                corner and medium nodes in separate groups thus preventing
+                their further merge.
+
+        Returns:
+            the list of groups of nodes IDs (e.g. [[1,12,13],[4,25]])
+        """
+
         return self.editor.FindCoincidentNodes( Tolerance, SeparateCornerAndMediumNodes )
 
-    ## Find groups of ajacent nodes within Tolerance.
-    #  @param Tolerance the value of tolerance
-    #  @param SubMeshOrGroup SubMesh, Group or Filter
-    #  @param exceptNodes list of either SubMeshes, Groups or node IDs to exclude from search
-    #  @param SeparateCornerAndMediumNodes if @c True, in quadratic mesh puts
-    #         corner and medium nodes in separate groups thus preventing
-    #         their further merge.
-    #  @return the list of groups of nodes IDs (e.g. [[1,12,13],[4,25]])
-    #  @ingroup l2_modif_trsf
     def FindCoincidentNodesOnPart (self, SubMeshOrGroup, Tolerance,
                                    exceptNodes=[], SeparateCornerAndMediumNodes=False):
+        """
+        Find groups of ajacent nodes within Tolerance.
+
+        Parameters:
+            Tolerance: the value of tolerance
+            SubMeshOrGroup: :class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+            exceptNodes: list of either SubMeshes, Groups or node IDs to exclude from search
+            SeparateCornerAndMediumNodes: if *True*, in quadratic mesh puts
+                corner and medium nodes in separate groups thus preventing
+                their further merge.
+
+        Returns:
+            the list of groups of nodes IDs (e.g. [[1,12,13],[4,25]])
+        """
+
         unRegister = genObjUnRegister()
         if (isinstance( SubMeshOrGroup, Mesh )):
             SubMeshOrGroup = SubMeshOrGroup.GetMesh()
@@ -4703,87 +6059,123 @@ class Mesh(metaclass=MeshMeta):
         return self.editor.FindCoincidentNodesOnPartBut(SubMeshOrGroup, Tolerance,
                                                         exceptNodes, SeparateCornerAndMediumNodes)
 
-    ## Merge nodes
-    #  @param GroupsOfNodes a list of groups of nodes IDs for merging
-    #         (e.g. [[1,12,13],[25,4]], then nodes 12, 13 and 4 will be removed and replaced
-    #         by nodes 1 and 25 correspondingly in all elements and groups
-    #  @param NodesToKeep nodes to keep in the mesh: a list of groups, sub-meshes or node IDs.
-    #         If @a NodesToKeep does not include a node to keep for some group to merge,
-    #         then the first node in the group is kept.
-    #  @param AvoidMakingHoles prevent merging nodes which cause removal of elements becoming
-    #         invalid
-    #  @ingroup l2_modif_trsf
     def MergeNodes (self, GroupsOfNodes, NodesToKeep=[], AvoidMakingHoles=False):
-        # NodesToKeep are converted to SMESH_IDSource in meshEditor.MergeNodes()
+        """
+        Merge nodes
+
+        Parameters:
+            GroupsOfNodes: a list of groups of nodes IDs for merging.
+                E.g. [[1,12,13],[25,4]] means that nodes 12, 13 and 4 will be removed and replaced
+                in all elements and groups by nodes 1 and 25 correspondingly
+            NodesToKeep: nodes to keep in the mesh: a list of groups, sub-meshes or node IDs.
+                If *NodesToKeep* does not include a node to keep for some group to merge,
+                then the first node in the group is kept.
+            AvoidMakingHoles: prevent merging nodes which cause removal of elements becoming
+                invalid
+        """
+        # NodesToKeep are converted to SMESH.SMESH_IDSource in meshEditor.MergeNodes()
         self.editor.MergeNodes( GroupsOfNodes, NodesToKeep, AvoidMakingHoles )
 
-    ## Find the elements built on the same nodes.
-    #  @param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching
-    #  @return the list of groups of equal elements IDs (e.g. [[1,12,13],[4,25]])
-    #  @ingroup l2_modif_trsf
     def FindEqualElements (self, MeshOrSubMeshOrGroup=None):
+        """
+        Find the elements built on the same nodes.
+
+        Parameters:
+            MeshOrSubMeshOrGroup: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
+
+        Returns:
+            the list of groups of equal elements IDs (e.g. [[1,12,13],[4,25]])
+        """
+
         if not MeshOrSubMeshOrGroup:
             MeshOrSubMeshOrGroup=self.mesh
         elif isinstance( MeshOrSubMeshOrGroup, Mesh ):
             MeshOrSubMeshOrGroup = MeshOrSubMeshOrGroup.GetMesh()
         return self.editor.FindEqualElements( MeshOrSubMeshOrGroup )
 
-    ## Merge elements in each given group.
-    #  @param GroupsOfElementsID a list of groups of elements IDs for merging
-    #        (e.g. [[1,12,13],[25,4]], then elements 12, 13 and 4 will be removed and
-    #        replaced by elements 1 and 25 in all groups)
-    #  @ingroup l2_modif_trsf
     def MergeElements(self, GroupsOfElementsID):
+        """
+        Merge elements in each given group.
+
+        Parameters:
+            GroupsOfElementsID: a list of groups (lists) of elements IDs for merging
+                (e.g. [[1,12,13],[25,4]] means that elements 12, 13 and 4 will be removed and
+                replaced in all groups by elements 1 and 25)
+        """
+
         self.editor.MergeElements(GroupsOfElementsID)
 
-    ## Leave one element and remove all other elements built on the same nodes.
-    #  @ingroup l2_modif_trsf
     def MergeEqualElements(self):
+        """
+        Leave one element and remove all other elements built on the same nodes.
+        """
+
         self.editor.MergeEqualElements()
 
-    ## Returns all or only closed free borders
-    #  @return list of SMESH.FreeBorder's
-    #  @ingroup l2_modif_trsf
     def FindFreeBorders(self, ClosedOnly=True):
+        """
+        Returns all or only closed free borders
+
+        Returns:
+            list of SMESH.FreeBorder's
+        """
+
         return self.editor.FindFreeBorders( ClosedOnly )
 
-    ## Fill with 2D elements a hole defined by a SMESH.FreeBorder.
-    #  @param FreeBorder either a SMESH.FreeBorder or a list on node IDs. These nodes
-    #         must describe all sequential nodes of the hole border. The first and the last
-    #         nodes must be the same. Use FindFreeBorders() to get nodes of holes.
-    #  @ingroup l2_modif_trsf
     def FillHole(self, holeNodes):
+        """
+        Fill with 2D elements a hole defined by a SMESH.FreeBorder.
+
+        Parameters:
+            FreeBorder: either a SMESH.FreeBorder or a list on node IDs. These nodes
+                must describe all sequential nodes of the hole border. The first and the last
+                nodes must be the same. Use :meth:`FindFreeBorders` to get nodes of holes.
+        """
+
+
         if holeNodes and isinstance( holeNodes, list ) and isinstance( holeNodes[0], int ):
             holeNodes = SMESH.FreeBorder(nodeIDs=holeNodes)
         if not isinstance( holeNodes, SMESH.FreeBorder ):
             raise TypeError("holeNodes must be either SMESH.FreeBorder or list of integer and not %s" % holeNodes)
         self.editor.FillHole( holeNodes )
 
-    ## Return groups of FreeBorder's coincident within the given tolerance.
-    #  @param tolerance the tolerance. If the tolerance <= 0.0 then one tenth of an average
-    #         size of elements adjacent to free borders being compared is used.
-    #  @return SMESH.CoincidentFreeBorders structure
-    #  @ingroup l2_modif_trsf
     def FindCoincidentFreeBorders (self, tolerance=0.):
+        """
+        Return groups of FreeBorder's coincident within the given tolerance.
+
+        Parameters:
+            tolerance: the tolerance. If the tolerance <= 0.0 then one tenth of an average
+                size of elements adjacent to free borders being compared is used.
+
+        Returns:
+            SMESH.CoincidentFreeBorders structure
+        """
+
         return self.editor.FindCoincidentFreeBorders( tolerance )
 
-    ## Sew FreeBorder's of each group
-    #  @param freeBorders either a SMESH.CoincidentFreeBorders structure or a list of lists
-    #         where each enclosed list contains node IDs of a group of coincident free
-    #         borders such that each consequent triple of IDs within a group describes
-    #         a free border in a usual way: n1, n2, nLast - i.e. 1st node, 2nd node and
-    #         last node of a border.
-    #         For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes two
-    #         groups of coincident free borders, each group including two borders.
-    #  @param createPolygons if @c True faces adjacent to free borders are converted to
-    #         polygons if a node of opposite border falls on a face edge, else such
-    #         faces are split into several ones.
-    #  @param createPolyhedra if @c True volumes adjacent to free borders are converted to
-    #         polyhedra if a node of opposite border falls on a volume edge, else such
-    #         volumes, if any, remain intact and the mesh becomes non-conformal.
-    #  @return a number of successfully sewed groups
-    #  @ingroup l2_modif_trsf
     def SewCoincidentFreeBorders (self, freeBorders, createPolygons=False, createPolyhedra=False):
+        """
+        Sew FreeBorder's of each group
+
+        Parameters:
+            freeBorders: either a SMESH.CoincidentFreeBorders structure or a list of lists
+                where each enclosed list contains node IDs of a group of coincident free
+                borders such that each consequent triple of IDs within a group describes
+                a free border in a usual way: n1, n2, nLast - i.e. 1st node, 2nd node and
+                last node of a border.
+                For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes two
+                groups of coincident free borders, each group including two borders.
+            createPolygons: if :code:`True` faces adjacent to free borders are converted to
+                polygons if a node of opposite border falls on a face edge, else such
+                faces are split into several ones.
+            createPolyhedra: if :code:`True` volumes adjacent to free borders are converted to
+                polyhedra if a node of opposite border falls on a volume edge, else such
+                volumes, if any, remain intact and the mesh becomes non-conformal.
+
+        Returns:
+            a number of successfully sewed groups
+        """
+
         if freeBorders and isinstance( freeBorders, list ):
             # construct SMESH.CoincidentFreeBorders
             if isinstance( freeBorders[0], int ):
@@ -4805,89 +6197,129 @@ class Mesh(metaclass=MeshMeta):
 
         return self.editor.SewCoincidentFreeBorders( freeBorders, createPolygons, createPolyhedra )
 
-    ## Sew free borders
-    #  @return SMESH::Sew_Error
-    #  @ingroup l2_modif_trsf
     def SewFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1,
                         FirstNodeID2, SecondNodeID2, LastNodeID2,
                         CreatePolygons, CreatePolyedrs):
+        """
+        Sew free borders
+
+        Returns:
+            :class:`error code <SMESH.SMESH_MeshEditor.Sew_Error>`
+        """
+
         return self.editor.SewFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
                                           FirstNodeID2, SecondNodeID2, LastNodeID2,
                                           CreatePolygons, CreatePolyedrs)
 
-    ## Sew conform free borders
-    #  @return SMESH::Sew_Error
-    #  @ingroup l2_modif_trsf
     def SewConformFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1,
                                FirstNodeID2, SecondNodeID2):
+        """
+        Sew conform free borders
+
+        Returns:
+            :class:`error code <SMESH.SMESH_MeshEditor.Sew_Error>`
+        """
+
         return self.editor.SewConformFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
                                                  FirstNodeID2, SecondNodeID2)
 
-    ## Sew border to side
-    #  @return SMESH::Sew_Error
-    #  @ingroup l2_modif_trsf
     def SewBorderToSide (self, FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
                          FirstNodeIDOnSide, LastNodeIDOnSide, CreatePolygons, CreatePolyedrs):
+        """
+        Sew border to side
+
+        Returns:
+            :class:`error code <SMESH.SMESH_MeshEditor.Sew_Error>`
+        """
+
         return self.editor.SewBorderToSide(FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
                                            FirstNodeIDOnSide, LastNodeIDOnSide, CreatePolygons, CreatePolyedrs)
 
-    ## Sew two sides of a mesh. The nodes belonging to Side1 are
-    #  merged with the nodes of elements of Side2.
-    #  The number of elements in theSide1 and in theSide2 must be
-    #  equal and they should have similar nodal connectivity.
-    #  The nodes to merge should belong to side borders and
-    #  the first node should be linked to the second.
-    #  @return SMESH::Sew_Error
-    #  @ingroup l2_modif_trsf
     def SewSideElements (self, IDsOfSide1Elements, IDsOfSide2Elements,
                          NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
                          NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge):
+        """
+        Sew two sides of a mesh. The nodes belonging to Side1 are
+        merged with the nodes of elements of Side2.
+        The number of elements in theSide1 and in theSide2 must be
+        equal and they should have similar nodal connectivity.
+        The nodes to merge should belong to side borders and
+        the first node should be linked to the second.
+
+        Returns:
+            :class:`error code <SMESH.SMESH_MeshEditor.Sew_Error>`
+        """
+
         return self.editor.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
                                            NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
                                            NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
 
-    ## Set new nodes for the given element.
-    #  @param ide the element id
-    #  @param newIDs nodes ids
-    #  @return If the number of nodes does not correspond to the type of element - return false
-    #  @ingroup l2_modif_edit
     def ChangeElemNodes(self, ide, newIDs):
+        """
+        Set new nodes for the given element.
+
+        Parameters:
+            ide: the element ID
+            newIDs: nodes IDs
+
+        Returns:
+            False if the number of nodes does not correspond to the type of element
+        """
+
         return self.editor.ChangeElemNodes(ide, newIDs)
 
-    ## If during the last operation of MeshEditor some nodes were
-    #  created, this method return the list of their IDs, \n
-    #  if new nodes were not created - return empty list
-    #  @return the list of integer values (can be empty)
-    #  @ingroup l2_modif_add
     def GetLastCreatedNodes(self):
+        """
+        If during the last operation of :class:`SMESH.SMESH_MeshEditor` some nodes were
+        created, this method return the list of their IDs.
+        If new nodes were not created - return empty list
+
+        Returns:
+            the list of integer values (can be empty)
+        """
+
         return self.editor.GetLastCreatedNodes()
 
-    ## If during the last operation of MeshEditor some elements were
-    #  created this method return the list of their IDs, \n
-    #  if new elements were not created - return empty list
-    #  @return the list of integer values (can be empty)
-    #  @ingroup l2_modif_add
     def GetLastCreatedElems(self):
+        """
+        If during the last operation of :class:`SMESH.SMESH_MeshEditor` some elements were
+        created this method return the list of their IDs.
+        If new elements were not created - return empty list
+
+        Returns:
+            the list of integer values (can be empty)
+        """
+
         return self.editor.GetLastCreatedElems()
 
-    ## Forget what nodes and elements were created by the last mesh edition operation
-    #  @ingroup l2_modif_add
     def ClearLastCreated(self):
+        """
+        Forget what nodes and elements were created by the last mesh edition operation
+        """
+
         self.editor.ClearLastCreated()
 
-    ## Create duplicates of given elements, i.e. create new elements based on the
-    #  same nodes as the given ones.
-    #  @param theElements - container of elements to duplicate. It can be a Mesh,
-    #         sub-mesh, group, filter or a list of element IDs. If \a theElements is
-    #         a Mesh, elements of highest dimension are duplicated
-    #  @param theGroupName - a name of group to contain the generated elements.
-    #                    If a group with such a name already exists, the new elements
-    #                    are added to the existng group, else a new group is created.
-    #                    If \a theGroupName is empty, new elements are not added
-    #                    in any group.
-    # @return a group where the new elements are added. None if theGroupName == "".
-    #  @ingroup l2_modif_duplicat
     def DoubleElements(self, theElements, theGroupName=""):
+        """
+        Create duplicates of given elements, i.e. create new elements based on the
+        same nodes as the given ones.
+
+        Parameters:
+            theElements: container of elements to duplicate. It can be a
+                :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` 
+                or a list of element IDs. If *theElements* is
+                a :class:`Mesh`, elements of highest dimension are duplicated
+            theGroupName: a name of group to contain the generated elements.
+                If a group with such a name already exists, the new elements
+                are added to the existng group, else a new group is created.
+                If *theGroupName* is empty, new elements are not added
+                in any group.
+
+        Returns:
+                a :class:`group <SMESH.SMESH_Group>` where the new elements are added. 
+                None if *theGroupName* == "".
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( theElements, Mesh ):
             theElements = theElements.mesh
@@ -4896,86 +6328,128 @@ class Mesh(metaclass=MeshMeta):
             unRegister.set( theElements )
         return self.editor.DoubleElements(theElements, theGroupName)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  @param theNodes identifiers of nodes to be doubled
-    #  @param theModifiedElems identifiers of elements to be updated by the new (doubled)
-    #         nodes. If list of element identifiers is empty then nodes are doubled but
-    #         they not assigned to elements
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodes(self, theNodes, theModifiedElems):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements
+
+        Parameters:
+            theNodes: IDs of nodes to be doubled
+            theModifiedElems: IDs of elements to be updated by the new (doubled)
+                nodes. If list of element identifiers is empty then nodes are doubled but
+                they not assigned to elements
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNodes(theNodes, theModifiedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theNodeId identifiers of node to be doubled
-    #  @param theModifiedElems identifiers of elements to be updated
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNode(self, theNodeId, theModifiedElems):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theNodeId: IDs of node to double
+            theModifiedElems: IDs of elements to update
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNode(theNodeId, theModifiedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theNodes group of nodes to be doubled
-    #  @param theModifiedElems group of elements to be updated.
-    #  @param theMakeGroup forces the generation of a group containing new nodes.
-    #  @return TRUE or a created group if operation has been completed successfully,
-    #          FALSE or None otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeGroup(self, theNodes, theModifiedElems, theMakeGroup=False):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theNodes: group of nodes to double.
+            theModifiedElems: group of elements to update.
+            theMakeGroup: forces the generation of a group containing new nodes.
+
+        Returns:
+            True or a created group if operation has been completed successfully,
+            False or None otherwise
+        """
+
         if theMakeGroup:
             return self.editor.DoubleNodeGroupNew(theNodes, theModifiedElems)
         return self.editor.DoubleNodeGroup(theNodes, theModifiedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theNodes list of groups of nodes to be doubled
-    #  @param theModifiedElems list of groups of elements to be updated.
-    #  @param theMakeGroup forces the generation of a group containing new nodes.
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeGroups(self, theNodes, theModifiedElems, theMakeGroup=False):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theNodes: list of groups of nodes to double.
+            theModifiedElems: list of groups of elements to update.
+            theMakeGroup: forces the generation of a group containing new nodes.
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         if theMakeGroup:
             return self.editor.DoubleNodeGroupsNew(theNodes, theModifiedElems)
         return self.editor.DoubleNodeGroups(theNodes, theModifiedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  @param theElems - the list of elements (edges or faces) to be replicated
-    #         The nodes for duplication could be found from these elements
-    #  @param theNodesNot - list of nodes to NOT replicate
-    #  @param theAffectedElems - the list of elements (cells and edges) to which the
-    #         replicated nodes should be associated to.
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElem(self, theElems, theNodesNot, theAffectedElems):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements
+
+        Parameters:
+            theElems: the list of elements (edges or faces) to replicate.
+                The nodes for duplication could be found from these elements
+            theNodesNot: list of nodes NOT to replicate
+            theAffectedElems: the list of elements (cells and edges) to which the
+                replicated nodes should be associated to
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNodeElem(theElems, theNodesNot, theAffectedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  @param theElems - the list of elements (edges or faces) to be replicated
-    #         The nodes for duplication could be found from these elements
-    #  @param theNodesNot - list of nodes to NOT replicate
-    #  @param theShape - shape to detect affected elements (element which geometric center
-    #         located on or inside shape).
-    #         The replicated nodes should be associated to affected elements.
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElemInRegion(self, theElems, theNodesNot, theShape):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements
+
+        Parameters:
+            theElems: the list of elements (edges or faces) to replicate.
+                The nodes for duplication could be found from these elements
+            theNodesNot: list of nodes NOT to replicate
+            theShape: shape to detect affected elements (element which geometric center
+                located on or inside shape).
+                The replicated nodes should be associated to affected elements.
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNodeElemInRegion(theElems, theNodesNot, theShape)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theElems - group of of elements (edges or faces) to be replicated
-    #  @param theNodesNot - group of nodes not to replicated
-    #  @param theAffectedElems - group of elements to which the replicated nodes
-    #         should be associated to.
-    #  @param theMakeGroup forces the generation of a group containing new elements.
-    #  @param theMakeNodeGroup forces the generation of a group containing new nodes.
-    #  @return TRUE or created groups (one or two) if operation has been completed successfully,
-    #          FALSE or None otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElemGroup(self, theElems, theNodesNot, theAffectedElems,
                              theMakeGroup=False, theMakeNodeGroup=False):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theElems: group of of elements (edges or faces) to replicate.
+            theNodesNot: group of nodes NOT to replicate.
+            theAffectedElems: group of elements to which the replicated nodes
+                should be associated to.
+            theMakeGroup: forces the generation of a group containing new elements.
+            theMakeNodeGroup: forces the generation of a group containing new nodes.
+
+        Returns:
+            True or created groups (one or two) if operation has been completed successfully,
+            False or None otherwise
+        """
+
         if theMakeGroup or theMakeNodeGroup:
             twoGroups = self.editor.DoubleNodeElemGroup2New(theElems, theNodesNot,
                                                             theAffectedElems,
@@ -4986,30 +6460,40 @@ class Mesh(metaclass=MeshMeta):
                 return twoGroups[ int(theMakeNodeGroup) ]
         return self.editor.DoubleNodeElemGroup(theElems, theNodesNot, theAffectedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theElems - group of of elements (edges or faces) to be replicated
-    #  @param theNodesNot - group of nodes not to replicated
-    #  @param theShape - shape to detect affected elements (element which geometric center
-    #         located on or inside shape).
-    #         The replicated nodes should be associated to affected elements.
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElemGroupInRegion(self, theElems, theNodesNot, theShape):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theElems: group of of elements (edges or faces) to replicate
+            theNodesNot: group of nodes not to replicate
+            theShape: shape to detect affected elements (element which geometric center
+                located on or inside shape).
+                The replicated nodes should be associated to affected elements
+        """
+
         return self.editor.DoubleNodeElemGroupInRegion(theElems, theNodesNot, theShape)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theElems - list of groups of elements (edges or faces) to be replicated
-    #  @param theNodesNot - list of groups of nodes not to replicated
-    #  @param theAffectedElems - group of elements to which the replicated nodes
-    #         should be associated to.
-    #  @param theMakeGroup forces the generation of a group containing new elements.
-    #  @param theMakeNodeGroup forces the generation of a group containing new nodes.
-    #  @return TRUE or created groups (one or two) if operation has been completed successfully,
-    #          FALSE or None otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElemGroups(self, theElems, theNodesNot, theAffectedElems,
                              theMakeGroup=False, theMakeNodeGroup=False):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theElems: list of groups of elements (edges or faces) to replicate
+            theNodesNot: list of groups of nodes NOT to replicate
+            theAffectedElems: group of elements to which the replicated nodes
+                should be associated to
+            theMakeGroup: forces generation of a group containing new elements.
+            theMakeNodeGroup: forces generation of a group containing new nodes
+
+        Returns:
+            True or created groups (one or two) if operation has been completed successfully,
+            False or None otherwise
+        """
+
         if theMakeGroup or theMakeNodeGroup:
             twoGroups = self.editor.DoubleNodeElemGroups2New(theElems, theNodesNot,
                                                              theAffectedElems,
@@ -5020,76 +6504,106 @@ class Mesh(metaclass=MeshMeta):
                 return twoGroups[ int(theMakeNodeGroup) ]
         return self.editor.DoubleNodeElemGroups(theElems, theNodesNot, theAffectedElems)
 
-    ## Create a hole in a mesh by doubling the nodes of some particular elements
-    #  This method provided for convenience works as DoubleNodes() described above.
-    #  @param theElems - list of groups of elements (edges or faces) to be replicated
-    #  @param theNodesNot - list of groups of nodes not to replicated
-    #  @param theShape - shape to detect affected elements (element which geometric center
-    #         located on or inside shape).
-    #         The replicated nodes should be associated to affected elements.
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodeElemGroupsInRegion(self, theElems, theNodesNot, theShape):
+        """
+        Create a hole in a mesh by doubling the nodes of some particular elements.
+        This method provided for convenience works as :meth:`DoubleNodes`.
+
+        Parameters:
+            theElems: list of groups of elements (edges or faces) to replicate
+            theNodesNot: list of groups of nodes NOT to replicate
+            theShape: shape to detect affected elements (element which geometric center
+                located on or inside shape).
+                The replicated nodes should be associated to affected elements
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNodeElemGroupsInRegion(theElems, theNodesNot, theShape)
 
-    ## Identify the elements that will be affected by node duplication (actual duplication is not performed.
-    #  This method is the first step of DoubleNodeElemGroupsInRegion.
-    #  @param theElems - list of groups of nodes or elements (edges or faces) to be replicated
-    #  @param theNodesNot - list of groups of nodes not to replicated
-    #  @param theShape - shape to detect affected elements (element which geometric center
-    #         located on or inside shape).
-    #         The replicated nodes should be associated to affected elements.
-    #  @return groups of affected elements in order: volumes, faces, edges
-    #  @ingroup l2_modif_duplicat
     def AffectedElemGroupsInRegion(self, theElems, theNodesNot, theShape):
+        """
+        Identify the elements that will be affected by node duplication (actual duplication is not performed).
+        This method is the first step of :meth:`DoubleNodeElemGroupsInRegion`.
+
+        Parameters:
+            theElems: list of groups of nodes or elements (edges or faces) to replicate
+            theNodesNot: list of groups of nodes NOT to replicate
+            theShape: shape to detect affected elements (element which geometric center
+                located on or inside shape).
+                The replicated nodes should be associated to affected elements
+
+        Returns:
+            groups of affected elements in order: volumes, faces, edges
+        """
+
         return self.editor.AffectedElemGroupsInRegion(theElems, theNodesNot, theShape)
 
-    ## Double nodes on shared faces between groups of volumes and create flat elements on demand.
-    #  The list of groups must describe a partition of the mesh volumes.
-    #  The nodes of the internal faces at the boundaries of the groups are doubled.
-    #  In option, the internal faces are replaced by flat elements.
-    #  Triangles are transformed in prisms, and quadrangles in hexahedrons.
-    #  @param theDomains - list of groups of volumes
-    #  @param createJointElems - if TRUE, create the elements
-    #  @param onAllBoundaries - if TRUE, the nodes and elements are also created on
-    #         the boundary between \a theDomains and the rest mesh
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def DoubleNodesOnGroupBoundaries(self, theDomains, createJointElems, onAllBoundaries=False ):
+
+        """
+        Double nodes on shared faces between groups of volumes and create flat elements on demand.
+        The list of groups must describe a partition of the mesh volumes.
+        The nodes of the internal faces at the boundaries of the groups are doubled.
+        In option, the internal faces are replaced by flat elements.
+        Triangles are transformed to prisms, and quadrangles to hexahedrons.
+
+        Parameters:
+            theDomains: list of groups of volumes
+            createJointElems: if True, create the elements
+            onAllBoundaries: if True, the nodes and elements are also created on
+                the boundary between *theDomains* and the rest mesh
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.DoubleNodesOnGroupBoundaries( theDomains, createJointElems, onAllBoundaries )
 
-    ## Double nodes on some external faces and create flat elements.
-    #  Flat elements are mainly used by some types of mechanic calculations.
-    #
-    #  Each group of the list must be constituted of faces.
-    #  Triangles are transformed in prisms, and quadrangles in hexahedrons.
-    #  @param theGroupsOfFaces - list of groups of faces
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
-    #  @ingroup l2_modif_duplicat
     def CreateFlatElementsOnFacesGroups(self, theGroupsOfFaces ):
+        """
+        Double nodes on some external faces and create flat elements.
+        Flat elements are mainly used by some types of mechanic calculations.
+
+        Each group of the list must be constituted of faces.
+        Triangles are transformed in prisms, and quadrangles in hexahedrons.
+
+        Parameters:
+            theGroupsOfFaces: list of groups of faces
+
+        Returns:
+            True if operation has been completed successfully, False otherwise
+        """
+
         return self.editor.CreateFlatElementsOnFacesGroups( theGroupsOfFaces )
 
-    ## identify all the elements around a geom shape, get the faces delimiting the hole
-    #
     def CreateHoleSkin(self, radius, theShape, groupName, theNodesCoords):
+        """
+        Identify all the elements around a geom shape, get the faces delimiting the hole
+        """
         return self.editor.CreateHoleSkin( radius, theShape, groupName, theNodesCoords )
 
-    ## Create a polyline consisting of 1D mesh elements each lying on a 2D element of
-    #  the initial mesh. Positions of new nodes are found by cutting the mesh by the
-    #  plane passing through pairs of points specified by each PolySegment structure.
-    #  If there are several paths connecting a pair of points, the shortest path is
-    #  selected by the module. Position of the cutting plane is defined by the two
-    #  points and an optional vector lying on the plane specified by a PolySegment.
-    #  By default the vector is defined by Mesh module as following. A middle point
-    #  of the two given points is computed. The middle point is projected to the mesh.
-    #  The vector goes from the middle point to the projection point. In case of planar
-    #  mesh, the vector is normal to the mesh.
-    #  @param segments - PolySegment's defining positions of cutting planes.
-    #         Return the used vector which goes from the middle point to its projection.
-    #  @param groupName - optional name of a group where created mesh segments will
-    #         be added.
-    #  @ingroup l2_modif_duplicat
     def MakePolyLine(self, segments, groupName='', isPreview=False ):
+        """    
+        Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+        plane passing through pairs of points specified by each :class:`SMESH.PolySegment` structure.
+        If there are several paths connecting a pair of points, the shortest path is
+        selected by the module. Position of the cutting plane is defined by the two
+        points and an optional vector lying on the plane specified by a PolySegment.
+        By default the vector is defined by Mesh module as following. A middle point
+        of the two given points is computed. The middle point is projected to the mesh.
+        The vector goes from the middle point to the projection point. In case of planar
+        mesh, the vector is normal to the mesh.
+
+        *segments* [i].vector returns the used vector which goes from the middle point to its projection.
+
+        Parameters:        
+            segments: list of :class:`SMESH.PolySegment` defining positions of cutting planes.
+            groupName: optional name of a group where created mesh segments will be added.
+            
+        """    
         editor = self.editor
         if isPreview:
             editor = self.mesh.GetMeshEditPreviewer()
@@ -5100,29 +6614,38 @@ class Mesh(metaclass=MeshMeta):
             return editor.GetPreviewData()
         return None        
 
-    ## Return a cached numerical functor by its type.
-    #  @param theCriterion functor type - an item of SMESH.FunctorType enumeration.
-    #          Type SMESH.FunctorType._items in the Python Console to see all items.
-    #          Note that not all items correspond to numerical functors.
-    #  @return SMESH_NumericalFunctor. The functor is already initialized
-    #          with a mesh
-    #  @ingroup l1_measurements
     def GetFunctor(self, funcType ):
+        """
+        Return a cached numerical functor by its type.
+
+        Parameters:
+            funcType: functor type: an item of :class:`SMESH.FunctorType` enumeration.
+                Note that not all items correspond to numerical functors.
+
+        Returns:
+            :class:`SMESH.NumericalFunctor`. The functor is already initialized with a mesh
+        """
+
         fn = self.functors[ funcType._v ]
         if not fn:
             fn = self.smeshpyD.GetFunctor(funcType)
             fn.SetMesh(self.mesh)
-            self.functors[ EnumToLong(funcType) ] = fn
+            self.functors[ funcType._v ] = fn
         return fn
 
-    ## Return value of a functor for a given element
-    #  @param funcType an item of SMESH.FunctorType enum
-    #         Type "SMESH.FunctorType._items" in the Python Console to see all items.
-    #  @param elemId element or node ID
-    #  @param isElem @a elemId is ID of element or node
-    #  @return the functor value or zero in case of invalid arguments
-    #  @ingroup l1_measurements
     def FunctorValue(self, funcType, elemId, isElem=True):
+        """
+        Return value of a functor for a given element
+
+        Parameters:
+            funcType: an item of :class:`SMESH.FunctorType` enum.
+            elemId: element or node ID
+            isElem: *elemId* is ID of element or node
+
+        Returns:
+            the functor value or zero in case of invalid arguments
+        """
+
         fn = self.GetFunctor( funcType )
         if fn.GetElementType() == self.GetElementType(elemId, isElem):
             val = fn.GetValue(elemId)
@@ -5130,11 +6653,17 @@ class Mesh(metaclass=MeshMeta):
             val = 0
         return val
 
-    ## Get length of 1D element or sum of lengths of all 1D mesh elements
-    #  @param elemId mesh element ID (if not defined - sum of length of all 1D elements will be calculated)
-    #  @return element's length value if \a elemId is specified or sum of all 1D mesh elements' lengths otherwise
-    #  @ingroup l1_measurements
     def GetLength(self, elemId=None):
+        """
+        Get length of 1D element or sum of lengths of all 1D mesh elements
+
+        Parameters:
+            elemId: mesh element ID (if not defined - sum of length of all 1D elements will be calculated)
+
+        Returns:
+            element's length value if *elemId* is specified or sum of all 1D mesh elements' lengths otherwise
+        """
+
         length = 0
         if elemId == None:
             length = self.smeshpyD.GetLength(self)
@@ -5142,11 +6671,15 @@ class Mesh(metaclass=MeshMeta):
             length = self.FunctorValue(SMESH.FT_Length, elemId)
         return length
 
-    ## Get area of 2D element or sum of areas of all 2D mesh elements
-    #  @param elemId mesh element ID (if not defined - sum of areas of all 2D elements will be calculated)
-    #  @return element's area value if \a elemId is specified or sum of all 2D mesh elements' areas otherwise
-    #  @ingroup l1_measurements
     def GetArea(self, elemId=None):
+        """
+        Get area of 2D element or sum of areas of all 2D mesh elements
+        elemId mesh element ID (if not defined - sum of areas of all 2D elements will be calculated)
+
+        Returns:
+            element's area value if *elemId* is specified or sum of all 2D mesh elements' areas otherwise
+        """
+
         area = 0
         if elemId == None:
             area = self.smeshpyD.GetArea(self)
@@ -5154,11 +6687,17 @@ class Mesh(metaclass=MeshMeta):
             area = self.FunctorValue(SMESH.FT_Area, elemId)
         return area
 
-    ## Get volume of 3D element or sum of volumes of all 3D mesh elements
-    #  @param elemId mesh element ID (if not defined - sum of volumes of all 3D elements will be calculated)
-    #  @return element's volume value if \a elemId is specified or sum of all 3D mesh elements' volumes otherwise
-    #  @ingroup l1_measurements
     def GetVolume(self, elemId=None):
+        """
+        Get volume of 3D element or sum of volumes of all 3D mesh elements
+
+        Parameters:
+            elemId: mesh element ID (if not defined - sum of volumes of all 3D elements will be calculated)
+
+        Returns:
+            element's volume value if *elemId* is specified or sum of all 3D mesh elements' volumes otherwise
+        """
+
         volume = 0
         if elemId == None:
             volume = self.smeshpyD.GetVolume(self)
@@ -5166,63 +6705,106 @@ class Mesh(metaclass=MeshMeta):
             volume = self.FunctorValue(SMESH.FT_Volume3D, elemId)
         return volume
 
-    ## Get maximum element length.
-    #  @param elemId mesh element ID
-    #  @return element's maximum length value
-    #  @ingroup l1_measurements
     def GetMaxElementLength(self, elemId):
+        """
+        Get maximum element length.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's maximum length value
+        """
+
         if self.GetElementType(elemId, True) == SMESH.VOLUME:
             ftype = SMESH.FT_MaxElementLength3D
         else:
             ftype = SMESH.FT_MaxElementLength2D
         return self.FunctorValue(ftype, elemId)
 
-    ## Get aspect ratio of 2D or 3D element.
-    #  @param elemId mesh element ID
-    #  @return element's aspect ratio value
-    #  @ingroup l1_measurements
     def GetAspectRatio(self, elemId):
+        """
+        Get aspect ratio of 2D or 3D element.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's aspect ratio value
+        """
+
         if self.GetElementType(elemId, True) == SMESH.VOLUME:
             ftype = SMESH.FT_AspectRatio3D
         else:
             ftype = SMESH.FT_AspectRatio
         return self.FunctorValue(ftype, elemId)
 
-    ## Get warping angle of 2D element.
-    #  @param elemId mesh element ID
-    #  @return element's warping angle value
-    #  @ingroup l1_measurements
     def GetWarping(self, elemId):
+        """
+        Get warping angle of 2D element.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's warping angle value
+        """
+
         return self.FunctorValue(SMESH.FT_Warping, elemId)
 
-    ## Get minimum angle of 2D element.
-    #  @param elemId mesh element ID
-    #  @return element's minimum angle value
-    #  @ingroup l1_measurements
     def GetMinimumAngle(self, elemId):
+        """
+        Get minimum angle of 2D element.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's minimum angle value
+        """
+
         return self.FunctorValue(SMESH.FT_MinimumAngle, elemId)
 
-    ## Get taper of 2D element.
-    #  @param elemId mesh element ID
-    #  @return element's taper value
-    #  @ingroup l1_measurements
     def GetTaper(self, elemId):
+        """
+        Get taper of 2D element.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's taper value
+        """
+
         return self.FunctorValue(SMESH.FT_Taper, elemId)
 
-    ## Get skew of 2D element.
-    #  @param elemId mesh element ID
-    #  @return element's skew value
-    #  @ingroup l1_measurements
     def GetSkew(self, elemId):
+        """
+        Get skew of 2D element.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's skew value
+        """
+
         return self.FunctorValue(SMESH.FT_Skew, elemId)
 
-    ## Return minimal and maximal value of a given functor.
-    #  @param funType a functor type, an item of SMESH.FunctorType enum
-    #         (one of SMESH.FunctorType._items)
-    #  @param meshPart a part of mesh (group, sub-mesh) to treat
-    #  @return tuple (min,max)
-    #  @ingroup l1_measurements
     def GetMinMax(self, funType, meshPart=None):
+        """
+        Return minimal and maximal value of a given functor.
+
+        Parameters:
+            funType (SMESH.FunctorType): a functor type.
+                  Note that not all items of :class:`SMESH.FunctorType` corresponds
+                  to numerical functors.
+            meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`) to treat
+
+        Returns:
+            tuple (min,max)
+        """
+
         unRegister = genObjUnRegister()
         if isinstance( meshPart, list ):
             meshPart = self.GetIDSource( meshPart, SMESH.ALL )
@@ -5244,12 +6826,13 @@ class Mesh(metaclass=MeshMeta):
     pass # end of Mesh class
 
 
-## Private class used to compensate change of CORBA API of SMESH_Mesh for backward compatibility
-#  with old dump scripts which call SMESH_Mesh directly and not via smeshBuilder.Mesh
-#
 class meshProxy(SMESH._objref_SMESH_Mesh):
-    def __init__(self, *args):
-        SMESH._objref_SMESH_Mesh.__init__(self, *args)
+    """
+    Private class used to compensate change of CORBA API of SMESH_Mesh for backward compatibility
+    with old dump scripts which call SMESH_Mesh directly and not via smeshBuilder.Mesh
+    """
+    def __init__(self,*args):
+        SMESH._objref_SMESH_Mesh.__init__(self,*args)
     def __deepcopy__(self, memo=None):
         new = self.__class__(self)
         return new
@@ -5279,24 +6862,32 @@ class meshProxy(SMESH._objref_SMESH_Mesh):
 omniORB.registerObjref(SMESH._objref_SMESH_Mesh._NP_RepositoryId, meshProxy)
 
 
-## Private class wrapping SMESH.SMESH_SubMesh in order to add Compute()
-#
 class submeshProxy(SMESH._objref_SMESH_subMesh):
-    def __init__(self, *args):
-        SMESH._objref_SMESH_subMesh.__init__(self, *args)
+
+    """
+    Private class wrapping SMESH.SMESH_SubMesh in order to add Compute()
+    """
+    def __init__(self,*args):
+        SMESH._objref_SMESH_subMesh.__init__(self,*args)
         self.mesh = None
     def __deepcopy__(self, memo=None):
         new = self.__class__(self)
         return new
 
-    ## Compute the sub-mesh and return the status of the computation
-    #  @param refresh if @c True, Object browser is automatically updated (when running in GUI)
-    #  @return True or False
-    #
-    #  This is a method of SMESH.SMESH_submesh that can be obtained via Mesh.GetSubMesh() or
-    #  @ref smesh_algorithm.Mesh_Algorithm.GetSubMesh() "Mesh_Algorithm.GetSubMesh()".
-    #  @ingroup l2_submeshes
     def Compute(self,refresh=False):
+        """
+        Compute the sub-mesh and return the status of the computation
+
+        Parameters:
+            refresh: if *True*, Object Browser is automatically updated (when running in GUI)
+
+        Returns:
+            True or False
+
+        This is a method of SMESH.SMESH_submesh that can be obtained via Mesh.GetSubMesh() or
+        :meth:`smeshBuilder.Mesh.GetSubMesh`.
+        """
+
         if not self.mesh:
             self.mesh = Mesh( smeshBuilder(), None, self.GetMesh())
 
@@ -5314,13 +6905,14 @@ class submeshProxy(SMESH._objref_SMESH_subMesh):
 omniORB.registerObjref(SMESH._objref_SMESH_subMesh._NP_RepositoryId, submeshProxy)
 
 
-## Private class used to compensate change of CORBA API of SMESH_MeshEditor for backward
-#  compatibility with old dump scripts which call SMESH_MeshEditor directly and not via
-#  smeshBuilder.Mesh
-#
 class meshEditor(SMESH._objref_SMESH_MeshEditor):
-    def __init__(self, *args):
-        SMESH._objref_SMESH_MeshEditor.__init__(self, *args)
+    """
+    Private class used to compensate change of CORBA API of SMESH_MeshEditor for backward
+    compatibility with old dump scripts which call SMESH_MeshEditor directly and not via
+    smeshBuilder.Mesh
+    """
+    def __init__(self,*args):
+        SMESH._objref_SMESH_MeshEditor.__init__( self, *args)
         self.mesh = None
     def __getattr__(self, name ): # method called if an attribute not found
         if not self.mesh:         # look for name() method in Mesh class
@@ -5355,10 +6947,11 @@ class meshEditor(SMESH._objref_SMESH_MeshEditor):
     pass
 omniORB.registerObjref(SMESH._objref_SMESH_MeshEditor._NP_RepositoryId, meshEditor)
 
-## Private class wrapping SMESH.SMESH_Pattern CORBA class in order to treat Notebook
-#  variables in some methods
-#
 class Pattern(SMESH._objref_SMESH_Pattern):
+    """
+    Private class wrapping SMESH.SMESH_Pattern CORBA class in order to treat Notebook
+    variables in some methods
+    """
 
     def LoadFromFile(self, patternTextOrFile ):
         text = patternTextOrFile
@@ -5384,38 +6977,49 @@ class Pattern(SMESH._objref_SMESH_Pattern):
             mesh = mesh.GetMesh()
         return SMESH._objref_SMESH_Pattern.MakeMesh( self, mesh, CreatePolygons, CreatePolyhedra )
 
-# Registering the new proxy for Pattern
 omniORB.registerObjref(SMESH._objref_SMESH_Pattern._NP_RepositoryId, Pattern)
+"""
+Registering the new proxy for Pattern
+"""
 
-## Private class used to bind methods creating algorithms to the class Mesh
-#
 class algoCreator:
+    """
+    Private class used to bind methods creating algorithms to the class Mesh
+    """
+
     def __init__(self, method):
         self.mesh = None
         self.defaultAlgoType = ""
         self.algoTypeToClass = {}
         self.method = method
 
-    # Store a python class of algorithm
     def add(self, algoClass):
+        """
+        Store a python class of algorithm
+        """
         if inspect.isclass(algoClass) and \
-           hasattr(algoClass, "algoType"):
+           hasattr( algoClass, "algoType"):
             self.algoTypeToClass[ algoClass.algoType ] = algoClass
             if not self.defaultAlgoType and \
                hasattr( algoClass, "isDefault") and algoClass.isDefault:
                 self.defaultAlgoType = algoClass.algoType
-            #print "Add",algoClass.algoType, "dflt",self.defaultAlgoType
+            #print("Add",algoClass.algoType, "dflt",self.defaultAlgoType)
 
-    # Create a copy of self and assign mesh to the copy
     def copy(self, mesh):
+        """
+        Create a copy of self and assign mesh to the copy
+        """
+
         other = algoCreator( self.method )
         other.defaultAlgoType = self.defaultAlgoType
         other.algoTypeToClass = self.algoTypeToClass
         other.mesh = mesh
         return other
 
-    # Create an instance of algorithm
     def __call__(self,algo="",geom=0,*args):
+        """
+        Create an instance of algorithm
+        """
         algoType = ""
         shape = 0
         if isinstance( algo, str ):
@@ -5448,27 +7052,32 @@ class algoCreator:
         if not algoType and self.algoTypeToClass:
             algoType = sorted( self.algoTypeToClass.keys() )[0]
         if algoType in self.algoTypeToClass:
-            #print "Create algo",algoType
+            #print("Create algo",algoType)
 
             return self.algoTypeToClass[ algoType ]( self.mesh, shape )
         raise RuntimeError( "No class found for algo type %s" % algoType)
         return None
 
-## Private class used to substitute and store variable parameters of hypotheses.
-#
 class hypMethodWrapper:
+    """
+    Private class used to substitute and store variable parameters of hypotheses.
+    """
+
     def __init__(self, hyp, method):
         self.hyp    = hyp
         self.method = method
-        #print "REBIND:", method.__name__
+        #print("REBIND:", method.__name__)
         return
 
-    # call a method of hypothesis with calling SetVarParameter() before
     def __call__(self,*args):
+        """
+        call a method of hypothesis with calling SetVarParameter() before
+        """
+
         if not args:
             return self.method( self.hyp, *args ) # hypothesis method with no args
 
-        #print "MethWrapper.__call__",self.method.__name__, args
+        #print("MethWrapper.__call__", self.method.__name__, args)
         try:
             parsed = ParseParameters(*args)     # replace variables with their values
             self.hyp.SetVarParameter( parsed[-2], self.method.__name__ )
@@ -5485,9 +7094,10 @@ class hypMethodWrapper:
         return result
     pass
 
-## A helper class that calls UnRegister() of SALOME.GenericObj'es stored in it
-#
 class genObjUnRegister:
+    """
+    A helper class that calls UnRegister() of SALOME.GenericObj'es stored in it
+    """
 
     def __init__(self, genObj=None):
         self.genObjList = []
@@ -5507,12 +7117,12 @@ class genObjUnRegister:
             if genObj and hasattr( genObj, "UnRegister" ):
                 genObj.UnRegister()
 
-
-## Bind methods creating mesher plug-ins to the Mesh class
-#
 for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
-    #
-    #print "pluginName: ", pluginName
+    """
+    Bind methods creating mesher plug-ins to the Mesh class
+    """
+
+    # print("pluginName: ", pluginName)
     pluginBuilderName = pluginName + "Builder"
     try:
         exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName))
@@ -5522,19 +7132,21 @@ for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
         continue
     exec( "from salome.%s import %s" % (pluginName, pluginBuilderName))
     plugin = eval( pluginBuilderName )
-    #print "  plugin:" , str(plugin)
+    # print("  plugin:" , str(plugin))
 
     # add methods creating algorithms to Mesh
     for k in dir( plugin ):
         if k[0] == '_': continue
         algo = getattr( plugin, k )
-        #print "             algo:", str(algo)
+        #print("             algo:", str(algo))
         if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
-            #print "                     meshMethod:" , str(algo.meshMethod)
+            #print("                     meshMethod:" , str(algo.meshMethod))
             if not hasattr( Mesh, algo.meshMethod ):
                 setattr( Mesh, algo.meshMethod, algoCreator( algo.meshMethod ))
                 pass
-            getattr( Mesh, algo.meshMethod ).add( algo )
+            _mmethod = getattr( Mesh, algo.meshMethod )
+            if hasattr(  _mmethod, "add" ):
+                _mmethod.add(algo)
             pass
         pass
     pass
index 92999bf2e2c5a8c861352cf1f177a79c5b45185d..b8c12430e22f397a0e8d6e7fa6b1f9afabd788bd 100644 (file)
@@ -25,51 +25,63 @@ import salome
 from salome.geom import geomBuilder
 import SMESH, StdMeshers
 
-## The base class to define meshing algorithms
-#
-#  @note This class should not be used directly, it is supposed to be sub-classed
-#  for implementing Python API for specific meshing algorithms
-#
-#  For each meshing algorithm, a python class inheriting from class %Mesh_Algorithm
-#  should be defined. This descendant class should have two attributes defining the way
-#  it is created by class Mesh (see e.g. class @ref StdMeshersBuilder.StdMeshersBuilder_Segment "StdMeshersBuilder_Segment"
-#  in StdMeshersBuilder package):
-#  - @c meshMethod attribute defines name of method of class smesh.Mesh by calling which the
-#    python class of algorithm is created; this method is dynamically added to the smesh.Mesh class
-#    in runtime. For example, if in @c class MyPlugin_Algorithm this attribute is defined as
-#    @code
-#    meshMethod = "MyAlgorithm"
-#    @endcode
-#    then an instance of @c MyPlugin_Algorithm can be created by the direct invocation of the function
-#    of smesh.Mesh class:
-#    @code
-#    my_algo = mesh.MyAlgorithm()
-#    @endcode
-#  - @c algoType defines type of algorithm and is used mostly to discriminate
-#    algorithms that are created by the same method of class smesh.Mesh. For example, if this attribute
-#    is specified in @c MyPlugin_Algorithm class as
-#    @code
-#    algoType = "MyPLUGIN"
-#    @endcode
-#    then it's creation code can be:
-#    @code
-#    my_algo = mesh.MyAlgorithm(algo="MyPLUGIN")
-#    @endcode
-#  @ingroup l2_algorithms
 class Mesh_Algorithm:
+    """
+    The base class to define meshing algorithms
+
+    Note:
+        This class should not be used directly, it is supposed to be sub-classed
+    for implementing Python API for specific meshing algorithms
+
+    For each meshing algorithm, a python class inheriting from class %Mesh_Algorithm
+    should be defined. This descendant class should have two attributes defining the way
+    it is created by class Mesh (see e.g. class :class:`~StdMeshersBuilder.StdMeshersBuilder_Segment`
+    in StdMeshersBuilder package):
+
+        - :code:`meshMethod` attribute defines name of method of class smesh.Mesh by calling which the
+                python class of algorithm is created; this method is dynamically added to the smesh.Mesh class
+                in runtime. For example, if in :code:`class MyPlugin_Algorithm` this attribute is defined as
+                ::
+
+                        meshMethod = "MyAlgorithm"
+
+                then an instance of :code:`MyPlugin_Algorithm` can be created by the direct invocation of the function
+                of smesh.Mesh class:
+                ::
+    
+                        my_algo = mesh.MyAlgorithm()
+    
+        - :code:`algoType` defines type of algorithm and is used mostly to discriminate
+                algorithms that are created by the same method of class smesh.Mesh. For example, if this attribute
+                is specified in :code:`MyPlugin_Algorithm` class as
+                ::
+    
+                        algoType = "MyPLUGIN"
+
+                then it's creation code can be:
+                ::
+
+                        my_algo = mesh.MyAlgorithm(algo="MyPLUGIN")
+    """
+    
     
-    ## Private constructor
     def __init__(self):
+        """
+        Private constuctor
+        """
         self.mesh = None
         self.geom = None
         self.subm = None
         self.algo = None
         pass
 
-    ## Finds a hypothesis in the study by its type name and parameters.
-    #  Finds only the hypotheses created in smeshpyD engine.
-    #  @return SMESH.SMESH_Hypothesis
     def FindHypothesis (self, hypname, args, CompareMethod, smeshpyD):
+        """
+        Finds a hypothesis in the study by its type name and parameters.
+        Finds only the hypotheses created in smeshpyD engine.
+        Returns: 
+                SMESH.SMESH_Hypothesis
+        """
         study = salome.myStudy
         if not study: return None
         #to do: find component by smeshpyD object, not by its data type
@@ -110,10 +122,14 @@ class Mesh_Algorithm:
             pass
         return None
 
-    ## Finds the algorithm in the study by its type name.
-    #  Finds only the algorithms, which have been created in smeshpyD engine.
-    #  @return SMESH.SMESH_Algo
     def FindAlgorithm (self, algoname, smeshpyD):
+        """
+        Finds the algorithm in the study by its type name.
+        Finds only the algorithms, which have been created in smeshpyD engine.
+
+        Returns:
+                SMESH.SMESH_Algo
+        """
         study = salome.myStudy
         if not study: return None
         #to do: find component by smeshpyD object, not by its data type
@@ -151,37 +167,51 @@ class Mesh_Algorithm:
             pass
         return None
 
-    ## If the algorithm is global, returns 0; \n
-    #  else returns the submesh associated to this algorithm.
     def GetSubMesh(self):
+        """
+        If the algorithm is global, returns 0; 
+        else returns the submesh associated to this algorithm.
+        """
         return self.subm
 
-    ## Returns the wrapped mesher.
     def GetAlgorithm(self):
+        """
+        Returns the wrapped mesher.
+        """
         return self.algo
 
-    ## Gets the list of hypothesis that can be used with this algorithm
     def GetCompatibleHypothesis(self):
+        """
+        Gets the list of hypothesis that can be used with this algorithm
+        """
         mylist = []
         if self.algo:
             mylist = self.algo.GetCompatibleHypothesis()
         return mylist
 
-    ## Gets the name of the algorithm
     def GetName(self):
+        """
+        Gets the name of the algorithm
+        """
         from salome.smesh.smeshBuilder import GetName
         return GetName(self.algo)
 
-    ## Sets the name to the algorithm
     def SetName(self, name):
+        """
+        Sets the name to the algorithm
+        """
         self.mesh.smeshpyD.SetName(self.algo, name)
 
-    ## Gets the id of the algorithm
     def GetId(self):
+        """
+        Gets the id of the algorithm
+        """
         return self.algo.GetId()
 
-    ## Private method.
     def Create(self, mesh, geom, hypo, so="libStdMeshersEngine.so"):
+        """
+        Private method.
+        """
         if geom is None and mesh.mesh.HasShapeToMesh():
             raise RuntimeError("Attempt to create " + hypo + " algorithm on None shape")
         algo = self.FindAlgorithm(hypo, mesh.smeshpyD)
@@ -191,8 +221,10 @@ class Mesh_Algorithm:
         self.Assign(algo, mesh, geom)
         return self.algo
 
-    ## Private method
     def Assign(self, algo, mesh, geom):
+        """
+        Private method
+        """
         from salome.smesh.smeshBuilder import AssureGeomPublished, TreatHypoStatus, GetName
         if geom is None and mesh.mesh.HasShapeToMesh():
             raise RuntimeError("Attempt to create " + algo + " algorithm on None shape")
@@ -214,9 +246,11 @@ class Mesh_Algorithm:
     def CompareEqualHyp (self, hyp, args):
         return True
 
-    ## Private method
     def Hypothesis (self, hyp, args=[], so="libStdMeshersEngine.so",
                     UseExisting=0, CompareMethod="", toAdd=True):
+        """
+        Private method
+        """
         from salome.smesh.smeshBuilder import TreatHypoStatus, GetName
         hypo = None
         if UseExisting:
@@ -250,40 +284,47 @@ class Mesh_Algorithm:
             TreatHypoStatus( status, GetName(hypo), geomName, 0, self.mesh )
         return hypo
 
-    ## Returns entry of the shape to mesh in the study
     def MainShapeEntry(self):
+        """
+        Returns entry of the shape to mesh in the study
+        """
         if not self.mesh or not self.mesh.GetMesh(): return ""
         if not self.mesh.GetMesh().HasShapeToMesh(): return ""
         shape = self.mesh.GetShape()
         return shape.GetStudyEntry()
 
-    ## Defines "ViscousLayers" hypothesis to give parameters of layers of prisms to build
-    #  near mesh boundary. This hypothesis can be used by several 3D algorithms:
-    #  NETGEN 3D, MG-Tetra, Hexahedron(i,j,k)
-    #  @param thickness total thickness of layers of prisms
-    #  @param numberOfLayers number of layers of prisms
-    #  @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
-    #  @param faces list of geometrical faces (or their ids).
-    #         Viscous layers are either generated on these faces or not, depending on
-    #         the value of \a isFacesToIgnore parameter.
-    #  @param isFacesToIgnore if \c True, the Viscous layers are not generated on the
-    #         faces specified by the previous parameter (\a faces).
-    #  @param extrMethod extrusion method defines how position of new nodes are found during
-    #         prism construction and how creation of distorted and intersecting prisms is
-    #         prevented. Possible values are:
-    #       - StdMeshers.SURF_OFFSET_SMOOTH (default) method extrudes nodes along normal
-    #         to underlying geometrical surface. Smoothing of internal surface of
-    #         element layers can be used to avoid creation of invalid prisms.
-    #       - StdMeshers.FACE_OFFSET method extrudes nodes along average normal of
-    #         surrounding mesh faces till intersection with a neighbor mesh face
-    #         translated along its own normal by the layers thickness. Thickness
-    #         of layers can be limited to avoid creation of invalid prisms.
-    #       - StdMeshers.NODE_OFFSET method extrudes nodes along average normal of
-    #         surrounding mesh faces by the layers thickness. Thickness of
-    #         layers can be limited to avoid creation of invalid prisms.
-    #  @ingroup l3_hypos_additi
     def ViscousLayers(self, thickness, numberOfLayers, stretchFactor,
                       faces=[], isFacesToIgnore=True, extrMethod=StdMeshers.SURF_OFFSET_SMOOTH ):
+        """
+        Defines "ViscousLayers" hypothesis to give parameters of layers of prisms to build
+        near mesh boundary. This hypothesis can be used by several 3D algorithms:
+        NETGEN 3D, MG-Tetra, Hexahedron(i,j,k)
+
+        Parameters:
+                thickness: total thickness of layers of prisms
+                numberOfLayers: number of layers of prisms
+                stretchFactor: factor (>1.0) of growth of layer thickness towards inside of mesh
+                faces: list of geometrical faces (or their ids).
+                        Viscous layers are either generated on these faces or not, depending on
+                        the value of **isFacesToIgnore** parameter.
+                isFacesToIgnore: if *True*, the Viscous layers are not generated on the
+                        faces specified by the previous parameter (**faces**).
+                extrMethod: extrusion method defines how position of new nodes are found during
+                        prism construction and how creation of distorted and intersecting prisms is
+                        prevented. Possible values are:
+
+                        - StdMeshers.SURF_OFFSET_SMOOTH (default) method extrudes nodes along normal
+                                to underlying geometrical surface. Smoothing of internal surface of
+                                element layers can be used to avoid creation of invalid prisms.
+                        - StdMeshers.FACE_OFFSET method extrudes nodes along average normal of
+                                surrounding mesh faces till intersection with a neighbor mesh face
+                                translated along its own normal by the layers thickness. Thickness
+                                of layers can be limited to avoid creation of invalid prisms.
+                        - StdMeshers.NODE_OFFSET method extrudes nodes along average normal of
+                                surrounding mesh faces by the layers thickness. Thickness of
+                                layers can be limited to avoid creation of invalid prisms.
+        """
+        
         if not isinstance(self.algo, SMESH._objref_SMESH_3D_Algo):
             raise TypeError("ViscousLayers are supported by 3D algorithms only")
         if not "ViscousLayers" in self.GetCompatibleHypothesis():
@@ -308,20 +349,24 @@ class Mesh_Algorithm:
         self.mesh.AddHypothesis( hyp, self.geom )
         return hyp
 
-    ## Defines "ViscousLayers2D" hypothesis to give parameters of layers of quadrilateral
-    #  elements to build near mesh boundary. This hypothesis can be used by several 2D algorithms:
-    #  NETGEN 2D, NETGEN 1D-2D, Quadrangle (mapping), MEFISTO, MG-CADSurf
-    #  @param thickness total thickness of layers of quadrilaterals
-    #  @param numberOfLayers number of layers
-    #  @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
-    #  @param edges list of geometrical edges (or their ids).
-    #         Viscous layers are either generated on these edges or not, depending on
-    #         the value of \a isEdgesToIgnore parameter.
-    #  @param isEdgesToIgnore if \c True, the Viscous layers are not generated on the
-    #         edges specified by the previous parameter (\a edges).
-    #  @ingroup l3_hypos_additi
     def ViscousLayers2D(self, thickness, numberOfLayers, stretchFactor,
                         edges=[], isEdgesToIgnore=True ):
+        """
+        Defines "ViscousLayers2D" hypothesis to give parameters of layers of quadrilateral
+        elements to build near mesh boundary. This hypothesis can be used by several 2D algorithms:
+        NETGEN 2D, NETGEN 1D-2D, Quadrangle (mapping), MEFISTO, MG-CADSurf
+
+        Parameters:
+                thickness: total thickness of layers of quadrilaterals
+                numberOfLayers: number of layers
+                stretchFactor: factor (>1.0) of growth of layer thickness towards inside of mesh
+                edges: list of geometrical edges (or their ids).
+                        Viscous layers are either generated on these edges or not, depending on
+                        the value of **isEdgesToIgnore** parameter.
+                isEdgesToIgnore: if *True*, the Viscous layers are not generated on the
+                        edges specified by the previous parameter (**edges**).
+        """
+        
         if not isinstance(self.algo, SMESH._objref_SMESH_2D_Algo):
             raise TypeError("ViscousLayers2D are supported by 2D algorithms only")
         if not "ViscousLayers2D" in self.GetCompatibleHypothesis():
@@ -345,10 +390,12 @@ class Mesh_Algorithm:
         self.mesh.AddHypothesis( hyp, self.geom )
         return hyp
 
-    ## Transform a list of either edges or tuples (edge, 1st_vertex_of_edge)
-    #  into a list acceptable to SetReversedEdges() of some 1D hypotheses
-    #  @ingroup l3_hypos_1dhyps
     def ReversedEdgeIndices(self, reverseList):
+        """
+        Transform a list of either edges or tuples (edge, 1st_vertex_of_edge)
+        into a list acceptable to SetReversedEdges() of some 1D hypotheses
+        """
+        
         from salome.smesh.smeshBuilder import FirstVertexOnCurve
         resList = []
         geompy = self.mesh.geompyD
index 253ff7528b74ff635f49edd0bff2bbf0924f3306..9b52ec3bf4216b535654a12bf0b134bebfa8a967 100644 (file)
@@ -24,7 +24,7 @@ INCLUDE(${SWIG_USE_FILE})
 INCLUDE_DIRECTORIES(
   ${QT_INCLUDES}
   ${PYTHON_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${OGL_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
@@ -43,7 +43,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
   ${PYTHON_DEFINITIONS}
 )
index a5a5dfe01e4cb991ecee9e37fb3a0f610e8e767f..e33be0832b5da788eca00d87adb5f6801fea479f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-// SMESH SMESH : GUI for SMESH component
-// File   : libSMESH_Swig.cxx
-// Author : Nicolas REJNERI, Open CASCADE S.A.S.
-// SMESH includes
-//
+/////////////////////////////////////////////////////////////////
+/// \package libSMESH_Swig
+/// \brief Python API for %SMESH GUI.
+///
+/// See SMESH_Swig class for %SMESH GUI Python API.
+///
+/// \par Note about publishing of mesh objects in the study
+///
+/// Mesh objects are automatically published in the study. It is
+/// not needed to specify a target SALOMEDS object (SObject) or
+/// even name (%SMESH engine will will default name if it is not
+/// specified).
+/// So, normally functions of %SMESH GUI Python API like
+///   AddNewMesh
+///   AddNewHypothesis
+///   AddNewAlgorithms
+///   etc.
+/// may only be needed to be called in case if mesh objects are
+/// created when no active study is set to %SMESH component.
+/// In this case, mentioned functions can be used to forcibly
+/// publish existing objects in the currrently active study.
+///
+/// Note that if there are no open study, these methods will do
+/// nothing.
+///
+/// \par Note about selection
+///
+/// In SALOME, selection is automatically synchronlized between
+/// all GUI elements (like Object browser, view windows, etc).
+/// This means that any changes to selection applied with
+/// select() methods, will automatically apply to all view
+/// windows, taking into account selection modes switched in
+/// each particular view window (e.g. if you select edges, while
+/// in some view window Face selection mode is switched on,
+/// selection will not be immediately applied to this view
+/// window.
+/////////////////////////////////////////////////////////////////
+
 #include "libSMESH_Swig.h"
 
 #include <SVTK_Selector.h>
@@ -36,7 +69,7 @@
 #include <Utils_ORB_INIT.hxx>
 #include <Utils_SINGLETON.hxx>
 #include <SALOMEDSClient_ClientFactory.hxx>
-#include <SALOME_KernelServices.hxx>
+#include <SALOMEDS_Study.hxx>
 
 #include <utilities.h>
 
@@ -46,7 +79,7 @@
 #include <SALOME_Prs.h>
 #include <SUIT_ViewWindow.h>
 #include <SVTK_ViewWindow.h>
-#include <VTKViewer_ViewModel.h>
+#include <SVTK_ViewModel.h>
 #include <SALOME_Event.h>
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
 #include <vtkActorCollection.h>
 #include <vtkRenderer.h>
 
-static CORBA::ORB_var anORB;
-
 namespace
 {
-  //---------------------------------------------------------------
-  inline
-  CORBA::Object_var
-  StringToObject(const std::string& theIOR)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Print deprecation warning to termninal.
+  /// \param function Interface function's name.
+  /// \param replacement Replacement (new) function's name
+  ///        (if there's any).
+  ///////////////////////////////////////////////////////////////
+  void deprecated(const char* function, const char* replacement = 0)
   {
-    return anORB->string_to_object(theIOR.c_str());
+    if ( replacement )
+      printf("libSMESH_Swig: method '%s' is deprecated; use '%s' instead.\n", function, replacement);
+    else
+      printf("libSMESH_Swig: method '%s' is deprecated.\n", function);
   }
 
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get CORBA object by its IOR.
+  /// \param ior Object's IOR.
+  /// \return CORBA object (nil object if it isn't found).
+  ///////////////////////////////////////////////////////////////
+  CORBA::Object_var string2object(const std::string& ior)
+  {
+    return SalomeApp_Application::orb()->string_to_object(ior.c_str());
+  }
 
-  //---------------------------------------------------------------
-  inline
-  SALOMEDS::SObject_var
-  GetDomainRoot(const SALOMEDS::SComponent_var& theSComponentMesh,
-                const SALOMEDS::StudyBuilder_var& theStudyBuilder,
-                CORBA::Long theDomainRootTag,
-                const QString& theName,
-                const QString& thePixmap)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get study object by its study UID or IOR.
+  /// \param uid Object's study UID or IOR.
+  /// \return Pointer to study object (null object if it isn't
+  ///         found).
+  ///////////////////////////////////////////////////////////////
+  _PTR(SObject) uid2object(const std::string& uid)
   {
-    SALOMEDS::SObject_var aDomainRoot;
-    if (!theSComponentMesh->FindSubObject(theDomainRootTag,aDomainRoot)) {
-      aDomainRoot = theStudyBuilder->NewObjectToTag(theSComponentMesh,theDomainRootTag);
-      SALOMEDS::GenericAttribute_var anAttr = theStudyBuilder->FindOrCreateAttribute(aDomainRoot,"AttributeName");
-      SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
-      aName->SetValue(theName.toLatin1().data());
-      aName->UnRegister();
-      anAttr = theStudyBuilder->FindOrCreateAttribute(aDomainRoot,"AttributePixMap");
-      SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-      aPixmap->SetPixMap(thePixmap.toLatin1().data());
-      aPixmap->UnRegister();
-      anAttr = theStudyBuilder->FindOrCreateAttribute(aDomainRoot,"AttributeSelectable");
-      SALOMEDS::AttributeSelectable_var aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
-      aSelAttr->SetSelectable(false);
-      aSelAttr->UnRegister();
+    _PTR(SObject) sobject;
+    {
+      _PTR(Study) study = SMESH::getStudy();
+      if ( study )
+      {
+       sobject = study->FindObjectID( uid );
+       if ( !sobject )
+         sobject = study->FindObjectIOR( uid );
+      }
     }
-
-    return aDomainRoot;
+    return sobject;
   }
 
-
-  //---------------------------------------------------------------
-  inline
-  SALOMEDS::SObject_var
-  GetHypothesisRoot(const SALOMEDS::SComponent_var& theSComponentMesh,
-                    const SALOMEDS::StudyBuilder_var& theStudyBuilder)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get view window by its identifier.
+  /// \param uid Window's identifier.
+  /// \return Pointer to the view window (0 if it isn't found).
+  ///////////////////////////////////////////////////////////////
+  SALOME_View* uid2wnd(int uid, bool create = false)
   {
-    return GetDomainRoot(theSComponentMesh,
-                         theStudyBuilder,
-                         SMESH::Tag_HypothesisRoot,
-                         QObject::tr("SMESH_MEN_HYPOTHESIS"),
-                         "ICON_SMESH_TREE_HYPO");
-  }
+    SALOME_View* window = 0;
 
+    SUIT_Session* session = SUIT_Session::session();
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( session->activeApplication() );
+    if ( app )
+    {
+      if ( uid )
+      {
+       ViewManagerList vms = app->viewManagers();
+       for ( int i = 0; i < vms.count() && !window; i++ )
+       {
+         SUIT_ViewManager* vm = vms[i];
+         QVector<SUIT_ViewWindow*> vws = vm->getViews();
+         for ( int j = 0; j < vws.count() && !window; j++)
+         {
+           SUIT_ViewWindow* vw = vws[0];
+           if ( uid == vw->getId() )
+             window = dynamic_cast<SALOME_View*>( vm->getViewModel() );
+         }
+       }
+      }
+      else
+      {
+       SUIT_ViewManager* vm = app->getViewManager( SVTK_Viewer::Type(), create );
+       if ( vm )
+       { 
+         window = dynamic_cast<SALOME_View*>( vm->getViewModel() );
+       }
+      }
+    }
+    return window;
+  }
 
-  //---------------------------------------------------------------
-  inline
-  SALOMEDS::SObject_var
-  GetAlgorithmsRoot(const SALOMEDS::SComponent_var& theSComponentMesh,
-                    const SALOMEDS::StudyBuilder_var& theStudyBuilder)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get all view windows.
+  /// \return List of view windows.
+  ///////////////////////////////////////////////////////////////
+  QList<SALOME_View*> windows()
   {
-    return GetDomainRoot(theSComponentMesh,
-                         theStudyBuilder,
-                         SMESH::Tag_AlgorithmsRoot,
-                         QObject::tr("SMESH_MEN_ALGORITHMS"),
-                         "ICON_SMESH_TREE_ALGO");
+    QList<SALOME_View*> views;
+    SUIT_Session* session = SUIT_Session::session();
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( session->activeApplication() );
+    if ( app )
+    {
+      ViewManagerList vms = app->viewManagers();
+      foreach( SUIT_ViewManager* vm, vms )
+      {
+        if ( vm && vm->getType() == SVTK_Viewer::Type() )
+       {
+          SALOME_View* view = dynamic_cast<SALOME_View*>( vm->getViewModel() );
+          if ( view )
+           views << view;
+       }
+      }
+    }
+    return views;
   }
 
-
-  //---------------------------------------------------------------
-  inline
-  SALOMEDS::SObject_var
-  AddToDomain(const std::string&                theIOR,
-              const SALOMEDS::SComponent_var&   theSComponentMesh,
-              const SALOMEDS::StudyBuilder_var& theStudyBuilder,
-              CORBA::Long                       theDomainRootTag,
-              const QString&                    theDomainName,
-              const QString&                    theDomainPixmap)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get mesh actor from view.
+  /// \param view Pointer to the view window.
+  /// \param uid Mesh object's study UID.
+  /// \return Mesh actor (0 if it isn't found).
+  ///////////////////////////////////////////////////////////////
+  SMESH_Actor* actorFromView(SALOME_View* view, const char* uid)
   {
-    SALOMEDS::SObject_var aDomain = GetDomainRoot(theSComponentMesh,
-                                                  theStudyBuilder,
-                                                  SMESH::Tag_AlgorithmsRoot,
-                                                  theDomainName,
-                                                  theDomainPixmap);
-    // Add New Hypothesis
-    SALOMEDS::SObject_var aSObject = theStudyBuilder->NewObject(aDomain);
-    aDomain->UnRegister();
-    SALOMEDS::GenericAttribute_var anAttr = theStudyBuilder->FindOrCreateAttribute(aSObject,"AttributePixMap");
-    SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-    CORBA::Object_var anObject = StringToObject(theIOR);
-    SMESH::SMESH_Hypothesis_var aDomainItem = SMESH::SMESH_Hypothesis::_narrow(anObject.in());
-    CORBA::String_var aType = aDomainItem->GetName();
-    QString aPixmapName = theDomainPixmap + "_" + aType.in();
-    aPixmap->SetPixMap(aPixmapName.toLatin1().data());
-    aPixmap->UnRegister();
-    anAttr = theStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR");
-    SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-    anIOR->SetValue(theIOR.c_str());
-    anIOR->UnRegister();
-
-    return aSObject;
+    SMESH_Actor* actor = 0;
+    SVTK_Viewer* model = dynamic_cast<SVTK_Viewer*>( view );
+    if ( model )
+    {
+      SUIT_ViewWindow* vw = model->getViewManager()->getActiveView();
+      if ( vw )
+      {
+        actor = SMESH::FindActorByEntry( vw, uid );
+      }
+    }
+    return actor;
   }
 
-
-  //---------------------------------------------------------------
-  SALOMEDS::SObject_var
-  AddHypothesis(const std::string& theIOR,
-                const SALOMEDS::SComponent_var& theSComponentMesh,
-                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Get mesh object's visual properties.
+  /// \param view Pointer to the view window.
+  /// \param uid Mesh object's study UID.
+  /// \return Properties data structure.
+  ///////////////////////////////////////////////////////////////
+  Properties properties(SALOME_View* view, const char* uid)
   {
-    return AddToDomain(theIOR,
-                       theSComponentMesh,
-                       theStudyBuilder,
-                       SMESH::Tag_HypothesisRoot,
-                       QObject::tr("SMESH_MEN_HYPOTHESIS"),
-                       "ICON_SMESH_TREE_HYPO");
+    Properties props;
+    SMESH_Actor* actor = actorFromView( view, uid );
+    if ( actor )
+    {
+      actor->GetNodeColor( props.nodeColor.r,
+                          props.nodeColor.g,
+                          props.nodeColor.b );
+      props.markerType = actor->GetMarkerType();
+      props.markerScale = actor->GetMarkerScale();
+      
+      actor->GetEdgeColor( props.edgeColor.r,
+                          props.edgeColor.g,
+                          props.edgeColor.b );
+      props.edgeWidth = qMax( (int)actor->GetLineWidth(), 1 );
+      
+      actor->GetSufaceColor( props.surfaceColor.r,
+                            props.surfaceColor.g,
+                            props.surfaceColor.b,
+                            props.surfaceColor.delta );
+      
+      actor->GetVolumeColor( props.volumeColor.r,
+                            props.volumeColor.g,
+                            props.volumeColor.b,
+                            props.volumeColor.delta );
+      
+      actor->Get0DColor( props.elem0dColor.r,
+                        props.elem0dColor.g,
+                        props.elem0dColor.b );
+      props.elem0dSize = qMax( (int)actor->Get0DSize(), 1 );
+      
+      actor->GetBallColor( props.ballColor.r,
+                          props.ballColor.g,
+                          props.ballColor.b );
+      props.ballScale = qMax( actor->GetBallScale(), 1e-2 );
+      
+      actor->GetOutlineColor( props.outlineColor.r,
+                             props.outlineColor.g,
+                             props.outlineColor.b );
+      props.outlineWidth = qMax( (int)actor->GetOutlineWidth(), 1 );
+      
+      actor->GetFacesOrientationColor( props.orientationColor.r,
+                                      props.orientationColor.g,
+                                      props.orientationColor.b );
+      props.orientationScale = actor->GetFacesOrientationScale();
+      props.orientation3d = actor->GetFacesOrientation3DVectors();
+      
+      props.shrinkFactor = actor->GetShrinkFactor();
+      
+      props.opacity = actor->GetOpacity();
+    }
+    return props;
   }
 
-
-  //---------------------------------------------------------------
-  SALOMEDS::SObject_var
-  AddAlgorithms(const std::string& theIOR,
-                const SALOMEDS::SComponent_var& theSComponentMesh,
-                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
+  ///////////////////////////////////////////////////////////////
+  /// \internal
+  /// \brief Set mesh object's visual properties.
+  /// \param view Pointer to the view window.
+  /// \param uid Mesh object's study UID.
+  /// \param props Properties data structure.
+  ///////////////////////////////////////////////////////////////
+  void setProperties(SALOME_View* view, const char* uid, const Properties& props)
   {
-    return AddToDomain(theIOR,
-                       theSComponentMesh,
-                       theStudyBuilder,
-                       SMESH::Tag_AlgorithmsRoot,
-                       QObject::tr("SMESH_MEN_ALGORITHMS"),
-                       "ICON_SMESH_TREE_ALGO");
+    SMESH_Actor* actor = actorFromView( view, uid );
+    if ( actor )
+    {
+      actor->SetNodeColor( props.nodeColor.r,
+                          props.nodeColor.g,
+                          props.nodeColor.b );
+      if ( props.markerType != VTK::MT_USER )
+       actor->SetMarkerStd( props.markerType, props.markerScale );
+      
+      actor->SetEdgeColor( props.edgeColor.r,
+                          props.edgeColor.g,
+                          props.edgeColor.b );
+      actor->SetLineWidth( qMax( (double)props.edgeWidth, 1. ) );
+      
+      actor->SetSufaceColor( props.surfaceColor.r,
+                            props.surfaceColor.g,
+                            props.surfaceColor.b,
+                            props.surfaceColor.delta );
+      
+      actor->SetVolumeColor( props.volumeColor.r,
+                            props.volumeColor.g,
+                            props.volumeColor.b,
+                            props.volumeColor.delta );
+      
+      actor->Set0DColor( props.elem0dColor.r,
+                        props.elem0dColor.g,
+                        props.elem0dColor.b );
+      actor->Set0DSize( qMax( (double)props.elem0dSize, 1. ) );
+      
+      actor->SetBallColor( props.ballColor.r,
+                          props.ballColor.g,
+                          props.ballColor.b );
+      actor->SetBallScale( qMax( props.ballScale, 1e-2 ) );
+      
+      actor->SetOutlineColor( props.outlineColor.r,
+                             props.outlineColor.g,
+                             props.outlineColor.b );
+      actor->SetOutlineWidth( qMax( (double)props.outlineWidth, 1. ) );
+      
+      actor->SetFacesOrientationColor( props.orientationColor.r,
+                                      props.orientationColor.g,
+                                      props.orientationColor.b );
+      actor->SetFacesOrientationScale( props.orientationScale );
+      actor->SetFacesOrientation3DVectors( props.orientation3d );
+      
+      actor->SetShrinkFactor( props.shrinkFactor );
+      
+      actor->SetOpacity( props.opacity );
+      
+      view->Repaint();
+    }
   }
+} // end of anonymous namespace
+
+/////////////////////////////////////////////////////////////////
+/// \enum EntityMode
+/// \brief Enumeration for mesh entities.
+/// \var EntityMode Entity0d
+/// \brief 0D elements.
+/// \var EntityMode EntityEdges
+/// \brief Edges.
+/// \var EntityMode EntityFaces
+/// \brief Faces.
+/// \var EntityMode EntityVolumes
+/// \brief Volumes.
+/// \var EntityMode EntityBalls
+/// \brief Ball elements.
+/// \var EntityMode EntityAll
+/// \brief All elements.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \enum SelectionMode
+/// \brief Selection mode.
+/// \var SelectionMode Undefined
+/// \brief Undefined selection mode.
+/// \var SelectionMode Node
+/// \brief Selection of mesh nodes.
+/// \var SelectionMode Cell
+/// \brief Selection of any mesh cells.
+/// \var SelectionMode EdgeOfCell
+/// \brief Selection of pseudo-edges specified by couple of nodes.
+/// \var SelectionMode Edge
+/// \brief Selection of edges.
+/// \var SelectionMode Face
+/// \brief Selection of faces.
+/// \var SelectionMode Volume
+/// \brief Selection of volumes
+/// \var SelectionMode Actor
+/// \brief Selection of whole actors (meshes, sub-meshes, groups).
+/// \var SelectionMode Elem0D
+/// \brief Selection of 0D elements.
+/// \var SelectionMode Ball
+/// \brief Selection of ball ellements.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \enum DisplayMode
+/// \brief Display mode.
+/// \var DisplayMode UndefinedMode
+/// \brief Undefined display mode.
+/// \var DisplayMode PointMode
+/// \brief Point representation.
+/// \var DisplayMode EdgeMode
+/// \brief Wireframe representation.
+/// \var DisplayMode SurfaceMode
+/// \brief Surface representation.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \struct ColorData
+/// \brief Color data, in RGBf format.
+/// \var ColorData::r
+/// \brief Red color's component (0.0:1.0).
+/// \var ColorData::g
+/// \brief Green color's component (0.0:1.0).
+/// \var ColorData::b
+/// \brief Blue color's component (0.0:1.0).
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \brief Constructor.
+/////////////////////////////////////////////////////////////////
+ColorData::ColorData()
+  : r( 0 ), g( 0 ), b( 0 )
+{}
+
+/////////////////////////////////////////////////////////////////
+/// \struct BicolorData
+/// \brief Bi-color data, in RGBf format.
+/// \var BicolorData::r
+/// \brief Red color's component (0.0:1.0).
+/// \var BicolorData::g
+/// \brief Green color's component (0.0:1.0).
+/// \var BicolorData::b
+/// \brief Blue color's component (0.0:1.0).
+/// \var BicolorData::delta
+/// \brief Shift for backface color (-100:100).
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \brief Constructor.
+/////////////////////////////////////////////////////////////////
+BicolorData::BicolorData()
+  : r( 0 ), g( 0 ), b( 0 ), delta( 0 )
+{}
+
+/////////////////////////////////////////////////////////////////
+/// \struct Properties
+/// \brief Mesh object presentation's properties.
+/// \var Properties::nodeColor
+/// \brief Node color.
+/// \var Properties::markerType
+/// \brief Node standard marker type.
+/// \var Properties::markerScale
+/// \brief Node scale factor.
+/// \var Properties::edgeColor
+/// \brief Edges color.
+/// \var Properties::edgeWidth
+/// \brief Edges width.
+/// \var Properties::surfaceColor
+/// \brief Faces color.
+/// \var Properties::volumeColor
+/// \brief Volumes color.
+/// \var Properties::elem0dColor
+/// \brief 0D elements color.
+/// \var Properties::elem0dSize
+/// \brief 0D elements size.
+/// \var Properties::ballColor
+/// \brief Ball elements color.
+/// \var Properties::ballScale
+/// \brief Ball elements scale factor.
+/// \var Properties::outlineColor
+/// \brief Outlines color.
+/// \var Properties::outlineWidth
+/// \brief Outlines width.
+/// \var Properties::orientationColor
+/// \brief Face orientation vectors color.
+/// \var Properties::orientationScale
+/// \brief Face orientation vectors scale factor.
+/// \var Properties::orientation3d
+/// \brief Face orientation vectors 3d flag.
+/// \var Properties::shrinkFactor
+/// \brief Shrink coefficient.
+/// \var Properties::opacity
+/// \brief Opacity.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \brief Constructor.
+/////////////////////////////////////////////////////////////////
+Properties::Properties()
+  : markerType( VTK::MT_NONE ), markerScale( VTK::MS_NONE ),
+    edgeWidth( 1 ), elem0dSize( 1 ), ballScale( 1 ), outlineWidth( 1 ),
+    orientationScale( 0 ), orientation3d( false ), shrinkFactor( 0 ),
+    opacity( 1 )
+{}
+
+/////////////////////////////////////////////////////////////////
+/// \typedef nodeColorStruct
+/// \deprecated Use ColorData instead.
+/// \typedef edgeColorStruct
+/// \deprecated Use ColorData instead.
+/// \typedef surfaceColorStruct
+/// \deprecated Use BicolorData instead.
+/// \typedef volumeColorStruct
+/// \deprecated Use BicolorData instead.
+/// \typedef actorAspect
+/// \deprecated Use Properties instead.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \class SMESH_Swig
+/// \brief %SMESH GUI Python interface.
+/////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////
+/// \brief Constructor.
+/////////////////////////////////////////////////////////////////
+SMESH_Swig::SMESH_Swig()
+{
+  init();
+}
 
+/////////////////////////////////////////////////////////////////
+/// \brief Destructor.
+/////////////////////////////////////////////////////////////////
+SMESH_Swig::~SMESH_Swig()
+{
+}
 
-  //---------------------------------------------------------------
-  void
-  SetDomain(const char*                       theMeshOrSubMeshEntry,
-            const char*                       theDomainEntry,
-            const SALOMEDS::StudyBuilder_var& theStudyBuilder,
-            long                              theRefOnAppliedDomainTag,
-            const QString&                    theAppliedDomainMEN,
-            const QString&                    theAppliedDomainICON)
+/////////////////////////////////////////////////////////////////
+/// \internal
+/// \brief Initialize interface.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::init()
+{
+  class TInitEvent: public SALOME_Event
   {
-    SALOMEDS::SObject_var aMeshOrSubMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshOrSubMeshEntry);
-    SALOMEDS::SObject_var    aHypothesisSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry);
+  public:
+    TInitEvent() {}
+    virtual void Execute()
+    {
+      SUIT_Session* session = SUIT_Session::session();
+      SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( session->activeApplication() );
 
-    if(!aMeshOrSubMeshSO->_is_nil() && !aHypothesisSO->_is_nil()){
-      //Find or Create Applied Hypothesis root
-      SALOMEDS::SObject_var anAppliedDomainSO;
-      if( !aMeshOrSubMeshSO->FindSubObject( theRefOnAppliedDomainTag, anAppliedDomainSO ))
-      {
-        anAppliedDomainSO = theStudyBuilder->NewObjectToTag(aMeshOrSubMeshSO,theRefOnAppliedDomainTag);
-        SALOMEDS::GenericAttribute_var anAttr =
-          theStudyBuilder->FindOrCreateAttribute(anAppliedDomainSO,"AttributeName");
-        SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
-        aName->SetValue(theAppliedDomainMEN.toLatin1().data());
-        aName->UnRegister();
-        anAttr = theStudyBuilder->FindOrCreateAttribute(anAppliedDomainSO,"AttributeSelectable");
-        SALOMEDS::AttributeSelectable_var aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
-        aSelAttr->SetSelectable(false);
-        aSelAttr->UnRegister();
-        anAttr = theStudyBuilder->FindOrCreateAttribute(anAppliedDomainSO,"AttributePixMap");
-        SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-        aPixmap->SetPixMap(theAppliedDomainICON.toLatin1().data());
-        aPixmap->UnRegister();
-      }
-      SALOMEDS::SObject_var aSObject = theStudyBuilder->NewObject(anAppliedDomainSO);
-      theStudyBuilder->Addreference(aSObject,aHypothesisSO);
-      aSObject->UnRegister();
-      anAppliedDomainSO->UnRegister();
+      if ( !SMESHGUI::GetSMESHGUI() )
+       app->loadModule( "Mesh" );
     }
-    if ( !aMeshOrSubMeshSO->_is_nil() ) aMeshOrSubMeshSO->UnRegister();
-    if ( !aHypothesisSO->_is_nil())     aHypothesisSO->UnRegister();
-  }
+  };
 
+  // load SMESH GUI if it's not yet loaded
+  ProcessVoidEvent( new TInitEvent() );
+  SMESHGUI::GetSMESHGen()->UpdateStudy();
+}
 
-  //---------------------------------------------------------------
-  void
-  SetHypothesis(const char*                       theMeshOrSubMeshEntry,
-                const char*                       theDomainEntry,
-                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
-  {
-    SetDomain(theMeshOrSubMeshEntry,
-              theDomainEntry,
-              theStudyBuilder,
-              SMESH::Tag_RefOnAppliedHypothesis,
-              QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"),
-              "ICON_SMESH_TREE_HYPO");
-  }
+/////////////////////////////////////////////////////////////////
+/// \brief Publish object.
+/// \param ior IOR of the mesh object to publish.
+/// \param name Study name of the object; if not given,
+///             name is assigned automatically.
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::publish(const char* ior, const char* name)
+{
+  init();
 
+  std::string uid;
+  CORBA::Object_var object = string2object( ior );
+  if ( !CORBA::is_nil( object ) )
+    {
+      SALOMEDS::SObject_var sobject =
+       SMESHGUI::GetSMESHGen()->PublishInStudy( SALOMEDS::SObject::_nil(),
+                                                object.in(),
+                                                name );
+      if ( !CORBA::is_nil( sobject ) )
+       {
+         uid = sobject->GetID();
+       }
+      sobject->UnRegister();
+    }
 
-  //---------------------------------------------------------------
-  void
-  SetAlgorithms(const char*                       theMeshOrSubMeshEntry,
-                const char*                       theDomainEntry,
-                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
-  {
-    SetDomain(theMeshOrSubMeshEntry,
-              theDomainEntry,
-              theStudyBuilder,
-              SMESH::Tag_RefOnAppliedAlgorithms,
-              QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"),
-              "ICON_SMESH_TREE_ALGO");
-  }
+  return strdup( uid.c_str() );
 }
 
+/////////////////////////////////////////////////////////////////
+/// \brief Set new study name of given object.
+/// \param uid Object's study UID or IOR.
+/// \param name New name of the object.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::rename(const char* uid, const char* name)
+{
+  init();
 
-//===============================================================
-SMESH_Swig::SMESH_Swig()
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    sobject->SetAttrString( "AttributeName", name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Display mesh object.
+/// \param uid Object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window; if there's no view, it is created).
+///                Default: 0.
+/// \param updateViewer "Update view" flag. Default: \c true.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::display(const char* uid, int viewUid, bool updateViewer)
 {
-  class TEvent: public SALOME_Event
+  class TDisplayEvent: public SALOME_Event
   {
-    CORBA::ORB_var& myORB;
+  private:
+    const char* myUid;
+    int myViewUid;
+    bool myIsUpdate;
   public:
+    TDisplayEvent(const char* uid, int viewUid, bool updateViewer)
+      : myUid( uid ), myViewUid( viewUid ), myIsUpdate( updateViewer ) {}
+    virtual void Execute()
+    {
+      SALOME_View* view = uid2wnd( myViewUid, true ); // create view if it's not present
+      if ( view )
+       LightApp_Displayer::FindDisplayer( "Mesh", true )->Display( myUid, myIsUpdate, view );
+    }
+  };
+
+  init();
 
-    TEvent(CORBA::ORB_var& theORB):
-      myORB(theORB)
-    {}
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TDisplayEvent( sobject->GetID().c_str(), viewUid, updateViewer ) );
+}
 
-    virtual
-    void
-    Execute()
+/////////////////////////////////////////////////////////////////
+/// \brief Erase mesh object.
+/// \param uid Object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); -1 means "all view windows".
+///                Default: 0.
+/// \param updateViewer "Update view" flag. Default: \c true.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::erase(const char* uid, int viewUid, bool updateViewer)
+{
+  class TEraseEvent: public SALOME_Event
+  {
+  private:
+    const char* myUid;
+    int myViewUid;
+    bool myIsUpdate;
+  public:
+    TEraseEvent(const char* uid, int viewUid, bool updateViewer)
+      : myUid( uid ), myViewUid( viewUid ), myIsUpdate( updateViewer ) {}
+    virtual void Execute()
     {
-      try {
-        ORB_INIT &anORBInit = *SINGLETON_<ORB_INIT>::Instance();
-        ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
-        myORB = anORBInit( 0, 0 );
-      } catch (...) {
-        INFOS("internal error : orb not found");
+      if ( myViewUid == -1 )
+      {
+       QList<SALOME_View*> views = windows();
+       foreach( SALOME_View* view, views )
+         LightApp_Displayer::FindDisplayer( "Mesh", true )->Erase( myUid, true, myIsUpdate, view );
+      }
+      else
+      {
+       SALOME_View* view = uid2wnd( myViewUid );
+       if ( view )
+         LightApp_Displayer::FindDisplayer( "Mesh", true )->Erase( myUid, true, myIsUpdate, view );
       }
     }
   };
 
-  //MESSAGE("Constructeur");
-
-  if(CORBA::is_nil(anORB))
-    ProcessVoidEvent(new TEvent(anORB));
+  init();
 
-  ASSERT(!CORBA::is_nil(anORB));
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TEraseEvent( sobject->GetID().c_str(), viewUid, updateViewer ) );
 }
 
-
-//===============================================================
-void
-SMESH_Swig::Init()
+/////////////////////////////////////////////////////////////////
+/// \brief Update mesh object.
+/// \param uid Object's study UID or IOR.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::update(const char* uid)
 {
-  class TEvent: public SALOME_Event
+  class TUpdateEvent: public SALOME_Event
   {
-    SALOMEDS::StudyBuilder_var& myStudyBuilder;
-    SALOMEDS::SComponent_var&   mySComponentMesh;
+  private:
+    const char* myUid;
   public:
-    TEvent(SALOMEDS::StudyBuilder_var& theStudyBuilder,
-           SALOMEDS::SComponent_var&   theSComponentMesh):
-      myStudyBuilder  (theStudyBuilder),
-      mySComponentMesh(theSComponentMesh)
-    {}
-
-    ~TEvent()
+    TUpdateEvent( const char* uid ) : myUid( uid ) {}
+    virtual void Execute()
     {
-      if ( !mySComponentMesh->_is_nil() ) mySComponentMesh->UnRegister();
+      Handle(SALOME_InteractiveObject) io = 
+       new SALOME_InteractiveObject( myUid, "SMESH", "" );
+      SMESH::Update( io, true );
     }
+  };
 
-    virtual
-    void
-    Execute()
-    {
-      SUIT_Session* aSession          = SUIT_Session::session();
-      SUIT_Application* anApplication = aSession->activeApplication();
-      SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
-
-      SALOMEDS::Study_var aStudy = KERNEL::getStudyServant();
+  init();
 
-      SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TUpdateEvent( uid ) );
+}
 
-      myStudyBuilder = aStudy->NewBuilder();
+/////////////////////////////////////////////////////////////////
+/// \internal
+class TGetPropsEvent: public SALOME_Event
+{
+public:
+  typedef Properties TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
 
-      SALOMEDS::GenericAttribute_var anAttr;
-      SALOMEDS::AttributeName_var    aName;
-      SALOMEDS::AttributePixMap_var  aPixmap;
+  TGetPropsEvent( const char* uid, int viewUid )
+    : myUid( uid ), myViewUid( viewUid ) {}
 
-      SALOMEDS::SComponent_var aSComponent = aStudy->FindComponent("SMESH");
-      if ( aSComponent->_is_nil() )
-      {
-        bool aLocked = aStudy->GetProperties()->IsLocked();
-        if (aLocked)
-          aStudy->GetProperties()->SetLocked(false);
-
-        SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI();
-        //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded
-        if (!aSMESHGUI) {
-          CAM_Module* aModule = anApp->module("Mesh");
-          if(!aModule)
-            aModule = anApp->loadModule("Mesh");
-          aSMESHGUI = dynamic_cast<SMESHGUI*>(aModule);
-        } //SRN: BugID IPAL9186: end of a fix
-
-        aSComponent = myStudyBuilder->NewComponent("SMESH");
-
-        anAttr = myStudyBuilder->FindOrCreateAttribute(aSComponent,"AttributeName");
-        aName  = SALOMEDS::AttributeName::_narrow(anAttr);
-        aName->SetValue(aSMESHGUI->moduleName().toLatin1().data());
-        aName->UnRegister();
-
-        anAttr = myStudyBuilder->FindOrCreateAttribute(aSComponent,"AttributePixMap");
-        aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-        aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
-        aPixmap->UnRegister();
-
-        SALOMEDS::UseCaseBuilder_var useCaseBuilder = KERNEL::getStudyServant()->GetUseCaseBuilder();
-        useCaseBuilder->SetRootCurrent();
-        useCaseBuilder->Append( aSComponent.in() );
-  
-        myStudyBuilder->DefineComponentInstance(aSComponent,aSMESHGen);
-        if (aLocked)
-          KERNEL::getStudyServant()->GetProperties()->SetLocked(true);
-      }
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    myResult = properties( view, myUid );
+  }
+};
 
-      mySComponentMesh = SALOMEDS::SComponent::_narrow(aSComponent);
+/////////////////////////////////////////////////////////////////
+/// \brief Get mesh object's visual properties.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return Properties data structure.
+/////////////////////////////////////////////////////////////////
+Properties SMESH_Swig::properties(const char* uid, int viewUid)
+{
+  Properties props;
 
-      qApp->processEvents(); // Workaround for bug 12662
-    }
-  };
+  init();
 
-  //MESSAGE("Init");
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    props = ProcessEvent( new TGetPropsEvent( sobject->GetID().c_str(), viewUid ) );
 
-  ProcessVoidEvent(new TEvent(myStudyBuilder,
-                              mySComponentMesh));
+  return props;
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetPropsEvent: public SALOME_Event
+{
+public:
+  const char* myUid;
+  Properties myProps;
+  int myViewUid;
 
-//===============================================================
-SMESH_Swig::~SMESH_Swig()
+  TSetPropsEvent( const char* uid, const Properties& props, int viewUid )
+    : myUid( uid ), myProps( props), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    if ( myViewUid == -1 )
+    {
+      QList<SALOME_View*> views = windows();
+      foreach( SALOME_View* view, views )
+      {
+       setProperties( view, myUid, myProps );
+      }
+    }
+    else
+    {
+      SALOME_View* view = uid2wnd( myViewUid );
+      setProperties( view, myUid, myProps );
+    }
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Set mesh object's visual properties.
+/// \param uid Mesh object's study UID or IOR.
+/// \param props Properties data structure.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setProperties(const char* uid, const Properties& props, int viewUid)
 {
-  //MESSAGE("Destructeur");
-}
+  init();
 
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetPropsEvent( sobject->GetID().c_str(), props, viewUid ) );
+}
 
-//===============================================================
-const char* SMESH_Swig::AddNewMesh(const char* theIOR)
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetNodeNumberingEvent: public SALOME_Event
 {
+public:
+  typedef bool TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
+
+  TGetNodeNumberingEvent( const char* uid, int viewUid )
+    : myResult( false ), myUid( uid ), myViewUid( viewUid ) {}
 
-  // VSR: added temporarily - to be removed - objects are published automatically by engine
-  SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectIOR(theIOR);
-  if (aSObject->_is_nil())
+  virtual void Execute()
   {
-    //Find or Create Hypothesis root
-    SALOMEDS::SObject_var hroot = GetHypothesisRoot(mySComponentMesh,myStudyBuilder);
-    SALOMEDS::SObject_var aroot = GetAlgorithmsRoot(mySComponentMesh,myStudyBuilder);
-    hroot->UnRegister();
-    aroot->UnRegister();
-
-    // Add New Mesh
-    aSObject = myStudyBuilder->NewObject(mySComponentMesh);
-    SALOMEDS::GenericAttribute_var anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject,"AttributePixMap");
-    SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-    aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
-    aPixmap->UnRegister();
-
-    anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject, "AttributeIOR");
-    SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-    anIOR->SetValue(theIOR);
-    anIOR->UnRegister();
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->GetPointsLabeled();
   }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Check if nodes numbering is switched on.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return \c true if nodes numbering is switched on;
+///         \c false otherwise.
+/////////////////////////////////////////////////////////////////
+bool SMESH_Swig::nodesNumbering(const char* uid, int viewUid)
+{
+  bool numbering = false;
+
+  init();
 
-  CORBA::String_var anEntry = aSObject->GetID();
-  aSObject->UnRegister();
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    numbering = ProcessEvent( new TGetNodeNumberingEvent( sobject->GetID().c_str(), viewUid ) );
 
-  return anEntry._retn();
+  return numbering;
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetNodeNumberingEvent: public SALOME_Event
+{
+public:
+  const char* myUid;
+  bool myNumbering;
+  int myViewUid;
+
+  TSetNodeNumberingEvent( const char* uid, bool numbering, int viewUid )
+    : myUid( uid ), myNumbering( numbering ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+    {
+      actor->SetPointsLabeled( myNumbering );
+      if ( view )
+       view->Repaint();
+    }
+  }
+};
 
-//===============================================================
-const char* SMESH_Swig::AddNewHypothesis(const char* theIOR)
+/////////////////////////////////////////////////////////////////
+/// \brief Switch nodes numbering on/off.
+/// \param uid Mesh object's study UID or IOR.
+/// \param numbering \c true to switch nodes numbering on;
+///                  \c false otherwise.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setNodesNumbering(const char* uid, bool numbering, int viewUid)
 {
-  SALOMEDS::SObject_var aSObject = ::AddHypothesis(theIOR,
-                                                   mySComponentMesh,
-                                                   myStudyBuilder);
-  CORBA::String_var anEntry = aSObject->GetID();
-  aSObject->UnRegister();
+  init();
 
-  return anEntry._retn();
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetNodeNumberingEvent( sobject->GetID().c_str(), numbering, viewUid ) );
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetElementNumberingEvent: public SALOME_Event
+{
+public:
+  typedef bool TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
 
-//===============================================================
-const char* SMESH_Swig::AddNewAlgorithms(const char* theIOR)
+  TGetElementNumberingEvent( const char* uid, int viewUid )
+    : myResult( false ), myUid( uid ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->GetCellsLabeled();
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Check if elements numbering is switched on.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return \c true if elements numbering is switched on;
+///         \c false otherwise.
+/////////////////////////////////////////////////////////////////
+bool SMESH_Swig::elementsNumbering(const char* uid, int viewUid)
 {
-  SALOMEDS::SObject_var aSObject = ::AddAlgorithms(theIOR,
-                                                   mySComponentMesh,
-                                                   myStudyBuilder);
-  CORBA::String_var anEntry = aSObject->GetID();
-  aSObject->UnRegister();
+  bool numbering = false;
 
-  return anEntry._retn();
-}
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    numbering = ProcessEvent( new TGetElementNumberingEvent( sobject->GetID().c_str(), viewUid ) );
 
+  return numbering;
+}
 
-//===============================================================
-void SMESH_Swig::SetShape(const char* theShapeEntry,
-                          const char* theMeshEntry)
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetElementNumberingEvent: public SALOME_Event
 {
-  SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID( theShapeEntry );
-  SALOMEDS::SObject_var      aMeshSO = KERNEL::getStudyServant()->FindObjectID( theMeshEntry );
+public:
+  const char* myUid;
+  bool myNumbering;
+  int myViewUid;
+
+  TSetElementNumberingEvent( const char* uid, bool numbering, int viewUid )
+    : myUid( uid ), myNumbering( numbering ), myViewUid( viewUid ) {}
 
-  if(!aMeshSO->_is_nil() && !aGeomShapeSO->_is_nil()){
-    SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObjectToTag(aMeshSO, SMESH::Tag_RefOnShape);
-    myStudyBuilder->Addreference(aSObject,aGeomShapeSO);
-    aSObject->UnRegister();
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+    {
+      actor->SetCellsLabeled( myNumbering );
+      if ( view )
+       view->Repaint();
+    }
   }
-  if ( !aMeshSO->_is_nil() )      aMeshSO->UnRegister();
-  if ( !aGeomShapeSO->_is_nil() ) aGeomShapeSO->UnRegister();
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Switch elements numbering on/off.
+/// \param uid Mesh object's study UID or IOR.
+/// \param numbering \c true to switch elements numbering on;
+///                  \c false otherwise.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setElementsNumbering(const char* uid, bool numbering, int viewUid)
+{
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetElementNumberingEvent( sobject->GetID().c_str(), numbering, viewUid ) );
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetDisplayModeEvent: public SALOME_Event
+{
+public:
+  typedef DisplayMode TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
+
+  TGetDisplayModeEvent( const char* uid, int viewUid )
+    : myResult( UndefinedMode ), myUid( uid ), myViewUid( viewUid ) {}
 
-//===============================================================
-void SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry,
-                               const char* theDomainEntry)
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = (DisplayMode)actor->GetRepresentation();
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Get mesh object's display mode.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return Display mode (UndefinedMode if actor isn't found).
+/////////////////////////////////////////////////////////////////
+DisplayMode SMESH_Swig::displayMode(const char* uid, int viewUid)
 {
-  ::SetHypothesis(theMeshOrSubMeshEntry,
-                  theDomainEntry,
-                  myStudyBuilder);
+  DisplayMode mode = UndefinedMode;
+
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    mode = ProcessEvent( new TGetDisplayModeEvent( sobject->GetID().c_str(), viewUid ) );
+
+  return mode;
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetDisplayModeEvent: public SALOME_Event
+{
+public:
+  const char* myUid;
+  DisplayMode myMode;
+  int myViewUid;
+
+  TSetDisplayModeEvent( const char* uid, DisplayMode mode, int viewUid )
+    : myUid( uid ), myMode( mode), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor && myMode != UndefinedMode )
+    {
+      actor->SetRepresentation( myMode );
+      if ( view )
+       view->Repaint();
+    }
+  }
+};
 
-//===============================================================
-void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry,
-                               const char* theDomainEntry)
+/////////////////////////////////////////////////////////////////
+/// \brief Set mesh object's display mode.
+/// \param uid Mesh object's study UID or IOR.
+/// \param mode Display mode.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setDisplayMode(const char* uid, DisplayMode mode, int viewUid)
 {
-  ::SetAlgorithms(theMeshOrSubMeshEntry,
-                  theDomainEntry,
-                  myStudyBuilder);
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetDisplayModeEvent( sobject->GetID().c_str(), mode, viewUid ) );
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetShrinkModeEvent: public SALOME_Event
+{
+public:
+  typedef bool TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
 
-//===============================================================
-void
-SMESH_Swig::UnSetHypothesis(const char* theDomainEntry)
+  TGetShrinkModeEvent( const char* uid, int viewUid )
+    : myResult( false ), myUid( uid ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->IsShrunk();
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Check if shrink mode is switched on.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return \c true if shrink mode is switched on;
+///         \c false otherwise.
+/////////////////////////////////////////////////////////////////
+bool SMESH_Swig::shrinkMode(const char* uid, int viewUid)
 {
-  SALOMEDS::SObject_var aDomainSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry);
-  if(!aDomainSO->_is_nil())
-    myStudyBuilder->RemoveObject(aDomainSO);
+  bool shrinkMode = false;
+
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    shrinkMode = ProcessEvent( new TGetShrinkModeEvent( sobject->GetID().c_str(), viewUid ) );
+
+  return shrinkMode;
 }
 
-const char* SMESH_Swig::AddSubMesh(const char* theMeshEntry,
-                                   const char* theSubMeshIOR,
-                                   int theShapeType)
-{
-  SALOMEDS::SObject_var aMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshEntry);
-  if(!aMeshSO->_is_nil()) {
-    long aShapeTag;
-    QString aSubMeshName;
-    switch(theShapeType) {
-    case TopAbs_SOLID:
-      aShapeTag    = SMESH::Tag_SubMeshOnSolid;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnSolid");
-      break;
-    case TopAbs_FACE:
-      aShapeTag    = SMESH::Tag_SubMeshOnFace;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnFace");
-      break;
-    case TopAbs_EDGE:
-      aShapeTag    = SMESH::Tag_SubMeshOnEdge;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnEdge");
-      break;
-    case TopAbs_VERTEX:
-      aShapeTag    = SMESH::Tag_SubMeshOnVertex;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnVertex");
-      break;
-    default:
-      aShapeTag    = SMESH::Tag_SubMeshOnCompound;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnCompound");
-    }
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetShrinkModeEvent: public SALOME_Event
+{
+public:
+  const char* myUid;
+  bool myShrink;
+  int myViewUid;
+
+  TSetShrinkModeEvent( const char* uid, bool shrink, int viewUid )
+    : myUid( uid ), myShrink( shrink ), myViewUid( viewUid ) {}
 
-    SALOMEDS::GenericAttribute_var anAttr;
-    SALOMEDS::SObject_var aSubMeshesRoot;
-    if ( !aMeshSO->FindSubObject( aShapeTag, aSubMeshesRoot ) )
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
     {
-      aSubMeshesRoot = myStudyBuilder->NewObjectToTag(aMeshSO,aShapeTag);
-      anAttr = myStudyBuilder->FindOrCreateAttribute(aSubMeshesRoot,"AttributeName");
-      SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
-      aName->SetValue(aSubMeshName.toLatin1().data());
-      aName->UnRegister();
-      anAttr = myStudyBuilder->FindOrCreateAttribute(aSubMeshesRoot,"AttributeSelectable");
-      SALOMEDS::AttributeSelectable_var aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
-      aSelAttr->SetSelectable(false);
-      aSelAttr->UnRegister();
+      if ( myShrink )
+       actor->SetShrink();
+      else
+       actor->UnShrink();
+      if ( view )
+       view->Repaint();
     }
-    aSubMeshesRoot->UnRegister();
-    aMeshSO->UnRegister();
+  }
+};
 
-    SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObject(aSubMeshesRoot);
-    anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR");
-    SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-    anIOR->SetValue(theSubMeshIOR);
-    anIOR->UnRegister();
+/////////////////////////////////////////////////////////////////
+/// \brief Switch shrink mode on/off.
+/// \param uid Mesh object's study UID or IOR.
+/// \param shrink \c true to switch shrink mode on;
+///               \c false otherwise.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setShrinkMode(const char* uid, bool shrink, int viewUid)
+{
+  init();
 
-    CORBA::String_var aString = aSObject->GetID();
-    aSObject->UnRegister();
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetShrinkModeEvent( sobject->GetID().c_str(), shrink, viewUid ) );
+}
 
-    return aString._retn();
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetOpacityEvent: public SALOME_Event
+{
+public:
+  typedef double TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
+
+  TGetOpacityEvent( const char* uid, int viewUid )
+    : myResult( 0 ), myUid( uid ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
+  {
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->GetOpacity();
   }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Get mesh object's opacity.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return Opacity value.
+/////////////////////////////////////////////////////////////////
+double SMESH_Swig::opacity(const char* uid, int viewUid)
+{
+  double opacity = 0;
+
+  init();
 
-  return "";
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    opacity = ProcessEvent( new TGetOpacityEvent( sobject->GetID().c_str(), viewUid ) );
+
+  return opacity;
 }
 
-const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
-                                          const char* theGeomShapeEntry,
-                                          const char* theSubMeshIOR,
-                                          int         ShapeType)
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetOpacityEvent: public SALOME_Event
 {
-  SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID(theGeomShapeEntry);
-  if(!aGeomShapeSO->_is_nil())
+public:
+  const char* myUid;
+  double myOpacity;
+  int myViewUid;
+
+  TSetOpacityEvent( const char* uid, double opacity, int viewUid )
+    : myUid( uid ), myOpacity( opacity ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
   {
-    const char *       aSubMeshEntry = AddSubMesh(theMeshEntry,theSubMeshIOR,ShapeType);
-    SALOMEDS::SObject_var aSubMeshSO = KERNEL::getStudyServant()->FindObjectID(aSubMeshEntry);
-    if ( !aSubMeshSO->_is_nil()) {
-      SetShape( theGeomShapeEntry, aSubMeshEntry );
-      CORBA::String_var aString = aSubMeshSO->GetID();
-      aSubMeshSO->UnRegister();
-      return aString._retn();
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+    {
+      actor->SetOpacity( myOpacity );
+      if ( view )
+       view->Repaint();
     }
-    aGeomShapeSO->UnRegister();
   }
+};
 
-  return "";
-}
+/////////////////////////////////////////////////////////////////
+/// \brief Set mesh object's opacity.
+/// \param uid Mesh object's study UID or IOR.
+/// \param opacity Opacity value.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setOpacity(const char* uid, double opacity, int viewUid)
+{
+  init();
 
-/*!
-  \brief Gets window with specified identifier
-  \internal
-  \param id window identifier
-  \return pointer on the window
-*/
-
-SUIT_ViewWindow* getWnd( const int id )
-{
-  SUIT_ViewWindow* resWnd = 0;
-  SUIT_Session* aSession          = SUIT_Session::session();
-  SUIT_Application* anApplication = aSession->activeApplication();
-  SalomeApp_Application* app    = dynamic_cast<SalomeApp_Application*>(anApplication);
-  if ( app ) {
-    ViewManagerList vmlist = app->viewManagers();
-    foreach( SUIT_ViewManager* vm, vmlist ) {
-      QVector<SUIT_ViewWindow*> vwlist = vm->getViews();
-      foreach ( SUIT_ViewWindow* vw, vwlist ) {
-        if ( id == vw->getId() ) {
-          resWnd = vw;
-          break;
-        }
-      }
-    }
-  }
-  return resWnd;
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetOpacityEvent( sobject->GetID().c_str(), opacity, viewUid ) );
 }
 
-class TGetActorAspect: public SALOME_Event
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetOrientationEvent: public SALOME_Event
 {
 public:
-  typedef actorAspect TResult;
+  typedef bool TResult;
   TResult myResult;
-  const char* _entry;
-  int _wid;
-  TGetActorAspect( const char* Mesh_Entry, int viewId )
+  const char* myUid;
+  int myViewUid;
+
+  TGetOrientationEvent( const char* uid, int viewUid )
+    : myResult( false ), myUid( uid ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
   {
-    _entry = Mesh_Entry;
-    _wid = viewId;
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->GetFacesOriented();
   }
-  virtual void Execute()
-    {
-      SMESH_Actor* anActor;
-      if (_wid)
-        {
-          SUIT_ViewWindow* w = getWnd(_wid);
-          anActor = SMESH::FindActorByEntry( w, _entry );
-        }
-      else
-        anActor = SMESH::FindActorByEntry( _entry );
-      if ( !anActor )
-        {
-          MESSAGE("GetActorAspect: no actor corresponding to: " << _entry);
-          return;
-        }
-      anActor->GetSufaceColor(myResult.surfaceColor.r,
-                              myResult.surfaceColor.g,
-                              myResult.surfaceColor.b,
-                              myResult.surfaceColor.delta);
-      anActor->GetVolumeColor(myResult.volumeColor.r,
-                              myResult.volumeColor.g,
-                              myResult.volumeColor.b,
-                              myResult.volumeColor.delta);
-      anActor->GetEdgeColor(myResult.edgeColor.r,
-                            myResult.edgeColor.g,
-                            myResult.edgeColor.b);
-      anActor->GetNodeColor(myResult.nodeColor.r,
-                            myResult.nodeColor.g,
-                            myResult.nodeColor.b);
-      myResult.opacity= anActor->GetOpacity();
-      MESSAGE("opacity: " << myResult.opacity);
-    }
 };
 
-actorAspect SMESH_Swig::GetActorAspect( const char* Mesh_Entry, int viewId )
+/////////////////////////////////////////////////////////////////
+/// \brief Check if faces orientation vectors are shown.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return \c true if faces orientation vectors are shown;
+///         \c false otherwise.
+/////////////////////////////////////////////////////////////////
+bool SMESH_Swig::isOrientationShown(const char* uid, int viewUid)
 {
-  return ProcessEvent(new TGetActorAspect( Mesh_Entry, viewId));
+  bool shown = false;
+
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    shown = ProcessEvent( new TGetOrientationEvent( sobject->GetID().c_str(), viewUid ) );
+
+  return shown;
 }
 
-void SMESH_Swig::SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetOrientationEvent: public SALOME_Event
 {
-  class TSetActorAspect: public SALOME_Event
+public:
+  const char* myUid;
+  bool myShown;
+  int myViewUid;
+
+  TSetOrientationEvent( const char* uid, bool shown, int viewUid )
+    : myUid( uid ), myShown( shown ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
   {
-  public:
-    const char* _entry;
-    actorAspect _actorPres;
-    int _wid;
-    TSetActorAspect(const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
     {
-      _entry = Mesh_Entry;
-      _actorPres = actorPres;
-      _wid = viewId;
+      actor->SetFacesOriented( myShown );
+      if ( view )
+       view->Repaint();
     }
-    virtual void Execute()
-    {
-      SMESH_Actor* anActor;
-      if (_wid)
-        {
-          SUIT_ViewWindow* w = getWnd(_wid);
-          anActor = SMESH::FindActorByEntry( w, _entry );
-        }
-      else
-        anActor = SMESH::FindActorByEntry( _entry );
-      if ( !anActor )
-        {
-          MESSAGE("SetActorAspect: no actor corresponding to: " << _entry);
-          return;
-        }
-      anActor->SetSufaceColor(_actorPres.surfaceColor.r,
-                              _actorPres.surfaceColor.g,
-                              _actorPres.surfaceColor.b,
-                              _actorPres.surfaceColor.delta);
-      anActor->SetVolumeColor(_actorPres.volumeColor.r,
-                              _actorPres.volumeColor.g,
-                              _actorPres.volumeColor.b,
-                              _actorPres.volumeColor.delta);
-      anActor->SetEdgeColor(_actorPres.edgeColor.r,
-                            _actorPres.edgeColor.g,
-                            _actorPres.edgeColor.b);
-      anActor->SetNodeColor(_actorPres.nodeColor.r,
-                            _actorPres.nodeColor.g,
-                            _actorPres.nodeColor.b);
-      anActor->SetOpacity(_actorPres.opacity);
-      if (_wid)
-        {
-          SUIT_ViewWindow* w = getWnd(_wid);
-          w->repaint();
-        }
-      else
-        {
-          SUIT_Session* aSession          = SUIT_Session::session();
-          SUIT_Application* anApplication = aSession->activeApplication();
-          SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
-          SUIT_ViewManager* vman          = anApp->getViewManager(VTKViewer_Viewer::Type(),true);
-          vman->getActiveView()->repaint();
-        }
-    }
-  };
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Show/hide faces orientation vectors.
+/// \param uid Mesh object's study UID or IOR.
+/// \param shown \c true to show faces orientation vectors;
+///              \c false otherwise.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setOrientationShown(const char* uid, bool shown, int viewUid)
+{
+  init();
 
-  ProcessVoidEvent(new TSetActorAspect(actorPres, Mesh_Entry, viewId));
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetOrientationEvent( sobject->GetID().c_str(), shown, viewUid ) );
 }
 
-void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetEntitiesEvent: public SALOME_Event
 {
-  //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
-  class TEvent: public SALOME_Event
+public:
+  typedef int TResult;
+  TResult myResult;
+  const char* myUid;
+  int myViewUid;
+
+  TGetEntitiesEvent( const char* uid, int viewUid )
+    : myResult( EntityNone ), myUid( uid ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
   {
-  private:
-    const char* _entry;
-  public:
-    TEvent(const char* Mesh_Entry) {
-      _entry = Mesh_Entry;
-    }
-    virtual void Execute() {
-      //SMESH::UpdateView(SMESH::eDisplay, _entry);
-      SUIT_Session* aSession          = SUIT_Session::session();
-      SUIT_Application* anApplication = aSession->activeApplication();
-      SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
-      /*SUIT_ViewManager* vman        = */anApp->getViewManager(VTKViewer_Viewer::Type(),true);
-      SMESHGUI_Displayer* aDisp       = new SMESHGUI_Displayer(anApp);
-      aDisp->Display(_entry,1);
-    }
-  };
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+      myResult = actor->GetEntityMode();
+  }
+};
+
+/////////////////////////////////////////////////////////////////
+/// \brief Get mesh object's visible entities.
+/// \param uid Mesh object's study UID or IOR.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return Enumerator describing entities being visible.
+/////////////////////////////////////////////////////////////////
+int SMESH_Swig::entitiesShown(const char* uid, int viewUid)
+{
+  int entities = EntityNone;
+
+  init();
 
-  ProcessVoidEvent(new TEvent(Mesh_Entry));
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    entities = ProcessEvent( new TGetEntitiesEvent( sobject->GetID().c_str(), viewUid ) );
+
+  return entities;
 }
 
-void SMESH_Swig::EraseActor( const char* Mesh_Entry, const bool allViewers )
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetEntitiesEvent: public SALOME_Event
 {
-  class TEvent: public SALOME_Event
+public:
+  const char* myUid;
+  int myEntities;
+  int myViewUid;
+
+  TSetEntitiesEvent( const char* uid, int entities, int viewUid )
+    : myUid( uid ), myEntities( entities ), myViewUid( viewUid ) {}
+
+  virtual void Execute()
   {
-  private:
-    const char* _entry;
-    bool        _allViewers;
-  public:
-    TEvent(const char* Mesh_Entry, const bool allViewers ) {
-      _entry = Mesh_Entry;
-      _allViewers = allViewers;
-    }
-    virtual void Execute() {
-      SUIT_Session* aSession          = SUIT_Session::session();
-      SUIT_Application* anApplication = aSession->activeApplication();
-      SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
-      SMESHGUI_Displayer* aDisp       = new SMESHGUI_Displayer(anApp);
-      ViewManagerList aManagers;
-      if ( !_allViewers ) {
-        aManagers << anApp->activeViewManager();
-      }
-      else {
-        aManagers = anApp->viewManagers();
-      }
-      foreach( SUIT_ViewManager* aMgr, aManagers ) {
-        if ( aMgr && aMgr->getType() == VTKViewer_Viewer::Type() ) {
-          SALOME_View* aSalomeView = dynamic_cast<SALOME_View*>(aMgr->getViewModel());
-          if (aSalomeView) {
-            aDisp->Erase(_entry,true, true, aSalomeView);
-          }
-        }
-      }
+    SALOME_View* view = uid2wnd( myViewUid );
+    SMESH_Actor* actor = actorFromView( view, myUid );
+    if ( actor )
+    {
+      actor->SetEntityMode( myEntities );
+      if ( view )
+       view->Repaint();
     }
-  };
+  }
+};
 
-  ProcessVoidEvent(new TEvent(Mesh_Entry, allViewers));
+/////////////////////////////////////////////////////////////////
+/// \brief Set mesh object's visible entities.
+/// \param uid Mesh object's study UID or IOR.
+/// \param entities Enumerator describing entities to be shown.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setEntitiesShown(const char* uid, int entities, int viewUid)
+{
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSetEntitiesEvent( sobject->GetID().c_str(), entities, viewUid ) );
 }
 
-void SMESH_Swig::UpdateActor( const char* Mesh_Entry ) {
-  class TEvent: public SALOME_Event
+/////////////////////////////////////////////////////////////////
+/// \brief Check if given mesh object's entity is shown.
+/// \param uid Mesh object's study UID or IOR.
+/// \param entity Mesh entity.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return \c true if entity is shown; \c false otherwise.
+/////////////////////////////////////////////////////////////////
+bool SMESH_Swig::isEntityShown(const char* uid, EntityMode entity, int viewUid)
+{
+  bool shown = false;
+
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
   {
-  private:
-    const char* _entry;
-  public:
-    TEvent( const char* Mesh_Entry ) {
-      _entry = Mesh_Entry;
-    }
-    virtual void Execute() {
-      Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject
-        ( _entry, "SMESH", "" );
-      SMESH::Update( anIO, true );
-    }
-  };
+    int entities = ProcessEvent( new TGetEntitiesEvent( sobject->GetID().c_str(), viewUid ) );
+    shown = (bool)( entities & entity );
+  }
 
-  ProcessVoidEvent( new TEvent(Mesh_Entry) );
+  return shown;
 }
 
-void SMESH_Swig::SetName(const char* theEntry,
-                         const char* theName)
-{
-  SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectID(theEntry);
-  SALOMEDS::GenericAttribute_var anAttr;
-  SALOMEDS::AttributeName_var aName;
-  if(!aSObject->_is_nil()){
-    anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeName");
-    aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue(theName);
-    aName->UnRegister();
-    aSObject->UnRegister();
+/////////////////////////////////////////////////////////////////
+/// \brief Show/hide entity for given mesh object.
+/// \param uid Mesh object's study UID or IOR.
+/// \param entity Mesh entity.
+/// \param show Visibility status.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setEntityShown(const char* uid, EntityMode entity, bool show, int viewUid)
+{
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+  {
+    int entities = ProcessEvent( new TGetEntitiesEvent( sobject->GetID().c_str(), viewUid ) );
+    if ( show )
+      entities |= entity;
+    else
+      entities &= ~entity;
+    ProcessVoidEvent( new TSetEntitiesEvent( sobject->GetID().c_str(), entities, viewUid ) );
   }
 }
 
-//================================================================================
-/*!
- * \brief Set mesh icon according to compute status
-  * \param Mesh_Entry - entry of a mesh
-  * \param isComputed - is mesh computed or not
- */
-//================================================================================
+/////////////////////////////////////////////////////////////////
+/// \brief Initialize %SMESH GUI Python interface.
+/// \deprecated Interface is initialized automatically.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::Init()
+{
+  deprecated("SMESH_Swig::Init");
+  // does nothing; initialization is done automatically.
+}
 
-void SMESH_Swig::SetMeshIcon(const char* theMeshEntry,
-                             const bool  theIsComputed,
-                             const bool  isEmpty)
+/////////////////////////////////////////////////////////////////
+/// \brief Publish mesh in the active study.
+/// \deprecated Publishing is done automatically.
+/// \param ior IOR of the mesh.
+/// \param name Name of the mesh (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddNewMesh(const char* ior, const char* name)
 {
-  class TEvent: public SALOME_Event
-  {
-    std::string         myMeshEntry;
-    bool                myIsComputed, myIsEmpty;
-  public:
-    TEvent(const std::string&         theMeshEntry,
-           const bool                 theIsComputed,
-           const bool                 isEmpty):
-      myMeshEntry (theMeshEntry),
-      myIsComputed(theIsComputed),
-      myIsEmpty   (isEmpty)
-    {}
-
-    virtual
-    void
-    Execute()
-    {
-      SALOMEDS::SObject_ptr aMeshSO = KERNEL::getStudyServant()->FindObjectID(myMeshEntry.c_str());
-      if(_PTR(SObject) aMesh = ClientFactory::SObject(aMeshSO))
-        SMESH::ModifiedMesh(aMesh,myIsComputed,myIsEmpty);
-      // aMeshSO->UnRegister();  ~aMesh() already called UnRegister()!
-    }
-  };
+  deprecated("SMESH_Swig::AddNewMesh", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Publish hypothesis in the active study.
+/// \deprecated Publishing is done automatically.
+/// \param ior IOR of the hypothesis.
+/// \param name Name of the hypothesis (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddNewHypothesis(const char* ior, const char* name)
+{
+  deprecated("SMESH_Swig::AddNewHypothesis", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Publish algorithm in the active study.
+/// \deprecated Publishing is done automatically.
+/// \param ior IOR of the algorithm.
+/// \param name Name of the algorithm (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddNewAlgorithm(const char* ior, const char* name)
+{
+  deprecated("SMESH_Swig::AddNewAlgorithm", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \deprecated Publishing is done automatically.
+/// \deprecated Synonim of AddNewAlgorithm().
+/// \param ior IOR of the algorithm.
+/// \param name Name of the algorithm (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddNewAlgorithms(const char* ior, const char* name)
+{
+  deprecated("SMESH_Swig::AddNewAlgorithms", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Add reference on a shape for mesh in a study.
+/// \deprecated Publishing is done automatically.
+/// \param shapeUid GEOM shape's study UID (not used).
+/// \param meshUid Mesh's study UID (not used).
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetShape(const char* /*shapeUid*/, const char* /*meshUid*/)
+{
+  deprecated("SMESH_Swig::SetShape", "SMESH_Swig::publish");
+  // does nothing: publishing is done automatically
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Assign hypothesis to mesh or sub-mesh.
+/// \deprecated Publishing is done automatically.
+/// \param meshUid Mesh's or sub-mesh's study UID (not used).
+/// \param hypoUID Hypothesis's study UID (not used).
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetHypothesis(const char* /*meshUid*/, const char* /*hypoUID*/)
+{
+  deprecated("SMESH_Swig::SetHypothesis", "SMESH_Swig::publish");
+  // does nothing: publishing is done automatically
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Assign algorithm to mesh or sub-mesh.
+/// \deprecated Publishing is done automatically.
+/// \param meshUid Mesh's or sub-mesh's study UID (not used).
+/// \param algoUID Algorithm's study UID (not used).
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetAlgorithms(const char* /*meshUid*/, const char* /*algoUID*/)
+{
+  deprecated("SMESH_Swig::SetAlgorithms", "SMESH_Swig::publish");
+  // does nothing: publishing is done automatically
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Anassign hypothesis or algorithm from mesh or sub-mesh.
+/// \deprecated Unpublishing is done automatically.
+/// \param uid Hypothesis's or algorithm's study UID (not used).
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::UnSetHypothesis(const char* /*uid*/)
+{
+  deprecated("SMESH_Swig::UnSetHypothesis");
+  // does nothing: unpublishing is done automatically
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Publish sub-mesh in the active study.
+/// \deprecated Publishing is done automatically.
+/// \param meshUid Parent mesh's study UID (not used).
+/// \param ior IOR of the sub-mesh.
+/// \param shapeType GEOM shape's type (not used).
+/// \param name Name of the sub-mesh (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddSubMesh(const char* /*meshUid*/,
+                                   const char* ior,
+                                   int /*shapeType*/,
+                                  const char* name)
+{
+  deprecated("SMESH_Swig::AddSubMesh", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \brief Publish sub-mesh in the active study.
+/// \deprecated Publishing is done automatically.
+/// \param meshUid Parent mesh's study UID (not used).
+/// \param shapeUid GEOM shape's study UID (not used).
+/// \param ior IOR of the sub-mesh.
+/// \param shapeType GEOM shape's type (not used).
+/// \param name Name of the sub-mesh (optional).
+/// \return UID of the data object.
+/////////////////////////////////////////////////////////////////
+const char* SMESH_Swig::AddSubMeshOnShape(const char* /*meshUid*/,
+                                          const char* /*shapeUid*/,
+                                          const char* ior,
+                                          int /*shapeType*/,
+                                         const char* name)
+{
+  deprecated("SMESH_Swig::AddSubMeshOnShape", "SMESH_Swig::publish");
+  return publish( ior, name );
+}
 
-  ProcessVoidEvent(new TEvent(theMeshEntry,
-                              theIsComputed,
-                              isEmpty));
+/////////////////////////////////////////////////////////////////
+/// \brief Set new study name of given object.
+/// \deprecated Use rename() method.
+/// \param uid Object's study UID or IOR.
+/// \param name New name of the object.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetName(const char* uid, const char* name)
+{
+  deprecated("SMESH_Swig::SetName", "SMESH_Swig::rename");
+  rename( uid, name );
 }
 
-/*!
-  \brief Helper class for selection event.
-*/
+/////////////////////////////////////////////////////////////////
+/// \brief Set mesh icon according to compute status
+/// \deprecated Publishing is done automatically.
+/// \param meshUid Mesh's study UID (not used).
+/// \param isComputed Flag pointing that mesh is computed or no
+///        (not used).
+/// \param isEmpty Flag pointing that mesh is empty or no
+///        (not used).
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetMeshIcon(const char* /*meshUid*/,
+                             const bool /*isComputed*/,
+                             const bool /*isEmpty*/)
+{
+  deprecated("SMESH_Swig::SetMeshIcon", "SMESH_Swig::publish");
+  // does nothing: publishing is done automatically
+}
+
+/////////////////////////////////////////////////////////////////
+/// Display mesh in the currently active view window.
+/// \deprecated Use display() method.
+/// \param meshUid Mesh's study UID.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::CreateAndDisplayActor(const char* meshUid)
+{
+  deprecated("SMESH_Swig::CreateAndDisplayActor", "SMESH_Swig::display");
+  display( meshUid );
+}
+
+/////////////////////////////////////////////////////////////////
+/// Erase mesh in the view window(s).
+/// \deprecated Use erase() method.
+/// \param meshUid Mesh's study UID.
+/// \param allViewers If \c true, mesh is removed from all views.
+///                   Default: \c false.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::EraseActor(const char* meshUid, const bool allViewers)
+{
+  deprecated("SMESH_Swig::EraseActor", "SMESH_Swig::erase");
+  erase( meshUid, allViewers ? -1 : 0 );
+}
+
+/////////////////////////////////////////////////////////////////
+/// Update mesh object.
+/// \deprecated Use update() method.
+/// \param meshUid Mesh's study UID.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::UpdateActor(const char* meshUid)
+{
+  deprecated("SMESH_Swig::UpdateActor", "SMESH_Swig::update");
+  update( meshUid );
+}
+
+/////////////////////////////////////////////////////////////////
+/// Get mesh object's properties.
+/// \deprecated Use properties() method.
+/// \param meshUid Mesh's study UID.
+/// \param viewUid View window UID (0 means currently active view
+///                window). Default: 0.
+/////////////////////////////////////////////////////////////////
+actorAspect SMESH_Swig::GetActorAspect(const char* meshUid, int viewUid)
+{
+  deprecated("SMESH_Swig::GetActorAspect", "SMESH_Swig::properties");
+  return properties( meshUid, viewUid );
+}
+
+/////////////////////////////////////////////////////////////////
+/// Set mesh object's properties.
+/// \deprecated Use setProperties() method.
+/// \param meshUid Mesh's study UID.
+/// \param viewUid View window UID (0 means currently active view
+///                window). Default: 0.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::SetActorAspect(const actorAspect& aspect, const char* meshUid, int viewUid)
+{
+  deprecated("SMESH_Swig::SetActorAspect", "SMESH_Swig::setProperties");
+  setProperties( meshUid, aspect, viewUid );
+}
+
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
 class TSelectListEvent: public SALOME_Event
 {
-  const char*       myId;
-  std::vector<int>  myIdsList;
-  bool              myIsAppend;
+  const char* myUid;
+  std::vector<int> myIds;
+  bool myIsAppend;
 
 public:
-  TSelectListEvent(const char* id, std::vector<int> ids, bool append) :
-    myId(id),
-    myIdsList(ids),
-    myIsAppend(append)
+  TSelectListEvent(const char* uid, std::vector<int> ids, bool append)
+    : myUid( uid ), myIds( ids ), myIsAppend( append )
   {}
+
   virtual void Execute()
   {
-    
     LightApp_SelectionMgr* selMgr = 0;
-    SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
-    if( anApp )
-      selMgr = dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+    if ( app )
+      selMgr = dynamic_cast<LightApp_SelectionMgr*>( app->selectionMgr() );
 
-    if( !selMgr )
+    if ( !selMgr )
       return;
     
     selMgr->clearFilters();
 
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
-    if(!aViewWindow)
+    SVTK_ViewWindow* vw = SMESH::GetViewWindow();
+    if ( !vw )
       return;
 
-    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
+    SMESH_Actor* actor = SMESH::FindActorByEntry( myUid );
     
-    if (!anActor || !anActor->hasIO())
+    if ( !actor || !actor->hasIO() )
       return;
     
-    Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
-    SALOME_ListIO aList;
-    aList.Append(anIO);
-    selMgr->setSelectedObjects(aList, false);
+    Handle(SALOME_InteractiveObject) io = actor->getIO();
+    SALOME_ListIO ios;
+    ios.Append( io );
+    selMgr->setSelectedObjects( ios, false );
 
-    if ( aViewWindow->SelectionMode() ==  ActorSelection ) {
+    if ( vw->SelectionMode() == ActorSelection )
       return;
-    }
         
-    TColStd_MapOfInteger aMap;
-    std::vector<int>::const_iterator anIter;
-    for (anIter = myIdsList.begin(); anIter != myIdsList.end(); ++anIter) {
-      aMap.Add(*anIter);
+    TColStd_MapOfInteger idMap;
+    std::vector<int>::const_iterator it;
+    for ( it = myIds.begin(); it != myIds.end(); ++it )
+    {
+      idMap.Add( *it );
     }
 
     // Set new selection
-    SVTK_Selector* aSelector  = aViewWindow->GetSelector();
-    aSelector->AddOrRemoveIndex(anIO, aMap, myIsAppend);
-    aViewWindow->highlight( anIO, true, true );
-    aViewWindow->GetInteractor()->onEmitSelectionChanged();
+    SVTK_Selector* selector = vw->GetSelector();
+    selector->AddOrRemoveIndex( io, idMap, myIsAppend );
+    vw->highlight( io, true, true );
+    vw->GetInteractor()->onEmitSelectionChanged();
   }
 };
 
-/*!
-  \brief Select the elements on the mesh, sub-mesh or group.
-  \param id object entry
-  \param ids list of the element ids
-  \param mode selection mode
-*/
-void SMESH_Swig::select( const char* id, std::vector<int> ids, bool append ) {
-  ProcessVoidEvent( new TSelectListEvent( id, ids, append ) );
+/////////////////////////////////////////////////////////////////
+/// \brief Select elements of the mesh, sub-mesh or group.
+/// \param uid Mesh object's study UID or IOR.
+/// \param ids List of mesh elements.
+/// \param append If \c true, elements are added to current
+///               selection; otherwise, previous selection is
+///               cleared.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::select(const char* uid, std::vector<int> ids, bool append)
+{
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSelectListEvent( sobject->GetID().c_str(), ids, append ) );
 }
   
-/*!
-  \brief Select the elements on the mesh, sub-mesh or group.
-  \param id object entry
-  \param id id of the element
-  \param mode selection mode
-*/
-void SMESH_Swig::select( const char* id, int id1, bool append ) {
+/////////////////////////////////////////////////////////////////
+/// \brief Select element of the mesh, sub-mesh or group.
+/// \param uid Mesh object's study UID or IOR.
+/// \param id Mesh element.
+/// \param append If \c true, element is added to current
+///               selection; otherwise, previous selection is
+///               cleared.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::select(const char* uid, int id, bool append)
+{
+  init();
+
   std::vector<int> ids;
-  ids.push_back( id1 );
-  ProcessVoidEvent( new TSelectListEvent( id, ids, append ) );
+  ids.push_back( id );
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSelectListEvent( sobject->GetID().c_str(), ids, append ) );
 }
 
-/*!
-  \brief Helper class for selection edges of cell event
-*/
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
 class TSelectListOfPairEvent: public SALOME_Event
 {
-  const char*                        myId;
-  std::vector<std::pair<int, int> >  myIdsList;
-  bool                               myIsAppend;
+  const char* myUid;
+  std::vector<std::pair<int, int> > myIds;
+  bool myIsAppend;
 
 public:
-  TSelectListOfPairEvent(const char* id, std::vector<std::pair<int, int> > ids, bool append) :
-    myId(id),
-    myIdsList(ids),
-    myIsAppend(append)
+  TSelectListOfPairEvent(const char* uid, std::vector<std::pair<int, int> > ids, bool append)
+    : myUid( uid ), myIds( ids ), myIsAppend( append )
   {}
+
   virtual void Execute()
   {
-    
     LightApp_SelectionMgr* selMgr = 0;
-    SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
-    if( anApp )
-      selMgr = dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+    if ( app )
+      selMgr = dynamic_cast<LightApp_SelectionMgr*>( app->selectionMgr() );
 
-    if( !selMgr )
+    if ( !selMgr )
       return;
     
     selMgr->clearFilters();
 
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
-    if(!aViewWindow)
+    SVTK_ViewWindow* vw = SMESH::GetViewWindow();
+    if ( !vw )
       return;
 
-    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
+    SMESH_Actor* actor = SMESH::FindActorByEntry( myUid );
     
-    if (!anActor || !anActor->hasIO())
+    if ( !actor || !actor->hasIO() )
       return;
     
-    Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
-    SALOME_ListIO aList;
-    aList.Append(anIO);
-    selMgr->setSelectedObjects(aList, false);
+    Handle(SALOME_InteractiveObject) io = actor->getIO();
+    SALOME_ListIO ios;
+    ios.Append( io );
+    selMgr->setSelectedObjects( ios, false );
 
-    if ( aViewWindow->SelectionMode() !=  EdgeOfCellSelection ) {
+    if ( vw->SelectionMode() != EdgeOfCellSelection )
       return;
-    }
         
-    SVTK_IndexedMapOfIds aMap;
-    std::vector<std::pair<int, int> >::const_iterator anIter;
-    for (anIter = myIdsList.begin(); anIter != myIdsList.end(); ++anIter) {
-      std::vector<int> aCompositeId;
-      aCompositeId.push_back((*anIter).first);
-      aCompositeId.push_back((*anIter).second);
-      aMap.Add(aCompositeId);
+    SVTK_IndexedMapOfIds idMap;
+    std::vector<std::pair<int, int> >::const_iterator it;
+    for ( it = myIds.begin(); it != myIds.end(); ++it )
+    {
+      std::vector<int> pair;
+      pair.push_back( (*it).first );
+      pair.push_back( (*it).second );
+      idMap.Add( pair );
     }
 
     // Set new selection
-    SVTK_Selector* aSelector  = aViewWindow->GetSelector();
-    aSelector->AddOrRemoveCompositeIndex(anIO, aMap, myIsAppend);
-    aViewWindow->highlight( anIO, true, true );
-    aViewWindow->GetInteractor()->onEmitSelectionChanged();
+    SVTK_Selector* selector = vw->GetSelector();
+    selector->AddOrRemoveCompositeIndex( io, idMap, myIsAppend );
+    vw->highlight( io, true, true );
+    vw->GetInteractor()->onEmitSelectionChanged();
   }
 };
 
-/*!
-  \brief Select the elements on the mesh, sub-mesh or group.
-  \param id object entry
-  \param ids list of the element ids
-  \param mode selection mode
-*/
-void SMESH_Swig::select( const char* id, std::vector<std::pair<int,int> > ids, bool append ) {
-  ProcessVoidEvent( new TSelectListOfPairEvent( id, ids, append ) );
+/////////////////////////////////////////////////////////////////
+/// \brief Select pseudo-edges (specified by two nodes)
+///        of the mesh, sub-mesh or group.
+/// \param uid Mesh object's study UID or IOR.
+/// \param ids List of pairs containing two nodes IDs.
+/// \param append If \c true, pseudo-edges are added to current
+///               selection; otherwise, previous selection is
+///               cleared.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::select(const char* uid, std::vector<std::pair<int,int> > ids, bool append)
+{
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ProcessVoidEvent( new TSelectListOfPairEvent( sobject->GetID().c_str(), ids, append ) );
 }
 
-class TGetSelectionModeEvent : public SALOME_Event
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetSelectionModeEvent: public SALOME_Event
 {
 public:
   typedef SelectionMode TResult;
   TResult myResult;
-  TGetSelectionModeEvent() : myResult( Undefined ) {}
+  int myViewUid;
+
+  TGetSelectionModeEvent( int viewUid ) :
+    myResult( Undefined ), myViewUid( viewUid ) {}
+
   virtual void Execute()
   {
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( );
-    if(!aViewWindow)
-      return;
-    
-    myResult = (SelectionMode) aViewWindow->SelectionMode();
+    SVTK_Viewer* model = dynamic_cast<SVTK_Viewer*>( uid2wnd( myViewUid ) );
+    if ( model )
+    {
+      SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( model->getViewManager()->getActiveView() );
+      if ( vw )
+       myResult = (SelectionMode)vw->SelectionMode();
+    }
   }
 };
 
-/*!
-  \brief Get selection mode of the active VTK View window.
-*/
-SelectionMode SMESH_Swig::getSelectionMode() {
-  return ProcessEvent( new TGetSelectionModeEvent() );
+/////////////////////////////////////////////////////////////////
+/// \brief Get selection mode of view window.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \return Current selection mode.
+/////////////////////////////////////////////////////////////////
+SelectionMode SMESH_Swig::getSelectionMode(int viewUid)
+{
+  init();
+  return ProcessEvent( new TGetSelectionModeEvent( viewUid ) );
 }
 
-
-/*!
- * Event to set selection mode
-*/
-class TSetSelectionModeEvent : public SALOME_Event
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TSetSelectionModeEvent: public SALOME_Event
 {
   SelectionMode mySelectionMode;
+  int myViewUid;
 
 public:
-
-  TSetSelectionModeEvent(const SelectionMode selectionMode) :
-    mySelectionMode(selectionMode) 
+  TSetSelectionModeEvent( const SelectionMode selectionMode, int viewUid )
+    : mySelectionMode( selectionMode ), myViewUid( viewUid )
   {}
 
   virtual void Execute()
   {
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
-    if(!aViewWindow)
-      return;
-
-    Selection_Mode prevMode = aViewWindow->SelectionMode();
-    bool changePointRepresentation = ( prevMode == NodeSelection && mySelectionMode != Node ) ||
-      (prevMode != NodeSelection && mySelectionMode == Node);
-      
-    if( changePointRepresentation ) {
-      vtkRenderer *aRenderer = aViewWindow->getRenderer();
-      VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
-      vtkActorCollection *aCollection = aCopy.GetActors();
-      aCollection->InitTraversal();
-      while(vtkActor *anAct = aCollection->GetNextActor()){
-       if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
-         if(anActor->GetVisibility()){
-           anActor->SetPointRepresentation(mySelectionMode == Node);
+    SVTK_Viewer* model = dynamic_cast<SVTK_Viewer*>( uid2wnd( myViewUid ) );
+    if ( model )
+    {
+      SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( model->getViewManager()->getActiveView() );
+      if ( vw )
+      {
+       SelectionMode previousMode = (SelectionMode)vw->SelectionMode();
+       bool switchPointMode = ( previousMode == Node && mySelectionMode != Node ) ||
+         ( previousMode != Node && mySelectionMode == Node );
+       if ( switchPointMode )
+       {
+         vtkRenderer* renderer = vw->getRenderer();
+         VTK::ActorCollectionCopy actors( renderer->GetActors() );
+         vtkActorCollection* collection = actors.GetActors();
+         collection->InitTraversal();
+         while ( vtkActor* vtkActor = collection->GetNextActor() )
+         {
+           if ( SMESH_Actor* actor = dynamic_cast<SMESH_Actor*>( vtkActor ) )
+           {
+             if ( actor->GetVisibility() )
+               actor->SetPointRepresentation( mySelectionMode == Node );
+           }
          }
        }
+       vw->SetSelectionMode( mySelectionMode );
       }
     }
-    aViewWindow->SetSelectionMode(mySelectionMode);
   }
 };
 
-void SMESH_Swig::setSelectionMode(SelectionMode selectionMode){
-  ProcessVoidEvent( new TSetSelectionModeEvent( selectionMode ) ); 
+/////////////////////////////////////////////////////////////////
+/// \brief Set selection mode to view window.
+/// \param viewUid View window UID (0 means currently active view
+///                window); Default: 0.
+/// \param mode Selection mode.
+/////////////////////////////////////////////////////////////////
+void SMESH_Swig::setSelectionMode(SelectionMode mode, int viewUid)
+{
+  init();
+  ProcessVoidEvent( new TSetSelectionModeEvent( mode, viewUid ) ); 
 }
 
-class TGetSelectedEvent : public SALOME_Event
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
+class TGetSelectedEvent: public SALOME_Event
 {
 public:
   typedef std::vector<int> TResult;
   TResult myResult;
-  const char* myId;
+  const char* myUid;
   
-  TGetSelectedEvent( const char* id) : 
-    myResult( std::vector<int>() ),
-    myId(id)
-  {}
+  TGetSelectedEvent( const char* uid )
+    : myUid( uid ) {}
   
   virtual void Execute()
   {
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
-    if( !aViewWindow )
+    SVTK_ViewWindow* vw = SMESH::GetViewWindow();
+    if ( !vw )
       return;
 
-    SVTK_Selector* aSelector  = aViewWindow->GetSelector();    
-    if( !aSelector )
+    SVTK_Selector* selector = vw->GetSelector();    
+    if ( !selector )
       return;
 
-    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
-    
-    if ( !anActor || !anActor->hasIO() )
+    SMESH_Actor* actor = SMESH::FindActorByEntry( myUid );
+    if ( !actor || !actor->hasIO() )
       return;
 
-    TColStd_IndexedMapOfInteger aMapIndex;
-    aSelector->GetIndex(anActor->getIO(),aMapIndex);
+    TColStd_IndexedMapOfInteger idMap;
+    selector->GetIndex( actor->getIO(), idMap );
 
-    for( int i = 1; i <= aMapIndex.Extent(); i++ )
-      myResult.push_back( aMapIndex( i ) );
+    for ( int i = 1; i <= idMap.Extent(); i++ )
+      myResult.push_back( idMap( i ) );
   }
 };
 
-std::vector<int> SMESH_Swig::getSelected( const char* Mesh_Entry ) {
-  return ProcessEvent( new TGetSelectedEvent(Mesh_Entry) );
+/////////////////////////////////////////////////////////////////
+/// \brief Get selected elements of the mesh, sub-mesh or group.
+/// \param uid Mesh object's study UID or IOR.
+/// \return List of selected mesh elements.
+/////////////////////////////////////////////////////////////////
+std::vector<int> SMESH_Swig::getSelected(const char* uid)
+{
+  std::vector<int> ids;
+
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    ids = ProcessEvent( new TGetSelectedEvent( sobject->GetID().c_str() ) );
+
+  return ids;
 }
 
+/////////////////////////////////////////////////////////////////
+/// \internal
+/////////////////////////////////////////////////////////////////
 class TGetSelectedPairEvent : public SALOME_Event
 {
 public:
   typedef std::vector<std::pair<int, int> > TResult;
   TResult myResult;
-  const char* myId;
+  const char* myUid;
   
-  TGetSelectedPairEvent( const char* id) : 
-    myResult( std::vector<std::pair<int,int> >() ),
-    myId(id)
-  {}
+  TGetSelectedPairEvent( const char* uid )
+    :  myUid( uid ) {}
   
   virtual void Execute()
   {
-    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
-    if( !aViewWindow )
+    SVTK_ViewWindow* vw = SMESH::GetViewWindow();
+    if ( !vw )
       return;
 
-    if(aViewWindow->SelectionMode() != EdgeOfCellSelection )
+    if ( vw->SelectionMode() != EdgeOfCellSelection )
       return;
 
-    SVTK_Selector* aSelector  = aViewWindow->GetSelector();    
-    if( !aSelector )
+    SVTK_Selector* selector = vw->GetSelector();    
+    if ( !selector )
       return;
 
-    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
-    
-    if ( !anActor || !anActor->hasIO() )
+    SMESH_Actor* actor = SMESH::FindActorByEntry( myUid );
+    if ( !actor || !actor->hasIO() )
       return;
 
-    SVTK_IndexedMapOfIds aMapIndex;
-    aSelector->GetCompositeIndex(anActor->getIO(),aMapIndex);
+    SVTK_IndexedMapOfIds idMap;
+    selector->GetCompositeIndex( actor->getIO(), idMap );
 
-    for( int i = 1; i <= aMapIndex.Extent(); i++ )
-      myResult.push_back( std::make_pair<int,int>( (int)aMapIndex( i )[0], (int)aMapIndex( i )[1]) );
+    for ( int i = 1; i <= idMap.Extent(); i++ )
+      myResult.push_back( std::make_pair<int,int>( (int)idMap( i )[0], (int)idMap( i )[1]) );
   }
 };
 
-std::vector<std::pair<int,int> > SMESH_Swig::getSelectedEdgeOfCell( const char* Mesh_Entry ) {
-  return ProcessEvent( new TGetSelectedPairEvent(Mesh_Entry) );
-}
+/////////////////////////////////////////////////////////////////
+/// \brief Get selected pseudo-edges (specified by two nodes)
+///        of the mesh, sub-mesh or group.
+/// \param uid Mesh object's study UID or IOR.
+/// \param ids List of pairs containing two nodes IDs.
+/// \param append If \c true, pseudo-edges are added to current
+///               selection; otherwise, previous selection is
+///               cleared.
+/////////////////////////////////////////////////////////////////
+std::vector<std::pair<int,int> > SMESH_Swig::getSelectedEdgeOfCell(const char* uid)
+{
+  std::vector<std::pair<int,int> > pairs;
 
+  init();
+
+  _PTR(SObject) sobject = uid2object( uid );
+  if ( sobject )
+    pairs = ProcessEvent( new TGetSelectedPairEvent( sobject->GetID().c_str() ) );
+
+  return pairs;
+}
index fa564efa402ea2ba3e08771af5afe4f11eac62fb..89307c0966befa7afb591217c7d42cc4bb308791 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-// SMESH SMESH : GUI for SMESH component
-// File   : libSMESH_Swig.h
-// Author : Nicolas REJNERI, Open CASCADE S.A.S.
-//
 #ifndef LIBSMESH_SWIG_H
 #define LIBSMESH_SWIG_H
 
 #ifdef WIN32
 #if defined SMESH_SWIG_EXPORTS || defined _libSMESH_Swig_EXPORTS
-  #define SMESH_SWIG_EXPORT __declspec( dllexport )
+  #define SMESH_SWIG_EXPORT __declspec(dllexport)
  #else
-  #define SMESH_SWIG_EXPORT __declspec( dllimport )
+  #define SMESH_SWIG_EXPORT __declspec(dllimport)
  #endif
 #else
  #define SMESH_SWIG_EXPORT
 #endif
 
-// IDL includes
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SALOMEDS)
-
-//std includes
-#include <vector>
-#include <utility>
-
-#include <SVTK_Selection.h>
-
 #include <SVTK_Selection.h>
+#include <vector>
 
+// See SMESH_Actor.h
 typedef enum
-  {
-    Undefined  = -1,
-    Node       = NodeSelection,
-    Cell       = CellSelection,
-    EdgeOfCell = EdgeOfCellSelection,
-    Edge       = EdgeSelection,
-    Face       = FaceSelection,
-    Volume     = VolumeSelection,
-    Actor      = ActorSelection,
-    Elem0D     = Elem0DSelection,
-    Ball       = BallSelection
-  } SelectionMode;
-
-typedef struct
 {
-  double r, g, b;
-  int delta;
-} surfaceColorStruct;
-
-typedef struct
+  EntityNone    = 0x00,
+  Entity0d      = 0x01,   // SMESH_Actor::e0DElements
+  EntityEdges   = 0x02,   // SMESH_Actor::eEdges
+  EntityFaces   = 0x04,   // SMESH_Actor::eFaces
+  EntityVolumes = 0x08,   // SMESH_Actor::eVolumes
+  EntityBalls   = 0x10,   // SMESH_Actor::eBallElem
+  EntityAll     = 0xff    // SMESH_Actor::eAllEntity
+} EntityMode;
+
+// See SVTK_Selection.h
+typedef enum
 {
-  double r, g, b;
-  int delta;
-} volumeColorStruct;
+  Undefined  = -1,
+  Node       = NodeSelection,
+  Cell       = CellSelection,
+  EdgeOfCell = EdgeOfCellSelection,
+  Edge       = EdgeSelection,
+  Face       = FaceSelection,
+  Volume     = VolumeSelection,
+  Actor      = ActorSelection,
+  Elem0D     = Elem0DSelection,
+  Ball       = BallSelection
+} SelectionMode;
+
+// See SMESH_Actor.h
+typedef enum
+{
+  UndefinedMode = -1,
+  PointMode = 0,      // SMESH_Actor::ePoint
+  EdgeMode,           // SMESH_Actor::eEdge
+  SurfaceMode         // SMESH_Actor::eSurface
+} DisplayMode;
 
-typedef struct
+struct ColorData
 {
   double r, g, b;
-} edgeColorStruct;
+public:
+  ColorData();
+};
 
-typedef struct
+struct BicolorData
 {
   double r, g, b;
-} nodeColorStruct;
+  int delta;
+public:
+  BicolorData();
+};
 
-struct actorAspect
+struct Properties
 {
-  surfaceColorStruct surfaceColor;
-  volumeColorStruct volumeColor;
-  edgeColorStruct edgeColor;
-  nodeColorStruct nodeColor;
+  ColorData nodeColor;
+  int markerType;
+  int markerScale;
+
+  ColorData edgeColor;
+  int edgeWidth;
+
+  BicolorData surfaceColor;
+  BicolorData volumeColor;
+
+  ColorData elem0dColor;
+  int elem0dSize;
+
+  ColorData ballColor;
+  double ballScale;
+
+  ColorData outlineColor;
+  int outlineWidth;
+
+  ColorData orientationColor;
+  double orientationScale;
+  bool orientation3d;
+
+  double shrinkFactor;
   double opacity;
+
+public:
+  Properties();
 };
 
+typedef ColorData nodeColorStruct; // deprecated
+typedef ColorData edgeColorStruct; // deprecated
+typedef BicolorData surfaceColorStruct; // deprecated
+typedef BicolorData volumeColorStruct; // deprecated
+typedef Properties actorAspect; // deprecated
+
 class SMESH_SWIG_EXPORT SMESH_Swig
 {
 public:
   SMESH_Swig();
   ~SMESH_Swig();
-    
-  void                       Init();
 
-  const char*                AddNewMesh( const char* );
 
-  const char*                AddNewHypothesis( const char* );
-  const char*                AddNewAlgorithms( const char* );
+  // Initialization =============================================
+
+  void                       Init(); // deprecated
+
+  // Publishing =================================================
+
+  const char* publish(const char*, const char* = 0);
+  void rename(const char*, const char*);
 
-  void                       SetShape( const char*, const char* );
+  const char* AddNewMesh(const char*, const char* = 0); // deprecated
+  const char* AddNewHypothesis(const char*, const char* = 0); // deprecated
+  const char* AddNewAlgorithm(const char*, const char* = 0); // deprecated
+  const char* AddNewAlgorithms(const char*, const char* = 0); // deprecated
 
-  void                       SetHypothesis( const char*, const char* );
-  void                       SetAlgorithms( const char*, const char* );
+  void SetShape(const char*, const char*); // deprecated
 
-  void                       UnSetHypothesis( const char* );
+  void SetHypothesis(const char*, const char*); // deprecated
+  void SetAlgorithms(const char*, const char*); // deprecated
 
-  const char*                AddSubMesh( const char*, const char*, int );
-  const char*                AddSubMeshOnShape( const char*, const char*, const char*, int );
+  void UnSetHypothesis(const char*); // deprecated
 
-  void                       CreateAndDisplayActor( const char* );
+  const char* AddSubMesh(const char*, const char*, int, const char* = 0); // deprecated
+  const char* AddSubMeshOnShape(const char*, const char*, const char*, int, const char* = 0); // deprecated
 
-  void                       SetName( const char*, const char* );
+  void SetName(const char*, const char*); // deprecated
 
-  void                       EraseActor( const char*, const bool allViewers = false );
+  void SetMeshIcon(const char*, const bool, const bool); // deprecated
 
-  void                       UpdateActor( const char* Mesh_Entry );
+  // Visualization  =============================================
 
-  /*!
-   * \brief Set mesh icon according to compute status
-    * \param Mesh_Entry - entry of a mesh
-    * \param isComputed - is mesh computed or not
-   */
-  void                       SetMeshIcon( const char*, const bool, const bool );
+  void display(const char*, int = 0, bool = true);
+  void erase(const char*, int = 0, bool = true);
+  void update(const char*);
 
-  actorAspect                GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
-  void                       SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0  );
+  Properties properties(const char*, int = 0);
+  void setProperties(const char*, const Properties&, int = 0);
 
-  void setSelectionMode( SelectionMode selectionMode );
-  std::vector<int> getSelected( const char* Mesh_Entry );
-  std::vector<std::pair<int, int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
+  bool nodesNumbering(const char*, int = 0);
+  void setNodesNumbering(const char*, bool, int = 0);
+  bool elementsNumbering(const char*, int = 0);
+  void setElementsNumbering(const char*, bool, int = 0);
 
-  // --------------------- for the test purposes -----------------------
-  SelectionMode getSelectionMode();
-  void select( const char *id, std::vector<int> ids, bool append = false );
-  void select( const char *id, int id1, bool append = false );
-  void select( const char *id, std::vector<std::pair<int,int> >, bool apend = false );
+  DisplayMode displayMode(const char*, int = 0);
+  void setDisplayMode(const char*, DisplayMode, int = 0);
+
+  bool shrinkMode(const char*, int = 0);
+  void setShrinkMode(const char*, bool, int = 0);
+
+  double opacity(const char*, int = 0);
+  void setOpacity(const char*, double, int = 0);
+
+  bool isOrientationShown(const char*, int = 0);
+  void setOrientationShown(const char*, bool, int = 0);
+
+  int entitiesShown(const char*, int = 0);
+  void setEntitiesShown(const char*, int, int = 0);
+  bool isEntityShown(const char*, EntityMode, int = 0);
+  void setEntityShown(const char*, EntityMode, bool, int = 0);
+
+  void CreateAndDisplayActor(const char*); // deprecated
+  void EraseActor(const char*, const bool = false); // deprecated
+  void UpdateActor(const char* Mesh_Entry); // deprecated
+
+  actorAspect GetActorAspect(const char*, int = 0); // deprecated
+  void SetActorAspect(const actorAspect&, const char*, int = 0); // deprecated
+
+  // Selection  =================================================
+
+  SelectionMode getSelectionMode(int = 0);
+  void setSelectionMode(SelectionMode, int = 0);
+  std::vector<int> getSelected(const char*);
+  std::vector<std::pair<int, int> > getSelectedEdgeOfCell(const char*);
+
+  void select(const char*, std::vector<int>, bool = false);
+  void select(const char*, int, bool = false);
+  void select(const char*, std::vector<std::pair<int,int> >, bool = false);
 
 private:
-  SALOMEDS::StudyBuilder_var myStudyBuilder;
-  SALOMEDS::SComponent_var   mySComponentMesh;
+  void init();
+
 };
 
 #endif // LIBSMESH_SWIG_H
index e261ade1dbca6e59ba15791f4e8f868a1e6475a0..a1aebc00a34b7dc3465cf8eabf7aeb664b72dcf7 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-// SMESH SMESHGUI : GUI for SMESH component
-// File   : libSMESH_Swig.i
-// Author : Nicolas REJNERI, Open CASCADE S.A.S.
-//
 %module libSMESH_Swig
 
 %{
@@ -38,7 +34,7 @@
     // Py_END_ALLOW_THREADS
     ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
   private:
-    PyThreadState *_save;
+    PyThreadState_save;
   };
 
   PyAllowThreadsGuard guard;
 %include "std_vector.i"
 %include "std_pair.i"
 
-namespace std {
-  
-    %template(VectorInt) vector<int>;
-    %template() std::pair<int,int>;
-    %template(PairVector) std::vector<std::pair<int,int> >;
+namespace std
+{
+  %template(VectorInt) vector<int>;
+  %template() std::pair<int,int>;
+  %template(PairVector) std::vector<std::pair<int,int> >;
 };
 
-
-/* Selection mode enumeration (corresponds to constants from the SALOME_Selection.h) */
+// See SMESH_Actor.h
+typedef enum
+{
+  EntityNone    = 0x00,
+  Entity0d      = 0x01,   // SMESH_Actor::e0DElements
+  EntityEdges   = 0x02,   // SMESH_Actor::eEdges
+  EntityFaces   = 0x04,   // SMESH_Actor::eFaces
+  EntityVolumes = 0x08,   // SMESH_Actor::eVolumes
+  EntityBalls   = 0x10,   // SMESH_Actor::eBallElem
+  EntityAll     = 0xff    // SMESH_Actor::eAllEntity
+} EntityMode;
+
+// See SVTK_Selection.h
 enum SelectionMode
-  {
-    Undefined = -1,
-    Node = 0,
-    Cell,
-    EdgeOfCell,
-    Edge,
-    Face,
-    Volume,
-    Actor,
-    Elem0D,
-    Ball
-  };
-
-typedef struct
 {
-  double r, g, b;
-  int delta;
-} surfaceColorStruct;
+  Undefined = -1,
+  Node = 0,       // NodeSelection
+  Cell,           // CellSelection
+  EdgeOfCell,     // EdgeOfCellSelection
+  Edge,           // EdgeSelection
+  Face,           // FaceSelection
+  Volume,         // VolumeSelection
+  Actor,          // ActorSelection
+  Elem0D,         // Elem0DSelection
+  Ball            // BallSelection
+};
 
-typedef struct
+// See SMESH_Actor.h
+enum DisplayMode
 {
-  double r, g, b;
-  int delta;
-} volumeColorStruct;
+  UndefinedMode = -1,
+  PointMode = 0,      // SMESH_Actor::ePoint
+  EdgeMode,           // SMESH_Actor::eEdge
+  SurfaceMode         // SMESH_Actor::eSurface
+};
 
-typedef struct
+struct ColorData
 {
   double r, g, b;
-} edgeColorStruct;
+};
 
-typedef struct
+struct BicolorData
 {
   double r, g, b;
-} nodeColorStruct;
+  int delta;
+};
 
-struct actorAspect
+struct Properties
 {
-  surfaceColorStruct surfaceColor;
-  volumeColorStruct volumeColor;
-  edgeColorStruct edgeColor;
-  nodeColorStruct nodeColor;
+  ColorData nodeColor;
+  int markerType;
+  int markerScale;
+
+  ColorData edgeColor;
+  int edgeWidth;
+
+  BicolorData surfaceColor;
+  BicolorData volumeColor;
+
+  ColorData elem0dColor;
+  int elem0dSize;
+
+  ColorData ballColor;
+  double ballScale;
+
+  ColorData outlineColor;
+  int outlineWidth;
+
+  ColorData orientationColor;
+  double orientationScale;
+  bool orientation3d;
+
+  double shrinkFactor;
   double opacity;
 };
 
+typedef ColorData nodeColorStruct; // deprecated
+typedef ColorData edgeColorStruct; // deprecated
+typedef BicolorData surfaceColorStruct; // deprecated
+typedef BicolorData volumeColorStruct; // deprecated
+typedef Properties actorAspect; // deprecated
+
 class SMESH_Swig
 {
- public:
+public:
   SMESH_Swig();
   ~SMESH_Swig();
 
-  void Init();
 
-  const char* AddNewMesh(const char* IOR);
-  const char* AddNewHypothesis(const char* IOR);
-  const char* AddNewAlgorithms(const char* IOR);
+  // Initialization =============================================
+
+  void Init(); // deprecated
+
+  // Publishing =================================================
+  
+  const char* publish(const char*, const char* = 0);
+  void rename(const char*, const char*);
+
+  const char* AddNewMesh(const char*, const char* = 0); // deprecated
+  const char* AddNewHypothesis(const char*, const char* = 0); // deprecated
+  const char* AddNewAlgorithms(const char*, const char* = 0); // deprecated
+  const char* AddNewAlgorithm(const char*, const char* = 0); // deprecated
+
+  void SetShape(const char*, const char*); // deprecated
+
+  void SetHypothesis(const char*, const char*); // deprecated
+  void SetAlgorithms(const char*, const char*); // deprecated
+
+  void UnSetHypothesis(const char*); // deprecated
+
+  const char* AddSubMesh(const char*, const char*, int, const char* = 0); // deprecated
+  const char* AddSubMeshOnShape (const char*, const char*, const char*, int, const char* = 0); // deprecated
+
+  void SetName(const char*, const char*); // deprecated
+
+  void SetMeshIcon(const char*, const bool, const bool); // deprecated
+
+  // Visualization  =============================================
+
+  void display(const char*, int = 0, bool = true);
+  void erase(const char*, int = 0, bool = true);
+  void update(const char*);
+
+  Properties properties(const char*, int = 0);
+  void setProperties(const char*, const Properties&, int = 0);
 
-  void SetShape(const char* ShapeEntry, const char* MeshEntry);
+  bool nodesNumbering(const char*, int = 0);
+  void setNodesNumbering(const char*, bool, int = 0);
+  bool elementsNumbering(const char*, int = 0);
+  void setElementsNumbering(const char*, bool, int = 0);
 
-  void SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry);
-  void SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry);
+  DisplayMode displayMode(const char*, int = 0);
+  void setDisplayMode(const char*, DisplayMode, int = 0);
 
-  void UnSetHypothesis(const char* Applied_Hypothesis_Entry );
+  bool shrinkMode(const char*, int = 0);
+  void setShrinkMode(const char*, bool, int = 0);
 
-  const char* AddSubMesh (const char* Mesh_Entry, const char* SM_IOR, int ST);
-  const char* AddSubMeshOnShape (const char* Mesh_Entry, const char* GeomShape_Entry, const char* SM_IOR, int ST);
+  double opacity(const char*, int = 0);
+  void setOpacity(const char*, double, int = 0);
 
-  void SetName(const char* Entry, const char* Name);
+  bool isOrientationShown(const char*, int = 0);
+  void setOrientationShown(const char*, bool, int = 0);
 
-  void SetMeshIcon(const char* Mesh_Entry, const bool isComputed, const bool isEmpty);
+  int entitiesShown(const char*, int = 0);
+  void setEntitiesShown(const char*, int, int = 0);
+  bool isEntityShown(const char*, EntityMode, int = 0);
+  void setEntityShown(const char*, EntityMode, bool, int = 0);
 
-  void CreateAndDisplayActor( const char* Mesh_Entry );
-  void EraseActor( const char* Mesh_Entry, const bool allViewers = false );
-  void UpdateActor( const char* Mesh_Entry );
+  void CreateAndDisplayActor(const char*); // deprecated
+  void EraseActor(const char*, const bool = false); // deprecated
+  void UpdateActor(const char*); // deprecated
 
-  void setSelectionMode( SelectionMode selectionMode);
-  std::vector<int> getSelected( const char* Mesh_Entry );
-  std::vector<std::pair<int,int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
+  actorAspect GetActorAspect(const char*, int = 0); // deprecated
+  void SetActorAspect(const actorAspect&, const char*, int = 0); // deprecated
 
-  actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
-  void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
+  // Selection  =================================================
 
-  void setSelectionMode( SelectionMode selectionMode);
-  std::vector<int> getSelected( const char* Mesh_Entry );
+  SelectionMode getSelectionMode(int = 0);
+  void setSelectionMode(SelectionMode, int = 0);
 
-  // --------------------- for the test purposes -----------------------
-  SelectionMode  getSelectionMode();
-  void select( const char *id, std::vector<int> ids, bool append = false );
-  void select( const char *id, int id1, bool append = false );
-  void select( const char *id, std::vector<std::pair<int,int> >, bool apend = false );
+  std::vector<int> getSelected(const char*);
+  std::vector<std::pair<int,int> > getSelectedEdgeOfCell(const char*);
 
+  void select(const char*, std::vector<int>, bool = false);
+  void select(const char*, int, bool = false);
+  void select(const char*, std::vector<std::pair<int,int> >, bool = false);
 };
index c0097c64a27f2b02d3039ab977164d89605cbf9e..17a03916c6f34407499c97d5d6e3286c1c4e86b9 100644 (file)
@@ -25,7 +25,7 @@ IF(SALOME_SMESH_USE_TBB)
 ENDIF(SALOME_SMESH_USE_TBB)
 
 INCLUDE_DIRECTORIES(
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${Boost_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
@@ -46,7 +46,7 @@ ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -58,10 +58,8 @@ ENDIF(SALOME_SMESH_USE_TBB)
 SET(_link_LIBRARIES
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_OpUtil}
-  ${CAS_TKAdvTools}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKG3d}
-  ${CAS_TKOffset}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES} 
+  ${OpenCASCADE_ModelingData_LIBRARIES}
   ${GEOM_GEOMUtils}
   SMESHimpl
   SMESHDS
index 1a0b026ecc74d0cc7d402dd1d687fe1df9be56b3..2ca7990d5315633d08c839689bb3cb365cafcd1e 100644 (file)
@@ -2613,34 +2613,34 @@ namespace
   {
     enum { X = 1, Y = 2, Z = 4 }; // == 001, 010, 100
     int nbFacets = 0;
-    int vertex = 0, egdeMask = 0;
+    int vertex = 0, edgeMask = 0;
 
     if ( Abs( _grid->_coords[0][ _i   ] - ip->_uvw[0] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_F0yz;
-      egdeMask |= X;
+      edgeMask |= X;
     }
     else if ( Abs( _grid->_coords[0][ _i+1 ] - ip->_uvw[0] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_F1yz;
       vertex   |= X;
-      egdeMask |= X;
+      edgeMask |= X;
     }
     if ( Abs( _grid->_coords[1][ _j   ] - ip->_uvw[1] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_Fx0z;
-      egdeMask |= Y;
+      edgeMask |= Y;
     }
     else if ( Abs( _grid->_coords[1][ _j+1 ] - ip->_uvw[1] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_Fx1z;
       vertex   |= Y;
-      egdeMask |= Y;
+      edgeMask |= Y;
     }
     if ( Abs( _grid->_coords[2][ _k   ] - ip->_uvw[2] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_Fxy0;
-      egdeMask |= Z;
+      edgeMask |= Z;
     }
     else if ( Abs( _grid->_coords[2][ _k+1 ] - ip->_uvw[2] ) < _grid->_tol ) {
       facets[ nbFacets++ ] = SMESH_Block::ID_Fxy1;
       vertex   |= Z;
-      egdeMask |= Z;
+      edgeMask |= Z;
     }
 
     switch ( nbFacets )
@@ -2656,7 +2656,7 @@ namespace
         { SMESH_Block::ID_Ex00, 0, SMESH_Block::ID_Ex10, 0,
           SMESH_Block::ID_Ex01, 0, SMESH_Block::ID_Ex11 }
       };
-      switch ( egdeMask ) {
+      switch ( edgeMask ) {
       case X | Y: sub = edge[ 0 ][ vertex ]; break;
       case X | Z: sub = edge[ 1 ][ vertex ]; break;
       default:    sub = edge[ 2 ][ vertex ];
@@ -3619,7 +3619,7 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
         for ( ; solidExp.More() && volIt->more(); solidExp.Next() )
         {
           const SMDS_MeshElement* vol = volIt->next();
-          sm1->RemoveElement( vol, /*isElemDeleted=*/false );
+          sm1->RemoveElement( vol );
           meshDS->SetMeshElementOnShape( vol, solidExp.Current() );
         }
       }
index b0d36a59ccb5bd25c9f7aa58a6a9006e4b6e2605..0b684862296ee8a1bf585377aae8389421c7ab10 100644 (file)
@@ -549,8 +549,7 @@ const std::vector<UVPtStruct>& StdMeshers_FaceSide::GetUVPtStruct(bool   isXCons
           uvPt.normParam  = u_node->first;
           uvPt.x = uvPt.y = uvPt.normParam;
           // -- U ----------------------------------------------
-          const SMDS_EdgePosition* epos =
-            dynamic_cast<const SMDS_EdgePosition*>(uvPt.node->GetPosition());
+          SMDS_EdgePositionPtr epos = uvPt.node->GetPosition();
           if ( epos && uvPt.node->getshapeId() == myEdgeID[iE] ) {
             uvPt.param = epos->GetUParameter();
           }
index 1964638fea6b65467a415bc6fff2a38d092b529b..86fe12c62d6b3f393ca5ef1727ff49df8b3cc790 100644 (file)
@@ -207,7 +207,7 @@ public:
                                           double constValue = 0) const;
   /*!
    * \brief Return nodes in the order they encounter while walking along
-   *  the while side or a specified EDGE. For a closed side, the 1st point repeats at end.
+   *  the whole side or a specified EDGE. For a closed side, the 1st point repeats at end.
    *  \param iE - index of the EDGE. Default is "all EDGEs".
    */
   std::vector<const SMDS_MeshNode*> GetOrderedNodes( int iE = ALL_EDGES ) const;
index 0cd90264c4dcd0a2d5592caa0ba1934693775a13..3ac20b8eabd27dca8508e6575a6897c2cfac9e71 100644 (file)
@@ -386,7 +386,7 @@ namespace
 
     // Find a node at any block corner
 
-    SMDS_NodeIteratorPtr nIt = meshDS->nodesIterator(/*idInceasingOrder=*/true);
+    SMDS_NodeIteratorPtr nIt = meshDS->nodesIterator();
     if ( !nIt->more() ) return error("Empty mesh");
 
     const SMDS_MeshNode* nCorner = 0;
index ef13ad41877bb0ec7d704278cc71b4cbeaed40c1..f0d4925c82cbdad6c6a7a5d59a41926880b16409 100644 (file)
@@ -581,7 +581,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
                 if ( Abs(u-f) < 2 * faceTol || Abs(u-l) < 2 * faceTol )
                   // duplicated node on vertex
                   return error("Source elements overlap one another");
-                tgtFaceSM->RemoveNode( n, /*isNodeDeleted=*/false );
+                tgtFaceSM->RemoveNode( n );
                 tgtMesh->SetNodeOnEdge( n, edges[iE], u );
                 break;
               }
@@ -634,7 +634,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
 
           TopoDS_Edge geomEdge = TopoDS::Edge(bndShapes.back());
           helper.CheckNodeU( geomEdge, link._medium, u, projTol, /*force=*/true );
-          tgtFaceSM->RemoveNode( link._medium, /*isNodeDeleted=*/false );
+          tgtFaceSM->RemoveNode( link._medium );
           tgtMesh->SetNodeOnEdge( (SMDS_MeshNode*)link._medium, geomEdge, u );
         }
         else
@@ -747,7 +747,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
           seamHelper.AddEdge( node1, node2 );
           if ( node2->getshapeId() == helper.GetSubShapeID() )
           {
-            tgtFaceSM->RemoveNode( node2, /*isNodeDeleted=*/false );
+            tgtFaceSM->RemoveNode( node2 );
             tgtMesh->SetNodeOnEdge( const_cast<SMDS_MeshNode*>( node2 ), seamEdge, n2->first );
           }
         }
index bbc594b163c9e2a3de4670ff8c6e8aabd4783a9d..c8a755eb2bb608cf2b33e3dd368d209d50145d51 100644 (file)
@@ -516,8 +516,7 @@ static bool fixCommonVertexUV (R2 &                 theUV,
         // check if node is medium
         if ( theCreateQuadratic && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
           continue;
-        const SMDS_EdgePosition* epos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr epos = node->GetPosition();
         double u = epos->GetUParameter();
         if ( u < umin )
           umin = u;
@@ -535,10 +534,10 @@ static bool fixCommonVertexUV (R2 &                 theUV,
   }
   R2 uv0, uv1, uv2;
   uv0.x = thisUV.X();   uv0.y = thisUV.Y();
-  uv1.x = nextUV.X();   uv1.y = nextUV.Y(); 
+  uv1.x = nextUV.X();   uv1.y = nextUV.Y();
   uv2.x = thisUV.X();   uv2.y = thisUV.Y();
 
-  uv1.x *= theScaleX;   uv1.y *= theScaleY; 
+  uv1.x *= theScaleX;   uv1.y *= theScaleY;
 
   if ( fixOverlappedLinkUV( uv0, uv1, uv2 ))
   {
index 0223a7a074cb9b2852fb11bc345510b3fbb8cc21..f22b5fe67dad5aa45ba2e2d67c9aeecbb56192a1 100644 (file)
@@ -234,8 +234,7 @@ void StdMeshers_Penta_3D::MakeNodes()
       aTNode.SetBaseNodeID(aNodeID);
       //
       if ( SMESH_Block::IsEdgeID (aSID)) {
-        const SMDS_EdgePosition* epos =
-          static_cast<const SMDS_EdgePosition*>(aNode->GetPosition());
+        SMDS_EdgePositionPtr epos = aNode->GetPosition();
         myBlock.ComputeParameters( epos->GetUParameter(), aS, aCoords );
       }
       else {
@@ -1465,11 +1464,9 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
     node = nIt->next();
     if(myTool->IsMedium(node))
       continue;
-    const SMDS_EdgePosition* pos =
-      dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition() );
-    if ( !pos ) {
+    SMDS_EdgePositionPtr pos = node->GetPosition();
+    if ( !pos )
       return false;
-    }
     double u = ( pos->GetUParameter() - f ) / range;
     vector<const SMDS_MeshNode*> & nVec = theIJNodes[ u ];
     nVec.resize( vsize, nullNode );
@@ -1488,11 +1485,9 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
     node = nIt->next();
     if(myTool->IsMedium(node))
       continue;
-    const SMDS_EdgePosition* pos =
-      dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition() );
-    if ( !pos ) {
+    SMDS_EdgePositionPtr pos = node->GetPosition();
+    if ( !pos )
       return false;
-    }
     sortedNodes.insert( make_pair( pos->GetUParameter(), node ));
   }
   loadedNodes.insert( nVecf[ vsize - 1 ] = smVft->GetNodes()->next() );
index 68535a2192dcf80b7858c11bfca16228962c354b..a6e7b0f620ab6cf1c62694f2de4afc26e1bb44d0 100644 (file)
@@ -1167,6 +1167,11 @@ bool StdMeshers_Prism_3D::compute(const Prism_3D::TPrismTopo& thePrism)
   if ( !assocOrProjBottom2Top( bottomToTopTrsf, thePrism ) ) // it also fills myBotToColumnMap
     return false;
 
+  // If all "vertical" EDGEs are straight, then all nodes of an internal node column
+  // are located on a line connecting the top node and the bottom node.
+  bool isStrightColunm = allVerticalEdgesStraight( thePrism );
+  if ( isStrightColunm )
+    myUseBlock = false;
 
   // Create nodes inside the block
 
@@ -1205,9 +1210,6 @@ bool StdMeshers_Prism_3D::compute(const Prism_3D::TPrismTopo& thePrism)
 
     myHelper->SetElementsOnShape( true );
 
-    // If all "vertical" EDGEs are straight, then all nodes of an internal node column
-    // are located on a line connecting the top node and the bottom node.
-    bool isStrightColunm = allVerticalEdgesStraight( thePrism );
     if ( !isStrightColunm )
     {
       double tol = getSweepTolerance( thePrism );
@@ -1795,9 +1797,8 @@ bool StdMeshers_Prism_3D::computeWalls(const Prism_3D::TPrismTopo& thePrism)
       if ( myHelper->GetIsQuadratic() )
       {
         // fill myHelper with medium nodes built by quadAlgo
-        SMDS_ElemIteratorPtr fIt = fSM->GetSubMeshDS()->GetElements();
-        while ( fIt->more() )
-          myHelper->AddTLinks( dynamic_cast<const SMDS_MeshFace*>( fIt->next() ));
+        for ( SMDS_ElemIteratorPtr fIt = fSM->GetSubMeshDS()->GetElements(); fIt->more(); )
+          myHelper->AddTLinks( SMDS_Mesh::DownCast<SMDS_MeshFace>( fIt->next() ));
       }
     }
   }
@@ -4844,7 +4845,7 @@ TPCurveOnHorFaceAdaptor::TPCurveOnHorFaceAdaptor( const TSideFace*   sideFace,
         }
         if ( !C2d.IsNull() )
         {
-          double u = static_cast< const SMDS_EdgePosition* >( n->GetPosition() )->GetUParameter();
+          double u = SMDS_EdgePositionPtr( n->GetPosition() )->GetUParameter();
           if ( f <= u && u <= l )
           {
             uv = C2d->Value( u ).XY();
index 2070ef108b407d2d8760e8dd820ace1654ca6318..55a7214e8e9e1da2302b7c5af14bc58591eaeb18 100644 (file)
@@ -2209,8 +2209,7 @@ FindMatchingNodesOnFaces( const TopoDS_Face&     face1,
       SMDS_NodeIteratorPtr nIt = edgeSM->GetNodes();
       while ( nIt->more() ) {
         const SMDS_MeshNode* node = nIt->next();
-        const SMDS_EdgePosition* pos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr pos = node->GetPosition();
         pos2nodes.insert( make_pair( pos->GetUParameter(), node ));
       }
       if ((int) pos2nodes.size() != edgeSM->NbNodes() )
@@ -2886,7 +2885,6 @@ namespace StdMeshers_ProjectionUtils
 
     double bc[3]; // barycentric coordinates
     int    nodeIDs[3]; // nodes of a delaunay triangle
-    const SMDS_FacePosition* pos;
 
     _delaunay.InitTraversal( nbSrcNodes );
 
@@ -2904,8 +2902,8 @@ namespace StdMeshers_ProjectionUtils
       tgtNode = n2n->second;
       tgtMesh->MoveNode( tgtNode, xyz.X(), xyz.Y(), xyz.Z() );
 
-      if (( pos = dynamic_cast< const SMDS_FacePosition* >( tgtNode->GetPosition() )))
-        const_cast<SMDS_FacePosition*>( pos )->SetParameters( uvNew.X(), uvNew.Y() );
+      if ( SMDS_FacePositionPtr pos = tgtNode->GetPosition() )
+        pos->SetParameters( uvNew.X(), uvNew.Y() );
 
       --nbSrcNodes;
     }
index 607efdfa64ce7894535018ebb4e31feb132f7ff7..fcc6f413fed446c546064d2c9f7f8766652bd35b 100644 (file)
@@ -140,7 +140,7 @@ bool StdMeshers_Projection_1D2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape
     {
       const SMDS_MeshElement* f = fIt->next();
       //if ( !f->IsQuadratic() ) continue;
-      nodes.assign( SMDS_MeshElement::iterator( f->interlacedNodesElemIterator() ),
+      nodes.assign( SMDS_MeshElement::iterator( f->interlacedNodesIterator() ),
                     SMDS_MeshElement::iterator() );
       nodes.push_back( nodes[0] );
       for ( size_t i = 2; i < nodes.size(); i += 2 )
@@ -149,8 +149,8 @@ bool StdMeshers_Projection_1D2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape
         if ( idType.second == TopAbs_EDGE &&
              idType.first  != nodes[i-1]->getshapeId() )
         {
-          faceSubMesh->RemoveNode( nodes[i-1], /*isDeleted=*/false );
-          meshDS->SetNodeOnEdge( (SMDS_MeshNode*) nodes[i-1], idType.first );
+          faceSubMesh->RemoveNode( nodes[i-1] );
+          meshDS->SetNodeOnEdge( nodes[i-1], idType.first );
           posFixer.SetSubShape( idType.first );
           posFixer.CheckNodeU( TopoDS::Edge( posFixer.GetSubShape() ),
                                nodes[i-1], dummyU=0., tol, /*force=*/true );
index a41c5ac6d2f77d9d3ba3ecac675b1d91beef9bab..d9b01603c42160118aaa1db7c60c4b548712a94d 100644 (file)
@@ -371,8 +371,7 @@ namespace {
         if ( node->GetPosition()->GetTypeOfPosition() != SMDS_TOP_EDGE )
           RETURN_BAD_RESULT("Bad node position type: node " << node->GetID() <<
                             " pos type " << node->GetPosition()->GetTypeOfPosition());
-        const SMDS_EdgePosition* pos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr pos = node->GetPosition();
         u2nodes.insert( make_pair( pos->GetUParameter(), node ));
         seamNodes.insert( node );
       }
@@ -1587,8 +1586,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
           break;
         }
         case  SMDS_TOP_EDGE:   {
-          const SMDS_EdgePosition* pos =
-            static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+          SMDS_EdgePositionPtr pos = node->GetPosition();
           pos2nodes.insert( make_pair( pos->GetUParameter(), node ));
           break;
         }
index ea0fbfccd3ae9282e4a01fda25037304c80e3eb7..20b4efd8c213654c8a59b839979cb5818cec9fbd 100644 (file)
@@ -31,7 +31,6 @@
 
 #include "StdMeshers_ProjectionUtils.hxx"
 
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_Hypothesis.hxx"
 #include "SMESHDS_Mesh.hxx"
@@ -408,8 +407,7 @@ bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aS
                                  nodes[6],
                                  nodes[7], id, force3d); break;
     default: // polyhedron
-      const SMDS_VtkVolume * poly =
-        dynamic_cast<const SMDS_VtkVolume*>( srcVol );
+      const SMDS_MeshVolume * poly = tgtMeshDS->DownCast<SMDS_MeshVolume>( srcVol );
       if ( !poly )
         RETURN_BAD_RESULT("Unexpected volume type");
       if ( !poly->IsPoly())
index 2e4ea50b8fb3effa05cc7ff8904de0bbbf3d0df4..fd3a5bb10f8376a3dbb7789039c964905b7facd3 100644 (file)
@@ -296,12 +296,13 @@ namespace
       SMESH_ComputeErrorPtr& err = sm->GetComputeError();
       if ( !err || err->IsOK() )
       {
-        err = SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH, msg, sm->GetAlgo() );
-        err->myBadElements.push_back( face1 );
-        err->myBadElements.push_back( face2 );
+        SMESH_BadInputElements* badElems =
+          new SMESH_BadInputElements( mesh.GetMeshDS(),COMPERR_BAD_INPUT_MESH, msg, sm->GetAlgo() );
+        badElems->add( face1 );
+        badElems->add( face2 );
+        err.reset( badElems );
       }
     }
-    //throw SALOME_Exception( msg.c_str() );
 
     return false; // == "algo fails"
   }
@@ -1035,7 +1036,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
   vector<const SMDS_MeshNode*> FNodes(5);
   TColgp_SequenceOfPnt aContour;
 
-  SMDS_FaceIteratorPtr fIt = meshDS->facesIterator(/*idInceasingOrder=*/true);
+  SMDS_FaceIteratorPtr fIt = meshDS->facesIterator();
   while( fIt->more())
   {
     const SMDS_MeshElement* face = fIt->next();
index b8a2ee5a81a172497b45ce48c15aac96f156bc3f..df0bb001ab6e938be5bf9e400e27db408d5effb3 100644 (file)
 #include "Utils_ExceptHandlers.hxx"
 
 #include <boost/container/flat_set.hpp>
+#include <boost/intrusive/circular_list_algorithms.hpp>
 
 typedef NCollection_Array2<const SMDS_MeshNode*> StdMeshers_Array2OfNode;
 
-typedef gp_XY gp_UV;
+typedef gp_XY         gp_UV;
 typedef SMESH_Comment TComm;
 
 using namespace std;
@@ -642,9 +643,11 @@ bool StdMeshers_Quadrangle_2D::computeQuadDominant(SMESH_Mesh&         aMesh,
               SMESH_ComputeErrorPtr& err = aMesh.GetSubMesh( aFace )->GetComputeError();
               if ( !err || err->IsOK() || err->myName < COMPERR_WARNING )
               {
-                err.reset( new SMESH_ComputeError( COMPERR_WARNING,
-                                                   "Bad quality quad created"));
-                err->myBadElements.push_back( face );
+                SMESH_BadInputElements* badElems =
+                  new SMESH_BadInputElements( meshDS, COMPERR_WARNING,
+                                              "Bad quality quad created");
+                badElems->add( face );
+                err.reset( badElems );
               }
             }
             --i;
@@ -817,9 +820,11 @@ bool StdMeshers_Quadrangle_2D::computeQuadDominant(SMESH_Mesh&         aMesh,
               SMESH_ComputeErrorPtr& err = aMesh.GetSubMesh( aFace )->GetComputeError();
               if ( !err || err->IsOK() || err->myName < COMPERR_WARNING )
               {
-                err.reset( new SMESH_ComputeError( COMPERR_WARNING,
-                                                   "Bad quality quad created"));
-                err->myBadElements.push_back( face );
+                SMESH_BadInputElements* badElems =
+                  new SMESH_BadInputElements( meshDS, COMPERR_WARNING,
+                                              "Bad quality quad created");
+                badElems->add( face );
+                err.reset( badElems );
               }
             }
             --i;
@@ -1020,30 +1025,454 @@ bool StdMeshers_Quadrangle_2D::IsApplicable( const TopoDS_Shape & aShape, bool t
   return ( toCheckAll && nbFoundFaces != 0 );
 }
 
+namespace
+{
+  //================================================================================
+  /*!
+   * \brief Return true if only two given edges meat at their common vertex
+   */
+  //================================================================================
+
+  bool twoEdgesMeatAtVertex(const TopoDS_Edge& e1,
+                            const TopoDS_Edge& e2,
+                            SMESH_Mesh &       mesh)
+  {
+    TopoDS_Vertex v;
+    if (!TopExp::CommonVertex(e1, e2, v))
+      return false;
+    TopTools_ListIteratorOfListOfShape ancestIt(mesh.GetAncestors(v));
+    for (; ancestIt.More() ; ancestIt.Next())
+      if (ancestIt.Value().ShapeType() == TopAbs_EDGE)
+        if (!e1.IsSame(ancestIt.Value()) && !e2.IsSame(ancestIt.Value()))
+          return false;
+    return true;
+  }
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief EDGE of a FACE
+   */
+  struct Edge
+  {
+    TopoDS_Edge   myEdge;
+    TopoDS_Vertex my1stVertex;
+    int           myIndex;
+    double        myAngle;      // angle at my1stVertex
+    int           myNbSegments; // discretization
+    Edge*         myPrev;       // preceding EDGE
+    Edge*         myNext;       // next EDGE
+
+    // traits used by boost::intrusive::circular_list_algorithms
+    typedef Edge         node;
+    typedef Edge *       node_ptr;
+    typedef const Edge * const_node_ptr;
+    static node_ptr get_next(const_node_ptr n)             {  return n->myNext;  }
+    static void     set_next(node_ptr n, node_ptr next)    {  n->myNext = next;  }
+    static node_ptr get_previous(const_node_ptr n)         {  return n->myPrev;  }
+    static void     set_previous(node_ptr n, node_ptr prev){  n->myPrev = prev;  }
+  };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Four sides of a quadrangle evaluating its quality
+   */
+  struct QuadQuality
+  {
+    typedef std::set< QuadQuality, QuadQuality > set;
+
+    Edge*  myCornerE[4];
+    int    myNbSeg  [4];
+
+    // quality criteria to minimize
+    int    myOppDiff;
+    double myQuartDiff;
+    double mySumAngle;
+
+    // Compute quality criateria and add self to the set of variants
+    //
+    void AddSelf( QuadQuality::set& theVariants )
+    {
+      if ( myCornerE[2] == myCornerE[1] || // exclude invalid variants
+           myCornerE[2] == myCornerE[3] ||
+           myCornerE[0] == myCornerE[3] )
+        return;
+
+      // count nb segments between corners
+      mySumAngle = 0;
+      double totNbSeg = 0;
+      for ( int i1 = 3, i2 = 0; i2 < 4; i1 = i2++ )
+      {
+        myNbSeg[ i1 ] = 0;
+        for ( Edge* e = myCornerE[ i1 ]; e != myCornerE[ i2 ]; e = e->myNext )
+          myNbSeg[ i1 ] += e->myNbSegments;
+        mySumAngle -= myCornerE[ i1 ]->myAngle / M_PI; // [-1,1]
+        totNbSeg += myNbSeg[ i1 ];
+      }
+
+      myOppDiff = ( Abs( myNbSeg[0] - myNbSeg[2] ) +
+                    Abs( myNbSeg[1] - myNbSeg[3] ));
+
+      double nbSideIdeal = totNbSeg / 4.;
+      myQuartDiff = -( Min( Min( myNbSeg[0], myNbSeg[1] ),
+                            Min( myNbSeg[2], myNbSeg[3] )) / nbSideIdeal );
+
+      theVariants.insert( *this );
+
+#ifndef _DEBUG_
+      if ( theVariants.size() > 1 ) // erase a worse variant
+        theVariants.erase( ++theVariants.begin() );
+#endif
+    };
+
+    // first criterion - equality of nbSeg of opposite sides
+    int    crit1() const { return myOppDiff; }
+
+    // second criterion - equality of nbSeg of adjacent sides and sharpness of angles
+    double crit2() const { return myQuartDiff + mySumAngle; }
+
+    bool operator () ( const QuadQuality& q1, const QuadQuality& q2) const
+    {
+      if ( q1.crit1() < q2.crit1() )
+        return true;
+      if ( q1.crit1() > q2.crit1() )
+        return false;
+      return q1.crit2() < q2.crit2();
+    }
+  };
+
+  //================================================================================
+  /*!
+   * \brief Unite EDGEs to get a required number of sides
+   *  \param [in] theNbCorners - the required number of sides
+   *  \param [in] theConsiderMesh - to considered only meshed VERTEXes
+   *  \param [in] theFaceSide - the FACE EDGEs
+   *  \param [out] theVertices - the found corner vertices
+   */
+  //================================================================================
+
+  void uniteEdges( const int                   theNbCorners,
+                   const bool                  theConsiderMesh,
+                   const StdMeshers_FaceSide&  theFaceSide,
+                   const TopoDS_Shape&         theBaseVertex,
+                   std::vector<TopoDS_Vertex>& theVertices,
+                   bool&                       theHaveConcaveVertices)
+  {
+    // form a circular list of EDGEs
+    std::vector< Edge > edges( theFaceSide.NbEdges() );
+    boost::intrusive::circular_list_algorithms< Edge > circularList;
+    circularList.init_header( &edges[0] );
+    edges[0].myEdge       = theFaceSide.Edge( 0 );
+    edges[0].myIndex      = 0;
+    edges[0].myNbSegments = 0;
+    for ( int i = 1; i < theFaceSide.NbEdges(); ++i )
+    {
+      edges[ i ].myEdge       = theFaceSide.Edge( i );
+      edges[ i ].myIndex      = i;
+      edges[ i ].myNbSegments = 0;
+      circularList.link_after( &edges[ i-1 ], &edges[ i ] );
+    }
+    // remove degenerated edges
+    int nbEdges = edges.size();
+    Edge* edge0 = &edges[0];
+    for ( size_t i = 0; i < edges.size(); ++i )
+      if ( SMESH_Algo::isDegenerated( edges[i].myEdge ))
+      {
+        edge0 = circularList.unlink( &edges[i] );
+        --nbEdges;
+      }
+
+    // sort edges by angle
+    std::multimap< double, Edge* > edgeByAngle;
+    int i, iBase = -1, nbConvexAngles = 0, nbSharpAngles = 0;
+    const double angTol     = 5. / 180 * M_PI;
+    const double sharpAngle = 0.5 * M_PI - angTol;
+    Edge* e = edge0;
+    for ( i = 0; i < nbEdges; ++i, e = e->myNext )
+    {
+      e->my1stVertex = SMESH_MesherHelper::IthVertex( 0, e->myEdge );
+      if ( e->my1stVertex.IsSame( theBaseVertex ))
+        iBase = e->myIndex;
+
+      e->myAngle = -2 * M_PI;
+      if ( !theConsiderMesh || theFaceSide.VertexNode( e->myIndex ))
+      {
+        e->myAngle = SMESH_MesherHelper::GetAngle( e->myPrev->myEdge, e->myEdge,
+                                                   theFaceSide.Face(), e->my1stVertex );
+        if ( e->myAngle > 2 * M_PI ) // GetAngle() failed
+          e->myAngle *= -1.;
+      }
+      edgeByAngle.insert( std::make_pair( e->myAngle, e ));
+      nbConvexAngles += ( e->myAngle > angTol );
+      nbSharpAngles  += ( e->myAngle > sharpAngle );
+    }
+
+    theHaveConcaveVertices = ( nbConvexAngles < nbEdges );
+
+    if ((int) theVertices.size() == theNbCorners )
+      return;
+
+    theVertices.clear();
+
+    if ( !theConsiderMesh || theNbCorners < 4 ||
+         nbConvexAngles <= theNbCorners ||
+         nbSharpAngles  == theNbCorners )
+    {
+      if ( nbEdges == theNbCorners ) // return all vertices
+      {
+        for ( e = edge0; (int) theVertices.size() < theNbCorners; e = e->myNext )
+          theVertices.push_back( e->my1stVertex );
+        return;
+      }
+
+      // return corners with maximal angles
+
+      std::set< int > cornerIndices;
+      if ( iBase != -1 )
+        cornerIndices.insert( iBase );
+
+      std::multimap< double, Edge* >::reverse_iterator a2e = edgeByAngle.rbegin();
+      for (; (int) cornerIndices.size() < theNbCorners; ++a2e )
+        cornerIndices.insert( a2e->second->myIndex );
+
+      std::set< int >::iterator i = cornerIndices.begin();
+      for ( ; i != cornerIndices.end(); ++i )
+        theVertices.push_back( edges[ *i ].my1stVertex );
+
+      return;
+    }
+
+    // get nb of segments
+    int totNbSeg = 0; // tatal nb segments
+    std::vector<const SMDS_MeshNode*> nodes;
+    for ( i = 0, e = edge0; i < nbEdges; ++i, e = e->myNext )
+    {
+      nodes.clear();
+      theFaceSide.GetEdgeNodes( e->myIndex, nodes, /*addVertex=*/true, true );
+      if ( nodes.size() == 2 && nodes[0] == nodes[1] ) // all nodes merged
+      {
+        e->myAngle = -1; // to remove
+      }
+      else
+      {
+        e->myNbSegments += nodes.size() - 1;
+        totNbSeg        += nodes.size() - 1;
+      }
+
+      // join with the previous edge those edges with concave angles
+      if ( e->myAngle <= 0 )
+      {
+        e->myPrev->myNbSegments += e->myNbSegments;
+        e = circularList.unlink( e )->myPrev;
+        --nbEdges;
+        --i;
+      }
+    }
+
+    if ( edge0->myNext->myPrev != edge0 ) // edge0 removed, find another edge0
+      for ( size_t i = 0; i < edges.size(); ++i )
+        if ( edges[i].myNext->myPrev == & edges[i] )
+        {
+          edge0 = &edges[i];
+          break;
+        }
+
+
+    // sort different variants by quality
+
+    QuadQuality::set quadVariants;
+
+    // find index of a corner most opposite to corner of edge0
+    int iOpposite0, nbHalf = 0;
+    for ( e = edge0; nbHalf <= totNbSeg / 2; e = e->myNext )
+      nbHalf += e->myNbSegments;
+    iOpposite0 = e->myIndex;
+
+    // compose different variants of quadrangles
+    QuadQuality quad;
+    for ( ; edge0->myIndex != iOpposite0; edge0 = edge0->myNext )
+    {
+      quad.myCornerE[ 0 ] = edge0;
+
+      // find opposite corner 2
+      for ( nbHalf = 0, e = edge0; nbHalf < totNbSeg / 2; e = e->myNext )
+        nbHalf += e->myNbSegments;
+      if ( e == edge0->myNext ) // no space for corner 1
+        e = e->myNext;
+      quad.myCornerE[ 2 ] = e;
+
+      bool moreVariants2 = ( totNbSeg % 2 || nbHalf != totNbSeg / 2 );
+
+      // enumerate different variants of corners 1 and 3
+      for ( Edge* e1 = edge0->myNext; e1 != quad.myCornerE[ 2 ]; e1 = e1->myNext )
+      {
+        quad.myCornerE[ 1 ] = e1;
+
+        // find opposite corner 3
+        for ( nbHalf = 0, e = e1; nbHalf < totNbSeg / 2; e = e->myNext )
+          nbHalf += e->myNbSegments;
+        if ( e == quad.myCornerE[ 2 ] )
+          e = e->myNext;
+        quad.myCornerE[ 3 ] = e;
+
+        bool moreVariants3 = ( totNbSeg % 2 || nbHalf != totNbSeg / 2 );
+
+        quad.AddSelf( quadVariants );
+
+        // another variants
+        if ( moreVariants2 )
+        {
+          quad.myCornerE[ 2 ] = quad.myCornerE[ 2 ]->myPrev;
+          quad.AddSelf( quadVariants );
+          quad.myCornerE[ 2 ] = quad.myCornerE[ 2 ]->myNext;
+        }
+        if ( moreVariants3 )
+        {
+          quad.myCornerE[ 3 ] = quad.myCornerE[ 3 ]->myPrev;
+          quad.AddSelf( quadVariants );
+
+          if ( moreVariants2 )
+          {
+            quad.myCornerE[ 2 ] = quad.myCornerE[ 2 ]->myPrev;
+            quad.AddSelf( quadVariants );
+            quad.myCornerE[ 2 ] = quad.myCornerE[ 2 ]->myNext;
+          }
+        }
+      }
+    }
+
+    const QuadQuality& bestQuad = *quadVariants.begin();
+    theVertices.resize( 4 );
+    theVertices[ 0 ] = bestQuad.myCornerE[ 0 ]->my1stVertex;
+    theVertices[ 1 ] = bestQuad.myCornerE[ 1 ]->my1stVertex;
+    theVertices[ 2 ] = bestQuad.myCornerE[ 2 ]->my1stVertex;
+    theVertices[ 3 ] = bestQuad.myCornerE[ 3 ]->my1stVertex;
+
+    return;
+  }
+
+} // namespace
+
 //================================================================================
 /*!
- * \brief Return true if only two given edges meat at their common vertex
+ * \brief Finds vertices at the most sharp face corners
+ *  \param [in] theFace - the FACE
+ *  \param [in,out] theWire - the ordered edges of the face. It can be modified to
+ *         have the first VERTEX of the first EDGE in \a vertices
+ *  \param [out] theVertices - the found corner vertices in the order corresponding to
+ *         the order of EDGEs in \a theWire
+ *  \param [out] theNbDegenEdges - nb of degenerated EDGEs in theFace
+ *  \param [in] theConsiderMesh - if \c true, only meshed VERTEXes are considered
+ *         as possible corners
+ *  \return int - number of quad sides found: 0, 3 or 4
  */
 //================================================================================
 
-static bool twoEdgesMeatAtVertex(const TopoDS_Edge& e1,
-                                 const TopoDS_Edge& e2,
-                                 SMESH_Mesh &       mesh)
+int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
+                                         SMESH_Mesh &                theMesh,
+                                         std::list<TopoDS_Edge>&     theWire,
+                                         std::vector<TopoDS_Vertex>& theVertices,
+                                         int &                       theNbDegenEdges,
+                                         const bool                  theConsiderMesh)
 {
-  TopoDS_Vertex v;
-  if (!TopExp::CommonVertex(e1, e2, v))
-    return false;
-  TopTools_ListIteratorOfListOfShape ancestIt(mesh.GetAncestors(v));
-  for (; ancestIt.More() ; ancestIt.Next())
-    if (ancestIt.Value().ShapeType() == TopAbs_EDGE)
-      if (!e1.IsSame(ancestIt.Value()) && !e2.IsSame(ancestIt.Value()))
-        return false;
-  return true;
+  theNbDegenEdges = 0;
+
+  SMESH_MesherHelper helper( theMesh );
+  if ( myHelper )
+    helper.CopySubShapeInfo( *myHelper );
+
+  StdMeshers_FaceSide faceSide( theFace, theWire, &theMesh,
+                                /*isFwd=*/true, /*skipMedium=*/true, &helper );
+
+  // count degenerated EDGEs and possible corner VERTEXes
+  for ( int iE = 0; iE < faceSide.NbEdges(); ++iE )
+  {
+    if ( SMESH_Algo::isDegenerated( faceSide.Edge( iE )))
+      ++theNbDegenEdges;
+    else if ( !theConsiderMesh || faceSide.VertexNode( iE ))
+      theVertices.push_back( faceSide.FirstVertex( iE ));
+  }
+
+  // find out required nb of corners (3 or 4)
+  int nbCorners = 4;
+  TopoDS_Shape triaVertex = helper.GetMeshDS()->IndexToShape( myTriaVertexID );
+  if ( !triaVertex.IsNull() &&
+       triaVertex.ShapeType() == TopAbs_VERTEX &&
+       helper.IsSubShape( triaVertex, theFace ) &&
+       theVertices.size() != 4 )
+    nbCorners = 3;
+  else
+    triaVertex.Nullify();
+
+  // check nb of available EDGEs
+  if ( faceSide.NbEdges() < nbCorners )
+    return error(COMPERR_BAD_SHAPE,
+                 TComm("Face must have 4 sides but not ") << faceSide.NbEdges() );
+
+  if ( theConsiderMesh )
+  {
+    const int nbSegments = Max( faceSide.NbPoints()-1, faceSide.NbSegments() );
+    if ( nbSegments < nbCorners )
+      return error(COMPERR_BAD_INPUT_MESH, TComm("Too few boundary nodes: ") << nbSegments);
+  }
+
+  if ( nbCorners == 3 )
+  {
+    if ( theVertices.size() < 3 )
+      return error(COMPERR_BAD_SHAPE,
+                   TComm("Face must have 3 meshed sides but not ") << theVertices.size() );
+  }
+  else // triaVertex not defined or invalid
+  {
+    if ( theVertices.size() == 3 && theNbDegenEdges == 0 )
+    {
+      if ( myTriaVertexID < 1 )
+        return error(COMPERR_BAD_PARMETERS,
+                     "No Base vertex provided for a trilateral geometrical face");
+
+      TComm comment("Invalid Base vertex: ");
+      comment << myTriaVertexID << ", which is not in [ ";
+      comment << helper.GetMeshDS()->ShapeToIndex( faceSide.FirstVertex(0) ) << ", ";
+      comment << helper.GetMeshDS()->ShapeToIndex( faceSide.FirstVertex(1) ) << ", ";
+      comment << helper.GetMeshDS()->ShapeToIndex( faceSide.FirstVertex(2) ) << " ]";
+      return error(COMPERR_BAD_PARMETERS, comment );
+    }
+    if ( theVertices.size() + theNbDegenEdges < 4 )
+      return error(COMPERR_BAD_SHAPE,
+                   TComm("Face must have 4 meshed sides but not ") << theVertices.size() );
+  }
+
+  myCheckOri = false;
+  if ( theVertices.size() > 3 )
+  {
+    uniteEdges( nbCorners, theConsiderMesh, faceSide, triaVertex, theVertices, myCheckOri );
+  }
+
+  if ( nbCorners == 3 && !triaVertex.IsSame( theVertices[0] ))
+  {
+    // make theVertices begin from triaVertex
+    for ( size_t i = 0; i < theVertices.size(); ++i )
+      if ( triaVertex.IsSame( theVertices[i] ))
+      {
+        theVertices.erase( theVertices.begin(), theVertices.begin() + i );
+        break;
+      }
+      else
+      {
+        theVertices.push_back( theVertices[i] );
+      }
+  }
+
+  // make theWire begin from the 1st corner vertex
+  while ( !theVertices[0].IsSame( helper.IthVertex( 0, theWire.front() )) ||
+          SMESH_Algo::isDegenerated( theWire.front() ))
+    theWire.splice( theWire.end(), theWire, theWire.begin() );
+
+  return nbCorners;
 }
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -4243,9 +4672,11 @@ bool StdMeshers_Quadrangle_2D::check()
   {
     SMESH_subMesh* fSM = myHelper->GetMesh()->GetSubMesh( geomFace );
     SMESH_ComputeErrorPtr& err = fSM->GetComputeError();
-    err.reset ( new SMESH_ComputeError( COMPERR_ALGO_FAILED,
-                                        "Inverted elements generated"));
-    err->myBadElements.swap( badFaces );
+    SMESH_BadInputElements* badElems =
+      new SMESH_BadInputElements( meshDS, COMPERR_ALGO_FAILED,
+                                  "Inverted elements generated");
+    badElems->myBadElements.swap( badFaces );
+    err.reset( badElems );
 
     return !isOK;
   }
@@ -4253,388 +4684,6 @@ bool StdMeshers_Quadrangle_2D::check()
   return isOK;
 }
 
-//================================================================================
-/*!
- * \brief Finds vertices at the most sharp face corners
- *  \param [in] theFace - the FACE
- *  \param [in,out] theWire - the ordered edges of the face. It can be modified to
- *         have the first VERTEX of the first EDGE in \a vertices
- *  \param [out] theVertices - the found corner vertices in the order corresponding to
- *         the order of EDGEs in \a theWire
- *  \param [out] theNbDegenEdges - nb of degenerated EDGEs in theFace
- *  \param [in] theConsiderMesh - if \c true, only meshed VERTEXes are considered
- *         as possible corners
- *  \return int - number of quad sides found: 0, 3 or 4
- */
-//================================================================================
-
-int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
-                                         SMESH_Mesh &                theMesh,
-                                         std::list<TopoDS_Edge>&     theWire,
-                                         std::vector<TopoDS_Vertex>& theVertices,
-                                         int &                       theNbDegenEdges,
-                                         const bool                  theConsiderMesh)
-{
-  theNbDegenEdges = 0;
-
-  SMESH_MesherHelper helper( theMesh );
-  if ( myHelper )
-    helper.CopySubShapeInfo( *myHelper );
-  StdMeshers_FaceSide faceSide( theFace, theWire, &theMesh,
-                                /*isFwd=*/true, /*skipMedium=*/true, &helper );
-
-  // sort theVertices by angle
-  multimap<double, TopoDS_Vertex> vertexByAngle;
-  TopTools_DataMapOfShapeReal     angleByVertex;
-  TopoDS_Edge prevE = theWire.back();
-  if ( SMESH_Algo::isDegenerated( prevE ))
-  {
-    list<TopoDS_Edge>::reverse_iterator edge = ++theWire.rbegin();
-    while ( SMESH_Algo::isDegenerated( *edge ) /*|| helper.IsRealSeam( *edge )*/)
-      ++edge;
-    if ( edge == theWire.rend() )
-      return false;
-    prevE = *edge;
-  }
-  list<TopoDS_Edge>::iterator edge = theWire.begin();
-  for ( int iE = 0; edge != theWire.end(); ++edge, ++iE )
-  {
-    if ( SMESH_Algo::isDegenerated( *edge ) /*|| helper.IsRealSeam( *edge )*/)
-    {
-      ++theNbDegenEdges;
-      continue;
-    }
-    if ( !theConsiderMesh || faceSide.VertexNode( iE ))
-    {
-      TopoDS_Vertex v = helper.IthVertex( 0, *edge );
-      double    angle = helper.GetAngle( prevE, *edge, theFace, v );
-      vertexByAngle.insert( make_pair( angle, v ));
-      angleByVertex.Bind( v, angle );
-    }
-    prevE = *edge;
-  }
-
-  // find out required nb of corners (3 or 4)
-  int nbCorners = 4;
-  TopoDS_Shape triaVertex = helper.GetMeshDS()->IndexToShape( myTriaVertexID );
-  if ( !triaVertex.IsNull() &&
-       triaVertex.ShapeType() == TopAbs_VERTEX &&
-       helper.IsSubShape( triaVertex, theFace ) &&
-       ( vertexByAngle.size() != 4 || vertexByAngle.begin()->first < 5 * M_PI/180. ))
-    nbCorners = 3;
-  else
-    triaVertex.Nullify();
-
-  // check nb of available corners
-  if ( faceSide.NbEdges() < nbCorners )
-    return error(COMPERR_BAD_SHAPE,
-                 TComm("Face must have 4 sides but not ") << faceSide.NbEdges() );
-
-  if ( theConsiderMesh )
-  {
-    const int nbSegments = Max( faceSide.NbPoints()-1, faceSide.NbSegments() );
-    if ( nbSegments < nbCorners )
-      return error(COMPERR_BAD_INPUT_MESH, TComm("Too few boundary nodes: ") << nbSegments);
-  }
-
-  if ( nbCorners == 3 )
-  {
-    if ( vertexByAngle.size() < 3 )
-      return error(COMPERR_BAD_SHAPE,
-                   TComm("Face must have 3 sides but not ") << vertexByAngle.size() );
-  }
-  else
-  {
-    if ( vertexByAngle.size() == 3 && theNbDegenEdges == 0 )
-    {
-      if ( myTriaVertexID < 1 )
-        return error(COMPERR_BAD_PARMETERS,
-                     "No Base vertex provided for a trilateral geometrical face");
-        
-      TComm comment("Invalid Base vertex: ");
-      comment << myTriaVertexID << " its ID is not among [ ";
-      multimap<double, TopoDS_Vertex>::iterator a2v = vertexByAngle.begin();
-      comment << helper.GetMeshDS()->ShapeToIndex( a2v->second ) << ", "; a2v++;
-      comment << helper.GetMeshDS()->ShapeToIndex( a2v->second ) << ", "; a2v++;
-      comment << helper.GetMeshDS()->ShapeToIndex( a2v->second ) << " ]";
-      return error(COMPERR_BAD_PARMETERS, comment );
-    }
-    if ( vertexByAngle.size() + ( theNbDegenEdges > 0 ) < 4 &&
-         vertexByAngle.size() + theNbDegenEdges != 4 )
-      return error(COMPERR_BAD_SHAPE,
-                   TComm("Face must have 4 sides but not ") << vertexByAngle.size() );
-  }
-
-  // put all corner vertices in a map
-  TopTools_MapOfShape vMap;
-  if ( nbCorners == 3 )
-    vMap.Add( triaVertex );
-  multimap<double, TopoDS_Vertex>::reverse_iterator a2v = vertexByAngle.rbegin();
-  for ( int iC = 0; a2v != vertexByAngle.rend() && iC < nbCorners; ++a2v, ++iC )
-    vMap.Add( (*a2v).second );
-
-  // check if there are possible variations in choosing corners
-  bool haveVariants = false;
-  if ((int) vertexByAngle.size() > nbCorners )
-  {
-    double lostAngle = a2v->first;
-    double lastAngle = ( --a2v, a2v->first );
-    haveVariants  = ( lostAngle * 1.1 >= lastAngle );
-  }
-
-  const double angleTol = 5.* M_PI/180;
-  myCheckOri = ( (int)vertexByAngle.size() > nbCorners ||
-                 vertexByAngle.begin()->first < angleTol );
-
-  // make theWire begin from a corner vertex or triaVertex
-  if ( nbCorners == 3 )
-    while ( !triaVertex.IsSame( ( helper.IthVertex( 0, theWire.front() ))) ||
-            SMESH_Algo::isDegenerated( theWire.front() ))
-      theWire.splice( theWire.end(), theWire, theWire.begin() );
-  else
-    while ( !vMap.Contains( helper.IthVertex( 0, theWire.front() )) ||
-            SMESH_Algo::isDegenerated( theWire.front() ))
-      theWire.splice( theWire.end(), theWire, theWire.begin() );
-
-  // fill the result vector and prepare for its refinement
-  theVertices.clear();
-  vector< double >      angles;
-  vector< TopoDS_Edge > edgeVec;
-  vector< int >         cornerInd, nbSeg;
-  int nbSegTot = 0;
-  angles .reserve( vertexByAngle.size() );
-  edgeVec.reserve( vertexByAngle.size() );
-  nbSeg  .reserve( vertexByAngle.size() );
-  cornerInd.reserve( nbCorners );
-  for ( edge = theWire.begin(); edge != theWire.end(); ++edge )
-  {
-    if ( SMESH_Algo::isDegenerated( *edge ))
-      continue;
-    TopoDS_Vertex v = helper.IthVertex( 0, *edge );
-    bool   isCorner = vMap.Contains( v );
-    if ( isCorner )
-    {
-      theVertices.push_back( v );
-      cornerInd.push_back( angles.size() );
-    }
-    angles .push_back( angleByVertex.IsBound( v ) ? angleByVertex( v ) : -M_PI );
-    edgeVec.push_back( *edge );
-    if ( theConsiderMesh && haveVariants )
-    {
-      if ( SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( *edge ))
-        nbSeg.push_back( sm->NbNodes() + 1 );
-      else
-        nbSeg.push_back( 0 );
-      nbSegTot += nbSeg.back();
-    }
-  }
-
-  // refine the result vector - make sides equal by length if
-  // there are several equal angles
-  if ( haveVariants )
-  {
-    if ( nbCorners == 3 )
-      angles[0] = 2 * M_PI; // not to move the base triangle VERTEX
-
-    // here we refer to VERTEX'es and EDGEs by indices in angles and edgeVec vectors
-    typedef int TGeoIndex;
-
-    // for each vertex find a vertex till which there are nbSegHalf segments
-    const int nbSegHalf = ( nbSegTot % 2 || nbCorners == 3 ) ? 0 : nbSegTot / 2;
-    vector< TGeoIndex > halfDivider( angles.size(), -1 );
-    int nbHalfDividers = 0;
-    if ( nbSegHalf )
-    {
-      // get min angle of corners
-      double minAngle = 10.;
-      for ( size_t iC = 0; iC < cornerInd.size(); ++iC )
-        minAngle = Min( minAngle, angles[ cornerInd[ iC ]]);
-
-      // find halfDivider's
-      for ( TGeoIndex iV1 = 0; iV1 < TGeoIndex( angles.size() ); ++iV1 )
-      {
-        int nbSegs = 0;
-        TGeoIndex iV2 = iV1;
-        do {
-          nbSegs += nbSeg[ iV2 ];
-          iV2 = helper.WrapIndex( iV2 + 1, nbSeg.size() );
-        } while ( nbSegs < nbSegHalf );
-
-        if ( nbSegs == nbSegHalf &&
-             angles[ iV1 ] + angleTol >= minAngle &&
-             angles[ iV2 ] + angleTol >= minAngle )
-        {
-          halfDivider[ iV1 ] = iV2;
-          ++nbHalfDividers;
-        }
-      }
-    }
-
-    set< TGeoIndex > refinedCorners, treatedCorners;
-    for ( size_t iC = 0; iC < cornerInd.size(); ++iC )
-    {
-      TGeoIndex iV = cornerInd[iC];
-      if ( !treatedCorners.insert( iV ).second )
-        continue;
-      list< TGeoIndex > equVerts; // inds of vertices that can become corners
-      equVerts.push_back( iV );
-      int nbC[2] = { 0, 0 };
-      // find equal angles backward and forward from the iV-th corner vertex
-      for ( int isFwd = 0; isFwd < 2; ++isFwd )
-      {
-        int           dV = isFwd ? +1 : -1;
-        int       iCNext = helper.WrapIndex( iC + dV, cornerInd.size() );
-        TGeoIndex iVNext = helper.WrapIndex( iV + dV, angles.size() );
-        while ( iVNext != iV )
-        {
-          bool equal = Abs( angles[iV] - angles[iVNext] ) < angleTol;
-          if ( equal )
-            equVerts.insert( isFwd ? equVerts.end() : equVerts.begin(), iVNext );
-          if ( iVNext == cornerInd[ iCNext ])
-          {
-            if ( !equal )
-            {
-              if ( angles[iV] < angles[iVNext] )
-                refinedCorners.insert( iVNext );
-              break;
-            }
-            nbC[ isFwd ]++;
-            treatedCorners.insert( cornerInd[ iCNext ] );
-            iCNext = helper.WrapIndex( iCNext + dV, cornerInd.size() );
-          }
-          iVNext = helper.WrapIndex( iVNext + dV, angles.size() );
-        }
-        if ( iVNext == iV )
-          break; // all angles equal
-      }
-
-      const bool allCornersSame = ( nbC[0] == 3 );
-      if ( allCornersSame && nbHalfDividers > 0 )
-      {
-        // select two halfDivider's as corners
-        TGeoIndex hd1, hd2 = -1;
-        size_t iC2;
-        for ( iC2 = 0; iC2 < cornerInd.size() && hd2 < 0; ++iC2 )
-        {
-          hd1 = cornerInd[ iC2 ];
-          hd2 = halfDivider[ hd1 ];
-          if ( std::find( equVerts.begin(), equVerts.end(), hd2 ) == equVerts.end() )
-            hd2 = -1; // hd2-th vertex can't become a corner
-          else
-            break;
-        }
-        if ( hd2 >= 0 )
-        {
-          angles[ hd1 ] = 2 * M_PI; // make hd1-th vertex no more "equal"
-          angles[ hd2 ] = 2 * M_PI;
-          refinedCorners.insert( hd1 );
-          refinedCorners.insert( hd2 );
-          treatedCorners = refinedCorners;
-          // update cornerInd
-          equVerts.push_front( equVerts.back() );
-          equVerts.push_back( equVerts.front() );
-          list< TGeoIndex >::iterator hdPos =
-            std::find( equVerts.begin(), equVerts.end(), hd2 );
-          if ( hdPos == equVerts.end() ) break;
-          cornerInd[ helper.WrapIndex( iC2 + 0, cornerInd.size()) ] = hd1;
-          cornerInd[ helper.WrapIndex( iC2 + 1, cornerInd.size()) ] = *( --hdPos );
-          cornerInd[ helper.WrapIndex( iC2 + 2, cornerInd.size()) ] = hd2;
-          cornerInd[ helper.WrapIndex( iC2 + 3, cornerInd.size()) ] = *( ++hdPos, ++hdPos );
-
-          theVertices[ 0 ] = helper.IthVertex( 0, edgeVec[ cornerInd[0] ]);
-          theVertices[ 1 ] = helper.IthVertex( 0, edgeVec[ cornerInd[1] ]);
-          theVertices[ 2 ] = helper.IthVertex( 0, edgeVec[ cornerInd[2] ]);
-          theVertices[ 3 ] = helper.IthVertex( 0, edgeVec[ cornerInd[3] ]);
-          iC = -1;
-          continue;
-        }
-      }
-
-      // move corners to make sides equal by length
-      int nbEqualV  = equVerts.size();
-      int nbExcessV = nbEqualV - ( 1 + nbC[0] + nbC[1] );
-      if ( nbExcessV > 0 ) // there are nbExcessV vertices that can become corners
-      {
-        // calculate normalized length of each "side" enclosed between neighbor equVerts
-        vector< double > accuLength;
-        double totalLen = 0;
-        vector< TGeoIndex > evVec( equVerts.begin(), equVerts.end() );
-        size_t      iEV = 0;
-        TGeoIndex    iE = cornerInd[ helper.WrapIndex( iC - nbC[0] - 1, cornerInd.size() )];
-        TGeoIndex iEEnd = cornerInd[ helper.WrapIndex( iC + nbC[1] + 1, cornerInd.size() )];
-        while ((int) accuLength.size() < nbEqualV + int( !allCornersSame ) )
-        {
-          // accumulate length of edges before iEV-th equal vertex
-          accuLength.push_back( totalLen );
-          do {
-            accuLength.back() += SMESH_Algo::EdgeLength( edgeVec[ iE ]);
-            iE = helper.WrapIndex( iE + 1, edgeVec.size());
-            if ( iEV < evVec.size() && iE == evVec[ iEV ] ) {
-              iEV++;
-              break; // equal vertex reached
-            }
-          }
-          while( iE != iEEnd );
-          totalLen = accuLength.back();
-        }
-        accuLength.resize( equVerts.size() );
-        for ( size_t iS = 0; iS < accuLength.size(); ++iS )
-          accuLength[ iS ] /= totalLen;
-
-        // find equVerts most close to the ideal sub-division of all sides
-        int iBestEV = 0;
-        int iCorner = helper.WrapIndex( iC - nbC[0], cornerInd.size() );
-        int nbSides = Min( nbCorners, 2 + nbC[0] + nbC[1] );
-        for ( int iS = 1; iS < nbSides; ++iS, ++iBestEV )
-        {
-          double idealLen = iS / double( nbSides );
-          double d, bestDist = 2.;
-          for ( iEV = iBestEV; iEV < accuLength.size(); ++iEV )
-          {
-            d = Abs( idealLen - accuLength[ iEV ]);
-
-            // take into account presence of a corresponding halfDivider
-            const double cornerWgt = 0.5  / nbSides;
-            const double vertexWgt = 0.25 / nbSides;
-            TGeoIndex hd = halfDivider[ evVec[ iEV ]];
-            if ( hd < 0 )
-              d += vertexWgt;
-            else if( refinedCorners.count( hd ))
-              d -= cornerWgt;
-            else
-              d -= vertexWgt;
-
-            // choose vertex with the best d
-            if ( d < bestDist )
-            {
-              bestDist = d;
-              iBestEV  = iEV;
-            }
-          }
-          if ( iBestEV > iS-1 + nbExcessV )
-            iBestEV = iS-1 + nbExcessV;
-          theVertices[ iCorner ] = helper.IthVertex( 0, edgeVec[ evVec[ iBestEV ]]);
-          cornerInd  [ iCorner ] = evVec[ iBestEV ];
-          refinedCorners.insert( evVec[ iBestEV ]);
-          iCorner = helper.WrapIndex( iCorner + 1, cornerInd.size() );
-        }
-
-      } // if ( nbExcessV > 0 )
-      else
-      {
-        refinedCorners.insert( cornerInd[ iC ]);
-      }
-    } // loop on cornerInd
-
-    // make theWire begin from the cornerInd[0]-th EDGE
-    while ( !theWire.front().IsSame( edgeVec[ cornerInd[0] ]))
-      theWire.splice( theWire.begin(), theWire, --theWire.end() );
-
-  } // if ( haveVariants )
-
-  return nbCorners;
-}
-
 //================================================================================
 /*!
  * \brief Constructor of a side of quad
index 56e73fc770a85e139cb9a5c8e914f5447e696657..82de8c6bbac814b92bbdaaa3cbe5df389e8db2e7 100644 (file)
@@ -668,7 +668,7 @@ public:
     return true;
   }
   // -----------------------------------------------------------------------------
-  //! Make mesh on an adge using assigned 1d hyp or default nb of segments
+  //! Make mesh on an edge using assigned 1d hyp or default nb of segments
   bool ComputeCircularEdge( SMESH_Mesh&                   aMesh,
                             const StdMeshers_FaceSidePtr& aSide )
   {
@@ -696,7 +696,7 @@ public:
     return ok;
   }
   // -----------------------------------------------------------------------------
-  //! Make mesh on an adge using assigned 1d hyp or default nb of segments
+  //! Make mesh on an edge using assigned 1d hyp or default nb of segments
   bool EvaluateCircularEdge(SMESH_Mesh&                  aMesh,
                             const StdMeshers_FaceSidePtr aSide,
                             MapShapeNbElems&             aResMap)
index 475a7cef1d7f469029920d90fde530ecf9bbce53..fd68c0b2f242a0efa4606c71c165840cfebe969e 100644 (file)
@@ -27,6 +27,7 @@
 #include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_FacePosition.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMDS_PolygonalFaceOfNodes.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Hypothesis.hxx"
@@ -93,6 +94,7 @@
 #include <list>
 #include <queue>
 #include <string>
+#include <unordered_map>
 
 #ifdef _DEBUG_
 #define __myDEBUG
@@ -660,7 +662,8 @@ namespace VISCOUS_3D
     vector< _EdgesOnShape* > _eosConcaVer; // edges at concave VERTEXes of a FACE
     vector< _EdgesOnShape* > _eosC1; // to smooth together several C1 continues shapes
 
-    vector< gp_XYZ >         _faceNormals; // if _shape is FACE
+    typedef std::unordered_map< const SMDS_MeshElement*, gp_XYZ > TFace2NormMap;
+    TFace2NormMap            _faceNormals; // if _shape is FACE
     vector< _EdgesOnShape* > _faceEOS; // to get _faceNormals of adjacent FACEs
 
     Handle(ShapeAnalysis_Surface) _offsetSurf;
@@ -1098,24 +1101,23 @@ namespace VISCOUS_3D
    * We can't use SMDS_FaceOfNodes since it's impossible to set it's ID which is
    * needed because SMESH_ElementSearcher internaly uses set of elements sorted by ID
    */
-  struct _TmpMeshFace : public SMDS_MeshElement
+  struct _TmpMeshFace : public SMDS_PolygonalFaceOfNodes
   {
-    vector<const SMDS_MeshNode* > _nn;
+    const SMDS_MeshElement* _srcFace;
+
     _TmpMeshFace( const vector<const SMDS_MeshNode*>& nodes,
-                  int id, int faceID=-1, int idInFace=-1):
-      SMDS_MeshElement(id), _nn(nodes) { setShapeId(faceID); setIdInShape(idInFace); }
-    virtual const SMDS_MeshNode* GetNode(const int ind) const { return _nn[ind]; }
-    virtual SMDSAbs_ElementType  GetType() const              { return SMDSAbs_Face; }
-    virtual vtkIdType GetVtkType() const                      { return -1; }
-    virtual SMDSAbs_EntityType   GetEntityType() const        { return SMDSEntity_Last; }
-    virtual SMDSAbs_GeometryType GetGeomType() const
-    { return _nn.size() == 3 ? SMDSGeom_TRIANGLE : SMDSGeom_QUADRANGLE; }
-    virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType) const
-    { return SMDS_ElemIteratorPtr( new SMDS_NodeVectorElemIterator( _nn.begin(), _nn.end()));}
+                  int                                 ID,
+                  int                                 faceID=-1,
+                  const SMDS_MeshElement*             srcFace=0 ):
+      SMDS_PolygonalFaceOfNodes(nodes), _srcFace( srcFace ) { setID( ID ); setShapeID( faceID ); }
+    virtual SMDSAbs_EntityType  GetEntityType() const
+    { return _srcFace ? _srcFace->GetEntityType() : SMDSEntity_Quadrangle; }
+    virtual SMDSAbs_GeometryType GetGeomType()  const
+    { return _srcFace ? _srcFace->GetGeomType() : SMDSGeom_QUADRANGLE; }
   };
   //--------------------------------------------------------------------------------
   /*!
-   * \brief Class of temporary mesh face storing _LayerEdge it's based on
+   * \brief Class of temporary mesh quadrangle face storing _LayerEdge it's based on
    */
   struct _TmpMeshFaceOnEdge : public _TmpMeshFace
   {
@@ -1123,17 +1125,21 @@ namespace VISCOUS_3D
     _TmpMeshFaceOnEdge( _LayerEdge* le1, _LayerEdge* le2, int ID ):
       _TmpMeshFace( vector<const SMDS_MeshNode*>(4), ID ), _le1(le1), _le2(le2)
     {
-      _nn[0]=_le1->_nodes[0];
-      _nn[1]=_le1->_nodes.back();
-      _nn[2]=_le2->_nodes.back();
-      _nn[3]=_le2->_nodes[0];
+      myNodes[0]=_le1->_nodes[0];
+      myNodes[1]=_le1->_nodes.back();
+      myNodes[2]=_le2->_nodes.back();
+      myNodes[3]=_le2->_nodes[0];
+    }
+    const SMDS_MeshNode* n( size_t i ) const
+    {
+      return myNodes[ i ];
     }
     gp_XYZ GetDir() const // return average direction of _LayerEdge's, normal to EDGE
     {
-      SMESH_TNodeXYZ p0s( _nn[0] );
-      SMESH_TNodeXYZ p0t( _nn[1] );
-      SMESH_TNodeXYZ p1t( _nn[2] );
-      SMESH_TNodeXYZ p1s( _nn[3] );
+      SMESH_TNodeXYZ p0s( myNodes[0] );
+      SMESH_TNodeXYZ p0t( myNodes[1] );
+      SMESH_TNodeXYZ p1t( myNodes[2] );
+      SMESH_TNodeXYZ p1s( myNodes[3] );
       gp_XYZ  v0 = p0t - p0s;
       gp_XYZ  v1 = p1t - p1s;
       gp_XYZ v01 = p1s - p0s;
@@ -1144,10 +1150,10 @@ namespace VISCOUS_3D
     }
     gp_XYZ GetDir(_LayerEdge* le1, _LayerEdge* le2) // return average direction of _LayerEdge's
     {
-      _nn[0]=le1->_nodes[0];
-      _nn[1]=le1->_nodes.back();
-      _nn[2]=le2->_nodes.back();
-      _nn[3]=le2->_nodes[0];
+      myNodes[0]=le1->_nodes[0];
+      myNodes[1]=le1->_nodes.back();
+      myNodes[2]=le2->_nodes.back();
+      myNodes[3]=le2->_nodes[0];
       return GetDir();
     }
   };
@@ -2641,7 +2647,7 @@ bool _ViscousBuilder::makeLayer(_SolidData& data)
 
       // create a temporary face
       const SMDS_MeshElement* newFace =
-        new _TmpMeshFace( newNodes, --_tmpFaceID, face->getshapeId(), face->getIdInShape() );
+        new _TmpMeshFace( newNodes, --_tmpFaceID, face->GetShapeID(), face );
       proxySub->AddElement( newFace );
 
       // compute inflation step size by min size of element on a convex surface
@@ -3313,19 +3319,18 @@ void _ViscousBuilder::setShapeData( _EdgesOnShape& eos,
     {
       SMESHDS_SubMesh* smDS = sm->GetSubMeshDS();
       if ( !smDS ) return;
-      eos._faceNormals.resize( smDS->NbElements() );
+      eos._faceNormals.reserve( smDS->NbElements() );
 
+      double oriFactor = helper.IsReversedSubMesh( TopoDS::Face( eos._shape )) ? 1.: -1.;
       SMDS_ElemIteratorPtr eIt = smDS->GetElements();
-      for ( int iF = 0; eIt->more(); ++iF )
+      for ( ; eIt->more(); )
       {
         const SMDS_MeshElement* face = eIt->next();
-        if ( !SMESH_MeshAlgos::FaceNormal( face, eos._faceNormals[iF], /*normalized=*/true ))
-          eos._faceNormals[iF].SetCoord( 0,0,0 );
+        gp_XYZ&                 norm = eos._faceNormals[face];
+        if ( !SMESH_MeshAlgos::FaceNormal( face, norm, /*normalized=*/true ))
+          norm.SetCoord( 0,0,0 );
+        norm *= oriFactor;
       }
-
-      if ( !helper.IsReversedSubMesh( TopoDS::Face( eos._shape )))
-        for ( size_t iF = 0; iF < eos._faceNormals.size(); ++iF )
-          eos._faceNormals[iF].Reverse();
     }
     else // find EOS of adjacent FACEs
     {
@@ -3351,7 +3356,7 @@ void _ViscousBuilder::setShapeData( _EdgesOnShape& eos,
 bool _EdgesOnShape::GetNormal( const SMDS_MeshElement* face, gp_Vec& norm )
 {
   bool ok = false;
-  const _EdgesOnShape* eos = 0;
+  _EdgesOnShape* eos = 0;
 
   if ( face->getshapeId() == _shapeID )
   {
@@ -3365,9 +3370,9 @@ bool _EdgesOnShape::GetNormal( const SMDS_MeshElement* face, gp_Vec& norm )
   }
 
   if (( eos ) &&
-      ( ok = ( face->getIdInShape() < (int) eos->_faceNormals.size() )))
+      ( ok = ( eos->_faceNormals.count( face ) )))
   {
-    norm = eos->_faceNormals[ face->getIdInShape() ];
+    norm = eos->_faceNormals[ face ];
   }
   else if ( !eos )
   {
@@ -3605,7 +3610,7 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
   {
     const SMDS_MeshNode* tgtNode = edge._nodes.back();
     if ( SMESHDS_SubMesh* sm = getMeshDS()->MeshElements( data._solid ))
-      sm->RemoveNode( tgtNode , /*isNodeDeleted=*/false );
+      sm->RemoveNode( tgtNode );
 
     // set initial position which is parameters on _sWOL in this case
     if ( eos.SWOLType() == TopAbs_EDGE )
@@ -5107,14 +5112,13 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
           eos._edges[i]->Set( _LayerEdge::INTERSECTED ); // not to intersect
           eos._edges[i]->Block( data );                  // not to inflate
 
-          if ( _EdgesOnShape* eof = data.GetShapeEdges( intFace->getshapeId() ))
+          //if ( _EdgesOnShape* eof = data.GetShapeEdges( intFace->getshapeId() ))
           {
             // block _LayerEdge's, on top of which intFace is
             if ( const _TmpMeshFace* f = dynamic_cast< const _TmpMeshFace*>( intFace ))
             {
-              const SMDS_MeshElement* srcFace =
-                eof->_subMesh->GetSubMeshDS()->GetElement( f->getIdInShape() );
-              SMDS_ElemIteratorPtr nIt = srcFace->nodesIterator();
+              const SMDS_MeshElement* srcFace = f->_srcFace;
+              SMDS_ElemIteratorPtr        nIt = srcFace->nodesIterator();
               while ( nIt->more() )
               {
                 const SMDS_MeshNode* srcNode = static_cast<const SMDS_MeshNode*>( nIt->next() );
@@ -5781,7 +5785,7 @@ bool _Smoother1D::smoothAnalyticEdge( _SolidData&                    data,
           tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() );
           dumpMove( tgtNode );
 
-          SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
+          SMDS_FacePositionPtr pos = tgtNode->GetPosition();
           pos->SetUParameter( newUV.X() );
           pos->SetVParameter( newUV.Y() );
 
@@ -5893,7 +5897,7 @@ bool _Smoother1D::smoothAnalyticEdge( _SolidData&                    data,
         tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() );
         dumpMove( tgtNode );
 
-        SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
+        SMDS_FacePositionPtr pos = tgtNode->GetPosition();
         pos->SetUParameter( newUV.X() );
         pos->SetVParameter( newUV.Y() );
 
@@ -6501,10 +6505,10 @@ void _SolidData::PrepareEdgesToSmoothOnFace( _EdgesOnShape* eos, bool substitute
     {
       edge->Set( _LayerEdge::SMOOTHED_C1 );
       isCurved = true;
-      SMDS_FacePosition* fPos = dynamic_cast<SMDS_FacePosition*>( edge->_nodes[0]->GetPosition() );
+      SMDS_FacePositionPtr fPos = edge->_nodes[0]->GetPosition();
       if ( !fPos )
         for ( size_t iS = 0; iS < edge->_simplices.size()  &&  !fPos; ++iS )
-          fPos = dynamic_cast<SMDS_FacePosition*>( edge->_simplices[iS]._nPrev->GetPosition() );
+          fPos = edge->_simplices[iS]._nPrev->GetPosition();
       if ( fPos )
         edge->_curvature->_uv.SetCoord( fPos->GetUParameter(), fPos->GetVParameter() );
     }
@@ -6801,9 +6805,9 @@ void _ViscousBuilder::findCollisionEdges( _SolidData& data, SMESH_MesherHelper&
               ( f->_le2->IsOnEdge() && f->_le2->_2neibors->include( edge )))  continue;
         }
         dist1 = dist2 = Precision::Infinite();
-        if ( !edge->SegTriaInter( lastSegment, f->_nn[0], f->_nn[1], f->_nn[2], dist1, eps ))
+        if ( !edge->SegTriaInter( lastSegment, f->n(0), f->n(1), f->n(2), dist1, eps ))
           dist1 = Precision::Infinite();
-        if ( !edge->SegTriaInter( lastSegment, f->_nn[3], f->_nn[2], f->_nn[0], dist2, eps ))
+        if ( !edge->SegTriaInter( lastSegment, f->n(3), f->n(2), f->n(0), dist2, eps ))
           dist2 = Precision::Infinite();
         if (( dist1 > segLen ) && ( dist2 > segLen ))
           continue;
@@ -6811,7 +6815,7 @@ void _ViscousBuilder::findCollisionEdges( _SolidData& data, SMESH_MesherHelper&
         if ( edge->IsOnEdge() )
         {
           // skip perpendicular EDGEs
-          gp_Vec fSegDir  = SMESH_TNodeXYZ( f->_nn[0] ) - SMESH_TNodeXYZ( f->_nn[3] );
+          gp_Vec fSegDir  = SMESH_TNodeXYZ( f->n(0) ) - SMESH_TNodeXYZ( f->n(3) );
           bool isParallel = ( isLessAngle( eSegDir0, fSegDir, angle45 ) ||
                               isLessAngle( eSegDir1, fSegDir, angle45 ) ||
                               isLessAngle( eSegDir0, fSegDir.Reversed(), angle45 ) ||
@@ -8247,7 +8251,7 @@ void _LayerEdge::MoveNearConcaVer( const _EdgesOnShape*    eov,
     prevPosV = surface.Value( prevPosV.X(), prevPosV.Y() ).XYZ();
   }
 
-  SMDS_FacePosition* fPos;
+  SMDS_FacePositionPtr fPos;
   //double r = 1. - Min( 0.9, step / 10. );
   for ( set< _LayerEdge* >::iterator e = edges.begin(); e != edges.end(); ++e )
   {
@@ -8261,7 +8265,7 @@ void _LayerEdge::MoveNearConcaVer( const _EdgesOnShape*    eov,
 
     // set _curvature to make edgeF updated by putOnOffsetSurface()
     if ( !edgeF->_curvature )
-      if (( fPos = dynamic_cast<SMDS_FacePosition*>( edgeF->_nodes[0]->GetPosition() )))
+      if (( fPos = edgeF->_nodes[0]->GetPosition() ))
       {
         edgeF->_curvature = new _Curvature;
         edgeF->_curvature->_r = 0;
@@ -8771,7 +8775,7 @@ void _LayerEdge::ChooseSmooFunction( const set< TGeomID >& concaveVertices,
       }
     }
 
-    // // this coice is done only if ( !concaveVertices.empty() ) for Grids/smesh/bugs_19/X1
+    // // this choice is done only if ( !concaveVertices.empty() ) for Grids/smesh/bugs_19/X1
     // // where the nodes are smoothed too far along a sphere thus creating
     // // inverted _simplices
     // double dist[theNbSmooFuns];
@@ -9482,7 +9486,7 @@ void _LayerEdge::SetNewLength( double len, _EdgesOnShape& eos, SMESH_MesherHelpe
       _pos.back().SetCoord( u, 0, 0 );
       if ( _nodes.size() > 1 && uvOK )
       {
-        SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( n->GetPosition() );
+        SMDS_EdgePositionPtr pos = n->GetPosition();
         pos->SetUParameter( u );
       }
     }
@@ -9494,7 +9498,7 @@ void _LayerEdge::SetNewLength( double len, _EdgesOnShape& eos, SMESH_MesherHelpe
       _pos.back().SetCoord( uv.X(), uv.Y(), 0 );
       if ( _nodes.size() > 1 && uvOK )
       {
-        SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( n->GetPosition() );
+        SMDS_FacePositionPtr pos = n->GetPosition();
         pos->SetUParameter( uv.X() );
         pos->SetVParameter( uv.Y() );
       }
@@ -9610,7 +9614,7 @@ void _LayerEdge::InvalidateStep( size_t curStep, const _EdgesOnShape& eos, bool
       TopLoc_Location loc;
       if ( eos.SWOLType() == TopAbs_EDGE )
       {
-        SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( n->GetPosition() );
+        SMDS_EdgePositionPtr pos = n->GetPosition();
         pos->SetUParameter( nXYZ.X() );
         double f,l;
         Handle(Geom_Curve) curve = BRep_Tool::Curve( TopoDS::Edge( eos._sWOL ), loc, f,l);
@@ -9618,7 +9622,7 @@ void _LayerEdge::InvalidateStep( size_t curStep, const _EdgesOnShape& eos, bool
       }
       else
       {
-        SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( n->GetPosition() );
+        SMDS_FacePositionPtr pos = n->GetPosition();
         pos->SetUParameter( nXYZ.X() );
         pos->SetVParameter( nXYZ.Y() );
         Handle(Geom_Surface) surface = BRep_Tool::Surface( TopoDS::Face(eos._sWOL), loc );
@@ -9983,12 +9987,12 @@ bool _ViscousBuilder::refine(_SolidData& data)
         SMDS_PositionPtr  lastPos = tgtNode->GetPosition();
         if ( isOnEdge )
         {
-          SMDS_EdgePosition* epos = static_cast<SMDS_EdgePosition*>( lastPos );
+          SMDS_EdgePositionPtr epos = lastPos;
           epos->SetUParameter( otherTgtPos.X() );
         }
         else
         {
-          SMDS_FacePosition* fpos = static_cast<SMDS_FacePosition*>( lastPos );
+          SMDS_FacePositionPtr fpos = lastPos;
           fpos->SetUParameter( otherTgtPos.X() );
           fpos->SetVParameter( otherTgtPos.Y() );
         }
@@ -10077,7 +10081,7 @@ bool _ViscousBuilder::refine(_SolidData& data)
                 u = helper.GetNodeU( geomEdge, node );
               pos = curve->Value( u ).Transformed(loc);
 
-              SMDS_EdgePosition* epos = static_cast<SMDS_EdgePosition*>( node->GetPosition() );
+              SMDS_EdgePositionPtr epos = node->GetPosition();
               epos->SetUParameter( u );
             }
             else
@@ -10087,7 +10091,7 @@ bool _ViscousBuilder::refine(_SolidData& data)
                 uv = helper.GetNodeUV( geomFace, node );
               pos = surface->Value( uv );
 
-              SMDS_FacePosition* fpos = static_cast<SMDS_FacePosition*>( node->GetPosition() );
+              SMDS_FacePositionPtr fpos = node->GetPosition();
               fpos->SetUParameter( uv.X() );
               fpos->SetVParameter( uv.Y() );
             }
@@ -10262,10 +10266,11 @@ bool _ViscousBuilder::refine(_SolidData& data)
     SMESH_ComputeErrorPtr& err = _mesh->GetSubMesh( data._solid )->GetComputeError();
     if ( !err || err->IsOK() )
     {
-      err.reset( new SMESH_ComputeError( COMPERR_WARNING,
-                                         "Bad quality volumes created" ));
-      err->myBadElements.insert( err->myBadElements.end(),
-                                 degenVols.begin(),degenVols.end() );
+      SMESH_BadInputElements* badElems =
+        new SMESH_BadInputElements( getMeshDS(), COMPERR_WARNING, "Bad quality volumes created" );
+      badElems->myBadElements.insert( badElems->myBadElements.end(),
+                                      degenVols.begin(),degenVols.end() );
+      err.reset( badElems );
     }
   }
 
@@ -10678,14 +10683,14 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
                edge->Is( _LayerEdge::SHRUNK )) continue;
           if ( subEOS[iS]->SWOLType() == TopAbs_FACE )
           {
-            SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
+            SMDS_FacePositionPtr pos = tgtNode->GetPosition();
             pos->SetUParameter( edge->_pos[0].X() );
             pos->SetVParameter( edge->_pos[0].Y() );
             p = surface->Value( edge->_pos[0].X(), edge->_pos[0].Y() );
           }
           else
           {
-            SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( tgtNode->GetPosition() );
+            SMDS_EdgePositionPtr pos = tgtNode->GetPosition();
             pos->SetUParameter( edge->_pos[0].Coord( U_TGT ));
             p = BRepAdaptor_Curve( TopoDS::Edge( subEOS[iS]->_sWOL )).Value( pos->GetUParameter() );
           }
@@ -10880,7 +10885,7 @@ bool _ViscousBuilder::prepareEdgeToShrink( _LayerEdge&            edge,
     edge._pos[0].SetCoord( tgtUV.X(), tgtUV.Y(), 0 );
 
     // set UV of source node to target node
-    SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
+    SMDS_FacePositionPtr pos = tgtNode->GetPosition();
     pos->SetUParameter( srcUV.X() );
     pos->SetVParameter( srcUV.Y() );
   }
@@ -10930,7 +10935,7 @@ bool _ViscousBuilder::prepareEdgeToShrink( _LayerEdge&            edge,
     edge._simplices[0]._nPrev = n2;
 
     // set U of source node to the target node
-    SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( tgtNode->GetPosition() );
+    SMDS_EdgePositionPtr pos = tgtNode->GetPosition();
     pos->SetUParameter( uSrc );
   }
   return true;
@@ -10963,7 +10968,7 @@ void _ViscousBuilder::restoreNoShrink( _LayerEdge& edge ) const
       TopLoc_Location loc;
       Handle(Geom_Curve) curve = BRep_Tool::Curve( TopoDS::Edge( S ), loc, f, l );
       if ( curve.IsNull() ) return;
-      SMDS_EdgePosition* ePos = static_cast<SMDS_EdgePosition*>( srcNode->GetPosition() );
+      SMDS_EdgePositionPtr ePos = srcNode->GetPosition();
       p = curve->Value( ePos->GetUParameter() );
       break;
     }
@@ -11189,7 +11194,7 @@ bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& surface,
     {
       return true;
     }
-    SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
+    SMDS_FacePositionPtr pos = tgtNode->GetPosition();
     pos->SetUParameter( newUV.X() );
     pos->SetVParameter( newUV.Y() );
 
@@ -11203,7 +11208,7 @@ bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& surface,
   {
     const TopoDS_Edge&      E = TopoDS::Edge( eos._sWOL );
     const SMDS_MeshNode*   n2 = _simplices[0]._nPrev;
-    SMDS_EdgePosition* tgtPos = static_cast<SMDS_EdgePosition*>( tgtNode->GetPosition() );
+    SMDS_EdgePositionPtr tgtPos = tgtNode->GetPosition();
 
     const double u2     = helper.GetNodeU( E, n2, tgtNode );
     const double uSrc   = _pos[0].Coord( U_SRC );
@@ -11323,7 +11328,7 @@ bool _SmoothNode::Smooth(int&                  nbBad,
     return false;
   }
 
-  SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( _node->GetPosition() );
+  SMDS_FacePositionPtr pos = _node->GetPosition();
   pos->SetUParameter( newPos.X() );
   pos->SetVParameter( newPos.Y() );
 
@@ -11550,7 +11555,7 @@ void _Shrinker1D::Compute(bool set3D, SMESH_MesherHelper& helper)
       if ( !discret.IsDone() )
         return throw SALOME_Exception(LOCALIZED("GCPnts_AbscissaPoint failed"));
       double u = discret.Parameter();
-      SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( _nodes[i]->GetPosition() );
+      SMDS_EdgePositionPtr pos = _nodes[i]->GetPosition();
       pos->SetUParameter( u );
       gp_Pnt p = C->Value( u );
       const_cast< SMDS_MeshNode*>( _nodes[i] )->setXYZ( p.X(), p.Y(), p.Z() );
@@ -11568,7 +11573,7 @@ void _Shrinker1D::Compute(bool set3D, SMESH_MesherHelper& helper)
     {
       if ( !_nodes[i] ) continue;
       double u = f * ( 1-_normPar[i] ) + l * _normPar[i];
-      SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( _nodes[i]->GetPosition() );
+      SMDS_EdgePositionPtr pos = _nodes[i]->GetPosition();
       pos->SetUParameter( u );
     }
   }
@@ -11586,7 +11591,7 @@ void _Shrinker1D::RestoreParams()
     for ( size_t i = 0; i < _nodes.size(); ++i )
     {
       if ( !_nodes[i] ) continue;
-      SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( _nodes[i]->GetPosition() );
+      SMDS_EdgePositionPtr pos = _nodes[i]->GetPosition();
       pos->SetUParameter( _initU[i] );
     }
   _done = false;
index 7c8ebe7767b2d1ab32201f942d59331424984392..f759c4ba08470ebbb0680321be638682213de6f1 100644 (file)
@@ -110,7 +110,7 @@ namespace VISCOUS_2D
     // Proxy sub-mesh of an EDGE. It contains nodes in _uvPtStructVec.
     struct _EdgeSubMesh : public SMESH_ProxyMesh::SubMesh
     {
-      _EdgeSubMesh(int index=0): SubMesh(index) {}
+      _EdgeSubMesh(const SMDS_Mesh* mesh, int index=0): SubMesh(mesh,index) {}
       //virtual int NbElements() const { return _elements.size()+1; }
       virtual int NbNodes() const { return Max( 0, _uvPtStructVec.size()-2 ); }
       void SetUVPtStructVec(UVPtStructVec& vec) { _uvPtStructVec.swap( vec ); }
@@ -118,7 +118,7 @@ namespace VISCOUS_2D
     };
     _ProxyMeshOfFace(const SMESH_Mesh& mesh): SMESH_ProxyMesh(mesh) {}
     _EdgeSubMesh* GetEdgeSubMesh(int ID) { return (_EdgeSubMesh*) getProxySubMesh(ID); }
-    virtual SubMesh* newSubmesh(int index=0) const { return new _EdgeSubMesh(index); }
+    virtual SubMesh* newSubmesh(int index=0) const { return new _EdgeSubMesh( GetMeshDS(), index); }
   };
   //--------------------------------------------------------------------------------
   /*!
@@ -1998,7 +1998,7 @@ bool _ViscousBuilder2D::shrink()
         throw SALOME_Exception(SMESH_Comment("ViscousBuilder2D: not SMDS_TOP_EDGE node position: ")
                                << oldNode->GetPosition()->GetTypeOfPosition()
                                << " of node " << oldNode->GetID());
-      SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( oldNode->GetPosition() );
+      SMDS_EdgePositionPtr pos = oldNode->GetPosition();
       pos->SetUParameter( nodeDataVec[iP].param );
 
       gp_Pnt newP = curve.Value( nodeDataVec[iP].param );
index 74f46994099a8ac3218d37f78b573dc25040009e..e71e0c7795b435c4f5332b12bbe5aa16a6cea191 100644 (file)
@@ -24,7 +24,7 @@ INCLUDE(UseQtExt)
 INCLUDE_DIRECTORIES(
   ${QT_INCLUDES}
   ${VTK_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${PYTHON_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
   ${GUI_INCLUDE_DIRS}
@@ -48,7 +48,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
   ${QWT_DEFINITIONS}
@@ -57,9 +57,8 @@ ADD_DEFINITIONS(
 # libraries to link to
 SET(_link_LIBRARIES
   ${GUI_SalomeApp}
-  ${CAS_TKernel}
-  ${CAS_TKBO}
-  ${CAS_TKAdvTools}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   ${QWT_LIBRARY}
   SalomeIDLSMESH
   SMESHFiltersSelection
index 88ea48899b99667d35607c432b375fdd780e8106..939a42db5e1b8aa4a11450f3858794d581e0bfe0 100644 (file)
@@ -1153,7 +1153,7 @@ QString StdMeshersGUI_CartesianParamCreator::storeParams() const
 
 QString StdMeshersGUI_CartesianParamCreator::helpPage() const
 {
-  return "cartesian_algo_page.html#cartesian_hyp_anchor";
+  return "cartesian_algo.html#cartesian-hyp-anchor";
 }
 
 //================================================================================
index 9f872342df0cd85deee91f18e8a0ef8b6dff727f..f7698b5b46ba177a368adb51d4d71d27fc6ab042 100644 (file)
@@ -219,7 +219,7 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains()
   // aPreviewActor holds a map od all sub-shapes of mainShape
   SMESH_PreviewActorsCollection* previewActor = mySubSelectWdg->GetActorCollection();
   if ( !previewActor ) return false;
-  const QList<int>& egdeIDs = previewActor->GetIndices();
+  const QList<int>& edgeIDs = previewActor->GetIndices();
 
   // Make a 'map' of WIREs of EDGE with quadrilateral WIREs only
 
@@ -277,11 +277,11 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains()
 
   TColStd_MapOfInteger shapeEdges;
   if ( !shape.IsSame( mainShape ))
-    for ( QList<TGeomID>::const_iterator ieIt = egdeIDs.begin(); ieIt != egdeIDs.end(); ++ieIt )
+    for ( QList<TGeomID>::const_iterator ieIt = edgeIDs.begin(); ieIt != edgeIDs.end(); ++ieIt )
       shapeEdges.Add( *ieIt );
 
   // loop on all EDGEs in mainShape
-  for ( QList<TGeomID>::const_iterator ieIt = egdeIDs.begin(); ieIt != egdeIDs.end(); ++ieIt )
+  for ( QList<TGeomID>::const_iterator ieIt = edgeIDs.begin(); ieIt != edgeIDs.end(); ++ieIt )
   {
     if ( chainedEdges.Contains( *ieIt ))
       continue;
@@ -329,7 +329,7 @@ bool StdMeshersGUI_PropagationHelperWdg::buildChains()
       if ( ch.size() < 2 )
         myChains.pop_back();
     }
-  } // loop on egdeIDs
+  } // loop on edgeIDs
 
   return !myChains.empty();
 }
index c608923bdab8f1af0caa3a336778348ff18647e4..d034a08d0ad7df74413e4dbd7ba15c038696c02f 100644 (file)
@@ -74,7 +74,7 @@ StdMeshersGUI_QuadrangleParamCreator::StdMeshersGUI_QuadrangleParamCreator(const
 
 QString  StdMeshersGUI_QuadrangleParamCreator::helpPage() const
 {
-  return "a2d_meshing_hypo_page.html#hypo_quad_params_anchor";
+  return "2d_meshing_hypo.html#hypo-quad-params-anchor";
 }
 
 //=======================================================================
index 04e09cfb6445d68254607ffd85d9abb5c01708c0..bcbb3fe2ee717f80670a46782a54664e6e96a417 100644 (file)
@@ -20,7 +20,7 @@
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${HDF5_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
@@ -47,7 +47,7 @@ ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
 )
@@ -61,8 +61,7 @@ ENDIF(WIN32)
 SET(_link_LIBRARIES
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_SalomeGenericObj}
-  ${CAS_TKBRep}
-  ${CAS_TKG3d}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
   SalomeIDLSMESH
   StdMeshers
   SMESHEngine
index bcce71e8b5b0422616c3589fdcb7d3d1f1e95ddc..19b9fb6d46f686c7558a61f1b358a094c1c24df1 100644 (file)
@@ -26,7 +26,7 @@ ADD_SUBDIRECTORY(MacMesh)
 IF(SALOME_BUILD_GUI)
   ADD_SUBDIRECTORY(MGCleanerPlug)
   ADD_SUBDIRECTORY(YamsPlug)
-  ADD_SUBDIRECTORY(ZCracksPlug)
+#  ADD_SUBDIRECTORY(ZCracksPlug)
 ENDIF(SALOME_BUILD_GUI)
 
 # scripts / static
index 5bcb15973aa114edd49d4ba192061fedf7e54e85..21216e96e2d10bb644e9b557c3b542bcb42fa3f6 100644 (file)
@@ -581,7 +581,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
       self.commande+=" --resolution_length " + self.SP_toStr(self.SP_ResolutionLength)
     self.commande+=" --folding_angle " + str(self.SP_FoldingAngle.value())
     if self.CB_RemeshPlanes.isChecked(): #no remesh default
-      self.commande+=" --remesh_planes"
+      self.commande+=" --remesh_planes yes"
     if not self.CB_ComputedOverlapDistance.isChecked(): #computed default
       self.commande+=" --overlap_distance " + self.SP_toStr(self.SP_OverlapDistance)
     self.commande+=" --overlap_angle " + str(self.SP_OverlapAngle.value())
index 7b768d84f78b32a0a72669cf0bc2647e140ddcf8..304724e4897dc6c779e07c72654f25419a6c3c8d 100644 (file)
@@ -53,27 +53,49 @@ def PublishGroups ():
 
         # Geometric groups definition
         TempGEOList = []
-        TempNames = []
-        for MacroObj in Config.ListObj :
-            if group in MacroObj.GroupNames :
-                Occurences = IndexMultiOcc(MacroObj.GroupNames, group)
-                for Occ in Occurences :
-                    TempGEOList += MacroObj.GetBorder(Occ)
-        GroupGEO.append(geompy.MakeCompound(TempGEOList))
-        geompy.addToStudyInFather(FinalCompound,GroupGEO[-1],'GR_'+group)
-
-        # Mesh groups definition
-        Criterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_BelongToGeom,'=',GroupGEO[-1],Tolerance=1e-06)
-        #Criterion = smesh.Filter.Criterion(18,39,0,'GR_'+group,'GR_'+group,39,39,1e-06,smesh.EDGE,7)
-        MeshCompound.MakeGroupByCriterion(group,Criterion)
-
-    StudyBuilder = Config.theStudy.NewBuilder()
-    for MeshObj in TempMESHList:
-        SO = Config.theStudy.FindObjectIOR(Config.theStudy.ConvertObjectToIOR(MeshObj))
-        if SO is not None: StudyBuilder.RemoveObjectWithChildren(SO)
-
-    return MeshCompound
+        aFilterManager = smesh.CreateFilterManager()
 
+        # Building geometric and mesh compounds and  groups ##############################################
+        if Config.debug : print("Searching for geometric groups and publishing final compound")
+        
+        TempGEOList = []
+        TempMESHList = []
+        
+        for MacroObj in Config.ListObj : 
+                TempGEOList += MacroObj.GeoChildren
+                TempMESHList += MacroObj.Mesh
+                
+        FinalCompound = geompy.MakeCompound(TempGEOList)
+        geompy.addToStudy (FinalCompound,Config.StudyName)
+        MeshCompound = smesh.Concatenate(TempMESHList, 1, 1, 1e-5)
+        MeshCompound.SetName(Config.StudyName)
+        
+        GroupGEO = []
+        for group in Config.Groups :
+        
+                # Geometric groups definition
+                TempGEOList = []
+                TempNames = []
+                for MacroObj in Config.ListObj :
+                        if group in MacroObj.GroupNames :
+                                Occurrences = IndexMultiOcc(MacroObj.GroupNames, group)
+                                for Occ in Occurrences :
+                                        TempGEOList += MacroObj.GetBorder(Occ)
+                GroupGEO.append(geompy.MakeCompound(TempGEOList))
+                geompy.addToStudyInFather(FinalCompound,GroupGEO[-1],'GR_'+group)
+                
+                # Mesh groups definition
+                Criterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_BelongToGeom,'=',GroupGEO[-1],Tolerance=1e-06)
+                #Criterion = smesh.Filter.Criterion(18,39,0,'GR_'+group,'GR_'+group,39,39,1e-06,smesh.EDGE,7)
+                MeshCompound.MakeGroupByCriterion(group,Criterion)
+        
+        StudyBuilder = Config.theStudy.NewBuilder()
+        for MeshObj in TempMESHList:
+                SO = Config.theStudy.FindObjectIOR(Config.theStudy.ConvertObjectToIOR(MeshObj))
+                if SO is not None: StudyBuilder.RemoveObjectWithChildren(SO)
+        
+        return MeshCompound        
+                
 
 def IndexMultiOcc (Array,Element) :
     """
index ba6fef3a59d78146240d4f93f37935eba405176c..d8a1f560cd4a67603d371d5f13c90bd975fca90d 100644 (file)
@@ -35,7 +35,7 @@ These two parameters allow the user to prescribe a Maximal/Minimal size for the
 
 - **Mesh gradation**
 This parameter P controls the element size variation : MeshGems-SurfOpt will avoid having two adjacent edges which sizes vary more than the given gradation. A size correction is applied to the size map : if two adjacent edges are respectively e1 and e2 long and e2 > Pxe1, then, the new size for the second edge will be set to P x e1.
-**This procedure is deactived if P=-1**
+**This procedure is deactivated if P=-1**
 
 
 
index 8d9cf55608b7545674058d6782994218da5ac21c..14e9b9987a49be75ea60fe0650b654fd9720e3e3 100644 (file)
@@ -22,7 +22,7 @@ Simple case
 Optimisation
 ------------
     
-This is the main remeshing Option.  SurfOpt always does quality improvement. It is done by point smooting and edge swapping.  It can produce a regular mesh for finite element computation (initial mesh is a a geometrical mesh). In this case, the given surface trianglation is modified in accordance to a size map : an intrinsic size map is computed automatically. it is based on the surface proporties.  SurfOpt is also able to  produce a geometrical mesh (initial mesh is a a mesh for finite element computation). In both case, It can coarsen or enrich the mesh.     
+This is the main remeshing Option.  SurfOpt always does quality improvement. It is done by point smoothing and edge swapping.  It can produce a regular mesh for finite element computation (initial mesh is a a geometrical mesh). In this case, the given surface trianglation is modified in accordance to a size map : an intrinsic size map is computed automatically. it is based on the surface proporties.  SurfOpt is also able to  produce a geometrical mesh (initial mesh is a mesh for finite element computation). In both case, It can coarsen or enrich the mesh.     
 
    - **Quality improvement** 
 
index bd0c443f38e5295e650b8f1825b949f3b12660ca..2aaeb8cae9cc5830fceedab2e2a10df2e72f74b2 100755 (executable)
 #
 
 SALOME_CONFIGURE_FILE(doxyfile.in doxyfile)
+SALOME_CONFIGURE_FILE(static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html)
 
 ADD_CUSTOM_TARGET(usr_padder_docs ${DOXYGEN_EXECUTABLE})
 
-#ADD_DEPENDENCIES(usr_padder_docs html_docs)
-
 INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target usr_padder_docs)")
 INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/padder DESTINATION ${SALOME_INSTALL_DOC}/gui/SMESH)
 
index 3882dcbd3ed766998f0cd8b073a6805d60f416a9..cbbc635f6ba0b9cb50bfc80109a4b81f244eb8a7 100755 (executable)
@@ -46,9 +46,9 @@ EXAMPLE_PATH      = @PROJECT_SOURCE_DIR@/src/SMESH_SWIG
 #---------------------------------------------------------------------------
 GENERATE_HTML     = YES
 HTML_OUTPUT       = .
-HTML_HEADER       = @PROJECT_BINARY_DIR@/doc/salome/gui/SMESH/static/header.html
-HTML_FOOTER       = @PROJECT_SOURCE_DIR@/doc/salome/gui/SMESH/static/footer.html
-HTML_STYLESHEET   = @PROJECT_SOURCE_DIR@/doc/salome/gui/SMESH/static/doxygen.css
+HTML_HEADER       = @CMAKE_CURRENT_BINARY_DIR@/static/header.html
+HTML_FOOTER       = @CMAKE_CURRENT_SOURCE_DIR@/static/footer.html
+HTML_STYLESHEET   = @CMAKE_CURRENT_SOURCE_DIR@/static/doxygen.css
 TOC_EXPAND        = YES
 DISABLE_INDEX     = NO
 GENERATE_TREEVIEW = YES
diff --git a/src/Tools/padder/doc/static/footer.html b/src/Tools/padder/doc/static/footer.html
new file mode 100755 (executable)
index 0000000..7cf11fe
--- /dev/null
@@ -0,0 +1,14 @@
+<!-- HTML footer for doxygen 1.8.3.1-->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    $navpath
+    <li class="footer">
+      Copyright &copy; 2007-2017  CEA/DEN, EDF R&amp;D, OPEN CASCADE<br>
+      Copyright &copy; 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&amp;D, LEG, PRINCIPIA R&amp;D, BUREAU VERITAS<br>
+    </li>
+  </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/src/Tools/padder/doc/static/header.html.in b/src/Tools/padder/doc/static/header.html.in
new file mode 100755 (executable)
index 0000000..45674df
--- /dev/null
@@ -0,0 +1,23 @@
+<!-- HTML header for doxygen 1.8.3.1-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<div id="titlearea"><div align="right"><div class="version">Version: @SALOMESMESH_VERSION@</div></div></div>
+<!-- end header part -->
diff --git a/src/Tools/padder/doc/static/salome_extra.css b/src/Tools/padder/doc/static/salome_extra.css
new file mode 100644 (file)
index 0000000..3e8b838
--- /dev/null
@@ -0,0 +1,29 @@
+/* The extra CSS for doxygen 1.8.3.1 */
+
+#titlearea {
+        background-image:url('head.png');
+        background-color: #175783;
+        border: 1px solid;
+        height: 80px;
+        background-repeat: no-repeat;
+       padding: 0px;
+       margin: 0px;
+       width: 99.9%;
+       border-bottom: 1px solid #5373B4;
+}
+
+div.version {
+       border:1px solid #0000FF;
+        color: #CCCCCC;
+       font-family: Arial, Helvetica, sans-serif;
+       font-size: 9pt;
+       text-align: center;
+       width:100px;
+       -moz-border-radius: 8px;
+       margin: 5px;
+}
+
+.navpath li.footer {
+       line-height:15px;
+       text-align: right;
+}
\ No newline at end of file
index 28ab36e1145efb028c2bd6468966b9ac3d7d1b9f..fb2ac2df07ac52b5aa280700fbea2f170bb12535 100644 (file)
@@ -23,7 +23,7 @@ INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${Boost_INCLUDE_DIRS}
   ${OMNIORB_INCLUDE_DIR}
   ${LIBXML2_INCLUDE_DIR}
@@ -38,7 +38,7 @@ INCLUDE_DIRECTORIES(
 
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${LIBXML2_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
index 44796efa5ebb8141d713ad7996aa6d945d6ee0de..cb14896ab3aa3f7194ab4efa53a0e962cd8afb7d 100644 (file)
@@ -100,10 +100,10 @@ class PluginDialog(QDialog):
 
     def setupJobManager(self):
         '''
-        This function configures the jobmanager by transmiting the
+        This function configures the jobmanager by transmitting the
         parameters required for a local execution and a remote
         execution. The choice between "local" and "remote" is done at
-        the initialize step, by specifing the name of the resource to
+        the initialize step, by specifying the name of the resource to
         be used.
         '''
         # We first